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: queuedplus eine echteaudit_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_trafficausgegeben. - 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 wieget_audit. Die Befunde bleiben leer, bis das Audit aufcompleteumspringt.
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_auditauf, wenn ein Preview-Deploy ausgeliefert wird, fängt dieaudit_idein, polltget_auditalle 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_auditin die Warteschlange und schickt einen Digest auslist_auditsper 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
| Code | Wann | Aktion |
|---|---|---|
UNAUTHORIZED (401) | Fehlendes oder ungültiges Bearer-Token | Schlüssel ausstellen unter https://app.metricspot.com/settings/api-keys |
QUOTA_EXCEEDED (402) | Monatliches Plan-Kontingent erreicht | Upgrade unter https://app.metricspot.com/billing |
RATE_LIMITED (429) | Per-Domain-Cooldown getroffen | Warte 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-Aussetzer | Einmal 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