mcpField
P
PostgreSQL MCP 服务器

PostgreSQL MCP 服务器

本地服务
github.com/cynhardchuengc数据库079 周前更新

关于 PostgreSQL MCP 服务器

这是一个通过 MCP 提供 PostgreSQL 访问能力的服务,面向需要让 AI 助手查询或修改数据库的用户。它提供只读查询、数据修改、表结构查看及显式事务提交与回滚,并支持事务超时和连接池配置。

主要功能

  1. 01执行只读 SQL 查询
  2. 02执行 INSERT、UPDATE、DELETE
  3. 03列出数据库表并查看结构
  4. 04显式提交或回滚事务
  5. 05配置事务超时与连接池

适用场景

  1. 01让 AI 助手查询 PostgreSQL 数据
  2. 02在事务中执行数据修改
  3. 03检查数据库中的表及结构
  4. 04超时后自动回滚事务

MCP 相关

该服务通过 MCP SDK 注册数据库操作工具,并使用 Stdio 传输与 MCP 客户端通信。它向客户端提供查询、数据修改、事务控制及表信息查看能力。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

来自项目 README

作者微信:1875954969

PostgreSQL MCP 服务器

基于Model Context Protocol (MCP)的PostgreSQL数据库访问服务器。该服务器允许AI助手安全地执行PostgreSQL数据库操作,包括查询、插入、更新和删除数据,以及表结构操作。

目录结构

pg-mcp-server/
├── dist/               # 编译后的JavaScript文件
├── src/                # 源代码目录
│   └── lib/            # 核心库文件
│       ├── config.ts           # 配置参数定义
│       ├── index.ts            # 主入口文件和服务器初始化
│       ├── tool-handlers.ts    # 处理各种数据库操作的函数
│       ├── transaction-manager.ts # 事务管理器
│       ├── types.ts            # 类型定义
│       └── utils.ts            # 工具函数
├── package.json        # 项目依赖定义
├── tsconfig.json       # TypeScript编译配置
└── README.md           # 项目说明文档

核心脚本说明

src/lib 目录下的脚本
  1. index.ts

    • 作用:主入口文件,用于初始化和启动MCP服务器。
    • 功能:注册数据库操作工具,设置PostgreSQL连接池,初始化事务管理器,处理命令行参数。
    • 特点:使用MCP SDK创建服务器,注册各种工具函数以处理数据库操作请求。
  2. tool-handlers.ts

    • 作用:包含所有数据库操作的处理函数。
    • 功能:实现SQL查询执行、数据修改操作、表列表获取、表结构描述等功能。
    • 处理函数:
      • handleExecuteQuery: 处理只读SQL查询
      • handleExecuteDML: 处理数据修改操作(INSERT, UPDATE, DELETE等)
      • handleExecuteCommit: 提交事务
      • handleExecuteRollback: 回滚事务
      • handleListTables: 列出数据库中的所有表
      • handleDescribeTable: 获取表结构详细信息
  3. transaction-manager.ts

    • 作用:管理数据库事务的生命周期。
    • 功能:跟踪活动事务,处理事务超时,确保资源正确释放。
    • 关键方法:添加、删除、提交和回滚事务,以及监控事务超时。
  4. types.ts

    • 作用:定义项目中使用的类型和常量。
    • 内容:TrackedTransaction接口用于跟踪事务状态,以及其他常量定义。
  5. utils.ts

    • 作用:提供通用工具函数。
    • 功能:
      • safelyReleaseClient: 安全释放PostgreSQL客户端连接
      • generateTransactionId: 生成唯一事务ID
      • isReadOnlyQuery: 检查SQL是否为只读查询
  6. config.ts

    • 作用:定义服务器配置项。
    • 内容:事务超时设置、监控间隔、PostgreSQL连接池参数等。
    • 特点:支持通过环境变量覆盖默认配置。

MCP SDK 的使用

