Koskamo

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.

Refcat MCP logo, by RefcatVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Refcat
You need:create an API keyGoogle sign-in
MCP endpoint (Streamable HTTP)
https://mcp.refcat.app/mcp
Vendor documentation

What 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

Vendor evidenceRegistry 1.0.0

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
Server-advertised capabilities
{
  "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.

Refcat is a catalog of real app, web and email screens. Use it for any UI decision instead of designing from memory. Flow: list_facets for real filter values -> search_screens (or search_flows / search_apps / get_app_flows) -> get_screen on the best 1-3 to see the image and its elements -> implement. get_screen returns the screen as an image plus `elements` (OCR text and hotspots with normalized boxes): use elements for hierarchy and order, the image for color, type and spacing. Emails: search_emails, then get_email_html when hasHtml is true, and adapt the HTML. Always cite the source app, flow and capture date. If no reference fits, say so; never invent a screen and present it as a reference. generate_screen and export_design_system spend the user's quota and money: only call them after the user explicitly agrees. Project tools only appear when the API key grants them.

Tools

18 advertised

list_facets — List filter values
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_facets input schema
{
  "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"
        }
      }
    }
  }
}
list_facets annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_screen — Get screen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_screen input schema
{
  "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
    }
  }
}
get_screen annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_screens_by_image — Search screens by image
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_screens_by_image input schema
{
  "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
    }
  }
}
search_screens_by_image annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_screens — Search screens
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_screens input schema
{
  "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
    }
  }
}
search_screens annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_flows — Search flows
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search whole flows (ordered screen sequences) by intent, app or description. Then get_flow for the steps.

search_flows input schema
{
  "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"
      }
    }
  }
}
search_flows annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_emails — Search emails
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_emails input schema
{
  "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"
      }
    }
  }
}
search_emails annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_email_html — Get email HTML
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_email_html input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "emailId"
  ],
  "properties": {
    "emailId": {
      "type": "string",
      "description": "emailId from search_emails"
    }
  }
}
get_email_html annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_apps — Search apps
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find apps in the catalog by name, website or theme ('nubank', 'linear.app', 'meditation').

search_apps input schema
{
  "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."
    }
  }
}
search_apps annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_app — Get app
Advertised by the server during the last successful anonymous check.
Advertised read-only

Metadata for one app in the catalog. Accepts an appId or a slug like 'spotify'. get_app_flows lists its flows.

get_app input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "appId"
  ],
  "properties": {
    "appId": {
      "type": "string"
    }
  }
}
get_app annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_app_flows — Get app flows
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_app_flows input schema
{
  "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)"
    }
  }
}
get_app_flows annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
similar_apps — Find similar apps
Advertised by the server during the last successful anonymous check.
Advertised read-only

Apps like this one, ranked from the app's own flow themes. Accepts an appId or slug.

similar_apps input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "appId"
  ],
  "properties": {
    "appId": {
      "type": "string"
    }
  }
}
similar_apps annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_flow — Get flow
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_flow input schema
{
  "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": []
    }
  }
}
get_flow annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_flow_history — Get flow history
Advertised by the server during the last successful anonymous check.
Advertised read-only

Earlier captures of the same flow (how it changed over time): capture date, screen count and up to 3 preview images each.

get_flow_history input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "flowId"
  ],
  "properties": {
    "flowId": {
      "type": "string"
    }
  }
}
get_flow_history annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
similar_screens — Find similar screens
Advertised by the server during the last successful anonymous check.
Advertised read-only

Screens that look like a given screen. Visual, not keyword — no quota. includeImages returns the top matches as images (max 4).

similar_screens input schema
{
  "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
    }
  }
}
similar_screens annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_categories — List categories
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_categories input schema
{
  "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."
    }
  }
}
list_categories annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_apps — List apps
Advertised by the server during the last successful anonymous check.
Advertised read-only

Apps in the catalog, optionally filtered by category key (from list_categories) or platform. Platform `email` lists brands with email galleries.

list_apps input schema
{
  "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."
    }
  }
}
list_apps annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_projects — List projects
Advertised by the server during the last successful anonymous check.
Advertised read-only

The caller's projects, newest first.

list_projects input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
list_projects annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_project — Get project
Advertised by the server during the last successful anonymous check.
Advertised read-only

One project with its screens, positions and connections.

get_project input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "projectId"
  ],
  "properties": {
    "projectId": {
      "type": "string"
    }
  }
}
get_project annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

4 advertised

implement_screen

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

Review an onboarding flow against real references in the catalog.

projectId
Project to audit (required)

Resources

0 advertised

Flow — Flow

Advertised by the server during the last successful anonymous check.

Flow URI template
refcat://flow/{id}

MIME type: application/json

Screen — Screen

Advertised by the server during the last successful anonymous check.

Screen URI template
refcat://screen/{id}

MIME type: application/json

Screen image — Screen image

Advertised by the server during the last successful anonymous check.

Screen image URI template
refcat://screen/{id}/image

MIME type: image/webp

Public project — Public project

Advertised by the server during the last successful anonymous check.

Public project URI template
refcat://project/{slug}

MIME type: application/json

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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http refcat-mcp https://mcp.refcat.app/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add refcat-mcp --url https://mcp.refcat.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable refcat-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "refcat-mcp": {
      "url": "https://mcp.refcat.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "refcat-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.refcat.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start refcat-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "refcat-mcp": {
      "type": "http",
      "url": "https://mcp.refcat.app/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http refcat-mcp https://mcp.refcat.app/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "refcat-mcp": {
      "url": "https://mcp.refcat.app/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing