
MCP Server
一个基于 Flask 的服务器,实现了模型上下文协议(Model Context Protocol),通过自然语言增强大型语言模型(LLM)的外部工具能力,从而允许像天气查询和计算等工具直接在模型的文本输出中被调用。
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。
推荐服务器

Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。