MCP Server 开发者起步包
给第一次写 MCP server 的开发者用的十件套:选 SDK(TypeScript / Python / Go),用框架脚手架起项目,在 MCP Inspector 里调试,最后提交到 Smithery 注册中心和 awesome-mcp-servers 索引 — 全部按推荐安装顺序排好。
这个 pack 写给谁
你在 Claude Code / Cursor / Codex CLI 里用 MCP server 已经一阵子了。现在你想自己写一个 — 把内部 API、私有 CRM、自定义工具封成 MCP server,让所有支持 MCP 的 agent 都能调用。这是生产侧的起步包;如果你只想装现成的 server,看姊妹包 MCP Server Stack。
这十个工具覆盖完整闭环:选一门你已经在写的语言的 SDK,用更高层的框架脚手架起项目跳过样板代码,开着 MCP Inspector 实时调试,最后发布到 registry 让别人的 agent 能自动发现和安装。
推荐安装顺序
- MCP Inspector — 第一个装。MCP server 的官方 Web 调试 UI,可以连任何 server(stdio 或 HTTP)、列出 tool、发测试调用、看原始 JSON-RPC 报文。整个开发过程都开着这个标签页。不用 Inspector 调 MCP server 等于不用 DevTools 写网页。
- Microsoft MCP — 官方 TypeScript SDK — Node 这边的官方 SDK。定义了
Server类、传输层(stdio / HTTP)、带类型的RequestHandler。想要完整控制权或者写参考样例就用这个。 - MCP Python SDK — Python 官方 SDK。形状和 TS 那个一致:
Server、stdio_server、request handler。如果你的工具本体已经在用 Python 生态(数据 / ML / 爬虫),选 Python。 - FastMCP — Python 框架 — MCP 界的 Flask(相对 Werkzeug)。装饰器式,样板代码大幅减少。
@mcp.tool()套在普通函数上就是个 server。90% 的 Python MCP server 用这个;只有需要细粒度传输层控制才往下掉到裸 SDK。 - FastMCP — TypeScript 框架 — Node 这边同理念。
server.addTool({ name, parameters, execute })就完事。需要时和官方 TS SDK 混着用。 - mcp-go — Build MCP Servers in Go — Go SDK。延迟敏感或者要单二进制部署就选它(serverless 冷启动、嵌入 CLI、Docker scratch image)。
- Build Your Own MCP Server — Step-by-Step Guide — 第一次提交前先读的教程。讲 JSON-RPC 帧格式、tool 发现、错误信封、三种传输层。省半天读 spec 的时间。
- Claude 官方 Skill: mcp-builder — Anthropic 官方的 Claude skill,专门用来脚手架 MCP server。插到 Claude Code 里,描述你要的 tool,它会写出 SDK 样板(manifest、request handler、类型存根)。第一个 server 用起来很爽;写到第三个会发现自己想绕过它。
- Smithery — MCP Server Registry & Installer — 事实标准的 registry。发布到这里之后你的 server 就能
npx smithery install your-server装,和几百个其他 server 一起列出。必看。 - awesome-mcp-servers — MCP 目录索引 — GitHub 上人工维护的精选索引。server 稳定之后 PR 进去。受众和 Smithery 不一样(开发者在 GitHub 上浏览 vs agent 自动发现),两边都做。
它们怎么协同
选 SDK: Microsoft TS ─┐
MCP Python ──┼─▶ 框架脚手架
mcp-go ─┘ │
├─ FastMCP Python
├─ FastMCP TypeScript
└─ Claude mcp-builder skill
│
▼
MCP Inspector
(实时调试 + 测试调用)
│
▼
发布
├─ Smithery registry
└─ awesome-mcp-servers PR
SDK → 框架 → Inspector → registry 四步闭环就是全部工作。多数翻车(agent 找不到你的 tool / tool 调用挂死 / schema 校验失败)都来自跳过 Inspector。别跳过 Inspector。
你会遇到的取舍
- 裸 SDK vs FastMCP — 裸 SDK = hello-world 80 行代码、传输层和中间件完全自己控制。FastMCP = 12 行、装饰器式、有主见。从 FastMCP 起步,只有撞墙才掉到裸 SDK(自定义鉴权、自创非 stdio 传输层)。
- TypeScript vs Python vs Go — TS 参考样例最多,原生支持 MCP 的 agent host 生态也最大。如果你的工具本体已经是 Python(pandas / sklearn / scrapy)选 Python。Go 适合单二进制部署和紧延迟。
- Smithery vs awesome-mcp-servers — Smithery 机器可读(agent 自动安装),awesome-mcp-servers 人类可读(开发者在 GitHub 上翻)。漏斗不同 — 两边都提交。
- mcp-builder skill vs 自己手写 — Skill 适合第一个 server(生成正确的样板)。它生成的模式到第三个 server 你就想自己改了,预期会被你淘汰。
常见踩坑
- stdio 传输层的 buffer 问题 — 永远别往 stdout 写日志。日志走 stderr,stdout 给 JSON-RPC 帧用。混着写会静默破坏每一条消息。
- Tool schema 漂移 — manifest 里 tool 的输入 schema 必须和 handler 实际期望的一致。MCP Inspector 会立刻暴露不匹配;不用 Inspector 你会花几小时纳闷为啥 agent 传
query而 handler 读q。 - 长时间 tool 不发进度 — MCP 支持进度通知。如果你的 tool 超过 5 秒,要发进度,否则 host 会以为挂死直接超时。
- shutdown 时忘了清理 — 持资源的 handler(DB 连接、文件锁)需要
on_shutdown清理。Inspector 抓不到,生产环境才会暴露。 - server 还没稳定就提交 Smithery — 版本抖动会破坏每个 pin 你 server 的 agent 的安装。先打真正的
v1.0.0tag,再发布。
10 个资产打包就绪
常见问题
TypeScript / Python / Go 必须一开始就选定吗?
选你工具本体已经在用的语言。MCP server 包了一个 Python 数据 pipeline 就用 Python 写;包了一个 Node API 客户端就用 TS。MCP 协议本身和语言无关 — agent 不知道也不在乎你 server 是什么语言写的,只关心你暴露的 tool 和 schema。别因为 TS 样例多就硬切语言。
FastMCP 还是裸的官方 SDK — 从哪个起步?
如果没有特殊理由,从 FastMCP 起步。官方裸 SDK 给你完整控制权,但一个 hello-world server 大约 80 行样板。FastMCP(Python 或 TS)用装饰器包一层,约 12 行就有一个能跑的 tool。真的需要定制(自定义鉴权 / 奇特传输层 / 深度中间件)随时可以掉回裸 SDK,逃生通道一直在。过早用裸 SDK 是第一次写 MCP server 永远发不出去的头号原因。
为啥代码都没开始写就把 MCP Inspector 列第一?
因为你第一个 handler 编译过的那一刻,你就想给它发个 tool 调用看原始 JSON-RPC 报文。Inspector 是唯一好用的交互方式。第一个装意味着你脚手架起来的 server 启动时,Inspector 已经在 localhost 上等着 — 省掉后面切换上下文。把它当成 DevTools,写网页前先装。
Smithery 和 awesome-mcp-servers — 两个都提交还是选一个?
两个都做。漏斗不同:Smithery 机器可读(agent 查 registry 自动装你的 server);awesome-mcp-servers 人类可读(开发者在 GitHub README 里翻找要手动加的 tool)。只发 Smithery 不 PR awesome-mcp-servers 会切断每个还没上 Smithery 的开发者 — 2026 年这部分人还是大多数。
用这个 pack 多久能跑出第一个能用的 server?
对熟悉 TS 或 Python 的开发者来说大约两个晚上。第一晚:装 Inspector、用 FastMCP 脚手架、跑通端到端 hello-world tool 调用。第二晚:接你的真实 tool 本体、写 manifest、在 Inspector 里调 schema 不匹配、打包发 Smithery。如果愿意让 Claude 自己写脚手架,mcp-builder 这个 skill 能把第一晚压缩到大约一小时。