MCP server
Takt’s Model Context Protocol server lets any MCP-aware AI agent — Claude Desktop, Claude Code, Cursor, … — query your Takt analytics in natural language. Ask “how many visitors did example.com get this week?” and the agent calls the right read endpoint for you.
It is read-only, built on the HTTP Read API. The server is hosted by Takt: you point your MCP client at a remote URL and authorize access from your browser via OAuth 2.1 — nothing to install, no API key to generate or copy.
AI agent ──HTTP (MCP)──▶ Takt remote MCP server ──▶ your analytics Connecting
Point your MCP client at the remote URL https://taktlytics.com/mcp over HTTP transport.
With Claude Code:
claude mcp add --transport http takt https://taktlytics.com/mcp On first use, the client opens a browser window: you log into your Takt account (2FA included), then choose on the consent screen which teams (organizations) and which permissions to grant the agent. Once approved, the agent gets access to all authorized sites at once — no need to create a key or run one instance per site.
Other clients
Any client that speaks MCP over remote HTTP transport connects the same way, using the https://taktlytics.com/mcp URL. Clients that only speak local stdio can use a generic
bridge such as mcp-remote:
npx -y mcp-remote https://taktlytics.com/mcp Consent and permissions
The consent screen lets you grant access to all your teams (present and future) or pick team by team, each with the scopes you want. Only read scopes are offered: they are the only ones the tools below consume, so you cannot grant an agent any write power.
Rights are recomputed on every call: they are bounded by your real role in each organization, never by what the client asked for. Losing access to a team removes it from the agent immediately, without touching the consent.
You can revoke access at any time from Settings → Sessions → Connected apps. Tokens are short-lived and refreshed automatically; revoking cuts access immediately.
Tools
| Tool | Description | Permission |
|---|---|---|
list_sites | List every site across the authorized teams (no arguments). | sites:read |
get_summary | Visitors, sessions, pageviews, bounce rate, average duration. | stats:read |
get_timeseries | Visitors/pageviews over time, by hour or day. | stats:read |
get_breakdown | Top values of a dimension (pages, sources, countries, devices…). | stats:read |
get_realtime | Visitors active in the last 5 minutes. | stats:read |
get_goals | Conversions per goal. | stats:read |
get_funnels | Step-by-step funnel reports. | funnels:read |
get_revenue | Revenue grouped by currency for a revenue event. | stats:read |
list_event_properties | Custom property keys recorded for an event. | stats:read |
get_property_breakdown | Break down a custom property of an event by value. | stats:read |
Most tools accept a time filter: period (day, 7d, 30d, month, 6mo, 12mo), or
an explicit from/to range (YYYY-MM-DD), plus an optional tz (IANA timezone). Every
tool except list_sites requires an explicit domain: there is no default site, even when
the consent covers a single one.
-32002 — the MCP transport is not
REST, so this is not an HTTP status. Ingestion is never affected. list_sites spans several teams: those over quota are simply left out of the list (and not metered);
the call only fails when every one of them is over.