Cortafuegos de agentes y MCP
Tu agente obedece a lo que lee. Adarve decide qué llega a leer.
Un gateway compatible con OpenAI entre tu agente y el modelo, y una API para inspeccionar todo lo que vuelve de herramientas, RAG y la web. Cambias una línea: base_url.
Gateway
Un cambio de base_url. Nada más.
El gateway habla el protocolo de chat completions de OpenAI. Tu SDK no cambia; la clave de tu proveedor viaja en una cabecera aparte.
- Inspecciona el prompt antes de llamar al modelo y la respuesta antes de devolverla
- En modo Aplicar bloquea por encima del umbral del proyecto; en Monitorizar solo informa
- La clave de Adarve necesita el alcance «gateway»
from openai import OpenAI
client = OpenAI(
base_url="https://api.adarve.dev/v1", # the only line that changes
api_key=ADARVE_KEY, # key with the "gateway" scope
default_headers={"X-Upstream-Authorization": "Bearer sk-…"}, # your provider key
)
reply = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": user_input}],
)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.adarve.dev/v1", // the only line that changes
apiKey: process.env.ADARVE_KEY, // key with the "gateway" scope
defaultHeaders: { "X-Upstream-Authorization": `Bearer ${process.env.OPENAI_API_KEY}` },
});
const reply = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: userInput }],
});Controles
Seis controles para el tráfico de un agente.
Inspección de salidas de herramientas
POST /api/v1/inspect/tool analiza lo que devolvió una herramienta, un fragmento de RAG o una página web antes de que el agente lo lea.
Fijado de esquemas MCP
La primera vez que ves una herramienta, Adarve guarda la huella SHA-256 de su definición. Si cambia después (rug pull), lo marca como «changed» hasta que lo apruebes.
Escaneo de envenenamiento
Cada campo de texto del esquema —nombre, descripción, descripciones de parámetros— pasa por el motor: instrucciones ocultas, texto invisible, descripciones desmesuradas.
Spotlighting
POST /api/v1/spotlight delimita el texto no confiable (fragmentos RAG, emails, páginas web) con una frontera aleatoria nueva en cada llamada y te da la frase de system prompt que la acompaña.
Filtro de exfiltración
Detecta imágenes y enlaces markdown, imágenes HTML y URLs que sacan datos en la query o la ruta hacia dominios fuera de tu lista.
Canary tokens
Planta un token en tu prompt de sistema. Si aparece en una respuesta o en una llamada a herramienta, hubo una fuga: score 1,0.
API de herramientas
Fija la definición. Inspecciona el resultado.
La misma llamada sirve para las dos cosas. El veredicto siempre es null: tú decides el umbral.
{
"risk_score": 0.93,
"category": "data_extraction",
"verdict": null,
"result": {
"layers": {
"egress": { "findings": [
{ "kind": "markdown_image", "host": "evil.example" } ] }
}
}
}# 1) Pin an MCP tool definition (first sight = "new"; any later change = "changed")
curl -s https://api.adarve.dev/api/v1/inspect/tool \
-H "Authorization: Bearer $ADARVE_KEY" \
-d '{"server": "weather-mcp", "definition": {"name": "forecast",
"description": "Returns the forecast for a city.",
"inputSchema": {"type": "object", "properties": {"city": {"type": "string"}}}}}'
# 2) Inspect what a tool returned before the agent reads it
curl -s https://api.adarve.dev/api/v1/inspect/tool \
-H "Authorization: Bearer $ADARVE_KEY" \
-d '{"server": "web", "result": "<page text, RAG chunk or tool output>"}'Honestidad
Los clasificadores se pueden evadir. Los controles deterministas, no tan fácilmente.
Ningún detector de prompt injection acierta siempre; el nuestro tampoco, y publicamos cómo lo medimos. Por eso los controles de agentes no dependen solo del score.
El fijado de esquemas, el spotlighting, el filtro de exfiltración y los canaries son deterministas: se mantienen aunque un atacante consiga engañar al clasificador.
Pon el adarve entre tu agente y el mundo.
Empieza con la API gratuita. El gateway y la inspección de herramientas están en todos los planes.