[ PROMPT_NODE_24738 ]
mcp-context
[ SKILL_DOCUMENTATION ]
# MCP 上下文
> 在您的 MCP 对象中访问日志记录、进度和资源等 MCP 功能。
在定义 FastMCP 工具、资源、资源模板或提示词时,您的函数可能需要与底层的 MCP 会话交互或访问高级服务器功能。FastMCP 为此提供了 `Context` 对象。
> **注意:** 您可以通过 FastMCP 的依赖注入系统访问 Context。对于其他可注入值(如 HTTP 请求、访问令牌和自定义依赖项),请参阅“依赖注入”。
## 什么是 Context?
`Context` 对象提供了一个简洁的接口,用于在函数内访问 MCP 功能,包括:
* **日志记录**:将调试、信息、警告和错误消息发送回客户端
* **进度报告**:向客户端更新长时间运行操作的进度
* **资源访问**:列出并读取服务器注册的资源数据
* **提示词访问**:列出并检索服务器注册的提示词
* **LLM 采样**:请求客户端的 LLM 根据提供的消息生成文本
* **用户引导 (Elicitation)**:在工具执行期间请求用户的结构化输入
* **会话状态**:存储在 MCP 会话中跨请求持久存在的数据
* **会话可见性**:控制哪些组件对当前会话可见
* **请求信息**:访问有关当前请求的元数据
* **服务器访问**:在需要时访问底层的 FastMCP 服务器实例
## 访问 Context
访问上下文的首选方式是使用 `CurrentContext()` 依赖项:
python {1, 6}}
from fastmcp import FastMCP
from fastmcp.dependencies import CurrentContext
from fastmcp.server.context import Context
mcp = FastMCP(name="Context Demo")
@mcp.tool
async def process_file(file_uri: str, ctx: Context = CurrentContext()) -> str:
"""处理文件,使用上下文进行日志记录和资源访问。"""
await ctx.info(f"Processing {file_uri}")
return "Processed file"
这适用于工具、资源和提示词:
python
from fastmcp import FastMCP
from fastmcp.dependencies import CurrentContext
from fastmcp.server.context import Context
mcp = FastMCP(name="Context Demo")
@mcp.resource("resource://user-data")
async def get_user_data(ctx: Context = CurrentContext()) -> dict:
await ctx.debug("Fetching user data")
return {"user_id": "example"}
@mcp.prompt
async def data_analysis_request(dataset: str, ctx: Context = CurrentContext()) -> str: