mcp

get_audit

Outil MCP qui récupère un audit déjà lancé par identifiant. Renvoie les scores de modules, le score total et chaque constat avec sévérité et recommandation.

Ce que fait cet outil

get_audit renvoie le résultat complet d’un audit déjà lancé via son audit_id. C’est la cible d’interrogation pour run_audit et la voie canonique pour lire tous les constats d’une URL donnée.

  • Renvoie la même enveloppe McpAuditResponse que run_audit, mais avec les constats remplis une fois l’audit terminé.
  • Expose les scores de modules (0-100) sur les 11 modules d’audit, plus le total_score agrégé.
  • Inclut chaque constat avec module, rule_id, passed, severity, title, recommendation optionnel et un docs_url.
  • Renvoie un status reflétant l’état en amont : queued, running, complete ou failed.
  • Fournit un report_url en lien profond vers le rapport HTML sur app.metricspot.com.

Pourquoi c’est important

get_audit est le côté lecture du serveur MCP. Les agents l’appellent pour interroger une exécution en file d’attente, relire les constats d’un audit antérieur, ou comparer deux audits de la même URL dans le temps.

Workflows concrets :

  • Un bot de commentaire PR appelle get_audit pour l’audit précédent d’une URL, compare total_score au nouveau, et n’escalade que si la régression dépasse un seuil.
  • Un agent “corriger un constat à la fois” boucle sur findings filtré par severity: critical, ouvre une issue par règle en échec et lie le docs_url pour le contexte.

Comment l’utiliser

Passez l’audit_id renvoyé par run_audit (ou par list_audits). Le même identifiant peut être ré-interrogé sans limite ; les résultats sont mis en cache côté serveur et peu coûteux à lire.

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",
  "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"

Demandez :

Récupère l’audit MetricSpot aud_01HZ8X9YP7K3T2N6Q5 et liste chaque constat en échec, groupé par module et trié par sévérité.

Cursor

.cursor/mcp.json :

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

Demandez :

Tire le dernier audit de cette URL depuis MetricSpot et réécris le title de la page pour corriger les règles on-page en échec.

Python (interroger jusqu’à la fin)

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 (HTTP brut)

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);

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)Le jeton n’a pas le scope readRéémettez la clé avec le scope par défaut
UPSTREAM_FAILED (5xx)Erreur du backend applicatifRéessayez ; retryable: true est positionné sur les échecs transitoires

Questions fréquentes

À quelle fréquence interroger un audit en file d’attente ?

Toutes les 3-5 secondes est le bon rythme. La plupart des audits se terminent en 10-30 s, donc 6-10 interrogations par audit est typique. Pas de coût par appel au-delà du réseau. Faites du backoff si status reste queued au-delà de 90 s.

Puis-je récupérer un audit lancé par quelqu’un d’autre ?

Non. La recherche d’audit est scopée au propriétaire de la clé API. Appeler get_audit avec l’audit_id d’un autre utilisateur renvoie AUDIT_NOT_FOUND plutôt que de divulguer l’existence de l’audit. Les audits anonymes (id "anonymous") ne peuvent pas être récupérés du tout.

La réponse inclut-elle les constats des règles qui passent ?

Oui. Chaque règle évaluée par le moteur figure dans findings, avec passed: true ou passed: false. Filtrez côté client pour ne faire ressortir que les échecs, ou pour calculer des taux de réussite par module.

Sources

Dernière mise à jour 2026-05-13