SandboxAPIs

Réplicas de solo lectura de GitHub, Jira, Slack y 18 más, precargadas con una empresa ficticia.

Documentación

Ejemplos de SandboxAPIs

Probar un agente que lee GitHub, Jira o Slack significa mantener una cuenta de prueba activa, sembrarla con datos que no se parecen en nada a producción, y ver cómo la suite falla cuando alguien la modifica. SandboxAPIs reemplaza eso con réplicas de solo lectura, compatibles con la API, de 21 APIs de desarrolladores y SaaS, todas precargadas con una empresa de ingeniería simulada cuyas referencias se resuelven en todos los proveedores. Apunta la URL base de tu cliente hacia nosotros y tu código de lectura funciona sin cambios, sin registro y sin scripts de siembra.

Este repositorio contiene las partes ejecutables: un paquete de evaluación con clave de respuestas, tres tutoriales de agentes que puedes ejecutar, y las recetas de instalación del servidor MCP. El servicio en sí vive en sandboxapis.dev.

El servidor MCP

claude mcp add sandboxapis -- npx -y @sandboxapis/mcp

Luego haz que el agente llame a orient primero. Devuelve las superficies de API y sus URLs base, la empresa simulada y sus equipos, puntos de entrada notables cada uno con una solicitud lista para ejecutar, cómo fijar una instantánea reproducible, dónde vive el manifiesto de cobertura, y un bloque access que dice en qué puede gastar el servidor. Eso es suficiente para hacer una llamada correcta sin leer documentación.

El código fuente del servidor es público en github.com/driftwork-llc/sandboxapis-mcp, con licencia MIT.

Claude Desktop

Añade esto a claude_desktop_config.json:

{
  "mcpServers": {
    "sandboxapis": {
      "command": "npx",
      "args": ["-y", "@sandboxapis/mcp"]
    }
  }
}

Cursor

Un clic instala el servidor sin clave: Añadir a Cursor

Copia esto en la barra de direcciones si el botón no abre Cursor:

cursor://anysphere.cursor-deeplink/mcp/install?name=sandboxapis&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBzYW5kYm94YXBpcy9tY3AiXX0=

El enlace solo lleva { "command": "npx", "args": ["-y", "@sandboxapis/mcp"] }, y Cursor te lo muestra antes de instalar. O añade esto a .cursor/mcp.json en tu proyecto, o a ~/.cursor/mcp.json para cada proyecto:

{
  "mcpServers": {
    "sandboxapis": {
      "command": "npx",
      "args": ["-y", "@sandboxapis/mcp"]
    }
  }
}

Una clave de API es opcional

Todo funciona sin configuración. Una clave gratuita eleva el límite anónimo de 60 solicitudes por hora a 600, algo que un agente en un bucle querrá:

{
  "mcpServers": {
    "sandboxapis": {
      "command": "npx",
      "args": ["-y", "@sandboxapis/mcp"],
      "env": { "SANDBOXAPIS_API_KEY": "sk_live_..." }
    }
  }
}

Las claves son gratuitas en sandboxapis.dev/login.

El plugin de Cursor

cursor-plugin/ es el mismo servidor como plugin de Cursor, con una regla que enseña al agente a llamar a orient primero y a check_budget antes de los bucles, y una habilidad que ejecuta el paquete de evaluación de abajo. Abrir este repositorio en Cursor aplica la regla por sí solo, desde .cursor/rules/sandboxapis.mdc. El tutorial está en sandboxapis.dev/docs/tutorials/cursor.

Herramientas

HerramientaQué hace
orientEmpieza aquí. Auto-orientación completa, sin necesidad de documentación, incluyendo un bloque access: con clave o sin ella, solicitudes restantes esta hora, y dónde subir el límite.
check_budgetNo cuesta nada. Llámala antes de cualquier bucle de más de un puñado de solicitudes: límite, restante, cuándo se reinicia la ventana.
list_repositories / get_repositoryRepositorios, con forma de proveedor, con ids con formato de proveedor.
list_pull_requests / get_pull_requestPull requests y merge requests con sus revisiones o aprobaciones.
list_issuesIssues. REST en los hosts de git y Jira, GraphQL en Linear.
get_userUn usuario por login o nombre de usuario.
search_commits_by_authorCommits por autor, con SHAs que se referencian cruzadamente entre hosts.
get_snapshotEl hostname fijado para CI sin desvíos.

