Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Compose Preview Catalogs

REMOTE · PREVIEW.COO.EE · SCANNED OCT 6

Browse, inspect and render Jetpack Compose Material 3 and Wear component catalogs.

Available components

66 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security66
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • Authorisation not fully verified: no authorisation is required to call this server, and 65 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
Schema Quality & AI Usability60
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 17232 tokens (~265/item across 65 items; 65 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management20
  • Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage93
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 74% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "ui_builder_delete_design" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 66 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
  • Supports UI / widget rendering.Pass
Install

How do I install the Compose Preview Catalogs MCP server?

Compose Preview Catalogs is a hosted endpoint at https://preview.coo.ee/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · preview.coo.ee

# add to Claude Code
claude mcp add --transport http yschimke-compose-preview 'https://preview.coo.ee/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "yschimke-compose-preview": {
      "url": "https://preview.coo.ee/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "yschimke-compose-preview": {
      "type": "http",
      "url": "https://preview.coo.ee/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.yschimke-compose-preview]
url = "https://preview.coo.ee/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "yschimke-compose-preview": {
      "type": "remote",
      "url": "https://preview.coo.ee/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add yschimke-compose-preview --url 'https://preview.coo.ee/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  yschimke-compose-preview:
    url: "https://preview.coo.ee/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "yschimke-compose-preview": {
      "Transport": "http",
      "Url": "https://preview.coo.ee/mcp"
    }
  }
}
# add to Vellum
assistant mcp add yschimke-compose-preview -t streamable-http -u 'https://preview.coo.ee/mcp'
// mcp.json
{
  "mcpServers": {
    "yschimke-compose-preview": {
      "type": "http",
      "url": "https://preview.coo.ee/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 6 Oct 26 +1
    • Schema quality: 231 → 265 ▼ functional
    • Tool coverage: 66% → 74% ▲ functional
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 4 Oct 26 +1
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 3 Oct 26 +2
    • HSTS header: fail → pass ▲ security
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 2 Oct 26 +1
    • Schema quality: 12493 → 14378 ▼ functional
    • Schema quality: good → excellent functional
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 1 Oct 26 0
    • Schema quality: 9579 → 12493 ▼ functional
    • Tool coverage: 57% → 62% ▲ functional
    • Stability: unverified → 0.03 ▲ functional
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
  • 30 Sept 26 61

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 8 Oct 2026 · Probed https://preview.coo.ee/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=preview.coo.ee CN=YE2,O=Let's Encrypt,C=US 15 Sept 2026 14 Dec 2026 ECDSA 256 ECDSA-SHA384 6ff8840f68172331dc68322156e96bb91f8
SANs: preview.coo.ee
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of preview.coo.ee. — Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ee. present 34382 8 Verified
coo.ee. present 60194 13 Verified
preview.coo.ee. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=31536000
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy same-origin

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://preview.coo.ee/mcp Verified 200
http (plaintext) http://preview.coo.ee/mcp HTTPS enforced 308 https://preview.coo.ee/mcp
MCP tools · 68 exposed · ~17,955 tokens partial

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
catalog_diff_semantics ~176

Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, not a positional ref, so a tag that stops resolving is reported rather than silently retargeted at different pixels. Requires live grant scope.

NameTypeReqDescription
catalogstring––
otherobjectyes–
otherOverridesobject––
overridesobject––
previewIdstring––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
uristring––

Structured output declared, but exposes no named fields.

No examples provided.

catalog_get_preview_data ~125

Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope.

NameTypeReqDescription
catalogstring––
kindstringyes–
overridesobject––
previewIdstring––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
uristring––

Structured output declared, but exposes no named fields.

No examples provided.

catalog_history_diff ~177

Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions are already collapsed distinct renders, so whether the bytes changed is answered without fetching either image. Reports `unstable` so a difference on a nondeterministic preview is not mistaken for a real change.

NameTypeReqDescription
catalogstring––
fromstring––
previewIdstring––
tostring––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
uristring––

Structured output declared, but exposes no named fields.

No examples provided.

catalog_history_list ~165

The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently on every publish) rather than genuinely changing. Where this server holds the timeline it is returned inline; where the catalog is published from a delivery branch the manifest lives on that branch and this reports where to fetch it.

NameTypeReqDescription
catalogstring––
previewIdstring––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
uristring––

Structured output declared, but exposes no named fields.

No examples provided.

catalog_history_read ~150

Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself, or wants the bytes rather than the timeline.

NameTypeReqDescription
blobstring––
catalogstring––
commitstring––
previewIdstring––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
uristring––

Structured output declared, but exposes no named fields.

No examples provided.

catalog_library ~152

Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews. To find previews without the app, call catalog_list_projects, then catalog_list_previews with a catalog id. Also opens from the ChatGPT/Codex sidebar.

NameTypeReqDescription
projectIdstring–A catalog id from catalog_list_projects whose previews to list.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

catalog_list_data_products ~127

List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'uri'.

NameTypeReqDescription
catalogstring––
previewIdstring––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
uristring––
NameTypeReqDescription
dataProductsarrayyes–

No examples provided.

catalog_list_devices ~127

List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; an unrecognised name renders the default frame rather than failing, so check here instead of guessing.

NameTypeReqDescription
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

catalog_list_previews ~213

List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name such as EdgeButton) to narrow by id or label; results are paged (100 by default, 'offset'/'limit' for more). This server holds published library catalogs only: previews of the project you are editing come from the local compose-preview-mcp server, not from here.

NameTypeReqDescription
catalogstringyesA catalog id from catalog_list_projects.
limitinteger––
offsetinteger––
querystring–Case-insensitive substring of a preview id or label, such as a component name.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

catalog_list_projects ~104

List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as 'catalog'.

NameTypeReqDescription
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

catalog_render_matrix ~190

Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels). Prefer this over a catalog_render_preview per combination: the cells share one catalog lease and are reported together, so comparing axes costs one round trip instead of N. Capped at 24 cells. Requires live grant scope.

