Postgres MCP服务器(只读)
此仓库提供了一个简单的MCP服务器,该服务器对以下对象执行只读SQL查询 Postgres数据库并返回JSON结果。写入查询被阻止。
需求
- Python 3.10+(或您的本地版本)
- 依赖关系:
mcp,psycopg2,loguru
设置
创建并激活一个venv,然后安装依赖项 uv:
uv venv
source .venv/bin/activate
uv pip install mcp psycopg2 loguru配置
服务器读取标准的Postgres环境变量:
PGHOSTPGDATABASEPGUSERPGPASSWORDPGPORT
如果未设置,则恢复为中定义的默认值 postgres-connect.py.
跑
source .venv/bin/activate
python postgres-connect.py测试(STDIO烟雾测试)
这将服务器作为子进程运行、执行MCP初始化握手, 列出工具和调用 query_data_read 和 select 1 as ok.
source .venv/bin/activate
python scripts/stdio_smoketest.py如果初始化因协议版本不匹配而失败,则脚本将重试 服务器支持的协议版本并打印出来。
工具
MCP服务器公开了这些工具:
query_data_read(sql_query: str)get_table_schema(table_name: str, schema_name: str | None = None)get_table_indexes(table_name: str, schema_name: str | None = None)get_table_functions(table_name: str, schema_name: str | None = None)
例子
获取表列和约束:
{"tool": "get_table_schema", "args": {"table_name": "users", "schema_name": "public"}}获取索引定义:
{"tool": "get_table_indexes", "args": {"table_name": "users", "schema_name": "public"}}获取触发器链接函数:
{"tool": "get_table_functions", "args": {"table_name": "users", "schema_name": "public"}}局限性
- 只有一个声明
SELECT或WITH允许查询。 - 带有分号的查询将被拒绝。
- 写入操作被阻止。
备注
这是故意最小化的。稍后将添加其他工具和功能。