该项目使用Model Context Protocol (MCP) SDK来实现与AI助手的标准化通信:

  1. 服务器创建:

    const server = new McpServer(
      {
        name: "postgres-full-access",
        version: "0.1.0",
      },
      {
        capabilities: {
          resources: {},
          tools: {},
        },
      }
    );
    
  2. 工具注册:

    server.tool(
      "execute_query",
      "运行只读 SQL 查询(SELECT 语句)",
      { sql: z.string().describe("要执行的 SQL 查询") },
      async (args, extra) => {
        // 处理查询
      }
    );
    
  3. 连接和启动:

    const transport = new StdioServerTransport();
    await server.connect(transport);
    

安装和运行步骤

前置条件
  • Node.js 18.x 或更高版本
  • PostgreSQL 数据库实例
  • npm 或 yarn 包管理器
安装步骤
  1. 克隆仓库

    git clone https://github.com/cynhardchueng/pg-mcp-server.git
    cd pg-mcp-server
    
  2. 安装依赖

    npm install
    

    如果需要单独安装或更新MCP SDK,请使用:

    npm install @modelcontextprotocol/[email protected]
    
  3. 编译TypeScript代码

    npm run build
    
  4. 配置Cursor的MCP配置

    在Cursor编辑器中,需要配置mcp.json文件。一般位于~/.cursor/mcp.json,添加以下内容:

    "pg-mcp-server": {
      "command": "node",
      "args": [
        "项目路径/dist/index.js", 
        "postgresql://用户名:密码@数据库地址:端口/数据库名"
      ],
      "env": {
         "TRANSACTION_TIMEOUT_MS": "60000",
         "MAX_CONCURRENT_TRANSACTIONS": "5",
         "PG_STATEMENT_TIMEOUT_MS": "30000"
      }
    }
    

    注意:请将上述配置中的"项目路径"、"用户名"、"密码"、"数据库地址"、"端口"和"数据库名"替换为实际值。

运行服务器
  1. 基本运行命令

    node dist/index.js postgresql://用户名:密码@数据库地址:端口/数据库名
    
  2. 使用环境变量配置

    TRANSACTION_TIMEOUT_MS=30000 PG_MAX_CONNECTIONS=30 node dist/index.js postgresql://用户名:密码@数据库地址:端口/数据库名
    
可用的环境变量
环境变量描述默认值
TRANSACTION_TIMEOUT_MS事务超时时间(毫秒)15000
MONITOR_INTERVAL_MS监控间隔时间(毫秒)5000
ENABLE_TRANSACTION_MONITOR启用事务监控true
MAX_CONCURRENT_TRANSACTIONS最大并发事务数10
PG_MAX_CONNECTIONS连接池最大连接数20
PG_IDLE_TIMEOUT_MS空闲连接超时(毫秒)30000
PG_STATEMENT_TIMEOUT_MSSQL语句执行超时(毫秒)30000

示例使用

通过MCP协议,AI助手可以执行以下类型的操作:

  1. 执行只读查询

    SELECT * FROM users WHERE age > 18;
    
  2. 执行数据修改

    INSERT INTO users (name, age) VALUES ('张三', 25);
    

    重要:执行数据修改操作(INSERT、UPDATE、DELETE等)后,需要在对话中明确回复"yes"(确认提交)或"no"(回滚事务)。例如:

    AI: 已执行插入操作,事务ID: tx_12345。请回复"yes"提交事务,或"no"回滚事务。
    用户: yes
    AI: 事务已成功提交,数据已永久保存。
    
  3. 查看表结构

    获取表"users"的详细信息
    
  4. 列出所有表

    列出数据库中的所有表
    

注意事项

  • 确保数据库用户具有适当的权限来执行所需的操作。
  • 对于生产环境,建议配置更严格的超时设置和连接池参数。
  • 事务会在超时后自动回滚,以防止长时间运行的事务占用资源。
  • 数据修改操作:所有DML操作(INSERT、UPDATE、DELETE)都在事务中执行,必须显式提交才会永久保存。如果用户没有回复"yes"确认提交,或会话结束,事务将自动回滚。
  • 请勿在配置文件中使用生产环境的数据库凭据,尤其是在公开分享代码时。
  • 尽量只使用查询分析功能,不要直接对生产库进行增删改,属于高危操作,请慎重

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。