NameTypeReqDescription
axesobjectyes–
catalogstring––
observestring––
overridesobject––
previewIdstring––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
uristring––

Structured output declared, but exposes no named fields.

No examples provided.

catalog_render_preview ~205

Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/figma-svg vector export as SVG source, or observe=scroll-png / observe=scroll-svg for the full-page capture of a scrollable screen rather than the viewport crop. Overrides, other observations and fresh renders require live grant scope; without it, a call with no overrides returns the published snapshot (as resources/read does).

NameTypeReqDescription
catalogstring––
observestring––
overridesobject––
previewIdstring––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
uristring––
NameTypeReqDescription
imageUrlstring–Short-lived signed https URL of the rendered PNG, on a host with a public origin.

No examples provided.

get-documentation-for-story ~96

Storybook-MCP-compatible preview metadata lookup.

NameTypeReqDescription
idstring––
storyIdstring––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

list-all-documentation ~85

Storybook-MCP-compatible alias that lists every preview as a story.

NameTypeReqDescription
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

poll_access ~257

Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call instead of a dozen, since each poll here costs a whole round trip through you. It waits 8 seconds by default; pass waitSeconds (up to 30) if your client tolerates a longer call. Pass urlMode=true when the client supports URL elicitation: while the request is pending this returns the standard -32042 URL-elicitation-required error, and retrying the same call after the browser decision returns the outcome. A wait that times out answers status=pending, and you simply call again. Then approved (with the token) or denied/expired. Use the token on every later call: as the X-Compose-Preview-Token header where you control headers, and otherwise as each gated tool's 'token' argument — which is what an MCP client reaching this flow mid-session needs, since its headers were fixed when it connected.

NameTypeReqDescription
deviceSecretstringyes–
requestIdstringyes–
urlModeboolean–Use the protocol-standard URL elicitation UI while this request is pending.
waitSecondsinteger––

Structured output declared, but exposes no named fields.

No examples provided.

preview-stories ~131

Storybook-MCP-compatible rendering of one or more story ids. Requires live scope.

NameTypeReqDescription
idstring––
idsarray––
observestring––
overridesobject––
storyIdstring––
storyIdsarray––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
observationsarrayyes–

No examples provided.

request_access ~164

Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check that the code on the page matches, then call poll_access. When the client supports URL elicitation, call poll_access with urlMode=true instead of pasting the link into chat; clients without it keep this complete text fallback. The link grants nothing by itself — keep the deviceSecret this returns, it is what collects the token. Use this when a call answered 'authorization_required', or when your token stopped working (a server restart drops every grant).

NameTypeReqDescription
capabilitiesarray––
labelstring––
scopestring––
ttlSecondsinteger––

Structured output declared, but exposes no named fields.

No examples provided.

status ~76

Report readiness and the aggregate catalog set.

