SandboxAPIs

Réplicas somente leitura de GitHub, Jira, Slack e mais 18, pré-carregadas com uma empresa fictícia.

Documentação

Exemplos do SandboxAPIs

Testar um agente que lê GitHub, Jira ou Slack significa manter uma conta de teste ativa, preenchê-la com dados que não se parecem em nada com produção e observar a suíte falhar quando alguém a altera. O SandboxAPIs substitui isso por réplicas somente leitura e compatíveis com API de 21 APIs de desenvolvedores e SaaS, todas pré-carregadas com uma empresa de engenharia simulada cujas referências se resolvem em todos os provedores. Aponte a URL base do seu cliente para nós e seu código de leitura funciona sem alterações, sem cadastro e sem scripts de seed.

Este repositório contém as partes executáveis: um pacote de avaliação com gabarito, três tutoriais de agente que você pode executar e as receitas de instalação do servidor MCP. O serviço em si está em sandboxapis.dev.

O servidor MCP

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

Em seguida, peça ao agente para chamar orient primeiro. Ele retorna com as superfícies de API e suas URLs base, a empresa simulada e suas equipes, pontos de entrada notáveis, cada um com uma solicitação pronta para execução, como fixar um snapshot reproduzível, onde o manifesto de cobertura está localizado e um bloco access dizendo o que o servidor pode gastar. Isso é suficiente para fazer uma chamada correta sem ler documentação.

O código-fonte do servidor é público em github.com/driftwork-llc/sandboxapis-mcp, licenciado sob MIT.

Claude Desktop

Adicione isto a claude_desktop_config.json:

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

Cursor

Instalação com um clique do servidor sem chave: Adicionar ao Cursor

Copie isto na barra de endereço se o botão não abrir o Cursor:

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

O link carrega apenas { "command": "npx", "args": ["-y", "@sandboxapis/mcp"] }, e o Cursor mostra isso a você antes de instalar. Ou adicione isto a .cursor/mcp.json no seu projeto, ou a ~/.cursor/mcp.json para todos os projetos:

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

Uma chave de API é opcional

Tudo funciona sem configuração. Uma chave gratuita eleva o limite anônimo de 60 solicitações por hora para 600, o que um agente em loop vai querer:

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

As chaves são gratuitas em sandboxapis.dev/login.

O plugin do Cursor

cursor-plugin/ é o mesmo servidor como um plugin do Cursor, com uma regra que ensina o agente a chamar orient primeiro e check_budget antes de loops, e uma habilidade que executa o pacote de avaliação abaixo. Abrir este repositório no Cursor aplica a regra por conta própria, a partir de .cursor/rules/sandboxapis.mdc. O passo a passo está em sandboxapis.dev/docs/tutorials/cursor.

Ferramentas

FerramentaO que faz
orientComece aqui. Auto-orientação completa, sem necessidade de documentação, incluindo um bloco access: com ou sem chave, solicitações restantes nesta hora e onde aumentar o limite.
check_budgetNão custa nada. Chame antes de qualquer loop com mais de algumas solicitações: limite, restante, quando a janela reinicia.
list_repositories / get_repositoryRepositórios, no formato do provedor, com ids no formato do provedor.
list_pull_requests / get_pull_requestPull requests e merge requests com suas revisões ou aprovações.
list_issuesIssues. REST nos hosts git e Jira, GraphQL no Linear.
get_userUm usuário por login ou nome de usuário.
search_commits_by_authorCommits por autor, com SHAs que fazem referência cruzada entre hosts.
get_snapshotO hostname fixado para CI sem flutuação.

Os resultados vêm da mesma API pública que um humano apontaria um cliente, então qualquer coisa que um agente aprender aqui transfere diretamente para uma chamada curl ou Octokit.

Escritas são recusadas de propósito

Tudo é somente leitura. Uma mutação retorna o formato de erro do próprio provedor com uma explicação simples, então um agente que tenta uma aprende algo em vez de quebrar algo. Um endpoint REST não coberto retorna um 404 real mais um cabeçalho X-SandboxAPIs-Coverage apontando para o manifesto de cobertura; um campo GraphQL não coberto retorna um erro de cobertura explícito em vez de um null silencioso. Você nunca receberá um valor inventado com aparência plausível.

O que está neste repositório

evals/: o pacote de avaliação com gabarito

53 fatos conhecidos sobre o conjunto de dados olympus-labs em 5 serviços, cada um com a solicitação que o responde e o valor que deve retornar. Cada host no pacote é um snapshot fixado, então a mesma pergunta retorna a mesma resposta em cada execução.

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

Uma execução completa faz 12 solicitações, o que cabe no orçamento anônimo por hora. Ambos os harnesses leem a resposta diretamente da resposta, o que pontua o conjunto de dados. A função answer() em cada um é o único lugar para mudar: coloque sua chamada de modelo lá, execute com --agent, e as mesmas expectativas agora pontuam seu agente.

Cada item carrega guarded_by, nomeando o teste que falharia se a resposta mudasse. Esses testes vivem no repositório do motor SandboxAPIs, que é privado; a citação está lá para que você possa ver que cada resposta é fixada por um teste em vez de digitada de memória.

tutorials/: três tarefas de agente, como arquivos executáveis

Um provedor de cada uma das três categorias que um harness de avaliação de agente alcança primeiro: um host git, um rastreador e um log de chat. Cada diretório contém o script do agente, a mesma afirmação como um arquivo pytest de cinco linhas e um README com a saída capturada.

DiretórioA pergunta que o agente com script responde
tutorials/githubA correção para o incidente foi lançada, e alguém além do autor a aprovou?
tutorials/jiraQuanto tempo levou para fechar o incidente, e superou a meta de 72 horas da equipe?
tutorials/slackO tópico do incidente está resolvido, quem o encerrou e quantas pessoas estavam nele?
cd tutorials/github
pip install requests && python3 github_agent.py

Todos os três leem o mesmo incidente de três APIs diferentes, e concordam entre si. Esse é o ponto do conjunto de dados.

cursor-plugin/: o plugin do Cursor

O servidor MCP, uma regra e uma habilidade no formato de plugin do Cursor, instalável como plugin local hoje. Veja seu README.

mcp/: metadados de diretório e uma receita de contêiner

Notas sobre o que o servidor MCP precisa para cada canal de distribuição e um Dockerfile para executá-lo em um contêiner.

Links

Licença

Tudo neste repositório é licenciado sob MIT. Veja LICENSE. O serviço hospedado e o motor que gera o conjunto de dados são separados e não são cobertos por ela.

Issues são bem-vindas aqui

Registre-as aqui em vez de enviar e-mail. Duas coisas são especialmente úteis:

  • Uma solicitação de cobertura. Um endpoint ou campo que você precisa e que retorna um 404 de cobertura hoje. Diga qual cliente você está dirigindo e o que ele chama.
  • Uma resposta errada. Algo que não corresponde ao que o provedor real retorna. Inclua a solicitação, o que voltou e o que a API real retorna em vez disso.

Modelos para ambos estão no formulário de issue. O manifesto de cobertura em sandboxapis.dev/coverage é a resposta atual para o que é servido.