Skip to content
Workflow

Connecting a component library to Claude

Three routes bring a library to Claude: the directory listing for browser, app and Cowork, the server in Claude Code, and the plugin that carries rules and skills. Plus what Cursor and VS Code do differently.

9 min readBy Amelie RoesmannUpdated: 28 October 2026
MCPClaudeWorkflowConnector
Directory listing01
Series 04
Light that stays all day
Six lamps from one workshop in Utrecht.
See the rangeShowroom

Connecting a component library over MCP is a small thing technically: there is an address, the server answers, done. What makes it confusing is that Claude exists in several places, in the browser, in the app, on your phone, in Cowork and in Claude Code, and that those places do not take the same route. In the app you enter no key, you sign in. In Claude Code you enter a command, or you install a plugin that brings more along than just the server. This guide sorts the three routes, says for each what it can and cannot do, and puts beside them how Cursor and VS Code solve the same problem differently. At the end comes the part almost everyone leaves out, the one that decides whether the agent reaches for the library on its own at all.

The short version
  • One listing in the connector directory covers every Claude surface. Anthropic describes the directory as a single catalog for claude.ai, Desktop, mobile, Cowork and Claude Code.
  • The Claude apps have no field for a key. A connector signs in over OAuth, and the key stays a matter for Claude Code, Cursor and VS Code.
  • A plugin is not the same thing as a server. It bundles skills, subagents, hooks and MCP servers, and installs with a scope: for you, for the repository, or locally only.
  • Cursor and VS Code hang the connection on a file in the project, Claude on your account. Everything else follows from that, from where the key lives to who else on the team still has to act.
01

Which three routes bring a library to Claude?

There is the directory listing, the server by hand, and the plugin. All three lead to the same MCP server; they differ in where the connection is stored and how much comes along besides the tools.

The first route is the shortest. Anthropic runs a connector directory, and the documentation describes it as one catalog serving claude.ai, Desktop, mobile, Cowork and Claude Code at once. A provider submits a server once, and anyone who wants to use it opens the listing and clicks Connect. There is no address to type out and no key to copy.

The second route is the server by hand, in Claude Code through a command in the terminal. The third is the plugin, and it is the only one of the three that delivers more than a line: alongside the server it holds skills, subagents, hooks and commands of its own. Which route is right depends less on skill than on where you work with Claude.

  1. Browser, app, phone and Cowork: the connector. A listing in the directory, or, where there is none, a custom connector with the server address. You sign in rather than paste a key.
  2. Claude Code on its own: the command. One line in the project folder registers the server, and the key travels along as an Authorization header. Good for a quick try and for a project that needs nothing else.
  3. Claude Code day to day: the plugin. Two lines, and server, skills and rules arrive together. That is the difference between a tool on your belt and a tool with instructions.
Ask in the editorA hero with an image.
ServerSearches and delivers.
File in the projectComplete TSX.
Three entrances, one server. What differs is where the connection is kept, not the service behind it.
02

How does the library get into Claude in the browser and the app?

Through the directory, in one click. You open the provider's listing, click Connect and sign in with your account at the provider. For Systra Tools that listing sits at claude.ai/directory/systra-tools, and after the sign-in the server brings the scope belonging to that account, with no key stored anywhere.

Where there is no listing, you create the connector yourself: under Customize, Connectors, Add custom connector, and enter the server's address there, for Systra Tools systra.tools/api/mcp. In the dialog you choose how signing in works. Sign in now runs the provider's login right away, sign in when needed waits until the server asks, and no sign-in is meant for servers that know no users. A fixed key can only be stored in that last case, as a request header, and that option is a beta according to the documentation, one not every organization sees.

Two things are easy to miss here. On a Team or Enterprise plan an Owner adds the connector for the organization and members then connect with their own account: the listing is shared, the sign-in is not. And in an individual conversation every connector can be switched off through the plus button, which is the most common explanation for a connected server suddenly not answering.

