← 返回文章列表

从零到一实现生产级 MCP Gateway(一):项目概述与架构设计

2025-02-06·5 分钟阅读

从零到一实现生产级 MCP Gateway(一):项目概述与架构设计

前言

2024 年 11 月,Anthropic 发布了 Model Context Protocol (MCP),这个协议被称为"AI 应用界的 USB-C"。短短几个月内,OpenAI、Google、微软、阿里等科技巨头纷纷宣布支持 MCP 协议。2025 年,MCP 生态呈爆发式增长,成为 AI Agent 与外部工具交互的事实标准。

本系列将从零开始,实现一个生产级的 MCP Gateway,深入理解 MCP 协议规范、认证授权、限流熔断、可观测性等核心技术。与之前的 mini-mcp-gateway 不同,本项目将完整实现企业级特性,可直接用于生产环境。

为什么需要生产级 MCP Gateway?

mini-mcp-gateway 的局限性

之前的 mini-mcp-gateway 系列已经介绍了 MCP Gateway 的基础实现,但要真正投入生产使用,还缺少以下关键能力:

┌─────────────────────────────────────────────────────────────────────┐
│                    生产级 vs 教学级 对比                              │
├─────────────────┬─────────────────────┬─────────────────────────────┤
│      特性        │   mini-mcp-gateway  │     mcp-gateway-core        │
├─────────────────┼─────────────────────┼─────────────────────────────┤
│ MCP 协议版本     │ 部分实现            │ 完整实现 2025-11-25 规范     │
│ 认证授权         │ 基础 JWT            │ JWT + API Key + RBAC        │
│ 参数验证         │ 简单校验            │ 完整 JSON Schema 验证        │
│ 持久化存储       │ 内存                │ SQLAlchemy (SQLite/PG)      │
│ 限流熔断         │ 无                  │ Token Bucket + 熔断器        │
│ 可观测性         │ 简单日志            │ OpenTelemetry + Prometheus  │
│ 分布式追踪       │ 无                  │ 完整 TraceContext 支持       │
│ 高可用部署       │ 单机                │ Docker + K8s Ready          │
│ 测试覆盖         │ 基础测试            │ 完整单元测试 + 集成测试       │
└─────────────────┴─────────────────────┴─────────────────────────────┘

企业级场景的核心诉求

┌─────────────────────────────────────────────────────────────────────┐
│                                                                      │
│                        企业级 MCP Gateway                             │
│                                                                      │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│  │   安全管控    │  │   流量治理    │  │   可观测性    │              │
│  ├──────────────┤  ├──────────────┤  ├──────────────┤              │
│  │ • 多租户隔离  │  │ • 限流熔断    │  │ • 分布式追踪  │              │
│  │ • RBAC 权限   │  │ • 负载均衡    │  │ • Prometheus  │              │
│  │ • 审计日志    │  │ • 灰度发布    │  │ • 结构化日志  │              │
│  │ • 敏感数据脱敏│  │ • 健康检查    │  │ • 告警通知    │              │
│  └──────────────┘  └──────────────┘  └──────────────┘              │
│                                                                      │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │                        合规与治理                              │  │
│  │  • 数据保留策略  • 操作审批流程  • 合规审计报告               │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

MCP 协议规范深度解析

协议版本与能力协商

MCP 协议目前最新版本为 2025-11-25,客户端和服务端通过 initialize 方法交换能力:

// 客户端请求
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-11-25",
    "capabilities": {
      "roots": { "listChanged": true },
      "sampling": {}
    },
    "clientInfo": {
      "name": "my-client",
      "version": "1.0.0"
    }
  }
}

// 服务端响应
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-11-25",
    "capabilities": {
      "tools": { "listChanged": true },
      "resources": { "subscribe": true, "listChanged": true },
      "prompts": { "listChanged": true },
      "logging": {}
    },
    "serverInfo": {
      "name": "mcp-gateway-core",
      "version": "1.0.0"
    },
    "instructions": "This gateway provides unified access to enterprise tools..."
  }
}

核心能力矩阵

