使用说明
PostgreSQL只读MCP服务器
一种模型上下文协议(MCP)服务器,提供对一个配置的PostgreSQL数据库的安全、只读访问。
服务器公开模式检查、数据预览、自定义 SELECT 查询执行、关系发现、数据库统计、安全连接元数据和 connection_info 提示MCP客户端,如Claude Desktop。
特性
- 每个MCP服务器实例有一个数据库
- 严格的PostgreSQL只读验证(
SELECT仅) - 具有可选功能的模式感知工具
schema输入,默认为public - 服务器端行限制和查询超时保护
- 数据预览,可选列选择,基本
where过滤和文本截断 - 外键关系发现
- 按行和大小显示最大表的数据库统计信息
- 安全
db_info从不暴露密码的输出 connection_info带有连接上下文和使用指南的MCP提示
安装
直接使用 npx 在MCP客户端配置中:
npx -y postgres-readonly-mcp
或全局安装:
npm install -g postgres-readonly-mcp
postgres-readonly-mcp
仅适用于本地开发:
git clone https://github.com/beydemirfurkan/postgres-readonly-mcp.git
cd postgres-readonly-mcp
npm install
npm run build
Claude桌面配置
推荐 npx 设置:
{
"mcpServers": {
"postgres-readonly": {
"command": "npx",
"args": ["-y", "postgres-readonly-mcp"],
"env": {
"POSTGRES_HOST": "127.0.0.1",
"POSTGRES_PORT": "5432",
"POSTGRES_USER": "postgres",
"POSTGRES_PASSWORD": "your_password",
"POSTGRES_DATABASE": "your_database",
"POSTGRES_SSL": "true",
"POSTGRES_SSL_REJECT_UNAUTHORIZED": "true"
}
}
}
}
连接字符串设置:
{
"mcpServers": {
"postgres-readonly": {
"command": "npx",
"args": ["-y", "postgres-readonly-mcp"],
"env": {
"DATABASE_URL": "postgresql://USER:PASSWORD@HOST:5432/DB_NAME",
"POSTGRES_SSL": "true"
}
}
}
}
编辑配置后重新启动Claude Desktop。
多个数据库
一个服务器实例映射到一个PostgreSQL数据库。要公开多个数据库,请添加多个具有不同名称和环境变量的MCP服务器条目:
{
"mcpServers": {
"postgres-crm": {
"command": "npx",
"args": ["-y", "postgres-readonly-mcp"],
"env": {
"DATABASE_URL": "postgresql://USER:PASSWORD@HOST:5432/crm"
}
},
"postgres-analytics": {
"command": "npx",
"args": ["-y", "postgres-readonly-mcp"],
"env": {
"DATABASE_URL": "postgresql://USER:PASSWORD@HOST:5432/analytics"
}
}
}
}
环境变量
POSTGRES_HOST:PostgreSQL主机,默认localhostPOSTGRES_PORT:PostgreSQL端口,默认值5432POSTGRES_USER:PostgreSQL用户,默认值postgresPOSTGRES_PASSWORD:PostgreSQL密码,默认为空POSTGRES_DATABASE:PostgreSQL数据库名称,默认值postgresPOSTGRES_SSL:启用TLS,默认truePOSTGRES_SSL_REJECT_UNAUTHORIZED:默认情况下,拒绝未经授权的TLS证书truePOSTGRES_QUERY_TIMEOUT_MS:查询超时(毫秒),最小值1000,默认值30000DATABASE_URL:PostgreSQL连接URL回退POSTGRES_URL:PostgreSQL连接URL别名
明确的 POSTGRES_* 当两者都存在时,主机字段会覆盖URL值。
如果您的密码包含特殊字符(/, @, :),URL将其编码为连接字符串。
工具
db_info
返回已配置数据库的安全连接元数据。
输入:
{}
list_tables
列出架构中的表/视图。
输入:
{ "schema": "public" }
describe_table
描述列、主键、外键和索引。
输入:
{
"schema": "public",
"table": "users"
}
preview_data
通过可选的列选择和基本筛选预览表中的行。
输入:
{
"schema": "public",
"table": "users",
"columns": ["id", "email", "created_at"],
"where": "created_at >= '2026-01-01'",
"limit": 10
}
run_query
运行自定义只读SQL查询。
输入:
{
"query": "SELECT id, email FROM \"public\".\"users\" ORDER BY id DESC",
"limit": 100
}
show_relations
显示表的外键关系。
输入:
{
"schema": "public",
"table": "orders"
}
db_stats
返回数据库大小、表计数、行估计值, largestByRows,以及 largestBySize.
输入:
{}
提示
connection_info
提供安全的PostgreSQL连接上下文和只读使用指南。密码从不包括在内。
安全模型
- 仅
SELECT允许发表声明 - 一个请求中的多个SQL语句被阻止
- DML、DDL、授予/撤销、维护和管理关键字被阻止
- PostgreSQL的风险函数,如
pg_sleep,dblink,并且文件读取助手被阻止 - 即使查询请求更多行,服务器端的结果也会受到限制
- 对连接/运行时错误进行清理,以避免凭据泄漏
限制
preview_data违约:10,最大值:100run_query违约:1000,最大值:5000- 查询超时:
30000ms默认情况下 - 长文本截断:
200字符
发展
npm install
npm run build
npm run dev
npm test
许可证
麻省理工学院