Koskamo

Inspo MCP

An MCP server providing a searchable archive of 2,320 real production websites with traced palettes, fonts, tech detection, and fold-by-fold autopsies. It exposes tools to find similar designs, extract design systems, and retrieve copy-pasteable JSX components for coding agents.

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.

Inspo MCP logo, by NutlopeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by Nutlope
MCP endpoint (Streamable HTTP)
https://inspomcp.dev/api/mcp
Vendor documentation

What its tools do

15 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

15 of 15 have a description · 15 of 15 declare behavior hints · 8 of 13 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Find similar websites based on semantic search
  • Extract design systems including palettes and type ramps
  • Retrieve copy-pasteable JSX components
  • Analyze page structure via fold-by-fold autopsy

Source and maintenance

Community listingRegistry 0.1.16
Maintenance checked

Protocol and capabilities

Server
inspo hosted-022f809
MCP protocol negotiated in check
2025-11-25
Tools
15 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Inspo is an archive of real production websites - screenshots, palettes, fonts and page structures - for visual reference before you write UI. CALL IT WHEN: designing a new page, screen or section; redesigning an existing one; the user asks what something should look like, or asks for references; the brief names an aesthetic direction (editorial, brutalist, dark SaaS, agency portfolio). DO NOT CALL IT WHEN: the project already has a design system, tokens or a component library - follow those instead; the change follows a pattern already established in the codebase; the work is copy, logic, tests or infrastructure; the user has already specified the design. If the project's own conventions and Inspo disagree, the project wins. Start with `recommend` for a brief, `search_screens` to browse; `get_filters` lists every accepted filter value. These are real shipped sites and plenty of them break rules a strict linter would flag: take their composition, not their compliance. The composition rules for whatever you build travel back with the results. BUDGET: one `recommend`, one or two `search_screens`, then `get_screen` on the three to five references you keep is a complete study; results are re-read on every later turn, so a fourth search costs more than it finds. List rows carry the fold autopsy on the top three only; ask for detail:"full" only if you will read all of them. `find_reference_components` is an index; fetch one source with `get_reference_jsx`.

Tools

15 advertised

search_screens
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the archive of real website screenshots. Returns screens with palette, fonts, components and image URLs.

