mcp

get_audit

Herramienta MCP que recupera por id una auditoría ejecutada previamente. Devuelve puntuaciones por módulo, puntuación total y cada hallazgo con severidad y recomendación.

Qué hace esta herramienta

get_audit devuelve el resultado completo de una auditoría ejecutada previamente a partir de su audit_id. Es el objetivo de sondeo de run_audit y la forma canónica de leer cada hallazgo para una URL dada.

  • Devuelve el mismo sobre McpAuditResponse que run_audit, pero con los hallazgos poblados una vez la auditoría completa.
  • Expone puntuaciones por módulo (0-100) en los 11 módulos de auditoría, más el total_score agregado.
  • Incluye cada hallazgo con module, rule_id, passed, severity, title, recommendation opcional y una docs_url.
  • Devuelve status reflejando el estado aguas arriba: queued, running, complete o failed.
  • Proporciona un deep-link report_url al informe HTML en app.metricspot.com.

Por qué importa

get_audit es el lado de lectura del servidor MCP. Los agentes la llaman para sondear una ejecución encolada, releer hallazgos de una auditoría anterior o comparar dos auditorías de la misma URL en el tiempo.

Flujos concretos:

  • Un bot de comentarios en PR llama a get_audit para la auditoría anterior de una URL, compara el total_score con el nuevo y solo escala cuando la regresión cruza un umbral.
  • Un agente de “corrige un hallazgo cada vez” recorre findings filtrados por severity: critical, abre una issue por cada regla que falle y enlaza la docs_url como contexto.

Cómo usarla

Pasa el audit_id devuelto por run_audit (o por list_audits). El mismo id puede consultarse repetidamente; los resultados se cachean en servidor y leerlos es barato.

Esquema de entrada

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

Ejemplo de esquema de respuesta

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

Pide:

Recupera la auditoría de MetricSpot aud_01HZ8X9YP7K3T2N6Q5 y lista cada hallazgo fallido agrupado por módulo, ordenado por severidad.

Cursor

.cursor/mcp.json:

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

Pide:

Trae la última auditoría de esta URL desde MetricSpot y reescribe el título de la página para corregir cualquier regla on-page que falle.

Python (sondear hasta completar)

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

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

Errores comunes

CódigoCuándoAcción
UNAUTHORIZED (401)Token Bearer ausente o inválidoEmite una clave en https://app.metricspot.com/settings/api-keys
AUDIT_NOT_FOUND (404)El audit_id no pertenece a esta cuentaLlama a list_audits para ver ids válidos
FORBIDDEN (403)El token carece de scope de lecturaReemite la clave con el scope por defecto
UPSTREAM_FAILED (5xx)Error en el backend de la appReintenta; en fallos transitorios se establece retryable: true

Preguntas frecuentes

¿Con qué frecuencia debo sondear una auditoría encolada?

Cada 3-5 segundos es el punto óptimo. La mayoría de auditorías completan en 10-30 s, así que 6-10 sondeos por auditoría es lo típico. No hay coste por llamada más allá de la red. Reduce el ritmo si status se queda en queued más de 90 s.

¿Puedo recuperar una auditoría que otra persona ejecutó?

No. La búsqueda de auditoría tiene scope al propietario de la clave API. Llamar a get_audit con un audit_id de otro usuario devuelve AUDIT_NOT_FOUND en lugar de filtrar que la auditoría existe. Las auditorías anónimas (id "anonymous") no se pueden recuperar en absoluto.

¿La respuesta incluye hallazgos para reglas que pasaron?

Sí. Cada regla evaluada por el motor está en findings, con passed: true o passed: false. Filtra del lado cliente para exponer solo los fallos, o para calcular tasas de aprobado por módulo.

Fuentes

Última actualización 2026-05-13