OMP
Add an MCP server to OMP, see the .omp/mcp.json it generates for Figma and Linear, and authenticate without an OMP login command.
OMP reads its MCP server configurations from .omp/mcp.json at the hall root, ahead of opencode.json's mcp entries. Unlike Claude Code and OpenCode, OMP does not have a native CLI command for MCP authentication (omp mcp auth / login does not exist). Ivar manages the OAuth lifecycle internally for OMP and binds credentials into OMP's broker store.
curl -fsSL https://ivar.run/install?ref=docs-omp-mcp | shAdd an MCP server
Declare the server once in ivar.json. ivar writes it into each
provider's config, including .omp/mcp.json. figma and linear are
known names; any other HTTP server takes --url:
ivar mcp add figma
ivar mcp add sentry --url https://mcp.sentry.dev/mcp
ivar mcp auth figma --provider ompThe full flag list, including stdio servers with --command, is in the
MCP reference.
Configuration & naming
ivar maps canonical server names from ivar.json (figma, linear) to hall-qualified keys (<hall>-<server>) in .omp/mcp.json.
- Provider config path:
.omp/mcp.json - Canonical vs. qualified names: Declared as
figmaandlinearinivar.json; mapped toacme-figmaandacme-linearin.omp/mcp.json(for a hall namedacme). - OAuth auth blocks: Every
httpserver gets anauthblock with"type": "oauth"and"credentialId": "mcp_oauth_ivar:<hall>-<server>". When the server's OAuth metadata has atoken_url, the block also carriesclientId,clientSecret(as${VAR}),tokenUrl, andresource.
Generated .omp/mcp.json
{
"mcpServers": {
"acme-linear": {
"type": "http",
"url": "https://mcp.linear.app/mcp",
"auth": {
"type": "oauth",
"credentialId": "mcp_oauth_ivar:acme-linear",
"clientId": "<generated_client_id>",
"tokenUrl": "<discovered-token-endpoint>"
}
},
"acme-figma": {
"type": "http",
"url": "https://mcp.figma.com/mcp",
"auth": {
"type": "oauth",
"credentialId": "mcp_oauth_ivar:acme-figma",
"clientId": "<generated_client_id>",
"clientSecret": "${IVAR_MCP_ACME_FIGMA_SECRET}",
"tokenUrl": "<discovered-token-endpoint>"
}
}
}
}Authentication
Because OMP provides no direct MCP login command, all MCP authentication for OMP is performed via ivar mcp auth.
Ivar executes its internal OAuth PKCE workflow in the browser, exchanges tokens, and then imports the credentials into OMP under the hall's credential id (mcp_oauth_ivar:<hall>-<server>), declared in .omp/mcp.json as auth.credentialId. To switch accounts, run ivar mcp auth <server> --provider omp again; it replaces the previous credential. After upgrading ivar, run ivar mcp auth <server> --provider omp once in each hall; until then omp reports the server as missing.
Linear
# Via Ivar (canonical name)
ivar mcp auth linear --provider ompIvar performs dynamic client registration against Linear, completes the PKCE flow, and imports the tokens into OMP under the hall's credential id (mcp_oauth_ivar:<hall>-<server>), declared in .omp/mcp.json as auth.credentialId.
Figma
# Via Ivar (canonical name)
ivar mcp auth figma --provider ompIvar pre-registers an allowlisted client (Codex), stores the client secret in .ivar/secrets/mcp.env, executes the PKCE exchange, and imports the tokens into OMP under the hall's credential id (mcp_oauth_ivar:<hall>-<server>), declared in .omp/mcp.json as auth.credentialId.
Authenticate all providers
To authenticate all configured providers for a server at once:
ivar mcp auth figma --all-providersStatus inspection
OMP status is queried via omp token. Because OMP has no CLI mcp list command, ivar mcp status --live queries the local token broker and reports the source as local.
OAuth ownership & credentials
| Aspect | Linear | Figma |
|---|---|---|
| OAuth ownership | Ivar (internal OAuth PKCE) | Ivar (internal OAuth PKCE) |
| Direct CLI command | None (OMP has no native MCP login) | None (OMP has no native MCP login) |
| Preregistration by Ivar | Dynamic client registration (/register) | Yes (client_name: "Codex") |
| Credential storage | omp auth-broker (per hall) | omp auth-broker (per hall) |
| Secret location | None | .ivar/secrets/mcp.env (IVAR_MCP_ACME_FIGMA_SECRET) |