search_screens input schema
{
  "type": "object",
  "properties": {
    "mode": {
      "enum": [
        "light",
        "dark"
      ],
      "type": "string",
      "description": "light or dark"
    },
    "vibe": {
      "enum": [
        "calm",
        "loud",
        "playful",
        "serious",
        "luxe",
        "raw",
        "soft",
        "technical",
        "warm",
        "cold"
      ],
      "type": "string",
      "description": "Mood / vibe - 'calm', 'loud', 'luxe', 'technical', 'soft', etc."
    },
    "color": {
      "enum": [
        "warm",
        "cool",
        "monochrome",
        "neon",
        "earthy",
        "pastel",
        "saturated",
        "muted",
        "high-contrast"
      ],
      "type": "string",
      "description": "Color word - 'warm', 'cool', 'monochrome', 'neon', 'earthy'"
    },
    "limit": {
      "type": "integer",
      "default": 6,
      "maximum": 20,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "default": "",
      "description": "Natural-language description of what you're looking for. e.g. 'minimalist editorial agency portfolio'"
    },
    "style": {
      "enum": [
        "minimalism",
        "editorial",
        "brutalism",
        "glassmorphism",
        "swiss",
        "maximalism",
        "playful",
        "dark-mode",
        "monochrome",
        "vintage",
        "futurist"
      ],
      "type": "string",
      "description": "Filter to one visual style (e.g. 'minimalism', 'editorial')"
    },
    "detail": {
      "enum": [
        "concise",
        "standard",
        "full"
      ],
      "type": "string",
      "description": "'standard' (default): northstar, palette, fonts, axes, macro and tags per row, plus the fold-by-fold autopsy on the top 3. 'full': the autopsy on every row (~300 tokens each; only if you will read them all). 'concise': northstar, palette, fonts. Text profile defaults to concise."
    },
    "device": {
      "enum": [
        "desktop",
        "mobile"
      ],
      "type": "string",
      "description": "'mobile' restricts to sites with a 375px capture pair and inlines the mobile thumbnail. Default: desktop."
    },
    "industry": {
      "enum": [
        "agency",
        "ai",
        "architecture",
        "automotive",
        "consumer-tech",
        "creator",
        "crypto",
        "culture",
        "developer-tools",
        "ecommerce",
        "education",
        "fashion",
        "fintech",
        "food-beverage",
        "furniture",
        "gaming",
        "health",
        "media",
        "music",
        "non-profit",
        "portfolio",
        "saas",
        "travel",
        "type-foundry"
      ],
      "type": "string",
      "description": "Filter to one industry (e.g. 'saas', 'fintech', 'portfolio')"
    },
    "pageType": {
      "enum": [
        "landing",
        "pricing",
        "features",
        "auth",
        "about",
        "blog",
        "changelog",
        "docs",
        "other"
      ],
      "type": "string",
      "description": "Filter to a page kind: 'landing' (default homepages), 'pricing', 'features', 'auth', 'about', 'blog', 'changelog', 'docs', 'other'"
    },
    "accentHue": {
      "enum": [
        "warm",
        "cool",
        "neutral",
        "chromatic-other"
      ],
      "type": "string",
      "description": "Accent temperature: 'warm' (10-60°), 'cool' (200-300°), 'neutral' (unsaturated), 'chromatic-other' (greens, magentas, everything else)."
    },
    "maxTokens": {
      "type": "integer",
      "maximum": 200000,
      "minimum": 300,
      "description": "Approximate token ceiling for this response. Trims lower-ranked results and thumbnails; the top result and all URLs survive."
    },
    "paperBand": {
      "enum": [
        "dark",
        "mid",
        "light"
      ],
      "type": "string",
      "description": "Surface lightness, measured from the capture: 'dark' (<30% L), 'mid' (30-85%), 'light' (>85%). More reliable than `mode`, which is tagged and disagrees with the measurement on ~15% of rows."
    },
    "displayClass": {
      "enum": [
        "grotesk-sans",
        "geometric-sans",
        "roman-serif",
        "italic-serif",
        "slab-serif",
        "mono",
        "display-condensed-bold",
        "display-heavy",
        "system-native",
        "handwritten"
      ],
      "type": "string",
      "description": "Construction of the display face: 'grotesk-sans', 'geometric-sans', 'roman-serif', 'mono', 'display-condensed-bold', etc."
    },
    "macrostructure": {
      "enum": [
        "bento-grid",
        "long-document",
        "marquee-hero",
        "stat-led",
        "conversational-faq",
        "manifesto",
        "photographic",
        "specimen",
        "catalogue",
        "letter",
        "index-first",
        "narrative-workflow",
        "split-studio",
        "feature-stack",
        "type-specimen",
        "portfolio-grid",
        "map-diagram",
        "ecosystem-index",
        "component-playground"
      ],
      "type": "string",
      "description": "Filter to a macrostructure (e.g. 'bento-grid')"
    }
  }
}
search_screens annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_screen
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetch the full record for one screen by slug - every viewport variant, palette, fonts, tech stack, designer credit.

get_screen input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Screen slug, e.g. 'atelier-mira'"
    }
  }
}
get_screen annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_design_system
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

The full DESIGN.md for one screen - real fonts, frequency-ranked palette, CSS variables, detected tech, colour roles, type ramp. Thin captured tokens are supplemented by a live fetch of the source; `live=false` skips that.

get_design_system input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "live": {
      "type": "boolean",
      "default": true,
      "description": "If true (default), supplement thin captured tokens by fetching the source URL via study(). Set false to skip the network round-trip."
    },
    "slug": {
      "type": "string",
      "description": "Screen slug, e.g. 'linear-app'. Use search_screens or find_similar first to discover slugs."
    }
  }
}
get_design_system annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
find_similar
Advertised by the server during the last successful anonymous check.
Advertised read-only

