{"ok":true,"site":{"host":"ramp-webmcp.vercel.app","url":"https://ramp-webmcp.vercel.app/","type":"live","desc":"RAMP — collaborative design-token mixer. Human and agent share one live studio via WebMCP.","tools":[{"name":"get_palette","kind":"answer","impl":"imperative","description":"Read the current RAMP design-token palette. Returns hex and oklch for every token (bg, surface, text, muted, accent, accent-text, border, danger, accent-100..accent-900), which tokens the human has locked, WCAG contrast ratios for text/bg, accent-text/accent, muted/bg, and any AA failures. Call this before proposing color changes.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_token","kind":"act","impl":"imperative","description":"Set one unlocked design token to a hex (#rrggbb or #rgb) or oklch(L C H) color. Valid tokens: bg, surface, text, muted, accent, accent-text, border, danger, accent-100 through accent-900. Fails clearly if the token is locked by the human — do not retry a locked token; ask the human to unlock it. Arbitrary CSS is rejected. Returns the new value and any contrast failures.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"token":{"type":"string","description":"Token name, e.g. accent, text, accent-500"},"value":{"type":"string","description":"Hex or oklch, e.g. \"#3ee0c2\" or \"oklch(0.78 0.12 175)\""}},"required":["token","value"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"generate_ramp","kind":"act","impl":"imperative","description":"Rebuild the 9-stop accent ramp (accent-100 light through accent-900 dark) in OKLCH. Pass a seed color as from; optionally pass to to interpolate between two colors. Locked ramp stops are skipped and listed in skipped_locked. Also updates the accent token to accent-400 if accent is unlocked. Use after get_palette.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"from":{"type":"string","description":"Hex or oklch seed (or light end if to is set)"},"to":{"type":"string","description":"Optional hex or oklch dark end"},"stops":{"type":"integer","description":"Optional; ramp is always 9 named stops (100-900)","minimum":3,"maximum":12}},"required":["from"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"check_contrast","kind":"answer","impl":"imperative","description":"Compute WCAG 2 contrast ratio for a pair of tokens or raw hex/oklch colors. Returns ratio plus AA/AAA pass/fail for normal text (4.5 / 7) and large text (3 / 4.5). Example: foreground=text, background=bg.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"foreground":{"type":"string","description":"Token name or hex/oklch color"},"background":{"type":"string","description":"Token name or hex/oklch color"}},"required":["foreground","background"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"apply_mood","kind":"act","impl":"imperative","description":"Apply a named mood preset to unlocked tokens. Moods: paper (warm off-white, terracotta), midnight (deep navy, teal — default), terminal (phosphor green on black), solar (sunlit cream and amber). Locked tokens are skipped. Returns skipped_locked and any contrast failures.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"mood":{"type":"string","enum":["paper","midnight","terminal","solar"],"description":"Preset name"}},"required":["mood"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"lock_token","kind":"act","impl":"imperative","description":"Lock a token so set_token, generate_ramp, and apply_mood will refuse to change it. The human can also lock from the UI. Use when the human wants a color held.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"token":{"type":"string","description":"Token name to lock"}},"required":["token"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"unlock_token","kind":"act","impl":"imperative","description":"Unlock a token so it can be changed again by the human or by agent tools.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"token":{"type":"string","description":"Token name to unlock"}},"required":["token"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"annotate_preview","kind":"act","impl":"imperative","description":"Drop a visible pin on a live UI-kit region so the human can see your note. Regions: nav, buttons, form, card, table, stat, alert. Replaces any existing pin on that region. Keep notes short and specific (max 280 chars).","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"region":{"type":"string","enum":["nav","buttons","form","card","table","stat","alert"]},"note":{"type":"string","description":"Note the human will see"}},"required":["region","note"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_tokens","kind":"act","impl":"imperative","description":"Export the current token set as CSS custom properties or JSON. Returns the file contents AND populates the export panel in the studio so the human can copy them.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"format":{"type":"string","enum":["css","json"]}},"required":["format"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"undo_last","kind":"act","impl":"imperative","description":"Revert the last token change (set_token, generate_ramp, or apply_mood). Locks are preserved. Returns the restored palette and any contrast failures. No-op with an error if history is empty.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Developer Tools","favicon":"/favicons/ramp-webmcp.vercel.app.svg","apiSurface":"spec","toolCount":10}}