> For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.

# MCP Server

Connect Cresc to your AI client (Claude Desktop, an IDE, your own agent) so it
can read your release state directly and investigate alongside GitHub, Sentry or
CI. Everything is read-only — it never changes your releases.

## What you would use it for

**Find out why a device did not get an update**

> A device on native package 1.2.0 of my app (appKey xxx) never received the
> update — can you check?

The agent looks up which version that package currently serves, replays the
update decision, checks whether the patch artifacts are ready, and tells you
where it stops — outside the rollout, package paused, or the patch still
building.

**Confirm the state around a release**

> Which version does 1.2.0 serve right now, and what is the rollout percentage?

**Correlate with your other tools**

> Errors went up yesterday — compare the Sentry exceptions with the Cresc
> release history

**Check that a new version is healthy**

> Did 1.2.4 roll back anywhere since yesterday? Show its JS errors and map the
> most frequent one back to the source line

The agent sums up how the version was delivered and the download failures,
patch failures, activations and rollbacks clients reported, lists the JS errors
that version raised, and maps a stack back to your source with the source map
archived at publish time (needs `pushy:health:read`, see below).

## Getting started

### 1. Create a token

In the [Cresc console](https://admin.cresc.dev) open "MCP Server",
give it a name and a client label, **tick the apps it may read**, then copy the
token right away — it is shown only once.

Tokens get `pushy:apps:read` and `pushy:diagnose` by default, which is enough to
debug update delivery. To let the agent read version health and JS errors as
well, also tick `pushy:health:read`. Existing tokens do not gain it
automatically — create a new one.

### 2. Let your agent install it (recommended)

Copy the block below into your AI assistant (Claude Code, Cursor, Codex, Gemini
CLI — any of them). **Replace the token with your own first**; the agent will
find the right config location, install the server and verify it:

```text
Please install the Cresc hot-update MCP server in the client I am using.

Server details (fixed — do not change them):
- Name: cresc
- Transport: HTTP (Streamable HTTP — not stdio, not SSE)
- URL: https://api.cresc.dev/mcp
- Auth: request header  Authorization: Bearer <token>
- My token: pushy_mcp_xxxxxxxx   <- replace this with the token from the console

Steps to follow:

1. First work out which client I am in (Claude Code / Claude Desktop / Cursor /
   VS Code / Codex / Cline / Gemini CLI ...) and find its MCP config file or
   CLI. If you cannot tell, ask me — do not guess and write into a random one.
2. Add it the official way for that client. Prefer the official CLI when there
   is one (claude mcp add, codex mcp add, gemini mcp add); otherwise edit the
   config file: back it up first, keep every MCP server already listed there,
   and never overwrite the whole file.
3. If the client only supports stdio and cannot talk to a remote HTTP server,
   use the proxy instead:
   npx -y mcp-remote https://api.cresc.dev/mcp --header "Authorization: Bearer <token>"
4. The token is a secret: prefer user-level (global) config, and do not write it
   into a project file that git would commit. If it has to live in the project,
   confirm the file is in .gitignore and tell me.
5. Verify after installing: list the tools the cresc server exposes, then run one
   read-only query (for example, list the apps I have access to) and paste the
   result. A 401/403 means the token is invalid or no apps were ticked — tell me
   to create a new token in the console instead of retrying.
6. Finish with one line: which file you changed or which command you ran, and
   whether I need to restart the client.

For context: this MCP server is read-only. It only reads release state — it
never publishes a version and never changes any setting.
```

### 3. Or configure it by hand

With Claude Desktop:

```json
{
  "mcpServers": {
    "cresc": {
      "type": "http",
      "url": "https://api.cresc.dev/mcp",
      "headers": {
        "Authorization": "Bearer pushy_mcp_your_token"
      }
    }
  }
}
```

### 4. Just ask

Once connected, ask in plain language as in the scenarios above — you never need
to name a tool.

## What it can read

| Capability          | Description                                                                                                                                                                                                       |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| App list            | The apps the token is allowed to see                                                                                                                                                                              |
| Release topology    | The version each native package serves, plus any gray release and its percentage                                                                                                                                  |
| Update decision     | Replays the decision for a set of client parameters and explains the outcome                                                                                                                                      |
| Artifact status     | Whether the patch was generated, and whether its task failed                                                                                                                                                      |
| Request observation | Recent real requests per native package version: the build timestamps and content fingerprints clients report and their SDK versions, checked against the registered packages                                     |
| Version health      | Per OTA version, how updates were delivered and the download failures, patch failures, activations and rollbacks clients reported, plus cumulative devices observed (needs `pushy:health:read`, client v10.47.0+) |
| JS errors           | Error issues grouped by fingerprint, with stacks mapped to your source when a source map is archived (needs `pushy:health:read`, client v10.55.0+, see [JS error monitoring](/docs/errors.md))                    |

## Good to know

- **Read-only**: it never publishes a version, pauses an app or changes any
  setting;
- **Scoped per app**: grant only the apps you are debugging; a token can be
  revoked from the console at any time and stops working immediately;
- **Where the data goes**: results go to the AI client you authorized, which may
  forward them to the model provider you chose — Cresc controls neither;
- Responses never contain email addresses, IPs, device identifiers, secrets or
  payment data;
- **Error data**: messages, stacks and source snippets come from your own app
  code. URL query strings, email addresses, IPs and `token=`-style secrets are
  removed, but business context may remain; for the custom context passed to
  `captureException` only the field names are returned, never the values;
- **Rate limit**: mapping an error to source for the first time downloads the
  source map, limited to 30 per account every 10 minutes. Over the limit the raw
  stack is returned; errors already mapped are not affected.