Customize > Connectors > Add custom connector   MCP server URL    https://systra.tools/api/mcp  Authentication    Sign in now  OAuth client      Use Claude's published identity  Request headers   none
The values for a custom connector, if there is no listing in the directory.
The directory listing saves the entire dialogWhere a listing exists, the detour through a custom connector is unnecessary and brings two drawbacks. The listing is maintained: if the provider moves the server to a new address, the listing moves with it, while a connector you added yourself stays on the old address. And the authentication of an existing connector cannot be changed later, you would have to remove it and add it again.

A connector hangs on your account, not on the project. That is why it travels with you, and why it does nothing for your team.

03

What can a plugin do that the server alone cannot?

It brings the instructions along. An MCP server delivers tools, a search and the delivery of source code, say. A plugin in Claude Code bundles skills, subagents, hooks and commands of its own beside them and installs all of it in one step. For a component library that is exactly the difference that counts day to day: the tools alone do not change the fact that a model would rather write a section itself than search for one.

Installing takes two lines, and between them sits a step worth knowing. The first line registers the marketplace, meaning the place the plugin lives, the second installs the plugin from it. Since Claude Code 2.1.275 both also fit in one line, by hanging the source onto the install command with --marketplace. Inside a session the install command first opens the details, and those say what the plugin brings before you agree.

Before agreeing you choose the scope, and that is the real decision. For you on this machine lands in your own settings. For everyone in the repository lands in a file you commit, which switches the plugin on for your colleagues but does not download it: each of them runs the install once themselves. For you in this repository only stays in the local settings and is nobody else's business.

/plugin marketplace add systra-tools/systra-tools-plugin  /plugin install systra-tools@systra # from your shell, for a setup scriptclaude plugin install systra-tools@systra \  --scope project
Register the marketplace, install the plugin. It then appears under its name.
A plugin is allowed to do more than a serverBecause a plugin may start hooks and MCP servers, it is not a pure convenience feature but executable code from someone else's hand. Anthropic's documentation explicitly says to read the overview before installing. That holds in particular for marketplaces that do not come from Anthropic: for those, auto-update is off by default, and for good reason. Read the list of components before you agree, the way you would look at an npm package with an install script.
04

What do Cursor and VS Code do differently?

They hang the connection on a file instead of on an account. That is the one difference all the others follow from. In Claude you connect, and the connection is yours: it is there in every conversation, on every device, and nobody else gets anything from it. In Cursor and VS Code you enter the server into a file, and that file sits either in your home directory, where it applies to all your projects, or in the project, where it applies to everyone who opens it.

The formats differ in details you notice while typing. Cursor expects a block called mcpServers holding an address and optional headers per server, in ~/.cursor/mcp.json globally or in .cursor/mcp.json per project. VS Code expects a block called servers in .vscode/mcp.json, with an additional type set to http, and knows a second block beside it called inputs.

That second block is the genuinely interesting part, because it solves a problem Claude never has in the first place. A project file gets committed, so a key inside it lands in the repository. With an entry of type promptString, VS Code asks for the key once on first start, remembers it locally and inserts it at runtime. All that remains in the file is a placeholder. If you want the same effect in Cursor, put the configuration in your home directory rather than in the project.

// ~/.cursor/mcp.json{  "mcpServers": {    "systra": {      "url": "https://systra.tools/api/mcp",      "headers": {        "Authorization": "Bearer YOUR_KEY"      }    }  }} // .vscode/mcp.json{  "servers": {    "systra": {      "type": "http",      "url": "https://systra.tools/api/mcp",      "headers": {        "Authorization": "Bearer ${input:systraKey}"      }    }  },  "inputs": [    {      "id": "systraKey",      "type": "promptString",      "password": true    }  ]}
Cursor on top, VS Code below. The same server, two spellings.

Claude remembers the connection. Cursor and VS Code remember a file. Both come at a price.

05

Why does the agent not reach for the library on its own?

