极简版 MCP 工具实现方案

极简版 MCP 工具实现方案

用一个最小示例演示如何实现并注册一个 MCP 工具(greet),供 Claude Code 调用。

目录结构

复制代码
mcp_test/
├── .claude/
│   ├── settings.json        # 项目级 MCP 配置
│   └── settings.local.json  # 本地授权(允许启用该服务器)
├── .mcp.json                # 项目级 MCP 服务器定义
├── .venv/                   # Python 虚拟环境
├── hello_mcp.py             # MCP 服务端实现
└── readme.md

实现步骤

1. 编写 MCP 服务端

新建 hello_mcp.py:

python 复制代码
'''
	MCPServer 这个库
	使用 pip install mcp
	装一下
'''
from mcp.server import MCPServer 

server = MCPServer("hello-world")


@server.tool(description="向某人打招呼")
def greet(name: str) -> str:
    """向某人打招呼"""
    return f"你好,{name}!欢迎使用 MCP 工具!"


if __name__ == "__main__":
    server.run()  # 默认 stdio 传输

要点:

  • MCPServer("hello-world") 创建服务实例,名称需与配置文件中的 key 一致。
  • @server.tool() 装饰器把函数暴露为 MCP 工具,工具名即函数名 greet。
  • 参数 name: str 会自动映射为工具的入参 schema,类型标注不可省略。
  • server.run() 默认使用 stdio 传输,由客户端拉起子进程通信。

2. 注册到 MCP 配置

新建 .mcp.json,把服务注册上去:

json 复制代码
{
  "mcpServers": {
    "hello-world": {
      "type": "stdio",
      "command": "D:/cursor-workspace/mcp_test/.venv/Scripts/python.exe",
      "args": ["D:/cursor-workspace/mcp_test/hello_mcp.py"]
    }
  }
}

要点:

  • command 指向虚拟环境中的 Python 解释器,确保 mcp 依赖可用。
  • args 传入服务端脚本路径。
  • type 固定为 stdio,表示通过标准输入输出通信。

3. 授权启用

在 .claude/settings.local.json 中确认已启用该服务器:

json 复制代码
{
  "enabledMcpjsonServers": [
    "hello-world"
  ]
}

4. 验证调用

重启会话后即可使用该工具,例如:

复制代码
用 greet 工具跟我打个招呼,我叫小明

返回:

复制代码
你好,小明!欢迎使用 MCP 工具!

项目级 vs 全局

以上均为项目级方案,配置写在项目根目录,随仓库共享给团队成员。

若希望全局可用(所有项目都能调用),把 mcpServers 配置注册到 ~/.claude/settings.json 中即可:

json 复制代码
{
  "mcpServers": {
    "hello-world": {
      "type": "stdio",
      "command": "/绝对路径/.venv/Scripts/python.exe",
      "args": ["/绝对路径/hello_mcp.py"]
    }
  }
}

全局配置中的路径需要使用绝对路径,否则在不同项目下无法定位脚本。

相关推荐
金銀銅鐵2 小时前
[Java] 展示增删元素时 LinkedList 的内部变化
java·后端·ai编程
爱和冰阔落3 小时前
【Linux】线程安全进阶:单例模式、可重入函数与死锁排查
linux·运维·安全·单例模式
布吉岛的石头3 小时前
Java 程序员第 50 阶段3:数据工程:预训练语料清洗与去重
java·开发语言·人工智能·深度学习·transformer
先知后行。3 小时前
pimpl
linux
大文说跨境3 小时前
防关联浏览器的指纹覆盖到什么程度:六类参数的实测与自检方法
java·指纹浏览器·tiktok运营
吉普赛的歌3 小时前
如何设置服务器固定时间点自动重启一次
运维·服务器
Carol06303 小时前
上肢及肩肘关节
java·服务器·数据库
yliucherish3 小时前
Log4Shell 复现实录:我读 OpenJDK 源码,发现两道防线的默认值竟然相反
java
维拉德4 小时前
Java新人第一次接打标需求:从抓包找接口到客户端展示
java