FetchSandbox

Um mecanismo de verificação determinística para agentes. Dispara os casos extremos que seu sandbox nunca envia e, em seguida, comprova uma correção: o mesmo cenário falha no código antigo e passa no novo.

Documentação

fetchsandbox-mcp

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

Também no Smithery, npm e no registro oficial de MCP.

Um mecanismo de verificação determinística para agentes, como um servidor MCP para FetchSandbox.

Seu agente escreve uma integração. Isto verifica se ela realmente funciona — contra um sandbox que se comporta como o provedor real, incluindo as falhas: webhooks reprocessados, cartões recusados, limites de taxa, erros de autenticação.

Quando encontra um bug, pode propor uma correção e depois prová-la: a mesma falha é executada contra seu código antes e depois do diff. Verde somente se reproduziu primeiro e parou depois. Você recebe uma URL de recibo de qualquer forma.

Instalação

O mesmo comando stdio em todos os lugares. npx busca a versão atual, então não há nada para instalar.

{
  "mcpServers": {
    "fetchsandbox": {
      "command": "npx",
      "args": ["-y", "fetchsandbox-mcp@latest"]
    }
  }
}
ClienteArquivo
Claude Code~/.claude/settings.json, ou .mcp.json no repositório
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json
Cursor~/.cursor/mcp.json, ou .cursor/mcp.json no repositório
Zed~/.config/zed/settings.json, em context_servers
Codex~/.codex/config.toml, como [mcp_servers.fetchsandbox]

Reinicie o cliente depois. Qualquer outra coisa que fale MCP aceita o mesmo comando e argumentos.

Como usar

Descreva o problema da mesma forma que descreveria para um colega. Você não precisa nomear uma ferramenta.

Clientes estão relatando mais assentos do que compraram após um pagamento no Paddle. Você consegue descobrir o porquê?

O agente trabalha assim: roteia o sintoma, reproduz contra o sandbox do provedor, lê seu código, obtém uma correção, prova a correção no seu código. Cada etapa entrega o que a próxima precisa.

Uma coisa que vale saber, porque é fácil errar: prove_fix precisa da árvore sem correção. Execute antes de gravar o diff no disco, ou não haverá bug para reproduzir e nenhuma prova a obter.

Contas

Você não precisa de uma para começar. Instale, faça uma pergunta, e tudo funciona.

Na primeira vez que uma execução produzir algo que vale a pena manter — um recibo, ou um conjunto de descobertas — você receberá um código curto e um link. Entrar leva cerca de vinte segundos e faz duas coisas: as evidências por trás dos seus recibos deixam de ser arquivadas após 15 dias, e as execuções daquela máquina se reúnem em um só lugar. Você será solicitado no máximo uma vez por dia, e nunca depois de entrar.

Para CI, ou em qualquer lugar onde um navegador não esteja disponível, defina uma chave:

FETCHSANDBOX_API_KEY=fsk_...

A chave é gravada em ~/.fetchsandbox/credentials.json quando você entra a partir de um editor; a variável de ambiente sempre vence.

Ferramentas

Comece com guide. Ela escolhe as ferramentas certas para o que você pediu.

Encontrar e corrigir

FerramentaO que fazArgumentos
guideRoteia um sintoma para uma especificação, fluxo de trabalho e classe de falha conhecidaintent*, hints
find_bugsAudita seu projeto contra classes de falha de integração conhecidas. Não precisa de remote git — lê o diretório que você apontarpath, spec, timeout_s
fix_bugRetorna um git diff para uma descoberta. Não toca nos seus arquivosbug*, fix_pattern, path, spec, timeout_s
prove_fixExecuta a falha contra seu código antes e depois do diff. Verde somente em uma inversão medidadiff*, bug, scenario, sandbox_id, path, timeout_s

Executando o sandbox

