MCP 构建器
MCP 服务器开发指南
概述
创建 MCP(Model Context Protocol)服务器,使 LLM 能够通过精心设计的工具与外部服务进行交互。衡量 MCP 服务器质量的标准是它能让 LLM 在多大程度上高效地完成现实世界的任务。
---
流程
🚀 高层工作流
创建高质量 MCP 服务器包含四个主要阶段:
第一阶段:深度研究与规划
#### 1.1 理解现代 MCP 设计
API 覆盖范围 vs. 工作流工具:
在全面的 API 接口覆盖与专门的工作流工具之间取得平衡。工作流工具在处理特定任务时更便捷,而全面的覆盖则赋予 Agent 组合操作的灵活性。不同客户端的表现有所不同——部分客户端通过执行代码来组合基础工具,而另一些则在处理高层工作流时表现更好。如果不确定,请优先考虑全面的 API 覆盖。
工具命名与可发现性:
清晰、具有描述性的工具名称有助于 Agent 快速找到正确的工具。使用一致的前缀(例如 github_create_issue,github_list_repos)并采用面向动作的命名方式。
上下文管理:
简洁的工具描述以及过滤/分页结果的能力对 Agent 大有裨益。设计能够返回聚焦且相关数据的工具。部分客户端支持代码执行,这可以帮助 Agent 高效地过滤和处理数据。
可操作的错误消息:
错误消息应通过具体的建议和后续步骤引导 Agent 寻找解决方案。
#### 1.2 研究 MCP 协议文档
浏览 MCP 规范:
从站点地图开始查找相关页面:https://modelcontextprotocol.io/sitemap.xml
然后获取带有 .md 后缀的特定页面以查看 Markdown 格式(例如 https://modelcontextprotocol.io/specification/draft.md)。
重点审阅页面:
- 规范概述与架构
- 传输机制(可流式传输的 HTTP, stdio)
- 工具 (Tool)、资源 (Resource) 和提示词 (Prompt) 的定义
#### 1.3 研究框架文档
推荐技术栈:
- 语言:TypeScript(高质量的 SDK 支持,在许多执行环境如 MCPB 中具有良好的兼容性。此外,由于其广泛的使用率、静态类型和优秀的 lint 工具,AI 模型非常擅长生成 TypeScript 代码)
- 传输:远程服务器使用可流式传输的 HTTP 并采用无状态 JSON(相比有状态会话和流式响应,更易于扩展和维护);本地服务器使用 stdio。
加载框架文档:
- MCP 最佳实践:📋 查看最佳实践 - 核心指南
TypeScript(推荐):
- TypeScript SDK:使用 WebFetch 加载
https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.md
- ⚡ TypeScript 指南 - TypeScript 模式与示例
Python:
- Python SDK:使用 WebFetch 加载
https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.md
- 🐍 Python 指南 - Python 模式与示例
#### 1.4 规划实现方案
理解 API:
审阅服务的 API 文档,确定关键端点、身份验证要求和数据模型。根据需要使用网页搜索和 WebFetch。
工具选择:
优先考虑全面的 API 覆盖。列出需要实现的端点,从最常用的操作开始。
---
第二阶段:实现
#### 2.1 搭建项目结构
见
各语言项目设置指南:
- ⚡ TypeScript 指南 - 项目结构、package.json、tsconfig.json
- 🐍 Python 指南 - 模块组织、依赖管理
#### 2.2 实现核心基础设施
创建共享实用工具:
- 带有身份验证的 API 客户端
- 错误处理辅助函数
- 响应格式化(JSON/Markdown)
- 分页支持
#### 2.3 实现工具 (Tools)
针对每个工具:
输入 Schema:
- 使用 Zod (TypeScript) 或 Pydantic (Python)
- 包含约束条件和清晰的描述
- 在字段描述中添加示例
输出 Schema:
- 尽可能为结构化数据定义
outputSchema
- 在工具响应中使用
structuredContent(TypeScript SDK 特性)
- 帮助客户端理解并处理工具输出
工具描述:
- 功能的简明摘要
- 参数描述
- 返回类型 Schema
实现细节:
- I/O 操作使用 async/await
- 包含可操作建议的正确错误处理
- 在适用场景下支持分页
- 使用现代 SDK 时,同时返回文本内容和结构化数据
注解 (Annotations):
readOnlyHint: true/false
destructiveHint: true/false
idempotentHint: true/false
openWorldHint: true/false
---
第三阶段:评审与测试
#### 3.1 代码质量
评审重点:
- 无重复代码(DRY 原则)
- 统一的错误处理
- 全类型覆盖
- 清晰的工具描述
#### 3.2 构建与测试
TypeScript:
- 运行
npm run build验证编译
- 使用 MCP Inspector 测试:
npx @modelcontextprotocol/inspector
Python:
- 验证语法:
python -m py_compile your_server.py
- 使用 MCP Inspector 测试
详细的测试方法和质量检查清单请参阅各语言指南。
---
第四阶段:创建评估
实现 MCP 服务器后,创建全面的评估以测试其有效性。
加载 ✅ 评估指南 以获取完整的评估准则。
#### 4.1 理解评估目的
通过评估测试 LLM 能否有效地利用你的 MCP 服务器来回答现实且复杂的问题。
#### 4.2 创建 10 个评估问题
请按照评估指南中概述的流程创建有效的评估:
1. 工具检查:列出可用工具并理解其能力
2. 内容探索:使用只读操作探索可用数据
3. 问题生成:创建 10 个复杂且真实的场景问题
4. 答案验证:自行解答每个问题以验证答案
#### 4.3 评估要求
确保每个问题满足:
- 独立性:不依赖于其他问题
- 只读性:仅需非破坏性操作
- 复杂性:需要多次调用工具和深入探索
- 真实性:基于人类关注的实际用例
- 可验证性:具有单一、清晰且可通过字符串比较验证的答案
- 稳定性:答案不会随时间而改变
#### 4.4 输出格式
创建具有以下结构的 XML 文件:
<evaluation>
<qa_pair>
<question>Find discussions about AI model launches with animal codenames. One model needed a specific safety designation that uses the format ASL-X. What number X was being determined for the model named after a spotted wild cat?</question>
<answer>3</answer>
</qa_pair>
<!-- 更多 qa_pairs... -->
</evaluation>---
参考文件
📚 文档库
加载 th
在开发过程中根据需要使用以下资源:
核心 MCP 文档(优先加载)
- MCP 协议:首先访问
https://modelcontextprotocol.io/sitemap.xml站点地图,然后获取以.md结尾的具体页面
- 📋 MCP 最佳实践 - 通用 MCP 指南,包括:
SDK 文档(在阶段 1/2 加载)
- Python SDK:从
https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.md获取
- TypeScript SDK:从
https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.md获取
特定语言实现指南(在阶段 2 加载)
- 🐍 Python 实现指南 - 完整的 Python/FastMCP 指南,包含:
@mcp.tool 注册工具
- 完整的可运行示例
- 质量检查清单
- ⚡ TypeScript 实现指南 - 完整的 TypeScript 指南,包含:
server.registerTool 注册工具
- 完整的可运行示例
- 质量检查清单
评估指南(在阶段 4 加载)
- ✅ 评估指南 - 完整的评估创建指南,包含: