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, optional recommendation, and a docs_url linking to metricspot.com/docs/<rule>/.
  • Does NOT include Core Web Vitals from Google PSI (use run_audit for 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

CodeWhenAction
INVALID_URL (400)URL is missing, malformed, or longer than 2000 charsPass an absolute https:// URL
RATE_LIMITED (429)IP already ran an anonymous audit in the last 24hWait, or issue an API key and use run_audit
UPSTREAM_FAILED (5xx)Target host unreachable or audit pipeline errorRetry 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