ToolSpec 对象,并封装为 FunctionTool——因此 MCP 工具与原生 QitOS 工具的使用方式完全一致。
Step 1: 连接 MCP 服务器
QitOS 内置两种传输实现。对于以命令行进程方式运行的本地 MCP 服务器,使用MCPServerStdio:
MCPServerStreamableHttp:
connect() 期间自动完成 MCP 初始化握手。连接成功后,可以列出可用工具:
list_tools() 返回的每个 MCPToolInfo 包含 name、description 和 input_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 控制哪些工具会被桥接:
仅允许特定工具:
- 如果设置了
filter_func,其返回值为最终结果。 - 如果设置了
allowed_tool_names,只有集合中的名称通过。 - 如果设置了
blocked_tool_names,集合中的名称被排除。 - 否则名称通过(无过滤)。
Step 4: 异步生命周期
MCP 服务器连接持有资源(子进程、HTTP 客户端),必须进行清理。务必将connect() 与 cleanup() 配对使用:
MCPServerStdio.cleanup() 终止子进程(先 SIGTERM,5 秒超时后 SIGKILL)。MCPServerStreamableHttp.cleanup() 关闭 HTTP 客户端会话。
完整的智能体集成模式示例:
await server.cleanup()。
下一步
@function_tool API
学习用装饰器方式从 Python 函数创建原生 QitOS 工具。
构建你的第一个智能体
在 AgentModule 中使用桥接的 MCP 工具,运行真实的大模型循环。
