Kroma MCP
Kroma MCP is a stateless, internet-connected server that turns AI assistants into real-time design scouts for UI/UX inspiration, component discovery, web effects, and blueprint generation — powered by live Google Search via the Serper API.
Find UI/UX Inspiration (
kroma_find_ui_inspiration): Search live design galleries (Mobbin, Awwwards, Dribbble, etc.) via Google Images for visual inspiration, returning image URLs and source pages.Find Component Code (
kroma_find_component_code): Discover copy-paste React, Vue, or Svelte components from libraries like shadcn/ui, Magic UI, Aceternity, with optional framework and keyword filtering.Find Effects & Shaders (
kroma_find_effects_and_shaders): Locate modern web micro-effects: GLSL shaders, Framer Motion variants, GSAP timelines, Three.js scenes, and more from sources like CodePen, Shadertoy, and Codrops.Scrape Site Design (
kroma_scrape_site_design): Extract design metadata from any URL: typography, fonts, color palette hints, and CSS/framework fingerprints (Tailwind, Radix, etc.).Search Design Web (
kroma_search_design_web): Perform live web searches tuned for design and front-end topics, optionally scoped to specific domains.List Curated Sources (
kroma_list_sources): Browse the curated registries of design galleries, component libraries, and effect sources — runs offline with no API key.Generate Engineering Blueprint (
kroma_generate_blueprint): Create a full Markdown blueprint for a project, covering architecture, stack, data model, milestones, testing, and optional live design/component references.
Searches Awwwards for visual UI/UX design inspiration, fetching live examples of award-winning website designs.
Searches Behance for visual UI/UX design inspiration, fetching live examples of design projects and portfolios.
Searches CodePen for code playground examples of web micro-effects, shaders, and animations.
Searches daisyUI for copy-paste UI components, enabling discovery of ready-to-use Tailwind CSS components.
Searches Dribbble for visual UI/UX design inspiration, fetching live examples of design shots and concepts.
Searches GitHub for component code, GLSL/canvas shaders, and source code repositories for web effects.
Searches Headless UI for accessible, unstyled UI component primitives, enabling discovery of copy-paste components.
Searches shadcn/ui for copy-paste React components, enabling discovery of modern UI components and design patterns.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Kroma MCPFind a glassmorphic pricing card component in React"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Kroma MCP — @kromamcp/server
A completely stateless, internet-connected Model Context Protocol server for UI/UX design inspiration, live component discovery, and modern web micro-effects.
Kroma turns your AI assistant into a design scout. Ask for "a glassmorphic pricing card in React", "a grainy mesh gradient hero as CSS", "hand-drawn rocket icons", or "OG image inspiration for a dev tool" and Kroma resolves it live from the best design galleries, component libraries, gradient generators, icon sets, and code playgrounds on the internet — no local database, no cache, no stored files.
Every request is resolved in real time via the Serper API (Google Search / Images / Scrape).
✨ Highlights
Completely stateless — zero databases, zero local caches, zero file storage. Every answer is fetched fresh.
Real-time internet resolution — live queries against curated design galleries, component docs, and code repos.
Multi-tenant & zero-config — connect and go. Keys resolve per-request from the environment or a tool argument.
Two transports —
stdiofor desktop/IDE hosts, and Streamable HTTP + SSE for remote hosting.10 specialized tools — UI inspiration, graphic & brand inspiration, components, effects/shaders, backgrounds & gradients, icons & logos, site scraping, open web search, source discovery, and engineering-blueprint generation.
Smart source routing — every curated source is tagged, so asking for a mesh gradient as CSS or an OG image hits only the handful of sources that actually serve it.
Related MCP server: go_serper_mcp_server
🔑 Prerequisites
Node.js ≥ 18
A Serper API key — grab a free one at serper.dev (2,500 free credits to start).
Set it as an environment variable:
export SERPER_API_KEY="your_serper_key_here"You can also pass a per-call
api_keyargument to any tool — it takes precedence over the env var. This is what makes Kroma multi-tenant: different callers can bring their own key.
🚀 Quickstart (npx)
No install required — run the latest published version directly:
SERPER_API_KEY=your_key npx -y @kromamcp/serverThat starts the server on stdio, ready for any MCP host.
🧰 The Tools
Tool | What it does |
| Searches live galleries (Mobbin, Godly, Awwwards, Dribbble, Lapa Ninja, Minimal Gallery, Land-book, Saaspo, Inspora, Behance…) via Google Images for visual UI/UX inspiration. |
| Mood-boards the artifacts that aren't a web page — social posts, pitch decks, OG images, logos, footers, branding, print. |
| Searches component libraries & docs (shadcn/ui, Magic UI, Aceternity, Uiverse, Tailwind, Radix, Headless UI, Flowbite, daisyUI, beUI Pro, GitHub…) for copy-paste React / Vue / Svelte components. |
| Discovers GLSL/canvas shaders, Framer Motion variants, GSAP scroll timelines, glassmorphism, glowing borders, Three.js and more from CodePen, Shadertoy, Codrops, GitHub, and blogs. |
| Finds gradients, grain/noise textures, mesh & animated backgrounds, patterns, and color palettes from asset libraries and live generators — Grainient, Backgrounds Supply, Pryzm, ColorFlow, zoxilsi studio, Gradientool, CSS Gradient, Tabbied, Ramps, beUI Pro. Returns results plus the matched generators with direct URLs. |
| Searches icon sets and brand-mark libraries — Koboyo (133,000+ free hand-drawn SVGs), Logoinspo (1,200+ curated logos), SVGL, Simple Icons, Lucide, Phosphor, Tabler, Heroicons, Hugeicons, Iconify, Streamline, Noun Project. |
| Scrapes any live URL and extracts layout, typography outline, fonts, color palette, and CSS/framework fingerprints (Tailwind, Radix, Framer, Next.js…). |
| General-purpose design/front-end web search, optionally scoped to specific domains. For anything the specialized tools don't cover. |
| Lists all six curated source registries so the agent can discover exact |
| Generates a full engineering blueprint ( |
Example tool arguments
// kroma_find_ui_inspiration
{ "query": "fintech dashboard dark mode", "sources": ["Mobbin", "Awwwards"], "num": 12 }
// kroma_find_component_code
{ "component": "command palette", "framework": "react", "keywords": "tailwind accessible" }
// kroma_find_effects_and_shaders
{ "effect": "animated glowing border", "category": "glow", "framework": "react" }
// kroma_find_graphic_inspiration
{ "query": "developer tool launch announcement", "asset": "social-post", "num": 12 }
{ "query": "seed round pitch deck", "asset": "deck" }
{ "query": "dark OG image with product screenshot", "asset": "og-image" }
// kroma_find_backgrounds_and_gradients
{ "look": "dark purple hero backdrop", "style": "mesh", "format": "css" }
{ "look": "warm grainy noise texture", "style": "grainy", "include_previews": true }
{ "look": "accessible brand color ramp", "style": "palette", "format": "code" }
// kroma_find_icons_and_logos
{ "query": "rocket deploy", "kind": "icon", "style": "hand-drawn", "free_only": true }
{ "query": "minimal fintech symbol", "kind": "logo" }
// kroma_scrape_site_design
{ "url": "https://linear.app", "include_markdown": true }
// kroma_search_design_web
{ "query": "design tokens naming conventions", "sites": ["web.dev", "smashingmagazine.com"] }
// kroma_generate_blueprint
{ "project": "Fintech onboarding dashboard", "kind": "dashboard", "stack": ["Next.js", "TypeScript", "Postgres"], "goals": ["Reduce drop-off", "SOC2-ready"], "depth": "deep" }Every tool returns both a readable JSON text block and structuredContent. Errors come back as graceful isError results (with an auth / request / unknown kind) instead of crashing the session.
Honest results
Google silently drops the site: operator when the scoped domains have a thin search index — and several of the best galleries (Deck.gallery, OGFolio, Footer.design, Ramps) are recent single-page apps with almost nothing indexed. So the three routing tools tell you exactly what you got:
Field | Meaning |
| Per result: the curated source it actually came from, or |
| How many of the returned results genuinely came from the curated set. |
|
|
| Set only when |
generators / galleries / libraries always carry the matched sources with direct URLs. For a single-page generator like ColorFlow or Pryzm, that URL is the answer — there's no article to find.
🖥️ Client Setup
Claude Desktop
Edit the config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"kroma": {
"command": "npx",
"args": ["-y", "@kromamcp/server"],
"env": {
"SERPER_API_KEY": "your_serper_key_here"
}
}
}
}Restart Claude Desktop. You'll see the Kroma tools appear under the tools menu.
Cursor
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"kroma": {
"command": "npx",
"args": ["-y", "@kromamcp/server"],
"env": { "SERPER_API_KEY": "your_serper_key_here" }
}
}
}Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"kroma": {
"command": "npx",
"args": ["-y", "@kromamcp/server"],
"env": { "SERPER_API_KEY": "your_serper_key_here" }
}
}
}Roo Code
In the Roo Code MCP settings (mcp_settings.json), add:
{
"mcpServers": {
"kroma": {
"command": "npx",
"args": ["-y", "@kromamcp/server"],
"env": { "SERPER_API_KEY": "your_serper_key_here" },
"alwaysAllow": [
"kroma_find_ui_inspiration",
"kroma_find_graphic_inspiration",
"kroma_find_component_code",
"kroma_find_effects_and_shaders",
"kroma_find_backgrounds_and_gradients",
"kroma_find_icons_and_logos",
"kroma_scrape_site_design",
"kroma_search_design_web",
"kroma_list_sources",
"kroma_generate_blueprint"
]
}
}
}🌐 Remote Hosting (HTTP + SSE)
For a shared, always-on deployment, run Kroma over HTTP:
SERPER_API_KEY=your_key npx -y @kromamcp/server --transport http --port 3000
# or: KROMA_TRANSPORT=http PORT=3000 npx -y @kromamcp/serverThis exposes:
Path | Method | Purpose |
| POST / GET / DELETE | Streamable HTTP transport (modern, recommended) |
| GET | Legacy SSE stream (Cursor / Windsurf compatibility) |
| POST | SSE message channel |
| GET | Liveness probe → |
Connecting a client to the SSE endpoint
Hosts that support a URL/SSE endpoint (e.g. Cursor, Windsurf) can point at:
{
"mcpServers": {
"kroma": {
"url": "https://your-host.example.com/sse"
}
}
}Or the Streamable HTTP endpoint:
{
"mcpServers": {
"kroma": {
"url": "https://your-host.example.com/mcp"
}
}
}When self-hosting, provide
SERPER_API_KEYin the server's environment, or have each caller pass anapi_keytool argument for true multi-tenant, bring-your-own-key operation.
⚙️ Configuration
Variable | Default | Description |
| — | Required (unless passing |
|
| Per-request timeout in milliseconds. |
|
|
|
|
| HTTP port (http transport). |
|
| HTTP bind host (http transport). |
CLI flags: --transport <stdio|http>, --http, --port <n>, --host <h>, --help, --version.
🛠️ Local Development
git clone <this-repo>
cd kroma-mcp
npm install
npm run build # compile TypeScript → dist/
npm start # run the compiled server (stdio)
npm run dev # tsc --watch
npm run typecheck # type-check without emittingProject layout
src/
index.ts # entry point + stdio/http transports
services/serper.ts # stateless Serper API gateway (search/images/scrape)
lib/
sources.ts # curated source registries + query builders
response.ts # MCP result helpers + error guard
tools/
find-ui-inspiration.ts
find-graphic-inspiration.ts
find-component-code.ts
find-effects-and-shaders.ts
find-backgrounds-and-gradients.ts
find-icons-and-logos.ts
scrape-site-design.ts
search-design-web.ts
list-sources.ts
generate-blueprint.tsAdding a source
Every source is a CuratedSource in src/lib/sources.ts:
{
name: "Grainient",
domain: "grainient.supply",
note: "1,000+ grainy, smooth, and animated gradients plus AI backgrounds and a shader tool",
tags: ["grainy", "animated", "mesh", "ai", "shader", "image"],
}Drop it into the right registry (INSPIRATION_SOURCES, COMPONENT_SOURCES, EFFECT_SOURCES, GRAPHIC_SOURCES, BACKGROUND_SOURCES, ICON_SOURCES) and it's live — kroma_list_sources reads the arrays directly and the search tools build site: queries from them. name is what callers pass in sources; tags are what the asset / style / format / kind filters match against.
Architecture principles
Stateless by construction. No module holds user data between requests; HTTP sessions live only in-memory for the process lifetime and store no personal data.
Dynamic key resolution.
resolveApiKey(explicit?)prefers an explicitapi_keyargument, thenSERPER_API_KEY. Nothing is persisted.Graceful failure. Network errors, timeouts, and auth failures become typed, readable tool errors — never uncaught throws.
Widening fallbacks. Source filters never return an empty set: an unrecognised name or an over-narrow tag combination widens back to the parent registry, so a bad argument degrades into a broader search instead of zero results.
📄 License
MIT © 2026 Kroma MCP
Available Tools
6 toolskroma_find_component_codeFind Component CodeA
Search live web docs and repos (shadcn/ui, Magic UI, Aceternity, Uiverse, Tailwind, Radix, Headless UI, Flowbite, daisyUI, GitHub, and more) for copy-paste React/Vue/Svelte components. Returns doc pages, source links, and snippets. Use framework to target React/Vue/Svelte and keywords to refine.
| Name | Required | Description | Default |
|---|---|---|---|
| num | No | Number of results to return (1-20, default 10). | |
| api_key | No | Optional Serper API key override. Falls back to SERPER_API_KEY env var. | |
| sources | No | Optional subset of library names (e.g. ['shadcn/ui','Magic UI']). Omit to search all curated component sources. | |
| keywords | No | Extra keywords to refine, e.g. 'tailwind accessible dark mode'. | |
| component | Yes | The component or pattern to find, e.g. 'animated bento grid', 'command palette', 'multi-step form', 'pricing table', 'sidebar navigation'. | |
| framework | No | Target framework filter (default 'react'). Use 'any' to not constrain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It transparently explains the tool performs live searches of web docs and repos (which implies network/read-only behavior) and specifies what it returns. It doesn't discuss rate limits or error behavior, but for a search tool this is sufficient core transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the purpose, source list, return types, and key parameters included. It is front-loaded and every sentence earns its place, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description specifies return categories (doc pages, source links, snippets), lists major sources, and names framework/keywords for refinement. It doesn't mention defaults (React, 10 results), but the schema covers those. Overall it is sufficiently complete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, giving a baseline of 3. The description adds meaning by explicitly explaining the roles of framework and keywords as refining controls, complementing the schema descriptions. This lifts it above baseline without being redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb ('Search') and specific resource ('live web docs and repos') for copy-paste React/Vue/Svelte components, which distinguishes it from sibling tools focused on design inspiration or effects. It also lists return types (doc pages, source links, snippets), fully clarifying what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to use the tool (finding copy-paste component code) and explains how to refine with framework and keywords. It doesn't explicitly mention when not to use it or name sibling alternatives, but the component-code focus implies the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kroma_find_effects_and_shadersFind Effects & ShadersA
Discover modern web micro-effects and motion techniques: GLSL/canvas shaders, Framer Motion variants, GSAP scroll timelines, glassmorphism, glowing borders, Three.js scenes, and more — sourced live from CodePen, Shadertoy, Codrops, GitHub, and technique blogs. Use category and framework to bias results.
| Name | Required | Description | Default |
|---|---|---|---|
| num | No | Number of results to return (1-20, default 10). | |
| effect | Yes | The effect to find, e.g. 'liquid metal shader', 'magnetic button', 'scroll reveal', 'aurora gradient background', 'animated glowing border'. | |
| api_key | No | Optional Serper API key override. Falls back to SERPER_API_KEY env var. | |
| sources | No | Optional subset of source names (e.g. ['CodePen','Shadertoy']). Omit to search all curated effect sources. | |
| category | No | Effect category to bias the search (default 'any'). | |
| framework | No | Optional framework filter, e.g. 'react' for Framer Motion. Default 'any'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It mentions that results are 'sourced live' from various websites, which conveys the web-search behavior. However, it does not disclose details like API key usage, rate limits, or potential failure modes, which would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary action and resource, and includes a compact list of examples and sources. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search/find tool with 6 parameters and no output schema, the description explains the purpose and sources but does not mention what the results look like or that the 'effect' parameter is required. The API key fallback is only in the schema, not the description. It is adequate but has gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explicitly calling out category and framework as biasing parameters and providing concrete effect examples, which helps users formulate the required 'effect' parameter. This goes slightly beyond what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: discovering modern web micro-effects and motion techniques. It lists specific examples (GLSL/canvas shaders, Framer Motion variants, etc.) and sources, distinguishing it from sibling tools like kroma_find_ui_inspiration or kroma_find_component_code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context (finding effects) and suggests using category/framework to bias results, but it does not explicitly contrast with alternatives or state when not to use this tool. Usage is implied rather than directly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kroma_find_ui_inspirationFind UI/UX InspirationA
Search live design galleries (Mobbin, Godly, Awwwards, Dribbble, Lapa Ninja, Minimal Gallery, Land-book, Behance, and more) via Google Images for visual UI/UX inspiration. Returns image URLs, the page each shot lives on, and the gallery it came from. Great for mood-boarding a screen, flow, or aesthetic.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code for geo-targeting, e.g. 'us'. | |
| hl | No | UI language, e.g. 'en'. | |
| num | No | Number of images to return (1-20, default 12). | |
| query | Yes | What to find inspiration for, e.g. 'fintech dashboard dark mode', 'bento grid landing page', 'onboarding flow', 'glassmorphism pricing'. | |
| api_key | No | Optional Serper API key override. Falls back to SERPER_API_KEY env var. | |
| sources | No | Optional subset of gallery names to restrict the search to (e.g. ['Mobbin','Awwwards']). Omit to search all curated galleries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses the core behavior: searching via Google Images, returning image URLs, and page/gallery info. It does not mention limitations like reliance on external APIs, but it is transparent about the mechanism and output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences: the first states the function and resource, the second covers output and use case. It is front-loaded, concise, and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, mechanism, return values, and usage context. Since there is no output schema, it does well to state what it returns. It could add limitations or error behavior, but it is sufficiently complete for a search tool with a well-defined schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema covers all parameters, the description adds value by enumerating specific gallery names (e.g., Mobbin, Awwwards) that map to the `sources` parameter and explains the overall search mechanism ('via Google Images'), enriching the semantics of query, gl, hl, and num.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search live design galleries via Google Images') and specific resources (Mobbin, Godly, Awwwards, etc.), distinguishing it from sibling tools like kroma_scrape_site_design or kroma_search_design_web.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context with 'Great for mood-boarding a screen, flow, or aesthetic,' indicating when to use it. It does not explicitly mention alternatives or exclusions, but the context implies a visual inspiration use case, distinguishing it from code/effects tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kroma_list_sourcesList Curated SourcesA
List the curated source registries Kroma searches — design galleries, component libraries, and effect/shader sources. Use this to discover the exact source names you can pass to the sources argument of the other Kroma tools. Runs offline; no API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Which registry to list (default 'all'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosure. It adds valuable context by stating that it runs offline and requires no API key, which is not obvious from the schema. However, it does not describe the exact structure of the returned registry list, leaving a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action, and every sentence adds value. It avoids redundancy and clearly communicates purpose, usage, and operational traits.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers purpose, usage, and operational context. The absence of an output schema is offset by the clear statement that it returns the curated source registries, though it could be slightly more explicit about the return format. Overall, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully covers the `category` parameter with an enum and description. The description adds extra meaning by mapping the enum values to design galleries, component libraries, and effect/shader sources, and by explaining that the output feeds the `sources` argument of other tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists curated source registries for design galleries, component libraries, and effect/shader sources. It differentiates itself from siblings by explicitly noting it is the way to discover source names for other Kroma tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: to discover exact source names for the `sources` argument of other Kroma tools. It also mentions that it runs offline and requires no API key, covering practical usage constraints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kroma_scrape_site_designScrape Site DesignA
Scrape any live URL and extract design-relevant metadata: page title/description, a heading/typography outline, detected font families, a color-palette hint, and CSS/utility framework fingerprints (Tailwind, Radix, Framer, GSAP, Next.js, etc.). Ideal for reverse-engineering the structure and styling of a site you admire.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The fully-qualified URL to analyze, e.g. 'https://linear.app'. | |
| api_key | No | Optional Serper API key override. Falls back to SERPER_API_KEY env var. | |
| include_raw | No | Include the full raw markdown/text (can be large). Default false — a preview is returned. | |
| include_markdown | No | Include the scraped page content as markdown in the response (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the output metadata types and implies a network scrape, but it does not mention the external Serper API dependency, potential rate limits, or failure modes like blocked sites. The api_key parameter is in the schema but not discussed in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action and a clear list of extracted data. The second sentence adds a concrete use case without any filler. Every clause earns its place, making it concise yet informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a scraping tool with no annotations, the description covers purpose, output content, and a use case. It does not mention return format or operational caveats (like API key requirements or blocked URL handling), but the schema partially fills those gaps. It is adequate for an agent to decide whether to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions, so the baseline is 3. The description does not add additional meaning about include_raw/include_markdown defaults or api_key fallback behavior; it only reinforces the core URL analysis purpose. The schema itself does the heavy lifting here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scrapes any live URL and extracts specific design metadata (title, typography, fonts, colors, framework fingerprints). The verb 'scrape' plus the resource 'live URL' and the explicit output list distinguish it from sibling tools that search or find inspiration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly identifies when to use it: 'Ideal for reverse-engineering the structure and styling of a site you admire.' It provides clear context but does not mention alternatives or when not to use it, so it misses a bit of the full guideline picture.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kroma_search_design_webSearch Design WebA
General-purpose live web search tuned for design and front-end topics. Unlike the specialized tools, this is not locked to curated galleries — use it for design systems, articles, accessibility guidance, tokens, or anything else. Optionally scope to explicit domains with sites.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code for geo-targeting, e.g. 'us'. | |
| hl | No | UI language, e.g. 'en'. | |
| num | No | Number of results to return (1-20, default 10). | |
| tbs | No | Time filter, e.g. 'qdr:y' for the past year. | |
| query | Yes | Any design/front-end web query, e.g. 'design tokens naming conventions'. | |
| sites | No | Optional list of domains to restrict to, e.g. ['smashingmagazine.com','web.dev']. | |
| api_key | No | Optional Serper API key override. Falls back to SERPER_API_KEY env var. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It discloses that this is a live web search and that results can be scoped via `sites`, which is useful. However, it does not mention return format, error behavior, rate limits, or authentication requirements, leaving notable gaps in transparency for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, with the core purpose front-loaded in the first sentence. It efficiently contrasts with specialized tools and highlights the optional `sites` parameter without redundant detail. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's general-purpose nature, 7 parameters, no output schema, and no annotations, the description provides enough context for selection and invocation: what it does, when to use it, and a key parameter. It could be more complete by briefly describing the return structure or limitations, but it is not critically inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 7 parameters. The description mentions `sites` for domain scoping, but this is already in the schema, adding no new semantic value. With full schema coverage, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear specific verb and resource: 'General-purpose live web search tuned for design and front-end topics.' It also differentiates from siblings by stating this is not locked to curated galleries, unlike the specialized tools. This makes the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts with specialized tools and gives concrete use cases: 'use it for design systems, articles, accessibility guidance, tokens, or anything else.' This tells the agent exactly when to choose this general tool over the sibling tools like kroma_find_ui_inspiration or kroma_find_component_code.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct purpose: finding visual inspiration, scraping site metadata, general web search, listing sources, finding components, and finding effects. The overlap between find_ui_inspiration and search_design_web is minimal and clearly differentiated by scope.
All tool names follow the consistent pattern 'kroma_<verb>_<noun>' in snake_case. Verbs are varied but always action-oriented, and the nouns clearly indicate the resource type, making the naming predictable and readable.
With 6 tools, the server is well-scoped for design discovery and analysis. Each tool covers a distinct aspect of the workflow without redundancy, and the count is neither too thin nor overwhelming.
The tool set covers the full lifecycle implied by the domain: finding inspiration, scraping live sites, searching the web, listing available sources, and locating components and effects. There are no obvious missing operations for the server's stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Serper MCP — wraps the Serper Google Search API (serper.dev)
MCP server for Google search results via SERP API
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- AlicenseBqualityDmaintenanceA lightweight, stateless MCP server utilizing Puppeteer for web searches, returning structured JSON results, easily integratable with other MCP-enabled systems.12251MIT
- AlicenseNot gradedqualityDmaintenanceA Go-based MCP server that provides comprehensive access to the Serper Google Search API, including tools for images, news, maps, and scholar results. It also features a dedicated endpoint for scraping webpage content directly.10MIT
- FlicenseNot gradedqualityBmaintenanceAn MCP server that enables AI agents to semantically retrieve premium UI components from Awwwards and adapt them into clean React + Tailwind code.1
- AlicenseNot gradedqualityBmaintenanceMCP server for the MiroMiro design-extraction API. It extracts real design data from live websites—including brand colors, fonts, tokens, SVGs, images, and component code—so AI agents can build from actual values.339MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/thatcreativetayo/kromamcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server