A screen's nearest design neighbours - ranked by design-similarity embeddings where available, else by macrostructure / industry / style overlap. One result per site.

find_similar input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "default": 8,
      "maximum": 20,
      "minimum": 1
    },
    "detail": {
      "enum": [
        "concise",
        "standard",
        "full"
      ],
      "type": "string",
      "description": "'standard' (default): northstar, palette, fonts, axes, macro and tags per row, plus the fold-by-fold autopsy on the top 3. 'full': the autopsy on every row (~300 tokens each; only if you will read them all). 'concise': northstar, palette, fonts. Text profile defaults to concise."
    },
    "sameSite": {
      "type": "boolean",
      "default": false,
      "description": "Include other pages of the same site (default false: neighbours are other sites)."
    },
    "maxTokens": {
      "type": "integer",
      "maximum": 200000,
      "minimum": 300,
      "description": "Approximate token ceiling for this response. Trims lower-ranked results and thumbnails; the top result and all URLs survive."
    }
  }
}
find_similar annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare
Advertised by the server during the last successful anonymous check.
Advertised read-only

Compare 2-4 captured sites across palette, typefaces, macrostructure, mode, style tags, type/spacing/radius scales and container width. Returns per-site breakdowns plus what they share - triangulates a house style from a few references.

compare input schema
{
  "type": "object",
  "required": [
    "slugs"
  ],
  "properties": {
    "slugs": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 4,
      "minItems": 2,
      "description": "2-4 screen slugs to compare, e.g. ['linear-app','stripe-com','vercel-com']. Discover slugs with search_screens / find_similar."
    }
  }
}
compare annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_by_color
Advertised by the server during the last successful anonymous check.
Advertised read-only

Real sites whose extracted palette sits near a hex colour (OKLAB distance, so 'close' means the same colour family, not just the same hue). Use when a brief names a brand colour.

find_by_color input schema
{
  "type": "object",
  "required": [
    "hex"
  ],
  "properties": {
    "hex": {
      "type": "string",
      "description": "Target colour as a hex string ('#c7402f', 'c7402f', '#fff'). Case-insensitive. 3- or 6-digit."
    },
    "limit": {
      "type": "integer",
      "default": 12,
      "maximum": 40,
      "minimum": 1
    },
    "detail": {
      "enum": [
        "concise",
        "standard",
        "full"
      ],
      "type": "string",
      "description": "'standard' (default): northstar, palette, fonts, axes, macro and tags per row, plus the fold-by-fold autopsy on the top 3. 'full': the autopsy on every row (~300 tokens each; only if you will read them all). 'concise': northstar, palette, fonts. Text profile defaults to concise."
    },
    "maxTokens": {
      "type": "integer",
      "maximum": 200000,
      "minimum": 300,
      "description": "Approximate token ceiling for this response. Trims lower-ranked results and thumbnails; the top result and all URLs survive."
    },
    "tolerance": {
      "type": "number",
      "default": 0.15,
      "maximum": 0.5,
      "minimum": 0.02,
      "description": "Max OKLAB distance to count as a match. Defaults to 0.15 ('same family'). 0.05 ≈ 'near-identical', 0.30 ≈ 'in the same hue zip code'."
    }
  }
}
find_by_color annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_examples_for_macrostructure
Advertised by the server during the last successful anonymous check.
Advertised read-only

Real sites exemplifying one of the 19 named macrostructures. Call it at the macrostructure-pick step. Accepts slugs ('bento-grid') or display names ('Bento Grid').

