Python Code Validator
Valida Python gerado por IA: sintaxe, lint, verificação de segurança e reparo determinístico.
Documentação
versão 1.29.0 · API v1
Prova que o Python gerado por IA faz o que você pediu: sintaxe, lint, tipos, uma política de segurança AST e uma varredura de credenciais, depois executa o código em um contêiner descartável contra os exemplos que você informa e o repara até que eles passem — retornando uma correção somente quando a execução satisfaz todos eles.
code-validationintent-checksecurity-scancode-repairsandboxed-executiona2a
O que faz
Agentes autônomos geram código mais rápido do que qualquer um pode revisar, e o código que eles erram geralmente faz parsing, lint, type-check e executa — apenas calcula a resposta errada. Então este serviço faz a única pergunta que os verificadores não conseguem: diga o que o código deveria fazer, como exemplos, e ele executa o código contra eles em um contêiner descartável sem rede e com sistema de arquivos somente leitura. Uma correção só volta quando a execução satisfaz todos os exemplos.
{"code": "def bitcount(n): …", "mode": "execute",
"options": {"examples": "assert bitcount(127) == 7"}}
# → valid: false, python:example-mismatch, and fixed_code once it holds
No conjunto de defeitos QuixBugs — bugs reais que ninguém aqui inventou, correção decidida por entradas de teste ocultas — isso repara 41% e recusa 77% como não fazendo o que dizem, sem falsos alarmes nos programas corrigidos, onde ruff e mypy sinalizam o defeito em nenhum deles (os números). Todo o resto que ele reporta é estático: parsing, linting, tipos, uma política de segurança AST que também captura chamadas escondidas atrás de imports dinâmicos e lookups de atributos em tempo de execução, e uma varredura de credenciais. Nada é executado a menos que o chamador peça execute.
Perguntar a mesma coisa duas vezes é grátis: uma chamada idêntica da mesma chave dentro de dez minutos é respondida com a resposta que já obteve (x-msvc-repeat: 1) e não é cobrada, então um agente pode verificar seu trabalho a cada passo sem pagar por veredictos que não podem ter mudado.
Idiomas aceitos: python.
Modos
| Modo | Comportamento |
|---|---|
static | Nunca executa o código. Parsing, lint, tipos, segurança, credenciais, uma pontuação. |
repair | Estático, mais o código-fonte corrigido para o que pode ser corrigido sem executá-lo. |
execute | Executa o código em um contêiner descartável e o verifica contra seus exemplos. |
Endpoints
| Caminho | Propósito | |
|---|---|---|
POST | /v1/validate | Validar, reparar ou executar um trecho. Precisa de uma chave de API. |
POST | /v1/keys | Emitir uma chave gratuita. Sem conta, sem pagamento. |
POST | /mcp | Endpoint do Model Context Protocol para agentes de codificação. Precisa de uma chave de API. |
GET | /v1/info | Descrição legível por máquina, incluindo os esquemas JSON. |
GET | /v1/client | O cliente de CI, pronto para executar com python3. Sem instalação. |
POST | /a2a | Ponto de entrada JSON-RPC agente-a-agente. Precisa de uma chave de API. |
GET | /.well-known/agent.json | Cartão de agente A2A para descoberta. |
GET | /docs | Documentação interativa do OpenAPI. |
GET | /v1/stats | Uptime, workers, chamadas em andamento e totais. |
GET | /v1/changelog | O que mudou na versão que responde. |
GET | /healthz | Sonda de liveness. |
GET | /metrics | Métricas do Prometheus. |
Obtenha uma chave
O nível gratuito é autoatendimento e não precisa de conta: um POST retorna uma chave que é válida para uma cota diária de static validações. Chaves pagas elevam o limite e desbloqueiam repair e execute.
curl -s -X POST https://api.statemind.ai/v1/keys
# {"api_key": "msvc_free_...", "calls_per_day": 100, "modes": ["static"]}
Os créditos custam 2 centavos cada e podem ser comprados com cartão: isso responde com uma página de pagamento, e os créditos caem na chave assim que o pagamento é compensado — sem fatura, sem conta, sem ninguém para perguntar. Um agente com carteira pode pagar on-chain; veja /v1/pricing.
curl -s -X POST https://api.statemind.ai/v1/keys/checkout \
-H 'content-type: application/json' \
-d '{"api_key": "<your key>", "credits": 500}'
Experimente
curl -s https://api.statemind.ai/v1/validate \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"language": "python", "mode": "static", "code": "import os\nos.system(\"id\")\n"}'
Requisições sem uma chave válida são rejeitadas com 401, uma chave gratuita gasta com 429, e um modo que o nível gratuito não cobre com 402. Toda resposta carrega x-quota-remaining.
Use-o a partir de um agente de codificação
O mesmo validador é um servidor MCP, então Claude Code, Cursor, Windsurf, VS Code e qualquer outra coisa que fale MCP sobre HTTP podem chamá-lo como ferramenta. Coloque isso na configuração MCP do cliente:
{
"mcpServers": {
"python-code-validator": {
"url": "https://api.statemind.ai/mcp",
"headers": { "Authorization": "Bearer msvc_free_..." }
}
}
}
Chamadores agente-a-agente, em vez disso, leem o cartão do agente e postam em /a2a.
Use-o em CI
As mesmas verificações são executadas sobre os arquivos alterados de um pull request. O cliente é apenas biblioteca padrão e o serviço o entrega, então não há nada para instalar e nenhum segredo para configurar — ele emite sua própria chave gratuita. Os resultados são impressos como anotações do GitHub, então caem no diff.
curl -sf https://api.statemind.ai/v1/client -o validate.py
python3 validate.py --changed-against origin/main
# ::error file=service.py,line=88,title=SyntaxError::invalid syntax
Pague por chamada, on-chain
O mesmo validador responde a requisições no Olas Mech Marketplace, então um agente com carteira não precisa de chave nem conta. Nomeie este mech como o mech prioritário, ou o marketplace roteia a requisição para outra pessoa:
pip install mech-client
mechx request \
--prompts '{"code": "import os\nos.system(\"id\")\n"}' \
--tools python_code_validator \
--priority-mech 0x2D64FEE808Fba217aee1210e3574432C31EdcdAB \
--chain-config gnosis
O veredicto volta pelo marketplace e é fixado no IPFS, o que torna tanto o código enviado quanto o veredicto públicos — use a API HTTP para qualquer coisa que prefira manter privada.