使用说明
PostgreSQL MCP 服务器
一个独立的模型上下文协议(MCP)服务器,为人工智能代理和聊天应用程序提供PostgreSQL数据库访问服务。
概述
这个MCP服务器实现了完整的MCP协议(2024-11-05),使得AI代理能够通过标准化工具与PostgreSQL数据库进行交互。它支持SSE(服务器发送事件)和HTTP/JSON-RPC两种传输方式。
特点/特性
- ✅ 全面支持MCP协议 - 实现了初始化、工具/列表、工具/调用、资源/列表和提示/列表功能
- ✅ PostgreSQL 集成 - 执行查询,列出表,描述模式
- ✅ 双运输 - 支持SSE和HTTP传输方式
- ✅ Docker 准备就绪 - 包含Dockerfile和docker-compose.yml文件
- ✅ 健康检查 - 内置健康监测功能
可用工具
服务器提供了三种MCP工具:
1. postgres_query
在 PostgreSQL 数据库上执行 SQL 查询。
输入:
{
"query": "SELECT * FROM employees WHERE department='Engineering'"
}
输出: 查询结果以JSON对象数组的形式呈现
2. postgres_list_tables
列出当前数据库中的所有表。
输入: 无需任何(要求/条件)
输出: 表名数组
3. postgres_describe_table
获取特定表的模式信息。
输入:
{
"table_name": "employees"
}
输出: 包含列名、类型和约束的表结构
快速入门
先决条件
- Docker 和 Docker Compose
- PostgreSQL 数据库(或使用随附的数据库)
1. 启动服务器
docker compose up -d
这启动了两个服务:
mcp-postgres-db- PostgreSQL 数据库(端口 5433)postgres-mcp-server- MCP服务器(端口8100)
2. 确认它正在运行
# Check health
curl http://localhost:8100/health
# Expected: {"status":"healthy","database":"connected"}
3. 测试MCP端点
# Test SSE endpoint
curl -H "Accept: text/event-stream" http://localhost:8100/mcp
# Test HTTP endpoint
curl -X POST http://localhost:8100/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
配置
环境变量
编辑 docker-compose.yml 进行配置:
postgres-mcp-server:
environment:
# Database connection
POSTGRES_HOST: mcp-postgres-db
POSTGRES_PORT: 5432
POSTGRES_USER: demouser
POSTGRES_PASSWORD: demo123
POSTGRES_DB: demodb
数据库连接
服务器使用以下设置(通过环境变量配置)连接到 PostgreSQL:
- 主持人:
mcp-postgres-db(Docker 服务名称) 或您的 PostgreSQL 主机 - 端口:
5432(内部用)/5433(外部) - 数据库:
demodb - 用户:
demouser - 密码:
demo123
与AI代理的使用
通过mcp-use Python库进行连接
from mcp_use import MCPClient, MCPAgent
from langchain_openai import ChatOpenAI
# Create MCP client
client = MCPClient.from_dict({
"mcpServers": {
"PostgreSQL": {
"url": "http://postgres-mcp-server:8100/mcp",
"headers": {}
}
}
})
# Create agent
llm = ChatOpenAI(model="gpt-4")
agent = MCPAgent(llm=llm, client=client)
# Use it
result = agent.run("Show me all employees in the Engineering department")
关于大型语言模型(LLM)选择的重要说明
为了获得最佳的工具调用结果,请使用:
- ✅ OpenAI(开放人工智能研究所) GPT-4,GPT-4o,GPT-4o-mini(优秀)
- ✅ Ollama:(注:Ollama是一个用于本地运行大型语言模型的工具或框架,具体名称可能因上下文而异,但在此处直接翻译为“Ollama”以保持原名。) llama3.1,llama3.2,mistral(表现良好)
- ⚠️(警告/注意) 避免: qwen2.5:7b(有限制的工具调用支持)
样本数据
随附的 PostgreSQL 数据库包含示例表:
-- Employees table
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
department VARCHAR(50),
salary DECIMAL(10,2)
);
-- Products table
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10,2),
stock INT
);
API 端点
| 端点 | 方法 | 描述 |
|---|---|---|
/ |
GET | 服务器信息 |
/health |
GET | 健康检查 |
/mcp |
GET/POST | MCP协议端点(SSE/HTTP) |
发展
无需 Docker 即可运行
# Install dependencies
pip install fastapi uvicorn psycopg2-binary pydantic
# Set environment variables
export POSTGRES_HOST=localhost
export POSTGRES_PORT=5432
export POSTGRES_USER=demouser
export POSTGRES_PASSWORD=demo123
export POSTGRES_DB=demodb
# Run server
python server.py
更改后重建
docker compose down
docker compose build --no-cache
docker compose up -d
故障排除
连接被拒绝
如果遇到连接错误,请确保:
- PostgreSQL 正在运行:
docker compose ps - 端口8100未被使用:
lsof -i :8100 - 数据库状态良好:
curl http://localhost:8100/health
工具调用不起作用
如果人工智能代理发现了工具但没有调用它们:
- 检查你的大型语言模型(LLM)是否支持工具调用
- 使用明确提示:“调用 postgres_list_tables 工具”
- 考虑切换到OpenAI(gpt-4o-mini)
数据库连接问题
检查数据库日志:
docker compose logs mcp-postgres-db
手动验证连接:
docker exec -it mcp-postgres-db psql -U demouser -d demodb
安全考虑事项
⚠️ 这是一个开发/演示环境。对于生产环境:
- 更改默认凭据 在 docker-compose.yml 中
- 使用环境变量 或者密钥管理
- 实现身份验证 对于MCP端点
- 限制SQL查询功能 (防止 DROP、DELETE 等操作)
- 使用只读数据库用户 在可能的情况下
- 启用SSL/TLS 用于数据库连接
与主应用程序的集成
这台MCP服务器既可以独立使用,也可以与主MCP管理系统集成。
独立使用
独立运行,并可从任何兼容MCP的客户端进行连接。
与MCP管理系统的集成
在你的主应用程序设置中添加:
Name: PostgreSQL MCP Server
Type: HTTP/HTTPS
Category: database
URL: http://postgres-mcp-server:8100/mcp
许可证
麻省理工学院许可证
支持
如遇问题或疑问,请查阅:
- 服务器日志:
docker compose logs postgres-mcp-server - 数据库日志:
docker compose logs mcp-postgres-db - 健康终点:
curl http://localhost:8100/health
技术细节
- 协议: MCP 2024年11月5日
- 交通: SSE(首选)和HTTP/JSON-RPC
- 服务器: FastAPI + Uvicorn
- 数据库驱动程序: psycopg2
- 容器: Python 3.11-slim(轻量级版本)
倾注爱心打造,服务于Model Context Protocol生态系统