┌─────────────────────────────────────────────────────────────────────┐
│                       MCP 核心能力矩阵                                │
├─────────────────┬───────────────────────────────────────────────────┤
│     能力域       │                    支持的方法                      │
├─────────────────┼───────────────────────────────────────────────────┤
│ 生命周期管理     │ initialize, ping                                  │
├─────────────────┼───────────────────────────────────────────────────┤
│ 工具调用         │ tools/list, tools/call                            │
├─────────────────┼───────────────────────────────────────────────────┤
│ 资源访问         │ resources/list, resources/read,                   │
│                 │ resources/subscribe, resources/unsubscribe,        │
│                 │ resources/templates/list                          │
├─────────────────┼───────────────────────────────────────────────────┤
│ 提示词管理       │ prompts/list, prompts/get                         │
├─────────────────┼───────────────────────────────────────────────────┤
│ 日志控制         │ logging/setLevel                                  │
├─────────────────┼───────────────────────────────────────────────────┤
│ 通知机制         │ notifications/initialized,                         │
│                 │ notifications/tools/list_changed,                  │
│                 │ notifications/resources/list_changed,              │
│                 │ notifications/resources/updated,                   │
│                 │ notifications/prompts/list_changed,                │
│                 │ notifications/progress                              │
└─────────────────┴───────────────────────────────────────────────────┘

架构设计

整体架构

