关于 Local YDB MCP
Local YDB MCP 是用于操作基于 Docker 的 local-ydb 部署的 stdio 服务,面向管理本地开发环境的 Agent。它涵盖诊断、模式、认证、存储和生命周期工作流,并要求变更先生成计划,再通过确认执行。
主要功能
- 01检查 Docker 清单与数据库健康状态
- 02检查租户、节点、GraphShard 和认证
- 03生成、验证并应用表 DDL
- 04管理认证与存储工作流
- 05转储、恢复和升级部署
适用场景
- 01诊断不健康的 local-ydb 环境
- 02引导初始化根数据库或租户
- 03应用前审查模式变更
- 04强化认证或升级镜像
MCP 相关
它向 MCP 客户端提供 local-ydb 运维工具和静态提示词。变更工具先返回计划,必须设置 confirm: true 才会执行。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @astandrik/local-ydb-mcpLOCAL_YDB_TOOLKIT_CONFIGOptional path to a local-ydb-toolkit config JSON file.LOCAL_YDB_MCP_CONTENT_FORMATOptional LLM-facing tool response text format. Use toon to prefer TOON for the second text content block, with JSON fallback if TOON cannot round-trip losslessly; omit or set json for pretty JSON. MCP JSON-RPC and structuredContent stay JSON.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
39收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| profile | string | 否 | 来自 local-ydb.config.json 的命名配置。默认值为 config.defaultProfile。 |
| configPath | string | 否 | 显式指定的 local-ydb 配置文件的绝对路径。显式指定的文件缺失、不可读、过大或无效时,将安全失败,不使用默认值。 |
详细介绍
@astandrik/local-ydb-mcp
用于操作基于 Docker 的 local-ydb 部署的非官方 stdio MCP 服务。
网站:local-ydb-toolkit.ydb-qdrant.tech。
与 ydb/ydb-mcp 的关系
此软件包与官方 ydb-platform/ydb-mcp 服务互为补充。针对现有 YDB 端点执行即席 SQL 查询、查询说明、目录列表和路径检查等常规 YDB 数据库级操作时,请使用 ydb/ydb-mcp。
当 Agent 需要直接操作基于 Docker 的 local-ydb 环境时,请使用 @astandrik/local-ydb-mcp:主机前置条件检查、根节点或租户引导、数据库健康检查诊断、动态节点生命周期管理、GraphShard 检查、针对本地部署的表 DDL 生成/验证/应用、身份验证强化、存储工作流、转储/恢复和版本升级。它的 local_ydb_sql 工具范围比 ydb/ydb-mcp 更窄:它只会针对选定的已配置本地 ydb 配置文件运行受管理的 YQL。变更工具优先生成计划,执行变更前必须设置 confirm: true。
MCP 客户端配置
此软件包需要 Node.js 20.19 或更高版本。
检查已安装的 CLI,但不启动 MCP 服务:
local-ydb-mcp --version
local-ydb-mcp --help
也可以通过 npm 运行相同的命令:
npx --yes @astandrik/local-ydb-mcp@latest --version
npx --yes @astandrik/local-ydb-mcp@latest --help
每个标志都会向 stdout 输出内容,并以代码 0 退出,且不会加载工具包配置。
未知参数、重复标志以及标志组合会向 stderr 输出用法错误
并以代码 2 退出。仅支持长格式的 --version 和 --help 标志。
正常运行 MCP stdio 时请勿添加参数;不要将这些诊断标志
添加到 MCP 客户端启动配置中。
使用 npx,以便客户端无需手动检出代码即可运行此服务:
{
"mcpServers": {
"local-ydb": {
"command": "npx",
"args": ["-y", "--prefer-online", "@astandrik/local-ydb-mcp@latest"],
"env": {
"LOCAL_YDB_TOOLKIT_CONFIG": "/path/to/local-ydb.config.json"
}
}
}
}
此方式会在 MCP 服务启动时检查 npm 注册表,因此重启 MCP 客户端后,客户端即可使用新发布的版本。
配置文件是可选的。如果未设置 LOCAL_YDB_TOOLKIT_CONFIG,服务会从当前工作目录读取 local-ydb.config.json。如果环境变量已设置但值为空,则视为显式指定,并返回 CONFIG_PATH_NOT_ABSOLUTE。如果隐式配置文件不存在,服务会使用默认本地配置文件,其镜像为 ghcr.io/ydb-platform/local-ydb:stable-26-1-1。LOCAL_YDB_TOOLKIT_CONFIG 和每次调用中的 configPath 值必须是绝对路径,并且必须指向可读、常规且不超过 1 MiB 的 JSON 文件。配置的 defaultProfile 必须指向现有的 profiles 条目。显式指定的文件如果缺失、不可读、超出大小限制、格式错误或架构无效,服务会以失败关闭,并返回稳定的错误代码,而不会暴露文件内容、解析器片段或绝对路径。
上游指定的默认标签是可变的。若要控制升级,请显式设置 profiles.<name>.image;如需不可变拉取,请使用摘要,但请注意,local_ydb_upgrade_version 不接受固定到摘要的源配置文件。
软件包更新更改隐式默认值后,使用先前默认值创建的现有堆栈会因配置文件兼容性检查失败,而不会混用 YDB 镜像。重启或引导前,请将堆栈当前使用的镜像引用添加到基于文件的配置文件中;然后使用 local_ydb_upgrade_version 执行有意进行的转储并重建升级。
官方 MCP Registry 元数据使用名称 io.github.astandrik/local-ydb-mcp,并会在匹配的 npm 版本可用后从仓库根目录中的 server.json 发布。
MCP 功能
该服务提供本地 YDB 操作工具和静态 MCP 提示词。提示词模板可指导堆栈诊断、根数据库引导、租户拓扑引导、数据库诊断、架构生成与应用、版本升级、身份验证加固以及存储组缩减。提示词仅返回工作流说明,不会执行命令。提供的提示词 configPath 必须是绝对路径,与对应工具参数的要求相同。
除非调用时设置 confirm: true,否则变更类工具仅生成计划。
工具
该服务提供 39 个工具。此索引由运行时工具注册表生成;编辑 toolDefinitions 并运行 npm run docs:generate 以更新。
检查
| 工具 | 模式 | 描述 |
|---|---|---|
local_ydb_inventory | 只读 | 为 local-ydb 目标配置文件提供只读 Docker 清单。成功时返回 ok=true、Docker CLI/守护进程状态、容器、卷,以及实际存在的已配置容器的检查数据;Docker CLI、守护进程或清单读取失败时返回 ok=false 和原因,并省略清单数组,以免将失败误认为主机为空。SSH 目标或探测失败时使用 docker-inventory-failed,并保守地设置 Docker 可用性标志。 |
local_ydb_database_status | 只读 | 针对已配置租户路径提供只读 YDB 管理数据库状态。返回命令、stdout、stderr 和 ok 标志;在排查引导/重启问题前,用此工具检查租户状态;检查方案可达性则使用 local_ydb_tenant_check。 |
local_ydb_healthcheck | 只读 | 针对已配置的租户或根数据库执行只读 YDB 监控健康检查。使用官方 YDB CLI SelfCheck 路径,返回 selfCheckResult、问题计数、问题类型、截断后的原始输出,以及数据库是否健康;如果请求的 noCache/noMerge 选项被拒绝,且错误与精确匹配的已识别两行旧版解析器特征一致,则通过 optionResolution 和 warnings 报告;compatibilityFallback 则说明是否实际启动了重试。数据库级诊断请在 local_ydb_status_report 之后使用此工具。 |
local_ydb_container_logs | 只读 | 读取已配置静态或主要动态 local-ydb 容器最近的 Docker 日志。引导、重启或就绪检查失败时使用;target 用于选择容器角色,lines 用于控制尾部日志行数。 |
local_ydb_status_report | 只读 | 只读聚合报告,用于快速诊断。运行 local_ydb_inventory、local_ydb_auth_check、local_ydb_tenant_check、local_ydb_nodes_check 和 local_ydb_healthcheck,并返回各项结果;每个组件彼此隔离,因此意外失败只会产生安全的组件形态回退结果,不会阻止其余检查继续运行。 |
local_ydb_tenant_check | 只读 | 使用 YDB CLI 只读检查已配置租户路径是否可达。引导或恢复后使用此工具,在检查节点或 GraphShard 前确认租户元数据。 |
local_ydb_scheme | 只读 | 只读列出或描述 YDB 方案,stdout/stderr 会截断。对于 rootDatabase 路径使用根数据库,否则使用租户数据库;list 支持 recursive/long/onePerLine 标志,describe 支持 stats,并会拒绝不兼容的标志组合。 |
local_ydb_nodes_check | 只读 | 通过 viewer/json nodelist 只读检查动态节点注册情况。启动、添加或移除动态节点后使用;如果租户可达性未知,请先使用 local_ydb_tenant_check。 |
local_ydb_graphshard_check | 只读 | 通过 viewer/json capabilities 和 tabletinfo,只读检查已配置租户的 GraphShard。返回 graphShardExists、tablet ids 和 viewer 状态详情;租户引导后,如果需要确认 GraphShard 支持情况或平板可见性,请使用此工具。 |
local_ydb_auth_check | 只读 | 只读身份验证审计,检查匿名 viewer whoami 状态和已配置的 YDB CLI 租户访问权限;如果配置了 rootPasswordFile,则使用根凭据。身份验证加固或密码轮换后使用此工具,验证预期的安全状态。 |
local_ydb_storage_placement | 只读 | 只读检查存储,返回 ReadStoragePool 输出和 BSC 物理放置情况。添加或减少存储组前使用此工具,确认准确的存储池形态。 |
local_ydb_storage_leftovers | 只读 | 只读搜索可能残留的 local-ydb Docker 卷、转储和 PDisk/数据路径。扫描 Docker 卷名称以及 profile.storageSearchPaths,不会删除任何内容;调用 local_ydb_cleanup_storage 前使用此工具,确定要移除的确切路径或卷。 |
local_ydb_list_versions | 只读 | 列出 local-ydb 容器镜像在 GHCR 或 Docker Hub 上已发布的标签,并按从新到旧排序数字版本标签。调用 local_ydb_upgrade_version 前使用此工具;注册表分页和身份验证仅限受信任来源,且分页范围受 pageSize 和 maxPages 限制。 |
local_ydb_pull_status | 只读 | 检查由 local_ydb_pull_image 启动的后台 Docker 镜像拉取状态。对于已知任务,返回基于已完成的已知 Docker 层数(而非字节数)计算的单调递增 progressPercent:运行期间为 0-99,成功完成后为 100,失败后则为最后观测到的值。 |
Schema
| 工具 | 模式 | 描述 |
|---|---|---|
local_ydb_generate_schema | 只读 | 只读的结构化 YDB 表 DDL 生成器。它会根据严格的 JSON 规范生成 CREATE TABLE、ALTER TABLE、DROP TABLE 和二级索引语句,返回生成的脚本、官方参考资料和警告;还可以选择通过 YDB JS SDK 进行验证,而不应用任何更改。 |
local_ydb_apply_schema | 先制定计划再修改 | 通过官方 YDB JS SDK 验证或应用 YDB 表 DDL。它接受用于 PRAGMA 以及 CREATE TABLE、ALTER TABLE 和 DROP TABLE 的原始 YQL DDL;action=apply 会先验证,且只有在 confirm=true 时才会执行。 |
Sql
| 工具 | 模式 | 描述 |
|---|---|---|
local_ydb_sql | 先制定计划再修改 | 通过 Query Service 对配置的 local-ydb 目标运行托管式 YQL v1。query 使用 SnapshotRO,explain 返回计划/AST;execute 始终先运行 EXPLAIN,且只有在 confirm=true 时才会执行一次 NoTx 操作。 |
Auth
| 工具 | 模式 | 描述 |
|---|---|---|
local_ydb_permissions | 先制定计划再修改 | 检查或更改路径的 YDB 方案权限。默认的 list 操作为只读;grant、revoke、set、clear、chown 和继承更改只会返回计划,除非 confirm=true。 |
local_ydb_prepare_auth_config | 先制定计划再修改 | 根据当前静态节点配置生成经过强化的 YDB 配置。请在运行 local_ydb_write_dynamic_auth_config 和 local_ydb_apply_auth_hardening 之前使用;若没有 confirm=true,则只返回计划的写入操作。 |
local_ydb_write_dynamic_auth_config | 先制定计划再修改 | 写入 mandatory-auth 启动所需的文本协议动态节点身份验证令牌文件。请在为身份验证强化选择 SID 后使用;若没有 confirm=true,则只返回计划的文件写入操作。 |
local_ydb_apply_auth_hardening | 先制定计划再修改 | 仅当完整的只检查静态配置文件检查和配置绑定兼容性预检均通过后,才应用经过审核的强化 YDB 配置文件;这些检查必须在进行任何配置或容器更改之前完成。不可变的不匹配项需要先销毁,再执行引导。随后重启静态节点,并按索引顺序重新创建和验证每个已配置的动态节点,即使未配置动态节点令牌文件也是如此。只有在精确容器运行稳定性检查和 IC 注册均通过后,才会验证元数据;恢复静态配置后,回滚会使用重启或引导协调。请仅在准备并审核配置后使用;若没有 confirm=true,则只返回预检/应用/重建计划。 |
local_ydb_set_root_password | 先制定计划再修改 | 使用 ALTER USER 轮换运行时 root 密码,并同步主机身份验证配置和 root 密码文件以保持一致。YDB 可能会拒绝不符合 auth_config.password_complexity 要求的密码;此工具要求 password 值非空。 |
Storage
| 工具 | 模式 | 描述 |
|---|---|---|
local_ydb_add_storage_groups | 先制定计划再修改 | 使用当前 ReadStoragePool 定义,为一个租户存储池增加 NumGroups。若没有 confirm=true,则返回 DefineStoragePool 计划、回滚方案、目标存储池和目标数量;更新成功后,会验证 NumGroups 和租户元数据。 |
local_ydb_reduce_storage_groups | 先制定计划再修改 | 通过转储租户、使用较小的 storagePoolCount 重建配置文件栈、恢复转储,并在需要时重新应用身份验证,以减少租户存储池的 NumGroups。转储或销毁之前,会检查每个一次性动态节点,并保留其确切的 gRPC、监控和 IC 端口;定义不完整时会中止重建。 |
local_ydb_cleanup_storage | 先制定计划再修改 | 仅删除明确提供的 local-ydb 主机路径或 Docker 卷。请在检查 local_ydb_storage_leftovers 后使用;若没有 confirm=true,则只返回清理计划,不会删除任何内容。 |
Lifecycle
| 工具 | 模式 | 描述 |
|---|---|---|
local_ydb_pull_image | 先规划再执行变更 | 为选定目标规划或启动后台 Docker 拉取任务,以获取 local-ydb 镜像。不设置 confirm=true 时,仅返回检查和拉取命令;设置 confirm=true 时,除非镜像已存在,否则返回供 local_ydb_pull_status 使用的 jobId。 |
local_ydb_destroy_stack | 先规划再执行变更 | 移除指定配置的租户元数据、local-ydb 容器、网络和存储,并可选择清理主机路径。 |
local_ydb_bootstrap_root_database | 先规划再执行变更 | 在 /local 启动一个仅包含静态节点的普通本地 YDB 数据库。用于不需要 CMS 租户、GraphShard 或动态节点的常规本地数据库请求;只有当现有运行中或已停止的静态容器在镜像、网络、数据挂载、完整端口绑定、必需环境变量、重启策略和禁用的健康检查方面均符合配置时,才会复用该容器。不设置 confirm=true 时,仅返回计划,不执行操作。 |
local_ydb_bootstrap | 先规划再执行变更 | 启动租户拓扑:带有 GraphShard 标志的静态节点、静态节点及所有已配置动态 gRPC 端口的环回绑定、已配置的 CMS 租户,以及 profile.dynamicNodeCount 声明的所有动态节点。在返回或执行计划前,已配置的容器名称必须与静态容器名称不同,且所有共享网络端口都必须有效且唯一。节点按索引顺序启动;启动下一个节点前,必须确认对应的 Docker 容器确实在运行、未处于重启状态、在两次检查中容器 ID 和 RestartCount 保持稳定,并且已通过其 IC 端口注册到 viewer/json nodelist。只有通过完整的配置兼容性检查(包括所有已配置的 gRPC 绑定)后,才会复用现有运行中或已停止的静态容器。仅用于租户、GraphShard、转储/恢复或动态节点场景;不设置 confirm=true 时,仅返回完整计划,不创建任何内容。 |
local_ydb_check_prerequisites | 先规划再执行变更 | 检查目标主机是否具备 Docker CLI 和守护进程、curl、ruby,以及已配置的 rootPasswordFile(如有)。如果 SSH 目标无法访问,则返回 unavailable=[target],不会声称缺少工具或建议安装工具。不设置 confirm=true 时,返回当前状态快照和任何 apt-get 计划;设置 confirm=true 时,只能安装受支持的 curl/ruby 软件包,然后返回刷新后的安装后状态快照,绝不会启动或安装 Docker。 |
local_ydb_create_tenant | 先规划再执行变更 | 当静态节点已在运行时,创建已配置的 CMS 租户。租户拓扑应在 local_ydb_start_dynamic_node 之前使用;不设置 confirm=true 时,仅返回计划的状态/创建命令,不创建任何内容。 |
local_ydb_start_dynamic_node | 先规划再执行变更 | 为现有 CMS 租户启动已配置的主动态租户节点。在返回或执行计划前,如果主节点名称与静态容器名称相同,或端口在共享网络命名空间中冲突(包括静态 IC 端口 19001),则会拒绝执行。确认镜像已存在后,在启动动态容器前立即执行完整的只检查静态兼容性预检,包括检查当前镜像 ID;若不匹配则安全失败,并要求先销毁再启动。在动态容器启动前先创建容器,并确保其解析出的镜像 ID 与静态容器一致,从而避免并发的命名标签刷新竞态。应在 local_ydb_create_tenant 之后,或在管理员状态为 PENDING_RESOURCES 时使用;添加额外节点请使用 local_ydb_add_dynamic_nodes。不设置 confirm=true 时,仅返回计划。 |
local_ydb_restart_stack | 先规划再执行变更 | 清点资源并完成完整的只检查静态兼容性预检后,协调并重启选定配置。在停止任何容器前,要求现有静态容器符合配置中的镜像、网络、数据挂载、环境变量、重启策略、健康检查,以及静态 gRPC、监控和所有已配置动态 gRPC 端口的精确环回绑定;绑定配置发生变化时,必须先销毁再启动。然后报告缺失的已配置动态容器和意外的一次性动态容器,先停止运行中的动态容器,再停止静态容器;无条件按索引顺序重新创建每个已配置节点(包括发现处于重启状态的容器),并要求每个对应的 Docker 容器稳定运行且已通过 IC 端口注册;最后只恢复之前处于运行状态的意外容器,不删除这些容器。由于无法从资源清单中恢复已移除的配置定义,回滚需通过重启或启动协调完成。不设置 confirm=true 时,仅返回重启计划。 |
local_ydb_upgrade_version | 先规划再执行变更 | 将使用文件或卷存储的 local-ydb 配置升级到目标镜像标签。仅用于未设置 bindMountPath 的配置版本升级;转储或销毁前,会检查每个一次性动态节点并保留其确切的 gRPC、监控和 IC 端口,若定义不完整则中止。随后预检源镜像和目标镜像、转储、重建、恢复、按配置重新应用身份验证、重建额外节点,并进行最终镜像验证。若确认不匹配,则保持配置不变;若重建阶段成功后无法获取最终资源清单,则响应会保留命令历史、报告部分验证结果,并持久化目标配置镜像。 |
动态节点
| 工具 | 模式 | 描述 |
|---|---|---|
local_ydb_add_dynamic_nodes | 先规划后变更 | 一次添加一个一次性动态租户节点,扩展声明式的 profile.dynamicNodeCount 拓扑。默认情况下,第一个后缀为 dynamicNodeCount + 1;显式指定的 startIndex 必须大于 dynamicNodeCount,也可以覆盖端口。所有计划中的名称都必须与静态容器不同,且所有已配置端口和一次性端口在共享网络命名空间中都必须有效且唯一。每次检查镜像是否存在后,都会在启动每个节点前立即重复完整的仅检查静态兼容性预检,包括当前镜像 ID;如果不匹配,则停止该节点及所有后续节点,并要求先执行 destroy,再执行 bootstrap。每个动态容器都会创建,但只有在解析出的镜像 ID 与静态容器一致后才会启动,从而避免并发的命名标签刷新竞态。未设置 confirm=true 时,会返回容器/端口计划;设置 confirm=true 时,只有在每个节点都有稳定运行的精确 Docker 容器,且其 IC 端口出现在 viewer/json nodelist 中后,才会检查租户元数据。 |
local_ydb_remove_dynamic_nodes | 先规划后变更 | 一次移除一个动态租户后缀节点;如果能解析出节点 IC 端口,则验证 nodelist 中已不再包含该节点。未指定 containers、nodeIds 或 startIndex 时,只能移除高于 profile.dynamicNodeCount 的一次性后缀,并优先移除最高后缀。显式选择器或 startIndex 可以移除已配置的后缀并造成配置漂移,bootstrap 或 restart 会恢复配置。回滚指南:已配置节点使用 bootstrap/restart;一次性节点使用匹配后缀和端口的 add_dynamic_nodes。主 dynamicContainer 始终受到保护。 |
备份恢复
| 工具 | 模式 | 描述 |
|---|---|---|
local_ydb_list_dumps | 只读 | 只读列出 profile.dumpHostPath 下可用的租户转储。恢复前可用此工具选择 dumpName;它只报告包含现有租户转储文件夹的顶层转储目录。 |
local_ydb_dump_tenant | 先规划后变更 | 使用静态容器网络上的 local-ydb 辅助容器,转储已配置的租户或相对于租户的路径。它会创建 profile.dumpHostPath/dumpName,排除 .sys 对象,并将转储写入 dumpName/tenant;未设置 confirm=true 时,只返回 mkdir/辅助容器计划。 |
local_ydb_restore_tenant | 先规划后变更 | 从 profile.dumpHostPath 下的转储恢复已配置的租户或目标路径,并可选择执行恢复后的 scheme describe 和有界计数查询验证。目标租户就绪后,在 bootstrap 或重建后使用;未设置 confirm=true 时,只返回恢复计划,不会写入数据。 |
托管 SQL/YQL
local_ydb_sql 使用 YDB Query Service,对选定的已配置 local-ydb 配置运行托管式 YQL v1:
| 操作 | 行为 |
|---|---|
query(默认) | 在 SnapshotRO 中执行;忽略 confirm,且绝不会启用写入。 |
explain | 使用 Query Service EXPLAIN 并返回计划或 AST,不执行 YQL。 |
execute(不带 confirm=true) | 仅运行强制性的 EXPLAIN 预检,并返回 outcome: "planned"。 |
execute(带 confirm=true) | 预检成功后,只发送一次 NoTx 执行请求。不进行自动重试。 |
脚本必须是格式正确的 Unicode,且长度不得超过 1,048,576 个字符;在哈希或 protobuf 编码前会拒绝孤立的 UTF-16 代理项。连接、会话、预检和执行共用一个截止时间:timeoutMs 默认为 120,000,最高为 600,000。每个结果集的 maxRows 默认为 100,最高为 10,000,但首次触及行数上限后会停止捕获所有后续结果:只读执行会被取消,而已确认的 NoTx 执行会继续排空,但不捕获后续输出。跨已捕获的问题、计划/AST、列元数据和完整行的 maxOutputBytes 默认为 65,536,最高为 1 MiB;不会返回不完整的 JSON 值。 |
参数使用符合 [A-Za-z_][A-Za-z0-9_]* 的裸名称。工具会按名称排序,并在脚本前添加确定性的 DECLARE $name AS Type; 语句。递归描述符支持 Primitive/Decimal、Optional、List、Tuple、Struct 和 Dict 类型,限制为 100 个参数、深度 16、1,000 个类型节点、10,000 个参数值节点,以及 1 MiB 的序列化值;Decimal 精度为 1..35,且小数位数不得超过精度。32 位整数使用 JSON 数字;64 位整数、Decimal 和 DyNumber 使用十进制字符串,其中 Decimal 也接受规范形式的 "nan"、"inf" 和 "-inf";二进制 String 和 Yson 使用规范的 base64;Utf8 字符串和 Struct 字段名称使用格式正确的 Unicode(会拒绝孤立的 UTF-16 代理项);Json/JsonDocument 使用原生 JSON;官方 ISO 日期/时间格式的时区值后缀为 ,<IANA zone>;间隔使用 ISO-8601 时长;空 Optional 使用 null;List/Tuple 使用数组;Struct 使用对象;Dict 使用 {key,value} 数组。DyNumber 限制为 38 位有效数字,数值范围为文档规定的 1×10^-130 至 1×10^126−1。Json/JsonDocument 数值必须是有限值,整数值必须在 JavaScript 安全整数范围内,并且会拒绝负零,因为 JSON 编码无法保留其符号。普通 JSON 没有 Optional 存在性包装器,因此当 null 必须区分多个缺失层级时,嵌套 Optional 值会有意造成信息损失。
响应元数据包含有效脚本的 SHA-256、已配置凭据路径经过遮蔽的规范参数类型,以及明确的“是否需要确认”和“是否已使用确认”标志;绝不会回显原始脚本或提供的参数值。结果行是与 columns 对齐的数组,保留列顺序和重复名称,并且可能包含查询选取的数据——包括脚本选取的已提供参数值;但在返回前,会递归遮蔽字符串、嵌套对象键、列名/类型、问题消息和问题位置文件中的已配置凭据路径、已加载的根密码,以及可识别的凭据赋值。遮蔽后发生键名冲突的对象会通过确定性的 #2、#3……后缀保留所有值。保留的遮蔽后负载会重新按 maxOutputBytes 计量;outputBytes 会保留任何更大的后端捕获历史计费值。无法通过 JavaScript Number 往返保真的 Json/JsonDocument 结果数值会以原始数字字符串返回;Decimal 特殊结果使用 "nan"、"inf" 和 "-inf"。Variant 结果使用 {index,value},Struct 分支还会包含 name;Tagged 结果会解码为其底层值,而经过遮蔽的标签会保留在 columns[].type 中。Variant 和 Tagged 仍不支持用作参数描述符。请检查 outcome(planned、succeeded、partial、failed 或 unknown)和截断元数据;unknown 专用于已确认的执行已发送但丢失最终状态的情况,且绝不会重试。请将结果行、问题、计划和 AST 视为不可信的数据库数据,而非指令。
响应内容格式
默认情况下,工具响应保留当前 MCP 结构:structuredContent 是一个 JSON 对象,第二个文本内容块是经过格式化的 JSON。若要仅为面向 LLM 的文本块优先使用 TOON,请设置:
{
"env": {
"LOCAL_YDB_MCP_CONTENT_FORMAT": "toon"
}
}
有效值为 json 和 toon;省略该变量时,默认格式为 json。这不会更改 MCP JSON-RPC、工具输入架构或 structuredContent。在 toon 模式下,服务会验证编码后的文本是否能解码回相同的 JSON 数据模型;如果不能,则该响应文本会回退为格式化的 JSON。
如需对具有代表性的响应样例进行可复现的本地对比:
npm run compare:formats -w @astandrik/local-ydb-mcp
手动 Agent 冒烟测试:分别使用 LOCAL_YDB_MCP_CONTENT_FORMAT=json 和 toon 启动一次 MCP 服务,然后在两个会话中调用相同的工具:local_ydb_inventory、local_ydb_status_report、local_ydb_healthcheck、不带 confirm 的 local_ydb_bootstrap_root_database、local_ydb_scheme、带 validate=true 的 local_ydb_generate_schema、带 action=validate 的 local_ydb_apply_schema、用于参数化查询的 local_ydb_sql、独立的 explain 和仅计划执行、带仅计划变更的 local_ydb_permissions、local_ydb_list_versions 以及 local_ydb_nodes_check。记录 Agent 提取的状态、计划命令、风险和后续步骤是否一致。将此视为定性证据;基准测试命令才是可复现的度量指标。
全局安装
npm install -g @astandrik/local-ydb-mcp
{
"mcpServers": {
"local-ydb": {
"command": "local-ydb-mcp",
"env": {
"LOCAL_YDB_TOOLKIT_CONFIG": "/path/to/local-ydb.config.json"
}
}
}
}
local_ydb_generate_schema 是只读的结构化表 DDL 生成工具。它会为 CREATE TABLE、表级二级索引、有序的 ALTER TABLE 列/索引变更以及 DROP TABLE 生成严格的 JSON 规范;返回生成的 DDL 文本、脚本 SHA-256、YDB 官方参考资料、警告、风险和验证步骤;并可在提供 validate: true 时验证生成的脚本。它不会应用 DDL,且使用与 local_ydb_apply_schema 相同的 1 MiB 生成脚本大小限制。在 with 设置中,设置名称必须是 YQL 风格的标识符,字符串会渲染为带引号的 YQL 字面量;对于裸令牌设置,请使用 { "token": "ENABLED" };并使用顶层 store 字段,而不是 with.STORE。列名不要使用保留的 __ydb_ 前缀;CREATE TABLE 中的 notNull 仅用于属于 primaryKey 的列;partitionByHash 仅与 store: "column" 及主键列搭配使用;列式主键须保持为 NOT NULL,且类型须属于文档所述的受支持类型;二级索引/向量索引须用于行式表;全局二级索引不得使用创建时的 with 设置;唯一索引须保持为同步;ALTER TABLE ADD COLUMN 仅可包含名称/类型;同一规范中的列/索引添加或删除操作不得重复;同一 alterTable 规范中添加或删除的列不得设置索引;向量索引须提供非唯一的 global: true、sync: "sync" 以及完整的 vector_kmeans_tree 设置;创建带向量索引的表时会显示警告,因为更推荐在添加代表性数据后再创建索引;并使用符合类型的默认值,例如 Utf8('x')、Uint64('1') 或 Date('2026-05-27')。
变更工具除非使用 confirm: true 调用,否则仅生成执行计划。local_ydb_apply_schema 是应用表 DDL 的工具:它通过官方 @ydbjs/* SDK 验证原始或生成的 YQL DDL,支持 PRAGMA、CREATE TABLE、ALTER TABLE 和 DROP TABLE,并且仅在验证成功且提供 confirm: true 后才会应用。响应会报告脚本 SHA-256 和截断后的 YDB 问题文本,不会回显原始脚本或凭据路径。创建表时,建议使用 /local/example 这类 CMS 租户路径;仅根目录的 /local 堆栈可通过静态端点验证 DDL,但如果根数据库没有租户存储池,YDB 会拒绝在该位置创建由存储支持的表。
该服务包含一个仅限 root 使用的 local_ydb_bootstrap_root_database 工具,可仅使用静态节点启动 /local;一个面向租户的 local_ydb_bootstrap 工具,用于创建可用于 GraphShard 的动态节点拓扑;一个只读的 local_ydb_list_versions 工具,用于发现已发布的 local-ydb 镜像标签,并按数字版本从新到旧排序;用于处理缓慢注册表下载的后台镜像拉取工具(local_ydb_pull_image 和 local_ydb_pull_status);用于生成、验证和应用表 DDL 的 local_ydb_generate_schema 和 local_ydb_apply_schema;用于租户范围或相对于租户执行备份操作的 local_ydb_list_dumps 及转储/恢复工具;以及一个高风险的 local_ydb_upgrade_version 工具,该工具通过镜像预检、转储、重建、恢复、重新应用身份验证、镜像验证和配置文件镜像持久化,升级基于文件的配置文件。经验证发现不匹配时,配置文件将保持不变;如果重建阶段完成后最终清单不可用,则会返回部分验证结果并持久化目标镜像。自动升级路径不支持绑定挂载的数据配置文件。
local_ydb_dump_tenant 和 local_ydb_restore_tenant 接受 path,同时保留现有的租户范围默认行为。转储操作中的 path 是 ydb tools dump -p 的源对象或目录;恢复操作中的 path 是 ydb tools restore -p 的目标目录。恢复前请使用 local_ydb_list_dumps 选择 dumpName;如果恢复需要在命令执行后进行验证,请使用可选的 describePaths,以及有范围限制的整表 countQueries,例如 SELECT COUNT(*) FROM \dir/table`;`。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。