MCP Resource模块详解
摘要
MCP Resource模块是模型上下文协议的核心组件,通过标准化URI接口为AI模型提供安全可控的只读数据访问能力。其核心设计包括数据隔离架构和客户端驱动的访问控制,支持文本/二进制编码格式,适用于配置文件读取、数据库查询和实时监控等场景。模块通过URI解耦物理存储与逻辑访问,结合订阅机制实现动态数据监听,为AI系统提供安全边界内的静态数据交互能力。
核心特性解析
-
数据隔离架构
- 采用URI标识资源路径(如
file:///data/config.json
) - 支持文本(UTF-8)和二进制(base64)编码格式
- 覆盖代码文件、图像等多元数据类型
- 采用URI标识资源路径(如
-
访问控制模式
- 客户端驱动策略:由应用层决定资源加载时机(手动/自动启发式)
- 订阅机制:通过
subscribe_resource()
实现数据变更监听
典型应用场景
URI格式 | 用途说明 |
---|---|
config:///env/production.yaml | 配置文件读取 |
postgres://db1/schema1/table1 | 数据库查询 |
log:///var/log/app/error.log | 实时日志监控 |
实例说明
基础资源服务器实现
使用FastMCP创建文件读取服务:
from fastmcp import FastMCP
import pathlibmcp = FastMCP("FileResourceServer")@mcp.resource("file:///{path}")
def read_file(path: str):"""提供本地文件读取服务"""file = pathlib.Path(path)if not file.exists():raise FileNotFoundError(f"{path} not found")return file.read_text(encoding='utf-8')
通过URI如
file:///data/report.md
实现安全数据交互
企业级应用案例
医疗系统患者数据访问服务:
@mcp.resource("emr:///patients/{id}/records")
def get_patient_records(id: str):"""从电子病历系统获取患者数据"""return db.execute("SELECT * FROM medical_records WHERE patient_id = ?",(id,)).fetchall()
URI格式
emr:///patients/123/records
支持诊疗决策辅助
动态资源订阅示例
金融实时行情订阅服务:
@mcp.resource("market:///stocks/{symbol}")
def stock_quote(symbol: str):"""获取股票实时报价"""return yfinance.Ticker(symbol).history(period="1d")
结合
subscribe_resource()
实现价格波动预警
开发建议
- URI设计规范
- 遵循
<protocol>://<host>/<path>
标准结构
- 遵循
- 二进制资源处理
- 显式声明MIME类型
- 安全防护
- 敏感数据访问需实现OAuth2.0鉴权层