A desktop application and CLI toolbox for MDD diagnostic databases, built with Tauri and Vue.js. It renders the full ECU diagnostic tree — variants, functional groups, shared data, protocols, services, parameters, and more — in an interactive graphical interface.
- Hierarchical tree view — browse ECU variants, functional groups, ECU shared data, protocols, layers, services, requests, responses, DOPs, SDGs, state charts, communication parameters, and functional classes.
- Detail pane — tabbed tables showing overview data, parameter lists, inherited references, and related items for the selected node.
- Per-cell jump targets — cells highlighted in blue are clickable links that navigate to the referenced element in the tree (e.g., jumping from a service's request to the request node itself).
- Search — incremental search with configurable scope (All, Variants, Services, Diag-Comms, Requests, Responses).
- Sorting — toggle alphabetical/ID sorting for DiagComm lists, and column-level sorting in detail tables.
- Navigation history — breadcrumb trail with back-navigation so you never lose your place.
- Diff mode — compare two MDD files with colour-coded additions, removals, modifications, and unchanged elements. The detail pane shows a table comparing old vs. new values for modified properties.
- Export diff — generate a plain-text diff report from the CLI.
- MCP server — expose browse, search, and diff tools over stdio for AI assistant integration.
git clone https://github.com/eclipse-opensovd/mdd-ui
cd mdd-ui
cargo tauri buildThe bundled application is placed at target/release/bundle/.
Pre-built releases are not code-signed with an Apple Developer certificate. macOS Gatekeeper will therefore block the app on first launch with a "damaged" message.
Run the following command once after copying the app to /Applications:
xattr -cr /Applications/mdd-ui.appSubsequent updates via the built-in auto-updater are downloaded programmatically and are not affected by this — they install silently without any manual step.
Signing is required when createUpdaterArtifacts is enabled. To skip it without modifying tauri.conf.json, pass a config override via the shell:
cargo tauri build --config '{"bundle":{"createUpdaterArtifacts":false}}'Some Linux distributions (e.g. Arch Linux, CachyOS, NixOS) strip debug symbols from binaries during the build process, which can break Tauri's bundler. Set NO_STRIP=true to prevent this:
NO_STRIP=true cargo tauri buildLaunch the graphical application:
cargo tauri dev # development, with hot-reload
cargo tauri build # release buildExport a text-based diff report to a file or stdout:
mdd-ui export-diff <OLD_FILE> <NEW_FILE> [-o <OUTPUT_FILE>]mdd-ui export-diff old_ecu.mdd new_ecu.mdd -o diff_report.txt
mdd-ui export-diff old_ecu.mdd new_ecu.mdd # prints to stdoutmdd-ui can run as an MCP (Model Context Protocol) server over stdio, allowing AI assistants to browse, search, and diff MDD databases programmatically.
This requires building with the mcp feature:
cargo build --release --features mcpThen start the server:
mdd-ui mcp| Tool | Description |
|---|---|
load_mdd |
Load an MDD file and return an ECU summary (name, variant count, etc.). Must be called before other read tools. |
browse_tree |
Navigate the tree hierarchy with optional depth limit and start index. |
get_node_details |
Get detailed information (overview tables, parameters, etc.) for a node by index. |
search_nodes |
Case-insensitive text search across all tree nodes. |
diff_mdd |
Compare two MDD files and return an annotated diff tree. |
export_diff |
Generate a full text diff report with property-level changes. |
To use the MCP server with OpenCode, add the following to your opencode.json (either in your project root or ~/.config/opencode/opencode.json):
{
"mcp": {
"mdd-ui": {
"type": "local",
"command": ["path/to/mdd-ui", "mcp"]
}
}
}Replace path/to/mdd-ui with the actual path to your built binary (e.g., target/release/mdd-ui).
This is a Cargo workspace with two crates:
├── src/
│ ├── main.rs # Entry point: Tauri app, export-diff CLI, mcp CLI
│ ├── commands.rs # Tauri IPC commands (app state, search, diff, etc.)
│ └── mcp/ # MCP server (optional, behind "mcp" feature)
│ └── mod.rs
├── frontend/ # Vue.js + Vite frontend
│ ├── src/
│ ├── package.json
│ └── vite.config.ts
├── src/mdd-core/ # Shared library crate
│ └── src/
│ ├── lib.rs
│ ├── database/ # MDD file loading and data extraction
│ ├── diff/ # Diff functionality (snapshot, compare, export)
│ └── tree/ # Tree model, builder, types, and element modules
├── tauri.conf.json
└── capabilities/
| Crate / Library | Purpose |
|---|---|
| cda-database | MDD/FlatBuffers diagnostic database reader |
| tauri | Desktop application framework |
| Vue.js + Vite | Frontend framework and build tool |
| clap | Command-line argument parsing |
| anyhow | Ergonomic error handling |
| serde | Serialization/deserialization |
| rmcp | MCP server SDK (optional, mcp feature) |
| tokio | Async runtime for MCP server (optional, mcp feature) |
The built-in AI assistant supports GitHub Copilot via OAuth Device Flow. Authentication uses the VS Code Copilot extension's GitHub App Client ID (Iv1.b507a08c87ecfe98), which is pre-approved on every GHE instance with Copilot enabled — no enterprise admin approval needed.
After the OAuth device flow obtains an access token, mdd-ui exchanges it for a short-lived Copilot API key via the /copilot_internal/v2/token endpoint. This key (and the API base URL returned by the exchange) are cached and automatically refreshed when they expire.
Licensed under Apache-2.0.
SPDX-License-Identifier: Apache-2.0