하나의 서버를 위한 세 개의 파일
하나의 작업에는 Claude Code를 사용하고 다른 작업에는 OpenCode를 사용하는 경우, 두 가지 모두 동일한 Figma 및 Linear MCP 서버를 확인해야 합니다. 각 하네스(harness)는 이를 자신의 키 아래에 별도의 파일로 요구합니다:
| harness | file |
|---|
| Claude Code | .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. | |
로그인 문제가 발생하는 지점
파일을 만드는 것은 쉬운 부분입니다. 인증(Authentication)은 각 하네스에서 다르게 실패합니다:
| 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 |
| ... | | | |
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. | | | |
한 번 선언하기
ivar를 설치하고, 사용하려는 하네스들로 빈 디렉터리 안에 홀(hall)을 만든 다음, 서버들을 추가합니다:
curl -fsSL 'https://ivar.run/install?ref=one-mcp-config' | sh
mkdir tools-hall && cd tools-hall
ivar init --provider claude-code
...
figma와 linear는 알려진 이름이므로, ivar mcp add가 해당 URL을 채워줍니다. 다른 HTTP 서버의 경우 --url을 사용합니다. 예를 들어 ivar mcp add sentry --url https://mcp.sentry.dev/mcp. 이미 같은 방식으로 선언된 서버를 추가하는 것은 아무것도 변경하지 않지만, 이름은 같고 URL이 다른 서버는 덮어쓰지 않고 거부됩니다.
The declaration lives in the hall's ivar.json:
{
"mcp": [
{ "name": "figma", "type": "http", "url": "https://mcp.figma.com/mcp" },
...
ivar mcp add는 각 하네스(harness)의 파일을 그 자리에서 작성합니다. ivar.json을 수동으로 편집한 후에는, ivar sync이 세 개의 파일을 일치하도록 다시 작성합니다.
서버별 인증 (Authenticate once per server)
ivar mcp auth figma --all-providers
ivar mcp auth linear --all-providers
ivar mcp status
--all-providers는 홀(hall)이 나열하는 모든 하네스에 대해 순차적으로 실행됩니다. 이는 각 로그인이 터미널을 점유하고 브라우저에서 대기하기 때문입니다. 이전의 인증 시도 중 하나가 실패하더라도 모든 하네스는 시도되며, 그중 어느 하나라도 문제가 발생하면 실행이 주의가 필요하다고 보고됩니다. OpenCode의 Figma처럼 클라이언트 등록(client registration)이 먼저 발생하는 경우, 이는 로그인과 별도로 보고됩니다: 등록된 클라이언트는 아직 인증된 클라이언트가 아닙니다.
ivar mcp status는 어떤 서버가 어떤 하네스에서 자격 증명(credentials)을 가지고 있는지 출력합니다. 클라이언트 비밀(client secret)은 git 외부의 .ivar/secrets/mcp.env에 저장됩니다. 토큰은 절대 ivar.json에 들어가지 않으므로, 파일을 커밋해도 팀원이 자신의 ivar mcp auth를 실행한 후 동일한 서버 정보를 얻을 수 있습니다.
이게 필요할까요?
하네스가 하나이고 그 하네스에서 로그인이 작동하는 서버가 있다면, 아닙니다. 해당 서버를 그 하네스의 파일에 추가하고 로그인만 실행하면 됩니다. ivar는 여러 개의 하네스를 사용하거나, 팀이 동일한 서버를 공유해야 할 때, 또는 OpenCode의 Figma나 OMP의 모든 OAuth 서버처럼 로그인이 실패할 때 제 역할을 합니다.
제한 사항 (Limits)
- 세 개의 하네스: Claude Code, OpenCode 및 OMP.
- macOS와 Linux. Windows는 지원하지 않으며, WSL은 테스트되지 않았습니다.
- HTTP MCP 서버. Figma와 Linear는
ivar mcp auth가 실행된 서버입니다. 다른 OAuth 서버의 경우, Claude Code와 OpenCode는 자체 로그인 방식을 사용하고 OMP는 ivar가 실행하는 플로우를 사용합니다. 해당 서버가 이를 수용할지는 서버에 달려 있습니다.
- OAuth 플로우는 각 MCP 서버와 직접 통신합니다.
ivar는 중간에 자신만의 서버를 가지고 있지 않습니다.
그럼 레포지토리 추가하기
MCP 서버를 보관하는 홀은 또한 ivar가 리포지토리를 마운트하고 그 위에서 기능을 실행하며, 모든 세션이 동일한 서버를 읽는 곳입니다. quickstart에서는 첫 번째 리포지토리를 마운트합니다. MCP 가이드에서는 하네스별 전송(transports) 및 OAuth를 다룹니다.
관련 자료