Skip to content

MCP 故障排查

MCP 服务器未在客户端中列出

现象: AI 客户端没有显示数据墙DBW 的 MCP 工具,或服务器未出现在列表。

排查步骤:

  1. 确认 dab-config.jsonruntime.mcp.enabledtrue(默认启用)。
  2. 客户端配置文件中是否正确注册了数据墙DBW 作为 MCP 服务器。
  3. Stdio 模式:确认 dab 命令在客户端环境中可执行(which dab / where dab)。
  4. HTTP 模式:确认数据墙DBW 正在运行且 mcp 端点可访问——curl http://localhost:5000/mcp

工具调用返回权限错误

现象: AI 代理调用 MCP 工具时返回 permission denied / unauthorized。

排查步骤:

  1. 检查实体的 permissions——当前角色是否包含所需操作。Stdio 模式默认 anonymous
  2. 如果实体只配置了 authenticated 的权限,anonymous 角色无法使用。
  3. 实体级 mcp.dml-tools 是否为 false——设为 false 的实体对代理完全不可见。
  4. 全局 dml-tools 中对应的工具是否被关闭(如 "delete-record": false)。

代理看不到实体描述

现象: AI 代理无法正确理解数据结构,或因为缺少上下文生成错误的工具调用。

原因: 配置中没有设置实体和字段的 description。代理只能看到技术名称,无法理解业务含义。

解决:

  • 为每个实体添加 --description
  • 为关键字段添加 --fields.name xxx --fields.description "..."
  • 为存储过程参数添加 --parameters.description "..."
  • 描述应包含业务含义、单位、格式等上下文信息。

Stdio 模式启动失败

现象: dab start --mcp-stdio 启动失败,错误信息为 Failed to start the engine in MCP stdio mode

排查步骤:

  1. 运行 dab validate 确认配置文件无错误。
  2. 确认数据库连接可达。
  3. 确认 runtime.mcp.enabledtrue
  4. 确认需要的实体至少有一个配置了当前角色的权限。

Stdio 模式输出乱码

现象: MCP 客户端报 JSON 解析错误。

原因: Stdio 模式下 stdout 只能输出 MCP JSON 消息。日志输出或其他文本混入会导致客户端解析失败。

解决:

  • 添加 --LogLevel Error 减少日志输出。
  • 不要直接在 dab start 前执行 echo 等输出命令(比如在脚本中)。
  • 确认没有启动脚本向 stdout 输出非 MCP 内容。

工具列表不完整

现象: 代理看到的工具比预期的少。

排查步骤:

  1. 全局 dml-tools 中某些工具是否被设为 false
  2. 所有实体的 mcp.dml-tools 是否为 true(默认),某些实体可能被单独关闭。
  3. 当前角色在某些实体上可能没有对应操作的权限——只有可执行的实体才出现在工具中。
  4. 存储过程实体需要配置 mcp.custom-tool: true 才会以命名工具形式出现。

聚合查询超时

现象: AI 代理调用聚合工具时返回超时错误。

解决:

  • 调高 MCP 聚合超时:dab configure --runtime.mcp.dml-tools.aggregate-records.query-timeout 120
  • 确认数据库连接字符串超时也足够大——MCP 聚合超时和数据库超时取更短者。
  • 优化聚合查询——确保统计字段有索引。

execute_entity 工具不可用

现象: execute_entity 工具不在 tools/list 中。

排查步骤:

  1. 确认有存储过程实体配置了 execute 权限。
  2. 确认当前角色有 execute 权限。
  3. 确认 dml-tools.execute-entity 全局未被设为 false
  4. 确认数据库类型支持存储过程(仅 SQL Server)。

自定义工具未出现

现象: 配置了 mcp.custom-tool: true 的存储过程未以命名工具出现。

排查步骤:

  1. mcp.custom-tool 仅对存储过程有效——表或视图上设置会导致配置错误。
  2. 确认实体类型为 stored-procedure
  3. 确认命名转换——PascalCase 实体名在 MCP 中显示为 snake_case(GetBookByIdget_book_by_id)。

下一步

数据墙DBW 产品文档与开发指南。