Docs

Connect your AI.

It fetches the right spec every time and checks its own work. Free, with a sign-in. No install? Copy a prompt instead.

Connect in four steps

  1. 1

    Pick your assistant

    29 more assistants

  2. 2

    Add Meniscus

    claude mcp add --transport http meniscus https://meniscus.site/mcp
  3. 3

    Sign in

    Run /mcp in Claude Code, pick meniscus, and sign in in the browser. Free, with your e-mail.

  4. 4

    Ask for a screen

    Then ask, and name the tools: “… Use the meniscus tools.” Sign in here to see it connect.

Server URLhttps://meniscus.site/mcp

Every assistant 33

Each one's setup as its own docs describe it. Every one ends the same way: a browser window to sign in. Guides with a rule file and prompts: Liquid glass in Claude Code · Liquid glass in Cursor · Liquid glass in Codex.

Terminal agents

Claude Code

claude mcp add --transport http meniscus https://meniscus.site/mcp

Then run /mcp in Claude Code and choose meniscus to sign in. Add --scope user to have it in every project.

Or install the Meniscus plugin, which adds the server and the liquid-glass skill, then sign in through /mcp the same way:

/plugin marketplace add meniscus-site/meniscus-mcp
/plugin install meniscus@meniscus

Liquid glass in Claude Code: rule file, prompts, tips

Codex

codex mcp add meniscus --url https://meniscus.site/mcp

The browser opens to sign in straight away; codex mcp login meniscus signs in again later. The CLI, the IDE extension and the ChatGPT desktop app share one config, so this covers all three. The entry it writes:

~/.codex/config.toml
[mcp_servers.meniscus]
url = "https://meniscus.site/mcp"

Or install the Meniscus plugin, which adds the server and the liquid-glass skill:

codex plugin marketplace add meniscus-site/meniscus-mcp
codex plugin add meniscus@meniscus
codex mcp login meniscus

Liquid glass in Codex: rule file, prompts, tips

Gemini CLI

gemini mcp add --scope user --transport http meniscus https://meniscus.site/mcp

Then run /mcp auth meniscus in Gemini CLI to sign in.

GitHub Copilot CLI

copilot mcp add --transport http meniscus https://meniscus.site/mcp

The browser opens to sign in when it first connects; /mcp auth meniscus signs in again.

OpenCode

Add to opencode.json in the project, or to ~/.config/opencode/opencode.json for every project:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "meniscus": {
      "type": "remote",
      "url": "https://meniscus.site/mcp"
    }
  }
}

Then sign in with opencode mcp auth meniscus.

Amp

amp mcp add meniscus https://meniscus.site/mcp

Amp opens the browser to sign in the next time it starts.

Factory Droid

droid mcp add meniscus https://meniscus.site/mcp --type http

Then run /mcp in droid, choose meniscus and Authenticate.

Qwen Code

qwen mcp add --transport http meniscus https://meniscus.site/mcp

Then open /mcp in Qwen Code and sign in to meniscus.

Warp

Settings → Agents → MCP servers → Add, and paste:

{
  "meniscus": {
    "url": "https://meniscus.site/mcp"
  }
}

Warp opens the sign-in in the browser when the server starts.

Crush

Add to crushrc in the project, or to ~/.config/crush/crushrc:

mcp add meniscus --type http --url https://meniscus.site/mcp --oauth true --sessionless true

Crush shows a sign-in dialog; Enter opens the browser. Meniscus keeps no session between calls, hence --sessionless.

goose

Desktop: Extensions → Add custom extension, type Remote Extension (Streamable HTTP), and paste the server URL. CLI: goose configure → Add Extension → Remote Extension (Streamable HTTP).

The browser opens to sign in when the extension starts.

Editors and IDEs

Cursor

Add to Cursor

Or add to ~/.cursor/mcp.json (or the project's .cursor/mcp.json):

{
  "mcpServers": {
    "meniscus": {
      "url": "https://meniscus.site/mcp"
    }
  }
}

Cursor asks you to sign in the first time it connects.

Liquid glass in Cursor: rule file, prompts, tips

VS Code

Add to VS Code

Or add to .vscode/mcp.json, or to your user mcp.json (MCP: Open User Configuration):

{
  "servers": {
    "meniscus": {
      "type": "http",
      "url": "https://meniscus.site/mcp"
    }
  }
}

VS Code asks you to trust the server, then opens the browser to sign in. From a terminal:

code --add-mcp '{"name":"meniscus","type":"http","url":"https://meniscus.site/mcp"}'

Devin Desktop (formerly Windsurf)

devin mcp add -s user meniscus https://meniscus.site/mcp

Then devin mcp login meniscus, or Authenticate next to the server in Devin Local's MCP list. Windsurf builds from before the rename read this file instead:

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "meniscus": {
      "serverUrl": "https://meniscus.site/mcp"
    }
  }
}

