Integrations

MCP — plug SignalGuide into Claude, ChatGPT, Cursor.

Drop SignalGuide's endpoint into any MCP client, approve the connection in a browser tab, and your AI assistant can answer questions about your traffic. Read-only, scoped to your sites, revokable any time.

Two ways to connect
OAuth is the default and the easiest — one browser click, no tokens to paste. A manual bearer token is still available for CLI scripts, curl testing, or clients that don't support OAuth yet.

What is MCP

The Model Context Protocol is an open standard AI assistants use to call external data and tools. SignalGuide's MCP server exposes eight read-only tools that return analyst-quality intelligence about your sites.

Prerequisites

A SignalGuide account with at least one connected site. If you haven't done that yet, start with Onboarding. You'll need a site generating at least one snapshot for the tools to return anything useful.

Setup — OAuth (recommended)

OAuth 2.1 clients discover SignalGuide automatically — no tokens, no config files. This works in Claude Desktop (recent versions), Cursor, and any client that implements the MCP authorization spec.

01

Add the MCP server URL

In your client, add a remote MCP server with the URL https://api.signalguide.io/mcp/sse. Nothing else to type — no headers, no tokens.

02

Approve in your browser

The client opens https://api.signalguide.io/oauth/consent in a browser tab. If you're already signed into SignalGuide, you'll see a consent screen listing the client's name and what it's allowed to read. Click Approve.

First time?
If you don't have a SignalGuide account yet, the consent page bounces through Google sign-in first, then lands on the consent screen. One flow, one approval.
03

Ask a question

The browser hands control back to the client, which now has an access token and can call SignalGuide's tools on your behalf. Try: “What's the biggest problem on my site right now?”

Access tokens last one hour; the client refreshes them transparently. Revoke any connected app any time from Settings → MCP → Connected apps.

Setup — manual token (fallback)

For clients without OAuth support, CLI scripts, and curl testing, you can still paste a long-lived bearer token.

01

Create a token

Open Settings, go to the MCP tab, scroll to Manual tokens, click Create token. Optionally give it a label (e.g. “curl testing”) so you can tell it apart later.

Shown once
The raw token is revealed exactly one time, immediately after creation. We only store a SHA-256 hash of it — there's no way to retrieve it later. Copy it somewhere safe, or just generate a new one if you lose it.
02

Paste into your MCP client

Tokens start with sgm_. Configs for the common clients are in the next section. The authorization header is Bearer <your token>; the SSE endpoint is https://api.signalguide.io/mcp/sse.

03

Restart the client

Claude Desktop and Cursor re-read their config on launch. Quit fully and reopen. ChatGPT picks up remote connectors immediately after you add them in the UI.

Client configs

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows. Add the signalguide entry under mcpServers:

JSON
{
  "mcpServers": {
    "signalguide": {
      "url": "https://api.signalguide.io/mcp/sse",
      "transport": "sse",
      "headers": {
        "Authorization": "Bearer sgm_YOUR_TOKEN_HERE"
      }
    }
  }
}
Older Claude Desktop builds
Some Claude Desktop versions don't speak remote SSE directly and need the mcp-remote bridge. If the direct config above doesn't work, use this shape instead:
JSON
{
  "mcpServers": {
    "signalguide": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.signalguide.io/mcp/sse",
        "--header",
        "Authorization: Bearer sgm_YOUR_TOKEN_HERE"
      ]
    }
  }
}

Cursor

Edit ~/.cursor/mcp.json (global) or .cursor/mcp.json in your project.

JSON
{
  "mcpServers": {
    "signalguide": {
      "url": "https://api.signalguide.io/mcp/sse",
      "transport": "sse",
      "headers": {
        "Authorization": "Bearer sgm_YOUR_TOKEN_HERE"
      }
    }
  }
}

ChatGPT

ChatGPT supports remote MCP servers on Team, Enterprise, and Pro plans via Settings → Connectors → Add connector. Use these values:

TEXT
Name:           SignalGuide
Server URL:     https://api.signalguide.io/mcp/sse
Authentication: Bearer token
Bearer token:   sgm_YOUR_TOKEN_HERE

Any MCP client

The server speaks MCP over SSE. Two endpoints, both under /mcp:

