Aklman · Library

06 / 第六章

MCP · 从协议规范到 Server 实现.

Model Context Protocol 是工具调用的标准化层 —— 一次实现,所有客户端都能用。


你给研究助手焊了 web_search、fetch_page —— 但只有它能用,换个客户端就得重写一遍。MCP(Model Context Protocol)是中间那一层标准:把工具从你的代码里解耦出来,实现一次,任何 MCP 客户端都能接。这一章讲它解决什么、怎么把研究助手的工具做成 server,以及接别人的 server 有什么风险。

I

MCP 解决的是「N 个工具 × M 个客户端」的重复劳动.

工具焊进一个 agent,只有它能用;做成一个 MCP server,任何客户端都能接。 没有 MCP,每个工具要为每个客户端(你的 agent、Claude、ChatGPT、VS Code、Cursor)各写一遍适配 ——N 个工具乘 M 个客户端的重复劳动。MCP 是中间的标准层,官方比喻是「AI 应用的 USB-C」:一次实现,到处接。1注 1Model Context Protocol · 官方文档 —— 连接 AI 应用与外部系统的开放标准,官方比喻为「AI 应用的 USB-C」;一次实现,任何 MCP 客户端(Claude、ChatGPT、VS Code、Cursor 等)都能接(build once, integrate everywhere)。截至 2026-05。 但 MCP 不是免费的抽象。如果你的工具只服务你自己一个 agent、永远不外接,直接 function calling(第三章)更简单。MCP 的价值,只在「同一个工具要被多个客户端用」或「你想接别人已经写好的 server」时才兑现。

II

一个 MCP server 暴露三种东西.

MCP server 给客户端的不只是工具,是三类原语:tools(可执行动作)、resources(可读数据)、prompts(预制模板)。 tools 是模型可调用的动作(和第三章的 function 一一对应),resources 是客户端按 URI 取的可读数据,prompts 是可复用的提示模板。规范里最吃重的区分是「谁来控制」:tools 由模型控制、resources 由应用控制、prompts 由用户控制 —— 三者面向不同的发起方。传输有两种:stdio(本地子进程)和 streamable HTTP(远程,已取代旧的 HTTP+SSE)。2注 2MCP 规范 · 架构 —— server 暴露三种原语,按「谁控制」区分:tools(模型控制的可执行动作)、resources(应用控制的可读数据)、prompts(用户控制的预制模板);基于 JSON-RPC 2.0;传输用 stdio(本地)与 streamable HTTP(远程,已取代旧 HTTP+SSE)。spec 按日期版本化,最新修订 2025-11-25。截至 2026-06。用官方 Python SDK,实现一个 server 就是注册这几样:
from mcp.server.fastmcp import FastMCP
 
mcp = FastMCP("research-tools")
 
@mcp.tool()
def web_search(query: str) -> str:
    """按查询搜索网页,返回结果列表。"""   # docstring 就是给模型看的 description
    return search_web(query)
 
if __name__ == "__main__":
    mcp.run()                        # 默认 stdio 传输

一个最小 MCP server(Python SDK,stdio)

别把所有东西都做成 tools。三类原语各有用途 —— 动作是 tools,数据是 resources,模板是 prompts。3注 3MCP Python SDK(modelcontextprotocol/python-sdk)—— 官方 SDK,FastMCP 用 @mcp.tool() 注册工具、mcp.run() 起服务。引用发布版本而非 main。混着用,客户端就不知道该怎么把它们呈现给用户。

III

接别人的 server,风险和接第三方代码一样.

MCP 最大的红利是生态 —— 一堆现成 server 可接;但接一个 server,等于让它进入你的信任边界。 一个第三方 MCP server 能读你给它的 resources、能执行它声明的 tools。接之前看清楚:它要什么权限、跑在哪(本地 stdio 子进程 vs 远程 HTTP)。远程 server 还多两件事 —— 鉴权和数据出境。1注 1Model Context Protocol · 官方文档 —— 连接 AI 应用与外部系统的开放标准,官方比喻为「AI 应用的 USB-C」;一次实现,任何 MCP 客户端(Claude、ChatGPT、VS Code、Cursor 等)都能接(build once, integrate everywhere)。截至 2026-05。这和「装一个第三方 skill」是同一类风险:你在把执行权交给别人的代码。 判断很简单:自己的数据和动作 → 自己写 server,跑本地 stdio;成熟的公共服务(GitHub、Notion 的官方 server)→ 接官方的;来历不明的 server → 当第三方代码审,或者别接。这条信任线,第 9 章会再系统地画一次。 动手 · 把一个工具变成 server,再审一个别人的 server:
01

把研究助手的一个工具包成 MCP server

用 stdio 起一个最小 server,从一个 MCP 客户端(Claude Desktop 或你的 agent)连上它,跑通一次调用。
02

审一个你想用的第三方 server

找一个你真想接的公共 server,列清楚:它声明了哪些 tools / resources、跑在本地还是远程、要不要交出数据。
03

给它一个信任判断

据上面的审计写一句话结论:自己写、接官方、还是不接 —— 并说清你为什么信它。

焊进一个 agent,只你能用; 做成一个 server,谁都能接。.

Welded into one agent, it's yours alone; built as a server, anyone connects..

Aklman Library

讨论

讨论.

评论区初始化中…