带有上下文的MCP服务器
一个使用FastMCP构建的模型上下文协议(MCP)服务器,用于演示中间件的使用和上下文管理。
概述
这个项目展示了如何构建一个包含以下要素的MCP服务器:
- 自定义中间件使用认证和请求日志记录
UserAuthMiddleware - 上下文管理中间件与工具之间有状态的信息传递
- HTTP传输端口8888上的Streamable HTTP服务器
特点/特性
- 自定义中间件 (
UserAuthMiddleware):
- 拦截工具调用、请求和工具列表 - 记录请求头和元数据 - 在上下文状态中存储用户认证数据(用户ID、权限)
- 工具:
- add带有上下文感知输出的简单加法,显示用户信息 - calculate_health_savings_account_contributions计算HSA(健康储蓄账户)缴款
安装
# Install dependencies
uv sync使用方法
运行服务器
uv run main.py服务器将在 http://localhost:8888 使用可流式传输的HTTP传输。
使用MCP客户端进行测试
python mcp-client.py建筑学
中间件流程
- on_request(在请求时)记录传入请求的头部信息和方法
- 在工具列表上拦截工具的列表请求
- on_call_tool 可以翻译为“呼叫工具”或“应答工具”,具体取决于上下文和该工具的具体功能。在这里,“on_call”可能指的是在呼叫或应答状态下的工具,所以“呼叫工具”或“应答工具”是比较贴切的翻译在工具执行前设置用户上下文(用户ID、权限)
上下文使用
工具可以通过(某种方式)访问中间件设置的状态 Context 对象:
user_id = ctx.get_state("user_id")
permissions = ctx.get_state("permissions")要求
- Python >= 3.13(Python版本大于等于3.13)
- fastmcp >= 2.11.2
- mcp\[cli\] >= 1.12.4
项目结构
.
├── main.py # MCP server with middleware
├── mcp-client.py # Test client
├── pyproject.toml # Project configuration
└── README.md # This file许可证
请参阅项目文档以了解许可证详细信息。
