使用说明
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_authidpg_catalog.pg_shadowpg_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
故障排除
连接问题
- 验证PostgreSQL是否正在运行:
pg_isready -h localhost -p 5432 - 检查凭据:
psql -h localhost -U your_user -d your_database - 启用调试模式:
MCP_DEBUG=true
SSL问题
- 验证证书路径是否正确
- 检查证书权限(运行服务器的用户可读)
- 尝试
PG_SSL_MODE=require首先,然后升级到verify-ca或verify-full
速率限制
如果您达到了速率限制:
- 增加
RATE_LIMIT_PER_MINUTE和RATE_LIMIT_PER_HOUR - 在可能的情况下进行批量操作
- 使用更具体的查询来减少通话量
许可证
麻省理工学院