返回市场
增强型postgres-mcp服务器

增强型postgres-mcp服务器

作者:GarethCott9 星标更新:2025-09-09

项目介绍

PostgreSQL MCP Server (增强版)

这是一个提供对PostgreSQL数据库读写访问的Model Context Protocol服务器。此服务器使LLMs能够检查数据库模式、执行查询、修改数据以及创建或修改数据库模式对象。

注意: 这是Anthropic原始PostgreSQL MCP服务器的增强版本。原始服务器仅提供只读访问,而这个增强版本增加了写入能力和模式管理功能。

组件

工具

数据查询

  • query
    • 对连接的数据库执行只读SQL查询
    • 输入:sql(字符串):要执行的SQL查询
    • 所有查询都在一个READ ONLY事务中执行

数据修改

  • execute

    • 执行一个修改数据的SQL语句(INSERT, UPDATE, DELETE)
    • 输入:sql(字符串):要执行的SQL语句
    • 在具有适当COMMIT/ROLLBACK处理的事务中执行
  • insert

    • 向表中插入一条新记录
    • 输入:
      • table(字符串):表名
      • data(对象):键值对,其中键是列名,值是要插入的数据
  • update

    • 更新表中的记录
    • 输入:
      • table(字符串):表名
      • data(对象):要更新字段的键值对
      • where(字符串):用于识别要更新记录的WHERE条件
  • delete

    • 从表中删除记录
    • 输入:
      • table(字符串):表名
      • where(字符串):用于识别要删除记录的WHERE条件

模式管理

  • createTable

    • 创建一个具有指定列和约束的新表
    • 输入:
      • tableName(字符串):表名
      • columns(数组):列定义数组,包括名称、类型和可选约束
      • constraints(数组):可选的表级约束数组
  • createFunction

    • 创建一个PostgreSQL函数/过程
    • 输入:
      • name(字符串):函数名
      • parameters(字符串):函数参数
      • returnType(字符串):返回类型
    • language(字符串):语言(plpgsql, sql等)
    • body(字符串):函数主体
    • options(字符串):可选的附加函数选项
  • createTrigger

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

    • 在表上创建一个索引
    • 输入:
      • tableName(字符串):表名
      • indexName(字符串):索引名
      • columns(数组):要索引的列
      • unique(布尔值):是否唯一索引
      • type(字符串):可选的索引类型(BTREE, HASH, GIN, GIST等)
      • where(字符串):可选的条件
  • alterTable

    • 修改表结构
    • 输入:
      • tableName(字符串):表名
      • operation(字符串):操作(ADD COLUMN, DROP COLUMN等)
      • details(字符串):操作详情

资源

该服务器提供了数据库中每个表的模式信息:

  • 表模式 (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": "john@example.com"}

更新数据

/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注入

许可证

此MCP服务器根据MIT许可证发布。这意味着您可以自由地使用、修改和分发软件,但需遵守MIT许可证的条款和条件。更多详细信息,请参见项目存储库中的LICENSE文件。