ADR 0030: Code-understanding companions — catalog graphify, document Understand-Anything

Field Value
Status Accepted
Date 2026-06-08
Deciders Project maintainers
Supersedes
Superseded by
Related ADRs ADR-0007 (MCP catalog shape), ADR-0015 (graphify catalog entry), ADR-0008 (prereq install policy)

Summary

Two open-source "turn your repo into a queryable knowledge graph" tools fill the v4 researcher agent's cgb (code-graph-builder) slot: graphify (safishamsi/graphify, PyPI graphifyy) and Understand-Anything (Lum1104/Understand-Anything). Both are MIT-licensed, run inside the user's AI CLI, and are usable with or without aidokit.

This ADR draws the boundary: the MCP catalog lists MCP servers installed via a shell claude mcp add recipe; it does not list AI-CLI plugins. graphify is a real MCP server and stays catalogued (ADR-0015). Understand-Anything is a Claude Code / Copilot plugin installed via /plugin marketplace add + /plugin install (and platform installer scripts) — it has no claude mcp add shell recipe, so it does not fit MCPDef and is documented in the wiki as a recommended optional companion instead of being forced into the catalog.

It also corrects two accuracy issues found while evaluating graphify (see Decision §3).


Context

A user asked whether graphify and Understand-Anything are usable without aidokit and, if so, whether aidokit should integrate them. Findings:

aidokit's MCPDef (ADR-0007) models an MCP server by a per-adapter shell install.command. Understand-Anything's install is an in-session plugin command, not a shell MCP registration. Cataloguing it would require either faking a shell recipe that does not exist, or expanding the contract to model AI-CLI plugins — a new abstraction with its own lifecycle (/plugin vs claude mcp add), out of scope here and not requested.

The catalog already distinguishes its members from non-members: the --custom-url escape hatch and the "bring your own" wiki scenario exist precisely for tools that live outside the curated catalog. Understand-Anything belongs in that documented-but-not-catalogued space.


Decision

1. The MCP catalog is MCP-servers-only

An entry qualifies for @aidokit/mcp-catalog only if it is an MCP server installable by a deterministic per-adapter shell recipe (claude mcp add … -- …, a codex configBlock, etc.). AI-CLI plugins, marketplace extensions, and IDE add-ons that install via in-session commands (/plugin install) or bespoke installer scripts are not catalog members. They are documented in the wiki.

2. Understand-Anything is documented, not catalogued

A new wiki page (wiki/how-to-guides/code-understanding-graph.md) presents both options for the code-understanding / cgb slot:

The page states plainly that aidokit makes zero LLM calls and does not install, run, or proxy either tool — both run inside the user's own CLI with the user's own credentials.

3. Correct two graphify accuracy issues

RESOLVED (smoke-tested 2026-06-09, Python 3.12 + uv 0.10.3): uvx graphifyy mcp was wrong on three counts — graphifyy is not an executable (the package exposes graphify / graphify-mcp), there is no mcp subcommand, and the server lives in the optional [mcp] extra. The correct, verified command is claude mcp add graphify -- uvx --from "graphifyy[mcp]" graphify-mcp. It serves over stdio and defaults graph_path to graphify-out/graph.json, so no path argument is needed — but it serves a pre-built graph, so the user must build one first (graphify's /graphify skill or graphify .) or the server exits with "Graph file not found". The catalog, spec §11.11, the reference table, and the wiki how-to are all updated to the verified command + the build-first runtime prerequisite.

4. No contract change, no new prereq

MCPDef is unchanged. ADR-0008 (no auto-install) and the Python-is-per-MCP decision (ADR-0015 §3) stand. Documenting a plugin adds no runtime surface.


Consequences

Positive

Negative

Neutral


Alternatives considered

Alternative 1: Add Understand-Anything to the MCP catalog anyway

Write an MCPDef with a faked or plugin-ish install command.

Cons: there is no claude mcp add recipe; the install.command would be a lie or a non-MCP /plugin string that the per-adapter installer can't execute. Breaks the contract's meaning.

Reason rejected: the catalog's value is that every entry installs by a real deterministic recipe. A fake entry erodes that guarantee.

Alternative 2: Expand the contract to model AI-CLI plugins

Add a kind: 'mcp-server' | 'plugin' discriminator and a plugin install shape.

Pros: first-class plugin support; doctor visibility.

Cons: a new abstraction with its own lifecycle, per-adapter plugin-install semantics, and security model — speculative and unrequested. CLAUDE.md §8 warns against speculative contract expansion.

Reason rejected: premature. If demand for cataloguing plugins emerges, revisit with a dedicated ADR. One documented plugin does not justify a new contract.

Alternative 3: Document neither / catalog both

Either ignore both (loses real value) or catalog both (same contract violation as Alt 1 for Understand-Anything).

Reason rejected: the split (catalog the server, document the plugin) is the only option that respects the contract and still delivers both tools to users.


Validation

This decision is validated when:


References

Internal

External