find_examples_for_macrostructure input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Macrostructure name. e.g. 'bento-grid', 'Bento Grid', 'specimen', 'Marquee Hero'."
    },
    "limit": {
      "type": "integer",
      "default": 4,
      "maximum": 20,
      "minimum": 1
    },
    "detail": {
      "enum": [
        "concise",
        "standard",
        "full"
      ],
      "type": "string",
      "description": "'standard' (default): northstar, palette, fonts, axes, macro and tags per row, plus the fold-by-fold autopsy on the top 3. 'full': the autopsy on every row (~300 tokens each; only if you will read them all). 'concise': northstar, palette, fonts. Text profile defaults to concise."
    },
    "device": {
      "enum": [
        "desktop",
        "mobile"
      ],
      "type": "string",
      "description": "'mobile' restricts to sites with a 375px capture pair and inlines the mobile thumbnail. Default: desktop."
    },
    "maxTokens": {
      "type": "integer",
      "maximum": 200000,
      "minimum": 300,
      "description": "Approximate token ceiling for this response. Trims lower-ranked results and thumbnails; the top result and all URLs survive."
    }
  }
}
find_examples_for_macrostructure annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_collections
Advertised by the server during the last successful anonymous check.
Advertised read-only

List every editor-curated issue. Use this for thematic browsing - e.g. all 'Editorial Layouts' or 'Dark Product Pages'.

list_collections input schema
{
  "type": "object",
  "properties": {}
}
list_collections annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_filters
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every value the filters accept: styles, industries, macrostructures, modes, vibes, colors, page types, component types. Zero input. Call it when unsure - an out-of-vocabulary value errors.

get_filters input schema
{
  "type": "object",
  "properties": {}
}
get_filters annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_site_pages
Advertised by the server during the last successful anonymous check.
Advertised read-only

A site's captured pages as an ordered flow (landing → pricing → features → ...) with titles, northstars and thumbnails - how a real product sequences its pages. No arguments returns the directory of flow-capable sites. Accepts a site or screen slug.

get_site_pages input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 25,
      "maximum": 50,
      "minimum": 1,
      "description": "Directory mode only: max sites to list."
    },
    "siteSlug": {
      "type": "string",
      "description": "Site slug (e.g. 'linear-app') or any screen slug from that site. Omit to list flow-capable sites instead."
    },
    "maxTokens": {
      "type": "integer",
      "maximum": 200000,
      "minimum": 300,
      "description": "Approximate token ceiling for this response. Trims lower-ranked results and thumbnails; the top result and all URLs survive."
    }
  }
}
get_site_pages annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_components
Advertised by the server during the last successful anonymous check.
Advertised read-only

Real sites featuring a specific UI component (hero, pricing, features, cta, nav, footer, testimonial, logo-cloud, faq, stat), with a per-element crop where one exists. For copy-pasteable code use get_reference_jsx.

