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 and configure the account end to end — add a site, set conversion pages, define content clusters, set goals, schedule reports. 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 two categories of tools, plus resources and prompt templates:

  • Read tools — pull intelligence about what your site has been doing, what changed, and what to do next.
  • Write tools — configure the account: onboard a site, connect Google sources, define conversion pages, content clusters, goals, vanity filters, notes, refresh cadence, and report schedules.

Write tools require the mcp:write scope (OAuth) or a manual sgm_ token. Read tools work with either. See Security for the scope and role model.

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 do. Click Approve.

Read vs. write
By default the client asks for mcp:read only. To let the client configure sites (create, edit, delete, schedule reports), it must request mcp:write in the OAuth authorization request. Most MCP clients let you pass scopes when you add the server; if yours doesn't, fall back to a manual sgm_ token (next section) which has write enabled by default.
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 → AI agents → 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 AI agents 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

Tools split into read (intelligence, no auth scope beyond a valid token) and write (configuration, requires mcp:write or a manual token). In normal read use, start with get_site_brief, then drill into actions, changes, recommendations, pages, search opportunities, AI referrals, conversion funnels, or data health as needed.

Read tools

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_site_brief(site_id)Best first call. Business context, goals, data-source status, latest pulse, recent changes, risks, open actions, AI referrals, and conversion context.
list_actions(site_id, status?, limit?)The persistent web UI Action queue: open growth ideas, fixes, and search opportunities. This is the canonical “what should I do next?” tool.
get_recent_changes(site_id)Latest snapshot vs the previous one — traffic deltas, page gainers/losers, new findings, and new opportunities.
get_recommendations(site_id, priority?, limit?)Snapshot-derived risks and opportunities, including dismissal keys. Use list_actions for the persistent action queue.
get_page_diagnostics(site_id, path)One-page drilldown: page metrics, search queries, indexation, conversion-page status, matching clusters, AI referral hits, and page-specific recommendations.
get_page_entry_paths(site_id, path, limit?)Internal pages visitors were on immediately before reaching a target path, ranked by sessions.
search_pages(site_id, filters...)Page search with traffic, Search Console, bounce, path, sort, and limit filters. Use for targeted investigations.
get_search_opportunities(site_id, kind?, limit?)Search and AI-discovery opportunity view: striking-distance queries, CTR holes, AI gaps, plus top query/page rows.
get_ai_referral_performance(site_id)AI referral sessions by source, top landing pages, share percentages, and AI source-funnel rows when available.
get_conversion_funnel(site_id)Configured conversion pages with their latest metrics and source-funnel conversion-page reach by channel.
get_data_health(site_id)Source connection status, latest snapshot readiness, row counts, crawl/indexation health, and setup issues.
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.

Configuration and write tools

Mutating tools require mcp:write (OAuth) or a manual sgm_ token. The role gate matches the web app: most edits need at least member; changing credential-bearing site sources needs admin. get_site_brief returns existing conversion-page, cluster, goal, and vanity-filter IDs for edits.

ToolWhat it does
list_ga4_properties()List GA4 properties the connected Google account can read. Use to discover ga4_property_id before calling create_site or update_site.
list_gsc_sites()List Search Console sites accessible to the connected Google account. Returns siteUrl values usable as gsc_site_url.
list_ads_accounts()List Google Ads accounts the connected Google account can manage. Returns customer IDs usable as gads_customer_id.
sync_actions(site_id)Add newly materializable red-flag and opportunity Actions from the latest snapshot to the persistent queue.
update_action(site_id, action_id, ...fields)Move an Action to open, in progress, done, or dismissed; assign an owner; attach draft output; or link it to a goal.
create_site(name, ga4_property_id?, gsc_site_url?, gads_customer_id?, business_context?)Create a new site under the user's active account. Plan limits apply (free/pro: 1, agency: 15). Returns the new site.
update_site(site_id, name?, ga4_property_id?, gsc_site_url?, gads_customer_id?, business_context?, refresh_interval_minutes?)Update any subset of fields. Pass refresh_interval_minutes to change baseline-pull cadence (30–10080).
disconnect_site_source(site_id, source)Disconnect ga4, search_console, or google_ads from a site without deleting the site.
add_conversion_page(site_id, path, label?)Mark a URL path as a conversion page so analysis weighting, reports, and source-funnel attribution treat it as a business outcome.
remove_conversion_page(site_id, page_id)Remove the conversion-page marking. The page itself is not modified.
create_cluster(site_id, name, url_patterns?)Create a content cluster (e.g., "Healthcare" with ["/healthcare/*", "/hipaa/*"]). Free/Starter cap at 3 per site; Pro and Agency are unlimited.
update_cluster(site_id, cluster_id, name?, url_patterns?)Rename a cluster or replace its url_patterns. Patterns are replaced wholesale, not merged.
delete_cluster(site_id, cluster_id)Delete a cluster definition. Historical snapshot data tied to the cluster remains.
suggest_clusters(site_id)Ask the LLM to propose 3-6 clusters based on recent GA4 page data plus business context. Does NOT persist — review and persist accepted ones with create_cluster. Requires a connected GA4 property.
add_vanity_filter(site_id, pattern)Add a glob-style pattern (e.g., /blog/what-is-*) so vanity pages don't crowd out conversion-relevant pages.
remove_vanity_filter(site_id, filter_id)Remove a vanity-filter pattern.
add_site_goal(site_id, metric, label, timeframe, target_value?, deadline?, priority?)Add a measurable goal. metric: unique_visitors, sessions, page_views, organic_clicks, conversions, avg_position, bounce_rate, ai_referral_sessions, or other. timeframe: week, month, quarter, year. priority: 1 (must hit), 2 (should hit), 3 (nice to have).
update_site_goal(site_id, goal_id, ...fields)Edit a goal, mark it primary, or bind a GA4 event with tracked_event_name. Use clear_target_value, clear_deadline, or clear_tracked_events for explicit clears.
remove_site_goal(site_id, goal_id)Remove a configured goal.
refresh_site(site_id, days?, force?)Run an on-demand data pull after configuration changes. Omit days for the default 7-day window.
update_site_notes(site_id, notes?)Set the freeform markdown notes injected into the LLM prompt context. Omit or pass an empty string to clear.
list_report_schedules(site_id)Read-only list of scheduled report deliveries.
create_report_schedule(site_id, frequency?, channel?, slack_webhook?)Schedule a recurring SignalGuide report. frequency: daily, weekly, monthly. channel: email or slack. Paid plans only.
update_report_schedule(site_id, schedule_id, frequency?, channel?, slack_webhook?)Change cadence, delivery channel, or Slack webhook on an existing schedule.
delete_report_schedule(site_id, schedule_id)Stop a scheduled report. Past deliveries remain in history.

