THEME
MOTION
HAPTIC
SOUND

MCP SERVER

Cathode UI ships a Model Context Protocol server so AI coding agents (Claude Code, Cursor, etc.) can discover and query the design system without scraping source. Four tools, zero network calls — just reads the local cathode.manifest.json and tokens.json.

Why

Design systems are tricky for LLMs: the component list, prop shapes, acceptable accent values, motion states, a11y expectations — they change over time and aren't obvious from source alone. The manifest encodes all of this intent-rich metadata. The MCP server surfaces it as tool calls so an agent can pull answers at authoring time.

Tools

ToolUse
cathode_list_components() Start here. Returns every component with a one-line summary.
cathode_get_component(name) Full spec for a named component — props, variants, motion states, a11y, feedback, examples.
cathode_get_tokens(theme?) Resolved color set for a theme plus the theme-independent type / spacing / motion / sound / haptic tokens.
cathode_search(query) Fuzzy match against names + summaries. Use when you have intent but not a component name.

Register in Claude Code

// .mcp.json
{
  "mcpServers": {
    "cathode-ui": {
      "command": "node",
      "args": ["/path/to/cathode-ui/packages/mcp-server/dist/server.js"]
    }
  }
}

After publishing to npm the command simplifies to npx -y @cathode-ui/mcp.

Register in Cursor / VS Code

Same JSON shape, pasted into each editor's MCP settings. The protocol is identical across clients.

What an agent interaction looks like

User: "Build me a status panel with three tiles in Cathode UI."

Agent (behind the scenes):
  → cathode_list_components()
  → cathode_get_component("StatusTile")
  → cathode_get_component("TerminalFrame")
  → cathode_get_tokens("dark")
  → writes code using StatusTile with the correct prop shapes,
    accent values, and icon slots — first try, no scraping.

The manifest also lives at cathode.manifest.json in the repo root for agents that can read files directly but don't speak MCP.