Los resultados provienen de la misma API pública a la que un humano apuntaría un cliente, así que cualquier cosa que un agente aprenda aquí se transfiere directamente a una llamada curl o Octokit.

Las escrituras se rechazan a propósito

Todo es de solo lectura. Una mutación devuelve la forma de error propia del proveedor con una explicación clara, así que un agente que intente una aprende algo en lugar de romper algo. Un endpoint REST no cubierto devuelve un 404 real más un encabezado X-SandboxAPIs-Coverage que apunta al manifiesto de cobertura; un campo GraphQL no cubierto devuelve un error de cobertura explícito en lugar de un null silencioso. Nunca recibirás un valor inventado que parezca plausible.

Qué hay en este repositorio

evals/: el paquete de evaluación con clave de respuestas

53 hechos conocidos sobre el conjunto de datos olympus-labs en 5 servicios, cada uno con la solicitud que lo responde y el valor que debe devolver. Cada host en el paquete es una instantánea fijada, así que la misma pregunta devuelve la misma respuesta en cada ejecución.

cd evals
node run.mjs              # Node 22, no dependencies
# or
pip install requests && python3 run.py

Una ejecución completa hace 12 solicitudes, lo que cabe dentro del presupuesto horario anónimo. Ambos arneses leen la respuesta directamente de la respuesta, lo que puntúa el conjunto de datos. La función answer() en cada uno es el único lugar a cambiar: pon tu llamada de modelo allí, ejecuta con --agent, y las mismas expectativas ahora puntúan a tu agente.

Cada elemento lleva guarded_by, nombrando la prueba que fallaría si la respuesta cambiara. Esas pruebas viven en el repositorio del motor de SandboxAPIs, que es privado; la cita está ahí para que veas que cada respuesta está fijada por una prueba en lugar de escrita de memoria.

tutorials/: tres tareas de agente, como archivos ejecutables

Un proveedor de cada una de las tres categorías a las que un arnés de evaluación de agentes recurre primero: un host de git, un rastreador y un registro de chat. Cada directorio contiene el script del agente, la misma afirmación como archivo pytest de cinco líneas, y un README con la salida capturada.

DirectorioLa pregunta que responde el agente con script
tutorials/github¿Se envió la corrección del incidente, y alguien distinto de su autor la aprobó?
tutorials/jira¿Cuánto tardó el incidente en cerrarse, y superó el objetivo de 72 horas del equipo?
tutorials/slack¿Está resuelto el hilo del incidente, quién lo declaró, y cuántas personas había en él?
cd tutorials/github
pip install requests && python3 github_agent.py

Los tres leen el mismo incidente desde tres APIs diferentes, y coinciden entre sí. Ese es el punto del conjunto de datos.

cursor-plugin/: el plugin de Cursor

El servidor MCP, una regla y una habilidad en el formato de plugin de Cursor, instalable como plugin local hoy. Consulta su README.

mcp/: metadatos de directorio y una receta de contenedor

Notas sobre lo que el servidor MCP necesita para cada canal de distribución, y un Dockerfile para ejecutarlo en un contenedor.

Enlaces

Licencia

Todo en este repositorio tiene licencia MIT. Consulta LICENSE. El servicio alojado y el motor que genera el conjunto de datos son separados y no están cubiertos por ella.

Issues bienvenidos aquí

Regístralos aquí en lugar de enviar correos. Dos cosas son especialmente útiles:

  • Una solicitud de cobertura. Un endpoint o campo que necesites y que devuelva un 404 de cobertura hoy. Di qué cliente estás manejando y qué llama.
  • Una respuesta incorrecta. Algo que no coincide con lo que devuelve el proveedor real. Incluye la solicitud, lo que devolvió, y lo que la API real devuelve en su lugar.

Las plantillas para ambas están en el formulario de issues. El manifiesto de cobertura en sandboxapis.dev/coverage es la respuesta actual sobre lo que se sirve.