Skip to main content
Glama
kargnas

opencode-figma-for-actually-codex

by kargnas
README.md
# opencode-figma-for-actually-codex

Local MCP bridge that exposes the ChatGPT Figma connector to OpenCode without
launching Codex.

This package is useful when OpenCode cannot complete Figma's remote MCP OAuth
flow directly, but the same Figma connector is already authenticated in the
ChatGPT/Codex account file.

## How it works

- Reads the existing ChatGPT auth file from `~/.codex/auth.json`.
- Calls ChatGPT's connector MCP endpoint directly.
- Filters the upstream tool list to the Figma connector only.
- Exposes those tools over stdio as a local MCP server for OpenCode.
- Refreshes the ChatGPT access token from the same auth file when it is close to
  expiry.

It does not start Codex, call `codex mcp-server`, or require the Codex app to be
running.

## OpenCode config

From GitHub:

```jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "figma": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "github:kargnas/opencode-figma-for-actually-codex"
      ],
      "enabled": true,
      "timeout": 60000
    }
  }
}
```

After publishing to npm, the command can be shortened to:

```jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "figma": {
      "type": "local",
      "command": ["npx", "-y", "opencode-figma-for-actually-codex"],
      "enabled": true,
      "timeout": 60000
    }
  }
}
```

For local development:

```jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "figma": {
      "type": "local",
      "command": [
        "node",
        "/path/to/opencode-figma-for-actually-codex/bin/chatgpt-figma-mcp.mjs"
      ],
      "enabled": true,
      "timeout": 60000
    }
  }
}
```

## Prerequisites

The default auth source is `~/.codex/auth.json`, and it must contain a ChatGPT
login with `tokens.access_token`. The Figma connector must already be connected
to that ChatGPT account.

Supported environment variables:

| Variable | Default |
| --- | --- |
| `CODEX_AUTH_FILE` | `~/.codex/auth.json` |
| `CHATGPT_CONNECTORS_MCP_URL` | `https://chatgpt.com/backend-api/wham/apps` |
| `CHATGPT_AUTH_TOKEN_URL` | `https://auth.openai.com/oauth/token` |
| `CODEX_CLIENT_ID` | Codex ChatGPT OAuth public client id |
| `CHATGPT_FIGMA_MCP_DEBUG` | unset |

## Development

```sh
npm run check
npm run smoke
npm run pack:dry
```

`npm run smoke` connects to the live ChatGPT connector endpoint and verifies
that Figma tools can be listed.

## Security

Do not commit `~/.codex/auth.json`, exported account files, token caches, or
debug logs that contain credentials. This package reads the local auth file at
runtime and does not need secrets in `opencode.jsonc`.