Resources

MCP-aware clients can also read resources for ambient context before calling tools. SignalGuide exposes these JSON resources:

TEXT
signalguide://agent-instructions
signalguide://sites
signalguide://sites/{site_id}/context
signalguide://sites/{site_id}/latest-brief
signalguide://sites/{site_id}/actions
signalguide://sites/{site_id}/recommendations
signalguide://sites/{site_id}/data-health

Prompt templates

These prompts appear in clients that support MCP prompt discovery. They instruct the assistant which SignalGuide tools to call and how to frame the answer.

TEXT
analyze_site(site_id)
prioritize_next_changes(site_id)
explain_traffic_drop(site_id)
find_content_opportunities(site_id)
prepare_weekly_update(site_id)
audit_conversion_pages(site_id)
configure_new_site()

configure_new_site() walks the assistant through the full onboarding flow — discover Google sources, create the site, add conversion pages, propose clusters, capture goals, set refresh cadence, and (on paid plans) schedule a weekly briefing. Requires mcp:write.

Example prompts

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

  • “Use SignalGuide to tell me what changed this week and what I should fix first.”
  • “Use SignalGuide to prioritize my next five site changes by impact.”
  • “What's the biggest problem on my site right now?”
  • “Compare the latest snapshot to the previous one — 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.”

Configuration prompts

These prompts use the write tools. With OAuth, your client needs to be authorized with mcp:write; with a manual token, write is enabled by default.

  • “Onboard a new SignalGuide site for example.com using my GA4 and Search Console properties. Suggest 4 content clusters and a weekly email schedule.”
  • “Add /pricing, /contact, and /demo as conversion pages on site 12.”
  • “Propose content clusters from my recent GA4 traffic, show them to me, and create the ones I approve.”
  • “Set a goal of 5,000 monthly organic clicks by 2026-09-30 on site 12 with must-hit priority.”
  • “Filter out /blog/what-is-* and /glossary/* from my reports on site 12.”
  • “Set the refresh interval for site 12 to hourly (60 minutes).”
  • “Schedule a weekly Slack briefing for site 12 — webhook URL: https://hooks.slack.com/...”
  • “Disconnect Google Ads from site 12 but keep GA4 and Search Console connected.”

Security

Two scopes. mcp:read covers all intelligence tools (the read table above). mcp:write covers configuration tools (the write table above). OAuth clients request scopes explicitly at consent time. Manual sgm_ tokens are user-issued from the Settings page and have write enabled by default — treat them like a password.

Account roles. Within an account, write tools follow the same role gate as the web app: edits require at least member; credential-bearing source changes require admin; viewers can read but cannot mutate. Plan limits (site count, cluster count, paid-only schedules) also apply through MCP, exactly as in the dashboard.

Scoped per user. Every tool pulls user_id from the verified bearer token, not from arguments. Site access is enforced through account membership — a token can reach every site on every account you belong to, and nothing else. 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 → AI agents → 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. Supported scopes are mcp:read and mcp:write. Unknown scopes are dropped at consent time.

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.

“This tool requires the mcp:write scope”

Your OAuth client was authorized with mcp:read only. Re-run the authorization flow asking for mcp:write, or switch to a manual sgm_ token which has write enabled by default. Read tools continue to work either way.

“This action requires member access”

You're a viewer on the account that owns this site. Viewers can read every tool but cannot mutate configuration. Ask the account owner to bump your role to member (or admin for credential-bearing source changes) in Settings → Team.

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.