利用AI,结合官方文档收集整理,作为了解
MCP 开发指南:构建模型上下文协议服务器
Date: October 23, 2025
Version: 1.0
Specification Version: 2024-11-05
目录
快速开始
环境准备
系统要求
-
Python 3.8+ 或 Node.js 16+
-
网络连接
-
1GB 可用内存
安装 MCP SDK
1 | # Python SDK |
5分钟创建第一个 MCP 服务器
Step 1: 创建项目目录
1 | mkdir mcp-demo && cd mcp-demo |
Step 2: 编写基础服务器代码
1 | # server.py |
Step 3: 启动服务器
1 | python server.py |
Step 4: 测试服务器
使用 MCP 客户端测试:
1 | # client.py |
协议概述
什么是 MCP
MCP (Model Context Protocol) 是一种专门为大语言模型(LLM)设计的标准化通信协议,旨在建立模型与外部工具、数据源和服务之间的统一交互接口。
核心价值
MCP 解决了 AI 应用开发中的关键问题:
-
标准化接口:为不同工具和服务提供统一调用方式
-
上下文管理:支持复杂对话场景中的状态保持
-
安全隔离:通过三层架构实现严格的安全边界
-
扩展性:允许动态添加新功能而不影响现有系统
协议特点
-
基于 JSON-RPC 2.0:成熟的远程过程调用规范
-
有状态会话:维护上下文信息的会话机制
-
双向通信:支持客户端和服务器双向消息交换
-
多传输支持:stdio 和 HTTP/SSE 传输机制
核心架构
三层架构模式
MCP 采用客户端-主机-服务器三层架构:
1 | ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ |
组件详情
主机 (Host)
职责:
-
管理客户端实例的生命周期
-
控制连接权限和执行安全策略
-
协调 AI/LLM 集成
-
确保系统稳定运行
核心功能:
-
连接管理和路由
-
权限验证和安全控制
-
负载均衡和故障恢复
-
监控和日志记录
客户端 (Client)
职责:
-
维护与服务器的独立连接
-
建立有状态会话
-
处理协议协商
-
管理消息路由
核心功能:
-
会话状态管理
-
消息序列化和解析
-
错误处理和重试
-
传输协议适配
服务器 (Server)
职责:
-
公开特定的资源和工具
-
独立运行和管理
-
通过客户端处理请求
-
支持本地和远程服务
核心功能:
-
工具注册和执行
-
资源管理和访问
-
提示词管理
-
事件通知
协议基础
消息类型
MCP 定义了三种基本消息类型,基于 JSON-RPC 2.0 规范。
1. 请求 (Request)
特点:
-
双向消息,可在客户端和服务器间双向发送
-
必须包含唯一 ID
-
支持参数传递
-
需要响应
格式示例:
1 | { |
2. 响应 (Response)
特点:
-
作为对请求的回复
-
必须包含对应请求的 ID
-
必须设置 result 或 error
-
错误码必须是整数
成功响应示例:
1 | { |
错误响应示例:
1 | { |
3. 通知 (Notification)
特点:
-
不需要响应的单向消息
-
不能包含 ID 字段
-
用于状态更新和事件通知
-
减少通信开销
格式示例:
1 | { |
错误码规范
| 错误码范围 | 含义 | 示例 |
|---|---|---|
| -32768 到 -32000 | JSON-RPC 保留错误码 | -32600: 无效请求 |
| -32099 到 -32000 | 服务器端错误 | -32001: 工具不存在 |
| -32099 到 -32000 | 自定义错误码 | -32002: 权限不足 |
生命周期管理
会话生命周期
MCP 会话包含三个主要阶段:初始化、操作和关闭。
1. 初始化阶段
初始化是客户端和服务器的第一次交互,建立通信基础。
初始化流程:
1 | 客户端 服务器 |
初始化请求:
1 | { |
初始化响应:
1 | { |
2. 操作阶段
操作阶段是会话的核心,处理所有工具调用和资源访问。
主要操作:
-
工具调用:
tool.call -
资源读取:
resource.read -
资源订阅:
resource.subscribe -
提示词获取:
prompt.get
工具调用示例:
1 | { |
3. 关闭阶段
优雅地终止会话并清理资源。
关闭流程:
1 | 客户端 服务器 |
版本协商
版本协商策略:
-
客户端发送支持的最新版本
-
服务器响应相同版本或支持的其他版本
-
版本格式:
YYYY-MM-DD -
不兼容时断开连接
能力协商
客户端能力:
-
roots:提供文件系统根目录 -
sampling:支持 LLM 采样请求 -
experimental:实验性功能
服务器能力:
-
tools:提供可调用工具 -
resources:提供可读资源 -
prompts:提供提示模板 -
logging:结构化日志 -
experimental:实验性功能
传输机制
标准输入输出 (stdio)
适合本地集成和命令行工具。
特点:
-
客户端将服务器作为子进程启动
-
通过 stdin/stdout 传输 JSON-RPC 消息
-
消息以换行符分隔
-
stderr 用于日志记录
Python 实现示例:
1 | # stdio_server.py |
基于 SSE 的 HTTP
适合远程通信和 Web 应用。
服务器端点:
-
SSE 端点:接收服务器消息
-
HTTP POST 端点:发送客户端消息
工作流程:
1 | 1. 客户端连接到 SSE 端点 |
TypeScript 实现示例:
1 | // http_server.ts |
服务端开发
核心组件
1. 服务器类
1 | from mcp import MCPServer |
2. 工具开发
工具注册格式:
1 | from mcp.types import ToolRegistration |
工具类型:
-
同步工具:立即返回结果
-
异步工具:后台执行,需要轮询状态
-
事件工具:执行后发送事件通知
3. 资源管理
资源注册示例:
1 | from mcp.types import ResourceRegistration |
4. 提示词管理
提示词注册示例:
1 | from mcp.types import PromptRegistration |
事件系统
事件类型:
-
tool.executed:工具执行完成 -
resource.updated:资源更新 -
session.closed:会话关闭 -
error.occurred:错误发生
事件发送示例:
1 | async def long_running_tool_handler(parameters: Dict[str, Any]): |
客户端开发
客户端基础
连接管理
1 | from mcp import MCPClient |
异步操作处理
1 | async def handle_async_tool_call(client: MyMCP客户端, tool_name: str, parameters: Dict[str, Any]): |
事件订阅
1 | async def subscribe_to_events(client: MyMCP客户端): |
实战示例
示例 1: 文件管理器服务器
功能需求:
-
列出目录内容
-
读取文件内容
-
创建和修改文件
-
删除文件和目录
实现代码:
1 | # file_manager_server.py |
示例 2: 天气查询服务器
功能需求:
-
获取实时天气信息
-
获取天气预报
-
支持多个城市
-
缓存查询结果
实现代码:
1 | # weather_server.py |
调试与测试
MCP 检查器
使用官方 MCP Inspector 工具进行调试:
1 | # 安装 MCP Inspector |
日志配置
1 | import logging |
单元测试
1 | # tests/test_server.py |
集成测试
1 | # tests/test_integration.py |
部署指南
Docker 容器化
Dockerfile
1 | FROM python:3.12-slim |
Docker Compose
1 | version: '3.8' |
Kubernetes 部署
Deployment
1 | apiVersion: apps/v1 |
Service
1 | apiVersion: v1 |
Ingress
1 | apiVersion: networking.k8s.io/v1 |
云服务部署
AWS ECS 部署
1 | # task-definition.json |
最佳实践
安全最佳实践
1. 身份认证与授权
1 | from mcp import MCPServer |
2. 输入验证
1 | from typing import Dict, Any |
3. 安全通信
1 | import ssl |
性能最佳实践
1. 连接池管理
1 | import asyncio |
2. 缓存策略
1 | import time |
3. 异步处理
1 | import asyncio |
开发最佳实践
1. 代码组织
1 | mcp-project/ |
2. 配置管理
1 | import os |
3. 错误处理
1 | import logging |
运维最佳实践
1. 监控指标
1 | from prometheus_client import Counter, Gauge, Histogram, start_http_server |
2. 健康检查
1 | from typing import Dict, Any |
官方资源: