# Add the analyst to Claude

> The AI spend analyst lives in Claude, Claude Code, Cursor and ChatGPT through Immiscible's MCP server. Ask it what you spent on AI, what is being wasted and which keys nobody is watching. When it wants to change something, a person approves first.

Source: https://immiscible.fly.dev/docs/analyst

The analyst is five tools on Immiscible's MCP server at `https://immiscible.fly.dev/mcp`. Add the server to your assistant, and you can ask it, in your own words, what your company spent on AI last month, what cheaper models or caching would have cost, and which API keys nobody is watching. It answers from your own bills, through the same AI check as [https://immiscible.fly.dev/check](https://immiscible.fly.dev/check).

It can also ask to set a monthly budget or to switch a key off. It never does either on its own: a person approves each one, in Slack, Teams or the console, and the analyst hands back a signed receipt once it is done.

## Add it 

You need an Immiscible workspace with some spend in it: a provider's read-only admin key or a usage export, connected in the console under Spend, then Bills, or traffic through the gateway. For the keys, connect the providers under Settings, For engineers, Keys. The analyst answers for the person it acts for, and spend is visible to owners, admins and analysts. Someone with another role will be told so.

Claude Code:

```bash
claude mcp add --transport http immiscible https://immiscible.fly.dev/mcp \
  --header "Authorization: Bearer $IMMISCIBLE_AGENT_KEY"
```

Claude (web and desktop):

```text
Settings, Connectors, Add custom connector
Name: Immiscible
URL:  https://immiscible.fly.dev/mcp
Then sign in, and choose the agent the connection acts as.
```

Claude Desktop (config file):

```json
{
  "mcpServers": {
    "immiscible": {
      "command": "node",
      "args": ["/path/to/immiscible-sdks/packages/immiscible-desktop/server/index.mjs"],
      "env": { "IMMISCIBLE_URL": "https://immiscible.fly.dev", "IMMISCIBLE_AGENT_KEY": "ask_..." }
    }
  }
}
```

Cursor:

```json
{
  "mcpServers": {
    "immiscible": {
      "url": "https://immiscible.fly.dev/mcp",
      "headers": { "Authorization": "Bearer ${env:IMMISCIBLE_AGENT_KEY}" }
    }
  }
}
```

ChatGPT:

```text
Add https://immiscible.fly.dev/mcp as a custom connector, where your plan allows one,
and sign in. The connection acts as the agent you choose.
```

- **Claude Code**: `npx immiscible init` makes the agent and writes `IMMISCIBLE_AGENT_KEY` to `.env`; load it with `export $(grep IMMISCIBLE_ .env | xargs)`, then run the command. `npx immiscible mcp --client claude-code` prints it for your own server.
- **Claude on the web and Claude Desktop**: the custom connector signs in with OAuth, so no key is pasted. The config file is the other way: it runs the bridge from `packages/immiscible-desktop`, which has no dependencies, with the agent key in its environment. Claude Desktop reads `claude_desktop_config.json`, under Settings, Developer.
- **Cursor**: the entry goes in `.cursor/mcp.json`, or `~/.cursor/mcp.json` for every project. `npx immiscible mcp --client cursor` prints it with a one-click install link.
- **ChatGPT**: the same server, through a custom connector and OAuth. The tools that change something come back "waiting for approval" whatever the assistant does, and a person in your workspace decides.

Every client, with the config file paths, is in [add the MCP server](https://immiscible.fly.dev/docs/answers/add-the-mcp-server.md).

## Then paste this 

```text
You can use Immiscible's spend analyst tools. Tell me what we spent on AI in
the last 30 days and where it went (spend_summary), what could have been
cheaper (find_waste), and which API keys nobody is watching (unwatched_keys).
Call every saving an estimate and say "up to"; never add the routing and
caching figures together. End with at most three things to do. Do not change
anything unless I ask. If I ask you to set a budget or switch a key off, use
set_budget or revoke_key, tell me it is waiting for a person to approve, and
only finish it once check_action_status says allow.
```

## What it can do 

| Tool | What it does | Changes anything |
|---|---|---|
| `spend_summary` | The last 30 days of AI spend, by provider, model, team or key, and a month-end forecast once there are 14 recent days | no |
| `find_waste` | What cheaper models (routing) and caching could have saved, each an upper bound labelled as an estimate with its method; the five biggest cost drivers; whether a budget is missing | no |
| `unwatched_keys` | Keys that still work but have not been used in 90 days, have no named owner, or sit on a personal email address, each with its redacted value, owner, last use and spend | no |
| `set_budget` | Asks for a monthly budget for the workspace or a team. A person approves it first | yes, once approved |
| `revoke_key` | Asks to switch off a key from `unwatched_keys`. A person approves it, and then an owner confirms it in the console before the key stops working at the provider | yes, once approved and confirmed |

The three that read are marked read only, and the two that act are marked destructive, so your assistant knows which is which.

## How it asks before it acts 

A change goes through the same gate as every agent's request:

1. The assistant calls `set_budget` or `revoke_key`. Nothing changes. Immiscible records the request and asks a person, in Slack, Teams or the console, with the amount or the key written out.
2. The assistant tells you it is waiting, and checks with `check_action_status`.
3. Once a person approves, the assistant calls the same tool again with the `actionId`. Exactly what was approved is applied, once, and the answer carries the signed receipt, which anyone can check at `https://immiscible.fly.dev/v1/verify`.

For the analyst to ask at all, its agent needs the **Spend analyst** rule: in the console, open Rules ([https://immiscible.fly.dev/app/mandates](https://immiscible.fly.dev/app/mandates)) and add it to that agent. If the agent acts for you and the workspace has another owner, they confirm the rule first, as with any rule that gives an agent something new. Without the rule, the request is refused and the assistant says which rule to add. With it, every budget and key change still goes to a person; the rule only lets the analyst ask.

A budget can be approved by an owner or an admin. Switching a key off needs an owner to confirm it after the approval, and a different owner where there is more than one, as every revocation in [discovery](https://immiscible.fly.dev/docs/guides/discovery.md) does.

## What it cannot see 

- Prompts and answers. The savings are estimates of the most they could be, not what you would have saved.
- Keys from providers you have not connected for discovery, and agents that use keys you never gave us.
- Spend on tools billed by seat, such as Copilot.
- Anything before the 30 days it reads.

## Directory listings 

As of 6 October 2026, the analyst is not listed in any directory: not in Claude's connector directory, the ChatGPT app directory, Cursor's directory or the MCP Registry. The `server.json` for the MCP Registry is ready in the repository but has not been published. Until a listing is live, add the server by its address, as above. We will say here when that changes, and we will not put a button on the site for a listing that is not live.