NameTypeReqDescription
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_acknowledge_comment ~284

Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that you have seen it, which is the honest thing to say while you are still working on what it asked for. Omit `threadId` to acknowledge the whole discussion, which is what you mean after reading it with ui_builder_list_comments. Acknowledgement is per actor, so a thread you have read is still waiting for the other people in the design, and it is what clears the `comments` block the server puts on your ui_builder_apply, ui_builder_get_design, ui_builder_export and ui_builder_put_asset replies.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
threadIdstring–One thread. Omit for every thread on the design.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_apply ~484

Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you read; the outcome reports conflicts or rejected edits. This is how an agent adds a scaffold, fills its slots and sets modifiers. Use `setStateVariable` with `name` and `declaration` to add or edit state, `removeStateVariable` with `name` to remove unused state, and `setEventBinding` with `nodeId`, `event` and an ordered `actions` array to edit behavior. An empty actions array removes the event handler. `removeNodeProperty` (or a setProperty whose value is `{"type":"null"}`) unsets the property — the way back after trying one — and is refused, naming the node and the field, when the catalog requires it. When somebody has commented on the design and you have not acknowledged it, the outcome carries a `comments` block naming the threads waiting on you; read it, because it is somebody talking about what you are editing.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
baseRevisionintegeryesThe revision these mutations were written against.
clientIdstring––
designIdstringyes–
operationIdstringyesYour id for this operation; makes a retry idempotent.
operationsarrayyesDesignMutationV1 objects. State example: {"type":"setStateVariable","name":"expanded","declaration":{"type":"value","valueType":"bool","initialValue":false,"nullable":false,"persistence":"preview"}}.…
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_archive_branch ~160

Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the branch.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
branchIdstringyes–
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
branchobjectyes–
schemastringyes–
summarystringyes–

No examples provided.

ui_builder_await_comments ~252

Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or another agent — posts, resolves or deletes; returns a `timedOut` reply if nothing happens within `waitSeconds`, which you answer by calling again with the same cursor. This is how you hold a conversation about a design: post, wait, read, act.

NameTypeReqDescription
afterSequenceintegeryesThe `sequence` you last saw. 0 for anything at all.
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
waitSecondsinteger–Up to 120. Defaults to 25.

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_await_decision ~336

Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by default only a person's (`from: "human"`), on any revision unless you name one — or a `timedOut` reply after `waitSeconds`. Every reply carries `latest` (the newest matching verdict, new or not) and `approved`, so `waitSeconds: 0` is a cheap, idempotent poll for a routine that can only check back later; quote the reply's `sequence` as the next `afterSequence`. People record theirs over the design's `decisions` HTTP route.

NameTypeReqDescription
afterSequenceinteger–The `sequence` you last saw. 0 for anything at all.
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
fromstring–Whose decisions count. Defaults to human.
revisioninteger–Only decisions on this revision.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
waitSecondsinteger–Up to 120. Defaults to 25; 0 checks without blocking.
NameTypeReqDescription
approvedbooleanyes–
decisionsarray––
designIdstringyes–
latest–––
schemastringyes–
sequenceintegeryes–
summarystringyes–
timedOutbooleanyes–

No examples provided.

ui_builder_await_design ~366

Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser or another agent commits an edit, as the same update frame the browser's own live socket receives; returns a `timedOut` reply if nothing happens within `waitSeconds`, which you answer by calling again with the same cursor. Quote as `afterSequence` the `throughSequence` of the delta you last received, or the `lastSequence` of the last snapshot; a cursor the server no longer retains is answered with a whole snapshot instead of the operations you missed. `waitSeconds: 0` checks without blocking. Nothing is lost between calls — the cursor is replayed when you call again — so somebody merely looking at the design does not wake you, and only a committed change does.

NameTypeReqDescription
afterSequenceintegeryesThe `lastSequence` you last saw, from ui_builder_get_design or a previous wait.
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
includeCatalogboolean–When the reply is a whole snapshot, embed the pinned catalog in it. Defaults to false.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
waitSecondsinteger–Up to 120. Defaults to 25.

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_branch_design ~327

Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with its own id: edit it with ui_builder_apply, look at it with ui_builder_view or ui_builder_get_design, compare it with ui_builder_diff_designs, then bring it back with ui_builder_merge_branch or drop it with ui_builder_archive_branch. Branch N times from the same revision to try N alternatives: merging one archives the others. Branches of a branch are refused; so are asset uploads, restores and document replacements on a branch. Needs write access to the design.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
branchIdstring–The branch's design id. Defaults to one minted from the parent's; naming one makes a retry idempotent.
designIdstringyesThe design to branch.
namestringyesWhat this alternative is, e.g. `compact header`.
revisioninteger–A retained revision to fork at. Omit for the current one.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
branchobjectyes–
schemastringyes–
summarystringyes–

