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参考
- MCP Python SDK —
mcpPyPI上的包 - MCP Python SDK文档
- MCP规范
- FastMCP文档
引用的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客户端-服务器上下文传播 |
