使用FastAPI的MCP服务器示例
此存储库包含一个示例 MCP(模型上下文协议) 服务器使用 快速 API。它演示了如何使用虚拟招聘数据(如候选人、工作和面试)在MCP上公开工具和资源。
🚀 特性
- 基于HTTP的可流式MCP服务器
- 以下资源(示例):
- 按ID查找候选人、工作和面试 - 按日期列出的面试名单
- 工具用于:
- 创建、更新、删除候选人 - 列出候选人 - 按技能搜索候选人 - 按日期列出面试
______________________________________________________________________
📁 项目结构
project-root/
├── main.py
├── app/
│ ├── mcp/
│ │ └── mcp.py
│ └── datasources/
│ ├── candidates.py
│ ├── job_postings.py
│ └── interviews.py______________________________________________________________________
🔧 安装说明
1.克隆存储库
git clone git@github.com:unusual-terrain/sample_mcp_client_with_fastapi.git
cd sample_mcp_client_with_fastapi2.安装依赖项
uv sync3.运行MCP服务器
make run-dev服务器现在应该在以下位置运行 http://127.0.0.1:8000 MCP终点位于:
http://127.0.0.1:8000/recruit/mcp4.在开发模式下运行MCP服务器。
mcp dev main.pyMCP检查员将在以下时间启动并运行http://127.0.0.1:6274
______________________________________________________________________
🧠 运作原理
main.py
- 使用生命周期事件初始化FastAPI以管理MCP会话
- 在以下位置安装可流式传输的MCP服务器
/recruit/mcp
mcp.py
- 定义:
- 资源:候选人、职位和面试的静态访问端点 - 工具:用于CRUD操作和过滤的动态可调用工具
示例工具:
@mcp.tool()
def search_candidates_by_skill(skill: str) -> List[Dict]:
return [c for c in candidates if skill in c["skills"]]示例资源:
@mcp.resource("candidate://{candidate_id}")
def get_candidate(candidate_id: str) -> Dict:
return next((c for c in candidates if c["candidate_id"] == candidate_id), None)______________________________________________________________________
🧪 测试服务器
您可以使用以下方法测试端点:
- FastAPI Swagger 用户界面:
http://127.0.0.1:8000/docs - 邮递员或cURL:发送HTTP请求
- 克劳德客户 (见下文)
______________________________________________________________________
🤖 与Claude客户端连接
如果您使用的是Claude驱动的MCP客户端:
- 确保MCP服务器在预期的URL上运行(
http://0.0.0.0:8000/recruit/mcp) - 使用
list_tools()发现可调用工具 - 使用Claude的工具使用API动态调用工具
______________________________________________________________________
🧹 清理
确保您使用以下方式处理会话和资源清理 AsyncExitStack 如有需要。这是内置于生命周期事件中的 main.py.
______________________________________________________________________
📌 备注
- 此示例使用 内存中的虚拟数据 JSON列表中。用生产中的数据库替换。
- MCP工具和资源可以轻松扩展。
- 克劳德客户必须处理
tool_use正确回答并将其循环到对话环境中。
______________________________________________________________________
📄 许可证
此示例项目根据MIT许可证获得许可。
______________________________________________________________________
🙋 支持
如有疑问,请联系\[unusual.terrain.9@gmail.com\]或者提出GitHub问题。
______________________________________________________________________
编码愉快! 🎉