┌─────────────────────────────────────────────────────────────────────┐
│                           MCP Gateway                                │
│  ┌───────────────────────────────────────────────────────────────┐  │
│  │                        接入层 (API Layer)                       │  │
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐          │  │
│  │  │  /mcp   │  │  /sse   │  │ /tools  │  │/metrics │          │  │
│  │  │ JSON-RPC│  │   SSE   │  │  REST   │  │  Prometheus│         │  │
│  │  └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘          │  │
│  └───────┼────────────┼────────────┼────────────┼────────────────┘  │
│          │            │            │            │                    │
│  ┌───────┴────────────┴────────────┴────────────┴────────────────┐  │
│  │                     中间件层 (Middleware)                       │  │
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐          │  │
│  │  │   Auth  │  │RateLimit│  │  CORS   │  │ Logging │          │  │
│  │  │  Layer  │  │  Token  │  │ Policy  │  │ Tracing │          │  │
│  │  └─────────┘  └─────────┘  └─────────┘  └─────────┘          │  │
│  └───────────────────────────────────────────────────────────────┘  │
│                                                                      │
│  ┌───────────────────────────────────────────────────────────────┐  │
│  │                     协议层 (Protocol Layer)                     │  │
│  │  ┌─────────────────────────────────────────────────────────┐  │  │
│  │  │                   JSON-RPC Handler                       │  │  │
│  │  │  initialize │ ping │ tools/* │ resources/* │ prompts/*  │  │  │
│  │  └─────────────────────────────────────────────────────────┘  │  │
│  └───────────────────────────────────────────────────────────────┘  │
│                                                                      │
│  ┌───────────────────────────────────────────────────────────────┐  │
│  │                     注册中心 (Registry)                         │  │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐           │  │
│  │  │    Tool     │  │  Resource   │  │   Prompt    │           │  │
│  │  │  Registry   │  │  Registry   │  │  Registry   │           │  │
│  │  └─────────────┘  └─────────────┘  └─────────────┘           │  │
│  └───────────────────────────────────────────────────────────────┘  │
│                                                                      │
│  ┌───────────────────────────────────────────────────────────────┐  │
│  │                     存储层 (Storage Layer)                      │  │
│  │  ┌─────────────────────────────────────────────────────────┐  │  │
│  │  │              SQLAlchemy (Async)                          │  │  │
│  │  │  API Keys │ Tool Regs │ Audit Logs │ Resources          │  │  │
│  │  └─────────────────────────────────────────────────────────┘  │  │
│  └───────────────────────────────────────────────────────────────┘  │
│                                                                      │
│  ┌───────────────────────────────────────────────────────────────┐  │
│  │                   可观测性 (Observability)                      │  │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐           │  │
│  │  │   Logging   │  │   Metrics   │  │   Tracing   │           │  │
│  │  │  (JSON)     │  │ (Prometheus)│  │(OpenTelemetry)│         │  │
│  │  └─────────────┘  └─────────────┘  └─────────────┘           │  │
│  └───────────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────────┘

核心模块职责

模块职责关键类/函数
protocol/MCP 协议实现JSONRPCHandler, types.py
registry/工具/资源/提示词注册ToolRegistry, ResourceRegistry
auth/认证授权JWTManager, APIKeyManager, RBAC
middleware/请求处理中间件RateLimitMiddleware, RequestLogger
storage/数据持久化Database, Repository
observability/可观测性setup_tracing, get_logger, metrics

技术选型

核心技术栈

# 后端框架
Web 框架: FastAPI          # 高性能异步框架,原生支持 OpenAPI
ASGI 服务器: Uvicorn       # 生产级 ASGI 服务器

# 数据处理
数据验证: Pydantic v2      # 类型安全,自动文档生成
配置管理: pydantic-settings # 分层配置管理

# 认证授权
JWT: python-jose           # JWT 生成与验证
密码哈希: passlib          # bcrypt 密码哈希

# 数据存储
ORM: SQLAlchemy 2.0        # 异步 ORM,支持 SQLite/PostgreSQL
异步驱动: aiosqlite, asyncpg

# 可观测性
追踪: OpenTelemetry        # 分布式追踪标准
指标: prometheus-client    # Prometheus 指标采集
日志: structlog            # 结构化日志

# 测试
测试框架: pytest           # 单元测试
异步测试: pytest-asyncio   # 异步测试支持
覆盖率: pytest-cov         # 测试覆盖率

# 代码质量
Linter: ruff               # 快速 Linter
类型检查: mypy             # 静态类型检查

为什么选择这些技术?

┌─────────────────────────────────────────────────────────────────────┐
│                         技术选型考量                                  │
├─────────────────┬───────────────────────────────────────────────────┤
│     技术        │                    选择理由                        │
├─────────────────┼───────────────────────────────────────────────────┤
│ FastAPI         │ 原生异步支持、自动 OpenAPI 文档、高性能             │
├─────────────────┼───────────────────────────────────────────────────┤
│ Pydantic v2     │ Rust 加速、严格类型检查、优秀的错误提示             │
├─────────────────┼───────────────────────────────────────────────────┤
│ SQLAlchemy 2.0  │ 异步支持完善、成熟稳定、社区活跃                    │
├─────────────────┼───────────────────────────────────────────────────┤
│ OpenTelemetry   │ 厂商中立、生态完整、K8s 原生支持                   │
├─────────────────┼───────────────────────────────────────────────────┤
│ pytest          │ Python 社区标准、插件丰富、asyncio 原生支持        │
└─────────────────┴───────────────────────────────────────────────────┘

项目结构

mcp-gateway-core/
├── src/mcp_gateway_core/
│   ├── __init__.py          # 公共 API 导出
│   ├── main.py              # FastAPI 应用入口
│   ├── config.py            # 分层配置管理
│   │
│   ├── protocol/            # MCP 协议实现
│   │   ├── __init__.py
│   │   ├── types.py         # 协议类型定义
│   │   └── jsonrpc.py       # JSON-RPC 处理器
│   │
│   ├── registry/            # 注册中心
│   │   ├── __init__.py
│   │   ├── tool_registry.py     # 工具注册
│   │   ├── resource_registry.py # 资源注册
│   │   └── prompt_registry.py   # 提示词注册
│   │
│   ├── auth/                # 认证授权
│   │   ├── __init__.py
│   │   ├── jwt.py           # JWT 管理
│   │   ├── api_key.py       # API Key 管理
│   │   └── rbac.py          # 角色权限控制
│   │
│   ├── middleware/          # 中间件
│   │   ├── __init__.py
│   │   ├── rate_limit.py    # 限流中间件
│   │   └── request_logger.py# 请求日志
│   │
│   ├── observability/       # 可观测性
│   │   ├── __init__.py
│   │   ├── logging.py       # 结构化日志
│   │   ├── metrics.py       # Prometheus 指标
│   │   └── tracing.py       # 分布式追踪
│   │
│   ├── storage/             # 存储层
│   │   ├── __init__.py
│   │   ├── database.py      # 数据库连接
│   │   ├── models.py        # SQLAlchemy 模型
│   │   └── repositories.py  # 仓储模式数据访问
│   │
│   └── utils/               # 工具函数
│
├── tests/                   # 测试套件
│   ├── conftest.py          # pytest 配置
│   ├── test_protocol.py
│   ├── test_registry.py
│   ├── test_auth.py
│   └── test_integration.py
│
├── examples/                # 使用示例
├── docs/                    # 文档
├── pyproject.toml           # 项目配置
└── README.md

API 端点设计

┌─────────────────────────────────────────────────────────────────────┐
│                          API 端点一览                                 │
├─────────────────┬────────┬──────────────────────────────────────────┤
│     端点        │  方法  │                  描述                     │
├─────────────────┼────────┼──────────────────────────────────────────┤
│ /mcp            │ POST   │ MCP JSON-RPC 主端点                       │
├─────────────────┼────────┼──────────────────────────────────────────┤
│ /sse            │ POST   │ SSE 流式响应端点                          │
├─────────────────┼────────┼──────────────────────────────────────────┤
│ /tools          │ GET    │ 列出所有已注册工具 (需认证)               │
├─────────────────┼────────┼──────────────────────────────────────────┤
│ /health         │ GET    │ 详细健康检查                              │
├─────────────────┼────────┼──────────────────────────────────────────┤
│ /ready          │ GET    │ Kubernetes 就绪探针                       │
├─────────────────┼────────┼──────────────────────────────────────────┤
│ /live           │ GET    │ Kubernetes 存活探针                       │
├─────────────────┼────────┼──────────────────────────────────────────┤
│ /metrics        │ GET    │ Prometheus 指标                           │
└─────────────────┴────────┴──────────────────────────────────────────┘

配置管理设计

分层配置

# config.py - 分层配置类设计

from pydantic_settings import BaseSettings, SettingsConfigDict

class ServerConfig(BaseSettings):
    """服务器配置"""
    model_config = SettingsConfigDict(env_prefix='MCP_GATEWAY_')
    
    host: str = "0.0.0.0"
    port: int = 8000
    debug: bool = False
    workers: int = 1

class AuthConfig(BaseSettings):
    """认证配置"""
    model_config = SettingsConfigDict(env_prefix='MCP_AUTH_')
    
    enabled: bool = True
    secret_key: str = "change-me-in-production"
    algorithm: str = "HS256"
    access_token_expire_minutes: int = 30

class DatabaseConfig(BaseSettings):
    """数据库配置"""
    model_config = SettingsConfigDict(env_prefix='MCP_DB_')
    
    url: str = "sqlite+aiosqlite:///./mcp_gateway.db"
    echo: bool = False

class RateLimitConfig(BaseSettings):
    """限流配置"""
    model_config = SettingsConfigDict(env_prefix='MCP_RATE_LIMIT_')
    
    enabled: bool = True
    requests_per_second: float = 100.0
    burst_size: int = 50

class ObservabilityConfig(BaseSettings):
    """可观测性配置"""
    model_config = SettingsConfigDict(env_prefix='MCP_OBS_')
    
    log_level: str = "INFO"
    tracing_enabled: bool = False
    tracing_endpoint: str = "http://localhost:4317"

class Config(BaseSettings):
    """总配置"""
    server: ServerConfig = ServerConfig()
    auth: AuthConfig = AuthConfig()
    database: DatabaseConfig = DatabaseConfig()
    rate_limit: RateLimitConfig = RateLimitConfig()
    observability: ObservabilityConfig = ObservabilityConfig()

环境变量映射

# .env.example
# 服务器配置
MCP_GATEWAY_HOST=0.0.0.0
MCP_GATEWAY_PORT=8000
MCP_GATEWAY_DEBUG=false
MCP_GATEWAY_WORKERS=1

# 认证配置
MCP_AUTH_ENABLED=true
MCP_AUTH_SECRET_KEY=your-super-secret-key-change-in-production
MCP_AUTH_ALGORITHM=HS256
MCP_AUTH_ACCESS_TOKEN_EXPIRE_MINUTES=30

# 数据库配置
MCP_DB_URL=sqlite+aiosqlite:///./mcp_gateway.db
MCP_DB_ECHO=false

# 限流配置
MCP_RATE_LIMIT_ENABLED=true
MCP_RATE_LIMIT_REQUESTS_PER_SECOND=100
MCP_RATE_LIMIT_BURST_SIZE=50

# 可观测性配置
MCP_OBS_LOG_LEVEL=INFO
MCP_OBS_TRACING_ENABLED=false
MCP_OBS_TRACING_ENDPOINT=http://localhost:4317

本系列文章规划

章节标题核心内容
项目概述与架构设计整体架构、技术选型、项目结构
MCP 协议与 JSON-RPC 实现协议类型、消息处理、方法路由
注册中心工具/资源/提示词注册与执行
认证授权JWT、API Key、RBAC 权限模型
中间件限流、日志、请求处理
存储层SQLAlchemy 模型、仓储模式
可观测性日志、指标、分布式追踪
生产实践Docker 部署、K8s 配置、性能调优

小结

本章介绍了生产级 MCP Gateway 的设计理念与整体架构。与教学级的 mini-mcp-gateway 相比,mcp-gateway-core 在认证授权、可观测性、存储层等方面都有显著增强,能够满足企业级应用的核心诉求。

关键要点

  1. 生产级 Gateway 需要完整的安全管控、流量治理、可观测性能力
  2. MCP 2025-11-25 规范定义了完整的能力矩阵
  3. 分层架构设计保证了模块的独立性和可测试性
  4. 配置管理采用 pydantic-settings 实现分层配置

下一章我们将深入 MCP 协议的实现细节,包括 JSON-RPC 消息处理、类型系统设计和方法路由机制。

参考资料

分享: