Skip to main content
Sign in →

API de Veredicto

Permite que tu propia API o servidor MCP consulte a ShieldAgent para obtener un veredicto de seguridad antes de ejecutar cualquier llamada a herramienta — sin cambiar el flujo de tráfico.

Resumen

La API de Veredicto está diseñada para clientes que poseen y operan su propia API o servidor MCP. En lugar de enrutar el tráfico del agente a través del proxy de ShieldAgent, tu servidor llama a client.scan() con el payload de la solicitud entrante. ShieldAgent ejecuta el pipeline completo multi-etapa y devuelve un veredicto — allow, block, o human_review. Tu código lo aplica.

El flujo de tráfico del agente permanece completamente sin cambios. El agente habla con tu servidor normalmente. Tu servidor realiza una llamada HTTP separada a ShieldAgent y decide si ejecutar la herramienta.

Flujo de tráfico
Agent ──► Your Server (API / MCP)
│ SDK: client.scan(payload)
ShieldAgent API (runs security pipeline)
│ verdict: allow / block / human_review
Your Server (executes if allowed, rejects if blocked)

¿Cuándo usar la API de Veredicto?

SituaciónEnfoque recomendado
Operas tu propia API REST a la que llaman los agentesAPI de Veredicto — añade client.scan() antes de que se ejecute tu manejador
Operas tu propio servidor MCP con manejadores de herramientasAPI de Veredicto — añade client.scan() en cada manejador de herramienta
Quieres análisis de seguridad sin cambiar el enrutamiento del agenteAPI de Veredicto — la URL del endpoint del agente permanece igual
No posees el servidor (los agentes llaman a un tercero)Proxy en línea — enruta los agentes a través de ShieldAgent
Quieres bloqueo garantizado por infraestructura (no puedes confiar en el código)Proxy en línea o sidecar — ShieldAgent bloquea antes de reenviar

Inicio rápido

TypeScript — servidor MCP

typescript
import { ShieldAgentClient } from '@shieldagent/sdk';

const shield = new ShieldAgentClient({
  baseUrl: 'https://proxy.shieldagent.io',
  apiKey: '{your-api-key}',
});

// Inside your MCP tool handler:
async function handleToolCall(toolName: string, params: unknown) {
  const verdict = await shield.scan({
    tenantId: '{your-tenant-id}',
    toolName,
    params,
    // agentId is optional — see "Agent Identity" section below
    context: { transport: 'mcp' },
  });

  if (verdict.action === 'block') {
    throw new Error(`Blocked: ${verdict.reason}`);
  }

  if (verdict.action === 'human_review') {
    return { status: 'pending_review', reviewId: verdict.reviewId };
  }

  // verdict.action === 'allow'
  return executeToolLocally(toolName, params);
}

Python — manejador de API REST

python
from shieldagent import ShieldAgentClient

shield = ShieldAgentClient(
    base_url="https://proxy.shieldagent.io",
    api_key="{your-api-key}",
)

# Inside your API handler:
async def handle_request(agent_id: str, method: str, path: str, body: dict):
    verdict = await shield.scan(
        tenant_id="{your-tenant-id}",
        agent_id=agent_id,          # optional — omit if not known
        tool_name=f"api:{method}:{path}",
        params={"method": method, "path": path, "body": body},
        context={"transport": "rest"},
    )

    if verdict.action == "block":
        raise HTTPException(status_code=403, detail=verdict.reason)

    if verdict.action == "human_review":
        return {"status": "pending_review", "review_id": verdict.review_id}

    return execute_handler(method, path, body)

Solicitud de análisis

El SDK llama a POST /tenants/:tenantId/scan en el proxy de ShieldAgent (puerto 3100). Autentícate con una clave API de tenant (token Bearer).

json
{
  "agentId": "agent-uuid",          // OPTIONAL — omit if server cannot identify the agent
  "clientHint": "Claude Desktop",   // OPTIONAL — from MCP clientInfo.name, for best-effort matching
  "toolName": "read_file",
  "params": { "path": "/etc/passwd" },
  "include_findings": false,        // opt-in; requires verdictDetailedFindings tenant permission
  "context": {
    "transport": "mcp",             // "mcp" | "rest" | "custom"
    "sourceIp": "10.0.1.5",         // optional — used for rate limiting
    "sessionId": "sess-123"         // optional — enables excessive agency detection
  }
}

Respuesta de análisis

Por defecto (todos los tenants)

json
{
  "action": "block",                        // "allow" | "block" | "human_review"
  "reason": "Security threat detected",     // generic — no detection detail
  "riskScore": 87,
  "auditEventId": "evt-uuid",               // audit event was written
  "reviewId": null                          // set when action is "human_review"
}

Hallazgos detallados ((requiere include_findings: true + permiso del tenant))

json
{
  "action": "block",
  "reason": "Prompt injection detected in tool arguments",
  "findings": [
    {
      "type": "injection",
      "severity": "critical",
      "detail": "Path traversal pattern detected",
      "scanner": "regex"
    }
  ],
  "riskScore": 87,
  "auditEventId": "evt-uuid",
  "reviewId": null
}

