mcp
get_audit_pdf
MCP-Tool, das eine signierte Download-URL für den Marken-PDF-Bericht eines Audits liefert. Stösst ein Rendering an, falls das PDF noch nicht bereit ist.
Was dieses Tool tut
get_audit_pdf liefert eine signierte Download-URL für den Marken-PDF-Bericht eines gegebenen Audits. Wenn noch kein PDF gerendert wurde, stösst es ein Rendering an und gibt den Status queued zurück.
- Nimmt eine
audit_id(denselben Wert, denrun_auditzurückgegeben hat). - Liefert
audit_id,pdf_urlundstatus(readyoderqueued). - Die signierte URL ist kurzlebig; behandle sie als Wegwerf-URL und ruf sie sofort ab.
- Bei
status: queuedruf das Tool nach ein paar Sekunden erneut auf oder triff die URL, sobald das Rendering fertig ist. - White-Label-Branding (Logo, Firmenname, Theme) folgt dem Plan und den Dashboard-Einstellungen des Nutzers.
Warum es wichtig ist
Das PDF ist die Liefergabe, die die meisten Berater und Agenturen ihren Kunden in die Hand drücken. Wenn ein Agent eine signierte URL greifen kann, kann ein einziger MCP-Aufruf einen End-to-End-Workflow “Audit und Bericht” abschliessen, der zuvor einen Dashboard-Tab erforderte.
Konkrete Workflows:
- Ein “Kundenreport”-Agent führt
run_auditaus, polltget_audit, ruft dannget_audit_pdfauf und hängt die signierte URL an einen E-Mail-Entwurf. - Ein “Archiv des letzten Quartals”-Agent läuft durch
list_audits, holt jedes PDF und legt es in Drive oder S3 ab, mit der URL undcreated_atals Dateinamen.
So nutzt du es
get_audit_pdf ist unter der Haube ein POST: Der erste Aufruf stösst ein Rendering an, wenn der Cache kalt ist. Wenn das PDF kürzlich gerendert wurde, kommt die URL sofort zurück. Andernfalls rechne mit 5-15 s Renderzeit; polle das Tool alle paar Sekunden.
Input-Schema
{
"type": "object",
"properties": {
"audit_id": { "type": "string", "minLength": 1 }
},
"required": ["audit_id"]
}
Beispiel-Response
{
"audit_id": "aud_01HZ8X9YP7K3T2N6Q5",
"pdf_url": "https://cdn.metricspot.com/reports/aud_01HZ8X9YP7K3T2N6Q5.pdf?signature=...",
"status": "ready"
}
Wenn das Rendering noch läuft:
{
"audit_id": "aud_01HZ8X9YP7K3T2N6Q5",
"pdf_url": "",
"status": "queued"
}
Claude Code
claude mcp add --transport http metricspot https://mcp.metricspot.com/mcp \
--header "Authorization: Bearer ms_live_xxxxxxxxxxxxxxxxxxxxxxxx"
Prompt:
Hol das PDF für das Audit
aud_01HZ8X9YP7K3T2N6Q5von MetricSpot und gib mir den Download-Link.
Cursor
.cursor/mcp.json:
{
"mcpServers": {
"metricspot": {
"url": "https://mcp.metricspot.com/mcp",
"headers": {
"Authorization": "Bearer ms_live_xxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}
Prompt:
Hol das neueste Audit für example.com, warte auf das PDF und lade es nach ./reports herunter.
Python (pollen bis ready, dann herunterladen)
import httpx, time, json
HEADERS = {
"content-type": "application/json",
"accept": "application/json, text/event-stream",
"authorization": "Bearer ms_live_xxxxxxxxxxxxxxxxxxxxxxxx",
}
def call(name, args):
r = httpx.post("https://mcp.metricspot.com/mcp", 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"])
for _ in range(10):
pdf = call("get_audit_pdf", {"audit_id": "aud_01HZ8X9YP7K3T2N6Q5"})
if pdf["status"] == "ready":
break
time.sleep(3)
with httpx.stream("GET", pdf["pdf_url"]) as r:
with open("report.pdf", "wb") as f:
for chunk in r.iter_bytes():
f.write(chunk)
Node / TypeScript (roher HTTP)
import { writeFile } from "node:fs/promises";
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_pdf",
arguments: { audit_id: "aud_01HZ8X9YP7K3T2N6Q5" },
},
}),
});
const pdf = JSON.parse((await res.json()).result.content[0].text);
if (pdf.status === "ready") {
const file = await fetch(pdf.pdf_url);
await writeFile("report.pdf", Buffer.from(await file.arrayBuffer()));
}
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 |
AUDIT_NOT_FOUND (404) | audit_id gehört nicht zu diesem Konto | Rufe list_audits für gültige ids auf |
FORBIDDEN (403) | PDF-Export erfordert auf manchen Konten einen kostenpflichtigen Plan | Upgrade unter https://app.metricspot.com/billing |
UPSTREAM_FAILED (5xx) | Aussetzer des Render-Dienstes | Einmal erneut versuchen; retryable: true ist gesetzt |
Häufig gestellte Fragen
Wie lange ist die signierte URL gültig?
Kurzlebig: Minuten, nicht Stunden. Die URL ist für einen einmaligen Download signiert und rotiert bei jedem Aufruf. Rufe lieber get_audit_pdf erneut auf, anstatt die URL selbst zu cachen; die Response ist günstig, wenn das Rendering bereits abgeschlossen ist.
Kann ich das PDF-Branding anpassen?
Branding (Logo, Firmenname, Akzentfarbe, Footer) wird im Dashboard unter Einstellungen → Branding gesetzt und automatisch auf PDFs angewendet, die für dieses Konto gerendert werden. Das MCP-Tool akzeptiert in v1 keine Per-Call-Überschreibungen.
Was steht im PDF, das nicht in get_audit ist?
Das PDF ist die menschenlesbare Liefergabe: Deckblatt, Executive Summary, Module-Sektionen mit Screenshots und dieselbe Liste von Befunden mit längeren Empfehlungs-Texten. get_audit ist das strukturierte JSON für Agenten; das PDF ist die Version, die du einem Kunden in die Hand drücken würdest.
Quellen
Zuletzt aktualisiert 2026-05-13