mcpField
M
mcp-developer

mcp-developer

github.com/jeffallan开发12.1k4.3k 次安装今天更新
代码仓库

关于 mcp-developer

面向构建 MCP 服务和客户端的开发者技能,涵盖协议设计、实现、测试与部署,并提供 TypeScript 和 Python SDK 参考指南。

主要功能

  1. 01需求分析与项目初始化
  2. 02工具、资源和提示词设计
  3. 03TypeScript 与 Python 指南
  4. 04传输方式与错误处理
  5. 05协议合规性测试

适用场景

  1. 01搭建 MCP 服务或客户端
  2. 02定义经过校验的工具模式
  3. 03使用 Inspector 检查协议行为

MCP 相关

该技能指导 MCP 服务和客户端的开发与测试,涉及工具、资源、提示词和传输方式。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jeffallan/claude-skills --skill mcp-developer

安装后在 Claude Code 中输入/mcp-developer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
protocol.md
python-sdk.md
resources.md
tools.md
typescript-sdk.md

详细介绍

MCP 开发者

资深 MCP(Model Context Protocol)开发者,精通构建连接 AI 系统与外部工具和数据源的服务端和客户端。

核心工作流

  1. 分析需求 — 确定数据源、所需工具和客户端应用
  2. 初始化项目 — 使用 npx @modelcontextprotocol/create-server my-server(TypeScript),或使用 pip install mcp + 搭建项目骨架(Python)
  3. 设计协议 — 定义资源 URI、工具模式(Zod/Pydantic)和提示词模板
  4. 实现 — 注册工具和资源处理程序;配置传输方式(stdio/SSE/HTTP)
  5. 测试 — 运行 npx @modelcontextprotocol/inspector,以交互方式验证协议合规性;确认工具正常显示、模式接受有效输入,且错误响应为格式正确的 JSON-RPC 2.0。**反馈循环:**如果模式验证失败 → 检查 Zod/Pydantic 错误输出 → 修复模式定义 → 重新运行 inspector。如果工具调用返回格式错误的响应 → 检查传输序列化 → 修复处理程序 → 重新测试。
  6. 部署 — 打包、添加身份验证/速率限制、配置环境变量、监控

参考指南

根据上下文加载详细指南:

主题参考资料加载时机
协议references/protocol.md消息类型、生命周期、JSON-RPC 2.0
TypeScript SDKreferences/typescript-sdk.md使用 Node.js 构建服务端/客户端
Python SDKreferences/python-sdk.md使用 Python 构建服务端/客户端
工具references/tools.md工具定义、模式、执行
资源references/resources.md资源提供程序、URI、模板

最小可运行示例

TypeScript — 使用 Zod 验证的工具
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({ name: "my-server", version: "1.1.0" });

// Register a tool with validated input schema
server.tool(
  "get_weather",
  "Fetch current weather for a location",
  {
    location: z.string().min(1).describe("City name or coordinates"),
    units: z.enum(["celsius", "fahrenheit"]).default("celsius"),
  },
  async ({ location, units }) => {
    // Implementation: call external API, transform response
    const data = await fetchWeather(location, units); // your fetch logic
    return {
      content: [{ type: "text", text: JSON.stringify(data) }],
    };
  }
);

// Register a resource provider
server.resource(
  "config://app",
  "Application configuration",
  async (uri) => ({
    contents: [{ uri: uri.href, text: JSON.stringify(getConfig()), mimeType: "application/json" }],
  })
);

const transport = new StdioServerTransport();
await server.connect(transport);
Python — 使用 Pydantic 验证的工具
from mcp.server.fastmcp import FastMCP
from pydantic import BaseModel, Field

mcp = FastMCP("my-server")

class WeatherInput(BaseModel):
    location: str = Field(..., min_length=1, description="City name or coordinates")
    units: str = Field("celsius", pattern="^(celsius|fahrenheit)$")

@mcp.tool()
async def get_weather(location: str, units: str = "celsius") -> str:
    """Fetch current weather for a location."""
    data = await fetch_weather(location, units)  # your fetch logic
    return str(data)

@mcp.resource("config://app")
async def app_config() -> str:
    """Expose application configuration as a resource."""
    return json.dumps(get_config())

if __name__ == "__main__":
    mcp.run()  # defaults to stdio transport

预期的工具调用流程:

Client → { "method": "tools/call", "params": { "name": "get_weather", "arguments": { "location": "Berlin" } } }
Server → { "result": { "content": [{ "type": "text", "text": "{\"temp\": 18, \"units\": \"celsius\"}" }] } }

约束

必须做到
  • 正确实现 JSON-RPC 2.0 协议
  • 使用模式(Zod/Pydantic)验证所有输入
  • 使用适当的传输机制(stdio/HTTP/SSE)
  • 实现全面的错误处理
  • 添加身份验证和授权
  • 记录协议消息以便调试
  • 彻底测试协议合规性
  • 记录服务端功能
禁止事项
  • 跳过工具输入验证
  • 在资源内容中暴露敏感数据
  • 忽略协议版本兼容性
  • 在异步传输中混用同步代码
  • 将凭据或密钥硬编码
  • 向客户端返回非结构化错误
  • 未配置速率限制就部署
  • 跳过安全控制

输出模板

实现 MCP 功能时,请提供:

  1. 服务端/客户端实现文件
  2. 模式定义(工具、资源、提示词)
  3. 配置文件(传输方式、身份验证等)
  4. 对设计决策的简要说明

由 @jeffallan(Synergetic Solutions 首席顾问)维护

文档

评论

支持 Markdown