P3.5 验收文档:在多客户端验证 4 个 MCP App 组件的渲染行为。
DBJavaGenix v0.2 实现了 4 个 MCP App 组件:
| 组件 | 类型 | 注入位置 | 实现 |
|---|---|---|---|
| ER 图 | mermaid |
db_render_er_diagram 返回值 |
src/dbjavagenix/mcp_apps/er_diagram.py |
| 依赖健康仪表盘 | dashboard |
springboot_analyze_dependencies 返回值 |
src/dbjavagenix/mcp_apps/dashboard.py |
| 代码预览 + Diff | code-diff |
codegen_render_* 6 个工具返回值 |
src/dbjavagenix/mcp_apps/code_diff.py |
| 包结构树 | tree |
db_codegen_generate 返回值 |
src/dbjavagenix/mcp_apps/package_tree.py |
每个组件的 meta 字段都通过 mcp.types.TextContent.meta 携带,序列化后符合 MCP Apps 提议规范 (_meta 前缀 + namespace mcp-apps/)。
信息基于 2026-05 现状,各客户端 MCP Apps 支持度持续演进。
| 客户端 | mermaid | dashboard | code-diff | tree | 备注 |
|---|---|---|---|---|---|
| Claude Desktop (Anthropic 官方) | ✅ 渲染 | ✅ 含 diff 视图 | 4.x 起原生支持 MCP Apps | ||
| Cherry Studio | ✅ 渲染 | MCP Apps 支持渐进引入中 | |||
| Cursor | ❌ JSON | ❌ 文本 | 目前主要消费 text 内容 |
||
| Continue.dev | ❌ 文本 | ❌ 文本 | ❌ 文本 | ❌ 文本 | 不识别 _meta,降级 |
降级路径: 即使客户端不渲染 _meta,所有工具 都同时返回完整 text 内容,用户可以阅读:
- ER 图:
```mermaid代码块 + 表/FK 文字摘要 - 仪表盘: 健康分 + 各 section 文字
- code-diff: JSON files 数组(LLM 可解析)
- tree: 文件列表
执行:
PYTHONPATH=src python scripts/verify_mcp_apps.py预期输出 (退出码 0):
[*] ER Diagram (P3.1)
[OK] er_diagram: component=mermaid, source=139 chars
[*] Dependency Dashboard (P3.2)
[OK] dashboard: score=75 sections=1
[*] Code Diff (P3.3)
[OK] code-diff: language=java, files=1
[*] Package Tree (P3.4)
[OK] tree: root=com.example, top-level children=3
=== 4/4 components verified ===
这脚本不依赖真实数据库,直接用 mock data 走完每个 mcp_apps/* pure function 并检查产出的 _meta 结构是否完整。
-
安装 Claude Desktop ≥ 4.0,在
~/Library/Application Support/Claude/claude_desktop_config.json注册:{ "mcpServers": { "dbjavagenix": { "command": "docker", "args": ["run", "-i", "--rm", "dbjavagenix:latest"] } } }或本地运行:
command="python",args=["-m", "dbjavagenix.cli", "server"],设PYTHONPATH。 -
启动 Claude Desktop,新建会话,确认工具列表里能看到
db_render_er_diagram/codegen_render_entity等。 -
测试 4 组件:
- ER 图: 输入 "用 sys_user / sys_role / sys_user_role 三张表画 ER 图(连接信息: ...)" → Claude 应调用
db_render_er_diagram,UI 中渲染 Mermaid 图。 - 仪表盘: 输入 "分析当前 Spring Boot 项目的依赖健康度" → Claude 调用
springboot_analyze_dependencies,UI 渲染分数 + 卡片 + "复制 Maven XML" 按钮。 - code-diff: 输入 "为 sys_user 表生成 Entity" → Claude 用原子工具链,UI 渲染 diff 视图(target 文件已存在时显示差异)。
- tree: 输入 "为 RBAC 三张表生成完整 Spring Boot 代码" → Claude 用
db_codegen_generate,UI 渲染包结构树。
- ER 图: 输入 "用 sys_user / sys_role / sys_user_role 三张表画 ER 图(连接信息: ...)" → Claude 应调用
-
截图保存到
docs/screenshots/:claude-desktop-er-diagram.pngclaude-desktop-dashboard.pngclaude-desktop-code-diff.pngclaude-desktop-tree.png
- Cursor → Settings → MCP → 添加同
claude_desktop_config.json结构 - 与 Claude Desktop 同样的 4 个查询
- 重点验证:即使 Cursor 不渲染 _meta,text 内容仍可读,且 LLM 能解析其中的 JSON (尤其是 code-diff 工具的 files 数组)
- meta 通过
mcp_apps.meta_builder.attach_meta附加到TextContent - 命名空间:
mcp-apps/component+mcp-apps/<field>(由build_mcp_app_meta自动加前缀) - 所有
_meta字段在 JSON 序列化时由 Pydantic 自动加_前缀 - pure function 设计:每个
build_*_data函数无副作用,接受 dict 返回 dict,易测试 (单测覆盖 ~100%)
- 截图缺失: 当前仓库 docs/screenshots/ 下尚无图片文件。需要在有 GUI 客户端的环境中按上文步骤抓取。
- db_render_er_diagram 仅支持 MySQL / SQLite: PostgreSQL / Oracle 待实现 (visualization_tools.py 留有
MCPServiceError)。 - code-diff 的 before 字段: 只有在调用 build_context 时显式传入
project_path才会去磁盘读已有文件,否则为 null。 - tree 组件: 当前 status 只区分 new / modified,不区分"是否被 .gitignore"。
- 抓 Claude Desktop / Cherry Studio 截图入仓
- README 顶部加 MCP Apps 演示动图
- 录一段 3 分钟视频走完 RBAC 代码生成流程