Provider REST API
AnalyticsConnect Claude to Amplitude
Query Amplitude event segmentation, funnels, retention, active users and annotations. Toolspoke puts 9 of its actions behind one MCP endpoint that Claude, Cursor, and Codex all speak.
- Connection
- Provider REST API
- Authentication
- API key and secret
- Actions exposed
- 9
- Cost per call (typical)
- 1 credit
- Adapter
- Maintained by Toolspoke
Connected in three steps
- 1
Install Amplitude
Open the marketplace in your workspace, add Amplitude to the project your agents work in, and it appears on the gateway immediately.
- 2
Connect the credential
Authenticate with api key and secret. Where to get one, and what it has to be able to reach, is the next section.
- 3
Point your agent at the gateway
Give your client one address, https://toolspoke.com/mcp. Claude Code takes it as a command, Claude and Claude Desktop add it as a custom connector, and Cursor, Codex and VS Code each read it from a config file of their own.
.mcp.json{
"mcpServers": {
"toolspoke": {
"type": "http",
"url": "https://toolspoke.com/mcp"
}
}
}One block covers every tool you have installed. Amplitude shows up in the client as soon as your policy allows it, and so does everything else you install later.
Where the address goes, per client
- Claude Code
Run it in your project, then /mcp to sign in
claude mcp add --transport http toolspoke https://toolspoke.com/mcp- Claude and Claude Desktop
Settings, then Connectors, then Add custom connector
https://toolspoke.com/mcp- Cursor
~/.cursor/mcp.json, or .cursor/mcp.json for one project
{ "mcpServers": { "toolspoke": { "url": "https://toolspoke.com/mcp" } } }- Codex
~/.codex/config.toml
[mcp_servers.toolspoke] url = "https://toolspoke.com/mcp"- VS Code
.vscode/mcp.json, or the MCP: Add Server command
{ "servers": { "toolspoke": { "type": "http", "url": "https://toolspoke.com/mcp" } } }
What Amplitude asks for
API key and secret. You provide it once, when you install the connector. Toolspoke encrypts it at rest and decrypts it only for the length of a single call, and the gateway attaches it to the outbound request itself, so it is never part of the arguments an agent sends.
- API key and secret keyRequired
- Your project's API key, a colon, then its secret key. Amplitude → Settings → Projects → your project → General. Sent as HTTP Basic, key as username and secret as password. The secret key reads project data, so scope this to the one project this connection should reach.
- 1234567890abcdef1234567890abcdef:fedcba0987654321fedcba0987654321
- Region hostOptional
- https://amplitude.com for a standard account, https://analytics.eu.amplitude.com for an EU data-residency account. Not https://analytics.amplitude.com - that is the browser app and does not serve the REST API. A key issued in one region is unknown in the other, so the wrong host reports every project as missing rather than as misrouted.
- https://amplitude.com
What Claude can do in Amplitude
9 actions, each one declared and named by the connector rather than discovered at runtime. A workspace policy grants a person all of them, a hand-picked selection, everything on the read side, everything on the write side, or none.
- Reads
- 9Reads
- Writes
- 0Writes
- Destructive
- 0Destructive
Reads
9Fetches data and changes nothing.
list_event_typesList the event types visible in the project, each with a weekly total. Call this first to learn the exact event names the segmentation, funnel and retention actions need - Amplitude matches event_type literally, and a near-miss returns an empty series rather than an error. Hidden events are excluded.
event_segmentationThe general-purpose reporting action: count an event over a date range, optionally against a second event, segmented and grouped. `metric` picks what is counted - uniques (distinct users), totals (all occurrences), pct_dau, average, or formula for a ratio such as UNIQUES(A)/UNIQUES(B), which needs the formula argument and a second event. Dates are YYYYMMDD, both required. `interval` is Amplitude's own coding: 1 daily, 7 weekly, 30 monthly, -3600000 hourly, -300000 real-time, and the shorter the interval the shorter the window Amplitude will serve - real-time reaches back two days, hourly seven, daily a year.
funnel_analysisRun a conversion funnel over an ad-hoc list of steps. Give the steps in order as step_1 through step_5; only the first two are required and the rest are sent only when supplied. `mode` decides how strictly the order is read: ordered means the steps happened in that order, sequential means with nothing else in between, unordered means in any order. `conversion_window_seconds` is how long a user has to finish, defaulting to 30 days. Dates are YYYYMMDD.
retention_analysisMeasure how many users who did a starting action came back to do a returning action. start_event takes the literal _new for new users or _active for all users, as well as a real event type; returning_event takes _all for any event or _active for any active event. `retention_type` defaults to n-day; choose bracket to group days together, which then requires brackets, e.g. [[0,5]] for a Day 0 to Day 4 window. Dates are YYYYMMDD. Note the interval here has no hourly or real-time value - only 1, 7 or 30.
active_user_countsCount active or new users per day, week or month over a date range, optionally segmented and grouped. Use this for the plain "how many users" question, where event_segmentation would need an event to count. Dates are YYYYMMDD.
realtime_active_usersHow many users are active right now, in five-minute buckets over the last two days, with yesterday alongside today for comparison. Takes no arguments - Amplitude fixes the window and the granularity.
get_user_activityFetch one user's profile and their event stream, newest first. This returns a real person: their user ID, device IDs, country, region, city, last known coordinates and every user property on their profile, followed by the events they fired. Use it to explain one specific user's path, not to gather users - Amplitude rate-limits this endpoint and its sibling get_user_search separately from the rest, at ten concurrent queries and 360 an hour.
get_user_searchFind a user's Amplitude ID from an Amplitude ID, a device ID, a user ID or a user ID prefix. This is how you turn an identifier you already have into the amplitude_id that get_user_activity needs. Note that no match is not an error: Amplitude answers 200 with type "nomatch" and an empty matches array.
list_annotationsList the chart annotations on the project - the dated notes a team leaves on a release, an outage or a campaign launch. Read these before explaining a jump or a drop in any of the reporting actions above; the explanation is often already written down here. Filter by chart_id or by category, but not by both, and by a date window. Dates here are ISO 8601 with an offset, not the YYYYMMDD the query endpoints use.
What it will not do
Enforced by the gateway rather than left to convention, which is why each of these can be stated flatly.
- It cannot call anything else
- The 9 actions above are the whole of it. A call to any other name is refused before it reaches Amplitude rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time.
- It only reads
- Every action here reads. Nothing this connector can do changes anything in Amplitude.
- It reaches no further than your credential
- Toolspoke holds no access to Amplitude of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either.
- It never hears from Amplitude
- Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in Amplitude. An agent has to ask.
- It does not smooth over provider limits
- Toolspoke does not retry, queue or back off around Amplitude's own rate limits. A call that Amplitude refuses comes back to the agent as a failed call.
Before you connect it
What can Claude do in Amplitude?
9 named actions: 9 that only read. They include list_event_types, event_segmentation and funnel_analysis. Nothing outside that list is reachable: the connector declares each operation by name rather than proxying whatever an agent asks for.
What credentials does the Amplitude connector need?
API key and secret. The connector asks for api key and secret key, and optionally region host. Values are encrypted at rest and attached to the outbound request by the gateway, so they are never part of the arguments an agent sends and never reach the audit log.
Does the Amplitude connector work with Cursor and Codex, or only Claude?
Any client that speaks MCP, and every one of them gets the same 9 actions. There is a single address, https://toolspoke.com/mcp. Claude Code adds it with claude mcp add --transport http, Claude and Claude Desktop take it as a custom connector in settings, Cursor reads it from .cursor/mcp.json, Codex from ~/.codex/config.toml, and VS Code from .vscode/mcp.json. Each of them signs in to the gateway itself, so there is no key to paste.
What does the Amplitude connector not do?
The 9 actions above are the whole of it. A call to any other name is refused before it reaches Amplitude rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time. Every action here reads. Nothing this connector can do changes anything in Amplitude. Toolspoke holds no access to Amplitude of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either. Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in Amplitude. An agent has to ask. Toolspoke does not retry, queue or back off around Amplitude's own rate limits. A call that Amplitude refuses comes back to the agent as a failed call.
Can I limit which actions an agent can call?
Yes, in two places. The project switches Amplitude's actions on and off one at a time, for everyone in the project at once, and the screen groups them by read, write and destructive so turning off everything that deletes is one click. An individual agent key can then be narrowed further, to particular toolkits in a project and to particular actions in a toolkit. Whatever it was granted, a key never reaches a project its owner cannot.
What gets recorded when an agent calls Amplitude?
Every attempt, with the agent that made it and the person that agent belongs to, the full request payload, the response payload, the status, the duration, and the credits spent. Values whose key names a secret are masked out before the record is shown to anyone. An operation the connector marks as not retained never has its response body written at all, so the gateway keeps no second copy of what was read.