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 par run_audit).
  • Renvoie audit_id, pdf_url et status (ready ou queued).
  • 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, interroge get_audit, puis appelle get_audit_pdf et 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 le created_at comme 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_01HZ8X9YP7K3T2N6Q5 depuis 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

CodeQuandAction
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 compteAppelez list_audits pour des identifiants valides
FORBIDDEN (403)L’export PDF exige un plan payant sur certains comptesMontez en plan sur https://app.metricspot.com/billing
UPSTREAM_FAILED (5xx)Hoquet du service de renduRé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