PostgreSQL只读访问服务器

PostgreSQL MCP Server是一个为AI系统提供安全只读访问PostgreSQL数据库的服务,支持模式内省和数据查询。

  • by ferrybig
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ferrybig/postgresql-mcp-readonly

使用说明

PostgreSQL MCP 服务器

一个用于只读访问PostgreSQL数据库的模型上下文协议(MCP)服务器。该服务器为人工智能系统提供安全、只读的PostgreSQL数据库访问权限,以便进行模式内省和数据查询。

特点/功能

  • 表格信息获取有关表的详细信息,包括列、类型、可为空状态、外键引用(出向和入向)关系
  • 列出表格列出数据库中所有可访问的表
  • 搜索表使用支持模糊匹配的正则表达式模式搜索表格
  • 数据获取查询表数据,支持可配置的限制和大字段的文本截断
  • 扩展数据访问检索最大可达8KB的文本/二进制大对象(blob)字段,支持续传
  • **“JOIN Suggestions” 翻译成中文是:“加入建议”或“参与建议”(根据上下文,也可灵活翻译为“提出加入意见”或“参与提出建议”等)**基于外键关系和命名模式的智能JOIN表达式建议
  • 只读安全所有操作均为只读,以防止意外修改数据
  • 智能数据限制文本字段截断为128个字符,默认情况下二进制数据限制为32字节
  • 连接池高效的数据库连接管理,带超时设置

安装

npm install
npm run build

用法

服务器需要 PostgreSQL 的连接详细信息。您可以通过以下方式提供这些信息:

  1. 环境变量:

    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
    
  2. 命令行参数:

    npm start -- --host localhost --port 5432 --database your_db --user your_user --password your_password
    
  3. 直接节点执行:

    node build/index.js --database your_db --user your_user --password your_password
    
  4. 使用MCP Inspector进行测试:

    npx @modelcontextprotocol/inspector node build/index.js --database your_db --user your_user --password your_password
    

MCP 工具

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)