MCP 服务器样板生成器
将 Anthropic 的 Model Context Protocol (MCP) Server 通过在结构化表单中定义 tools / resources / prompts,转换为 TypeScript / Python 脚手架代码。可在 Claude Desktop / Claude Code / Cursor 的 MCP 客户端中直接使用(stdio 传输格式)。
⚠ MCP SDK 活跃更新。生成代码:TS SDK ^1.0 / Python SDK >=1.0 。最新规范:
modelcontextprotocol.io
⚡ 预设
🔧 Tools (LLM 调用的函数)
📚 Resources (只读数据)
💬 Prompts (可重用模板)
💡 设置步骤
- "全部 zip"
- 解压并执行「依赖安装」(npm install / pip install -r requirements.txt)
- 将「Claude config」添加到 ~/Library/Application Support/Claude/claude_desktop_config.json
- 重启 Claude 即可
📖 常见的坑
在表单里定义 tools / resources / prompts,即可输出 TypeScript 或 Python 版的 Model Context Protocol 服务器骨架(stdio transport),其形态可直接注册到 Claude Desktop、Claude Code、Cursor 等 MCP 客户端。处理全部在浏览器内完成。生成的只是骨架——每个工具的具体实现仍需你自己编写。而在 MCP 上卡住的地方,往往不在代码内部,而在「客户端与服务器的边界」上:进程启动、标准输入输出、环境变量。下面讲的就是这三处。
| 情形 | 会发生什么 | 怎么处理 |
|---|---|---|
| 往标准输出多写一行就会崩 | 在 stdio transport 下,标准输出本身就是协议的通信通道——它假定其中只流动 JSON-RPC 消息。因此,只要写了一次 console.log() 或 print(),异物就会混进帧的中间,客户端的解析器随即崩溃。麻烦之处在于报错信息与真正原因毫无关系——你会看到「服务器无法连接」「意外的 token」「已断开」这类完全指不出原因的提示。而且未必只有你自己写的 console.log 才是元凶——依赖库启动时打印的警告、包管理器的更新通知、shell 初始化脚本的输出,统统会汇入同一条通道。 |
请把所有日志输出到标准错误。TypeScript 用 console.error(),Python 用 print(..., file=sys.stderr) 或 logging.basicConfig(stream=sys.stderr)——协议不使用 stderr,因此写多少都安全,而且依然会出现在客户端日志里。团队开发时,请用 lint 禁掉 console.log(ESLint 的 no-console 配合 allow: ['error', 'warn'])——最常见的情形,就是有人调试时随手加了一句,忘了删就提交了。记住排查步骤也能省时间:在终端里直接启动服务器,用眼睛看标准输出上有没有出现非 JSON 的内容——那里出现的东西,就是原因本身。 |
| description 实质上就是提示词 | 模型判断要不要调用某个工具、传哪些参数所依据的材料,只有工具名、description 以及各参数的说明——它完全看不到你的实现代码。因此若把说明写成「获取数据」这种,模型就无从判断何时该调用,结果是该用时不用、不相干时乱用。第二个失败点是工具数量:把二十个名字相近的工具排在一起,模型就容易选错。而且返回值同样是设计对象——把巨大的 JSON 原样返回,既烧光了上下文,又让模型找不到真正需要的那部分。MCP 服务器的品质,取决于「措辞」多过取决于代码。 | description 请按「何时使用、何时不用」来写,而不是「它做什么」。例如「当用户询问某个具体订单的配送状态时使用;仅在已知订单 ID 时使用;不要用于商品搜索」——边界写得越明确,选择的准确度就越高。参数说明里请放上格式示例——只要写上「ISO 8601 日期(例:2025-03-04)」,格式错误几乎就消失了。工具要少,名字彼此不要混淆:不要同时提供 get_user 和 fetch_user。返回值请做成摘要,只有确实需要细节时才让它发起第二次调用——一开始就内建分页与 limit,就不必日后返工重做。 |
| 在终端里能跑,从客户端却启动不了 | MCP 客户端会把你的服务器作为子进程启动,而那个进程的环境与你的终端并不相同。若由 GUI 应用启动,.bashrc 与 .zshrc 不会被读取,PATH 是最小集。结果就是,nvm、pyenv、asdf、volta 等版本管理工具注入的 PATH 并不存在,连 node 或 python 本身都找不到——报错只有 spawn ENOENT 一行。环境变量同样不会被继承,因此你 export 了 API 密钥后验证通过的服务器,由客户端启动时会认证失败。当前工作目录也不是你以为的那个——用相对路径读取的配置文件将无法找到。 |
请在客户端配置里写解释器的绝对路径。把 which node / which python3 的结果原样填进 command——如果你在用版本管理工具,这基本上是必需的。环境变量请通过客户端配置的 env 键显式传入("env": {"API_KEY": "..."} )——若服务器端设计为读取 .env,那个路径也请写成绝对路径。读取文件时,请以 __dirname(TypeScript)或 Path(__file__).parent(Python)为基点,不要依赖当前工作目录。另外,一出问题请先打开客户端的日志——你写到 stderr 的内容都汇集在那里,原因通常就在第一行。 |
MCP 服务器是一个以你的权限运行的程序。它能读写文件、访问网络、执行命令——而决定要不要调用它的,是一个正在读取外部文本的模型。也就是说,「模型读到的内容」有可能间接诱导工具调用(提示注入)。破坏性操作请不要作为工具公开——删除、发送、支付、部署这类不可逆的操作,原则上应设计为需要人工确认。把只读工具与写入工具拆成不同的服务器同样有效。在实现层面,路径参数必须归一化,并验证其解析结果落在允许的目录之内(防止用连串 ../ 逃逸出去),执行命令时请以数组形式传递参数。最后,MCP SDK 更新活跃——生成的代码只是起点,实际 API 请以 modelcontextprotocol.io 的最新版本为准。
📖 使用方法
-
1
选预设 / 从零预设或手动
-
2
语言 / 设置TS / Python
-
3
zip 下载并运行下载 → 安装 → 配置
❓ 常见问题
MCP 是什么?
stdio 与 HTTP?
区别?
🐛 此工具出现问题了吗?
免费、无需注册。仅提供复现步骤也有帮助。报告将直接发送给运营者并用于改进。
感谢您的反馈!
已送达运营者,将用于改进工具。