Skip to content

Releases: gxc/gaussdb-ro-mcp

gaussdb-ro-mcp v0.2.3

Choose a tag to compare

@github-actions github-actions released this 23 Sep 03:24

Full Changelog: v0.2.2...v0.2.3

gaussdb-ro-mcp v0.2.2

Choose a tag to compare

@gxc gxc released this 14 Sep 01:01

gaussdb-ro-mcp v0.2.2

安全加固与工程修复版本。

只读强制加固(fail-closed)

  • 事务只读生效验证:每条查询在 SET LOCAL TRANSACTION READ ONLY 之后、执行之前,回读 SHOW transaction_read_only 校验——若只读设置被中间代理剥离/忽略,查询被拒绝而非在可写事务中执行(fail-closed:宁可拒绝服务,不可静默失去保护)
  • 残留事务清理:服务端复用会话若残留活动/中止事务,在 BEGIN 前按协议状态位 ROLLBACK 清理(活动事务内 BEGIN 仅产生 WARNING,查询会并入外来事务、COMMIT 替人提交);入池连接(AfterConnect)同样先清理再设置会话参数
  • 收尾失败不丢数据:COMMIT 阶段失败(如近超时查询在收尾时 ctx 耗尽)不再丢弃已完整取回的结果——execute_select 结果附 warning 字段说明提交失败;收尾 ROLLBACK 使用独立 context 确保不带事务的连接归还连接池
  • 排空错误不再丢失:截断场景下结果集关闭/排空阶段的错误不再被误标为"成功截断"

