数据库调试器

一个提供只读SQL查询功能的MCP服务器,用于安全地检查PostgreSQL数据库。

  • by emalp
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 emalp/mcp-postgres

使用说明

数据库调试器MCP服务器

该项目提供了最低限度的 模型上下文协议 (MCP)服务器,公开单个 run_sql 跑步工具 只读的 针对PostgreSQL数据库的SQL查询。它旨在在MCP兼容的客户端中注册,这样您就可以在不冒写访问风险的情况下检查数据库。

需求

  • Python 3.10+
  • psycopg (或psycopg 3支持的任何其他PostgreSQL驱动程序)
  • mcp (模型上下文协议Python SDK)

安装依赖项:

pip install psycopg[binary] mcp

配置

已读取凭据 仅 根据环境变量:

  • 更喜欢 DATABASE_URL 或 POSTGRES_URL 对于单个连接字符串。
  • 否则,设置离散 PGHOST, PGPORT, PGDATABASE, PGUSER, PGPASSWORD (可选 PGSSLMODE).如果没有提供URL,所有这些都必须存在。

运行服务器

export DATABASE_URL="postgres://readonly:secret@localhost:5432/your_db"
# or export each PG* variable instead
python debugger.py  # defaults to HTTP transport

网络默认设置:

  • MCP_HOST (默认值 127.0.0.1)控制FastMCP绑定到哪个接口。
  • MCP_PORT (默认值 8000)控制监听端口。
  • MCP_TRANSPORT (默认值 streamable-http)如果未通过,则选择FastMCP传输 --transport.

服务器在上启动FastMCP的流式HTTP传输 http://MCP_HOST:MCP_PORT/mcp,这是Cursor在配置HTTP MCP端点时所期望的。

选择交通工具

对于本地开发,您可以将所有内容保留在stdio上(不涉及套接字):

python debugger.py --transport stdio
# or export MCP_TRANSPORT=stdio and run without the flag

当通过HTTP(默认)运行时,服务器会记录确切的URL(http://MCP_HOST:MCP_PORT/mcp)因此,像Cursor这样的MCP客户端可以通过 "transport": "http".

通过Docker运行

您可以将服务器作为容器构建和运行(对Cursor MCP集成很有用):

docker build -t database-debugger-mcp .
docker run --rm \
  -e MCP_HOST=0.0.0.0 \
  -e DATABASE_URL="postgres://readonly:secret@host:5432/your_db" \
  -p 8000:8000 \
  database-debugger-mcp

然后,光标可以:

  1. 通过将MCP配置指向一个小包装器脚本(例如。, docker run --rm ... database-debugger-mcp),或
  2. 使用连接到公开的HTTP端点 "transport": "http", "url": "http://127.0.0.1:8000/mcp".

可用工具

  • run_sql(query: str) -> str:运行单个语句(例如。, SELECT, SHOW, EXPLAIN)并将行作为打印精美的JSON返回。

只读保证

  1. 服务器拒绝包含多条语句的查询。
  2. 每个PostgreSQL会话都被强制进入 default_transaction_read_only = on 和 SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY.
  3. 任何运行变异语句的尝试都会引发错误,并且不会被执行。

故障排除

  • 确保数据库用户本身也具有深度防御的只读权限。
  • 通过 --log-level DEBUG 用于详细日志记录。
  • 使用 --sslmode require (或类似)如果您的部署强制使用TLS。