# Connect an AI agent

Invx is a remote MCP server. Once connected, your agent can issue invoices, look them up, repeat last month's invoice for a client and keep your client list current, using the same rules as the app.

```text
https://invx.app/api/mcp
```

There are two ways in.

## With a sign-in (custom connectors)

For apps that add a remote MCP server by URL, such as Claude's custom connectors:

1. Add a custom connector and paste the server URL above.
2. Your browser opens Invx. Sign in and choose **Allow**.
3. The connector can now read and write your invoices.

Removing the connector in that app stops that app from calling Invx, but Invx is not told: the tokens it was given, including the refresh token that mints new access tokens, stay valid until they expire. Invx has no self-service revoke for connectors yet. For a client you might need to cut off, use an API key instead: revoking a key takes effect on the next call.

No key to copy or store. Invx uses OAuth 2.1 with PKCE and Client ID Metadata Documents; there is no dynamic client registration.

## With an API key (CLIs and editors)

1. In Invx, open **Settings → MCP & API** and create a key. Choose *Read only* if the agent should only look things up. The key is shown once.
2. Add Invx to your client with the snippet below, replacing `invx_YOUR_KEY`.

### Claude Code

Run once in a terminal. The user scope makes Invx available in every project.

```bash
claude mcp add --transport http --scope user invx https://invx.app/api/mcp \
  --header "Authorization: Bearer invx_YOUR_KEY"
```

### Codex CLI

Keep the key in an environment variable; Codex reads it on every call.

```bash
export INVX_API_KEY=invx_YOUR_KEY
codex mcp add invx --url https://invx.app/api/mcp --bearer-token-env-var INVX_API_KEY
```

### Cursor

Add to ~/.cursor/mcp.json (or .cursor/mcp.json in a project).

```json
{
  "mcpServers": {
    "invx": {
      "url": "https://invx.app/api/mcp",
      "headers": {
        "Authorization": "Bearer invx_YOUR_KEY"
      }
    }
  }
}
```

### Claude Desktop

Add to claude_desktop_config.json (Settings → Developer → Edit config), then restart Claude. Needs Node.js.

```json
{
  "mcpServers": {
    "invx": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://invx.app/api/mcp",
        "--header",
        "Authorization:${INVX_AUTH}"
      ],
      "env": {
        "INVX_AUTH": "Bearer invx_YOUR_KEY"
      }
    }
  }
}
```

Any other client that supports remote MCP servers over Streamable HTTP works the same way: the URL above, plus the header `Authorization: Bearer invx_YOUR_KEY`.

## Try it

Ask your agent, in your own words:

- "Invoice Acme for 12 hours of design at 80 an hour, due in 30 days."
- "Duplicate my last invoice to Northwind with today's date."
- "What did I bill in September, by client?"
- "Get me the PDF link for invoice INV-0042."

Deleting needs the exact invoice number or client name, so a wrong guess deletes nothing.

## Next

- [Tool reference](/docs/mcp/tools): every tool, its inputs and its access level.
- [API keys](/docs/mcp/api-keys): access levels, expiry and revoking.
- [Limits and safety](/docs/mcp/limits).
