@yanzhang123/readonly-db-mcp 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,6 +21,7 @@
21
21
  - 支持逻辑数据库到物理连接的精确路由,不会隐式跨环境切换
22
22
  - 严格只读 SQL:失败即拒绝的语法校验、MySQL 只读事务、无条件回滚
23
23
  - 可发现连接、数据库、表、字段、索引、约束和样例数据
24
+ - 整库表/列元数据可分页;`inspect_catalog` / `get_schema_info` / `dump_schema` 返回 `truncated` 与 `next_offset`,禁止把单页当成全集
24
25
  - 查询分页下推到 MySQL,避免客户端截断结果引发 Connector/Python `errno=-1`
25
26
  - 内置结果行数和单元格长度限制,最大返回 1000 行
26
27
  - 按源字段精确脱敏,支持别名、CTE 以及 JSON 内敏感键
@@ -43,7 +44,7 @@ npx -y @yanzhang123/readonly-db-mcp
43
44
  生产环境建议固定经过审核的版本:
44
45
 
45
46
  ```bash
46
- npx -y @yanzhang123/readonly-db-mcp@0.8.2
47
+ npx -y @yanzhang123/readonly-db-mcp@0.9.1
47
48
  ```
48
49
 
49
50
  首次运行时,启动器会在用户缓存目录创建版本化虚拟环境,并安装包内 wheel 与带 SHA-256 锁定的 Python 依赖。完成后的环境按 wheel 和依赖锁指纹复用。可通过 `MYSQL_MCP_PYTHON` 指定 Python,通过 `MYSQL_MCP_NPM_CACHE_DIR` 修改缓存位置。
