MCP Server Implementation
镜子 (jìng zi)
MCP-Mirror
README
MCP服务器实现
这是一个基于Flask的完整模型上下文协议(MCP)实现,用于增强大型语言模型使用外部工具的能力。
概述
本仓库演示了如何构建一个处理模型上下文协议(MCP)的服务器。MCP是一种通过直接在模型的文本输出中调用工具来扩展LLM能力的方法。与函数调用不同,MCP将工具定义直接放置在上下文窗口中,并解析模型的自然语言响应以识别工具的使用。
特性
- 🔧 完整的MCP实现: 完整的解析、执行和响应处理
- 🌤️ 示例工具: 带有参数验证的天气和计算器工具
- 🔄 对话流程: 维护跨多个交互的上下文
- 🧩 基于正则表达式的解析: 灵活的文本解析,用于工具调用
- 🚀 Flask API: 用于聊天集成的REST API端点
项目结构
mcp_server/
├── app.py # 主Flask应用程序
├── mcp_handler.py # MCP解析和执行
├── mcp_example.py # 独立的MCP示例
├── requirements.txt # 依赖项
├── tools/ # 工具实现
│ ├── __init__.py
│ ├── weather.py # 天气API工具
│ └── calculator.py # 计算器工具
└── README.md # 本文件
安装
-
克隆仓库:
git clone https://github.com/yourusername/mcp-server.git cd mcp-server -
创建一个虚拟环境:
python -m venv venv source venv/bin/activate # 在Windows上: venv\Scripts\activate -
安装依赖项:
pip install -r requirements.txt -
设置环境变量:
# 创建一个 .env 文件,内容如下: LLM_API_KEY=your_llm_api_key_here WEATHER_API_KEY=your_weather_api_key_here FLASK_APP=app.py FLASK_ENV=development
使用
运行服务器
启动Flask开发服务器:
flask run
用于生产环境:
gunicorn app:app
API 端点
- POST /chat: 处理带有MCP的聊天消息
curl -X POST http://localhost:5000/chat \ -H "Content-Type: application/json" \ -d '{ "messages": [ { "role": "user", "content": "波士顿的天气怎么样?" } ] }'
独立示例
运行示例脚本以查看MCP的实际效果:
python mcp_example.py
工作原理
- 工具注册: 工具及其参数和执行逻辑一起注册
- 工具定义注入: XML格式的工具描述被添加到提示中
- LLM响应处理: 正则表达式模式识别LLM文本输出中的工具调用
- 工具执行: 参数被解析并传递给适当的工具处理程序
- 结果注入: 工具执行结果被插入回响应中
MCP vs. 函数调用
| 特性 | MCP | 函数调用 |
|---|---|---|
| 定义位置 | 在提示文本中 | 在API参数中 |
| 调用格式 | 自然语言 | 结构化JSON |
| 实现 | 文本解析 | API集成 |
| 可见性 | 在响应中可见 | 可能隐藏 |
| 平台支持 | 任何基于文本的LLM | 需要API支持 |
示例对话
用户: 波士顿的天气怎么样?
LLM:
我将为您查询波士顿的天气。
get_weather(location="Boston, MA", unit="fahrenheit")
处理后:
我将为您查询波士顿的天气。
get_weather(location="Boston, MA", unit="fahrenheit")
Result from get_weather:
{
"location": "Boston, MA",
"temperature": 72,
"unit": "fahrenheit",
"conditions": "Partly Cloudy",
"humidity": 68,
"wind_speed": 5.8
}
添加您自己的工具
- 创建一个继承自
Tool的新类 - 定义参数和执行逻辑
- 在MCP处理程序中注册
示例:
class MyTool(Tool):
def __init__(self):
parameters = [
{
"name": "param1",
"type": "string",
"description": "param1的描述",
"required": True
}
]
super().__init__(
name="my_tool",
description="我的工具的描述",
parameters=parameters
)
def execute(self, param1):
# 工具逻辑在这里
return {"result": "已处理 " + param1}
MCP配置和调用流程
-
工具注册:
- MCP工具在处理程序中注册
- 每个工具提供其名称、描述和参数定义
-
工具定义注入:
- 工具定义被添加到系统消息中
- 格式遵循MCP的XML结构
-
LLM响应处理:
- LLM生成可能包含工具调用的响应
- 模式匹配识别文本中的工具调用
- 工具参数被解析并传递给工具执行方法
-
工具执行:
- 工具使用提供的参数执行
- 结果被注入回对话中
-
对话管理:
- 带有工具结果的处理后的响应被添加到对话历史记录中
- 未来的LLM请求包含此历史记录以获取上下文
示例对话
这是一个对话可能看起来的示例:
用户: 波士顿的天气怎么样?
系统: 将带有MCP工具定义的提示发送给LLM
LLM 响应:
我将为您查询波士顿的天气。
get_weather(location="Boston, MA", unit="fahrenheit")
MCP 处理程序: 解析响应,找到工具调用,并执行天气工具
工具执行结果:
Result from get_weather:
{
"location": "Boston, MA",
"temperature": 72,
"unit": "fahrenheit",
"conditions": "Partly Cloudy",
"humidity": 68,
"wind_speed": 5.8
}
处理后的响应 (发送回用户):
我将为您查询波士顿的天气。
get_weather(location="Boston, MA", unit="fahrenheit")
Result from get_weather:
{
"location": "Boston, MA",
"temperature": 72,
"unit": "fahrenheit",
"conditions": "Partly Cloudy",
"humidity": 68,
"wind_speed": 5.8
}
用户: 你能计算出144的平方根吗?
LLM 响应:
我可以为您计算。
calculator(expression="sqrt(144)")
MCP 处理程序: 解析响应,执行计算器工具
工具执行结果:
Result from calculator:
{
"expression": "sqrt(144)",
"result": 12.0
}
处理后的响应 (发送回用户):
我可以为您计算。
calculator(expression="sqrt(144)")
Result from calculator:
{
"expression": "sqrt(144)",
"result": 12.0
}
144的平方根是12。
这演示了MCP工具使用的完整流程,从LLM的基于文本的调用到执行和响应处理。
许可证
MIT
贡献
欢迎贡献!请随时提交Pull Request。
推荐服务器
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
MCP Package Docs Server
促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。
Claude Code MCP
一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。
@kazuph/mcp-taskmanager
用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。
mermaid-mcp-server
一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。
Jira-Context-MCP
MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。
Linear MCP Server
一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。
Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。
Curri MCP Server
通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。