Because nobody told it when to. This point is left out of almost every tutorial, and it is the reason a correctly configured connection can feel as though it does nothing. A connected server shows up as a list of tools. The model sees that list, but it has no reason to use it as long as the obvious move is to write the section itself. So it does what it is good at anyway.

The counter-measure is a file in the project, usually AGENTS.md, saying when the library comes into play. It does not have to be long. Three instructions carry a long way: before a new section, search first; take the delivered source rather than rewriting it; fetch images through the tool meant for it. What matters is the order inside the sentence, search first and build second, because that order is precisely the one the model does not pick on its own.

On the other end of the same line sits the question of whether the library itself is readable for models. A file called llms.txt on the website answers the questions a model asks, in the form it asks them: what is this, how many building blocks, which technology, what does it cost, how do I connect it. That is not an SEO trick, it is the same work as good documentation, only for a reader who uses no navigation and opens no second page.

01PageOne URL, rendered.
02Raw valuesEverything in the stylesheet.
03RolesMerge them and name them.
04VariablesOnly here they are tokens.

The connection brings the tools into the project. The file beside it brings them into the workflow.

## UI components This project sources UI from a component library over MCP.   Before writing a section by hand, search the library:  `search_components` with the intent in plain words,  then `get_component` for the source. Paste what it  returns rather than paraphrasing it. For a complete page, `list_recipes` and `get_recipe`return an ordered sequence of sections. Images come from `search_images`, not from stock sites.
The core of an AGENTS.md. Short enough to travel in any context.

A connection without an instruction is a toolbox nobody opens.

06

What goes wrong along the way?

Five things, and none of them announces itself with an error message. Together they explain most cases where the setup is right and still nothing happens.

  1. The restart is missing. Cursor and VS Code read the configuration at startup, not while running. In Claude Code, /reload-plugins brings a freshly installed plugin into the running session, otherwise it applies from the next one.
  2. The key sits in the address. It belongs in the Authorization header, never as part of the URL. An address ends up in logs, in debugging output and in history, a header does not. And where a header is set, the word Bearer belongs in front of it, with a space.
  3. The connector is off in this conversation. In the Claude apps every connector can be switched off per conversation, through the plus button in the chat. That switch stays where you left it, even if you flipped it three days ago.
  4. The provider has moved. If a provider changes the address behind its listing, an existing connection keeps running on the old address and shows up as a custom connector from then on. Add the listing again and you have two connections instead of one.
  5. The environment is a different one. A Claude Code cloud session loads neither the plugins from your machine nor the ones the repository switches on. What runs locally does not automatically run there.

That leaves the question of when the whole effort is not worth it. For a single project needing three components, copying from the browser is faster than any setup. The benefit comes from repetition, meaning where searching, comparing and placing happens again and again over weeks, and where several people should draw on the same source.

And a connection replaces no decision. An agent that can reach a library does not therefore build a good page: it finds what exists faster and places it more cleanly. Which of it belongs where remains a question that sits upstream of the tool.

Share
Written by
Amelie RoesmannCreative direction

We build websites and web apps at Systra Studios in Münster and put the building blocks from that work here. What you read comes from real projects, not from a brochure.

Systra Studios: web design from Münster

Where to go next

Everything from this guide sits ready in the library. Six sections per category run live and full size without an account, the source code comes with premium.

Keep reading
FAQ

Frequently asked questions

No, and in most cases there is not even a field for one. Claude in the browser, in the desktop app, on your phone and in Cowork adds an MCP server as a connector, and a connector signs in rather than sending a fixed key: you click Connect and log in with your account at the provider. From then on the server knows who you are and serves what belongs to that account. A fixed key can only be stored on a side route, as a request header when you add a custom connector, and according to Anthropic's documentation that option is a beta that is not available in every organization. A key in the Authorization header, by contrast, is the normal case in Claude Code, Cursor and VS Code.

Didn't find your question? We're happy to help.

Get in touch