mcpField
P
PostgreSQL MCP Server (Enhanced)

PostgreSQL MCP Server (Enhanced)

本地服务
github.com/GarethCott数据库1040 周前更新

关于 PostgreSQL MCP Server (Enhanced)

面向需要通过 AI 客户端操作 PostgreSQL 的用户,提供数据库查询、数据写入和结构管理。除只读查询外,还支持事务化修改及表、函数、触发器和索引等对象管理。

主要功能

  1. 01执行只读 SQL 查询
  2. 02事务化插入、更新和删除
  3. 03创建表、函数与触发器
  4. 04创建索引及修改表结构
  5. 05读取表结构资源

适用场景

  1. 01检查数据库表结构并查询数据
  2. 02通过事务修改数据库记录
  3. 03创建表或调整数据库结构

MCP 相关

该 MCP 服务向客户端提供 PostgreSQL 查询与修改工具,以及自动发现的表结构资源。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"enhanced-postgres": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
启动命令docker run -i --rm build

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocibuild

工具

还没有获取到工具列表

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

详细介绍

PostgreSQL MCP 服务(增强版)

一个 Model Context Protocol 服务,可读写 PostgreSQL 数据库。此服务支持大模型检查数据库架构、执行查询、修改数据,以及创建或修改数据库架构对象。

注意: 这是 Anthropic 原版 PostgreSQL MCP 服务 的增强版本。原版服务仅提供只读访问,而此增强版增加了写入功能和架构管理。

组件

工具
数据查询
  • query
    • 对已连接的数据库执行只读 SQL 查询
    • 输入:sql(string):要执行的 SQL 查询
    • 所有查询都在 READ ONLY 事务中执行
数据修改
  • execute

    • 执行用于修改数据的 SQL 语句(INSERT、UPDATE、DELETE)
    • 输入:sql(string):要执行的 SQL 语句
    • 在事务中执行,并妥善处理 COMMIT/ROLLBACK
  • insert

    • 向表中插入新记录
    • 输入:
      • table(string):表名
      • data(object):键值对,其中键为列名,值为要插入的数据
  • update

    • 更新表中的记录
    • 输入:
      • table(string):表名
      • data(object):要更新字段的键值对
      • where(string):用于确定要更新记录的 WHERE 条件
  • delete

    • 删除表中的记录
    • 输入:
      • table(string):表名
      • where(string):用于确定要删除记录的 WHERE 条件
架构管理
  • createTable

    • 使用指定的列和约束创建新表
    • 输入:
      • tableName(string):表名
      • columns(array):列定义数组,包含名称、类型和可选约束
      • constraints(array):可选的表级约束数组
  • createFunction

    • 创建 PostgreSQL 函数/过程
    • 输入:
      • name(string):函数名
      • parameters(string):函数参数
      • returnType(string):返回类型
      • language(string):语言(plpgsql、sql 等)
      • body(string):函数体
      • options(string):可选的其他函数选项
  • createTrigger

    • 在表上创建触发器
    • 输入:
      • name(string):触发器名称
      • tableName(string):要应用触发器的表
      • functionName(string):要调用的函数
      • when(string):BEFORE、AFTER 或 INSTEAD OF
      • events(array):事件数组(INSERT、UPDATE、DELETE)
      • forEach(string):ROW 或 STATEMENT
      • condition(string):可选的 WHEN 条件
  • createIndex

    • 在表上创建索引
    • 输入:
      • tableName(string):表名
      • indexName(string):索引名
      • columns(array):要建立索引的列
      • unique(boolean):索引是否唯一
      • type(string):可选的索引类型(BTREE、HASH、GIN、GIST 等)
      • where(string):可选条件
  • alterTable

    • 更改表结构
    • 输入:
      • tableName(string):表名
      • operation(string):操作(ADD COLUMN、DROP COLUMN 等)
      • details(string):操作详情
资源

此服务提供数据库中每个表的架构信息:

  • 表架构(postgres://<host>/<table>/schema)
    • 每个表的 JSON 架构信息
    • 包含列名和数据类型
    • 从数据库元数据中自动发现

与 Claude Desktop 配合使用

要在 Claude Desktop 桌面应用中使用此服务,请将以下配置添加到 claude_desktop_config.json 的 "mcpServers" 部分:

Docker
  • 在 macOS 上运行 Docker 时,如果服务在主机网络上运行(例如 localhost),请使用 host.docker.internal
  • 可以使用 postgresql://user:password@host:port/db-name 将用户名/密码添加到 PostgreSQL URL 中
  • 如果需要绕过 SSL 证书验证,请添加 ?sslmode=no-verify
{
  "mcpServers": {
    "postgres": {
      "command": "docker",
      "args": [
        "run", 
        "-i", 
        "--rm", 
        "mcp/postgres", 
        "postgresql://host.docker.internal:5432/mydb"]
    }
  }
}
NPX
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://localhost/mydb"
      ]
    }
  }
}

将 /mydb 替换为你的数据库名称。

使用示例

查询数据
/query SELECT * FROM users LIMIT 5
插入数据
/insert table="users", data={"name": "John Doe", "email": "[email protected]"}
更新数据
/update table="users", data={"status": "inactive"}, where="id='123'"
创建表
/createTable tableName="tasks", columns=[
  {"name": "id", "type": "SERIAL", "constraints": "PRIMARY KEY"}, 
  {"name": "title", "type": "VARCHAR(100)", "constraints": "NOT NULL"},
  {"name": "created_at", "type": "TIMESTAMP", "constraints": "DEFAULT CURRENT_TIMESTAMP"}
]
创建函数和触发器
/createFunction name="update_timestamp", parameters="", returnType="TRIGGER", language="plpgsql", body="BEGIN NEW.updated_at = NOW(); RETURN NEW; END;"

/createTrigger name="set_timestamp", tableName="tasks", functionName="update_timestamp", when="BEFORE", events=["UPDATE"], forEach="ROW"

构建

Docker:

docker build -t mcp/postgres -f Dockerfile . 

安全注意事项

  1. 所有数据修改操作都使用事务,并妥善处理 COMMIT/ROLLBACK
  2. 每项操作都会返回已执行的 SQL,以确保透明度
  3. 服务在插入/更新操作中使用参数化查询,以防止 SQL 注入
  4. 安全修复(v1.0.2):只读查询工具现在使用预处理语句,以防止 SQL 注入攻击绕过事务隔离并执行多条语句

许可证

此 MCP 服务采用 MIT 许可证。这意味着你可以自由使用、修改和分发该软件,但须遵守 MIT 许可证的条款和条件。详情请参阅项目仓库中的 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

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

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