首页/数据库/go-mcp-postgres

go-mcp-postgres

查看源码
2025-5-12
Words 942Read Time 3 min
Score:85

零负担的MCP服务器,支持与PostgreSQL交互,提供CRUD操作和自动化功能,支持SSE和stdio模式。

go-mcp-postgres

概述

本项目基于 Zhwt/go-mcp-mysql 的代码,借助 AI 的帮助,将数据库从 MySQL 迁移到了 PostgreSQL。这是一个零负担、开箱即用的 Model Context Protocol (MCP) 服务器,用于与 PostgreSQL 进行交互和自动化操作。无需 Node.js 或 Python 环境。该服务器提供了对 PostgreSQL 数据库和表进行 CRUD 操作的工具,并支持只读模式以防止意外的写操作。你还可以通过添加 --with-explain-check 标志,使 MCP 服务器在执行查询前使用 EXPLAIN 语句检查查询计划。
请注意,该项目仍在开发中,可能尚未准备好用于生产环境。

安装

  1. 获取最新的 release,并将其放入你的 $PATH 或易于访问的位置。
  1. 如果你已安装 Go,可以从源码构建:

使用

方法 A:使用命令行参数进行 stdio 模式

注意:如果你将二进制文件放在 $PATH 之外,需要将 go-mcp-postgres 替换为二进制文件的完整路径。例如,如果你将二进制文件放在 Downloads 文件夹中,可以使用以下路径:

方法 B:使用命令行参数进行 sse 模式

可选标志

  • --lang:设置语言选项(en/zh-CN),默认为系统语言。
  • 添加 --read-only 标志以启用只读模式。在此模式下,仅支持以 listread_desc_ 开头的工具。添加此标志后,请确保刷新或重启 MCP 服务器。
  • 默认情况下,CRUD 查询会首先使用 EXPLAIN ? 语句执行,以检查生成的查询计划是否符合预期模式。添加 --with-explain-check 标志以禁用此行为。

工具

多语言支持:所有工具描述将根据 lang 参数自动本地化。
如果你想添加自己的语言支持,请参考 [locales](for i18n) 文件夹。如果要在命令行中使用,需要创建新的 locales/xxx/active-xx.toml 文件。

模式工具

  1. list_database
      • ${mcp.tool.list_database.desc}
      • 参数:无
      • 返回:匹配的数据库名称列表。
  1. list_table
      • ${mcp.tool.list_table.desc}
      • 参数:
        • name:如果提供,列出指定名称的表;否则,列出所有表。
      • 返回:匹配的表名称列表。
  1. create_table
      • ${mcp.tool.create_table.desc}
      • 参数:
        • query:用于创建表的 SQL 查询。
      • 返回:x 行受影响。
  1. alter_table
      • 在 PostgreSQL 服务器中修改现有表。LLM 被告知不要删除现有表或列。
      • 参数:
        • query:用于修改表的 SQL 查询。
      • 返回:x 行受影响。
  1. desc_table
      • 描述表的结构。
      • 参数:
        • name:要描述的表的名称。
      • 返回:表的结构。

数据工具

  1. read_query
      • 执行只读 SQL 查询。
      • 参数:
        • query:要执行的 SQL 查询。
      • 返回:查询结果。
  1. write_query
      • 执行写 SQL 查询。
      • 参数:
        • query:要执行的 SQL 查询。
      • 返回:x 行受影响,最后插入的 id:<last_insert_id>。
  1. update_query
      • 执行更新 SQL 查询。
      • 参数:
        • query:要执行的 SQL 查询。
      • 返回:x 行受影响。
  1. delete_query
      • 执行删除 SQL 查询。
      • 参数:
        • query:要执行的 SQL 查询。
      • 返回:x 行受影响。
  1. count_query
      • 查询某个表的行数。
      • 参数:
        • name:要计数的表的名称。
      • 返回:表的行数。
再次感谢 Zhwt/go-mcp-mysql

许可证

MIT
上一篇
KnowledgeBaseServer
下一篇
isolated-pymcp