MCP代理演示
最低限度 模型上下文协议(MCP) 该服务器允许LLM使用SQL工具安全地查询本地/云数据库(MySQL、PostgreSQL),然后将结果总结为自然语言答案。
此repo显示了如何:
- 使用以下命令通过stdio运行MCP服务器
fastmcp - 使用连接池连接到数据库
- 通过LLM规划安全SQL(规划器->SQL+参数)
- 从Python客户端调用MCP工具并总结结果
______________________________________________________________________
项目结构
.
├── server.py # MCP server exposing a 'sql_query' tool
├── db.py # DB connection pool + 'query()' helper
├── planner.py # LLM-based SQL planner (natural-language -> SQL + params)
├── summarizer.py # LLM-based answer summarizer for result rows
├── mcp_client.py # MCP stdio client wrapper
├── run.py # End-to-end demo: question -> SQL -> DB -> answer
├── requirements.txt
└── README.md______________________________________________________________________
先决条件:
什么之中的一个:
- 本地MySQL
- 本地PostgreSQL
- AWS RDS(MySQL或Postgres)
与OpenAI兼容的API密钥(OpenAI或公开相同API的任何提供商)
mysqld/psql在您的PATH上可用
安装和设置
1.安装python依赖项
从项目根:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
2.启动服务器(如果是本地的)
2.1 MySQL 在一个终端选项卡中:
mysqld注:- 要停止服务器,请执行以下操作:
你可以使用Contrl+C,但有时它不起作用
因此,您必须进入一个新的终端选项卡并运行
> pkill -f mysqld2.2 PostgreSQL 在您的终端中:
brew services start postgresql3.设置数据库
3.1.MySQL (在另一个选项卡中,我们可以执行>mysql-u -p-h 127.0.0.1-p 3306)
3.2.PostgreSQL (在另一个选项卡中,我们可以执行>psql-h 127.0.0.1-U d )
首次登录时,用户名为root,但稍后切换到您创建的用户
- 创建数据库
- 创建用户
- 创建表
4.添加数据
将数据添加到表中
定义环境变量
在项目根目录中创建一个.env文件,其中包含:
DB_HOST= (mostly 127.0.0.1)
DB_PORT= (3306 for MySQL, 5432 for Postgres)
DB_USER= (username you created)
DB_PASSWORD= (password you created)
DB_DATABASE= (DB you created)
DB_ENGINE= (mysql or postgres)
OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-4o-mini
OPENAI_BASE_URL=https://api.openai.com/v1
PYTHON_BIN=/absolute/path/to/your/.venv/bin/python
MCP_CWD=/absolute/path/to/your/project您可以通过OpenRouter使用Deepseek模型(https://openrouter.ai/)也是。
- 将API键和模型更改为所需的键和模型。
- BASE_URL随后更改为https://openrouter.ai/api/v1
注意-要使用AWS RDS,只需将DB_HOST替换为RDS端点,并确保您的IP可以访问端口3306或5432。
定义架构配置
这些项目支持多个表,这些表可以在schema_conconfig.json文件中定义它们的关系。
它目前有一些示例表。只要用你自己的桌子和关系把它们换掉。
运行流水线
python3 run.py输出如下:
Question: Show price and stock for PS12745538
[Plan]
{
"sql": "SELECT price, in_stock FROM parts WHERE ps_num = %s",
"params": ["PS12745538"]
}
[Raw rows JSON]
[{"price": "39.95", "in_stock": 1}]
---------- Answer ----------
The price of PS12745538 is 39.95 and it is in stock.