mcp
run_audit_anonymous
MCP tool that runs a one-shot SEO + AI-readability audit on any public URL with no auth. 11 modules, ~90 checks, 1 audit per IP per 24h.
What this tool does
run_audit_anonymous runs a synchronous, one-shot SEO and AI-readability audit on any public URL without authentication. It is the only MCP tool that does not require an API key.
- Crawls the URL server-side, runs the full rule engine, and blocks until findings are ready.
- Returns module scores across the 11 audit modules (technical, on-page, performance, AI, modern SEO, social, accessibility, privacy, readability, tech stack, plus an aggregate total).
- Emits per-rule findings with
passed,severity,title, optionalrecommendation, and adocs_urllinking tometricspot.com/docs/<rule>/. - Does NOT include Core Web Vitals from Google PSI (use
run_auditfor full PSI scoring). - Capped at 1 audit per IP per 24 hours. For higher volume, issue an API key and use
run_audit.
Why it matters
run_audit_anonymous is the zero-friction entry point. An agent can audit a URL the very first time a user mentions it, with no account, no key, and no setup beyond installing the MCP server.
Concrete workflows:
- A first-touch agent gets asked “is metricspot.com indexed properly?” and runs the audit inline before the user has signed up.
- A landing-page reviewer in Claude Code reads a public competitor URL, calls
run_audit_anonymous, and uses the findings to brief the writer on what to beat.
How to use it
The tool is synchronous: the response blocks (up to ~120 s) until findings are ready. There is no audit_id to poll because anonymous audits aren’t persisted to your account; the response is the entire result.
Input schema
{
"type": "object",
"properties": {
"url": { "type": "string", "format": "uri", "maxLength": 2000 }
},
"required": ["url"]
}
Response schema sample
{
"audit_id": "anonymous",
"url": "https://example.com",
"status": "complete",
"total_score": 78,
"module_scores": {
"technical": 92,
"onpage": 71,
"performance": 64,
"ai": 80,
"modern_seo": 75,
"social": 60,
"accessibility": 88,
"privacy": 70,
"readability": 82,
"tech_stack": 100
},
"findings": [
{
"module": "onpage",
"rule_id": "onpage.title_length",
"passed": false,
"severity": "major",
"title": "Title is too short",
"recommendation": "Aim for 50-60 characters with the primary keyword near the front.",
"docs_url": "https://metricspot.com/docs/onpage-title-length/"
}
],
"created_at": "2026-05-13T10:15:32.000Z"
}
audit_id is always the literal string "anonymous". pdf_url and report_url are not returned for anonymous audits.
Claude Code
claude mcp add --transport http metricspot https://mcp.metricspot.com/mcp
Prompt:
Run an anonymous MetricSpot audit on https://example.com and list every critical finding with its
docs_url.
Cursor
.cursor/mcp.json:
{
"mcpServers": {
"metricspot": { "url": "https://mcp.metricspot.com/mcp" }
}
}
Prompt:
Use run_audit_anonymous on this URL and tell me which AI-readability rules failed.
Python (raw HTTP)
import httpx
r = httpx.post(
"https://mcp.metricspot.com/mcp",
headers={
"content-type": "application/json",
"accept": "application/json, text/event-stream",
},
json={
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "run_audit_anonymous",
"arguments": {"url": "https://example.com"},
},
},
timeout=180.0,
)
print(r.json()["result"]["content"][0]["text"])
Node / TypeScript (raw HTTP)
const res = await fetch("https://mcp.metricspot.com/mcp", {
method: "POST",
headers: {
"content-type": "application/json",
accept: "application/json, text/event-stream",
},
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "tools/call",
params: {
name: "run_audit_anonymous",
arguments: { url: "https://example.com" },
},
}),
});
const json = await res.json();
console.log(JSON.parse(json.result.content[0].text));
Common errors
| Code | When | Action |
|---|---|---|
INVALID_URL (400) | URL is missing, malformed, or longer than 2000 chars | Pass an absolute https:// URL |
RATE_LIMITED (429) | IP already ran an anonymous audit in the last 24h | Wait, or issue an API key and use run_audit |
UPSTREAM_FAILED (5xx) | Target host unreachable or audit pipeline error | Retry once; retryable: true is set on transient failures |
Frequently asked questions
Why isn’t Core Web Vitals included?
PSI calls cost money and quota even for MetricSpot, so they are gated behind authenticated run_audit. Anonymous audits still return ~90 checks across the other 10 modules. If you need LCP, CLS, and INP, get an API key and call run_audit instead.
Can I run more than 1 anonymous audit per day?
Not from the same IP. The cap is enforced server-side to prevent abuse. Once you have an API key, run_audit lifts the limit to your plan allowance: Free 10 per month, Starter 50, Pro unlimited.
Are anonymous audits saved to my account?
No. They are not persisted, do not show up in list_audits, and cannot be fetched later with get_audit. The full result is returned in the single response, so capture it client-side if you need to keep it.
Sources
Last updated 2026-05-13