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: summarizePython 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 listServer: 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-postgres | SQL 查询 |
| 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,可以手动恢复或重试。