Refcat MCP
Refcat MCP provides AI agents with access to a catalog of 1 million real UI flows and 3.3 million screens from shipped apps, sites, emails, and games. It allows agents to search for UI patterns, retrieve screen structures and images, analyze user flows, and export design systems to Markdown or Figma, grounding design and frontend decisions in real-world evidence.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.refcat.app/mcpWhat you can do with it
- Search for specific UI patterns like checkout flows or onboarding screens
- Retrieve screen structures, OCR text, and visual elements for design reference
- Export design system documentation in Markdown format
- Generate UI screens for empty project slots using AI
Source and maintenance
Protocol and capabilities
- Server
- refcat 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 18 advertised
- Resources
- 0 advertised
- Resource templates
- 4 advertised
- Prompts
- 4 advertised
{
"tools": {
"listChanged": true
},
"prompts": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
18 advertised
list_facets — List filter values
The filter vocabulary with real counts (number of flows): platform, flowIntents, uiComponents, pageType and screenPatterns. Call this before filtering search_screens or search_flows so filters are real values, not guesses. Optional query/filters narrow every count, flowIntents included.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "string",
"maxLength": 200
},
"filters": {
"type": "object",
"properties": {
"appId": {
"type": "array",
"items": {
"type": "string"
}
},
"pageType": {
"type": "array",
"items": {
"type": "string"
},
"description": "Open vocabulary, e.g. 'Paywall', 'Home'; call list_facets for real values"
},
"platform": {
"type": "array",
"items": {
"enum": [
"ios",
"android",
"web",
"email",
"game",
"reference",
"store",
"ad"
],
"type": "string"
},
"description": "ios, android, web (desktop sites), email (brand email galleries), game (game UI: menus, HUD, inventory), reference (curated design references like bento grids), store (app store listing carousels) or ad (ad creatives). email, game, store and ad need Pro."
},
"flowIntents": {
"type": "array",
"items": {
"enum": [
"login",
"signup",
"onboarding",
"checkout",
"payment",
"search",
"profile",
"settings",
"navigation",
"dashboard",
"paywall",
"teams",
"account",
"notification",
"support"
],
"type": "string"
},
"description": "What the flow is for, e.g. ['paywall'] or ['onboarding', 'signup']"
},
"uiComponents": {
"type": "array",
"items": {
"enum": [
"button",
"input",
"password_input",
"email_input",
"phone_input",
"checkbox",
"radio",
"toggle",
"dropdown",
"tab",
"search_bar",
"card",
"list",
"modal",
"toast",
"otp",
"social_login",
"progress_indicator"
],
"type": "string"
},
"description": "Components the screen must contain, e.g. ['otp'] or ['social_login']"
},
"screenPatterns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Open vocabulary; call list_facets for real values"
}
}
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_screen — Get screen
One catalog screen with its image and structure. Returns an image block (look at it for color, typography and spacing) and JSON with app, flow, platform, pageType, screenPatterns, uiComponents, keyTexts, dimensions, capturedAt and `elements` (OCR text and hotspots with normalized bbox [x0,y0,x1,y1], sorted top to bottom: use them to reproduce hierarchy, order and positions). image 'small' is ~800px wide (~1-2k tokens), 'full' 1800px. Cite the app, flow and capture date when you build from it.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"screenDocId"
],
"properties": {
"image": {
"enum": [
"none",
"small",
"full"
],
"type": "string",
"default": "small"
},
"screenDocId": {
"type": "string"
},
"includeElements": {
"type": "boolean",
"default": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_screens_by_image — Search screens by image
Find catalog screens that look like your images (base64, e.g. a screenshot of the app you are building). Then call get_screen on the matches to compare. Free plans: up to 2 images and 12 results.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"images"
],
"properties": {
"limit": {
"type": "integer",
"default": 24,
"maximum": 120,
"minimum": 1
},
"images": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 8,
"minItems": 1
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_screens — Search screens
Search individual UI screens by description, app name or site ('paywall with annual plan first', 'Spotify', 'linear.app'). Returns metadata per screen; set includeImages to also get the top screens as images (max 4, ~1-2k tokens each). Call get_screen for the full structure of one.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 12,
"maximum": 48,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Free text, an app name, or a website"
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 200,
"minimum": 0,
"description": "Skip this many results (pagination)"
},
"filters": {
"type": "object",
"properties": {
"appId": {
"type": "array",
"items": {
"type": "string"
}
},
"pageType": {
"type": "array",
"items": {
"type": "string"
},
"description": "Open vocabulary, e.g. 'Paywall', 'Home'; call list_facets for real values"
},
"platform": {
"type": "array",
"items": {
"enum": [
"ios",
"android",
"web",
"email",
"game",
"reference",
"store",
"ad"
],
"type": "string"
},
"description": "ios, android, web (desktop sites), email (brand email galleries), game (game UI: menus, HUD, inventory), reference (curated design references like bento grids), store (app store listing carousels) or ad (ad creatives). email, game, store and ad need Pro."
},
"flowIntents": {
"type": "array",
"items": {
"enum": [
"login",
"signup",
"onboarding",
"checkout",
"payment",
"search",
"profile",
"settings",
"navigation",
"dashboard",
"paywall",
"teams",
"account",
"notification",
"support"
],
"type": "string"
},
"description": "What the flow is for, e.g. ['paywall'] or ['onboarding', 'signup']"
},
"uiComponents": {
"type": "array",
"items": {
"enum": [
"button",
"input",
"password_input",
"email_input",
"phone_input",
"checkbox",
"radio",
"toggle",
"dropdown",
"tab",
"search_bar",
"card",
"list",
"modal",
"toast",
"otp",
"social_login",
"progress_indicator"
],
"type": "string"
},
"description": "Components the screen must contain, e.g. ['otp'] or ['social_login']"
},
"screenPatterns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Open vocabulary; call list_facets for real values"
}
}
},
"includeImages": {
"type": "boolean",
"default": false
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_flows — Search flows
Search whole flows (ordered screen sequences) by intent, app or description. Then get_flow for the steps.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 8,
"maximum": 24,
"minimum": 1
},
"query": {
"type": "string",
"default": ""
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 200,
"minimum": 0,
"description": "Skip this many results (pagination)"
},
"platform": {
"type": "array",
"items": {
"enum": [
"ios",
"android",
"web",
"email",
"game",
"reference",
"store",
"ad"
],
"type": "string"
},
"description": "ios, android, web (desktop sites), email (brand email galleries), game (game UI: menus, HUD, inventory), reference (curated design references like bento grids), store (app store listing carousels) or ad (ad creatives). email, game, store and ad need Pro."
},
"flowIntents": {
"type": "array",
"items": {
"enum": [
"login",
"signup",
"onboarding",
"checkout",
"payment",
"search",
"profile",
"settings",
"navigation",
"dashboard",
"paywall",
"teams",
"account",
"notification",
"support"
],
"type": "string"
}
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_emails — Search emails
Search real product emails (welcome, receipts, onboarding, re-engagement…) by description or brand. Each result is one email with its desktop and/or mobile image; when hasHtml is true, get_email_html returns the original HTML to adapt. Needs Pro.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"appId": {
"type": "array",
"items": {
"type": "string"
},
"description": "Limit to these brands"
},
"limit": {
"type": "integer",
"default": 8,
"maximum": 24,
"minimum": 1
},
"query": {
"type": "string",
"default": "",
"description": "Free text, e.g. 'welcome email with a big hero image'"
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 200,
"minimum": 0,
"description": "Skip this many results (pagination)"
},
"flowIntents": {
"type": "array",
"items": {
"enum": [
"login",
"signup",
"onboarding",
"checkout",
"payment",
"search",
"profile",
"settings",
"navigation",
"dashboard",
"paywall",
"teams",
"account",
"notification",
"support"
],
"type": "string"
}
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_email_html — Get email HTML
The original HTML of one email from search_emails (tables, font fallbacks, dark mode included). Adapt it to the user's brand instead of writing email HTML from scratch. Pro, or this week's free flows.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"emailId"
],
"properties": {
"emailId": {
"type": "string",
"description": "emailId from search_emails"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_apps — Search apps
Find apps in the catalog by name, website or theme ('nubank', 'linear.app', 'meditation').
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 12,
"maximum": 48,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"platform": {
"type": "array",
"items": {
"enum": [
"ios",
"android",
"web",
"email",
"game",
"reference",
"store",
"ad"
],
"type": "string"
},
"description": "ios, android, web (desktop sites), email (brand email galleries), game (game UI: menus, HUD, inventory), reference (curated design references like bento grids), store (app store listing carousels) or ad (ad creatives). email, game, store and ad need Pro."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_app — Get app
Metadata for one app in the catalog. Accepts an appId or a slug like 'spotify'. get_app_flows lists its flows.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"appId"
],
"properties": {
"appId": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_app_flows — Get app flows
The flows of one app (onboarding, checkout, settings…) in order, with capture date. Accepts an appId or slug. Big apps have hundreds of flows: page with offset. Then get_flow for the steps of one.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"appId"
],
"properties": {
"appId": {
"type": "string"
},
"limit": {
"type": "integer",
"default": 40,
"maximum": 100,
"minimum": 1
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 200,
"minimum": 0,
"description": "Skip this many results (pagination)"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}similar_apps — Find similar apps
Apps like this one, ranked from the app's own flow themes. Accepts an appId or slug.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"appId"
],
"properties": {
"appId": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_flow — Get flow
One flow with every step in order. Compact by default: each step has screenDocId (for get_screen), pageType, patterns, components and keyTexts. include 'elements' adds OCR/hotspot boxes per step (large: tens of thousands of tokens for a long flow); 'connections' adds step links.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"flowId"
],
"properties": {
"flowId": {
"type": "string"
},
"include": {
"type": "array",
"items": {
"enum": [
"elements",
"connections"
],
"type": "string"
},
"default": []
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_flow_history — Get flow history
Earlier captures of the same flow (how it changed over time): capture date, screen count and up to 3 preview images each.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"flowId"
],
"properties": {
"flowId": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}similar_screens — Find similar screens
Screens that look like a given screen. Visual, not keyword — no quota. includeImages returns the top matches as images (max 4).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"screenDocId"
],
"properties": {
"limit": {
"type": "integer",
"default": 12,
"maximum": 48,
"minimum": 1
},
"screenDocId": {
"type": "string"
},
"includeImages": {
"type": "boolean",
"default": false
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_categories — List categories
The catalog's category rail for a platform, with the key list_apps filters by. Emails, games, store listings and ads have their own rails.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"platform": {
"enum": [
"ios",
"android",
"web",
"email",
"game",
"reference",
"store",
"ad"
],
"type": "string",
"description": "ios, android, web (desktop sites), email (brand email galleries), game (game UI: menus, HUD, inventory), reference (curated design references like bento grids), store (app store listing carousels) or ad (ad creatives). email, game, store and ad need Pro."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_apps — List apps
Apps in the catalog, optionally filtered by category key (from list_categories) or platform. Platform `email` lists brands with email galleries.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 24,
"maximum": 48,
"minimum": 1
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 200,
"minimum": 0,
"description": "Skip this many results (pagination)"
},
"category": {
"type": "string"
},
"platform": {
"enum": [
"ios",
"android",
"web",
"email",
"game",
"reference",
"store",
"ad"
],
"type": "string",
"description": "ios, android, web (desktop sites), email (brand email galleries), game (game UI: menus, HUD, inventory), reference (curated design references like bento grids), store (app store listing carousels) or ad (ad creatives). email, game, store and ad need Pro."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_projects — List projects
The caller's projects, newest first.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_project — Get project
One project with its screens, positions and connections.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
4 advertised
implement_screen
Build one catalog screen in your stack, from its image and structure.
- screenDocId
- Screen to implement (from search_screens or get_flow) (required)
- stack
- e.g. 'react + tailwind', 'react native', 'swiftui' (required)
pick_pattern
Choose a real reference for a UI decision instead of inventing one.
- brief
- What the screen must do, e.g. 'annual paywall for a fitness app' (required)
- platform
- ios, android or web
review_my_screen
Compare a screen of your app with real apps and list concrete differences.
- target
- A project id, a file/route of the screen, or 'capture' to take a screenshot (required)
audit_onboarding
Review an onboarding flow against real references in the catalog.
- projectId
- Project to audit (required)
Resources
0 advertised
Flow — Flow
refcat://flow/{id}Screen — Screen
refcat://screen/{id}Screen image — Screen image
refcat://screen/{id}/imagePublic project — Public project
refcat://project/{slug}30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 2900 ms
- 95th percentile latency
- 2900 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 2900 ms · metadata changed · 18 tool(s), 0 resource(s), 4 resource template(s), 4 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http refcat-mcp https://mcp.refcat.app/mcpCodex
codex mcp add refcat-mcp --url https://mcp.refcat.app/mcpCursor
{
"mcpServers": {
"refcat-mcp": {
"url": "https://mcp.refcat.app/mcp"
}
}
}Cline
{
"mcpServers": {
"refcat-mcp": {
"type": "streamableHttp",
"url": "https://mcp.refcat.app/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"refcat-mcp": {
"type": "http",
"url": "https://mcp.refcat.app/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http refcat-mcp https://mcp.refcat.app/mcpClaude Desktop
{
"mcpServers": {
"refcat-mcp": {
"url": "https://mcp.refcat.app/mcp"
}
}
}Windsurf
{
"mcpServers": {
"refcat-mcp": {
"serverUrl": "https://mcp.refcat.app/mcp"
}
}
}Let your agent find its tools
Find servers like Refcat MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other design servers
Do you run Refcat MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.