使用说明

项目简介

本项目提供了一个简单的计算器MCP服务器的示例实现,主要用于演示和测试 MCP 客户端与服务器的交互。该服务器实现了基本的数学运算工具(加、减、乘、除),并遵循 Model Context Protocol (MCP) 协议与客户端进行通信。

主要功能点

  • 工具注册和管理: 服务器注册了四个数学运算工具:加法 (add)、减法 (sub)、乘法 (mul) 和除法 (div)。
  • 工具调用: 支持客户端通过 MCP 协议调用已注册的工具,执行相应的数学运算并返回结果。
  • 标准 MCP 协议: 使用 JSON-RPC over Stdio 实现 MCP 协议,可以与任何兼容 MCP 协议的客户端进行通信。
  • 测试和示例: 作为 'mcp-openai' 客户端库的测试服务器,帮助开发者理解和验证 MCP 客户端的功能。

安装步骤

该服务器是一个 Python 脚本,无需传统意义上的 "安装"。您需要确保已安装 Python 3.11 或更高版本,并安装了 'mcp' 库。

建议使用 'uv' 进行依赖管理:

  1. 确保您已安装 uv
  2. 在项目根目录下(如果尚未创建),创建一个虚拟环境(可选):'uv venv'
  3. 安装 'mcp' 依赖:'uv pip install mcp'

或者,您可以使用 'pip':

pip install mcp

服务器配置

要让 MCP 客户端连接到此服务器,您需要配置客户端的 MCP 服务器连接信息。以下是一个使用 'mcp-openai' 客户端库连接到此计算器服务器的配置示例(基于 'tests/test_mcp_openai.py' 中的配置)。

MCP 服务器配置 (JSON 格式,用于 MCP 客户端配置):

{
  "calculator": {  // 服务器名称,客户端用于识别和连接
    "command": "uv",  // 启动服务器的命令,这里使用 uv 运行 Python 脚本
    "args": ["run", "path/to/tests/server.py"] // 命令参数,指定运行 server.py 脚本
    // "env": {} // (可选) 环境变量
    // "description": "Simple calculator server" // (可选) 服务器描述
    // "enabled": true // (可选) 是否启用,默认为 true
  }
}

参数注释:

  • 'calculator': 服务器的名称,您可以自定义,客户端配置中通过此名称引用服务器。
  • 'command': 启动服务器进程的命令。 在本例中,假设您使用 'uv' 运行脚本,所以命令是 'uv'。 如果您直接使用 'python' 运行脚本,则命令应为 'python'。
  • 'args': 传递给 'command' 的参数列表。 'run' 是 'uv' 的子命令,用于运行 Python 脚本。 '"path/to/tests/server.py"' 是服务器脚本的路径。 请将 '"path/to/tests/server.py"' 替换为 'tests/server.py' 文件在您本地文件系统中的实际路径。 例如,如果您的项目根目录是 '/home/user/mcp-openai/',则路径可能类似于 '"/home/user/mcp-openai/tests/server.py"'。

注意: MCP 客户端需要根据您的实际环境配置 'command' 和 'args',以确保能够正确启动和连接到 MCP 服务器。

基本使用方法

  1. 启动服务器: 在终端中,导航到包含 'tests/server.py' 文件的目录,并执行以下命令来启动服务器(假设您使用 'uv',并已正确配置路径):

    uv run tests/server.py

    或者,如果您直接使用 'python':

    python tests/server.py

    服务器将在后台运行,并通过标准输入/输出 (stdio) 与客户端通信。

  2. 配置并运行 MCP 客户端: 使用兼容 MCP 协议的客户端(例如 'mcp-openai' 库),并按照客户端库的文档配置 MCP 服务器连接信息,指向您启动的计算器服务器 ('tests/server.py')。

  3. 与 LLM 交互: 通过客户端与 LLM 进行交互。当 LLM 需要使用计算器功能时,MCP 客户端将自动调用计算器服务器提供的工具,并将结果返回给 LLM。

示例交互流程 (使用 'mcp-openai' 客户端库):

from mcp_openai import MCPClient
from mcp_openai import config
import os

# 替换为 server.py 文件的实际路径
server_path = "path/to/tests/server.py"

mcp_client_config = config.MCPClientConfig(
    mcpServers={
        "calculator": config.MCPServerConfig(
            command="uv",  # 或者 "python"
            args=["run", server_path], # 或者 [server_path] 如果 command 是 "python"
        )
    }
)

# ... (LLM 客户端和请求配置,参考 mcp-openai 客户端库文档) ...

client = MCPClient(
    mcp_client_config,
    # ... (LLM 客户端和请求配置) ...
)

async def main():
    await client.connect_to_server("calculator") # 连接到名为 "calculator" 的服务器

    messages = [{"role": "user", "content": "What is 123 + 456?"}]
    messages_out = await client.process_messages(messages)
    print(messages_out[-1]["content"]) # 打印 LLM 的最终回复

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

请根据 'mcp-openai' 客户端库的文档完成 LLM 客户端和请求配置,并将 'server_path' 替换为 'tests/server.py' 的实际路径。

信息

分类

AI与计算