No examples provided.

ui_builder_check_design ~624

Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinned catalog's validation, the mutation reducer and the Compose export gate — what ui_builder_validate runs) and `a11y`: controls with no label, icons and pictures with no `contentDescription`, touch targets under 48dp, text and icon contrast under WCAG 4.5:1 / 3:1, and text in a fixed height that clips at 200% font scale. Check a stored design (`designId`, optionally a past `revision`), a whole `document`, or `operations` applied to a scratch copy of `designId` exactly as ui_builder_apply would — nothing is saved. Returns `summary` first, then `ok`, the counts, and `findings` with the `nodeId` each is about, so you can fix them with ui_builder_apply and check again. `rendered: true` measures touch targets on a native render where the host has one (needs the ui-builder-export capability). Contrast against theme roles is resolved with the Material 3 baseline scheme and reported as a warning, never an error. `guidelines` runs only when named: a model judges the design against the Android design guides (developer.android.com) for its platform and reports each broken rule as a warning or note with its source. It uses this host's shared model key, so it runs only for the accounts the operator enabled and is reported as skipped for everyone else; with `rendered: true` the visual rules are judged on the native render too.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
baseRevisioninteger–The revision `operations` were written against; a stale one is a warning.
checksarray–Which checks to run. Defaults to schema, catalog, a11y; `guidelines` runs only when named.
designIdstring–A stored design to check, or to check `operations` against.
documentobject–A whole DesignDocumentV1 to check instead of a stored design.
operationsarray–DesignMutationV1 objects to apply to a scratch copy of `designId` and check — a dry run.
renderedboolean–Measure touch targets on a native render, and show it to the guidelines model. Defaults to false.
revisioninteger–A past revision of `designId`. Omit for the current one.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
checksarrayyes–
designId–––
dryRunboolean––
errorsintegeryes–
findingsarrayyes–
guidelines–––
okbooleanyes–
revision–––
schemastringyes–
skippedarray––
summarystringyes–
truncatedinteger––
warningsintegeryes–

No examples provided.

ui_builder_compare_branches ~368

Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-lived signed https link, numbered by caption — plus, per branch, what it changes against the parent at its fork (counts and a few lines, as ui_builder_diff_designs reports them). Show the person the picture and the numbered list, then ask with ui_builder_pick_branch; merge the choice with ui_builder_merge_branch. Writes nothing. Read access to the design.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
branchIdsarray–Only these branches of the design, in this order. Defaults to every open branch, oldest first.
designIdstringyesThe parent design.
device––Render every picture at this device instead of each design's own size: a preset id (phone_small, phone, phone_landscape, foldable_folded, foldable_unfolded, tablet_portrait, tablet_landscape, wear_sm…
inlineboolean–Also return the picture as an image block. Defaults to false: the signed link.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
branchesarray––
columnsinteger––
designIdstringyes–
device–––
image–––
imageBase64–––
parent–––
parentRevisionintegeryes–
rowsinteger––
schemastringyes–
summarystringyes–

No examples provided.

ui_builder_compare_reference ~475

Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel comparison means anything (`facts.pixelComparable` — a 328×56 dp crop stretched over a screen is not comparable until measured at its `actual` size); with `differences`, the share of pixels that differ and up to eight regions in dp, each with the layer it falls in; and for each of `nodeIds`, where that layer sits in the reference — from a box drawn over it in the editor, or a search of the reference's pixels, which for text also reads the font size — with the `alignment` that would make it agree (move, size, font size) and the exact `operations` to pass to ui_builder_apply. Nothing is written: apply the operations you agree with, then compare again and look with ui_builder_view. Layer matching needs node boxes, so `nodeIds` measures the native render (an export grant); differences alone use the PNG export. Treat `confident: false` as a hint to check, not an edit to make.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
differencesboolean–Measure where the frame differs. Defaults to true.
fitstring–How the picture is placed: contained and centred, across the width from the top, or at its own size from the top-left. Defaults to the fit the picture calls for (facts.recommendedFit).
nodeIdsarray–Layers to match against the reference, each with a proposed alignment.
rendererstring–Which render to measure. Defaults to native when nodeIds is given, export otherwise.
revisioninteger–Measure this revision. Defaults to the current one.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
designIdstringyes–
differences–––
differencesMessage–––
factsobjectyes–
layersarray––
notesarray––
referenceobjectyes–
rendererstringyes–
revisionintegeryes–
schemastringyes–

