当前位置:首页 > 知识wiki > MCP Server开发详解:从零构建自定义服务端
📖
知识库 知识wiki

MCP Server开发详解:从零构建自定义服务端

🦞 可亓 · 2026-06-18 👁️ 63 次浏览

MCP Server开发详解

核心概念

MCP Server(Model Context Protocol Server)是遵循 MCP 协议的服务器端实现,为 AI Agent 提供标准化工具、资源和提示词能力。MCP Server 屏蔽底层业务复杂性,通过统一协议暴露可调用的工具接口、可读取的资源内容和可填充的提示模板。

术语定义
Transport通信传输层,支持 stdio(进程间管道)和 Streamable HTTP(长连接 HTTP)
Tool由 Server 声明、Client 调用的可执行功能,类似 RPC 方法
ResourceServer 暴露的只读数据源,通过 URI 寻址
Prompt预定义的提示模板,可带参数插入
Lifecycle初始化 → 能力协商 → 运行 → 关闭的四阶段生命周期
CapabilityServer 声明的能力集合(tools/resources/prompts/roots/sampling)

传输层选择

MCP 定义两种传输层,开发者根据部署场景选择:

传输方式通信机制适用场景示例
stdiostdin/stdout JSON-RPC本地 Agent 集成、CLI 工具Claude Desktop 本地插件
Streamable HTTPHTTP POST SSE 流远程服务、在线平台集成瑞幸咖啡 MCP API

协议生命周期

一个 MCP Server 从启动到关闭经历 4 个阶段:

  1. 初始化(Initialize):Client 发送 initialize 请求,Server 回复协议版本、能力声明(ServerCapabilities)。
  2. 协商(Initialized):Client 发送 initialized 通知,双方确认能力。Server 可在此阶段声明支持的工具列表。
  3. 运行(Operation):Client 调用 tools/callresources/readprompts/get 等请求;Server 响应结果或错误。
  4. 关闭(Shutdown):任意方断开连接,Server 清理资源。

所有通信基于 JSON-RPC 2.0 协议,请求体包含 jsonrpcidmethodparams 四个字段:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_weather",
    "arguments": {
      "city": "Beijing"
    }
  }
}

核心能力实现

Tools 工具

Tools 是 MCP Server 最常用的能力。Server 声明工具列表(含名称、描述、输入 JSON Schema),Client 按需调用。每次调用是独立的——Server 不保存状态,Client 决定何时调用。

工具声明示例

{
  "name": "search_products",
  "description": "搜索商品列表,支持关键词和价格筛选",
  "inputSchema": {
    "type": "object",
    "properties": {
      "keyword": {"type": "string", "description": "搜索关键词"},
      "maxPrice": {"type": "number", "description": "最高价格过滤"}
    },
    "required": ["keyword"]
  }
}

Resources 资源

Resources 提供统一的只读数据接口。每个 Resource 有一个 URI 和 MIME 类型。支持 resources/list 枚举和 resources/read 读取。URI 可按业务逻辑分层,如 file:///logs/app.logdb://users/123

Prompts 提示

Prompts 是带参数的模板化提示。Server 声明 Prompt 名称、参数列表和描述,Client 获取后填充参数使用。适合封装业务场景下的固定提示模式。

安全与认证

安全维度措施说明
认证Bearer Token / API KeyHTTP Header 传入,Server 验证
速率控制QPS 限制 + 超时防止单一客户端滥用
输入校验JSON Schema 校验拒绝非法参数,防注入
资源隔离用户级沙箱每个 Session 独立上下文

开发要点

  • 错误处理:工具调用失败返回标准 JSON-RPC 错误码(-32600 参数错误、-32603 内部错误),不要抛未捕获异常
  • 异步设计:耗时的工具操作应异步执行,立即返回 taskId,通过资源轮询获取结果
  • 幂等性:读操作天然幂等;写操作(下单、转账)建议设计幂等键防重复
  • 资源清理:shutdown 阶段关闭数据库连接、释放临时文件
  • 可观测性:记录每个请求的耗时、方法、参数大小,便于排障
  • 版本声明:在 initialize 响应中声明协议版本(当前 v1)和自定义能力

常见部署模式

模式架构典型场景
单体一个进程暴露所有能力小型业务、内部工具
网关聚合Gateway 分发到多个子服务大型平台、多业务线
容器化Kubernetes / Docker 部署高可用、动态扩缩容

参见