FetchSandbox

Un motor de verificación determinista para agentes. Dispara los casos límite que tu sandbox nunca envía, y luego prueba una corrección: el mismo escenario falla en el código antiguo y pasa en el nuevo.

Documentación

fetchsandbox-mcp

FetchSandbox MCP - The MCP that proves your AI's integration fixes work | Product Hunt

También en Smithery, npm y el registro oficial de MCP.

Un motor de verificación determinista para agentes, como servidor MCP para FetchSandbox.

Tu agente escribe una integración. Esto comprueba si realmente funciona — contra un sandbox que se comporta como el proveedor real, incluidos los fallos: webhooks reintentados, tarjetas rechazadas, límites de tasa, errores de autenticación.

Cuando encuentra un error, puede proponer una corrección y luego demostrarla: el mismo fallo se ejecuta contra tu código antes y después del diff. Verde solo si se reprodujo primero y se detuvo después. Obtienes una URL de recibo de cualquier manera.

Instalación

El mismo comando stdio en todas partes. npx obtiene la versión actual, así que no hay nada que instalar.

{
  "mcpServers": {
    "fetchsandbox": {
      "command": "npx",
      "args": ["-y", "fetchsandbox-mcp@latest"]
    }
  }
}
ClienteArchivo
Claude Code~/.claude/settings.json, o .mcp.json en el repositorio
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json
Cursor~/.cursor/mcp.json, o .cursor/mcp.json en el repositorio
Zed~/.config/zed/settings.json, bajo context_servers
Codex~/.codex/config.toml, como [mcp_servers.fetchsandbox]

Reinicia el cliente después. Cualquier otra cosa que hable MCP acepta el mismo comando y argumentos.

Uso

Describe el problema como se lo describirías a un colega. No necesitas nombrar una herramienta.

Los clientes están reportando más asientos de los que compraron después de un pago de Paddle. ¿Puedes averiguar por qué?

El agente trabaja de la siguiente manera: enruta el síntoma, lo reproduce contra el sandbox del proveedor, lee tu código, obtiene una corrección, demuestra la corrección en tu código. Cada paso entrega lo que el siguiente necesita.

Una cosa que vale la pena saber, porque es fácil equivocarse: prove_fix necesita el árbol sin corregir. Ejecútalo antes de escribir el diff en el disco, o no hay error que reproducir ni prueba que obtener.

Cuentas

No necesitas una para empezar. Instálalo, haz una pregunta, y todo funciona.

La primera vez que una ejecución produce algo que vale la pena conservar — un recibo, o un conjunto de hallazgos — recibirás un código corto y un enlace. Iniciar sesión toma unos veinte segundos y hace dos cosas: la evidencia detrás de tus recibos deja de archivarse después de 15 días, y las ejecuciones de esa máquina se recopilan en un solo lugar. Se te preguntará como máximo una vez al día, y nunca una vez que hayas iniciado sesión.

Para CI, o en cualquier lugar donde no haya un navegador disponible, configura una clave en su lugar:

FETCHSANDBOX_API_KEY=fsk_...

La clave se escribe en ~/.fetchsandbox/credentials.json cuando inicias sesión desde un editor; la variable de entorno siempre gana.

Herramientas

Comienza con guide. Elige las correctas para lo que pediste.

Encontrar y corregir

HerramientaQué haceArgumentos
guideEnruta un síntoma a una especificación, flujo de trabajo y clase de fallo conocidaintent*, hints
find_bugsAudita tu proyecto contra clases de fallo de integración conocidas. No necesita un remoto de git — lee el directorio al que lo apuntespath, spec, timeout_s
fix_bugDevuelve un git diff para un hallazgo. No toca tus archivosbug*, fix_pattern, path, spec, timeout_s
prove_fixEjecuta el fallo contra tu código antes y después del diff. Verde solo con un cambio medidodiff*, bug, scenario, sandbox_id, path, timeout_s

Ejecutar el sandbox