No examples provided.

ui_builder_create_design ~341

Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `catalogPin` must match a catalog revision this server serves, and a copy carries one that does. A `document` whose `home` is an existing design on this server is refused with a `compose-preview-decision/v1` choice to put to the person — or, when your client supports form elicitation on this connection, the person is asked in a form and the call acts on their answer.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyesThe id for the new design.
documentobject–A whole DesignDocumentV1.
fromDesignIdstring–Copy this design's document instead.
includeCatalogboolean–Embed the pinned catalog in the returned snapshot. Defaults to false.
titlestring––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
visibilitystring–Defaults to the server's configured visibility, which is private unless the operator chose public. Public allows anyone with the link to view; editing still requires explicit access.

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_delete_design ~226

Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding a write grant on this server — so a session can clean up the designs it made and cannot reach anybody else's; an agent acting under an approved grant owns what it created as the person who approved it. There is no undo. Not the released envelope: the contract has no delete, so the reply names the design that is gone.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_design_access ~185

Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — this is the answer to "who else is in here" and to "what is the id I must name when sharing".

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_diff_designs ~231

Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id and path (`root/slot[index]/node`), plus changed document fields (title, environment, state). Works across a design and its fork. `b` defaults to the current revision of `a`'s design. Values are the protocol's own JSON, ready to send back through ui_builder_apply. Read access to both.

NameTypeReqDescription
aobjectyes–
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
bobject––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
aobjectyes–
bobjectyes–
countsobjectyes–
documentarray––
identicalbooleanyes–
nodesarray––
schemastringyes–
summarystringyes–
truncatedboolean––

No examples provided.

ui_builder_export ~214

Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. This is the same gate the browser's code pane shows, so an agent and a designer get the same answer about the same design.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
formatstring–Defaults to compose. Available formats: compose, svg, png, bundle. Check the catalog exportCapabilities.
revisioninteger––
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_find_design_for_pr ~180

From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation status and revision. Then call ui_builder_implementation_status for what the design expects.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
prstringyesThe pull request URL, exactly as recorded.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
designsarrayyes–
prstringyes–
schemastringyes–
summarystringyes–

No examples provided.

ui_builder_fork_design ~304

Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document digest) and the parent's `forks` both show in ui_builder_get_links. A fork is not a branch: it never inherits the parent's canonical home and nothing flows back on its own, so tell the person it exists and bring a chosen change back with ui_builder_apply on the parent. Needs write access on this server and read access to the parent.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyesThe design to fork.
newDesignIdstring–The fork's id. Defaults to one derived from the parent; an id already taken is refused.
revisioninteger–A retained revision. Omit for the current one.
titlestring–The fork's title. Defaults to the parent's, marked with the revision.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
ancestryRecordedbooleanyes–
designIdstringyes–
forkedFromobjectyes–
home–––
revisionintegeryes–
schemastringyes–
summarystringyes–
titlestringyes–

No examples provided.

ui_builder_get_design ~289

Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when editing it. The catalog the design pins is left out unless `includeCatalog` is true: it is the same for every design on the pin, ui_builder_list_catalogs serves it, and it is most of the bytes. On hosts with design discussions, `unacknowledgedComments` is the number of comment threads this actor has not acknowledged; a nonzero count also carries the bounded `comments` notice.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
includeCatalogboolean–Embed the pinned catalog's whole CatalogCapabilityV1 in the snapshot, as the released shape does. Defaults to false.
revisioninteger–A past revision. Omit for the current one.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_get_guidelines ~214

Read a design's latest design-guidelines result, whoever ran it — a person in the editor on their own key, ui_builder_check_design on this host's key, or an agent that recorded verdicts with ui_builder_record_guidelines. Returns the record (model, revision, rules asked, verdicts, `ranBy`), the findings it implies, and `stale: true` when the design has changed since it was checked.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
currentRevisionintegeryes–
designIdstringyes–
findingsarray––
record–––
schemastringyes–
staleboolean––
summarystringyes–
unansweredarray––

No examples provided.

