模型上下文协议演示工具

一个基于Python的模型上下文协议(MCP)教学项目,通过服务器和客户端实现工具交互与LLM集成。

  • by RiKan47
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 RiKan47/MCP-Learning-Dummy

使用说明

MCP学习模拟项目

该项目是对 模型上下文协议(MCP) 使用Python。它演示了如何构建一个公开工具的MCP服务器,以及一个连接到服务器并使用LLM与这些工具交互的MCP客户端。

特性

  • 标准MCP服务器(server.py):使用核心 mcp.server.Server 类通过提供三个简单的工具 stdio 运输:
    • get_weather:给定位置的模拟天气数据。
    • add_note:将文字注释保存到本地 notes_db 目录。
    • list_notes:列出所有已保存的笔记。
  • MCP客户端(client.py):通过以下方式连接到服务器 stdio,初始化会话并获取工具。它将MCP工具转换为OpenAI工具格式,并使用OpenRouter API与LLM通信。
  • 模型回退:客户端利用OpenRouter的模型路由/回退功能(通过 extra_body 参数)以确保高可用性,如果主模型速率受限或不可用,则优雅地降级。
  • JSON-RPC拦截(wrapper_server.py):一个包装器脚本,将服务器作为子进程运行,将客户端和服务器之间的原始底层JSON-RPC通信回显到控制台(stderr)用于学习和调试目的。
  • 自动验证(test_server.py):一个测试脚本,用于验证服务器的工具,而不需要LLM,包括在 add_note 工具。

先决条件

  • Python 3.10+
  • 在您的环境中定义的所需Python包(例如。, mcp, pydantic, openai, python-dotenv).

通过创建 .env 根目录中的文件:

OPENROUTER_API_KEY="your_openrouter_api_key_here"

运行应用程序

  1. 激活您的虚拟环境 (如果使用一个):

    .\.venv\Scripts\activate
    
  2. 运行MCP客户端:

    python client.py
    

    客户端将初始化,连接到服务器(通过包装器),并将您放入聊天提示中。你可以问它这样的问题:

    • “巴黎的天气怎么样?”
    • “你能留张纸条提醒我喝水吗?”
    • “列出我的笔记。”

    类型 exit 或 quit 以停止会话。

架构和通信流程

  1. 用户运行 client.py.
  2. 客户端生成 wrapper_server.py 作为一个子流程。
  3. 包装纸发芽了 server.py 作为其子流程,并开始拦截标准输入和输出流。
  4. 客户使用 stdio_client 通过其发送JSON-RPC请求 stdout.
  5. 包装器将这些请求打印到控制台(供您查看)并将其转发到服务器。
  6. 服务器处理请求(例如,执行工具),格式化响应,并通过其 stdout.
  7. 包装器拦截响应,打印它,并将其转发回客户端。
  8. 客户端接收响应,并通过OpenRouter将上下文交还给LLM。

自动化测试

要在不影响LLM API的情况下运行自动服务器工具检查,请执行以下操作:

python test_server.py

此测试工具是否存在、基本I/O和净化/安全措施。