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 - 在可能的情况下进行批量操作
- 使用更具体的查询来减少通话量
许可证
麻省理工学院
