AI agent support

When a developer asks their AI assistant to find or use a web component library, Chameleon is legible to that assistant. An assistant that can't read a library cleanly gets it wrong: it invents props, misses events, and guesses at theming. Every page of this documentation is available as plain markdown, and Chameleon publishes the whole corpus in the formats coding agents already read.

Every page, as markdown⁠

The site mirrors each documentation page as markdown at its own path with a .md suffix. This page lives at /get-started/ai-agents; its markdown source is at /get-started/ai-agents.md. Append .md to any documentation URL to get the same content without the site chrome.

The same content is content-negotiable: request a page with an Accept: text/markdown header and you get the markdown representation of that exact URL, no suffix required. Either way, an agent fetching a page reads clean prose, code blocks, and tables rather than parsing rendered HTML.

The whole corpus, in one place⁠

Two files follow the llms.txt convention:

  • /llms.txt: a curated index: sections and links that point an assistant at the pages that matter, so it can decide what to fetch.
  • /llms-full.txt: the full documentation corpus concatenated into a single file, for tools that prefer to load everything at once.

The MCP server⁠

Chameleon's documentation is also a Model Context Protocol server, at https://chameleonui.io/mcp. An assistant queries it as a tool instead of fetching pages, and gets only the part it asked for. It's open to everyone, with no sign-in, and it has five read-only tools:

  • list_components: every documented component, with its web, React, and Blazor names.
  • docs_search: a ranked search across every page, one section at a time.
  • docs_get: a component's API for one framework: properties, events, methods, slots, and design tokens.
  • get_example: the code for a page's examples, in your framework.
  • check_code: checks a snippet's component, attribute, property, and event names against the API for your framework, and names the nearest real one for each it can't find. It also flags common React and Razor mistakes.

Add it to your assistant with the URL and nothing else:

  • Claude Code: claude mcp add --transport http chameleon https://chameleonui.io/mcp
  • Cursor, and VS Code with Copilot: add the URL as an HTTP server in their MCP settings.

The server allows each address 60 calls a minute.

Rules to follow⁠

  • What renders when: components inside a closed menu, popover, dialog, tooltip, or hidden navigation render when first shown. A select's options and value answer at once.
  • Inside a hidden element: components render when the hidden attribute is removed, never because page CSS shows the element. await updateComplete to reach one sooner.
  • Reaching hidden content from code: before a component is first opened, its open part (a menu's list, a dialog's panel) doesn't exist, though the elements the app put inside it do. Open it, await updateComplete, then query, measure, or focus.
  • Starting each opening empty: a component keeps the app's content between openings; reset that content on toggle when event.newState === "closed" if each opening should start empty.