MCP playbook
An AI visibility audit, run from Cursor
Seven tool calls, no dashboard. This is a recorded session against our own linkeddit.com project through the Linkeddit connector: find the project, check what can be spent, read the last run, pull per-engine metrics with the disclosure that travels with them, and rank the gaps. Every response is real and abridged only by omission.
Recorded 4 September 2026 on the Linkeddit connector, project 441e8df6 (linkeddit.com). Requires the Compete plan. Setup for Cursor is in the connect guide.
Before you start
One config entry and one browser authorization.
Add the connector in Cursor
Cursor accepts an HTTP MCP server entry with no headers. Add the Linkeddit connector URL from the connect guide, and the first call opens a browser window for OAuth. There are no API keys to paste. If Cursor asks for a client id, the guide gives the one to enter and the secret stays blank.
What the session needs
A Linkeddit account on the Compete plan, and at least one Answer Radar project with approved buying questions and one completed or partial audit. The transcript below used a project with 21 approved questions and two runs. Every call reads; nothing here spends credits.
The transcript
Each step is the ask, the call Cursor made, and the response as returned, abridged.
- 1
You ask: Which Answer Radar projects do I have?
Tool call: answer_projects_list
{ "status": "all" }Response, abridged
{ "items": [ { "id": "441e8df6-…", "domain": "linkeddit.com", "brand_name": "Linkeddit", "language": "English", "status": "active" }, { "id": "b0a5e791-…", "domain": "linkeddit.com", "brand_name": null, "status": "active" } ], "has_more": false }Almost every other answer_* tool needs a project_id, so the session starts here. We used the first project for the rest of the transcript.
- 2
You ask: Is it configured, and how many questions are approved?
Tool call: answer_project_get
{ "project_id": "441e8df6-…" }Response, abridged
{ "domain": "linkeddit.com", "brand_name": "Linkeddit", "category": "Lead Generation", "language": "English", "prompts": { "proposed": 0, "approved": 21, "removed": 3 }, "schedule": { "cadence": null, "enabled": false, "timezone": "UTC" } }Twenty-one approved buying questions and no schedule. A project with zero approved questions would stop here; the audit tools refuse it.
- 3
You ask: What can I spend today?
Tool call: answer_usage_get
{}Response, abridged
{ "credit_unit": "1 credit = 1 measured sample", "usage_today": { "reserved_credits": 60, "charged": { "credits": 57, "complete": true } }, "allowance": { "daily_cap_credits": 833, "remaining_today_credits": 773, "run_cap_credits": 331, "kill_switch_engaged": false }, "can_start_run": { "allowed": true, "reason": "ok" }, "run_limits": { "max_prompts_per_run": 50, "max_samples_per_prompt": 5, "max_samples_per_run": 200, "enabled_provider_count": 4 } }Credits, never currency. The disclosure notes that ship with this response say a null cap means not configured, and that a platform-wide cap you cannot see also applies.
- 4
You ask: When did the last audit run, and did it finish?
Tool call: answer_runs_list
{ "project_id": "441e8df6-…", "limit": 10 }Response, abridged
{ "items": [ { "id": "19910a90-…", "type": "audit", "status": "partial", "reserved_credits": 61, "started_at": "2026-09-04T02:57:39Z", "completed_at": "2026-09-04T03:04:42Z" }, { "id": "5652f6fe-…", "type": "audit", "status": "partial", "reserved_credits": 24, "started_at": "2026-07-17T19:13:28Z", "completed_at": "2026-07-17T19:16:22Z" } ] }Both runs are partial, which means some samples failed and the rest were measured. Partial is a status, not a set of zeros.
- 5
You ask: Show me that run.
Tool call: answer_run_get
{ "run_id": "19910a90-…" }Response, abridged
{ "status": "partial", "samples": { "total": 61, "ok": 60, "failed": 1 }, "gaps_count": 9, "reserved_credits": 61, "measured_credits": 60 }Sixty-one samples requested, sixty measured, one failed and still visible. Reserved and measured credits differ by exactly the failed sample, because a failed sample is not a measured one.
- 6
You ask: What are the metrics, per engine?
Tool call: answer_metrics_get
{ "project_id": "441e8df6-…" }Response, abridged
{ "segment_count": 7, "usable_segment_count": 4, "segments": [ { "segment": { "engine": "Claude", "instrument": "e9e2ca40", "language": "English" }, "usable": true, "metrics": { "presence_rate": { "value": 0.2, "numerator": 2, "denominator": 10 }, "recommendation_rate": { "value": 0, "numerator": 0, "denominator": 10 }, "share_of_voice": { "vendors": { "semrush": { "share": 0.0577 }, "ahrefs": { "share": 0.0481 }, "crayon": { "share": 0.0385 }, "profound": { "share": 0.0385 } } }, "citation_share": { "domains": { "linkeddit.com": { "votes": 2, "is_customer": true }, "g2.com": { "votes": 2 } } } }, "disclosure": { "prompt_count": 10, "total_samples": 21, "admissible_samples": 10, "excluded_by_grade": { "ungrounded": 3, "thin": 8 }, "excluded_parser_versions": { "mentions-v2": 18 }, "parser_versions": { "metrics": "visibility-metrics-v1", "mentions": "mentions-v4" } } }, { "segment": { "engine": "Gemini", "instrument": "1674df18" }, "usable": true, "metrics": { "presence_rate": { "value": 0.2, "numerator": 3, "denominator": 15 }, "recommendation_rate": { "value": 0.0667, "numerator": 1, "denominator": 15 } } }, { "segment": { "engine": "ChatGPT", "instrument": "f155ac25" }, "usable": true, "metrics": { "presence_rate": { "value": 0, "numerator": 0, "denominator": 7 } }, "disclosure": { "total_samples": 22, "admissible_samples": 7, "excluded_by_grade": { "ungrounded": 7, "thin": 8 } } }, { "segment": { "engine": "Perplexity", "instrument": "d17097c8" }, "usable": true, "metrics": { "presence_rate": { "value": 0.6667, "numerator": 2, "denominator": 3 } } }, { "segment": { "engine": "Gemini", "instrument": "e08eeec0" }, "usable": false, "unmeasured": { "reason": "no_admissible_samples", "total_samples": 6, "excluded_by_grade": { "thin": 6 } } }, { "segment": { "engine": "Perplexity", "instrument": "4a54ede1" }, "usable": false, "unmeasured": { "reason": "no_admissible_samples", "excluded_by_grade": { "error": 3 } } } ] }Seven segments, four usable, one set of numbers each, never averaged. Two Gemini instruments and three Perplexity instruments appear because the two runs used different model or tool snapshots; the token changes, the engine name does not. Note the ChatGPT segment: presence 0 of 7 admissible, with 15 of 22 samples excluded as ungrounded or thin. A tool that averaged across engines and counted the excluded samples would have printed a very different, and wrong, number.
- 7
You ask: Where are we losing, in order?
Tool call: answer_gaps_list
{ "project_id": "441e8df6-…", "limit": 10 }Response, abridged
{ "items": [ { "id": "557a8732-…", "rank": 1, "intent_score": 0.85, "confidence": 0.7, "title": "Not represented for: 'What is the best competitor monitoring software for tracking pricing changes and product launches?'" }, { "id": "2db6327f-…", "rank": 2, "intent_score": 0.8, "title": "Not represented for: 'What are the best Crayon alternatives?'" }, { "id": "971a59ab-…", "rank": 3, "intent_score": 0.6, "title": "Not represented for: 'What are the best competitive intelligence tools for B2B SaaS?'" }, { "rank": 4, "title": "Not represented for: 'What is the best competitor analysis tool for product marketers?'" }, { "rank": 5, "title": "Not represented for: 'What are the best answer engine optimization (AEO) tools?'" } ] }Nine open gaps ranked by intent, evidence and confidence. The top one is the fix-and-verify playbook's starting point.
How to read what came back
Three things the responses do that a dashboard screenshot would not.
Segments, not an average
Seven segments came back for four engines because two runs used different instruments. Cursor can show each line separately; it cannot be tricked into an average, because the tool never computes one. The methodology page explains the five axes.
Exclusions in the open
ChatGPT: 22 samples, 7 admissible, 7 ungrounded, 8 thin. Ask Cursor to quote the numerator and denominator with every rate and the conversation stays honest. A presence of 0 over 7 is a claim; 0 over 0 would not be, and the tool would have returned usable false instead.
Versions travel with numbers
Eighteen mention rows judged under an older parser were excluded and counted. If you compare this session with one next month and the versions differ, the tool has told you the two are not comparable before you compare them.
Where this goes next
Fix the top gap
The fix-and-verify playbook opens gap 557a8732 from this list, reads its citations, checks a draft against the recorded evidence and registers a re-measurement.
Ground the prompt set
The Search Console playbook shows what gsc_queries_get returns for this project, which is an honest refusal until the property is connected, and how to connect it.
Frequently asked questions
Do I need Cursor specifically?
No. Cursor is the client in this recording because it accepts a remote HTTP MCP server and handles the OAuth handshake in a browser. Claude Desktop, Claude Code, VS Code with an MCP extension and Windsurf follow the same setup, and clients without native OAuth can bridge with mcp-remote. The connect guides at /mcp/docs cover each.
Did this session spend credits?
No. Every call in the transcript reads. Starting an audit with answer_audit_start would spend one credit per measured sample, and answer_audit_estimate tells you the exact number first.
Why do the ChatGPT numbers look so different from Perplexity's?
Different instruments, different admissible counts. ChatGPT measured 7 admissible samples of 22, Perplexity 3 of 16. Both are small and the disclosure block says so, which is why each number is reported with its numerator, denominator and exclusions instead of as a bare percentage.
Run this on your own project
Answer Radar is included with Compete. Connect the Linkeddit connector to Cursor and the seven calls above work as written.