Production MCP Template

Production MCP Template

A production-grade, extensible Python template for building Model Context Protocol servers with support for Streamable HTTP and stdio transports. It provides a structured framework for implementing tools, resources, and prompts with built-in authentication, observability, and background task management.

Category
访问服务器

README

Production MCP Template

一个偏生产级、可扩展、可直接二次开发的 Python MCP 服务模版。它不是单文件 demo,而是围绕最新 MCP 官方 Python SDK、当前 Streamable HTTP 规范、远程发布形态、认证钩子、可观测性、后台任务、资源/提示/工具分层做出的完整工程骨架。

设计目标

  • 使用官方 mcp Python SDK 的稳定 v1.x 能力,而不是临时 API。
  • 默认面向远程部署:Streamable HTTP + json_response + stateless_http
  • 保留 stdio 兼容,方便本地接入 Claude / Inspector / 其他 MCP host。
  • 工具、资源、提示、服务层、传输层、认证层清晰分离。
  • 提供健康检查、readiness、Prometheus metrics、server.json、Docker、CI、类型检查和测试。
  • 演示 MCP 新能力的落点:structured output、elicitation、sampling、resource templates、completion、event replay。

已实现能力

1. 核心工程骨架

  • src/mcp_template/app
    • 容器、生命周期、Server Factory。
  • src/mcp_template/services
    • 纯服务层,承载业务逻辑,不直接依赖传输协议。
  • src/mcp_template/modules
    • MCP capability 层,负责注册 tools/resources/prompts
  • src/mcp_template/security
    • Token verifier 与认证装配。
  • src/mcp_template/transport
    • SQLite event store,用于 Streamable HTTP 的重放与恢复准备。
  • src/mcp_template/types
    • 所有结构化返回模型。

2. 内置模块

  • system
    • 健康检查、echo、能力目录、构建信息资源、系统提示。
  • workspace
    • 安全的只读工作区扫描、文本读取、资源清单。
  • jobs
    • 后台任务提交、状态查询、任务资源模板、postmortem prompt。
  • design
    • 功能 brief 采集、工具契约设计、host sampling 示例、生产准备模板资源。

3. 生产配套

  • Streamable HTTPstdio 双传输。
  • DNS rebinding 防护与 Origin/Host allowlist。
  • JWT / static bearer 两种 verifier 装配路径。
  • healthzreadyzmetricsmanifestserver.json
  • SQLite event replay store。
  • ruff + mypy + pytest + GitHub Actions
  • Dockerfile.env.exampleMakefileserver.json

为什么这套模版偏“当前最优实践”

这份模版刻意吸收了近一段时间 MCP 官方和社区里最值得保留的思路:

  • 优先使用官方 SDK 的 FastMCP 稳定能力,而不是依赖不确定封装。
  • 默认使用 Streamable HTTP,并保留 stdio,适配本地 host 与远程部署双场景。
  • 把“协议层”与“业务层”拆开,避免工具函数直接长成不可测试的业务体。
  • 让 structured output 成为默认,而不是把一切结果都塞进字符串。
  • 把认证、事件重放、后台任务、可观测性当成一等公民,而不是上线前才补。
  • elicitationsampling 作为未来高级能力保留入口。

快速开始

1. 安装

uv sync --all-groups

2. 配置

cp .env.example .env

3. 运行诊断

uv run mcp-template doctor

4. 运行 HTTP 模式

uv run mcp-template run --transport streamable-http

默认监听:

  • Host: 127.0.0.1
  • Port: 8000
  • MCP endpoint: /mcp

5. 运行 stdio 模式

uv run mcp-template run --transport stdio

与 Host / Inspector 联调

Claude Code / Claude

claude mcp add --transport http mcp-template http://localhost:8000/mcp

MCP Inspector

npx -y @modelcontextprotocol/inspector

然后连接:

http://localhost:8000/mcp

常用命令

uv run mcp-template show-config
uv run mcp-template doctor
uv run mcp-template run --transport stdio
uv run mcp-template run --transport streamable-http
uv run ruff format .
uv run ruff check .
uv run mypy src
uv run pytest

或者:

make sync
make fmt
make lint
make test
make run-http
make run-stdio
make doctor

配置说明

关键环境变量如下:

  • MCP_TEMPLATE_DEFAULT_TRANSPORT
    • stdio / sse / streamable-http
  • MCP_TEMPLATE_JSON_RESPONSE
    • 是否为 Streamable HTTP 返回 JSON response
  • MCP_TEMPLATE_STATELESS_HTTP
    • 是否启用 stateless 模式
  • MCP_TEMPLATE_EVENT_STORE_BACKEND
    • none / sqlite
  • MCP_TEMPLATE_EVENT_STORE_PATH
    • SQLite 事件库路径
  • MCP_TEMPLATE_ENABLED_MODULES
    • 启用哪些 capability 模块
  • MCP_TEMPLATE_AUTH_MODE
    • none / static-bearer / jwt
  • MCP_TEMPLATE_AUTH_ISSUER_URL
    • 认证发行方
  • MCP_TEMPLATE_AUTH_RESOURCE_SERVER_URL
    • 资源服务器 URL
  • MCP_TEMPLATE_JWT_JWKS_URL
    • JWT 验签 JWKS 地址

项目结构

.
├── .github/workflows/ci.yml
├── CLAUDE.md
├── Dockerfile
├── Makefile
├── server.json
├── src/mcp_template
│   ├── app
│   ├── core
│   ├── modules
│   ├── security
│   ├── services
│   ├── transport
│   ├── types
│   ├── cli.py
│   └── config.py
└── tests

如何扩展

新增一个业务模块

  1. src/mcp_template/modules/ 下新增模块文件。
  2. 在模块里实现 register(server, container) -> ModuleDescriptor
  3. 把工具逻辑放入 services/,不要直接堆在 tool 函数里。
  4. src/mcp_template/modules/__init__.py 注册。
  5. 写对应测试。

接入真实外部系统

推荐路径:

  1. services/ 新增客户端或仓储层。
  2. tenacity 包装重试。
  3. 设定 timeout、错误分类和结构化输出。
  4. 如果有副作用,明确 tool annotation 和鉴权边界。

增加远程认证

推荐路径:

  1. 保持 AuthSettings 与 verifier 解耦。
  2. 优先接入标准 issuer + JWKS。
  3. 作用域设计要贴近真实操作边界。
  4. 不要把“静态 token”当成真正生产方案。

健康与运维接口

  • GET /healthz
    • 进程级健康与模块状态。
  • GET /readyz
    • 就绪探针。
  • GET /metrics
    • Prometheus 指标。
  • GET /manifest
    • 运行时 manifest。
  • GET /server.json
    • Registry 风格输出。

当前测试状态

已验证:

  • ruff check
  • mypy src
  • pytest

后续建议

如果你要把这个模版推进到更重的企业场景,建议继续演进:

  • OpenTelemetry tracing / metrics exporter
  • Redis 或 Postgres event store
  • 多租户鉴权与 header variable 注入
  • MCP Apps / ui:// 资源
  • 更完整的 OAuth Authorization Server provider
  • 更强的审计日志与策略引擎

设计依据与参考

这份模版主要基于以下官方资料与实现方向:

如果你希望,我还可以在这份模版上继续扩展:

  • 多租户 SaaS 版本
  • 接入真实数据库 / Redis / S3 / Queue
  • OAuth 资源服务器完整实现
  • MCP Apps 前端壳层
  • 面向某个具体业务域的企业级 server 脚手架

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选