Pulse MCP server
Connect Pulse to Claude, Claude Code, Cursor, or any MCP-compatible agent and ask growth questions where you already work: “@pulse why did revenue drop last week?” The same server sets Pulse up for you — your agent can install the SDK, generate connect links for your ad accounts, and verify that data is flowing.
Endpoint
https://mcp.pulse.pulsecircle.studio/mcp
Transport: streamable HTTP. Authentication: your Pulse API key (shown
once in the web app under Settings → API keys) in the Authorization
header.
Claude Code
claude mcp add --transport http pulse https://mcp.pulse.pulsecircle.studio/mcp \
--header "Authorization: Bearer YOUR_PULSE_API_KEY"
Cursor
Put this in .cursor/mcp.json in the project, or ~/.cursor/mcp.json to make
it available everywhere:
{
"mcpServers": {
"pulse": {
"url": "https://mcp.pulse.pulsecircle.studio/mcp",
"headers": {
"Authorization": "Bearer YOUR_PULSE_API_KEY"
}
}
}
}
If your Cursor build wants an explicit transport, add "type": "streamable-http"
alongside the URL. Treat mcp.json as a secret-bearing file: it holds a live key,
so keep it out of version control (.cursor/ in .gitignore), or use the global
~/.cursor/mcp.json instead of the project one.
Claude Desktop / other MCP clients
{
"mcpServers": {
"pulse": {
"type": "streamable-http",
"url": "https://mcp.pulse.pulsecircle.studio/mcp",
"headers": {
"Authorization": "Bearer YOUR_PULSE_API_KEY"
}
}
}
}
ChatGPT & claude.ai (OAuth — no API key)
Clients that connect over OAuth (ChatGPT connectors, the claude.ai web connectors) don’t take a pasted key — add the server by URL and it will send you to Pulse to sign in:
https://mcp.pulse.pulsecircle.studio/mcp
You’ll be redirected to Pulse, sign in (GitHub or an email link), pick the app to connect, and approve read-only access. The client registers itself automatically (dynamic client registration) and handles token refresh — nothing to copy. Revoke access any time by signing out of the client; the grant is scoped to the one app you chose.
Under the hood the server implements OAuth 2.1 (PKCE, pulse.read scope);
static API keys keep working for clients that prefer a header.
Tools
Setup
pulse_setup_guide(platform)— SDK installation steps with exact code snippets forweb,swift,kotlin, orreact-native. Your agent applies them to your codebase.pulse_connect(source)— a personal OAuth link for Meta Ads / Google Ads, or key-based instructions for RevenueCat / App Store / Google Play.pulse_verify()— did events arrive in the last 15 minutes, connector statuses, sync freshness. “All connected” or exactly what to fix.
Analytics
pulse_ask(question)— the full Pulse analyst: MRR, revenue, refunds, trials, campaign performance, LTV/CAC, funnels, anomalies, and “why did X change”. Every number in the answer is verified against your data before it reaches you.pulse_metrics_mrr(from, to),pulse_campaign_performance(from, to),pulse_funnel(from, to)— raw metric results for agents that prefer to read the numbers themselves.
Offline alternative (no network)
Some agents run behind an allow-list that blocks our domains outright. For those there is a second, local server delivered over npm instead of HTTP — it carries the setup and connection guides only (no account data, so no key needed):
npx @pulse-circle/mcp
{
"mcpServers": {
"pulse": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@pulse-circle/mcp"]
}
}
}
It is listed in the official MCP registry as studio.pulsecircle/pulse. Use the
hosted server above when you want pulse_ask and real numbers.
Privacy
The server sees only aggregated metrics — no end-user personal data. Every answer carries data-quality metadata (completeness and caveats), and AI answers never contain numbers that don’t come from your data.