mcp

get_audit

MCP-Tool, das ein zuvor ausgeführtes Audit per id abruft. Liefert Modul-Scores, Gesamt-Score und jeden Befund mit Schweregrad und Empfehlung.

Was dieses Tool tut

get_audit liefert das vollständige Ergebnis eines zuvor ausgeführten Audits anhand seiner audit_id. Es ist das Poll-Ziel für run_audit und der kanonische Weg, jeden Befund für eine gegebene URL zu lesen.

  • Liefert denselben McpAuditResponse-Envelope wie run_audit, aber mit gefüllten Befunden, sobald das Audit abgeschlossen ist.
  • Gibt Modul-Scores (0-100) über alle 11 Audit-Module aus, plus den aggregierten total_score.
  • Enthält jeden Befund mit module, rule_id, passed, severity, title, optionaler recommendation und einer docs_url.
  • Liefert status entsprechend dem Upstream-Zustand: queued, running, complete oder failed.
  • Stellt einen report_url-Deep-Link auf den HTML-Bericht auf app.metricspot.com bereit.

Warum es wichtig ist

get_audit ist die Leseseite des MCP-Servers. Agenten rufen es auf, um einen in der Warteschlange befindlichen Lauf zu pollen, Befunde aus einem früheren Audit erneut zu lesen oder zwei Audits derselben URL über die Zeit zu vergleichen.

Konkrete Workflows:

  • Ein PR-Kommentar-Bot ruft get_audit für das vorherige Audit auf einer URL auf, vergleicht total_score mit dem neuen und eskaliert nur, wenn die Regression einen Schwellenwert überschreitet.
  • Ein “Ein-Befund-nach-dem-anderen-fixen”-Agent läuft durch findings, gefiltert nach severity: critical, öffnet pro fehlgeschlagener Regel ein Issue und verlinkt die docs_url für den Kontext.

So nutzt du es

Übergib die audit_id, die run_audit (oder list_audits) zurückgegeben hat. Dieselbe id kann beliebig oft erneut abgefragt werden; die Ergebnisse werden serverseitig gecacht und sind günstig zu lesen.

Input-Schema

{
  "type": "object",
  "properties": {
    "audit_id": { "type": "string", "minLength": 1 }
  },
  "required": ["audit_id"]
}

Beispiel-Response

{
  "audit_id": "aud_01HZ8X9YP7K3T2N6Q5",
  "url": "https://example.com",
  "status": "complete",
  "total_score": 82,
  "module_scores": {
    "technical": 95,
    "onpage": 76,
    "performance": 71,
    "ai": 84,
    "modern_seo": 80,
    "social": 65,
    "accessibility": 90,
    "privacy": 78,
    "readability": 85,
    "tech_stack": 100
  },
  "findings": [
    {
      "module": "technical",
      "rule_id": "technical.https",
      "passed": true,
      "severity": "critical",
      "title": "Site is served over HTTPS",
      "docs_url": "https://metricspot.com/docs/technical-https/"
    },
    {
      "module": "ai",
      "rule_id": "ai.llms_txt",
      "passed": false,
      "severity": "minor",
      "title": "No llms.txt published",
      "recommendation": "Add an llms.txt to /.well-known/ listing canonical docs URLs for LLM crawlers.",
      "docs_url": "https://metricspot.com/docs/llms-txt/"
    }
  ],
  "report_url": "https://app.metricspot.com/audits/aud_01HZ8X9YP7K3T2N6Q5",
  "created_at": "2026-05-13T10:18:04.000Z"
}

Claude Code

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

Prompt:

Hole das MetricSpot-Audit aud_01HZ8X9YP7K3T2N6Q5 und liste jeden fehlgeschlagenen Befund, gruppiert nach Modul, sortiert nach Schweregrad.

Cursor

.cursor/mcp.json:

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

Prompt:

Zieh das letzte Audit für diese URL aus MetricSpot und schreibe den Titel der Seite um, um fehlgeschlagene On-Page-Regeln zu fixen.

Python (pollen, bis complete)

import httpx, time, json

HEADERS = {
    "content-type": "application/json",
    "accept": "application/json, text/event-stream",
    "authorization": "Bearer ms_live_xxxxxxxxxxxxxxxxxxxxxxxx",
}

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

while True:
    audit = get_audit("aud_01HZ8X9YP7K3T2N6Q5")
    if audit["status"] in ("complete", "failed"):
        break
    time.sleep(3)

print("score:", audit["total_score"])
for f in audit["findings"]:
    if not f["passed"] and f["severity"] in ("critical", "major"):
        print(f["severity"], f["rule_id"], "-", f["title"])

Node / TypeScript (roher HTTP)

const res = await fetch("https://mcp.metricspot.com/mcp", {
  method: "POST",
  headers: {
    "content-type": "application/json",
    accept: "application/json, text/event-stream",
    authorization: "Bearer ms_live_xxxxxxxxxxxxxxxxxxxxxxxx",
  },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "tools/call",
    params: {
      name: "get_audit",
      arguments: { audit_id: "aud_01HZ8X9YP7K3T2N6Q5" },
    },
  }),
});
const audit = JSON.parse((await res.json()).result.content[0].text);
console.log(audit.status, audit.total_score);

Häufige Fehler

CodeWannAktion
UNAUTHORIZED (401)Fehlendes oder ungültiges Bearer-TokenSchlüssel ausstellen unter https://app.metricspot.com/settings/api-keys
AUDIT_NOT_FOUND (404)audit_id gehört nicht zu diesem KontoRufe list_audits für gültige ids auf
FORBIDDEN (403)Token fehlt der Read-ScopeSchlüssel mit Default-Scope neu ausstellen
UPSTREAM_FAILED (5xx)Backend-Fehler der AppErneut versuchen; retryable: true ist bei transienten Fehlern gesetzt

Häufig gestellte Fragen

Wie oft soll ich ein in der Warteschlange befindliches Audit pollen?

Alle 3-5 Sekunden ist der ideale Wert. Die meisten Audits sind in 10-30 s fertig, also sind 6-10 Polls pro Audit typisch. Es entstehen keine Per-Call-Kosten über das Netzwerk hinaus. Mache Backoff, wenn status länger als 90 s auf queued steht.

Kann ich ein Audit abrufen, das jemand anderes ausgeführt hat?

Nein. Die Audit-Lookup ist auf den Besitzer des API-Schlüssels begrenzt. Ein get_audit-Aufruf mit der audit_id eines anderen Nutzers liefert AUDIT_NOT_FOUND zurück, statt zu verraten, dass das Audit existiert. Anonyme Audits (id "anonymous") können gar nicht abgerufen werden.

Enthält die Response Befunde für Regeln, die bestanden haben?

Ja. Jede Regel, die die Engine ausgewertet hat, steckt in findings, mit passed: true oder passed: false. Filter clientseitig, um nur Fehlschläge zu zeigen oder um Pass-Raten pro Modul zu berechnen.

Quellen

Zuletzt aktualisiert 2026-05-13