mcp
get_audit_pdf
Outil MCP qui renvoie une URL de téléchargement signée pour le rapport PDF en marque blanche d'un audit. Met en file d'attente un rendu si le PDF n'est pas prêt.
Ce que fait cet outil
get_audit_pdf renvoie une URL de téléchargement signée pour le rapport PDF en marque blanche d’un audit donné. Si aucun PDF n’a encore été rendu, il met en file d’attente un rendu et renvoie un statut queued.
- Prend un
audit_id(la même valeur renvoyée parrun_audit). - Renvoie
audit_id,pdf_urletstatus(readyouqueued). - L’URL signée est de courte durée ; traitez-la comme jetable et récupérez-la immédiatement.
- Si
status: queued, rappelez l’outil après quelques secondes, ou frappez l’URL une fois le rendu terminé. - La marque blanche (logo, nom de la société, thème) suit le plan de l’utilisateur et les paramètres du tableau de bord.
Pourquoi c’est important
Le PDF est le livrable que la plupart des consultants et agences remettent à leurs clients. Permettre à un agent d’obtenir une URL signée signifie qu’un seul appel MCP peut clore un workflow “audit et rapport” de bout en bout qui exigeait auparavant un onglet du tableau de bord.
Workflows concrets :
- Un agent “rapport client” lance
run_audit, interrogeget_audit, puis appelleget_audit_pdfet attache l’URL signée à un brouillon d’email. - Un agent “archiver le trimestre dernier” parcourt
list_audits, récupère chaque PDF et les stocke sur Drive ou S3 avec l’URL et lecreated_atcomme nom de fichier.
Comment l’utiliser
get_audit_pdf est un POST sous le capot, le premier appel déclenche un rendu si le cache est froid. Si le PDF a été rendu récemment, l’URL revient immédiatement. Sinon comptez 5-15 s de rendu ; interrogez l’outil toutes les quelques secondes.
Schéma d’entrée
{
"type": "object",
"properties": {
"audit_id": { "type": "string", "minLength": 1 }
},
"required": ["audit_id"]
}
Exemple de schéma de réponse
{
"audit_id": "aud_01HZ8X9YP7K3T2N6Q5",
"pdf_url": "https://cdn.metricspot.com/reports/aud_01HZ8X9YP7K3T2N6Q5.pdf?signature=...",
"status": "ready"
}
Quand le rendu est encore en cours :
{
"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"
Demandez :
Récupère le PDF de l’audit
aud_01HZ8X9YP7K3T2N6Q5depuis MetricSpot et donne-moi le lien de téléchargement.
Cursor
.cursor/mcp.json :
{
"mcpServers": {
"metricspot": {
"url": "https://mcp.metricspot.com/mcp",
"headers": {
"Authorization": "Bearer ms_live_xxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}
Demandez :
Récupère le dernier audit d’example.com, attends le PDF et télécharge-le dans ./reports.
Python (interroger jusqu’à prêt, puis télécharger)
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 (HTTP brut)
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()));
}
Erreurs courantes
| Code | Quand | Action |
|---|---|---|
UNAUTHORIZED (401) | Jeton Bearer manquant ou invalide | Émettez une clé sur https://app.metricspot.com/settings/api-keys |
AUDIT_NOT_FOUND (404) | audit_id n’appartient pas à ce compte | Appelez list_audits pour des identifiants valides |
FORBIDDEN (403) | L’export PDF exige un plan payant sur certains comptes | Montez en plan sur https://app.metricspot.com/billing |
UPSTREAM_FAILED (5xx) | Hoquet du service de rendu | Réessayez une fois ; retryable: true est positionné |
Questions fréquentes
Combien de temps l’URL signée est-elle valide ?
Courte durée : des minutes, pas des heures. L’URL est signée pour un téléchargement ponctuel et tourne à chaque appel. Rappelez toujours get_audit_pdf plutôt que de mettre l’URL en cache ; la réponse est peu coûteuse quand le rendu est déjà fait.
Puis-je personnaliser la marque du PDF ?
La marque (logo, nom de société, couleur d’accentuation, pied de page) se configure dans le tableau de bord sous Paramètres → Marque, et s’applique automatiquement aux PDF rendus pour ce compte. L’outil MCP n’accepte pas de surcharges par appel en v1.
Qu’y a-t-il dans le PDF qui ne soit pas dans get_audit ?
Le PDF est le livrable destiné aux humains : page de garde, résumé exécutif, sections par module avec captures, et la même liste de constats avec des recommandations rédigées plus longuement. get_audit est le JSON structuré pour les agents ; le PDF est la version que vous remettriez à un client.
Sources
Dernière mise à jour 2026-05-13