Zed

Settings → AI → MCP Servers → Add Server → Add Remote Server, or in settings.json:

{
  "context_servers": {
    "meniscus": {
      "url": "https://meniscus.site/mcp"
    }
  }
}

Then choose Authenticate next to the server.

JetBrains IDEs

Junie reads ~/.junie/mcp/mcp.json (or .junie/mcp/mcp.json in the project):

{
  "mcpServers": {
    "meniscus": {
      "url": "https://meniscus.site/mcp"
    }
  }
}

In Junie, run /mcp, select meniscus and Authorize. AI Assistant cannot sign in to remote servers yet: add Meniscus under Settings → Tools → AI Assistant → Model Context Protocol (MCP) through the bridge instead:

{
  "mcpServers": {
    "meniscus": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://meniscus.site/mcp"
      ]
    }
  }
}

Visual Studio

Add to .mcp.json in the solution folder, or to %USERPROFILE%\.mcp.json for every solution:

{
  "servers": {
    "meniscus": {
      "type": "http",
      "url": "https://meniscus.site/mcp"
    }
  }
}

Then choose Authentication Required above the entry in .mcp.json and sign in.

Cline

MCP Servers → Remote Servers: name meniscus, the server URL, transport Streamable HTTP, then Add Server. In the JSON config, spell out the type, or Cline falls back to SSE:

{
  "mcpServers": {
    "meniscus": {
      "type": "streamableHttp",
      "url": "https://meniscus.site/mcp"
    }
  }
}

Then choose Authenticate on the server. Cline CLI does the same through cline mcp.

Kilo Code

Settings → Agent Behaviour → MCP Servers → Add Server → Remote (HTTP), or in kilo.jsonc:

{
  "mcp": {
    "meniscus": {
      "type": "remote",
      "url": "https://meniscus.site/mcp"
    }
  }
}

Sign in from the notification it shows, or with kilo mcp auth meniscus.

Kiro

The IDE and Kiro CLI both read ~/.kiro/settings/mcp.json (or .kiro/settings/mcp.json in the workspace):

{
  "mcpServers": {
    "meniscus": {
      "url": "https://meniscus.site/mcp"
    }
  }
}

Kiro opens the sign-in page when it connects; /mcp auth meniscus in the CLI signs in again.

Google Antigravity

Agent panel → … → MCP Servers → Manage MCP Servers → View raw config. It takes serverUrl, not url:

~/.gemini/config/mcp_config.json
{
  "mcpServers": {
    "meniscus": {
      "serverUrl": "https://meniscus.site/mcp"
    }
  }
}

Then Agent Settings → Customizations → Authenticate: sign in, copy the code it shows and paste it back.

GitHub Copilot for Xcode

Settings → MCP → Edit Config, and add:

{
  "servers": {
    "meniscus": {
      "url": "https://meniscus.site/mcp"
    }
  }
}

Its OAuth support is in preview; if the sign-in does not start, use the bridge below.

Augment Code

Settings → MCP → Add remote MCP: connection type HTTP, name meniscus, the server URL. Then choose Authenticate on the server.

Chat and desktop apps

Claude (web, desktop and mobile)

Customize → Connectors → Add custom connector, paste the server URL and choose Add, then Connect to sign in. Leave the OAuth client ID and secret empty; if Claude asks how to identify itself, choose to register automatically.

On Team and Enterprise an owner adds it once under Organization settings → Connectors, then each member connects it. Connectors added on the web or desktop work in the mobile apps too. The Free plan allows one custom connector.

ChatGPT

Turn on developer mode (Settings → Security and login; on some accounts Settings → Apps → Advanced settings). Then create an app from the + at chatgpt.com/plugins: name it Meniscus, paste the server URL, choose OAuth and sign in when asked.

In a chat: + → Developer mode → Meniscus. Web only, on Plus, Pro, Business, Enterprise and Edu; in a workspace an admin turns on developer mode and publishes the app.

Mistral Vibe (formerly Le Chat)

Connectors → Add Connector → Custom MCP Connector: name meniscus, the server URL, then Connect and sign in. Turn it on in a chat under Tools.

Perplexity

Account settings → Connectors → Custom connector → Remote: paste the server URL, authentication OAuth, transport Streamable HTTP, then Add. Click the connector to sign in. Pro, Max and Enterprise, where an admin has to allow it.

Raycast

Run Install MCP Server: transport HTTP, the server URL, OAuth type Dynamic, then Sign In. Needs Raycast Pro.

LM Studio

Add to LM Studio

Or Program → Install → Edit mcp.json, and add under mcpServers:

"meniscus": { "url": "https://meniscus.site/mcp" }

