takt

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

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

ToolDescriptionPermission
list_sitesList every site across the authorized teams (no arguments).sites:read
get_summaryVisitors, sessions, pageviews, bounce rate, average duration.stats:read
get_timeseriesVisitors/pageviews over time, by hour or day.stats:read
get_breakdownTop values of a dimension (pages, sources, countries, devices…).stats:read
get_realtimeVisitors active in the last 5 minutes.stats:read
get_goalsConversions per goal.stats:read
get_funnelsStep-by-step funnel reports.funnels:read
get_revenueRevenue grouped by currency for a revenue event.stats:read
list_event_propertiesCustom property keys recorded for an event.stats:read
get_property_breakdownBreak 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.

Every tool call is metered as an API request of the target team. Past your plan's monthly quota the call fails with JSON-RPC error -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.