mcp连接postgresql
时间: 2025-05-23 19:58:21 浏览: 30
### 如何使用MCP连接到PostgreSQL数据库
为了实现 MCP(Model Context Protocol)服务器与 PostgreSQL 数据库的连接,可以遵循以下设计方案。此方案基于 MCP 的开发框架以及 Python 中常用的数据库操作库 `psycopg2` 或者更现代的异步版本 `asyncpg`。
---
#### 1. **服务器基本结构分析**
- **服务器名称和用途**: Brave Search MCP Server with PostgreSQL Integration
- **主要功能**: 提供对 PostgreSQL 数据库的操作接口,支持查询、插入、更新等功能。
- **外部依赖**:
- `mcp`: MCP 协议的核心库[^1]。
- `asyncpg`: 异步 PostgreSQL 客户端库,用于高效处理数据库请求。
- `uvicorn`: ASGI 应用程序服务器,用于运行 MCP 服务。
---
#### 2. **代码结构设计**
以下是具体的代码结构设计:
##### 导入必要的包和模块
```python
import mcp
from typing import Any, Dict, List
import asyncpg
```
##### 初始化 MCP 服务器实例
```python
# 创建 MCP 服务器实例
mcp = mcp.FastMCP("BraveSearchWithPG")
```
##### 定义常量和配置
```python
DB_CONFIG: Dict[str, str] = {
"user": "your_username",
"password": "your_password",
"database": "your_database",
"host": "localhost", # 替换为实际主机地址
"port": "5432"
}
```
##### 实现辅助函数
创建一个异步函数来初始化数据库连接池:
```python
async def init_db_pool() -> asyncpg.Pool:
"""
初始化并返回一个异步 PostgreSQL 连接池。
Returns:
asyncpg.Pool: 数据库连接池对象。
"""
pool = await asyncpg.create_pool(**DB_CONFIG)
return pool
```
##### 实现 @mcp.tool() 装饰的工具函数
定义一些常见的数据库操作工具函数,例如查询数据或插入记录:
```python
@mcp.tool()
async def query_data(query: str) -> List[Dict]:
"""
执行 SQL 查询并返回结果。
Args:
query (str): 待执行的 SQL 查询语句。
Returns:
List[Dict]: 查询结果列表,每条记录为字典形式。
"""
global db_pool
if not hasattr(mcp, 'db_pool'):
mcp.db_pool = await init_db_pool()
async with mcp.db_pool.acquire() as connection:
records = await connection.fetch(query)
return [dict(record) for record in records]
@mcp.tool()
async def insert_record(table: str, data: Dict[str, Any]) -> None:
"""
向指定表中插入一条新记录。
Args:
table (str): 表名。
data (Dict[str, Any]): 插入的数据字段及其值。
"""
columns = ", ".join(data.keys())
placeholders = ", ".join(f"${i+1}" for i in range(len(data)))
values = tuple(data.values())
sql = f"INSERT INTO {table} ({columns}) VALUES ({placeholders})"
async with mcp.db_pool.acquire() as connection:
await connection.execute(sql, *values)
```
##### 主函数运行服务器
在主函数中启动 MCP 服务器,并加载数据库连接池:
```python
if __name__ == "__main__":
mcp.run(transport="stdio")
```
---
#### 3. **关键要点提醒**
- 必须使用 `@mcp.tool()` 装饰器标记所有对外暴露的功能函数[^2]。
- 在主函数中调用 `mcp.run(transport='stdio')` 来启动服务器。
- 工具函数应具备清晰的文档字符串,描述参数含义及返回值。
- 推荐使用异步函数提升性能,尤其是涉及 I/O 操作的部分。
- 确保数据库连接池被正确初始化并释放资源。
---
#### 4. **测试和调试建议**
- 使用命令 `uvicorn your_server.py` 启动应用程序。
- 查看日志文件路径 `/Library/Logs/Claude/mcp*.log` 获取调试信息。
- 验证 `claude_desktop_config.json` 文件中的配置项是否匹配当前环境设置。
---
### 总结
通过上述方法,可以在 MCP 服务器中集成 PostgreSQL 数据库的支持,从而扩展其功能范围至持久化存储领域。该方案不仅提供了基础的 CRUD 功能,还利用了异步编程的优势提升了整体效率。
---
阅读全文
相关推荐





