MCP 构建器

mcp-builder
分类编程
作者Anthropic
许可Complete terms in LICENSE.txt
评分4.20/5
使用13.1K

MCP 服务器开发指南

概述

创建 MCP(Model Context Protocol)服务器,使 LLM 能够通过精心设计的工具与外部服务进行交互。衡量 MCP 服务器质量的标准是它能让 LLM 在多大程度上高效地完成现实世界的任务。

---

流程

🚀 高层工作流

创建高质量 MCP 服务器包含四个主要阶段:

第一阶段:深度研究与规划

#### 1.1 理解现代 MCP 设计

API 覆盖范围 vs. 工作流工具:
在全面的 API 接口覆盖与专门的工作流工具之间取得平衡。工作流工具在处理特定任务时更便捷,而全面的覆盖则赋予 Agent 组合操作的灵活性。不同客户端的表现有所不同——部分客户端通过执行代码来组合基础工具,而另一些则在处理高层工作流时表现更好。如果不确定,请优先考虑全面的 API 覆盖。

工具命名与可发现性:
清晰、具有描述性的工具名称有助于 Agent 快速找到正确的工具。使用一致的前缀(例如 github_create_issuegithub_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。

加载框架文档:

TypeScript(推荐):

  • TypeScript SDK:使用 WebFetch 加载 https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.md

Python:

  • Python SDK:使用 WebFetch 加载 https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.md

#### 1.4 规划实现方案

理解 API:
审阅服务的 API 文档,确定关键端点、身份验证要求和数据模型。根据需要使用网页搜索和 WebFetch。

工具选择:
优先考虑全面的 API 覆盖。列出需要实现的端点,从最常用的操作开始。

---

第二阶段:实现

#### 2.1 搭建项目结构


各语言项目设置指南:


#### 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 文件:

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 结尾的具体页面
- 服务器和工具的命名规范 - 响应格式指南(JSON vs Markdown) - 分页最佳实践 - 传输协议选择(可流式传输的 HTTP vs stdio) - 安全与错误处理标准

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 加载)

- 服务器初始化模式 - Pydantic 模型示例 - 使用 @mcp.tool 注册工具 - 完整的可运行示例 - 质量检查清单 - 项目结构 - Zod Schema 模式 - 使用 server.registerTool 注册工具 - 完整的可运行示例 - 质量检查清单

评估指南(在阶段 4 加载)

- 问题创建准则 - 答案验证策略 - XML 格式规范 - 问题与答案示例 - 使用提供的脚本运行评估