编写属于自己的 MCP 服务器
MCP 服务器可以把工具、数据或模板提供给任何支持 MCP 的客户端使用——从 Claude Code 到 Antigravity 都适用。
三大组成部分
MCP 服务器可以为 Claude Code 或 Antigravity 这类客户端提供三种能力:Tools(工具,模型主动调用的函数,比如一次数据库查询)、Resources(资源,应用程序提供的被动数据,比如文件或 API 响应)以及 Prompts(提示词模板,由用户主动选择使用的现成模板)。
最简流程
服务器作为独立进程运行,通过固定的协议(通常是标准输入输出或 HTTP)与客户端通信。客户端启动时会调用 tools/list,获取一份带有参数 JSON Schema 的工具定义列表,需要时再调用 tools/call 并传入相应参数。所以你的服务器只需要做两件事:用名称、描述和输入 Schema 注册工具,并在被调用时返回结果。
官方 SDK
modelcontextprotocol 组织为 Python、TypeScript、Java、Kotlin、C#、Go、PHP、Ruby、Rust 和 Swift 维护官方 SDK——你不需要手动实现协议本身。
接入客户端
写好的服务器需要登记到客户端的配置中(比如 Claude Code 里的 mcpServers,或 Antigravity 里的 mcp_config.json),通常需要提供启动服务器进程的命令和参数。之后它就会出现在客户端的 MCP 管理器里,它的工具也就可以供模型使用了。
示例
一个最简 Python 服务器核心(使用官方 SDK):`@mcp.tool()` 装饰器把函数 `get_forecast(latitude, longitude)` 注册为一个工具——客户端会通过 `tools/list` 自动发现它,需要时再调用。
🛠️ 练习——自己动手试试
用官方 MCP SDK(例如 Python)构建一个只有一个工具的最简服务器,并把它连接到一个支持 MCP 的客户端。
- 为你使用的语言安装官方 SDK,创建一个只有一个工具的服务器(比如一个返回当前日期的函数)。
- 把这个服务器登记到你客户端的 MCP 配置中(比如 Claude Code 或 Antigravity),填好启动命令和参数。
- 打开客户端里的 MCP 管理器(比如 /mcp),检查服务器是否已连接,然后让模型调用你的工具。
✅ 自查清单
- ☐ 客户端有没有通过 tools/list 自动识别出你的工具,而不需要你手动登记?
- ☐ 如果你的服务器进程(在 STDIO 传输方式下)不小心把日志写到了 stdout 而不是 stderr,会发生什么?
- ☐ 你现在能不能把同一个服务器接入另一个 MCP 客户端,而不用重新写一遍?
小测验
MCP 的"Tool"(工具)和"Resource"(资源)有什么区别?
来源
- MCP-Doku: Build an MCP server ↗ modelcontextprotocol.io
- MCP-Doku: Understanding MCP servers (Tools/Resources/Prompts) ↗ modelcontextprotocol.io
- GitHub: modelcontextprotocol-Organisation (offizielle SDKs) ↗ github.com