MCP服务器示例

一个基于FastAPI的MCP(Model Context Protocol)服务器示例,用于展示如何通过MCP协议暴露招聘相关的工具和资源。

  • by unusual-terrain
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 unusual-terrain/sample_mcp_server_with_fastapi

使用说明

使用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_fastapi

2.安装依赖项

uv sync

3.运行MCP服务器

make run-dev

服务器现在应该在以下位置运行 http://127.0.0.1:8000 MCP终点位于:

http://127.0.0.1:8000/recruit/mcp

4.在开发模式下运行MCP服务器。

mcp dev main.py

MCP检查员将在以下时间启动并运行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问题。


编码愉快! 🎉