> For the complete documentation index, see [llms.txt](https://docs.amply.tools/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.amply.tools/reference/mcp-tools.md).

# MCP tools

Amply hosts an MCP server, so an AI assistant can work in your Amply account on your behalf: set an app up, author campaigns, check analytics, and manage price changes. This page lists what it can do. For why you would use it, see [AI-assisted integration](/getting-started/ai-assisted-integration.md).

There is nothing to install — you point your assistant at Amply.

## Connecting

{% stepper %}
{% step %}

### Add the server

```bash
claude mcp add --transport http amply https://api.amply.tools/mcp
```

Any client that supports a remote MCP server over HTTP takes the same URL.
{% endstep %}

{% step %}

### Authenticate

Run `/mcp` in Claude Code and choose to authenticate. A browser window opens and you sign in to Amply if you are not already signed in.
{% endstep %}

{% step %}

### Approve what it may do

The consent screen lists everything your client asked for and names the host that will receive the access. Read the list, then allow or decline — it is one decision, not a permission-by-permission choice. The table below explains each line.
{% endstep %}
{% endstepper %}

You never give the assistant your password. Your client holds a short-lived access token, and revoking the connection in Amply cuts that token off immediately. The one thing revoking does not undo is an SDK API key the assistant obtained while connected — a key is a credential in its own right and keeps working until you delete it.

{% hint style="info" %}
You may see two notices, and both are expected. One says the result comes back on `localhost`, so only continue if you started the connection yourself. The other says your client registered itself with Amply rather than being pre-approved, so its name and logo are not verified — most MCP clients work this way.

The box just above the buttons always names the host that will receive the access. A client can copy a name and a logo but not that host, so it is the line worth reading.
{% endhint %}

## What you approve

You can revoke the whole connection at any time in the Amply admin, under **Profile settings → Connected apps**.

| Permission                            | What it allows                                                                                                                                                                                                                                                                                             |
| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| View projects and campaigns           | Read-only access to your projects and the campaigns in them.                                                                                                                                                                                                                                               |
| Create draft campaigns                | Drafts only. This permission on its own can never launch a live campaign.                                                                                                                                                                                                                                  |
| View analytics                        | Active users for your apps, impressions and resolutions for your campaigns.                                                                                                                                                                                                                                |
| Start and stop campaigns              | Decides whether real users see a campaign.                                                                                                                                                                                                                                                                 |
| View prices                           | Your product prices and any pending price changes.                                                                                                                                                                                                                                                         |
| Change draft prices                   | Create, change and delete draft price changes and your organization's custom price indexes. Drafts change nothing on their own — sending one to the stores needs the permission below.                                                                                                                     |
| Send price changes to the stores      | Sends price changes to the App Store and Google Play, and cancels or retries ones already sent. Prices really change for customers, and this cannot be undone.                                                                                                                                             |
| Register apps and read their API keys | Creates projects and applications and reads or creates their SDK API keys. Only an organization administrator can use the creating half. **An API key keeps working after you disconnect the assistant** — revoking the connection does not revoke a key, so remove a key you no longer want in the admin. |

## Setting an app up

These are what let an assistant integrate the SDK without you copying values out of the admin.

| Tool                 | What it does                                                                                                                                                  |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `project_create`     | Create a project. Refused if your plan's limit on projects is reached.                                                                                        |
| `applications_list`  | List the applications in a project, with their ids.                                                                                                           |
| `application_create` | Register an application and get its `appId` **and its first API key** in one step. Takes the bundle id — which must match the app exactly — and the platform. |
| `api_keys_list`      | Read an application's API keys, secrets included.                                                                                                             |
| `api_key_create`     | Create an additional key pair for an application. The existing keys keep working.                                                                             |

{% hint style="info" %}
**iOS and Android are two separate applications**, each with its own key pair, even when they share a bundle id. An app that ships on both stores needs both registered, and the SDK initialised with the pair matching the platform it is running on.

Registering the same bundle id and platform twice is refused rather than duplicated, so an assistant re-running a set-up finds the existing application instead of creating a second one.
{% endhint %}

{% hint style="warning" %}
A brand-new key can report events straight away, but campaigns only start reaching it once the first campaign in that project is activated. An empty campaign list on a fresh app is expected, not a broken key.
{% endhint %}

## Projects and campaigns

| Tool                | What it does                                                                                                                              |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `projects_list`     | List the projects you have access to.                                                                                                     |
| `campaigns_list`    | List campaigns in a project. Takes the project, an optional name search, and a result limit.                                              |
| `campaign_get`      | Read one campaign in full — type, state, triggering, targeting and content.                                                               |
| `campaign_create`   | Create a campaign. Always a draft, never live. Needs a project, a name, a type and a triggering rule; targeting and content are optional. |
| `campaign_activate` | Publish a draft so real users can receive it. Refused if your plan's limit on active campaigns is reached.                                |
| `campaign_stop`     | Stop a live campaign. As in the admin, a stopped campaign does not go back to draft.                                                      |

There is also `amply_ping`, a connection check that needs no permission at all.

Triggering and targeting have their own vocabulary — repeat modes, frequency limits, comparison operators. Your assistant can read it from Amply directly: the server publishes a campaign targeting reference with worked examples, so you do not have to describe the format to it.

## Analytics

| Tool                      | What it does                                                     |
| ------------------------- | ---------------------------------------------------------------- |
| `statistics_active_users` | Daily or monthly active users for a project, over a date range.  |
| `campaign_statistics`     | Impressions and resolutions for one campaign, over a date range. |

Date ranges are inclusive and may span at most a year.

## Price management

These mirror the [price management](/price-management/price-management.md) screens.

{% hint style="info" %}
Price management has to be on your plan, and the price-index tools need it as a separate addition. Without it the tools still appear in your client's list and refuse when called — what your client can see is decided by the permissions you granted, not by your plan.
{% endhint %}

| Tool                                                                                   | What it does                                                            |
| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| `price_products_list`                                                                  | Products for an application.                                            |
| `price_product_prices`                                                                 | Current prices for one product.                                         |
| `price_calculate`                                                                      | Preview what a price change would produce, storing nothing.             |
| `price_change_save`                                                                    | Save a price change as a draft batch.                                   |
| `price_entry_update`                                                                   | Change or exclude one territory inside a draft batch.                   |
| `price_batches_list`, `price_batch_get`                                                | Find and inspect price-change batches.                                  |
| `price_batch_delete`                                                                   | Delete a draft batch.                                                   |
| `price_indexes_list`, `price_index_create`, `price_index_update`, `price_index_delete` | Manage your custom [price indexes](/price-management/price-indexes.md). |
| `price_territories_list`                                                               | The territories available for an application.                           |
| `price_batch_activate`                                                                 | Send a batch to the App Store and Google Play.                          |
| `price_batch_cancel`, `price_batch_retry`, `price_batch_resume`                        | Control a batch that has already been sent.                             |

{% hint style="warning" %}
Anything that dispatches to the stores asks the assistant to confirm how many territories it is about to change. A call that has the count wrong fails instead of going through.
{% endhint %}

## What you still do in the admin

Some things are not available over MCP yet. If an assistant tells you it cannot do one of these, it is right rather than broken.

* **Editing a campaign.** There is no edit tool, so an assistant that gets a draft wrong creates another draft rather than correcting the first. Finish or fix a campaign in the admin.
* **Targeting beyond the basics.** On create, an assistant can target by country, application, app version and OS version. Custom properties, install date and event-history conditions are authored in the admin — see [targeting an audience](/user-guide/targeting-an-audience.md).
* **Filtering a trigger on event properties.** An assistant can trigger a campaign on an event by name, but not on a specific property of that event. A campaign that depends on such a filter — "when `subscription_status` changes to `expired`" rather than "whenever it changes" — has to be built in the admin, or it will fire more often than you meant.

## Migrating from the old local server

Amply used to publish a local MCP server as an npm package, `@amplytools/amply-mcp`. It ran on your machine and signed in with your email and password.

{% hint style="danger" %}
That package is retired and no longer works. Every version is deprecated on npm.
{% endhint %}

If you still have it installed, remove it and connect to the hosted server with the command above. Then delete `~/.amply/credentials.json` — it holds a live sign-in token for your Amply account.

Nothing else carries over. The tools were renamed, so a script or prompt that called the old ones by name has to be pointed at the tool list on this page instead — your assistant reads that list from the server itself, so in practice you just describe what you want and it finds the right call. The old package's repository is archived and no longer describes the hosted server.

## Related

* [AI-assisted integration](/getting-started/ai-assisted-integration.md) — what this is for and how it fits an integration
* [Events](/reference/events.md) — the system events campaigns can trigger on
* [API reference](/reference/api-reference.md) — the underlying REST contract
