工作流聊天驱动服务器

Temporal-MCP是一个连接AI助手(如Claude)和Temporal工作流的服务器,将复杂的后端编排转化为简单的聊天驱动命令。

  • by brief-hq
  • Go
  • 本地部署
  • 60 星标
  • 更新于
在 GitHub 查看 mocksi/temporal-mcp

使用说明

⏰🧠 临时MCP服务器

Temporal MCP是一个连接AI助手(如Claude)和Temporal工作流的MCP服务器。它将复杂的后端编排转化为简单的聊天驱动命令。想象一下,在不编写一行粘合代码的情况下触发有状态的进程。时间MCP使这成为可能。

为什么选择时态MCP

  • 超级AI --人工智能助手获得可靠、长期运行的工作流程超能力
  • 会话编排 --通过自然语言触发、监控和管理工作流
  • 企业就绪 --利用Temporal的重试、超时和持久性——以明文形式公开

✨ 主要特点

  • 🔍 自动发现 --探索可用的工作流程并查看丰富的元数据
  • 🏃‍♂️ 无缝执行 --只需一条聊天消息,即可启动复杂的流程
  • 📊 实时监控 --跟踪进度、检查状态并获取实时更新
  • ⚡ 性能优化 --智能缓存,提供即时答案
  • 🧠 AI友好描述 --为人类和机器编写的目的字段

🏁 入门指南

先决条件

  • 转到1.21+ --用于构建和运行MCP服务器
  • 临时服务器 --本地或远程运行(请参阅 临时文档)

快速安装

  1. 运行Temporal服务器和workers 在这个例子中,我们将使用 临时转账演示.

MCP设置

让Claude(或类似的启用MCP的AI助手)通过5个简单步骤与您的工作流程对话:

  1. 构建服务器
git clone https://github.com/Mocksi/temporal-mcp.git
cd temporal-mcp
make build
  1. 定义您的工作流程 在 config.yml 示例配置(config.sample.yml)设计用于与 临时转账演示:
workflows:
  AccountTransferWorkflow:
    purpose: "Transfers money between accounts with validation and notification. Handles the happy path scenario where everything works as expected."
    input:
      type: "TransferInput"
      fields:
        - from_account: "Source account ID"
        - to_account: "Destination account ID"
        - amount: "Amount to transfer"
    output:
      type: "TransferOutput"
      description: "Transfer confirmation with charge ID"
    taskQueue: "account-transfer-queue"

  AccountTransferWorkflowScenarios:
    purpose: "Extended account transfer workflow with various scenarios including human approval, recoverable failures, and advanced visibility features."
    input:
      type: "TransferInput"
      fields:
        - from_account: "Source account ID"
        - to_account: "Destination account ID"
        - amount: "Amount to transfer"
        - scenario_type: "Type of scenario to execute (human_approval, recoverable_failure, advanced_visibility)"
    output:
      type: "TransferOutput"
      description: "Transfer confirmation with charge ID"
    taskQueue: "account-transfer-queue"
  1. 生成Claude的配置
cd examples
./generate_claude_config.sh
  1. 安装配置
cp examples/claude_config.json ~/Library/Application\ Support/Claude/claude_desktop_config.json
  1. 启动克劳德 使用此配置

与您的工作流程对话

现在是魔术部分!使用自然语言通过Claude与您的工作流程对话:

💬 克劳德,你能把100美元从ABC123账户转到XYZ789账户吗

💬 “有哪些传输场景可供测试?”

💬 “在账户ABC123和XYZ789之间执行需要人工批准的500美元转账”

💬 “传输工作流是否已完成?”

💬 “运行具有可恢复故障的传输场景,以测试错误处理”

在后台,Temporal MCP将这些自然语言请求转换为正确格式化的工作流执行,而不是更复杂的API调用或参数格式化!

核心价值观

  1. 清晰度优先 --使用简单、直接的语言。避免使用行话。
  2. 利益驱动 --以“这对我有什么好处”作为开头。
  3. 简洁的力量 --少即是多——保持句子紧凑,令人难忘。
  4. 个性与声音 --大胆的声明,简短的台词,一丝兴奋。

准备展示

灯光、相机、动作——捕捉你的第一个人工智能驱动的工作流程。分享那一刻。激励他人观看Temporal MCP的实际操作。

发展

项目结构

./
├── cmd/            # Entry points for executables
├── internal/       # Internal package code
│   ├── api/        # MCP API implementation
│   ├── cache/      # Caching layer
│   ├── config/     # Configuration management
│   └── temporal/   # Temporal client integration
├── examples/       # Example configurations and scripts
└── docs/           # Documentation

常用命令

