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鑒權層