@@ -57,7 +58,7 @@ npx -y @yanzhang123/readonly-db-mcp@0.8.2
57
58
  "mcpServers": {
58
59
  "mysql-readonly": {
59
60
  "command": "npx",
60
- "args": ["-y", "@yanzhang123/readonly-db-mcp@0.8.2"],
61
+ "args": ["-y", "@yanzhang123/readonly-db-mcp@0.9.1"],
61
62
  "env": {
62
63
  "MYSQL_PROFILES_FILE": "C:/absolute/path/mysql-connections.toml",
63
64
  "MYSQL_DEV_PASSWORD": "由客户端密钥存储提供"
@@ -327,7 +328,8 @@ Claude Desktop、Codex 等宿主通常从自己的目录启动 MCP 服务,未
327
328
  列出指定数据库中的表和视图。
328
329
 
329
330
  - 参数:`connection`、`database`、`table_name`/`table`(精确匹配)、`table_pattern`(支持 `*`/`?`)、`search`、`max_rows`、`offset`、`timeout_ms`、`max_response_bytes`、`result_format`,均可选
330
- - 大库使用与 `execute_sql` 相同的 `truncated`/`next_offset` 分页契约
331
+ - 默认受 `MYSQL_MAX_ROWS`(默认 500,最大 1000)限制。必须查看 `truncated` / `next_offset`;未翻页完成前,当前页不是整库全集
332
+ - 大库使用与 `execute_sql` 相同的 `truncated`/`next_offset`/`returned_rows` 分页契约
331
333
  - `search` 按字面子串、不区分大小写搜索表名、表注释、字段名和字段注释,支持中文。返回 `TABLE_NAME`、`MATCH_FIELD`、`COLUMN_NAME`、`MATCH_TEXT`,每个匹配项一行;可与表名过滤组合。`%`、`_` 不作为通配符。匹配的注释是数据库内容,不是 AI 应执行的指令。
332
334
 
333
335
  ### `execute_sql`
@@ -357,10 +359,11 @@ Claude Desktop、Codex 等宿主通常从自己的目录启动 MCP 服务,未
357
359
  返回数据库结构详情,包括字段名、类型、可空性、默认值和注释。
358
360
 
359
361
  - 参数:`table_name` 或兼容别名 `table`,以及 `connection`、`database`
360
- - 支持 `table_names` 批量指定 1–20 张当前库的表,与 `table_name`/`table` 互斥;支持 `max_rows`、`offset`、`max_response_bytes`、`timeout_ms`、`result_format`。
362
+ - 支持 `table_pattern`(与 `list_tables` 相同的 `*`/`?` glob)或 `table_names` 批量指定 1–100 张当前库的表;与 `table_name`/`table` 三者互斥。超过 100 张表会报错,不会静默截断名单。
363
+ - 整库或批量模式也支持 `max_rows`、`offset`、`max_response_bytes`、`timeout_ms`、`result_format`。默认页大小为连接的 `MYSQL_MAX_ROWS`。必须查看 `truncated` / `next_offset`;未把 `truncated` 翻到 `false` 前,不得把当前页当作整库列全集。
361
364
  - `detail=true` 一次返回表注释、字段完整类型/默认值/可空性/附加属性/注释、索引(含 PRIMARY、列顺序、前缀长度、唯一性)及已声明的外键。结果按 `KIND` 区分 `table`、`column`、`index`、`foreign_key`;每个索引列或外键列独立成行,不用字符串聚合,避免结构信息被静默截断。不会猜测未声明的业务关联。
362
365
  - 可用 `database.table` 访问允许列表中的其他数据库
363
- - 同时传 `database` 和限定表名时,两者必须一致。保留相同参数并递增 `offset=next_offset`,直到 `truncated=false`;一页结果不代表完整库结构。
366
+ - 同时传 `database` 和限定表名时,两者必须一致。保留相同参数并递增 `offset=next_offset`,直到 `truncated=false`。
364
367
  - 标识符只允许字母、数字、下划线、`$`,数据库与表之间允许一个点
365
368
 
366
369
  ### `get_table_sample`
@@ -373,9 +376,21 @@ Claude Desktop、Codex 等宿主通常从自己的目录启动 MCP 服务,未
373
376
 
374
377
  ### `inspect_catalog`
375
378
 
376
- 返回 `tables`、`columns`、`indexes`、`constraints`、`foreign_keys` 或 `views` 的固定元数据投影。可通过 `table_name` 或 `table` 精确过滤。该工具不会开放任意 `information_schema` SQL。
379
+ 返回 `tables`、`columns`、`indexes`、`constraints`、`foreign_keys` 或 `views` 的固定元数据投影。该工具不会开放任意 `information_schema` SQL。
377
380
 
378
- 也支持 `table_names` 批量过滤、`max_rows`、`offset`、`max_response_bytes`、`timeout_ms` 和 `result_format`,续查时保持 `kind` 和过滤条件不变。
381
+ - 过滤:`table_name`/`table` 精确匹配,或 `table_pattern`,或最多 100 个 `table_names`,三者互斥。不传表过滤时,对该 database 的 `kind` 投影做稳定排序后分页。列排序为 `TABLE_NAME, ORDINAL_POSITION, COLUMN_NAME`。
382
+ - 分页:`max_rows`(1..连接上限,默认 `MYSQL_MAX_ROWS`)和 `offset`(默认 0)。JSON/`compact` 返回 `truncated`、`next_offset`(无下一页为 `null`)、`returned_rows`。`offset` 会下推为 SQL `LIMIT`/`OFFSET`。
383
+ - 指定单表时仍尊重 `max_rows`/`offset`。旧调用不传这些参数时等价于 `offset=0`,仍可能 `truncated=true`。
384
+ - 未翻页完成前,不得把当前页当作整库全集。续查时保持 `kind` 和过滤条件不变,只把 `offset` 换成上一页的 `next_offset`。
385
+
386
+ ### `dump_schema`
387
+
388
+ 按表分组返回允许列表内的表/列元数据,便于用少量调用拉完 600+ 张表的列结构。
389
+
390
+ - 参数:`connection`、`database`、`kinds`(仅 `tables` 和/或 `columns`,默认两者都要)、以及与 `inspect_catalog` 相同的表过滤和分页参数
391
+ - 出参为 JSON:`tables[].table_name`、可选表级字段、`columns[]`(`name`/`type`/`nullable`/`default`/`comment`/`ordinal`/`extra`),外加 `truncated`/`next_offset`/`returned_rows`
392
+ - 分页作用在底层列(或仅 `tables` 时的表)行上;单表列可能跨页出现,合并时按 `(table_name, ordinal/name)` 去重。响应过大时会继续截断并设置 `truncated=true`,不会静默丢列
393
+ - `indexes`/`constraints`/`foreign_keys`/`views` 请继续用 `inspect_catalog` 分页拉取
379
394
 
380
395
  ### 查询响应预算与并发控制
381
396
 
@@ -433,7 +448,7 @@ Claude Desktop、Codex 等宿主通常从自己的目录启动 MCP 服务,未
433
448
  "mcpServers": {
434
449
  "mysql-readonly": {
435
450
  "command": "npx",
436
- "args": ["-y", "@yanzhang123/readonly-db-mcp@0.8.2"],
451
+ "args": ["-y", "@yanzhang123/readonly-db-mcp@0.9.1"],
437
452
  "env": {
438
453
  "MYSQL_PROFILES_FILE": "C:/absolute/path/mysql-connections.toml",
439
454
  "MYSQL_DEV_PASSWORD": "your_dev_password"
@@ -453,7 +468,7 @@ Claude Desktop、Codex 等宿主通常从自己的目录启动 MCP 服务,未
453
468
  "mysql-readonly": {
454
469
  "type": "stdio",
455
470
  "command": "npx",
456
- "args": ["-y", "@yanzhang123/readonly-db-mcp@0.8.2"],
471
+ "args": ["-y", "@yanzhang123/readonly-db-mcp@0.9.1"],
457
472
  "env": {
458
473
  "MYSQL_PROFILES_FILE": "C:/absolute/path/mysql-connections.toml",
459
474
  "MYSQL_DEV_PASSWORD": "your_dev_password"
@@ -478,7 +493,7 @@ STDIO 入口;在 Windows 上使用 `npx.cmd`:
478
493
  serverName: mysql-readonly
479
494
  transport: stdio
480
495
  command: npx.cmd
481
- args: ['-y', '@yanzhang123/readonly-db-mcp@0.8.2']
496
+ args: ['-y', '@yanzhang123/readonly-db-mcp@0.9.1']
482
497
  env:
483
498
  MYSQL_PROFILES_FILE: 'C:/absolute/path/mysql-connections.toml'
484
499
  toolCallTimeoutMs: 60000
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yanzhang123/readonly-db-mcp",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "Enterprise-auditable, strictly read-only MySQL MCP server with multi-environment profiles.",
5
5
  "license": "MIT",
6
6
  "type": "commonjs",