ui_builder_get_links ~306

Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` it is being discussed in, and the `previous` design it continues. Start a session on somebody else's design here — it is the brief, and it is what ui_builder_get_design cannot tell you. Every field is optional; a reply with none of them means nobody has said yet. The record is kept beside the design and is never part of it: no node holds it, no export sees it, and writing one does not move the revision. Ancestry rides along where there is some: `forkedFrom` / `forks` for a fork made with ui_builder_fork_design, and `branchOf` / `branches` for a design branch and its parent.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_guidelines_prompt ~347

Read the exact prompt a design-guidelines model is given for a design, before anybody spends a key on it: the rules for the design's platform (Android design guidance from developer.android.com, each with its source), the fixed system prompt, the user message with the design tree and Compose source, the JSON schema the verdicts must follow, a sentence on where each part comes from, and the pictures as image blocks — a Wear screen on its device (and unrolled when it scrolls), a Wear widget in the Samsung and Pixel Watch containers, a phone or tablet design at phone and tablet size. It spends no key. Judge it with your own model, then record the verdicts with ui_builder_record_guidelines so the editor and other agents see them. `rendered: false` leaves out the pictures and source (and the visual rules), and needs only read access; otherwise it needs the ui-builder-export capability.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
renderedboolean–Attach native renders and the Compose source. Defaults to true.
revisioninteger–A past revision. Omit for the current one.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
designId–––
picturesarray––
platform–yes–
provenancearray––
responseSchemaobjectyes–
revisionintegeryes–
rulesobjectyes–
schemastringyes–
sourceAttachedboolean––
systemPromptstringyes–
userTextstringyes–

No examples provided.

ui_builder_implementation_status ~264

Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status and whether its previews were found to match, the latest verdict on this revision, and the Compose export with the generator's diagnostics. `summary` says in one line whether the PR implements this revision and whether it was approved. `includeExport: false` leaves the Kotlin out and needs only read access; with it the call needs the ui-builder-export capability.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
includeExportboolean–Include the Compose export. Defaults to true.
revisioninteger–A past revision. Omit for the current one.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
designIdstringyes–
export–––
implementation–––
implementsRevisionbooleanyes–
latestDecision–––
links–––
revisionintegeryes–
schemastringyes–
summarystringyes–

No examples provided.

ui_builder_list_branches ~212

A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge would replay; for a merged one the parent revision it landed at, for an archived sibling the branch whose merge superseded it. Read access to the design.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyesThe parent design.
statusstring–Only branches in this state. Defaults to all.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…
NameTypeReqDescription
branchesarrayyes–
designIdstringyes–
schemastringyes–
statusstringyes–
summarystringyes–

No examples provided.

ui_builder_list_catalogs ~323

List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catalog's `catalogPin` here is exactly that. By default a summary of what authoring needs, a few KB rather than the whole capability: per component its id, role, traits, `slots` as `name[min..max]:accepted|roles` and `properties` as `name:type`, with `!` when required and `=a|b` listing the allowed values; per catalog its export formats and the modifier vocabulary. `full: true` returns the released CatalogsResponseV1 envelope with adapter status, parity and export notes per component; `componentIds` narrows either to the components you are about to use.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
componentIdsarray–Only these components. Omit for all of them.
fullboolean–The whole CatalogCapabilityV1 per catalog, as the released envelope. Defaults to false.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_list_comments ~243

Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and every reply under it. `sequence` rises on each change and is the cursor to quote to ui_builder_await_comments. Comments are kept beside the design and are never part of it: no node holds them and no export sees them. Each thread carries `acknowledgedBy`, so you can see what you have already caught up with; say you have read the rest with ui_builder_acknowledge_comment.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
designIdstringyes–
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_list_designs ~161

List the UI-builder designs on this server, newest first, with the cursor to continue.

NameTypeReqDescription
agentModelstring–Optional current model name shown to design viewers; self-reported. Omit when unknown.
agentNamestring–Optional agent/client name shown to design viewers; self-reported.
cursorstring–Continue a previous page.
limitinteger–Designs per page. Defaults to 50.
tokenstring–A grant token from poll_access, when you cannot set the X-Compose-Preview-Token header yourself — an MCP client fixes its headers at connect time, so this is how a token approved during this session…

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

What is the Compose Preview Catalogs MCP server?

Compose Preview Catalogs is an MCP server listed in the public MCP registry as io.github.yschimke/compose-preview. Browse, inspect and render Jetpack Compose Material 3 and Wear component catalogs. This page covers its hosted endpoint (https://preview.coo.ee/mcp).

Is the Compose Preview Catalogs MCP server safe to use?

Compose Preview Catalogs scores 66 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

Does the Compose Preview Catalogs MCP server require authentication?

No. We connected to Compose Preview Catalogs without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Compose Preview Catalogs MCP server still maintained?

Compose Preview Catalogs is still listed as active in the MCP registry. We last reached this channel on 6 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.