JamJet

MCP 集成

使用模型上下文协议将 JamJet 连接到外部工具服务器。

MCP 集成

JamJet 对 模型上下文协议 (MCP) 提供一流支持——这是连接 AI 代理与外部工具、数据源和服务的开放标准。

什么是 MCP?

MCP 定义了 AI 代理发现和调用外部工具的标准方式。MCP 服务器暴露带有类型化模式的工具;MCP 客户端(JamJet)发现这些工具并调用它们。

这意味着你可以将 JamJet 连接到任何兼容 MCP 的工具服务器——现在有数百个社区服务器支持网页搜索、数据库、GitHub、Slack、文件系统等功能。

配置 MCP 服务器

在项目根目录的 jamjet.toml 中添加服务器:


# 本地 stdio 服务器(开发中最常用)

[[mcp.servers]]
name = "brave-search"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-brave-search"]
env = { BRAVE_API_KEY = "${BRAVE_API_KEY}" }

# 本地 Python 服务器

[[mcp.servers]]
name = "my-tools"
command = "python"
args = ["-m", "my_tools.server"]

# 远程 HTTP 服务器(SSE 传输)

[[mcp.servers]]
name = "remote-api"
url = "https://tools.example.com/mcp"
headers = { Authorization = "Bearer ${TOOLS_API_KEY}" }

jamjet dev 启动时,JamJet 会连接到所有配置的服务器。

在工作流中使用工具

YAML

nodes:
  search:
    type: tool
    server: brave-search        # 匹配 jamjet.toml 中的 `name`
    tool: web_search            # MCP 服务器的工具名称
    arguments:
      query: "{{ state.query }}"
      count: 10
    output_key: search_results
    next: summarize

Python SDK

@node
async def search(self, state: State) -> State:
    result = await self.tool(
        server="brave-search",
        tool="web_search",
        arguments={"query": state["query"], "count": 10},
    )
    return {"search_results": result.content}

发现可用工具

列出已连接服务器的所有工具:

jamjet tools list
Server: brave-search
  web_search(query: str, count: int) → list[SearchResult]
  news_search(query: str, freshness: str) → list[NewsItem]

Server: my-tools
  run_query(sql: str) → list[dict]
  get_schema(table: str) → dict

直接测试工具:

jamjet tools call brave-search web_search --args '{"query": "JamJet runtime", "count": 3}'

构建 MCP 服务器

JamJet 也可以通过 MCP 提供工具,将你的工作流暴露为可供其他 agent 调用的工具。

jamjet.toml 中添加:

[mcp.server]
enabled = true
port = 7701
workflows = ["my-agent", "research-agent"]   # 将这些暴露为工具

你暴露的任何工作流都会成为可调用的 MCP 工具。其他 agent 可以发现它,查看其输入/输出模式,并调用它——完全不需要知道底层是 JamJet。


# 与运行时一起启动 MCP 服务器

jamjet dev --with-mcp-server

常用 MCP 服务器

服务器提供功能
Brave Search@modelcontextprotocol/server-brave-search网络 + 新闻搜索
GitHub@modelcontextprotocol/server-github仓库、issue、PR
Filesystem@modelcontextprotocol/server-filesystem读写本地文件
PostgreSQL@modelcontextprotocol/server-postgresSQL 查询
Slack@modelcontextprotocol/server-slack消息、频道
Memory@modelcontextprotocol/server-memory持久化键值存储

提示:github.com/modelcontextprotocol/servers 查看社区 MCP 服务器的完整列表。

工具输出

工具结果在 state 中的 output_key 下可用。具体格式取决于工具——使用 jamjet tools list 查看模式。

对于多步工作流,中间工具结果会累积在 state 中:

nodes:
  search:
    type: tool
    server: brave-search
    tool: web_search
    arguments:
      query: "{{ state.query }}"
    output_key: search_results   # → state.search_results = [...]
    next: docs

  docs:
    type: tool
    server: brave-search
    tool: web_search
    arguments:
      query: "{{ state.query }} documentation"
    output_key: doc_results      # → state.doc_results = [...]
    next: synthesize

错误处理

工具调用可能因多种原因失败——网络错误、无效参数、速率限制。为每个节点配置重试行为:

  search:
    type: tool
    server: brave-search
    tool: web_search
    arguments:
      query: "{{ state.query }}"
    output_key: search_results
    retry:
      max_attempts: 3
      backoff: exponential
      delay_ms: 1000
    next: summarize

如果所有重试都失败,执行将被标记为 failed,可以手动恢复或重试。

On this page