HerramientaQué haceArgumentos
quickrunEjecuta un flujo de trabajo contra una especificación incluida en una sola llamada. Devuelve sandbox_id y flow_run_idspec_slug*, workflow_name*, scenario
verify_behaviorMuestra una clase de fallo en manejadores de referencia — con error vs corregidobug_pattern_id*, prompt, sandbox_id, flow_run_id
run_workflowEjecuta un flujo de trabajo en un sandbox que ya tienessandbox_id*, workflow_name*, scenario
run_all_workflowsEjecuta varios en una sola llamadasandbox_id*, workflow_names
list_workflowsFlujos de trabajo disponibles para una especificaciónspec_id*
list_runsEjecuciones pasadas para un sandboxsandbox_id*, limit

Traer tu propia especificación

HerramientaQué haceArgumentos
list_specsEspecificaciones ya disponiblesfilter
import_specIngiere una especificación OpenAPI 3.x por URL o contenido pegado. Devuelve un sandbox invocableurl, content, name
submit_proofPublica un recibo para una ejecuciónsandbox_id, flow_run_id, bug_pattern_id, summary, proofs
coachAyuda de múltiples turnos para construir una integraciónintent, session_id, user_response, context

* = requerido.

Qué sale de tu máquina

find_bugs, fix_bug y prove_fix empaquetan el directorio al que los apuntes y lo suben para análisis. Vale la pena decirlo claramente, porque la redacción anterior aquí implicaba lo contrario.

Excluido antes de empaquetar: .git, node_modules y la salida de compilación, archivos de instrucciones del agente, y cualquier cosa con forma de credencial — .env*, *.pem, *.key, id_rsa*, *.tfstate, .npmrc, .aws, .ssh y más.

Luego el archivo se lee de nuevo y se rechaza si todavía contiene algo con forma de credencial viva, dondequiera que esté y como se llame. Una clave en config/local.yml detiene la subida y nombra el archivo. Los patrones solo cubren lo que alguien pensó; el escaneo está ahí para el resto.

Si prefieres que no salga nada en absoluto, el análisis necesita la fuente hoy. Ese es el estado honesto.

Los recibos son públicos para cualquiera que tenga el enlace

submit_proof adjunta las solicitudes y respuestas reales de la ejecución antes/después de tu aplicación a la página del recibo, para que el recibo muestre el comportamiento propio de tu código. Esa página se sirve sin inicio de sesión — ese es el propósito, pegas el enlace en un PR — lo que significa que los cuerpos en ella son legibles por cualquiera que tenga el enlace.

Las sondas se ejecutan contra el gemelo de FetchSandbox, no contra tu proveedor, así que los datos son datos del sandbox. Pero los cuerpos de las solicitudes son los que construyó tu aplicación, y esos pueden llevar valores de tu configuración. Mira un recibo antes de compartirlo.

Configuración

Variable de entornoPredeterminadoPropósito
FETCHSANDBOX_API_KEYningunoIniciar sesión sin navegador. Anula las credenciales almacenadas
FETCHSANDBOX_BASE_URLhttps://fetchsandbox.comApuntar a un backend diferente
FETCHSANDBOX_TELEMETRYactivadoEstablecer a 0 para desactivar

La telemetría registra un id opaco por máquina (un UUID aleatorio en ~/.fetchsandbox/session.json), el nombre de la herramienta, la latencia y si la llamada tuvo éxito. No contenido de especificaciones, no cuerpos de solicitudes, no credenciales. Así es como contamos sesiones y vemos qué APIs trae la gente.

Una vez que inicias sesión, las llamadas también se atribuyen a tu cuenta — ese es el punto de iniciar sesión, y es lo que permite que tus ejecuciones aparezcan en un solo lugar.

FETCHSANDBOX_TELEMETRY=0 detiene el envío del id por máquina, así que las llamadas ya no están vinculadas a tu máquina. No hace que una llamada sea invisible: el servidor todavía registra que una herramienta se ejecutó, porque es lo que la está ejecutando. Y si has iniciado sesión, tu clave te identifica de todos modos — eso es lo que es una clave. Para no ser atribuido, no inicies sesión.

Licencia

MIT — ver LICENSE.