find_components input schema
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "mode": {
      "enum": [
        "light",
        "dark"
      ],
      "type": "string"
    },
    "type": {
      "enum": [
        "hero",
        "pricing",
        "features",
        "cta",
        "nav",
        "footer",
        "testimonial",
        "logo-cloud",
        "faq",
        "stat"
      ],
      "type": "string",
      "description": "Which component type to find"
    },
    "vibe": {
      "enum": [
        "calm",
        "loud",
        "playful",
        "serious",
        "luxe",
        "raw",
        "soft",
        "technical",
        "warm",
        "cold"
      ],
      "type": "string",
      "description": "Mood - 'calm', 'loud', 'luxe', etc."
    },
    "color": {
      "enum": [
        "warm",
        "cool",
        "monochrome",
        "neon",
        "earthy",
        "pastel",
        "saturated",
        "muted",
        "high-contrast"
      ],
      "type": "string",
      "description": "Color word - 'warm', 'cool', 'monochrome', etc."
    },
    "limit": {
      "type": "integer",
      "default": 12,
      "maximum": 40,
      "minimum": 1
    },
    "style": {
      "enum": [
        "minimalism",
        "editorial",
        "brutalism",
        "glassmorphism",
        "swiss",
        "maximalism",
        "playful",
        "dark-mode",
        "monochrome",
        "vintage",
        "futurist"
      ],
      "type": "string",
      "description": "Filter the parent site's style"
    },
    "device": {
      "enum": [
        "desktop",
        "mobile"
      ],
      "type": "string",
      "description": "'mobile' restricts to sites with a 375px capture pair and inlines the mobile thumbnail. Default: desktop."
    },
    "industry": {
      "enum": [
        "agency",
        "ai",
        "architecture",
        "automotive",
        "consumer-tech",
        "creator",
        "crypto",
        "culture",
        "developer-tools",
        "ecommerce",
        "education",
        "fashion",
        "fintech",
        "food-beverage",
        "furniture",
        "gaming",
        "health",
        "media",
        "music",
        "non-profit",
        "portfolio",
        "saas",
        "travel",
        "type-foundry"
      ],
      "type": "string"
    },
    "pageType": {
      "enum": [
        "landing",
        "pricing",
        "features",
        "auth",
        "about",
        "blog",
        "changelog",
        "docs",
        "other"
      ],
      "type": "string",
      "description": "Only components from this page kind (e.g. 'pricing')"
    },
    "maxTokens": {
      "type": "integer",
      "maximum": 200000,
      "minimum": 300,
      "description": "Approximate token ceiling for this response. Trims lower-ranked results and thumbnails; the top result and all URLs survive."
    },
    "macrostructure": {
      "enum": [
        "bento-grid",
        "long-document",
        "marquee-hero",
        "stat-led",
        "conversational-faq",
        "manifesto",
        "photographic",
        "specimen",
        "catalogue",
        "letter",
        "index-first",
        "narrative-workflow",
        "split-studio",
        "feature-stack",
        "type-specimen",
        "portfolio-grid",
        "map-diagram",
        "ecosystem-index",
        "component-playground"
      ],
      "type": "string"
    }
  }
}
find_components annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_collection
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetch one issue by slug, including the editor's blurb and ordered screen list.

get_collection input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Collection slug, e.g. 'editorial-layouts'"
    },
    "detail": {
      "enum": [
        "concise",
        "standard",
        "full"
      ],
      "type": "string",
      "description": "'standard' (default): northstar, palette, fonts, axes, macro and tags per row, plus the fold-by-fold autopsy on the top 3. 'full': the autopsy on every row (~300 tokens each; only if you will read them all). 'concise': northstar, palette, fonts. Text profile defaults to concise."
    },
    "maxTokens": {
      "type": "integer",
      "maximum": 200000,
      "minimum": 300,
      "description": "Approximate token ceiling for this response. Trims lower-ranked results and thumbnails; the top result and all URLs survive."
    }
  }
}
get_collection annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_reference_components
Advertised by the server during the last successful anonymous check.
Advertised read-only

The canonical reference components as an index: id, label, macrostructure and a note for each hero / pricing / cta / nav / footer archetype. Pick one, then get_reference_jsx(type, id) for its source.

find_reference_components input schema
{
  "type": "object",
  "properties": {
    "type": {
      "enum": [
        "hero",
        "pricing",
        "features",
        "cta",
        "nav",
        "footer",
        "testimonial",
        "logo-cloud",
        "faq",
        "stat"
      ],
      "type": "string",
      "description": "Component category (hero, pricing, cta, …). Omit to scan all types."
    },
    "macro": {
      "type": "string",
      "description": "Substring match on the component's macro field - e.g. 'Marquee' matches 'Marquee Hero'."
    }
  }
}
find_reference_components annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
recommend
Advertised by the server during the last successful anonymous check.
Advertised read-only

Orchestrator - start here for a brief. One call returns a macrostructure pick, 5 real exemplars, matching reference components (source via get_reference_jsx), a palette suggestion, and an `evidence` packet measuring the genre's paper band / display class / accent hue. Pass a macrostructure to skip the pick step. No LLM call.

