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
ui_builder_list_revisions ~249

A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restored r3`) and its document digest. `retention` says how far back the history still reaches — older revisions are gone, and get, diff, restore and fork stop at that floor. Page with `before`. Read access.

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.
beforeinteger–Only revisions older than this one; pass the previous reply's `nextBefore`.
designIdstringyes–
limitinteger–Revisions per page. Defaults to 20.
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–
nextBefore–––
retentionobjectyes–
revisionsarrayyes–
schemastringyes–
summarystringyes–

No examples provided.

ui_builder_merge_branch ~315

Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `applied` with the revision it landed at and any `STALE_*` notice of what it overwrote, or `refused` with the rejection code that stopped the run (nothing is then written), plus `skippedOperationIds` and how many were never tried. Run `dryRun: true` first. Resolve a refusal by passing that command's id in `skipOperationIds` (skip an undo with what it undoes), or branch again from the parent. On success the branch is merged and its open siblings — branches forked at the same revision — are archived. Needs write 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.
branchIdstringyes–
dryRunboolean–Replay and report without writing anything. Defaults to false.
skipOperationIdsarray–Logged commands to leave out of the replay.
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
archivedSiblingIdsarray––
branchIdstringyes–
commandsarrayyes–
dryRunbooleanyes–
forkRevisionintegeryes–
mergedbooleanyes–
parentDesignIdstringyes–
parentRevisionAfterintegeryes–
parentRevisionBeforeintegeryes–
remainingintegeryes–
schemastringyes–
skippedOperationIdsarray––
summarystringyes–

No examples provided.

ui_builder_move_design_home ~366

Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current `sourceHome` from ui_builder_get_design, provide a stable `operationId`, and name the new `targetHome`. The old server record remains as a retained copy pointing at the new home. The reply is an idempotent operation outcome with the new revision; a stale revision or changed source home is refused rather than overwriting a concurrent move. Unless the person already chose this move, call first with `dryRun: true`: it changes nothing and returns the choices to put to them — or, when your client supports form elicitation on this connection, asks them in a form and, if they choose to move, returns this move's outcome.

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 exact current revision read from the design.
designIdstringyes–
dryRunboolean–Validate and return the person's choices without changing anything.
operationIdstringyesYour stable id; makes a retry idempotent.
sourceHome–yesThe exact current DesignHomeV1, or null when the design is unhomed.
targetHome–yes–
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_open ~164

Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep link to /design/<id> opens one 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.
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_pick_branch ~336

Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch; with plain form elicitation it is a single-choice form; otherwise — and in chat tools like Slack — it returns a numbered list and one picture for YOU to post, and the person replies with a number. It never waits on a client that cannot answer. `outcome` is `chosen` (with `branchId`), `declined`, `ask-in-chat` or `no-branches`. Writes nothing: merge the chosen branch with ui_builder_merge_branch (dryRun first). 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 open branches, in this order. Defaults to every open branch, oldest first.
designIdstringyesThe parent design.
inlineboolean–With a numbered list, also return its picture as an image block.
messagestring–The question to put to the person. Defaults to asking which alternative to keep.
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
branchId–––
designIdstringyes–
image–––
imageBase64–––
optionsarray––
outcomestringyes–
schemastringyes–
summarystringyes–
via–––

No examples provided.

ui_builder_post_comment ~323

Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `nodeId` (a node in the design), or `x`/`y` in frame fractions, so the person reading it can see what you meant. The comment is attributed to your own grant; you cannot post as somebody else.

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.
bodystringyes–
designIdstringyes–
displayNamestring–The name to show beside your actor id.
markIdstring–Pin to a markup stroke on the reference.
nodeIdstring–Pin to a design node.
threadIdstring–Reply into this thread. Omit to start 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…
xnumber–Pin to a point on the frame, 0..1 across.
ynumber–Pin to a point on the frame, 0..1 down.

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_preview_catalog_recovery ~187

Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and returns a CatalogUpgradePreviewV1 with changes, issues and the hashes required by a later `upgradeCatalog` mutation through ui_builder_apply. This call never writes.

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_put_asset ~353

Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-encoded in `imageBase64`; the server stores them by content digest and pins {mediaType, contentDigest, source: uploaded} into the design's `assets` map under the key. This moves the design's revision, and the reply carries the new one to quote as `baseRevision`. Idempotent by content — the same bytes under the same key change nothing. Put the picture first, then insert the `asset/image` node with ui_builder_apply: the reducer refuses a key that is neither pinned in the design nor in the catalog's own registry. A pinned key whose bytes a lane cannot show renders as a visible placeholder, never as an error.

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.
assetKeystringyes1 to 64 characters of letters, digits, '.', '_' or '-'; what the node's assetKey property names.
designIdstringyes–
imageBase64stringyesThe image bytes, base64. At most 1 MiB decoded.
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_react_to_comment ~287

React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a fix somebody made, where a reply would be noise in a thread a person has to read. `commentId` is the `id` of a comment inside a thread, from ui_builder_list_comments. Reacting also acknowledges that thread for you, so it counts as the lightest acknowledgement; it says nothing about whether the question is settled.

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.
commentIdstringyesThe comment to react to, from its thread's `comments`.
designIdstringyes–
onboolean–False takes your reaction back. Defaults to true.
reactionstringyesOne emoji, at most 24 characters.
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_record_decision ~274

Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the revision. Recorded as an agent's decision, so a person waiting with ui_builder_await_decision's default `from: "human"` is not answered by it. Pass your own `decisionId` to make a retry idempotent.

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.
decisionIdstring–Your id for this decision; makes a retry idempotent.
designIdstringyes–
displayNamestring––
notestring–Why, in a sentence or two.
revisionintegeryesThe revision the verdict is about.
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…
verdictstringyes–
NameTypeReqDescription
approvedbooleanyes–
decisionsarray––
designIdstringyes–
latest–––
schemastringyes–
sequenceintegeryes–
summarystringyes–
timedOutbooleanyes–

No examples provided.

ui_builder_record_guidelines ~325

Record your own model's verdicts on ui_builder_guidelines_prompt as the design's latest design-guidelines result, so the editor's Issues panel and other agents show them. Pass the `revision` and rule ids the prompt asked (`rules.asked[].id`), and one verdict per rule you answered: `pass`, `fail` or `not_applicable`, with `confidence` 0..1, the `nodeIds` it is about and a one-sentence `reason`. `ranBy` is taken from your credential. Returns what ui_builder_get_guidelines returns.

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.
askedarrayyesThe rule ids the prompt asked.
designIdstringyes–
modelstringyesThe model that judged it, e.g. anthropic/claude-haiku-5.5.
revisionintegeryesThe revision the prompt was built from.
rulesVersioninteger–The prompt's `rules.version`. Defaults to this host's.
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…
verdictsarrayyes–
NameTypeReqDescription
currentRevisionintegeryes–
designIdstringyes–
findingsarray––
record–––
schemastringyes–
staleboolean––
summarystringyes–
unansweredarray––

No examples provided.

ui_builder_rename_design ~238

Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, and not part of any mutation. Anybody who may write the design may rename it. The revision does not move — a title is not design content — so `baseRevision` is not needed and an edit in flight is unaffected. Not the released envelope: the contract has no rename, so the reply is the design's listing entry with its new title.

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–
titlestringyes–
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_render_design_matrix ~486

See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box on the sheet. Nothing is saved — the design's environment is swapped on a scratch copy for each cell. Name `devices` by preset (phone_small, phone, phone_landscape, foldable_folded, foldable_unfolded, tablet_portrait, tablet_landscape, wear_small_round, wear_large_round, wear_square, tv_1080p) or as {widthDp, heightDp, label?, round?}; or a `formFactor` (phone, foldable, tablet, wear, tv, adaptive) for its default set; with neither you get the design's own form factor — phone, foldable and tablet for a mobile catalog, the round watches for Wear. Add `themes: ["light","dark"]` and `fontScales: [1, 2]` to cross them; at most 16 cells. The sheet is a short-lived signed https link kept under 3.5 MB, so a chat surface can show it inline; `inline: true` puts the bytes in the reply as well.

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–
devicesarray–Devices to draw. Omit for the form factor's defaults.
fontScalesarray–Defaults to the design's own font scale.
formFactorstring–A default device set, instead of `devices`.
inlineboolean–Also return the PNG as an image block. Defaults to false; a host with no public origin always does.
revisioninteger–A past revision. Omit for the current one.
themesarray–Defaults to the design's own theme.
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
cellsarrayyes–
columnsintegeryes–
designIdstringyes–
imageobjectyes–
imageBase64–––
revisionintegeryes–
rowsintegeryes–
schemastringyes–
summarystringyes–

No examples provided.

ui_builder_render_native ~258

Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Returns the first frame, the token the live frame stream is opened with, and the design node ids the render is tagged with, so `catalog_get_preview_data` can report each node's bounds and a client can put selectable regions over the image. This host has a native render lane. The reply is not an McpResponseEnvelopeV1: the released contract defines no request type for a native render.

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–
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_replace_design_document ~356

Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design and the same canonical home you read from ui_builder_get_design; `baseRevision` must still be current. The runtime validates the complete document and quotas, preserves server-owned identity, access and creation time, retains the old revision, and broadcasts a whole snapshot. Retry with the same `operationId`; never invent a new id after a lost response. Unless the person already chose to save back or re-import onto this home, call first with `dryRun: true`: it changes nothing and returns the choices to put to them — or, when your client supports form elicitation on this connection, asks them in a form and returns the outcome of the write they chose.

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 exact current revision being replaced.
designIdstringyes–
documentobjectyesThe complete replacement DesignDocumentV1, including the existing home.
dryRunboolean–Validate and return the person's choices without changing anything.
operationIdstringyesYour stable id; makes a retry idempotent.
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_resolve_comment_thread ~173

Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible.

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–
resolvedboolean–Defaults to true.
threadIdstringyes–
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_restore_revision ~281

Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone by restoring again. `baseRevision` must be the current revision (a restore that raced an edit is refused as stale). `dryRun: true` writes nothing and returns the diff the restore would apply. 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.
baseRevisionintegeryesThe design's current revision, from ui_builder_get_design or ui_builder_list_revisions.
designIdstringyes–
dryRunboolean–Return the diff without restoring. Defaults to false.
operationIdstring–Makes a retry idempotent. Defaults to a fresh id.
revisionintegeryesThe retained revision to restore.
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
appliedbooleanyes–
baseRevisionintegeryes–
committedRevision–––
currentRevisionintegeryes–
designIdstringyes–
diffobjectyes–
documentDigest–––
dryRunbooleanyes–
operationId–––
revisionintegeryes–
schemastringyes–
stalebooleanyes–
summarystringyes–

No examples provided.

ui_builder_search_components ~223

Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_catalogs (id, role, traits, slots, properties, and the catalog pin) for only the matches, so you don't pay for the whole catalog.

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.
catalogstring–Only this catalog system id. Omit to search every catalog.
querystringyesText to look for in a component's id, role or traits.
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_set_implementation ~273

Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have compared the PR's rendered previews with the design — `previewMatch` {status: match|mismatch|unknown, evidence: a URL to the comparison, note}. Replaces the whole record; pass only `designId` to clear it. Writing the same record again changes nothing and wakes nobody. 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.
designIdstringyes–
prstring–The pull request URL.
previewMatchobject––
revisioninteger–The design revision the PR implements.
statusstring–Defaults to open.
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_set_links ~367

Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are adding to what is already there. `issue`, `reference`, `pr` and `thread` are absolute http or https URLs, at most 2 KB each; `previous` is a design id on this host, not a URL. Anything else is refused with the reason. Sending an empty record clears it. Record the `pr` when you open one for a design you built here: it is what lets the next session, and the person who filed the issue, find one from the other.

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–
issuestring–The tracker issue this design is for.
prstring–The pull request that implemented it.
previousstring–The design id on this host that this one continues.
referencestring–The frame in the design tool it reproduces.
threadstring–A permalink to a discussion held elsewhere, such as a chat thread. It does not replace this server's comments for a server-homed design: keep that discussion 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_set_reference ~532

Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same overlay the browser editor's Frame, density and reference panel shows, so a person opening the design sees what you attached. Kept beside the design and never part of it: no node holds it, no export sees it, the revision does not move. Send PNG, JPEG, WebP or SVG bytes in `imageBase64`. For a Figma frame, fetch the picture with your Figma tools (a screenshot of the node) and pass the frame's URL as `sourceUrl`; this host fetches nothing itself. State the export scale as `density` (2 for a Figma 2x export) or in the name (`card@2x.png`): without it a screen-shaped picture is read across the frame's width and anything else at the design's own density. The reply says what the picture is against the frame — size in dp, density, whether it is a screen or a region — and whether pixel comparison means anything. Marks drawn in the editor are kept; the alignment is reset, as a new picture in the editor does. A user-supplied image is stored on this host: say so, and attach it only with their permission.

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.
clearboolean–Remove the reference, its marks and pieces instead.
densitynumber–The picture's pixels per dp, e.g. 2 for a 2x export, 2.625 for a Pixel screenshot.
designIdstringyes–
imageBase64string–The picture, base64. PNG, JPEG, WebP or SVG; at most the host's reference size limit.
namestring–What the editor calls it. An `@2x` suffix declares the density.
sourceUrlstring–Where it came from, such as the Figma frame URL. Provenance only; never fetched.
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
attachedbooleanyes–
designIdstringyes–
facts–––
notesarray––
reference–––
schemastringyes–

No examples provided.

ui_builder_share_design ~342

Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-in person, `operator` for the token holder, `agent:<fingerprint>` for another agent's grant; ui_builder_design_access lists the ones a design already carries. A `viewer` may read and export, an `editor` may also change the design, and neither may share it on. Only the design's owner may share it, and an agent acting under an approved grant shares as the person who approved that grant. Pass visibility instead of actorId to choose private or public (read only). Private keeps existing invited collaborators.

NameTypeReqDescription
actorIdstring–Who to share with, e.g. github:octocat.
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–
revokeboolean–Take this actor's access away instead.
rolestring–editor or viewer. Defaults to viewer.
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–Change visibility instead of an actor grant. Public is read only. Private keeps invited collaborators.

Structured output declared, but exposes no named fields.

No examples provided.

ui_builder_validate ~368

Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would apply them. Runs the same checks the real call does — document shape, catalog pin, the catalog's own validation, the mutation reducer — and then the Compose export gate, which is the list the editor's problems panel shows. Returns `{valid, problems:[{severity, source, code, message, nodeId?, field?, operationIndex?}]}`; `valid` is false exactly when a problem is an error. Nothing is written, no revision moves and nobody watching the design is notified. The shapes are published as the resources compose-preview://schemas/ui-builder-document-v1.json and compose-preview://schemas/design-mutation-v1.json.

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 the operations were written against; a stale one is reported as a warning.
designIdstring–A stored design to check, or to check `operations` against.
documentobject–A whole DesignDocumentV1 to check.
operationsarray–DesignMutationV1 objects to check against `designId`'s current document, as ui_builder_apply takes them.
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–––
problemsarrayyes–
revision–––
schemastringyes–
validbooleanyes–

No examples provided.

ui_builder_view ~443

See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one is attached, the discussion's `comments` pins, and the layout `bounds` — and beside it JSON with the revision, each visible node's id and box, each pin's thread and position, all in the returned image's pixels. The picture is a short-lived signed https link by default; `inline: true` puts the bytes in the reply as well. The frame is the PNG export (`renderer: "export"`, the editor's own renderer), which reports no node boxes; `renderer: "native"` draws real Compose on a host with a native render lane, reports every node's box so the selection can be outlined, and needs the ui-builder-export capability. A node with no box is reported, never drawn at a guessed position. Not an McpResponseEnvelopeV1.

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–
includearray–Overlays to draw. Defaults to comments, reference, selection; [] draws the bare frame.
inlineboolean–Also return the PNG as an image block. Defaults to false; a host with no public origin always does.
rendererstring–Defaults to export.
revisioninteger–A past revision. Omit for the current one.
selectionarray–Node ids to show as selected.
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…
viewportobject–Fit the picture inside this many pixels, keeping its aspect ratio. Omit for the render's own size.
NameTypeReqDescription
boundsUnavailable–––
commentsarray––
designIdstringyes–
frameobjectyes–
imageobjectyes–
imageBase64–––
includearrayyes–
nodesarray––
notesarray––
reference–––
rendererstringyes–
revisionintegeryes–
schemastringyes–
selectionarrayyes–

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.