---
title: Connect a client
description: Settings for adding the AINOX App MCP server to Claude Code, Cursor, VS Code, and Codex, or calling it over plain HTTP.
---

Every client needs the same two things: the endpoint and your API key in an `Authorization` header. The examples read the key from an `AINOX_API_KEY` environment variable so it stays out of files you might commit.

```sh
export AINOX_API_KEY="paste-your-key-here"
```

**Claude Code**

Add it for yourself, in every project:

```sh
claude mcp add --transport http --scope user ainox https://app-builder.poring.arkcube.com/api/mcp/code/mcp \
  --header "Authorization: Bearer $AINOX_API_KEY"
```

Or share it with a repository in `.mcp.json`. Claude Code expands `${AINOX_API_KEY}` when it starts, so each teammate uses their own key:

```json .mcp.json
{
  "mcpServers": {
    "ainox": {
      "type": "http",
      "url": "https://app-builder.poring.arkcube.com/api/mcp/code/mcp",
      "headers": { "Authorization": "Bearer ${AINOX_API_KEY}" }
    }
  }
}
```

Run `/mcp` inside Claude Code to check that `ainox` is connected.

**Cursor**

Add the server to `~/.cursor/mcp.json` for every project, or `.cursor/mcp.json` for one:

```json mcp.json
{
  "mcpServers": {
    "ainox": {
      "url": "https://app-builder.poring.arkcube.com/api/mcp/code/mcp",
      "headers": { "Authorization": "Bearer ${env:AINOX_API_KEY}" }
    }
  }
}
```

Cursor reads the variable from the environment it was launched in, so start it from a shell where `AINOX_API_KEY` is set.

**VS Code**

Add the server to `.vscode/mcp.json`. VS Code prompts for the key the first time and stores it securely:

```json .vscode/mcp.json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "ainox-api-key",
      "description": "AINOX App API key",
      "password": true
    }
  ],
  "servers": {
    "ainox": {
      "type": "http",
      "url": "https://app-builder.poring.arkcube.com/api/mcp/code/mcp",
      "headers": { "Authorization": "Bearer ${input:ainox-api-key}" }
    }
  }
}
```

**Codex**

Add the server to `~/.codex/config.toml`. Codex sends the variable's value as the bearer token:

```toml ~/.codex/config.toml
[mcp_servers.ainox]
url = "https://app-builder.poring.arkcube.com/api/mcp/code/mcp"
bearer_token_env_var = "AINOX_API_KEY"
```

**HTTP**

Each request is a JSON-RPC message posted to the endpoint. The `Accept` header must list both JSON and event streams:

```sh
curl -s https://app-builder.poring.arkcube.com/api/mcp/code/mcp \
  -H "Authorization: Bearer $AINOX_API_KEY" \
  -H "Accept: application/json, text/event-stream" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_threads","arguments":{}}}'
```

The transport is stateless, so you can call `tools/list` or `tools/call` directly without an `initialize` handshake. A tool's result is in `result.structuredContent`. When `result.isError` is `true`, `result.content[0].text` is a JSON string whose `message` field holds the error.

## Check the connection

Ask your agent to "list my ainox threads". It should call `list_threads` and show your most recent chats. If it reports `Missing or invalid API key`, see [Troubleshooting](/mcp/troubleshooting).
