{"schemaVersion":"1.0","service":"Infrazero","homepage":"https://infrazero.app/","triggerDomains":["infrazero.app"],"instructionsUrl":"https://infrazero.app/llms.txt","registryManifestUrl":"https://infrazero.app/mcp/server.json","mcp":{"transport":"streamable-http","endpoint":"https://infrazero.app/api/mcp","protocolVersion":"2025-03-26","toolPrefix":"infrazero_","firstTool":"infrazero_describe"},"directMcpContinuation":{"purpose":"Continue through Streamable HTTP MCP when the runtime cannot hot-load native tools.","endpoint":"https://infrazero.app/api/mcp","authorization":"Use connection.authorizationHeader from the approved poll response exactly.","sequence":["initialize","notifications/initialized","tools/list","tools/call"],"requiresReload":false},"bootstrap":{"requiredWhenToolsMissing":true,"instructionsUrl":"https://infrazero.app/api/skill/bootstrap","start":{"preferredMethod":"POST","postUrl":"https://infrazero.app/api/skill/bootstrap/start","getUrlTemplate":"https://infrazero.app/api/skill/bootstrap/start?agentName={agentName}","jsonBody":{"agentName":"{agentName}"}},"approval":{"required":true,"actor":"user","responseFields":["approveUrl","userCode","pollUrl"],"resumeAfterApproval":{"localRuntimeStateRequired":false,"recoverFrom":"approveUrl-in-conversation","requestIdQueryParameter":"mcp_authorize","userCodeQueryParameter":"code","pollUrlTemplate":"https://infrazero.app/api/skill/bootstrap/poll/{mcp_authorize}?code={code}"}},"result":{"pollMode":"once-after-explicit-user-confirmation","pollWhilePending":false,"compactConnectionField":"connection","connectionFields":["transport","endpoint","authorizationHeader"],"skillField":"skill","containsPersonalToken":true}},"agentWorkflow":["Check the current tool catalog for tools whose names start with infrazero_.","If those tools are missing, fetch bootstrap.instructionsUrl and start the approval flow.","Show the complete approveUrl and userCode, then stop until the user explicitly confirms approval; the approval link in conversation is durable continuation state.","After user confirmation, call the exact pollUrl once using a raw HTTP/JSON client. If local tool state reset, reconstruct it from mcp_authorize and code in the prior approval link instead of starting another approval. If still pending, stop and wait again.","Read connection.endpoint and connection.authorizationHeader from the approved JSON response without printing or logging them.","Prefer native MCP when its tool catalog can refresh in the current session.","If native tools remain missing, speak Streamable HTTP MCP directly using directMcpContinuation and call infrazero_describe without asking for a reload."],"constraints":["Do not automate the human-facing browser wizard.","Do not ask the user to paste cloud credentials or the MCP token into chat.","Do not ask the user to download a skill when the user-approved bootstrap flow is available.","Do not call any MCP method before authorization returns a personal token.","Do not store pollUrl in a temporary file and do not require a live JavaScript or shell process across conversation turns.","Do not start a replacement approval merely because local runtime state was lost; recover pollUrl from the complete approveUrl already in conversation.","Do not use a browser page opener, URL preview, or search fetch for pollUrl or authenticated MCP requests.","Do not treat HTTP 401 as an expired approval link; pollUrl itself returns 200, 403, or 404, never 401.","Do not require a client restart merely because native MCP tools cannot hot-load; use directMcpContinuation."]}