MCP模式服务器

研究和文档化Python的模型上下文协议(MCP)服务器模式,专注于架构设计、SDK机制和设计权衡。

  • by Atwolf
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Atwolf/mcp-patterns

使用说明

MCP模式

Python模型上下文协议(MCP)服务器模式的研究和文档。这些模式侧重于 mcp Python SDK(模型上下文协议/python sdk).

此存储库记录了架构考虑因素、SDK机制、设计权衡以及每种模式的未决问题。不包括实现代码——这些是旨在为未来的实现提供信息的研究文件。


模式

模式1:资源缓存

作为下游服务的API层的MCP服务器。在连接时,服务器在一次操作中急切地获取所有所需的数据,将其存储为结构化的MCP资源/内存缓存,并使其可编程地供工具使用。工具从缓存中注入参数,而不向LLM提供完整资源或重新查询下游服务。刷新由静态TTL控制。

关键主题:生命周期挂钩、资源注册、工具内部丰富、后台刷新、写时复制并发、缓存资源二元性。

模式2:基于动态范围的工具执行

一种MCP服务器,通过根据用户信息API验证用户JWT(从受信任的上游应用程序中继)来强制执行零信任授权。用户角色和权限在连接时解析,并在四个授权层上强制执行:全局访问、工具可见性、工具调用和数据级过滤。

关键主题:令牌中继, TokenVerifier、会话范围的权限、组件可见性、范围到工具的映射、深度防御、策略引擎集成。

模式3:FastMCP日志记录和可观测性

MCP服务器通过OpenTetry进行结构化日志记录、分布式跟踪和度量,Arize Phoenix作为可观察性后端。将工具调用、缓存操作、授权决策和下游API调用捕获为相关跟踪。支持跨MCP客户端-服务器边界、评估工作流和可配置的生产与开发详细程度的上下文传播。

关键主题:OpenTetry跟踪、Arize Phoenix、OpenInference语义约定、MCP语义约定、通过以下方式传播上下文 _metaPython日志关联、缓存/身份验证跨度检测、度量直方图、评估工作流。


横切关注点

当组合这些模式时,会出现几个考虑因素:

关注 模式1影响 模式2影响
缓存作用域 服务器范围(跨会话共享)与会话范围 每个用户的权限会影响可见的数据
数据过滤 缓存包含所有数据;工具选择相关子集 权限约束哪些子集被授权
初始化 Lifespan从下游获取数据 令牌验证解决用户权限问题
会话状态 可选(缓存是服务器范围的) 必需(每个会话存储权限)
刷新 基于TTL的缓存数据后台刷新 JWT过期控制权限过期
可观测性 缓存刷新范围和过期度量 具有用户/范围属性的授权决策审核范围

关键问题:如果这两种模式结合在一起,缓存是否应该根据用户的权限进行预过滤(会话范围的缓存),还是应该在工具执行时过滤服务器范围的缓存?后者更节省内存;前者默认情况下更安全(没有通过漏洞泄露未过滤数据的风险)。

可观测性集成:模式3为这两种模式提供了跟踪和度量层。缓存操作(模式1)和授权决策(模式2)产生的OTel跨度与Arize Phoenix中可见的统一跟踪相关联。


SDK参考

引用的Python库

图书馆 目的
mcp MCP服务器/客户端SDK
httpx 异步HTTP客户端
pydantic 数据验证和序列化
PyJWT / python-jose JWT处理
authlib OAuth 2.0/OIDC支持
casbin / cedarpy 授权策略引擎
opentelemetry-api / opentelemetry-sdk 分布式跟踪和度量
arize-phoenix-otel Arize Phoenix OTel配置
openinference-instrumentation-mcp MCP客户端-服务器上下文传播