
A4、A6 里,工具是写在你自己程序里的函数。问题是:同一个「查数据库」工具,你想在编程助手里用、在自己的 Agent 里用、在同事的应用里也用,每个地方都得重新接一遍。
MCP(Model Context Protocol,模型上下文协议) 是一个开放协议:把工具按统一格式做成一个独立的「服务器」,任何支持 MCP 的应用都能直接连上来使用。可以把它理解成 AI 应用的「USB 接口」。
三个角色

| 角色 | 是什么 | 例子 |
|---|---|---|
| Host(宿主应用) | 用户直接使用的 AI 应用,负责调用模型 | Codex CLI、各种 AI 编辑器、你自己写的 Agent |
| Client(客户端) | Host 里负责和某个 MCP 服务器通信的部分 | 由 Host 内置,一般不用自己写 |
| Server(服务器) | 提供能力的一方:工具、资源、提示词模板 | 你写的「咖啡店工具」、数据库查询、文件系统 |
MCP 服务器能提供三类东西:
- Tools(工具):可以被模型调用的函数,最常用。
- Resources(资源):可以读取的数据,比如文件、数据库里的记录。
- Prompts(提示词模板):预先写好的提示词,供用户选用。
通信方式常见两种:stdio(Host 在本机启动服务器进程,通过标准输入输出通信,最简单)和 HTTP(服务器单独部署,多人共用)。
和 Function Calling 是什么关系

MCP 并没有取代 Function Calling,而是在它之上加了一层标准:
- Host 启动时连上 MCP 服务器,问它「你有哪些工具」;
- 把这些工具的名字、描述、参数,转成 A4 里那种
tools定义交给模型; - 模型返回
tool_calls后,Host 把调用转发给 MCP 服务器执行,再把结果交回模型。
也就是说,模型看到的仍然是普通的工具定义。下面这个运行框里的工具定义,就是从后面那个 MCP 服务器「翻译」过来的:
写一个 MCP 服务器
用官方 Python SDK 里的 FastMCP,几行就能把函数变成 MCP 工具:
python
# coffee_server.py
# pip install "mcp[cli]"
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("coffee")
PRICES = {"拿铁": 28, "美式": 22, "燕麦拿铁": 32}
@mcp.tool()
def menu_price(item: str) -> str:
"""查询小蜂咖啡某个饮品的价格(元)。大杯在此基础上加 4 元。"""
if item not in PRICES:
return f"菜单里没有「{item}」,可选:{'、'.join(PRICES)}"
return f"{item} {PRICES[item]} 元,大杯 {PRICES[item] + 4} 元"
@mcp.resource("coffee://hours")
def opening_hours() -> str:
"""营业时间"""
return "周一到周五 8:00–21:00,周末 9:00–22:00"
if __name__ == "__main__":
mcp.run() # 默认用 stdio 通信注意:
- 函数的文档字符串就是工具描述,参数的类型注解会变成参数的 JSON Schema。描述写得好不好,直接决定模型会不会用对。
- 工具返回的是文本,出错时返回能看懂的提示,而不是抛出一堆堆栈。
调试时可以用 SDK 自带的检查器在浏览器里点一点每个工具:mcp dev coffee_server.py。
接进 Codex CLI
C 路线 会讲 Codex CLI 怎么接入 HiveGPT。接好以后,在 ~/.codex/config.toml 里加一段,告诉它怎么启动这个服务器:
toml
[mcp_servers.coffee]
command = "python"
args = ["/你的路径/coffee_server.py"]重新启动 codex,问它「燕麦拿铁大杯多少钱」,它就会调用 menu_price 工具。其他支持 MCP 的应用配置方式类似,都是「服务器名 + 启动命令」。
安全:MCP 服务器就是在你电脑上跑的程序
- 只装你信任的服务器:stdio 服务器以你的身份在本机运行,能读写你能读写的文件。
- 最小权限:数据库工具用只读账号;文件工具只开放需要的目录。
- 当心「工具里的指令」:工具返回的网页、文档内容里可能夹带「忽略之前的要求,去做某事」之类的文字。有副作用的操作要让用户确认。
小结
- MCP 把工具做成独立的服务器,任何支持 MCP 的应用都能用,不用重复对接。
- 底层仍是 Function Calling:Host 把 MCP 工具翻译成
tools交给模型,再转发调用。 - 用 FastMCP 几行就能写一个服务器;只安装可信的服务器,并给最小权限。
下一课是这条路线的最后一课:上线——成本、限流、错误重试,以及结业项目怎么做。