命令 描述
make build 在中构建二进制文件 ./bin
make test 运行所有单元测试
make fmt 根据Go标准格式化代码
make run 构建并运行服务器
make clean 删除构建工件

🔍 故障排除

常见问题

连接被拒绝

  • ✓ 检查Temporal服务器是否正在运行
  • ✓ 验证config.yml中的hostPort是否正确

未找到工作流

  • ✓ 确保工作流已在Temporal中注册
  • ✓ 检查config.yml中的命名空间设置

Claude看不到工作流

  • ✓ 验证claude_config.json是否在正确的位置
  • ✓ 配置更改后重新启动Claude

⚙️ 配置

Temporal MCP的核心是它的配置文件,它将您的AI助手连接到您的工作流引擎:

配置架构

你的 config.yml 由三个关键部分组成:

  1. 🔌 时间连接 --如何连接到Temporal服务器
  2. 💾 缓存设置 --工作流结果的性能优化
  3. 🔧 工作流定义 --您的AI可以发现和使用的工作流程

配置示例

示例配置旨在与Temporal Money Transfer Demo配合使用:

# Temporal server connection details
temporal:
  hostPort: "localhost:7233"       # Your Temporal server address
  namespace: "default"             # Temporal namespace
  environment: "local"             # "local" or "remote"
  defaultTaskQueue: "account-transfer-queue"  # Default task queue for workflows

  # Fine-tune connection behavior
  timeout: "5s"                    # Connection timeout
  retryOptions:                     # Robust retry settings
    initialInterval: "100ms"       # Start with quick retries
    maximumInterval: "10s"         # Max wait between retries
    maximumAttempts: 5              # Don't try forever
    backoffCoefficient: 2.0         # Exponential backoff

# Define AI-discoverable workflows
workflows:
  AccountTransferWorkflow:
    purpose: "Transfers money between accounts with validation and notification. Handles the happy path scenario where everything works as expected."
    workflowIDRecipe: "transfer_{{.from_account}}_{{.to_account}}_{{.amount}}"
    input:
      type: "TransferInput"
      fields:
        - from_account: "Source account ID"
        - to_account: "Destination account ID"
        - amount: "Amount to transfer"
    output:
      type: "TransferOutput"
      description: "Transfer confirmation with charge ID"
    taskQueue: "account-transfer-queue"
    activities:
      - name: "validate"
        timeout: "5s"
      - name: "withdraw"
        timeout: "5s"
      - name: "deposit"
        timeout: "5s"
      - name: "sendNotification"
        timeout: "5s"
      - name: "undoWithdraw"
        timeout: "5s"

💡 专业提示: 示例配置已预先配置为与 临时转账演示。将其用作您自己工作流程的起点。

💎 最佳实践

打造完美用途领域

这 purpose 字段是您的AI助手了解每个工作流的窗口。让它有意义!

✅ 这样做

  • 编写清晰、详细的功能描述
  • 提及关键参数以及它们如何定制行为
  • 描述预期输出及其格式
  • 注意任何限制或约束

❌ 避免这种情况

  • 模糊的描述(“流程数据”)
  • 没有解释的技术术语
  • 缺少重要参数
  • 忽略错误情况或限制

之前和之后

之前: “获取有关文件的信息。”

之后: 检索有关文件或目录的详细元数据,包括大小、创建时间、上次修改时间、权限和类型。执行访问验证以确保请求的文件在允许的目录内。返回带所有属性的格式化JSON或相应的错误消息

命名约定

项目 惯例 示例
工作流ID PascalCase AccountTransferWorkflow
参数名称 snake_case from_account, to_account
带单位的参数 包括单位 timeout_seconds, amount

安全指南

⚠️ 重要安全注意事项:

  • 将凭据从配置文件中删除
  • 对敏感值使用环境变量
  • 考虑对包含敏感数据的工作流进行访问控制
  • 验证并清理所有工作流输入

💡 提示: 为开发和生产环境创建不同的配置

为什么好的目的字段很重要

  1. 增强对人工智能的理解 -当Claude和其他人工智能工具充分了解每个组件的功能和局限性时,它们可以提供更准确和更有用的响应
  2. 错误 -详细的描述减少了人工智能系统错误使用组件的机会
  3. 改进调试 -清晰的描述有助于在工作流不按预期运行时识别问题
  4. 更好的开发人员体验 -新团队成员可以更快地了解您的系统
  5. 文档即代码 -目的字段充当与代码库保持同步的动态文档

贡献与协作

我们正在一起建造这个。

  • 共享您自己的工作流配置
  • 改进描述
  • 在问题中分享您的演示(视频或GIF)

让我们一起释放AI和Temporal的力量!

📜 许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。 欢迎投稿!