其他修复

  • guardE 前缀不再误用于双引号——SELECT e"x"(列 + 引号别名)等合法 SQL 不再被误拒为 U&"…" 转义标识符
  • config:时长溢出边界修正(>=9223372036.8547758s 一类值不再回绕为负);字符串形式负时长显式报错;空/纯注释配置给出可操作错误;pool_max_conns 超界校验;密码含 :// 的 keyword=value DSN 不再丢失 sslmode;引号感知的 DSN 参数检测(sslmode / connect_timeout 识别统一口径)
  • db:分区探测 singleflight 化(并发只触发一次探测、不持锁跨网络往返);ListTables 截断时补报 total_count;float32 有限值不再精度放大;describe_table 恢复对序列/索引等对象的探查(kind 原样返回)
  • 仓库构建修复go.mod 与两个 vendor 源文件此前被 gitignore 规则误伤未入库,导致 clone 后无法构建——已补齐并加反向规则防止复发(v0.2.1 及之前的源码发布存在此问题,从源码构建的用户必须使用本版本
  • 输出微调--version 仅输出版本号(最新版本地址保留在 --help 中)

下载与安装

文件 架构
gaussdb-ro-mcp-linux-amd64 x86_64
gaussdb-ro-mcp-linux-arm64 ARM64
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/latest/download/gaussdb-ro-mcp-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version   # v0.2.2

静态链接(CGO_ENABLED=0),无运行时依赖。完整性校验见附件 SHA256SUMS.txt

兼容性

配置文件与 v0.1.x / v0.2.x 完全兼容;适用于 GaussDB 集中式与分布式实例、openGauss。

完整变更:v0.2.1...v0.2.2

gaussdb-ro-mcp v0.2.1

Choose a tag to compare

@gxc gxc released this 10 Sep 08:01

gaussdb-ro-mcp v0.2.1

补丁版本:发布产物改为无版本号命名,使 releases/latest/download/<文件名> 固定下载链接始终指向最新版本。连接超时配置修复。

变更

  • 产物命名:二进制文件名不再携带版本号(gaussdb-ro-mcp-linux-amd64 / gaussdb-ro-mcp-linux-arm64),固定下载链接自此可用:
    https://github.com/gxc/gaussdb-ro-mcp/releases/latest/download/gaussdb-ro-mcp-linux-amd64
  • 修复:URL 形式 DSN(?connect_timeout=1)中显式配置的 connect_timeout 此前会被服务级默认值静默覆盖,现已正确生效(issue 评审发现,含回归测试)
  • 文档:README 安装命令改用固定链接;补充实例级 connect_timeout 配置说明

下载与安装

文件 架构
gaussdb-ro-mcp-linux-amd64 x86_64
gaussdb-ro-mcp-linux-arm64 ARM64
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/latest/download/gaussdb-ro-mcp-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version   # v0.2.1

静态链接(CGO_ENABLED=0),无运行时依赖。完整性校验见附件 SHA256SUMS.txt

兼容性

适用于 GaussDB 集中式与分布式实例、openGauss。

完整变更:v0.2.0...v0.2.1

gaussdb-ro-mcp v0.2.0

Choose a tag to compare

@gxc gxc released this 10 Sep 06:51

gaussdb-ro-mcp v0.2.0

新增 GaussDB 分布式版支持(重大变更,建议分布式实例用户升级)。

GaussDB 分布式版支持

GaussDB 分布式版仅支持事务级只读设置,此前版本的会话级只读机制(default_transaction_read_only 启动参数)在分布式实例上于连接建立阶段即被拒绝(SQLSTATE 55P02)。

v0.2.0 改为通用的事务级方案,所有查询统一在显式只读事务中执行:

BEGIN;
SET LOCAL TRANSACTION READ ONLY;
-- 执行查询操作
SELECT ...;
COMMIT;
  • 只读事务由服务端拒绝事务内一切写操作(包括函数内部的写),该方式在集中式/主备与分布式实例上通用
  • BEGIN 失败时先 ROLLBACK 清理服务端复用会话的残留事务(含中止事务)再重试一次
  • 移除会话级只读机制;入池连接仅设置 SET statement_timeout
  • test_connection 的只读状态改为在只读事务内回读(恒为 on
  • 已在真实 GaussDB/openGauss 实例上完成集成验证:连接正常、只读事务内写入被服务端拒绝(SQLSTATE 25006)、正常查询不受影响

其他变更

  • 修复 GitHub issues #1#16(含 4 项 SQL 校验层安全修复,详见 v0.1.3 Release 说明)
  • --help 增加详细说明、问题反馈与最新版本地址;--version 附带最新版本地址
  • README 增加反馈与贡献章节;安装方式统一为 sudo install -Dm 755/usr/local/bin
  • 全仓测试覆盖率 90%+(tools 100% / config 100% / guard 99.5% / db 97.8% / cmd 94.6%)

下载与安装

文件 架构
gaussdb-ro-mcp-v0.2.0-linux-amd64 x86_64
gaussdb-ro-mcp-v0.2.0-linux-arm64 ARM64
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/download/v0.2.0/gaussdb-ro-mcp-v0.2.0-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-v0.2.0-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version   # v0.2.0

静态链接(CGO_ENABLED=0),无运行时依赖。完整性校验见附件 SHA256SUMS.txt

兼容性

配置文件与 v0.1.x 完全兼容,无需修改;建议分布式实例用户从 v0.1.3 直接升级到本版本。

完整变更:v0.1.3...v0.2.0

gaussdb-ro-mcp v0.1.3

Choose a tag to compare

@gxc gxc released this 10 Sep 02:21

gaussdb-ro-mcp v0.1.3

修复 GitHub issues #1#16含 4 项安全修复,建议所有用户尽快升级

安全修复(重要)

  • #1 guard 字符串边界错位绕过E''/U&'' 转义判定改为逐字符紧邻判定。修复前形如 SELECT e, '\', set_config(...) 的语句可把危险函数调用藏进 guard 认定的"字符串"里绕过拦截(服务端实际执行)
  • #2 引号标识符绕过黑名单"dblink"(...)"set_config"(...) 等引号包裹的函数名不再绕过黑名单;U&"…" Unicode 转义标识符整体保守拒绝
  • #3 咨询锁黑名单修正:改为 pg_advisory* / pg_try_advisory* 前缀通配,覆盖此前遗漏的 pg_try_advisory_* 系列(咨询锁在只读事务中合法,原实现可致持久 DoS)
  • #4 连接超时保障statement_timeout 改在只读校验(含残留事务 ROLLBACK 回退)完成后设置,避免连接无服务端超时入池

其他修复

  • test_connection:只读状态为 offok 正确报告 false 并附错误说明(此前误报 ok:true
  • describe_table:各段查询失败统一输出 <段名>_error 键,不再与"无数据"混淆
  • execute_select / 元数据查询:重复列名去重(idid_2…)不再静默丢数据;空结果返回 [] 而非 null;NaN/±Inf 转字符串避免 JSON 序列化失败
  • 配置:拼错的 YAML 键现在大声报错(不再静默用默认值);空列表项不再 panic;密码含空格/@ 时 DSN 正确转义;新增实例级 connect_timeout 且不再覆盖 DSN 显式值;blocked_functions 匹配规则文档与实现对齐
  • 其他:亚毫秒 statement_timeout 钳制为 1ms;分区探测失败可重试;ListTables 增加 SQL LIMITResolveTable 限定 relkind;SIGINT/SIGTERM 以退出码 0 优雅退出;main 重构为可测结构;全仓测试覆盖率 90%+(聚合 ~94%)

下载与安装

文件 架构
gaussdb-ro-mcp-v0.1.3-linux-amd64 x86_64
gaussdb-ro-mcp-v0.1.3-linux-arm64 ARM64(鲲鹏/飞腾等)
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/download/v0.1.3/gaussdb-ro-mcp-v0.1.3-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-v0.1.3-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version   # v0.1.3

静态链接(CGO_ENABLED=0),无运行时依赖。完整性校验见附件 SHA256SUMS.txt

兼容性

  • 配置文件与 v0.1.x 完全兼容;两处有意收紧:未知 YAML 键从此前"静默忽略"变为启动报错(拼写错误应尽早暴露);blocked_functions 非空仍为整体替换默认黑名单(已在文档中显著标明)
  • 拆分字段实例的内部 DSN 生成改为 URL 形式(密码转义),对外行为与工具接口不变

完整变更:v0.1.2...v0.1.3

gaussdb-ro-mcp v0.1.2

Choose a tag to compare

@gxc gxc released this 09 Sep 23:16

gaussdb-ro-mcp v0.1.2

质量与测试强化版本:全仓测试覆盖率提升至 90% 以上,无功能性变更,与 v0.1.1 配置完全兼容。

变更

  • 测试覆盖率 90%+(聚合 94.2%):新增极简 GaussDB 线协议 mock 服务端(internal/dbtest),无需真实数据库即可验证只读会话强制、元数据查询与全部 MCP 工具;覆盖 55P02 修复的启动参数下发、回退分支与残留事务场景
  • main 重构:启动流程提取为可返回错误的 start()(行为不变),便于进程内测试
  • 安装文档:安装步骤改用 sudo install -Dm 755 安装到 /usr/local/bin,接入示例路径同步更新

各包覆盖率:cmd 96.2% / config 97.9% / db 93.4% / guard 95.9% / tools 91.6%。

下载与安装

文件 架构
gaussdb-ro-mcp-v0.1.2-linux-amd64 x86_64
gaussdb-ro-mcp-v0.1.2-linux-arm64 ARM64(鲲鹏/飞腾等)
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/download/v0.1.2/gaussdb-ro-mcp-v0.1.2-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-v0.1.2-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version   # v0.1.2

静态链接(CGO_ENABLED=0),无运行时依赖。完整性校验见附件 SHA256SUMS.txt

兼容性

无需修改配置,与 v0.1.0/v0.1.1 配置文件完全兼容;适用于华为云 GaussDB(集中式/分布式)与 openGauss。

完整变更:v0.1.1...v0.1.2

gaussdb-ro-mcp v0.1.1

Choose a tag to compare

@gxc gxc released this 09 Sep 15:35

gaussdb-ro-mcp v0.1.1

修复华为云 GaussDB 连接失败问题,建议所有用户升级。

修复

  • 连接初始化报 SQLSTATE 55P02(default_transaction_read_only 不能在事务中修改)
    部分华为云 GaussDB 内核(如 Kernel 503.1.0.SPC2300)禁止在事务中修改该参数,且服务端复用的会话可能残留事务状态,导致建连后执行 SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY 失败。
    现改为将 default_transaction_read_only=on启动包在会话初始化时下发(先于任何事务生效);入池前仍回读 SHOW transaction_read_only 验证,未生效时先 ROLLBACK 清理残留事务、再回退会话级 SET 重试,仍不满足才拒绝连接入池。服务端只读兜底语义不变。

下载与安装

文件 架构
gaussdb-ro-mcp-v0.1.1-linux-amd64 x86_64
gaussdb-ro-mcp-v0.1.1-linux-arm64 ARM64(鲲鹏/飞腾等)
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/download/v0.1.1/gaussdb-ro-mcp-v0.1.1-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-v0.1.1-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version   # v0.1.1

静态链接(CGO_ENABLED=0),无运行时依赖,安装到 /usr/local/bin 后即可直接复制到内网服务器使用。完整性校验见附件 SHA256SUMS.txt

兼容性

无需修改配置,与 v0.1.0 配置文件完全兼容;适用于华为云 GaussDB(集中式/分布式)与 openGauss。

完整变更:v0.1.0...v0.1.1

gaussdb-ro-mcp v0.1.0

Choose a tag to compare

@gxc gxc released this 08 Sep 23:41

gaussdb-ro-mcp v0.1.0

面向编码代理(Claude Code、OpenCode 等)的 GaussDB 只读 MCP 服务器,基于华为云官方 GaussDB Go 驱动,stdio 传输,内网非 SSL 场景。

下载

文件 架构
gaussdb-ro-mcp-v0.1.0-linux-amd64 x86_64
gaussdb-ro-mcp-v0.1.0-linux-arm64 ARM64(鲲鹏/飞腾等)
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/download/v0.1.0/gaussdb-ro-mcp-v0.1.0-linux-amd64
chmod +x gaussdb-ro-mcp-v0.1.0-linux-amd64
./gaussdb-ro-mcp-v0.1.0-linux-amd64 --version   # v0.1.0

静态链接(CGO_ENABLED=0),无运行时依赖,可直接复制到内网服务器使用。

功能(5 个只读 MCP 工具)

  • test_connection — 连通性测试(版本/库/用户/只读状态/延迟)
  • list_schemas / list_tables — schema 与表/视图清单
  • describe_table — 表结构、约束、索引定义、视图定义 SQL、分区清单
  • execute_select — 只读 SELECT(行数上限、超时、截断标记)

只读保障(三层纵深防御)

  1. SQL 静态校验:仅放行单条 SELECT/WITH;拦截 DML/DDL(含 CTE 内写语句)、SELECT INTO、行锁、多语句与危险函数(set_config、dblink* 等)
  2. 会话级强制:每条连接 SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY 并回读验证,服务端兜底拒绝写入
  3. 部署建议:配套只读账号最小权限授权 SQL(见 README)

多数据源

单个 YAML 配置文件支持多个 GaussDB 实例,工具调用时以 instance 参数选择;默认 sslmode=disable(内网非 SSL)。

兼容性

华为云 GaussDB(集中式/分布式)与 openGauss;已对 openGauss 6.0 完成只读强制、工具端到端与 stdio 子进程冒烟测试。

配置文件示例见仓库 gaussdb-ro-mcp.example.yaml,Claude Code / OpenCode 接入方式见 README。