# The gen-ui MCP — live substrate facts

Background on the generation MCP server that `app-planning` and other consumer-side skills
route generative-UI work through. Load when the pinned version, tool roster, or TOOLS.md
acquisition path is in question.

(Claims re-verified against the kit's live source 2026-08-26; re-verify on a MINOR cut.)

## Authoritative source

The generation MCP now ships as `@adia-ai/mcp`'s `gen-ui` subcommand (`adia-mcp gen-ui`) — one npm
package, three MCP servers (`gen-ui` / `protocol` / `factory`) under one bin, per gh#1240
(operator ruling 2026-08-14), which folded the two prior separately-published packages,
`@adia-ai/gen-ui-mcp` (itself ADR-0048 P2's rename of the retired `@adia-ai/a2ui-mcp`) and
`@adia-ai/a2ui-protocol-mcp`, into this one distribution before either predecessor name ever
published a P7 cut. Its pinned version is the injected `adia-info` probe's `a2uiMcp.pin` field
(never a literal in a skill file: a version written into a skill loses a race with every
lockstep cut — it happened twice).

## Tool roster

**Ask the connected server for `tools/list`** — that is the authoritative answer, it needs no
file, and it cannot go stale. In the monorepo the same surface is written down at
`packages/gen-ui/mcp/TOOLS.md` (the `gen-ui` section — generated from that live `tools/list`,
gated by `check:mcp-tools-md-fresh`).

If you need the file in a consumer install, pack the package your `.mcp.json` pins and extract
it:

```bash
npm pack <pinned-pkg>@<version>
tar -xzf <tarball> package/TOOLS.md
```

Never `npm view` — it reads registry METADATA and exits 0 printing NOTHING for a file argument
(a silent wrong answer).

Note the file only ships from `0.8.37` on: the retired `@adia-ai/a2ui-mcp` tarballs never
included it, so on an older pin `tools/list` is the only route.

## Usage notes

- `get_component_map` / `lookup_component` before composing — tag names come from the catalog,
  not memory.
- `generate_ui` runs on the host LLM via stdio sampling, no API key.
