@cf/ui

MCP

An MCP server that answers questions about these components, tokens and rules, for the agent doing the building.

The server lives at https://ds.connorforsyth.co/api/mcp. It speaks streamable HTTP, it's public, and it's stateless: there's no key and no session, and each request stands on its own. It answers from the same compiled knowledge that DESIGN.md and these pages are built from, so a rule an agent reads through MCP is word for word the rule you see here.

Connect

Most clients take a config like this:

{
  "mcpServers": {
    "cf-ui": {
      "url": "https://ds.connorforsyth.co/api/mcp"
    }
  }
}

In Claude Code it's one command:

claude mcp add --transport http cf-ui https://ds.connorforsyth.co/api/mcp

Tools

  • get_tokens(query)

    The colour and radius tokens with their light and dark values. Filter with `query` (matches name and use). Write the semantic Tailwind utility (`bg-primary`, `text-muted-foreground`, `rounded-md`), never the raw value, and never a `dark:` colour override: the tokens already switch with the `.dark` class.

  • search_components(query)

    Call this before hand-authoring UI. Lists the @cf/ui components, optionally filtered by `query` (name, keyword or what it is for). Multi-word queries are matched term by term and ranked, so describe the job ('confirm before deleting', 'keyboard shortcut') rather than guessing a name.

  • get_component(name, source)

    Everything about one component: its role, MUST/SHOULD/MAY rules, guidance, install command, registry address, docs URL and source (the authoritative reference for props and variants).

  • get_design(slug)

    The design foundations and their rules: purpose, principles, styling, colours, typography, iconography, accessibility. Without `slug`, lists the sections; with it, returns that section in full.

Without MCP

Not every agent speaks MCP, and it's more than a small project needs. The same knowledge is published as plain text at /design.md and /llms.txt. To keep a copy in your own repo, where an agent will find it without being told:

bunx shadcn@latest add @cf/design

That writes DESIGN.md at the root. Re-run it when the rules change.