背景
MCP(Model Context Protocol,模型上下文协议) 是一种用于规范大语言模型(LLM)与外部系统之间结构化上下文交互的通信协议。其核心目标是:让模型在决策和执行时,拥有准确、完整、安全且可操作的上下文信息。
它是大模型从“聊天机器人”升级为“可信智能体”的关键桥梁——它不传递原始数据,而是传递“模型此刻需要知道什么、能做什么”的结构化上下文。
MCP 的应用场景广泛,已基本成为智能体与外部应用通信的标准协议。
但由于该协议的兴起太快,市面上的MCP开源框架,并未集成安全方面的相关功能。传统 MCP 实现(如 fastmcp)只解决“模型能调工具”,但未解决“模型是否该调、能否安全调、是否有足够信息调”。
前面文章有介绍,fastmcp并未解决以下问题:
因此,如果要用于生产还需要进行改造。我在文章 juejin.cn/post/759763… 中介绍了在fastmcp基础上手搓一个具备安全属性的MCP服务架构。
开源MCP网关
今天给大家介绍一个开源的MCP网关,它解决了以上问题,并且更加优雅。
这个开源MCP网关的名字是 mcp-context-forge,它与fastmcp对比有如下优势。
| 维度 | fastmcp(假设为轻量级实现) | mcp-context-forge |
|---|---|---|
| 定位 | 快速原型验证,最小化 MCP 协议实现 | 生产级上下文网关,面向企业复杂场景 |
| 上下文能力 | 仅传递基础消息 + 简单工具列表 | 动态聚合多源上下文,支持状态感知 |
| 安全性 | 基础 token 验证 | 集成 IAM、字段级脱敏、操作审批流 |
| 扩展性 | 插件少,难对接内部系统 | 提供上下文插件框架,易集成 CMDB/监控等 |
| 适用场景 | 实验室、Demo、简单问答 | 运维自动化、金融客服、高合规要求场景 |
系统架构
MCP Context Forge 基于 FastAPI 构建,采用清晰的三层架构设计,兼顾高性能、可扩展性与多协议兼容能力,具体如下:
- API 层:提供标准化的 HTTP 与 WebSocket 接入端点,支持 RESTful 请求与实时双向通信;
- 服务层:封装核心业务逻辑,包括上下文聚合、权限校验、MCP 消息编解码及工具调用路由;
- 数据层:采用 PostgreSQL/SQLite 作为持久化存储(用于配置、会话元数据),并集成 Redis 实现高速缓存与临时状态管理。
其架构图如下:
系统原生兼容多种通信协议,灵活适配不同客户端场景:
- Server-Sent Events (SSE) :适用于单向流式响应;
- stdio:支持本地 CLI 工具或嵌入式部署;
- HTTP/REST:用于传统请求-响应模式;
- WebSocket:支撑低延迟、长连接的交互式智能体对话。
同时,它具备横向扩展能力。
- 基于 Redis 的会话状态共享机制,实现无状态服务节点的横向扩展;
- 结合 数据库连接池 与 异步 I/O,有效提升高并发下的吞吐能力与资源利用率。
该架构确保 MCP Context Forge 在保障上下文一致性与安全性的前提下,能够稳定支撑企业级智能运维、多租户 SaaS 应用等复杂场景的规模化部署需求。
协议实现
MCP Context Forge 严格遵循 Model Context Protocol(MCP)规范,全面支持协议定义的核心要素,包括:
- Tools(工具) :注册、发现与调用外部可执行能力;
- Resources(资源) :访问结构化数据实体(如配置项、监控指标、工单记录);
- Prompts(提示模板) :动态注入上下文感知的指令或约束,引导模型行为;
- Notifications(通知) :支持异步事件推送,实现状态变更或告警的实时反馈。
在协议层,系统基于 JSON-RPC 2.0 标准实现消息路由与交互管理,并内置 协议版本协商机制,确保客户端与服务端在兼容性范围内高效通信。该设计不仅保障了跨平台互操作性,也为未来协议演进提供了平滑升级路径。
服务层架构
服务层负责实现各类 MCP 实体(如工具、资源、提示模板、通知等)的核心业务逻辑。所有服务均遵循统一的设计范式,确保系统的一致性与可维护性,具体包括:
- 标准化 CRUD 操作:提供创建、读取、更新和删除的完整生命周期管理;
- 分页支持:对列表类接口内置高效分页机制,保障大规模数据查询性能;
- 指标埋点与追踪:自动采集关键操作的调用频次、响应时延等运行指标,支撑可观测性;
- 事件通知机制:在状态变更或关键操作发生时,发布标准化事件供下游消费。
在技术实现上,所有服务均基于 SQLAlchemy 进行 ORM 数据访问,确保数据库交互的类型安全与可移植性;同时,利用 Redis 作为分布式缓存层,显著提升高频读取场景的响应速度并降低数据库负载。
数据持久化与缓存机制
为有效降低数据库负载并提升系统响应性能,MCP Context Forge 采用三级缓存策略,实现从内存到持久化存储的分层数据访问:
- L1:进程内内存缓存(In-Memory Cache)
每个工作进程(per-worker)维护本地缓存,用于加速高频、只读数据的访问,具有最低延迟但作用域限于单个进程。 - L2:共享 Redis 缓存
作为分布式缓存层,Redis 提供跨进程、跨节点的数据共享能力,适用于需在服务集群中一致缓存的元数据(如工具定义、注册信息等)。 - L3:持久化存储(PostgreSQL / SQLite)
作为系统唯一数据源,负责长期存储所有 MCP 实体的完整状态,确保数据可靠性与事务一致性。
缓存逻辑通过统一的抽象层进行管理,核心由两个单例组件实现:
registry_cache:用于缓存注册中心相关的实体(如可用工具列表、资源目录);tool_lookup_cache:专用于加速工具元数据的查询与解析。
该分层设计在保证数据一致性的同时,显著提升了系统吞吐能力与可扩展性。
传输层与协议适配器
MCP Context Forge 支持多种传输协议,灵活对接上游 MCP 服务器,满足不同部署环境与客户端场景的需求。当前支持的协议包括:
- SSE(Server-Sent Events) :适用于单向、流式下行通信;
- stdio(标准输入/输出) :便于本地 CLI 工具集成或嵌入式运行;
- Streamable HTTP:支持基于 HTTP 的分块传输,兼顾兼容性与流式响应能力;
- WebSocket:提供全双工、低延迟的实时双向通信。
为屏蔽底层协议差异,传输层通过 ClientSession 接口(来自官方 MCP SDK)对各类连接进行统一抽象。上层服务无需感知具体传输细节,仅需调用标准化会话方法即可完成消息收发,从而提升代码复用性与协议可扩展性。
传输层的架构如下:
管理界面与 UI 架构
MCP Context Forge 的管理界面(Admin UI)采用 服务端渲染(Server-Side Rendering) 架构,结合现代轻量级前端技术,兼顾开发效率与交互体验:
-
核心框架:基于 HTMX 实现动态内容加载,减少对复杂前端框架的依赖;
-
客户端交互:使用 Alpine.js 提供轻量级响应式行为(如表单验证、模态框、状态切换等),避免全页面刷新;
-
资源组织:
- 主页面模板:
admin.html,包含 HTML 结构与 HTMX 指令; - 客户端逻辑:集中于
admin.js,封装 Alpine.js 组件与辅助函数; - 路由定义:由 FastAPI 路由器
admin.py:admin_router统一管理,处理页面请求与 API 端点。
- 主页面模板:
该架构在保持后端主导开发模式的同时,提供了接近单页应用(SPA)的流畅交互体验,且易于维护和扩展。
部署模式
MCP Context Forge 支持灵活的部署策略,可无缝适配从开发测试到大规模生产环境的不同需求:
- 单节点开发模式:适用于本地开发与快速验证,支持通过 Docker Compose 一键启动;
- 高可用生产模式:支持在 多集群 Kubernetes 环境中部署,具备自动扩缩容、服务发现与故障恢复能力。
应用已全面容器化,并作为标准 OCI 镜像发布至 GitHub Container Registry,镜像地址为:
ghcr.io/ibm/mcp-context-forge
该设计确保了环境一致性、部署可重复性,并为 CI/CD 流水线集成提供了坚实基础。