A browser window opens to sign in.

Cherry Studio

Settings → MCP → Add server, type Streamable HTTP, the server URL. The browser opens to sign in when you start it.

LibreChat

MCP Settings → +: name meniscus, the server URL, transport Streamable HTTP, authentication OAuth. Or in librechat.yaml:

mcpServers:
  meniscus:
    type: streamable-http
    url: https://meniscus.site/mcp

Then connect from the server's button; the sign-in opens in a new tab.

Microsoft Copilot Studio

In an agent: Tools → Add a tool → New tool → Model Context Protocol. Paste the server URL, choose OAuth 2.0 → Dynamic discovery, create it and add a connection.

Any other client

Local-only clients (the mcp-remote bridge)

For a client that runs only local servers, or cannot sign in to remote ones yet (JetBrains AI Assistant, Trae, Msty), the mcp-remote bridge signs in and relays the calls. It needs Node 18 or later:

{
  "mcpServers": {
    "meniscus": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://meniscus.site/mcp"
      ]
    }
  }
}

The browser opens to sign in on first start. The token is kept in ~/.mcp-auth; delete that folder to sign in again.

Any other client that supports remote (Streamable HTTP) servers with OAuth works the same way: give it the URL; it registers and finds the sign-in by itself. Meniscus does not serve SSE and has no API key.

What your AI gets 7 tools
get_brief
Call it first. One call for a screen: the rules, tokens for both themes, the specs it needs, the build code for your stack, how to check it (check_code, then screenshots, then the checklist) and two reference images.
check_code
Checks the code your agent wrote against the rules, without a browser: errors, warnings, and what only a screenshot can confirm.
get_spec
One of 41 components or 14 effects by name, aliases accepted: material, geometry, optics numbers, anatomy, states, rules, references. With a medium, also that piece's build code.
get_recipe
A medium's build code, whole or one section at a time: the SVG displacement map, markup and CSS, the React component, the WebGL shader, liquid metal, border beam, mounting in plain JavaScript, the QA script; Figma settings and layer stacks; SwiftUI, Flutter and React Native.
get_rules
The rules in one block to keep in CLAUDE.md or AGENTS.md; one section of the design language for the deeper parts, or all of it.
get_references
Search the reference renders by text and filters (kind, component, effect, platform, theme) on every plan; load them by id, cropped to the glass or full frame, on Pro and the trial.
get_template
22 whole screens as React source (TSX + CSS), with a table for building each component without the React kit: smart home, wallet, AI chat, weather and more. The list on every plan, the code on Pro and the trial.

Three prompts come with the tools: build_screen, review_glass and add_component. Claude Code lists them as /mcp__meniscus__build_screen and so on; other clients show them in their slash-command menu.

Name the platform and the parts; your agent picks the tools. For example:

Design a dark macOS notes app with a glass sidebar and toolbar in Figma.
Build it in SwiftUI next. Use the meniscus tools, run check_code on your code
and check a screenshot against the brief's checklist.
Plans and limits

Free: the design language, every spec and every recipe with its code (web, Figma and design tools, SwiftUI, Flutter, React Native), 1 image per spec and 2 per brief, 50 tool calls a day. Pro, Team and Lifetime add the 22 screen templates as React source (`get_template`), the React kit and React Native starter downloads, the whole reference library (any render by id, at full frame, up to 4 per spec) and 2,000 calls a day (fair use). New accounts get the paid answers for their first 14 days; the downloads need a plan. Limits reset at 00:00 UTC. See pricing.

Troubleshooting
  • The sign-in window did not open. Run the client's sign-in again (/mcp in Claude Code, codex mcp login meniscus, /mcp auth meniscus in Gemini CLI or Copilot CLI); some clients open it only on the first tool call.
  • The sign-in names a supabase.co address. That is the sign-in service behind Meniscus; the page you approve on is meniscus.site.
  • The client connects but lists no tools. It is probably trying SSE. Set the transport to Streamable HTTP: "type": "http" in most JSON configs, streamableHttp in Cline, remote in OpenCode and Kilo Code.
  • "Sign in required" after it worked. Your session expired or was revoked in your account; connect again.
  • A tool says it needs a paid plan. You are on the free plan and asked for more images than it attaches, for images by id (get_references) or for a template's code (get_template); the rest of the answer, recipe code included, is complete.
  • Refraction looks like blur on the web. SVG refraction runs in Chromium; Safari and Firefox get the frost fallback, as the web recipe explains.
  • The agent built blur-only glass and never used the code. Check that it called get_brief with your stack named (the brief carries the code) and that your client let it use the meniscus tools; check_code on what it wrote lists what is wrong. A headless Claude Code run needs --allowedTools "mcp__meniscus" "mcp__meniscus__*"; an interactive one asks you once.