TEXT
GET  https://api.signalguide.io/mcp/sse          # open the SSE event stream
POST https://api.signalguide.io/mcp/messages/   # JSON-RPC back-channel

Header on every request:
  Authorization: Bearer sgm_YOUR_TOKEN_HERE

Tool reference

Eight tools, all read-only. The assistant picks which ones to call based on your prompt — you don't invoke them directly.

ToolWhat it returns
list_sites()Every site the authenticated user owns — id, name, GA4 property, GSC URL, business context. Call first when you don't know the site_id.
get_latest_report(site_id)Full briefing: pulse metrics, red flags, opportunities, cluster summary, AI referral breakdown. Structured equivalent of the scheduled email.
get_findings(site_id, priority?, limit?)Red flags from the latest snapshot. Filter by priority (“P0”, “P1”, “P2”) or omit for all.
get_cluster_performance(site_id, cluster?)Content cluster metrics — views, impressions, clicks, avg position, bounce, AI referral share. Pass a cluster name to filter.
get_ai_referrals(site_id)Sessions from ChatGPT, Gemini, Perplexity, Claude, and other AI sources, with share percentages and top landing pages per source.
get_conversion_pages(site_id)Your configured conversion pages merged with their snapshot metrics and source-funnel conversion rates per channel.
compare_periods(site_id)Latest snapshot vs the one before — absolute and percentage deltas for views, sessions, users, and bounce rate. Answers “what changed?”
query_pages(site_id, min_views?, max_bounce?, path_contains?, sort_by?, limit?)Ad-hoc page-level query against the latest snapshot. Sort by views, sessions, bounce_rate, gsc_impressions, or gsc_clicks.

Example prompts

Paste any of these into Claude, ChatGPT, or Cursor after the server is connected. The assistant will chain tool calls and summarize.

  • “What's the biggest problem on my site right now?”
  • “Compare the last 7 days to the week before — what changed?”
  • “Which of my pages have the highest bounce rate with more than 100 views?”
  • “How much traffic am I getting from ChatGPT and Perplexity this period?”
  • “Which of my content clusters are gaining momentum?”
  • “Show me P0 and P1 findings across all my sites.”
  • “How are my conversion pages performing and where's the conversion coming from?”
  • “Pull the top 20 pages by GSC impressions and tell me which ones have bad CTR.”

Security

Read-only. The server exposes eight query tools and zero mutations. Nothing an AI client does through MCP can write to your Google accounts or change your SignalGuide config.

Scoped per user. Every tool pulls user_id from the verified bearer token, not from arguments. The site lookup enforces Site.user_id == user_id, so a token can read every site you own and nothing from another user. Passing a foreign site_id returns a generic Site <id> not found — it won't reveal whether that id exists.

Hashed at rest. Tokens are stored only as SHA-256 hashes. If you lose a token, generate a new one — there's no recovery.

Revoke anytime. For OAuth clients, Settings → MCP → Connected appsDisconnect. For manual tokens, scroll to Manual tokens and click Revoke. Either path is instant; the next request gets a 401.

OAuth details. Public PKCE clients only (no client secrets). Access tokens last one hour, refresh tokens 30 days and rotate on every use — replaying an old refresh token revokes the whole chain. The only supported scope today is mcp:read.

Troubleshooting

401 Unauthorized

The response body looks like {"error":"unauthorized","detail":"..."}. Causes: no Authorization header, a header that doesn't start with Bearer , or a token that's been revoked or mistyped. Generate a new one and update your config.

Tools not appearing in Claude Desktop

Almost always a config-file syntax error (trailing comma, missing quote) or Claude Desktop wasn't fully quit before reopening. Validate the JSON, quit completely from the menu bar, relaunch.

“Site not found” when calling a tool

You passed a site_id the token can't see. Ask the assistant to call list_sites first and pick an id from that list.

No snapshot yet

A fresh site has no snapshot until the first pull runs. Tool responses include "snapshot": null and empty arrays. Trigger a pull from the dashboard or wait for the scheduled one.

Limits

No rate limits enforced at launch — use the endpoint normally and we'll publish numbers here before any throttling ships. MCP access is included on every paid plan; see pricing for tiers.