Los hallazgos detallados están desactivados por defecto. Sin niveles, un atacante con acceso a la API de Veredicto podría sondear iterativamente qué escáner detectó su payload y elaborar intentos de evasión. Actívalo solo para herramientas internas de confianza mediante la configuración del tenant en el panel de ShieldAgent.

Etapas del pipeline

La API de Veredicto ejecuta el mismo pipeline multi-etapa que el proxy. La única diferencia: el paso de reenvío se omite y el veredicto se devuelve a tu código en su lugar.

EtapaComportamiento en la API de Veredicto
AuthClave API → resolución del tenant. AuthContext construido desde el cuerpo de la solicitud (agentId).
Risk HintBusca la puntuación de riesgo en caché para el agente (si se proporciona agentId).
Rate LimitLímite de velocidad por tenant y por agente via Redis.
Tool AccessVerifica la lista de herramientas aprobadas (approved_tools) para el agente.
PolicyEvalúa las reglas de política compiladas contra toolName + params.
SecurityInyección de prompts (regex + ML), análisis DLP, deriva de herramientas, origen cruzado, agencia excesiva.
Risk EnforcementBloqueo basado en niveles si la puntuación de riesgo del agente supera el umbral.
AuditEscribe el evento de auditoría con source: 'verdict_api' (distingue de eventos proxy).
ForwardOMITIDO — el veredicto se devuelve al llamante en su lugar.

Identidad del agente

agentId es opcional. El protocolo MCP no expone la identidad del agente — clientInfo del handshake de inicialización MCP initialize identifica el software cliente (p. ej., "Claude Desktop"), no al agente individual. Tu API o servidor MCP puede no saber qué agente específico está llamando.

EscenarioQué enviarComportamiento del pipeline
Tu API HTTP autentica agentes y los mapea a IDs de agente de ShieldAgentagentId: "agent-uuid"Pipeline completo por agente: políticas por agente, puntuación de riesgo, límites de velocidad, lista de herramientas permitidas
Tu servidor MCP conoce el software cliente (de MCP clientInfo.name) pero no el agenteclientHint: "Claude Desktop"ShieldAgent busca coincidencia con los nombres de agentes registrados. Si exactamente uno coincide, lo usa. De lo contrario, recurre al nivel del tenant.
Tu servidor no puede identificar al agente que llama(omitir agentId y clientHint)Pipeline del tenant: políticas de todo el tenant, sin riesgo ni línea base por agente

Observabilidad de la aplicación

Dado que tu código aplica el veredicto (no la infraestructura de ShieldAgent), el registro de auditoría no puede confirmar automáticamente si se respetó un veredicto de block . Usa client.confirmExecution() para cerrar el ciclo.

typescript
// After executing or rejecting a tool call, confirm the outcome:
await shield.confirmExecution(verdict.auditEventId, {
  executed: false,   // true = tool ran; false = tool was blocked by your code
});

Nota de cumplimiento

Los tenants que no llaman a confirmExecution() aparecen como aplicación desconocida en los informes de cumplimiento de ShieldAgent. Para el cumplimiento del Art. 9 de la Ley de IA de la UE, las organizaciones que usan la API de Veredicto deben documentar su mecanismo de aplicación y demostrar tasas de aplicación mediante evidencia de auditoría. El informe Anexo IV generado automáticamente por ShieldAgent incluye tu posición de despliegue y las tasas de confirmExecution() para los reguladores.

Modelo de responsabilidad compartida

La API de Veredicto transfiere la aplicación de la infraestructura de ShieldAgent a tu código. Esto es estándar en la industria de seguridad — análogo al modo Count de AWS WAF o al modo Detect de CrowdStrike. Las certificaciones de cumplimiento de ShieldAgent aplican a sus capacidades de detección y pipeline; si tu despliegue logra aplicación completa depende de tu integración.

ResponsabilidadProxy en líneaAPI de Veredicto
Detección de amenazasShieldAgentShieldAgent
Evaluación de políticasShieldAgentShieldAgent
Puntuación de riesgoShieldAgentShieldAgent
Registro de auditoríaShieldAgentShieldAgent
Aplicación (bloqueo)ShieldAgent — garantía de infraestructuraTu código — verificado via confirmExecution()

Si tus requisitos de cumplimiento exigen bloqueo garantizado por infraestructura y posees tu servidor, considera la variante sidecar-of-server — ShieldAgent se ejecuta como sidecar junto a tu servidor y bloquea en línea antes de que tu manejador se ejecute. Contacta a tu equipo de cuenta para más detalles.

Referencia de API

POST/tenants/:tenantId/scanEnvía un payload de solicitud para análisis de seguridad. Devuelve un veredicto.
POST/tenants/:tenantId/verdict-confirmationsConfirma si un veredicto de análisis fue aplicado (cierra el ciclo de auditoría).

Ambos endpoints están en el servicio proxy (puerto 3100), no en la API de Gestión. Autentícate con una clave API de ámbito de tenant (token Bearer). El proceso proxy aloja el pipeline completo — limitador de tasa, caché de políticas, clasificador ML, motor DLP, evaluador de riesgo.

Relacionado

API de Veredicto