# One MCP config for Claude Code, OpenCode and OMP

> Source: <https://blog.devgenius.io/one-mcp-config-for-claude-code-opencode-and-omp-a7c75100cd6b?source=rss----4e2c1156667e---4>
> Published: 2026-10-20 13:52:37+00:00

You use Claude Code for one task and OpenCode for another, and both should see the same Figma and Linear MCP servers. Each harness wants them in its own file, under its own keys:

Writing three files once is tedious. Keeping them equal is the real cost: change a URL in one, forget the others, and half your sessions start without the server. Then each harness needs its own login.

The files are the easy part. Authentication fails differently in each harness:

Where the harness’s own login works, ivar uses it. It only takes over where the harness cannot finish. [Figma MCP on OpenCode: fix "Authentication failed"](https://ivar.run/blog/figma-mcp-opencode?utm_source=medium&utm_medium=syndication&utm_campaign=one-mcp-config-claude-code-opencode-omp) explains the Figma case in detail.

Install ivar, create a hall in an empty directory with the harnesses you use, and add the servers:

```
curl -fsSL 'https://ivar.run/install?ref=one-mcp-config' | shmkdir tools-hall && cd tools-hallivar init --provider claude-codeivar provider add opencodeivar provider add ompivar mcp add figmaivar mcp add linear
```

figma and linear are known names, so ivar mcp add fills in their URLs. Any other HTTP server takes --url, for example ivar mcp add sentry --url https://mcp.sentry.dev/mcp. Adding a server that is already declared the same way changes nothing; adding one with the same name and a different URL is refused instead of overwriting it.

The declaration lives in the hall’s ivar.json:

```
{  "mcp": [    { "name": "figma", "type": "http", "url": "https://mcp.figma.com/mcp" },    { "name": "linear", "type": "http", "url": "https://mcp.linear.app/mcp" }  ]}
```

ivar mcp add writes each harness's file from it on the spot. After you edit ivar.json by hand, ivar sync rewrites the three files to match.

```
ivar mcp auth figma --all-providersivar mcp auth linear --all-providersivar mcp status
```

--all-providers runs every harness the hall lists, one after the other, because each login takes over the terminal and waits on the browser. Every harness is attempted even if an earlier one fails, and the run is reported as needing attention when any of them does. When a client registration happens first, as with Figma on OpenCode, it is reported apart from the login: a registered client is not yet an authenticated one.

ivar mcp status prints which server has credentials on which harness. The client secret lives in .ivar/secrets/mcp.env, outside git. Tokens never go into ivar.json, so you can commit the file and a teammate gets the same servers after their own ivar mcp auth.

With one harness and a server whose login works there, no. Add the server to that harness’s file and run its login. ivar earns its place when you use more than one harness, when a team should share the same servers, or when the login fails, as it does for Figma on OpenCode and for any OAuth server on OMP.

The hall that holds your MCP servers is also where ivar mounts your repositories and runs a feature across them, with every session reading the same servers. The [quickstart](https://ivar.run/docs/quickstart?utm_source=medium&utm_medium=syndication&utm_campaign=one-mcp-config-claude-code-opencode-omp) mounts the first repo. The [MCP guide](https://ivar.run/docs/guide/mcp?utm_source=medium&utm_medium=syndication&utm_campaign=one-mcp-config-claude-code-opencode-omp) covers transports and OAuth per harness.

[One MCP config for Claude Code, OpenCode and OMP](https://blog.devgenius.io/one-mcp-config-for-claude-code-opencode-and-omp-a7c75100cd6b) was originally published in [Dev Genius](https://blog.devgenius.io) on Medium, where people are continuing the conversation by highlighting and responding to this story.
