One MCP config for Claude Code, OpenCode and OMP
Three files for one server 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: harness
Three files for one server
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:
| harness | file |
|---|---|
| Claude Code | .mcp.json |
| OpenCode | opencode.json |
| OMP | .omp/mcp.json |
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.
Where the login breaks
The files are the easy part. Authentication fails differently in each harness:
| server | harness | the harness's own login | what ivar mcp auth does |
|---|---|---|---|
| Figma | OpenCode | Figma refuses OpenCode's client registration; opencode mcp auth prints Authentication failed and exits 0 |
registers a client under a name Figma accepts, runs the browser flow and writes the tokens into OpenCode's store |
| Figma, Linear | OMP | OMP has no MCP login command | runs the browser flow itself and imports the token with omp auth-broker import
|
| Figma, Linear | Claude Code |
claude mcp login works |
hands the browser step to claude mcp login
|
| Linear | OpenCode |
opencode mcp auth works |
hands the browser step to opencode mcp auth
|
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" explains the Figma case in detail.
Declare once
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' | sh
mkdir tools-hall && cd tools-hall
ivar init --provider claude-code
ivar provider add opencode
ivar provider add omp
ivar mcp add figma
ivar 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.
Authenticate once per server
ivar mcp auth figma --all-providers
ivar mcp auth linear --all-providers
ivar 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.
Do you need this?
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.
Limits
- Three harnesses: Claude Code, OpenCode and OMP.
- macOS and Linux. Windows is not supported, and WSL is untested.
- HTTP MCP servers. Figma and Linear are the servers
ivar mcp authhas been run against. For another OAuth server, Claude Code and OpenCode use their own login and OMP uses the flowivarruns; whether that server accepts it is up to the server. - The OAuth flow talks to each MCP server directly.
ivarhas no server of its own in the middle.
Then add your repos
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 mounts the first repo. The MCP guide covers transports and OAuth per harness.
Related
- Figma MCP on OpenCode: fix "Authentication failed": why Figma refuses OpenCode's registration and the four commands that fix it.
- Declare MCP servers once for every harness: the short recipe.
- Harness pages: Claude Code, OpenCode, OMP.
Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes β full credit and traffic to the original publisher.