FerramentaO que fazArgumentos
quickrunExecuta um fluxo de trabalho contra uma especificação incluída em uma chamada. Retorna sandbox_id e flow_run_idspec_slug*, workflow_name*, scenario
verify_behaviorMostra uma classe de falha em handlers de referência — com bug vs corrigidobug_pattern_id*, prompt, sandbox_id, flow_run_id
run_workflowExecuta um fluxo de trabalho em um sandbox que você já temsandbox_id*, workflow_name*, scenario
run_all_workflowsExecuta vários em uma chamadasandbox_id*, workflow_names
list_workflowsFluxos de trabalho disponíveis para uma especificaçãospec_id*
list_runsExecuções passadas para um sandboxsandbox_id*, limit

Trazendo sua própria especificação

FerramentaO que fazArgumentos
list_specsEspecificações já disponíveisfilter
import_specIngere uma especificação OpenAPI 3.x por URL ou conteúdo colado. Retorna um sandbox chamávelurl, content, name
submit_proofPublica um recibo para uma execuçãosandbox_id, flow_run_id, bug_pattern_id, summary, proofs
coachAjuda em múltiplas etapas para construir uma integraçãointent, session_id, user_response, context

* = obrigatório.

O que sai da sua máquina

find_bugs, fix_bug e prove_fix empacotam o diretório que você aponta e o enviam para análise. Vale dizer claramente, porque o texto anterior aqui implicava o contrário.

Excluídos antes do empacotamento: .git, node_modules e saída de build, arquivos de instrução do agente, e qualquer coisa com formato de credencial — .env*, *.pem, *.key, id_rsa*, *.tfstate, .npmrc, .aws, .ssh e mais.

Depois o arquivo é relido e recusado se ainda contiver algo com formato de credencial viva, onde quer que esteja e como quer que se chame. Uma chave em config/local.yml interrompe o upload e nomeia o arquivo. Padrões apenas cobrem o que alguém pensou; a varredura existe para o resto.

Se você preferir que nada saia, a análise precisa do código-fonte hoje. Esse é o estado honesto.

Recibos são públicos para qualquer pessoa com o link

submit_proof anexa as requisições e respostas reais da execução antes/depois do seu aplicativo à página do recibo, então o recibo mostra o comportamento do seu próprio código. Essa página é servida sem login — esse é o objetivo, você coloca o link em um PR — o que significa que os corpos nela são legíveis por qualquer pessoa que tenha o link.

As sondas rodam contra o gêmeo FetchSandbox, não contra seu provedor, então os dados são dados de sandbox. Mas os corpos das requisições são os que seu aplicativo construiu, e esses podem carregar valores da sua configuração. Olhe um recibo antes de compartilhá-lo.

Configuração

Variável de ambientePadrãoFinalidade
FETCHSANDBOX_API_KEYnenhumEntrar sem navegador. Substitui as credenciais armazenadas
FETCHSANDBOX_BASE_URLhttps://fetchsandbox.comApontar para um backend diferente
FETCHSANDBOX_TELEMETRYativadoDefina como 0 para desativar

A telemetria registra um id opaco por máquina (um UUID aleatório em ~/.fetchsandbox/session.json), o nome da ferramenta, a latência e se a chamada foi bem-sucedida. Não conteúdo de especificação, não corpos de requisição, não credenciais. É assim que contamos sessões e vemos quais APIs as pessoas trazem.

Depois que você entra, as chamadas também são atribuídas à sua conta — esse é o objetivo de entrar, e é o que permite que suas execuções apareçam em um só lugar.

FETCHSANDBOX_TELEMETRY=0 impede que o id por máquina seja enviado, então as chamadas não são mais vinculadas à sua máquina. Isso não torna uma chamada invisível: o servidor ainda registra que uma ferramenta foi executada, porque é ele quem a executa. E se você estiver conectado, sua chave identifica você independentemente — é isso que uma chave é. Para não ser atribuído, não entre.

Licença

MIT — veja LICENSE.