MCP Server
Our MCP server gives your agents the whole standard as tools: the contracts, every rule, the docs and the reference implementations. Connect it once, then ask your agent to build or review a component. It reads only what the task needs, then checks its work rule by rule, citing each rule by its ID.
It works with Claude, ChatGPT, Codex, Cursor, VS Code, GitHub Copilot, Gemini CLI and any other client that supports remote servers over the Model Context Protocol. It's free, with nothing to install and no account or API key to set up.
This page covers:
- Quick start - connect it and try it in a minute
- Connect your client - the setup for each client, step by step
- What you can ask - prompts for building, reviewing and learning the standard
- How it works - what your agent reads, and in what order
- Tools, prompts and resources - everything the server offers
- Privacy and security - what it sees, and what it can't do
- Troubleshooting - what to check when it doesn't connect
At a glance
| Aspect | MCP server |
|---|---|
| URL | https://mcp.opencomponents.dev/mcp |
| Name | open-components, the name to add it under |
| Transport | Streamable HTTP |
| Authentication | None, so where a client asks, choose none |
| Access | Read-only. It serves the standard and changes nothing |
| Cost | Free |
| Tools | list-components, get-contract, list-rules, get-page, search-docs and get-reference-implementation |
| Prompts | build-component, review-component, review-usage and adopt-token-paths |
| Content | The same files as this site, redeployed whenever they change |
Quick start
Add the server
In a coding agent, it takes one command:
claude mcp add --transport http open-components https://mcp.opencomponents.dev/mcp
codex mcp add open-components --url https://mcp.opencomponents.dev/mcp
gemini mcp add --scope user --transport http open-components https://mcp.opencomponents.dev/mcp
copilot mcp add --transport http open-components https://mcp.opencomponents.dev/mcp
In an editor, open the Cursor install link or the VS Code install link. On every page of these docs, the menu next to Copy page can also copy the server's URL for you, with Copy MCP Server URL, or install it in Cursor, with Add MCP Server. For any other client, see Connect your client.
To get skills that build and review components along with the server, install our agent plugin instead.
Check that it's connected
Run /mcp in Claude Code, Codex or Gemini CLI, or /mcp show open-components in Copilot CLI, to check that open-components is connected. In an editor, look for it in the MCP settings, along with its six tools.
Ask your agent
Ask for what you need in your own words. Mention the server by name the first time, so your agent knows to reach for it:
Build a Button component for our React design system that meets the Open Components
standard, using the open-components MCP server. Check your work against every rule
with a component or both scope, and cite the rule ID for any rule you can't meet.
What you can ask has more prompts to start from.
Connect your client
Every client needs the same three things: the URL, https://mcp.opencomponents.dev/mcp, the name, open-components, and no authentication. Most take a single command or a few lines of configuration. There's nothing to sign in to, so where a client asks about authentication, choose none.
Coding agents
claude mcp add --transport http open-components https://mcp.opencomponents.dev/mcp
That adds it for you, in the project you're in. Add --scope user to use it in every project, or --scope project to share it with your team through the project's .mcp.json, which asks each of them to approve it once.
Run /mcp in Claude Code to check that it's connected.
codex mcp add open-components --url https://mcp.opencomponents.dev/mcp
That adds it to ~/.codex/config.toml, which the Codex CLI, the Codex extension for your editor and Codex in the ChatGPT desktop app all read. To share it with your team, add it to .codex/config.toml in your project instead, which Codex reads once you trust the project:
[mcp_servers.open-components]
url = "https://mcp.opencomponents.dev/mcp"
Run /mcp in Codex to check that it's connected.
gemini mcp add --scope user --transport http open-components https://mcp.opencomponents.dev/mcp
That adds it to ~/.gemini/settings.json, which Gemini Code Assist's agent mode in VS Code (Standard and Enterprise) reads too, after Developer: Reload Window.
Leave out --scope user to add it to .gemini/settings.json in the folder you're in instead, and start gemini from that folder, though not from your home folder, where it reports success but saves nothing.
Run /mcp in Gemini CLI to check that it's connected.
copilot mcp add --transport http open-components https://mcp.opencomponents.dev/mcp
That adds it to ~/.copilot/mcp-config.json. Run /mcp show open-components in a Copilot CLI session to check that it's connected.
In Grok Build, xAI's coding agent:
grok mcp add --transport http open-components https://mcp.opencomponents.dev/mcp
That adds it to ~/.grok/config.toml. Run grok mcp doctor open-components to check that it's connected.
hermes mcp add open-components --url https://mcp.opencomponents.dev/mcp
Answer n when it asks whether the server needs authentication, then let it enable every tool. That adds it to ~/.hermes/config.yaml (%LOCALAPPDATA%\hermes\config.yaml on Windows), which you can also edit yourself:
mcp_servers:
open-components:
url: "https://mcp.opencomponents.dev/mcp"
Run hermes mcp test open-components to check that it's connected.
In the Hermes desktop app, add it under Capabilities > Connectors > Add your own: set Type to Streamable HTTP, leave Auth on None and click Save.
Editors
Open the Cursor install link, or add the server to .cursor/mcp.json in your project, or to ~/.cursor/mcp.json to use it in every project:
{
"mcpServers": {
"open-components": {
"url": "https://mcp.opencomponents.dev/mcp"
}
}
}
Open the VS Code install link, or add the server to a .mcp.json at your project's root, which Claude Code reads too:
{
"mcpServers": {
"open-components": {
"type": "http",
"url": "https://mcp.opencomponents.dev/mcp"
}
}
}
In .vscode/mcp.json, the same entry goes under servers rather than mcpServers. Copilot Chat can then use its tools in agent mode.
Add the server to .mcp.json in your solution, or to %USERPROFILE%\.mcp.json to use it in every solution:
{
"servers": {
"open-components": {
"type": "http",
"url": "https://mcp.opencomponents.dev/mcp"
}
}
}
Then turn on its tools from Tools in Copilot Chat's agent mode.
In AI Assistant 2025.3 or later, go to Settings > Tools > AI Assistant > Model Context Protocol (MCP), click Add, choose HTTP and paste:
{
"mcpServers": {
"open-components": {
"url": "https://mcp.opencomponents.dev/mcp"
}
}
}
Click OK, then Apply. To let Junie and the other agents in your IDE use it too, turn on Pass custom MCP servers under Settings > Tools > AI Assistant > Agents.
For Junie CLI, add the same entry to ~/.junie/mcp/mcp.json, or to .junie/mcp/mcp.json in your project.
Add it under Settings > AI > MCP Servers > Add Server > Add Remote Server (in older releases, in the Agent Panel's settings), or to context_servers in your settings.json:
{
"context_servers": {
"open-components": {
"url": "https://mcp.opencomponents.dev/mcp"
}
}
}
The dot next to it turns green once it's connected.
agy mcp add open-components https://mcp.opencomponents.dev/mcp
That adds it to ~/.gemini/config/mcp_config.json, which the Antigravity CLI, the IDE and the desktop app share. In the IDE, open it from the agent panel's … menu, under MCP Servers > Manage MCP Servers > View raw config. Give a remote server a serverUrl there, the key Antigravity's docs ask for:
{
"mcpServers": {
"open-components": {
"serverUrl": "https://mcp.opencomponents.dev/mcp"
}
}
}
In Windsurf, add the server to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"open-components": {
"serverUrl": "https://mcp.opencomponents.dev/mcp"
}
}
}
With the Devin CLI:
devin mcp add -s user open-components https://mcp.opencomponents.dev/mcp
Chat apps
In Claude and Claude Desktop, add the server as a custom connector:
- Go to Customize > Connectors, click + Add, then Add custom connector.
- Name it
open-componentsand enter the URL. - Under Authentication, choose No sign in.
You can then turn it on for a conversation from the + button, under Connectors.
You can add it on the web, with a Plus, Pro, Business, Enterprise or Edu plan:
- Turn on Developer mode in ChatGPT's settings.
- Create an app named
open-componentswith the URL, set Authentication to No Authentication and confirm that you trust the server. - In a new chat, pick it from the + menu, under Developer mode.
The menus can differ a little from plan to plan.
On grok.com:
- Open Connectors, choose New Connector, then Custom.
- Name it
open-components, enter the URL as its Server URL and click Add Connector.
Cloud agents and APIs
For Copilot's cloud agent on github.com, a repository admin pastes this under the repository's Settings > Copilot > MCP servers, then clicks Save MCP configuration:
{
"mcpServers": {
"open-components": {
"type": "http",
"url": "https://mcp.opencomponents.dev/mcp",
"tools": ["*"]
}
}
}
Pass the server to the Responses API as a tool, and xAI connects to it for you:
"tools": [
{
"type": "mcp",
"server_url": "https://mcp.opencomponents.dev/mcp",
"server_label": "open-components"
}
]
Other clients
- Amp:
amp mcp add open-components https://mcp.opencomponents.dev/mcp - Cline: open Customize (the wrench), then MCP > Add Remote Server, and keep Streamable HTTP as its transport.
- Continue: add the server to the
mcpServerslist in~/.continue/config.yaml. Continue uses it in Agent and Plan modes.mcpServers: - name: open-components type: streamable-http url: https://mcp.opencomponents.dev/mcp - Crush: from Crush 0.88, add this line to
~/.config/crush/crushrc:mcp add open-components --type http --url https://mcp.opencomponents.dev/mcp - Factory Droid:
droid mcp add open-components https://mcp.opencomponents.dev/mcp --type http - goose: in the desktop app, go to Extensions > Add custom extension, choose Streamable HTTP as its type and enter the URL as its endpoint. In the CLI, run
goose configureand choose Add Extension > Remote Extension (Streamable HTTP). - LM Studio: add the server under
mcpServersin~/.lmstudio/mcp.json, which Program > Install > Edit mcp.json opens:{ "mcpServers": { "open-components": { "url": "https://mcp.opencomponents.dev/mcp" } } } - OpenCode:
opencode mcp add open-components --url https://mcp.opencomponents.dev/mcp
In releases from before June 2026, runopencode mcp addand answer its questions instead. - Qwen Code:
qwen mcp add --transport http open-components https://mcp.opencomponents.dev/mcp - Warp: under Settings > Agents > MCP servers, click + Add and paste:
{ "open-components": { "url": "https://mcp.opencomponents.dev/mcp" } }
Any other client that supports remote MCP servers over streamable HTTP only needs the URL. If yours only runs local servers, it can still reach this one through mcp-remote, which you add as a local server with this command:
npx -y mcp-remote https://mcp.opencomponents.dev/mcp
What you can ask
Once the server is connected, ask in your own words. Mention it by name the first time, and your agent takes it from there: the server tells it which tools to use, and in what order. Here's what it can help with, and a prompt to start from for each.
Build a component
Build a Button component for our React design system that meets the Open Components
standard, using the open-components MCP server. Check your work against every rule
with a component or both scope, and cite the rule ID for any rule you can't meet.
Your agent reads the Button's contract with get-contract, ports the reference implementation and its tests from get-reference-implementation, and reads how the API looks in React with get-page. Then it checks its work against the contract's rules with a component or both scope. For a component on the Roadmap, which has no contract yet, it holds it to the three layers and Design Tokens instead, following the Button's structure. The build-component prompt asks for the same.
Review a component
Review our Button, in src/components/Button.tsx, against the Open Components standard,
using the open-components MCP server. Report every rule with a component or both scope
as pass or fail, with its rule ID and the evidence from our code. Then fix the failures.
Your agent lists the rules to report on with list-rules, then checks your code against each one. For a rule it's unsure of, it finds the section that explains it with search-docs, and reads it with get-page. The review-component prompt asks for the same.
Review a screen
Review how our checkout page uses buttons against the Open Components standard, using
the open-components MCP server. Report every rule with a usage or both scope as pass
or fail, with its rule ID and the evidence from our code.
Usage rules are the ones the code using a component meets, like button/one-primary, which keeps one solid primary button per view. Your agent lists them with list-rules, with a usage or both scope. The review-usage prompt asks for the same.
Move to token paths
Rename our CSS variables to follow the Open Components token paths, using the
open-components MCP server. List our token groups first, then rename every variable
along with every var() that reads it, keeping the values as they are. Then add the
Stylelint rule from the standard, and fix anything it reports.
Your agent reads the Design Tokens contract with get-contract, and the Stylelint rule from the page's Lint section with get-page. The adopt-token-paths prompt asks for the same.
Learn the standard
Using the open-components MCP server, how should a button behave while it's loading?
Link to the sections you used.
Your agent finds the sections that cover it with search-docs, then reads them with get-page, with the examples in your framework if you name one. To see what the standard covers so far, and what's planned, ask which components it has, and your agent lists them with list-components.
How it works
You could point your agent at a page instead, but component pages are long. The Button's is about 35,000 tokens, mostly reasoning and examples in seven frameworks, which is far more than any one task needs. Its contract holds every requirement in about 3,000.
When your agent connects, the server tells it how to use it, so you don't have to. Your agent:
- Finds what the task is about, with
list-components, orsearch-docsfor a topic. - Reads the contract first, with
get-contract: the component's API, its DOM contract, its tokens and every rule. - Reads only the sections it needs, with
get-page, for the reasoning or an example behind a rule, in your framework. - Starts from the reference implementation, with
get-reference-implementation, when it builds a component. - Checks its work rule by rule, with
list-rules, citing every rule by its ID, likebutton/keep-focus, exactly as the server writes it, so you can look each one up.
Rules and scopes
Every rule has a level. A component meets the standard when it meets every must rule, and each should rule is expected unless there's a good reason not to follow it.
A component's rules also have a scope, which says whose code to check them against:
| Scope | Met by | Check it when you |
|---|---|---|
component | The component itself | Build or review a component |
usage | The code that uses it | Review a screen |
both | The two together, like naming an icon-only button | Do either |
Always in step with the site
The server is built from the same files as this site, and redeployed whenever they change, so it serves the standard exactly as the site publishes it. A contract from get-contract is the same file as its /raw/docs/<path>.yaml, and a page from the resources is the same as its /raw/docs/<path>.md.
Tools, prompts and resources
Tools
Your agent calls these on its own, following the instructions the server gives it. Every tool is read-only, and tells your client so.
| Tool | What it returns | Arguments |
|---|---|---|
list-components | What the standard covers, shipped or planned, with the name the other tools take, like button | Optionally, status |
get-contract | The contract of a component or foundation, as YAML: its API, its DOM contract, its tokens and every rule | component |
list-rules | Rules as records, each with its ID, level, scope, requirement and how to check it | Optionally, component, ids, scope, layer, level, check or automated |
get-page | A page, or only the sections you name, with the examples in one framework | path, and optionally sections and framework |
search-docs | The sections and rules that best match a query, across the whole standard | query, and optionally component, type and limit |
get-reference-implementation | A component's reference implementation in Vue 3 and its tests, or only the files you name | component, and optionally files |
A page longer than about 8,000 tokens, like the Button's, comes back as its outline, every heading with its anchor and length, so your agent can ask for the sections it needs. No reply is longer than about 36,000 characters, so clients like Gemini CLI and Codex pass it on whole.
Prompts
Prompts are requests you start yourself, usually as slash commands. They ask for what the prompts on our pages ask for, then point your agent at the tools.
| Prompt | What it does | Arguments |
|---|---|---|
build-component | Builds a component in your framework, from its contract, reference implementation and tests, or for one on the Roadmap, following the Button's structure | component, and optionally framework |
review-component | Reviews the code of a component or foundation, reporting every rule as pass or fail with its ID and the evidence, then fixes the failures | component, and optionally code |
review-usage | Does the same for a screen that uses a component, against the rules the screen meets | component, and optionally screen |
adopt-token-paths | Renames your CSS variables to token paths, then adds the Stylelint rule that keeps them that way | None |
How you start one depends on your client:
| Client | Command |
|---|---|
| Claude Code | /mcp__open-components__build-component button react |
| Gemini CLI | /build-component button --framework=react |
| VS Code | /mcp.open-components.build-component, which then asks for its arguments |
Not every client runs them: Codex doesn't, and Continue, OpenCode and Zed can't pass their arguments yet, so only adopt-token-paths works there. Where yours doesn't, ask for the same in your own words, as in What you can ask, or install our agent plugin, whose skills your agent picks up on its own.
Resources
Resources are files you attach to a conversation yourself, with @ in Claude Code, or Add Context > MCP Resources in VS Code. They're every contract and every page, at the same URLs as on this site, /raw/docs/<path>.yaml and .md, and the contract schema.
Privacy and security
The server only serves the standard, so there's little that can go wrong, but here's exactly what it does and doesn't do:
- It's read-only. Its tools read the standard and change nothing, on our side or in your project. Your agent makes every change to your code itself, with the permissions you give it.
- It takes no credentials. There's no account, API key or token, so there's nothing to set up, store or leak.
- It only sees what your agent sends it. Each call carries a few arguments, like a component's name, a search query or the sections to read. The exception is the
codeandscreenarguments of the review prompts, which send whatever you pass in. To keep your code on your machine, pass the paths of your files instead, likesrc/components/Button.tsx, and your agent reads them itself. - It serves what the site publishes. Everything it returns comes from the same files as this site, in its public repository, so you can read any of it before your agent does.
Troubleshooting
Check that the URL is exactly https://mcp.opencomponents.dev/mcp, with /mcp at the end, and that the client connects to it over HTTP, which some clients call streamable HTTP, rather than SSE. Then restart the client, or reload its window, since many only read their MCP settings when they start.
Some clients keep remote servers under their own key. In .vscode/mcp.json and Visual Studio's .mcp.json, the server goes under servers rather than mcpServers, and Antigravity and Windsurf ask for a serverUrl rather than a url. Gemini CLI saves nothing when you add the server to a project from your home folder, so use --scope user there.
It can still reach this one through mcp-remote, which runs on your machine and passes every request on. Add it as a local server with this command:
npx -y mcp-remote https://mcp.opencomponents.dev/mcp
adopt-token-paths works there. Ask for the same in your own words instead, as in What you can ask: the tools are all your agent needs. Or install our agent plugin, whose skills your agent picks up on its own./llms.txt lists them all, as For agents in the introduction explains.mcp/ folder of our repository, and pnpm dev:mcp serves it on your machine, at http://localhost:3100/mcp by default. Our contributing guide covers how it's built.Still stuck? Open an issue with your client, its version and what you tried, and we'll help you connect.