自定义MCP服务器项目
带有交互式Python客户端的自定义模型上下文协议(MCP)服务器实现。该项目展示了人工智能助手如何通过连接到外部工具和服务来扩展其功能。
什么是MCP?
模型上下文协议(MCP)是一种标准化协议,使AI助手能够与外部数据源和工具进行交互。它充当了人工智能模型和现实世界应用程序之间的桥梁,允许人工智能访问实时数据并执行超出训练数据的操作。
特性
MCP服务器(server.py)
- 添加工具:执行两个数字的加法
- 密语工具:从预定义列表中返回一个随机的秘密单词
- 天气工具:使用wttr.in API获取任何城市的实时天气数据
交互式客户端(client.py)
- 菜单驱动界面,便于工具选择
- 所有刀具参数的动态用户输入
- 错误处理和验证
- 天气符号的Unicode支持
- 异步/等待架构,实现高效通信
技术栈
- Python 3.13
- FastMCP框架:用于创建MCP服务器
- 异步:用于异步编程
- 请求::对于HTTP API调用
- JSON-RPC:用于客户端-服务器通信
- API中的wttr.in:获取天气数据
项目结构
custommcp/
├── server.py # MCP server with tool definitions
├── client.py # Interactive client application
└── README.md # Project documentation安装
先决条件
- Python 3.10或更高版本
- pip(Python包管理器)
设置
- 克隆存储库:
git clone https://github.com/hemalathaa90/Custom_MCP_UsingPython.git
cd Custom_MCP_UsingPython- 安装所需的依赖项:
pip install mcp requests用法
运行交互式客户端
使用MCP服务器的最简单方法是通过交互式客户端:
python client.py交互式菜单:
==================================================
MCP Client - Interactive Mode
==================================================
Available tools:
1. add: Add two numbers.
2. get_secret_word: Get a random secret word
3. get_current_weather: Get current weather for a city
Choose a tool to call (or 'q' to quit):
1. add - Add two numbers
2. get_secret_word - Get a random secret word
3. get_current_weather - Get weather for a city
q. Quit
==================================================
Enter your choice (1/2/3/q):示例用法
1.添加数字:
Enter your choice (1/2/3/q): 1
Enter first number: 25
Enter second number: 17
Result: 25 + 17 = 422.获取一个秘密词汇:
Enter your choice (1/2/3/q): 2
Secret word: banana3.获取天气数据:
Enter your choice (1/2/3/q): 3
Enter city name: London
Fetching weather for London...
Weather report:
[Weather data for London]独立运行服务器
如果您只想运行服务器(用于与其他MCP客户端(如Claude Desktop)集成):
python server.py与Claude Desktop集成
要将此MCP服务器与Claude Desktop一起使用:
- 找到您的Claude Desktop配置文件:
- 视窗: %APPDATA%\Claude\claude_desktop_config.json - macOS: ~/Library/Application Support/Claude/claude_desktop_config.json - Linux: ~/.config/Claude/claude_desktop_config.json
- 添加服务器配置:
{
"mcpServers": {
"demo-mcp-server": {
"command": "python",
"args": ["path/to/custommcp/server.py"]
}
}
}- 重新启动克劳德桌面
- 这些工具现在将在您的Claude对话中可用!
API 参考
工具
add(a: int, b: int) -> int
将两个整数相加并返回结果。
参数:
a(int):第一个数字b(int):第二个数字
退货:
- a和b之和
例子:
add(5, 3) # Returns: 8______________________________________________________________________
get_secret_word() -> str
从预定义列表中返回一个随机单词。
参数: 无
退货:
- 一个随机单词(苹果、香蕉、樱桃、枣或接骨木)
例子:
get_secret_word() # Returns: "banana"______________________________________________________________________
get_current_weather(city: str) -> str
获取指定城市的当前天气信息。
参数:
city(str):城市名称
退货:
- 来自wttr.in的天气报告文本
例子:
get_current_weather("London") # Returns weather data for London技术细节
建筑
该项目使用客户端-服务器架构:
- 服务器 (
server.py):
- 在客户端调用时作为子进程运行 - 通过标准输入/输出进行通信 - 使用JSON-RPC协议进行消息格式化 - 实施MCP协议以进行工具注册和执行
- 客户端 (
client.py):
- 将服务器作为子进程生成 - 建立基于stdio的通信渠道 - 发送JSON-RPC格式的请求 - 处理响应并向用户显示结果
协议流
Client Server
| |
|--- Initialize Connection ---->|
||
||
| (with arguments) |
| |
| [Execute Tool]
| |
|<--- Tool Result --------------|
| |错误处理
该项目包括全面的错误处理:
- 输入验证:检查有效数据类型和非空值
- 网络错误:优雅地处理API超时和连接故障
- Unicode编码:处理不同控制台环境中的特殊字符
- 异常日志:服务器记录所有调试错误
局限性
- 天气API需要互联网连接
- 天气数据取决于wttr.in服务的可用性
- Unicode字符可能无法在所有终端中正确显示
未来的增强功能
- \[\]添加更多工具(计算器功能、数据转换器等)
- \[\]实现动态数据的资源提供者
- \[\]为常见任务添加提示模板
- \[\]创建基于web的用户界面
- \[\]添加身份验证和安全功能
- \[\]为API响应实现缓存
- \[\]添加单元测试和集成测试
- \[\]支持多个天气API提供商
故障排除
问题:“找不到命令:python”
解决方案:确保Python已安装并添加到PATH中。尝试 python3 而不是 python.
问题:“ModuleNotFoundError:没有名为'mcp'的模块”
解决方案:安装所需的软件包: pip install mcp
问题:天气工具返回超时错误
解决方案:检查您的互联网连接和防火墙设置。wttr.in服务也可能暂时不可用。
问题:Unicode字符显示不正确
解决方案:客户端在Windows上自动回退到仅ASCII显示。这是预期的行为。
贡献
欢迎投稿!请随时提交拉取请求。
- 分叉存储库
- 创建功能分支(
git checkout -b feature/AmazingFeature) - 提交您的更改(
git commit -m 'Add some AmazingFeature') - 推到分支(
git push origin feature/AmazingFeature) - 打开拉取请求
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
致谢
作者
Hemalathaa Arumugam Elumalai
- github: @血凝酶90
- 领英: Hemalathaa Arumugam Elumalai
项目状态
🟢 积极发展
______________________________________________________________________
内置❤️ 使用Python和MCP
