Python Code Validator
Valida Python generado por IA: sintaxis, lint, escaneo de seguridad y reparación determinista.
Documentación
versión 1.29.0 · API v1
Demuestra que el Python generado por IA hace lo que pediste: sintaxis, lint, tipos, una política de seguridad AST y un escaneo de credenciales, luego ejecuta el código en un contenedor desechable contra los ejemplos que indicas y lo repara hasta que pasen — devolviendo una corrección solo cuando ejecutarlo satisface cada uno de ellos.
code-validationintent-checksecurity-scancode-repairsandboxed-executiona2a
Qué hace
Los agentes autónomos generan código más rápido de lo que cualquiera puede revisarlo, y el código que se equivocan normalmente parsea, hace lint, verifica tipos y se ejecuta — solo que calcula la respuesta incorrecta. Así que este servicio hace la única pregunta que los verificadores no pueden: di qué se suponía que debía hacer el código, como ejemplos, y ejecuta el código contra ellos en un contenedor desechable sin red y con un sistema de archivos de solo lectura. Una corrección regresa solo cuando ejecutarlo satisface cada ejemplo.
{"code": "def bitcount(n): …", "mode": "execute",
"options": {"examples": "assert bitcount(127) == 7"}}
# → valid: false, python:example-mismatch, and fixed_code once it holds
En el conjunto de defectos QuixBugs — errores reales que nadie aquí inventó, la corrección decidida por entradas de prueba ocultas — eso repara el 41% y rechaza el 77% como que no hacen lo que dicen, sin falsas alarmas en los programas corregidos, donde ruff y mypy marcan el defecto en ninguno de ellos (los números). Todo lo demás que reporta es estático: parseo, lint, tipos, una política de seguridad AST que también detecta llamadas ocultas detrás de importaciones dinámicas y búsquedas de atributos en tiempo de ejecución, y un escaneo de credenciales. Nada se ejecuta a menos que el llamador pida execute.
Preguntar lo mismo dos veces es gratis: una llamada idéntica desde la misma clave dentro de diez minutos se responde con la respuesta que ya obtuvo (x-msvc-repeat: 1) y no se cobra nada, así que un agente puede verificar su trabajo en cada paso sin pagar por veredictos que no pueden haber cambiado.
Idiomas aceptados: python.
Modos
| Modo | Comportamiento |
|---|---|
static | Nunca ejecuta el código. Parseo, lint, tipos, seguridad, credenciales, una puntuación. |
repair | Estático, más el código fuente corregido para lo que se puede arreglar sin ejecutarlo. |
execute | Ejecuta el código en un contenedor desechable y lo verifica contra tus ejemplos. |
Endpoints
| Ruta | Propósito | |
|---|---|---|
POST | /v1/validate | Validar, reparar o ejecutar un fragmento. Necesita una clave API. |
POST | /v1/keys | Emitir una clave de nivel gratuito. Sin cuenta, sin pago. |
POST | /mcp | Punto de conexión del Protocolo de Contexto de Modelo para agentes de codificación. Necesita una clave API. |
GET | /v1/info | Descripción legible por máquina, incluidos los esquemas JSON. |
GET | /v1/client | El cliente de CI, listo para ejecutar con python3. Sin instalación. |
POST | /a2a | Punto de entrada JSON-RPC de agente a agente. Necesita una clave API. |
GET | /.well-known/agent.json | Tarjeta de agente A2A para descubrimiento. |
GET | /docs | Documentación interactiva de OpenAPI. |
GET | /v1/stats | Tiempo de actividad, trabajadores, llamadas en curso y totales. |
GET | /v1/changelog | Qué cambió en la versión que responde. |
GET | /healthz | Sonda de actividad. |
GET | /metrics | Métricas de Prometheus. |
Obtén una clave
El nivel gratuito es de autoservicio y no necesita cuenta: un POST devuelve una clave que es válida para una asignación diaria de static validaciones. Las claves de pago elevan el límite y desbloquean repair y execute.
curl -s -X POST https://api.statemind.ai/v1/keys
# {"api_key": "msvc_free_...", "calls_per_day": 100, "modes": ["static"]}
Los créditos cuestan 2 centavos cada uno y se pueden comprar con tarjeta: esto responde con una página de pago, y los créditos llegan a la clave tan pronto como se liquida — sin factura, sin cuenta, sin a quién preguntar. Un agente con una billetera puede pagar en cadena en su lugar; ver /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}'
Pruébalo
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"}'
Las solicitudes sin una clave válida se rechazan con 401, una clave gratuita agotada con 429, y un modo que el nivel gratuito no cubre con 402. Cada respuesta lleva x-quota-remaining.
Úsalo desde un agente de codificación
El mismo validador es un servidor MCP, así que Claude Code, Cursor, Windsurf, VS Code y cualquier otra cosa que hable MCP sobre HTTP pueden llamarlo como herramienta. Coloca esto en la configuración MCP del cliente:
{
"mcpServers": {
"python-code-validator": {
"url": "https://api.statemind.ai/mcp",
"headers": { "Authorization": "Bearer msvc_free_..." }
}
}
}
Los llamadores de agente a agente en su lugar leen la tarjeta de agente y publican en /a2a.
Úsalo en CI
Las mismas comprobaciones se ejecutan sobre los archivos modificados de una solicitud de extracción. El cliente es solo de biblioteca estándar y el servicio lo entrega, así que no hay nada que instalar ni secreto que configurar — emite su propia clave gratuita. Los hallazgos se imprimen como anotaciones de GitHub, por lo que aparecen en el 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
Paga por llamada, en cadena
El mismo validador responde solicitudes en el Mercado de Mecánicas Olas, así que un agente con billetera no necesita clave ni cuenta. Nombra este mech como el mech prioritario, o el mercado enruta la solicitud a otra persona:
pip install mech-client
mechx request \
--prompts '{"code": "import os\nos.system(\"id\")\n"}' \
--tools python_code_validator \
--priority-mech 0x2D64FEE808Fba217aee1210e3574432C31EdcdAB \
--chain-config gnosis
El veredicto regresa a través del mercado y se fija en IPFS, lo que hace públicos tanto el código enviado como el veredicto — usa la API HTTP para cualquier cosa que prefieras mantener privada.