Wire any MCP client to Millimetric's /mcp (single-project) or /mcp/account (multi-project) endpoint. Transport is JSON-RPC 2.0 over HTTP — no SSE needed.
ak_live_…)millimetric-querymillimetric-trackEndpointAuthScopePlanPOST https://api.millimetric.ai/mcp``sk_live_… or rk_live_…One projectPro+POST https://api.millimetric.ai/mcp/account``ak_live_…All projects on the accountBusiness
pk_live_… keys are rejected with 403 key_kind_not_allowed. They ship in browser JS and must never grant analytics access.
Key you give the agentTools it getsrk_live_…``query_events, get_stats, top_sources, funnel, resourcessk_live_…the read tools above plus track_event``ak_live_…every read tool with optional project_id/ project_slug/ project_ids, plus list_projects and compare_projects
Default to rk_*. Only hand the agent sk_* if it must emit events.
Edit ~/.claude/config.json (or use the UI):
json
{
"mcpServers": {
"millimetric": {
"url": "https://api.millimetric.ai/mcp",
"transport": "http",
"headers": {
"Authorization": "Bearer rk_live_…"
}
}
}
}
Restart Claude. Then:
"Use millimetric.top_sources to show me the Facebook social-vs-paid split for the last 7 days."
~/.cursor/mcp.json:
json
{
"mcpServers": {
"millimetric": {
"url": "https://api.millimetric.ai/mcp",
"transport": "http",
"headers": { "Authorization": "Bearer rk_live_…" }
}
}
}
bash
npx @modelcontextprotocol/inspector
# URL: https://api.millimetric.ai/mcp (or http://localhost:8787/mcp for local dev)
# Header: Authorization: Bearer rk_live_…
json
{
"mcpServers": {
"millimetric-account": {
"url": "https://api.millimetric.ai/mcp/account",
"transport": "http",
"headers": { "Authorization": "Bearer ak_live_…" }
}
}
}
bash
# List available tools
curl -s -X POST https://api.millimetric.ai/mcp \
-H "Authorization: Bearer $MILLIMETRIC_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq
# Call top_sources directly
curl -s -X POST https://api.millimetric.ai/mcp \
-H "Authorization: Bearer $MILLIMETRIC_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{
"name":"top_sources",
"arguments":{
"from":"2026-05-01T00:00:00Z",
"to":"2026-06-01T00:00:00Z",
"breakdown":"source_medium",
"limit":20
}
}
}' | jq
/mcp)#ToolScopePurposetrack_eventingest ( sk_*)Emit a single event.query_eventsreadFilter raw events by date, event name, source, user.get_statsreadAggregations with metric, group_by, interval.top_sourcesreadTop sources/mediums with FB social-vs-paid split.funnelreadStep conversion analysis.
Resources: events://recent, schema://events.
/mcp/account)#Every read tool accepts optional project_id / project_slug / project_ids. Omit them to span every project the key can see — rows include a project_id column when the query is multi-project.
ToolPurposelist_projectsEvery project the key can read.query_eventsMulti-project event queries.get_statsGroup by project_id to compare apps.top_sourcesTop channels across one or all projects.compare_projectsRank projects by count or uniques.
Resources: projects://all, schema://events (across all accessible projects).
MCP tool results come back as content[] with stringified JSON:
json
{
"jsonrpc": "2.0", "id": 1,
"result": {
"content": [
{ "type": "text", "text": "[{\"source\":\"facebook\",\"medium\":\"paid\",\"events\":6,...}]" }
]
}
}
Agents JSON.parse the text to get rows.
CodeMeaningFix-32600invalid_requestBody isn't valid JSON-RPC.-32601method_not_foundUnknown method.-32602unknown_tool / unknown_resourceMisspelled tool/resource name.-32000tool_failed / insufficient_scopeUse a higher-scope key (e.g. sk_* for track_event).-32002plan_limitAccount-MCP requires Business; /mcp requires Pro+.-32004unknown_project_id / unknown_project_slugAccount-MCP only — project doesn't exist or key can't see it.-32005no_projects_visibleAccount-MCP key has zero accessible projects.HTTP 403key_kind_not_allowedYou used pk_*. Use rk_* / sk_* (or ak_* on /mcp/account).HTTP 403account_key_required``/mcp/account only takes ak_*.
When running the Worker locally:
bash
pnpm dev:api # http://localhost:8787
Point your MCP client at http://localhost:8787/mcp with the same Bearer header.
millimetric-trackmillimetric-query