模型上下文协议服务器

一个基于Python的简单模型上下文协议(MCP)服务器实现,用于AI助手与外部工具和数据源的安全交互。

  • by frifri
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 frifri/mcp_playground

使用说明

MCP 服务器示例(Python)

一个用Python实现的简单模型上下文协议(MCP)服务器。

什么是MCP?

模型上下文协议(MCP)是一种开放协议,它使像Claude这样的AI助手能够安全地与外部工具和数据源进行交互。MCP服务器会公开工具,供客户端发现并调用。

项目结构

mcp_playground/
├── server.py           # Main MCP server implementation
├── pyproject.toml      # Project metadata and dependencies
├── .python-version     # Python version specification (3.13)
├── .gitignore         # Git ignore rules
└── README.md          # This file

设置

先决条件

  • Python 3.13
  • 紫外线 - 快速的Python包安装器和管理器

安装紫外线(设备)

如果你还没有安装UV:

# On macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# On Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

安装

  1. (如果尚未克隆)请克隆此仓库

  2. 使用 uv 安装依赖项:

uv sync

这将会:

  • 如需自动安装 Python 3.13
  • 创建一个虚拟环境
  • 安装所有来自(指定源/路径的)依赖项 pyproject.toml

运行服务器

运行MCP服务器:

uv run server.py

或者先激活虚拟环境:

source .venv/bin/activate  # On Windows: .venv\Scripts\activate
python server.py

服务器使用stdio(标准输入/输出)进行通信,这是MCP服务器与客户端通信的标准方式。

可用工具

这个示例服务器提供了三个简单的工具:

1. add_numbers(加数)

将两个数字相加。

参数:

  • a (数字):第一个数字
  • b (数字):第二个数字

示例:

{
  "a": 5,
  "b": 3
}

2. 问候

生成个性化的问候语。

参数:

  • name (字符串):要问候的人的名字

示例:

{
  "name": "Alice"
}

3. reverse_string(反转字符串)

反转字符串。

参数:

  • text (字符串):要反转的文本

示例:

{
  "text": "Hello World"
}

与Claude代码一起使用

要使用此MCP服务器与Claude Code配合,您需要在MCP设置中进行配置:

  1. 打开你的Claude Code MCP配置文件(通常位于 ~/.config/claude/claude_desktop_config.json)

  2. 将此服务器添加到 mcpServers 部分/章节:

{
  "mcpServers": {
    "example-server": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/mcp_playground",
        "run",
        "server.py"
      ]
    }
  }
}
  1. 重启Claude代码

  2. 现在,克劳德可以使用这些工具了!

定制服务器

添加新工具

要在服务器上添加一个新工具:

  1. 将工具定义添加到 list_tools() 函数
  2. 将工具实现添加到 call_tool() 函数

示例:

# In list_tools():
Tool(
    name="my_new_tool",
    description="Description of what the tool does",
    inputSchema={
        "type": "object",
        "properties": {
            "param1": {
                "type": "string",
                "description": "Parameter description"
            }
        },
        "required": ["param1"]
    }
)

# In call_tool():
elif name == "my_new_tool":
    param1 = arguments["param1"]
    result = do_something(param1)
    return [TextContent(
        type="text",
        text=f"Result: {result}"
    )]

高级功能

MCP协议支持除基本工具外的额外功能:

  • 资源公开可读的数据(文件、API数据等)
  • 提示提供模板化提示
  • 采样允许服务器请求大型语言模型(LLM)完成任务

检查 MCP文档 如需更多信息。

发展

在开发模式下运行

为了开发,你可能想要添加日志记录:

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

测试

您可以使用MCP Inspector工具测试您的MCP服务器,或者直接将其与Claude Code集成进行测试。

故障排除

“模块未找到”错误

确保您已安装所有依赖项:

uv sync

服务器未出现在Claude代码中

  • 检查您的MCP配置中的路径是否正确
  • 确保虚拟环境已激活(如果使用的话)
  • 尝试重启Claude代码

工具调用失败

  • 检查服务器日志中的错误信息
  • 验证输入模式是否与您传递的内容相匹配
  • 确保提供了所有必需的参数

为什么是UV(紫外线)?

紫外线 是一个现代化的Python包管理器,它:

  • 比 pip 快 10 到 100 倍
  • 自动管理Python版本
  • 内置了虚拟环境支持
  • 兼容pip和pyproject.toml标准

资源

许可证

这是一个用于教育目的的示例项目。