{"name":"Spala AI","description":"Create, extend, validate, publish, and hand off authorized Spala backend projects. For execution, send exactly one structured request in request metadata spala, an application/json data part, or the <spala-execution-request> JSON text envelope. The caller generates the Step Script once; Spala stores a bounded project-scoped candidate workspace and returns candidateId for repair, approval, apply, and publish continuations. Spala performs no LLM inference.","version":"0.1.0","url":"https://agent.spala.ai/a2a/jsonrpc","preferredTransport":"JSONRPC","protocolVersion":"0.3","capabilities":{"streaming":false,"pushNotifications":false},"defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json","text/plain"],"skills":[{"id":"create_backend_project","name":"Create a Spala backend project","description":"Create a new authorized Spala project after explicit account selection.","tags":["backend","project","create","spala"],"examples":["<spala-execution-request>{\"skillId\":\"create_backend_project\",\"executionMode\":\"caller-funded\",\"organizationRef\":\"org_00000000-0000-4000-8000-000000000000\",\"projectName\":\"Customer Portal\"}</spala-execution-request>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"spalaOAuth":["api"]}]},{"id":"build_backend_from_requirements","name":"Build a backend from requirements","description":"Caller-funded by default: generate the complete Step Script locally and send it once. Retain the returned candidateId; use candidateId for later approval and publish calls, and send candidate again only when replacing the stored version. Spala performs no LLM inference.","tags":["backend","build","step-script","spala"],"examples":["<spala-execution-request>{\"skillId\":\"build_backend_from_requirements\",\"executionMode\":\"caller-funded\",\"organizationRef\":\"org_00000000-0000-4000-8000-000000000000\",\"projectRef\":\"project_00000000-0000-4000-8000-000000000000\",\"candidate\":\"<complete Step Script generated by Gemini>\"}</spala-execution-request>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"spalaOAuth":["api"]}]},{"id":"extend_backend_project","name":"Extend a Spala backend project","description":"Generate a complete Step Script candidate from the read-only project inspection and submit it once. Use the returned candidateId for continuations; include a replacement candidate only after repairFeedback requires a new version.","tags":["backend","extend","inspection","spala"],"examples":["<spala-execution-request>{\"skillId\":\"extend_backend_project\",\"executionMode\":\"caller-funded\",\"organizationRef\":\"org_00000000-0000-4000-8000-000000000000\",\"projectRef\":\"project_00000000-0000-4000-8000-000000000000\",\"candidate\":\"<complete revised Step Script generated by Gemini>\"}</spala-execution-request>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"spalaOAuth":["api"]}]},{"id":"repair_backend_project","name":"Repair a Spala backend project","description":"Use the read-only inspection and deterministic repairFeedback to repair the stored candidate. For an existing candidateId, send candidatePatch with the current candidateHash and omit candidate so unrelated resources are preserved. candidate is an authoritative complete replacement and must never contain only a partial Step Script. Spala performs no LLM inference.","tags":["backend","repair","validation","spala"],"examples":["<spala-execution-request>{\"skillId\":\"repair_backend_project\",\"executionMode\":\"caller-funded\",\"organizationRef\":\"org_00000000-0000-4000-8000-000000000000\",\"projectRef\":\"project_00000000-0000-4000-8000-000000000000\",\"candidateId\":\"candidate_00000000-0000-4000-8000-000000000000\",\"candidateHash\":\"0000000000000000000000000000000000000000000000000000000000000000\",\"candidatePatch\":[{\"find\":\"<exact existing Step Script block>\",\"replace\":\"<complete repaired Step Script block>\",\"occurrences\":1}]}</spala-execution-request>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"spalaOAuth":["api"]}]},{"id":"inspect_backend_project","name":"Inspect a Spala backend project","description":"Return bounded resource, memory, authentication, and API evidence for an authorized project.","tags":["backend","inspection","evidence","spala"],"examples":["<spala-execution-request>{\"skillId\":\"inspect_backend_project\",\"executionMode\":\"caller-funded\",\"organizationRef\":\"org_00000000-0000-4000-8000-000000000000\",\"projectRef\":\"project_00000000-0000-4000-8000-000000000000\"}</spala-execution-request>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"spalaOAuth":["api"]}]},{"id":"validate_and_prepare_release","name":"Validate and prepare a release","description":"Validate an authorized project and return bounded release blockers and evidence.","tags":["backend","validation","release","spala"],"examples":["<spala-execution-request>{\"skillId\":\"validate_and_prepare_release\",\"executionMode\":\"caller-funded\",\"organizationRef\":\"org_00000000-0000-4000-8000-000000000000\",\"projectRef\":\"project_00000000-0000-4000-8000-000000000000\"}</spala-execution-request>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"spalaOAuth":["api"]}]},{"id":"publish_approved_backend","name":"Publish an approved backend","description":"Use the stored candidateId and matching approval hash; publish only after deterministic validation and approval, then run project test review.","tags":["backend","publish","approval","review","spala"],"examples":["<spala-execution-request>{\"skillId\":\"publish_approved_backend\",\"executionMode\":\"caller-funded\",\"organizationRef\":\"org_00000000-0000-4000-8000-000000000000\",\"projectRef\":\"project_00000000-0000-4000-8000-000000000000\",\"candidateId\":\"candidate_00000000-0000-4000-8000-000000000000\",\"candidateHash\":\"0000000000000000000000000000000000000000000000000000000000000000\",\"mutationApproval\":{\"approved\":true,\"candidateId\":\"candidate_00000000-0000-4000-8000-000000000000\",\"candidateHash\":\"0000000000000000000000000000000000000000000000000000000000000000\"},\"publishApproval\":{\"approved\":true,\"candidateId\":\"candidate_00000000-0000-4000-8000-000000000000\",\"candidateHash\":\"0000000000000000000000000000000000000000000000000000000000000000\"}}</spala-execution-request>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"spalaOAuth":["api"]}]},{"id":"generate_frontend_handoff","name":"Generate frontend handoff","description":"Return bounded OpenAPI, Markdown, TypeScript SDK, and frontend integration artifacts.","tags":["openapi","typescript","frontend","handoff","spala"],"examples":["<spala-execution-request>{\"skillId\":\"generate_frontend_handoff\",\"executionMode\":\"caller-funded\",\"organizationRef\":\"org_00000000-0000-4000-8000-000000000000\",\"projectRef\":\"project_00000000-0000-4000-8000-000000000000\"}</spala-execution-request>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"spalaOAuth":["api"]}]},{"id":"preview_frontend_upload","name":"Preview a frontend static ZIP","description":"Caller-funded only: upload a bounded base64 static ZIP to the exact authorized project, validate it, and return staged preview evidence. Never activate or publish the frontend.","tags":["frontend","static-zip","preview","validation","spala"],"examples":["<spala-execution-request>{\"skillId\":\"preview_frontend_upload\",\"executionMode\":\"caller-funded\",\"organizationRef\":\"org_00000000-0000-4000-8000-000000000000\",\"projectRef\":\"project_00000000-0000-4000-8000-000000000000\",\"fileBase64\":\"UEsDBA==\",\"filename\":\"frontend-preview.zip\"}</spala-execution-request>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"spalaOAuth":["api"]}]},{"id":"activate_frontend_upload","name":"Activate an approved frontend upload","description":"Activate one previously validated staged frontend ZIP only after explicit customer approval tied to its exact upload ID.","tags":["frontend","static-zip","activation","approval","spala"],"examples":["<spala-execution-request>{\"skillId\":\"activate_frontend_upload\",\"executionMode\":\"caller-funded\",\"organizationRef\":\"org_00000000-0000-4000-8000-000000000000\",\"projectRef\":\"project_00000000-0000-4000-8000-000000000000\",\"uploadId\":\"frontend_upload_12345678\",\"frontendActivationApproval\":{\"approved\":true,\"uploadId\":\"frontend_upload_12345678\"}}</spala-execution-request>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"spalaOAuth":["api"]}]}],"provider":{"url":"https://spala.ai","organization":"Spala AI"},"documentationUrl":"https://docs.spala.ai/agents/","supportsAuthenticatedExtendedCard":false,"securitySchemes":{"spalaOAuth":{"type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://mcp.spala.ai/oauth/authorize","tokenUrl":"https://mcp.spala.ai/oauth/token","scopes":{"api":"Access authorized Spala account and project operations."}}},"description":"Spala platform OAuth for account and project authorization.","oauth2MetadataUrl":"https://mcp.spala.ai/.well-known/oauth-authorization-server/mcp"}},"security":[{"spalaOAuth":["api"]}],"supportedInterfaces":[{"url":"https://agent.spala.ai/a2a/jsonrpc","protocolBinding":"JSONRPC","protocolVersion":"1.0","tenant":""},{"url":"https://agent.spala.ai/a2a/jsonrpc","protocolBinding":"JSONRPC","protocolVersion":"0.3","tenant":""}]}