Skip to main content
Model Context Protocol(MCP)是一个开放标准,用于将 AI 系统连接到外部工具和数据源。QitOS 提供了内置桥接功能:发现 MCP 服务器上的工具,将其 JSON Schema 转换为 QitOS ToolSpec 对象,并封装为 FunctionTool——因此 MCP 工具与原生 QitOS 工具的使用方式完全一致。

Step 1: 连接 MCP 服务器

QitOS 内置两种传输实现。对于以命令行进程方式运行的本地 MCP 服务器,使用 MCPServerStdio
对于提供 HTTP 端点的远程 MCP 服务器,使用 MCPServerStreamableHttp
两种传输都会在 connect() 期间自动完成 MCP 初始化握手。连接成功后,可以列出可用工具:
list_tools() 返回的每个 MCPToolInfo 包含 namedescriptioninput_schema

Step 2: 将 MCP 工具桥接到 QitOS

mcp_server_to_function_tools 函数将已连接的 MCP 服务器上的每个工具转换为 FunctionTool 实例:
每个返回的 FunctionTool 封装了一次远程 MCP 调用。当工具被执行时,QitOS 向 MCP 服务器发送 tools/call JSON-RPC 请求并返回结果。 当需要将多个服务器桥接到同一注册表时,可以添加名称前缀来消除歧义:
像注册其他工具一样,将桥接后的工具注册到 ToolRegistry

Step 3: 过滤工具

MCP 服务器通常暴露很多工具,但你的智能体可能只需要其中一部分。ToolFilter 控制哪些工具会被桥接: 仅允许特定工具:
阻止特定工具:
自定义过滤函数:
可以同时组合允许列表和阻止列表。工具名必须在允许列表中(如果设置了的话)且不在阻止列表中:
评估顺序如下:
  1. 如果设置了 filter_func,其返回值为最终结果。
  2. 如果设置了 allowed_tool_names,只有集合中的名称通过。
  3. 如果设置了 blocked_tool_names,集合中的名称被排除。
  4. 否则名称通过(无过滤)。

Step 4: 异步生命周期

MCP 服务器连接持有资源(子进程、HTTP 客户端),必须进行清理。务必将 connect()cleanup() 配对使用:
MCPServerStdio.cleanup() 终止子进程(先 SIGTERM,5 秒超时后 SIGKILL)。MCPServerStreamableHttp.cleanup() 关闭 HTTP 客户端会话。 完整的智能体集成模式示例:
当智能体会话结束时,记得调用 await server.cleanup()

下一步

@function_tool API

学习用装饰器方式从 Python 函数创建原生 QitOS 工具。

构建你的第一个智能体

在 AgentModule 中使用桥接的 MCP 工具,运行真实的大模型循环。