mcp

run_audit

MCP-Tool, das ein vollständiges SEO-Audit mit Core Web Vitals in die Warteschlange stellt. Liefert sofort eine audit_id; danach get_audit pollen, bis status complete ist.

Was dieses Tool tut

run_audit stellt ein vollständiges SEO- und KI-Lesbarkeits-Audit in die Warteschlange und liefert sofort den Audit-Envelope zurück. Es ist die authentifizierte Vollversion von run_audit_anonymous.

  • Stellt das Audit asynchron in die Warteschlange und liefert in 1-2 Sekunden status: queued plus eine echte audit_id.
  • Holt Core Web Vitals (LCP, CLS, INP) als Teil des Laufs aus Google PageSpeed Insights.
  • Wenn der Nutzer Google Analytics 4 und Search Console verknüpft hat, werden zusätzlich organische Traffic-Signale geholt, separat über get_organic_traffic ausgegeben.
  • Zählt auf das Plan-Kontingent des Nutzers (Free 10/Monat, Starter 50/Monat, Pro unbegrenzt) und respektiert Per-Domain-Cooldowns.
  • Liefert dieselbe McpAuditResponse-Struktur zurück wie get_audit. Die Befunde bleiben leer, bis das Audit auf complete umspringt.

Warum es wichtig ist

run_audit ist das richtige Tool, wenn du ein dauerhaftes Audit brauchst, das du später abrufen kannst, ein PDF, organische Traffic-Daten oder Core Web Vitals. Anonyme Audits decken ca. 90 Prüfungen ab, lassen PSI aber aus; dieses Tool deckt alles ab.

Konkrete Workflows:

  • Ein Audit-on-PR-Bot ruft run_audit auf, wenn ein Preview-Deploy ausgeliefert wird, fängt die audit_id ein, pollt get_audit alle 5 s bis zu 60 s und postet einen Delta-Kommentar zum letzten Audit auf derselben URL.
  • Ein wöchentlicher Cron-Agent iteriert über die meistbesuchten Landingpages des Nutzers, stellt für jede ein frisches run_audit in die Warteschlange und schickt einen Digest aus list_audits per Mail.

So nutzt du es

Das Tool ist von Natur aus asynchron. Behandle die sofortige Antwort als Bestätigung und polle dann get_audit mit der zurückgegebenen audit_id alle paar Sekunden. Typische End-to-End-Fertigstellung dauert 10-30 s; rechne bei langsamen Zielen mit bis zu 90 s.

Input-Schema

{
  "type": "object",
  "properties": {
    "url": { "type": "string", "format": "uri", "maxLength": 2000 }
  },
  "required": ["url"]
}

Beispiel-Response

{
  "audit_id": "aud_01HZ8X9YP7K3T2N6Q5",
  "url": "https://example.com",
  "status": "queued",
  "total_score": null,
  "module_scores": {},
  "findings": [],
  "report_url": "https://app.metricspot.com/audits/aud_01HZ8X9YP7K3T2N6Q5",
  "created_at": "2026-05-13T10:18:04.000Z"
}

Wenn das Audit abgeschlossen ist, wird dieselbe Struktur von get_audit zurückgegeben, mit status: "complete", gefülltem total_score, module_scores und dem findings-Array.

Claude Code

claude mcp add --transport http metricspot https://mcp.metricspot.com/mcp \
  --header "Authorization: Bearer ms_live_xxxxxxxxxxxxxxxxxxxxxxxx"

Prompt:

Führe ein vollständiges MetricSpot-Audit auf https://example.com aus, polle bis zum Abschluss und fasse die fehlgeschlagenen kritischen und schweren Befunde zusammen.

Cursor

.cursor/mcp.json:

{
  "mcpServers": {
    "metricspot": {
      "url": "https://mcp.metricspot.com/mcp",
      "headers": {
        "Authorization": "Bearer ms_live_xxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Prompt:

Stelle ein Audit für diese Seite in die Warteschlange, warte auf den Abschluss und sag mir meine Core-Web-Vitals-Werte.

Python (run + poll)

import httpx, time, json

URL = "https://mcp.metricspot.com/mcp"
HEADERS = {
    "content-type": "application/json",
    "accept": "application/json, text/event-stream",
    "authorization": "Bearer ms_live_xxxxxxxxxxxxxxxxxxxxxxxx",
}

def call(name, args):
    r = httpx.post(URL, headers=HEADERS, json={
        "jsonrpc": "2.0", "id": 1, "method": "tools/call",
        "params": {"name": name, "arguments": args},
    }, timeout=60.0)
    return json.loads(r.json()["result"]["content"][0]["text"])

queued = call("run_audit", {"url": "https://example.com"})
audit_id = queued["audit_id"]

for _ in range(30):
    time.sleep(3)
    result = call("get_audit", {"audit_id": audit_id})
    if result["status"] in ("complete", "failed"):
        break

print(result["total_score"], len(result["findings"]))

Node / TypeScript (mit @modelcontextprotocol/sdk)

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const transport = new StreamableHTTPClientTransport(
  new URL("https://mcp.metricspot.com/mcp"),
  {
    requestInit: {
      headers: { authorization: "Bearer ms_live_xxxxxxxxxxxxxxxxxxxxxxxx" },
    },
  },
);
const client = new Client({ name: "audit-on-pr", version: "1.0.0" });
await client.connect(transport);

const queued = await client.callTool({
  name: "run_audit",
  arguments: { url: "https://example.com" },
});
const auditId = JSON.parse(queued.content[0].text as string).audit_id;
console.log("queued", auditId);

Häufige Fehler

CodeWannAktion
UNAUTHORIZED (401)Fehlendes oder ungültiges Bearer-TokenSchlüssel ausstellen unter https://app.metricspot.com/settings/api-keys
QUOTA_EXCEEDED (402)Monatliches Plan-Kontingent erreichtUpgrade unter https://app.metricspot.com/billing
RATE_LIMITED (429)Per-Domain-Cooldown getroffenWarte das angegebene Fenster ab, bevor du dieselbe Domain erneut einreihst
INVALID_URL (400)Schlechte URL, nicht öffentlicher Host oder > 2000 ZeichenÜbergib eine absolute https://-URL
UPSTREAM_FAILED (5xx)PSI- oder Crawler-Upstream-AussetzerEinmal mit Backoff erneut versuchen

Häufig gestellte Fragen

Wie lange, bis das Audit complete ist?

10-30 Sekunden für typische Sites. Langsame Ziele, JS-lastige Seiten oder Sites mit grossen Mengen strukturierter Daten können bis zu 90 Sekunden brauchen. Polle get_audit alle 3-5 Sekunden; das Audit ist vollständig berechnet, sobald status auf complete umspringt.

Verbraucht run_audit ein Audit-Kontingent, auch wenn es fehlschlägt?

Ein failed-Audit verbraucht kein Plan-Kontingent. Das Kontingent wird erst dekrementiert, wenn der Lauf erfolgreich abgeschlossen ist und Befunde gespeichert wurden. PSI-Rate-Limit-Fehler werden intern wiederholt, bevor sie nach aussen gemeldet werden.

Kann ich PDF und organischen Traffic im selben Aufruf bekommen?

Nein, das sind absichtlich separate Tools. Nach Abschluss von run_audit rufst du get_audit_pdf für die signierte PDF-URL und get_organic_traffic für die GA4-+-GSC-Momentaufnahme auf. Beide referenzieren dieselbe audit_id.

Quellen

Zuletzt aktualisiert 2026-05-13