recommend input schema
{
  "type": "object",
  "required": [
    "brief"
  ],
  "properties": {
    "mode": {
      "enum": [
        "light",
        "dark"
      ],
      "type": "string",
      "description": "Optional: 'light' or 'dark'."
    },
    "vibe": {
      "enum": [
        "calm",
        "loud",
        "playful",
        "serious",
        "luxe",
        "raw",
        "soft",
        "technical",
        "warm",
        "cold"
      ],
      "type": "string",
      "description": "Optional vibe filter."
    },
    "brief": {
      "type": "string",
      "minLength": 2,
      "description": "The user's design brief in plain English. E.g. 'calm meditation app', 'dark dev-tool that helps teams ship faster'."
    },
    "color": {
      "enum": [
        "warm",
        "cool",
        "monochrome",
        "neon",
        "earthy",
        "pastel",
        "saturated",
        "muted",
        "high-contrast"
      ],
      "type": "string",
      "description": "Optional colour word."
    },
    "detail": {
      "enum": [
        "concise",
        "standard",
        "full"
      ],
      "type": "string",
      "description": "'standard' (default): northstar, palette, fonts, axes, macro and tags per row, plus the fold-by-fold autopsy on the top 3. 'full': the autopsy on every row (~300 tokens each; only if you will read them all). 'concise': northstar, palette, fonts. Text profile defaults to concise."
    },
    "device": {
      "enum": [
        "desktop",
        "mobile"
      ],
      "type": "string",
      "description": "'mobile' restricts to sites with a 375px capture pair and inlines the mobile thumbnail. Default: desktop."
    },
    "pageType": {
      "enum": [
        "landing",
        "pricing",
        "features",
        "auth",
        "about",
        "blog",
        "changelog",
        "docs",
        "other"
      ],
      "type": "string",
      "description": "Optional: 'landing', 'pricing', 'features', etc."
    },
    "maxTokens": {
      "type": "integer",
      "maximum": 200000,
      "minimum": 300,
      "description": "Approximate token ceiling for this response. Trims lower-ranked results and thumbnails; the top result and all URLs survive."
    },
    "macrostructure": {
      "enum": [
        "bento-grid",
        "long-document",
        "marquee-hero",
        "stat-led",
        "conversational-faq",
        "manifesto",
        "photographic",
        "specimen",
        "catalogue",
        "letter",
        "index-first",
        "narrative-workflow",
        "split-studio",
        "feature-stack",
        "type-specimen",
        "portfolio-grid",
        "map-diagram",
        "ecosystem-index",
        "component-playground"
      ],
      "type": "string",
      "description": "Optional: a macrostructure already picked. Skips the pick step."
    }
  }
}
recommend annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_reference_jsx
Advertised by the server during the last successful anonymous check.
Advertised read-only

The full canonical JSX source for one reference component, including the header stamp naming its macrostructure / theme / states. Copy-pasteable; tweak tokens to the target brand.

get_reference_jsx input schema
{
  "type": "object",
  "required": [
    "type",
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Reference id within that type (e.g. 'marquee', 'three-card')."
    },
    "type": {
      "enum": [
        "hero",
        "pricing",
        "features",
        "cta",
        "nav",
        "footer",
        "testimonial",
        "logo-cloud",
        "faq",
        "stat"
      ],
      "type": "string",
      "description": "Component category"
    }
  }
}
get_reference_jsx annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

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
500 ms
95th percentile latency
500 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 500 ms · metadata changed · 15 tool(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 inspo-mcp-inspomcp https://inspomcp.dev/api/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 inspo-mcp-inspomcp --url https://inspomcp.dev/api/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start inspo-mcp-inspomcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "inspo-mcp-inspomcp": {
      "type": "http",
      "url": "https://inspomcp.dev/api/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 inspo-mcp-inspomcp https://inspomcp.dev/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://inspomcp.dev/api/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": {
    "inspo-mcp-inspomcp": {
      "serverUrl": "https://inspomcp.dev/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Inspo MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.