PostgreSQL MCP 服务器
一个用于只读访问PostgreSQL数据库的模型上下文协议(MCP)服务器。该服务器为人工智能系统提供安全、只读的PostgreSQL数据库访问权限,以便进行模式内省和数据查询。
特点/功能
- 表格信息获取有关表的详细信息,包括列、类型、可为空状态、外键引用(出向和入向)关系
- 列出表格列出数据库中所有可访问的表
- 搜索表使用支持模糊匹配的正则表达式模式搜索表格
- 数据获取查询表数据,支持可配置的限制和大字段的文本截断
- 扩展数据访问检索最大可达8KB的文本/二进制大对象(blob)字段,支持续传
- “JOIN Suggestions” 翻译成中文是:“加入建议”或“参与建议”(根据上下文,也可灵活翻译为“提出加入意见”或“参与提出建议”等)基于外键关系和命名模式的智能JOIN表达式建议
- 只读安全所有操作均为只读,以防止意外修改数据
- 智能数据限制文本字段截断为128个字符,默认情况下二进制数据限制为32字节
- 连接池高效的数据库连接管理,带超时设置
安装
npm install
npm run build用法
服务器需要 PostgreSQL 的连接详细信息。您可以通过以下方式提供这些信息:
- 环境变量:
export POSTGRES_HOST=localhost
export POSTGRES_PORT=5432
export POSTGRES_DATABASE=your_db
export POSTGRES_USER=your_user
export POSTGRES_PASSWORD=your_password
npm start- 命令行参数:
npm start -- --host localhost --port 5432 --database your_db --user your_user --password your_password- 直接节点执行:
node build/index.js --database your_db --user your_user --password your_password- 使用MCP Inspector进行测试:
npx @modelcontextprotocol/inspector node build/index.js --database your_db --user your_user --password your_passwordMCP 工具
get_table_info
获取特定表格的全面信息。
- 参数:
table_name(字符串) - 退货表结构、列详情、约束、外键的出向和入向关系
list_tables
列出数据库中所有可访问的表。
- 回报包含可选模式信息的表名数组
search_tables
使用正则表达式模式搜索表格。
- 参数:
pattern(字符串) - 用于匹配表名的正则表达式模式 - 退货匹配表名并评估相关性得分
fetch_table_data
从具有安全限制的表中提取数据。
- 参数:
- table_name (字符串) - limit (数字,默认值:100)- 返回的最大行数 - offset (数字,默认:0)- 要跳过的行数
- 退货表格数据中,文本字段限制为128个字符,二进制大对象(BLOB)限制为32字节
fetch_extended_data
获取最大达8KB的文本/二进制大对象(BLOB)字段。
- 参数:
- table_name (字符串) - row_id (字符串|数字)- 主键值 - column_name (string) - 从该列获取扩展数据
- 回报扩展字段数据可达8KB
suggest_join_on_expression
基于表间全面的外键分析,建议使用JOIN表达式。利用基于SQL的高级分析技术,查找直接关系、反向关系以及通过共享引用进行的连接。
- 参数:
- existing_tables (array) - 查询中已存在的表及其别名的列表 - table_name (字符串) - 已存在表的名称 - alias (字符串) - 此表使用的别名 - new_table (对象) - 为新表建议JOIN表达式 - table_name (字符串)- 要连接的新表的名称 - alias (字符串)- 新表的别名
- 退货建议使用带有数值评分(0-100)的JOIN表达式:
- 分数95-100直接外键关系 - 得分85-94通过共享表引用进行连接 - 分数70-84命名约定匹配(例如,user_id → users.id) - 分数50-69部分名称匹配 - 分数 \< 50常见的列名
发展
格式化和代码检查
这个项目使用 生物群落(或生物群系) 用于代码格式化和代码检查:
# Format code
npm run format
# Check formatting (without fixing)
npm run format:check
# Run linter
npm run lint
# Fix linting issues automatically
npm run lint:fix
# Run both formatting and linting checks
npm run check
# Fix all issues automatically
npm run check:fix建筑
npm run build # Compile TypeScript
npm run dev # Run in development mode
npm start # Run compiled server配置
创建一个 .env 项目根目录中的文件:
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DATABASE=your_database
POSTGRES_USER=your_user
POSTGRES_PASSWORD=your_password
POSTGRES_SSL=false安全
- 所有数据库操作均为只读
- 不允许进行DDL/DML操作
- 连接遵循最小权限原则
- 出于安全考虑,默认截断文本和二进制大对象(BLOB)数据
- 不执行任意SQL - 仅执行预定义的安全查询
许可证
麻省理工学院(MIT)
