PostgreSQL数据库访问工具

PostgreSQL MCP Server 是一个全面的模型上下文协议服务器,提供36种工具用于查询、管理和通过MCP接口与PostgreSQL数据库交互。

  • by derricksiawor
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 derricksiawor/mav-postgresql-mcp-server

使用说明

PostgreSQL MCP服务器

用于PostgreSQL数据库访问的综合模型上下文协议(MCP)服务器。提供36个工具,用于通过MCP接口查询、管理和与PostgreSQL数据库交互。

特性

  • 36数据库工具:完整的只读和写入操作集
  • PostgreSQL特定功能:模式支持、JSONB操作、扩展、函数、触发器、视图、序列
  • 完全支持SSL/TLS:CA证书、客户端证书、可配置的TLS版本
  • 安全第一:查询验证、速率限制、阻止危险操作
  • 连接池:具有可配置限制的高效连接管理
  • 审计日志:跟踪所有数据库操作

安装

# Clone or copy to your tools directory
cd /path/to/tools/mav-postgresql-mcp-server

# Install dependencies
npm install

# Build the server
npm run build

配置

复制 .env.example 到 .env 并配置您的PostgreSQL连接:

cp .env.example .env

必要设置

变量 描述 默认值
PG_HOST PostgreSQL服务器主机名 localhost
PG_PORT PostgreSQL服务器端口 5432
PG_USER 数据库用户名 postgres
PG_PASSWORD 数据库密码 -
PG_DATABASE 目标数据库名称 -
PG_SCHEMA 默认架构 public

SSL配置

变量 描述 选项
PG_SSL_MODE SSL连接模式 disable, require, verify-ca, verify-full
PG_SSL_REJECT_UNAUTHORIZED 拒绝自签名证书 true, false
PG_SSL_CA_PATH CA证书的路径 -
PG_SSL_CERT_PATH 客户端证书的路径 -
PG_SSL_KEY_PATH 客户端密钥的路径 -
PG_SSL_MIN_VERSION 最低TLS版本 TLSv1.2, TLSv1.3

安全设置

变量 描述 默认值
ALLOW_WRITE_OPERATIONS 启用插入/更新/删除 false
CONNECTION_LIMIT 最大池连接数 10
QUERY_TIMEOUT 查询超时(ms) 30000
MAX_RESULTS 返回的最大行数 1000

速率限制

变量 描述 默认值
RATE_LIMIT_PER_MINUTE 每分钟查询次数 60
RATE_LIMIT_PER_HOUR 每小时查询次数 1000
RATE_LIMIT_CONCURRENT 并发查询 10

用法

使用克劳德桌面

添加到您的Claude Desktop配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):

{
  "mcpServers": {
    "postgresql": {
      "command": "node",
      "args": ["/path/to/mav-postgresql-mcp-server/build/index.js"],
      "env": {
        "PG_HOST": "localhost",
        "PG_PORT": "5432",
        "PG_USER": "your_user",
        "PG_PASSWORD": "your_password",
        "PG_DATABASE": "your_database",
        "PG_SCHEMA": "public",
        "ALLOW_WRITE_OPERATIONS": "false"
      }
    }
  }
}

与MCP检查员一起

npx @anthropic/mcp-inspector node build/index.js

可用工具

核心只读工具(7)

工具 说明
query 执行SELECT查询
list_tables 列出架构中的所有表
describe_table 获取表结构和列
database_info 获取数据库版本和设置
show_indexes 列出表上的索引
explain_query 获取查询执行计划
show_constraints 列出表约束

PostgreSQL专用只读工具(14)

工具 说明
list_schemas 列出数据库中的所有模式
get_current_schema 获取当前搜索路径
list_extensions 列出已安装的扩展
extension_info 获取详细的扩展信息
list_functions 列出用户定义的函数
list_triggers 表上的列表触发器
list_views 在架构中列出视图
list_sequences 列出架构中的序列
table_stats 获取表格统计信息
connection_info 获取当前连接详细信息
database_size 获取数据库/表大小
jsonb_query 查询JSONB列
jsonb_path_query 执行JSON路径查询

写入操作工具(15)

需要 ALLOW_WRITE_OPERATIONS=true

工具 说明
insert 插入一行
update 用条件更新行
delete 删除有条件的行
create_table 创建新表
alter_table 修改表结构
drop_table 放下一张桌子
bulk_insert 插入多行
execute_procedure 调用存储过程
add_index 创建索引
drop_index 删除索引
rename_table 重命名表
set_search_path 更改架构搜索路径
create_schema 创建新架构
drop_schema 删除架构
jsonb_update 更新JSONB字段
vacuum_analyze 优化表格统计

MCP资源

服务器将数据库模式作为MCP资源公开:

  • pg://database/schema -列出所有表和列
  • pg://database/info -数据库信息
  • pg://table/{schema}.{table} -单个表架构

安全功能

受阻操作

默认情况下,服务器会阻止危险操作:

  • 文件系统操作(COPY FROM/TO, pg_read_file等等)
  • 权限修改(GRANT, REVOKE, ALTER ROLE)
  • 行政命令(CREATE ROLE, DROP DATABASE等等)
  • 系统目录修改

受保护的表

对敏感系统表的访问被阻止:

  • pg_catalog.pg_authid
  • pg_catalog.pg_shadow
  • pg_catalog.pg_auth_members

查询验证

  • 所有标识符都经过验证(最多63个字符,仅限安全字符)
  • 查询超时会阻止长时间运行的操作
  • 限速防止滥用

设置只读用户

对于生产使用,创建一个专用的只读PostgreSQL用户:

# Run as PostgreSQL superuser
psql -U postgres -f setup-readonly-user.sql

或手动:

-- Create user
CREATE USER mcp_readonly WITH PASSWORD 'secure_password';

-- Grant connect
GRANT CONNECT ON DATABASE your_database TO mcp_readonly;

-- Grant schema usage
GRANT USAGE ON SCHEMA public TO mcp_readonly;

-- Grant read access to all tables
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_readonly;

-- Set default privileges for future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT SELECT ON TABLES TO mcp_readonly;

发展

# Run in development mode
npm run dev

# Build for production
npm run build

# Type checking
npm run typecheck

故障排除

连接问题

  1. 验证PostgreSQL是否正在运行: pg_isready -h localhost -p 5432
  2. 检查凭据: psql -h localhost -U your_user -d your_database
  3. 启用调试模式: MCP_DEBUG=true

SSL问题

  1. 验证证书路径是否正确
  2. 检查证书权限(运行服务器的用户可读)
  3. 尝试 PG_SSL_MODE=require 首先,然后升级到 verify-ca 或 verify-full

速率限制

如果您达到了速率限制:

  1. 增加 RATE_LIMIT_PER_MINUTE 和 RATE_LIMIT_PER_HOUR
  2. 在可能的情况下进行批量操作
  3. 使用更具体的查询来减少通话量

许可证

麻省理工学院