02Bread MCP · 第 5 章
总进度 14 / 33

把 MCP server 接到 Bread Agent

原来的示例直接把 Python 函数注册在 Agent 进程里。现在希望工具可以单独维护,Agent 启动时再询问有哪些工具,而不用把每个工具函数都写进自身代码。

2026-09-28约 45 分钟250 行代码难度 ★★★

如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。

1. 让 Agent 从服务端取得工具清单

回想 Bread Agent ch02——所有工具是这样的:

TOOLS_IMPL = {
    "read_file": read_file,     # 本地 Python 函数
    "write_file": write_file,
    ...
}

原来的示例直接把 Python 函数注册在 Agent 进程里。现在希望工具可以单独维护,Agent 启动时再询问有哪些工具,而不用把每个工具函数都写进自身代码。

MCP 解决的就是这件事。本章的 Agent 启动时:

1. 启动一个 MCP server 子进程(可以是任意语言写的任意 server)
2. 通过协议向它问:"你有哪些工具?参数长啥样?"
3. 把拿到的 schema 翻译成 OpenAI 的格式给 LLM
4. LLM 想调工具 → 我们通过协议远程调用 → 把结果带回

工具名称和说明从服务端的 tools/list 返回。Agent 根据这份清单准备模型请求,不需要预先写死 read_file 等名称。

┌──────────────────┐                ┌────────────────────┐
│   Bread Agent    │   stdio MCP    │   MCP server       │
│  + MCPClient     │ ◄────────────► │  (任意进程/语言)    │
│                  │                │  read_file/list/...│
└──────────────────┘                └────────────────────┘
       ↑                                     ↑
   主进程跑                            子进程跑(也可以是远程)

本章接通的是本机 stdio 服务,并使用文本工具结果。更换服务器时,仍要检查它的协议版本、传输方式和返回类型是否在当前客户端支持范围内。

<!-- bread-visual:start -->

工具移到另一个进程,循环仍然不变

图解: 本章使用本机 stdio 子进程连接。 工具清单来自 tools/list;stdio 连接本机子进程,不直接连接远程主机。

<!-- bread-visual:end -->

2. 跑起来

cd ch04_with_agent
python main.py

本章需要 .env。如果你做过 Bread Agent,main.py 已经写好了回退逻辑——会自动找 bread-agent/.env。否则在 bread-mcp/.env 配。

启动后:

已连接 MCP server: bread-mcp-fs v0.1.0

[agent] 已发现 3 个 MCP 工具: get_time, list_dir, read_file

Bread MCP × Bread Agent · v1
输入消息开始对话;Ctrl+C 退出。

你 > 现在几点
  [step 0] mcp.call_tool get_time({})
  [step 0] -> 2026-05-18 09:15:42
AI > 现在是 2026 年 5 月 18 日 09:15:42。

你 > 列出当前目录都有什么
  [step 0] mcp.call_tool list_dir({'path': '.'})
  [step 0] -> DIR  __pycache__
FILE README.md
FILE agent.py
...
AI > 当前目录下有 5 个文件...

试读到这里 · 后续内容已封存

关注公众号,继续把这章学完

在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。