Skip to content
A · AI 应用开发入门第 7 课⏱ 15 分钟

MCP 入门:把工具做成标准插件

学完你能
  • 说清楚 MCP 解决什么问题,以及 Host、Client、Server 的分工
  • 用 Python 写一个提供工具的 MCP 服务器
  • 把它接进支持 MCP 的应用(以 Codex CLI 为例)
MCP 像标准插座连接 AI 与工具
MCP 像标准插座连接 AI 与工具AI 生成配图

A4、A6 里,工具是写在你自己程序里的函数。问题是:同一个「查数据库」工具,你想在编程助手里用、在自己的 Agent 里用、在同事的应用里也用,每个地方都得重新接一遍。

MCP(Model Context Protocol,模型上下文协议) 是一个开放协议:把工具按统一格式做成一个独立的「服务器」,任何支持 MCP 的应用都能直接连上来使用。可以把它理解成 AI 应用的「USB 接口」。

三个角色 ​

三层角色像驿站协作分发工具
三层角色像驿站协作分发工具AI 生成配图
角色是什么例子
Host(宿主应用)用户直接使用的 AI 应用,负责调用模型Codex CLI、各种 AI 编辑器、你自己写的 Agent
Client(客户端)Host 里负责和某个 MCP 服务器通信的部分由 Host 内置,一般不用自己写
Server(服务器)提供能力的一方:工具、资源、提示词模板你写的「咖啡店工具」、数据库查询、文件系统

MCP 服务器能提供三类东西:

  • Tools(工具):可以被模型调用的函数,最常用。
  • Resources(资源):可以读取的数据,比如文件、数据库里的记录。
  • Prompts(提示词模板):预先写好的提示词,供用户选用。

通信方式常见两种:stdio(Host 在本机启动服务器进程,通过标准输入输出通信,最简单)和 HTTP(服务器单独部署,多人共用)。

和 Function Calling 是什么关系 ​

MCP 把工具转成函数调用再执行
MCP 把工具转成函数调用再执行AI 生成配图

MCP 并没有取代 Function Calling,而是在它之上加了一层标准:

  1. Host 启动时连上 MCP 服务器,问它「你有哪些工具」;
  2. 把这些工具的名字、描述、参数,转成 A4 里那种 tools 定义交给模型;
  3. 模型返回 tool_calls 后,Host 把调用转发给 MCP 服务器执行,再把结果交回模型。

也就是说,模型看到的仍然是普通的工具定义。下面这个运行框里的工具定义,就是从后面那个 MCP 服务器「翻译」过来的:

▶ 动手试试
登录后运行登录 HiveGPT 后每天有免费运行次数
示例输出(之前运行的结果)
[
  {
    "name": "menu_price",
    "arguments": { "item": "燕麦拿铁" }
  }
]

写一个 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 几行就能写一个服务器;只安装可信的服务器,并给最小权限。

下一课是这条路线的最后一课:上线——成本、限流、错误重试,以及结业项目怎么做。

代码示例在页面里运行时使用 HiveGPT 的模型接口。延伸阅读来自 JavaGuide(Apache-2.0),版权归原作者。