{"openapi":"3.1.0","info":{"title":"Fine Structure API","version":"1.0.0","summary":"Build, edit, validate and publish complete web applications with AI.","description":"Fine Structure is an AI software-building platform: it generates complete applications, runs autonomous AI agent teams, and maintains a business brain over your data.\n\nGetting started is self-serve: sign up free at https://finestructure.ai (free tier included, no credit card), then create an API/MCP token at https://finestructure.ai/api-keys and pass it as `Authorization: Bearer fse2_mcp_<token>`.\n\nEvery operation below is also available as an MCP tool via the JSON-RPC endpoint POST /api/mcp (Streamable HTTP transport).","termsOfService":"https://finestructure.ai/terms","contact":{"name":"Fine Structure support","email":"support@finestructure.ai","url":"https://finestructure.ai/contact"}},"servers":[{"url":"https://finestructure.ai","description":"Production"}],"tags":[{"name":"tools","description":"Per-tool REST operations (one per Fine Structure tool)"},{"name":"bridge","description":"Generic call-by-name REST bridge"},{"name":"mcp","description":"Model Context Protocol (JSON-RPC 2.0)"},{"name":"discovery","description":"Unauthenticated discovery and health endpoints"}],"paths":{"/api/mcp/tools/{tool_name}":{"post":{"operationId":"call_tool_generic","summary":"Call any Fine Structure tool by name","description":"Generic REST bridge to the Fine Structure tool surface. The request body is the tool's arguments object. Prefer the per-tool operations below, which carry the exact JSON schema for each tool.","tags":["bridge"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"tool_name","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the tool to execute (see the per-tool operations or GET /api/mcp/manifest)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp":{"post":{"operationId":"mcp_jsonrpc","summary":"MCP JSON-RPC 2.0 endpoint (initialize, tools/list, tools/call)","description":"Model Context Protocol endpoint over Streamable HTTP. Supports the methods initialize, tools/list and tools/call per the MCP specification.","tags":["mcp"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcRequest"}}}},"responses":{"200":{"description":"JSON-RPC 2.0 response (success or error object)","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/mcp/manifest":{"get":{"operationId":"get_manifest","summary":"Tool discovery manifest (all tool names, descriptions and JSON schemas)","tags":["discovery"],"security":[],"responses":{"200":{"description":"Manifest with every available tool definition","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/mcp/health":{"get":{"operationId":"health_check","summary":"Service health check","tags":["discovery"],"security":[],"responses":{"200":{"description":"Service is up","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/mcp/tools/create_app":{"post":{"operationId":"create_app","summary":"Create a new application from a natural language prompt","description":"Create a new application from a natural language prompt. The AI generates a complete web app with pages, components, styling, and data models. Returns a job_id - poll get_job_status to track progress. When the job is done, the app is ready.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name for the app (1-100 chars)"},"prompt":{"type":"string","description":"Detailed description of the app to build"},"description":{"type":"string","description":"Optional short description","default":""}},"required":["name","prompt"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/agency_create_client":{"post":{"operationId":"agency_create_client","summary":"Agency mode only","description":"Agency mode only. Create or update a client record for an account-level agent. This does not create a verified Fine Structure user account and does not transfer ownership.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"client_email":{"type":"string","description":"Client email that will be allowed to claim projects"},"client_full_name":{"type":"string","description":"Optional client display name","default":""},"note":{"type":"string","description":"Optional internal note for the agency","default":""}},"required":["client_email"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/agency_list_clients":{"post":{"operationId":"agency_list_clients","summary":"Agency mode only","description":"Agency mode only. List client records and app handoff status for the authenticated agent.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"include_handoffs":{"type":"boolean","description":"Include claim links status without raw tokens","default":true}}}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/agency_create_client_app":{"post":{"operationId":"agency_create_client_app","summary":"Agency mode only","description":"Agency mode only. Create a new app owned by the agent, start generation, and create a claim link for the client. Ownership transfers only when the invited client logs in with the same email and accepts the claim link.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"client_email":{"type":"string","description":"Client email allowed to claim ownership"},"client_full_name":{"type":"string","description":"Optional client display name","default":""},"name":{"type":"string","description":"Name for the app (1-100 chars)"},"prompt":{"type":"string","description":"Detailed description of the app to build"},"description":{"type":"string","description":"Optional short app description","default":""},"note":{"type":"string","description":"Optional internal client/project note","default":""},"keep_agent_collaborator":{"type":"boolean","description":"After claim, invite the agent back as an editor collaborator","default":true},"claim_expires_in_days":{"type":"integer","description":"Claim link lifetime, 1-90 days","default":14}},"required":["client_email","name","prompt"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/agency_create_claim_link":{"post":{"operationId":"agency_create_claim_link","summary":"Agency mode only","description":"Agency mode only. Create a client claim link for an existing app owned by the agent. The client must log in with the invited email before ownership transfers.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"Existing app ID owned by the agent"},"client_email":{"type":"string","description":"Client email allowed to claim ownership"},"client_full_name":{"type":"string","description":"Optional client display name","default":""},"note":{"type":"string","description":"Optional internal note","default":""},"keep_agent_collaborator":{"type":"boolean","description":"Invite agent as editor after claim","default":true},"claim_expires_in_days":{"type":"integer","description":"Claim link lifetime, 1-90 days","default":14}},"required":["app_id","client_email"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/agency_get_claim_status":{"post":{"operationId":"agency_get_claim_status","summary":"Agency mode only","description":"Agency mode only. Inspect one handoff status without exposing the raw claim token.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"handoff_id":{"type":"string","description":"Handoff ID returned by agency_create_claim_link or agency_create_client_app"}},"required":["handoff_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/update_app":{"post":{"operationId":"update_app","summary":"Update an existing application with a new prompt","description":"Update an existing application with a new prompt. The AI modifies the app based on your instructions. Creates a Saved Version before the update. Returns a job_id - poll get_job_status to track progress.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID to update"},"prompt":{"type":"string","description":"What to change in the app"}},"required":["app_id","prompt"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/publish_app":{"post":{"operationId":"publish_app","summary":"Publish an app - freeze current state and make it live at a URL","description":"Publish an app - freeze current state and make it live at a URL. Also configures whether the public URL is open, app-login gated, private, or inferred from the app.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID to publish"},"access_mode":{"type":"string","enum":["infer","public_open","public_auth","private","keep"],"default":"infer","description":"Live access policy. public_open = anyone can view. public_auth = public URL opens but app login is required. private = published snapshot remains owner/collaborator-only. keep = preserve current visibility/auth settings. infer = choose from existing settings and obvious app structure."},"auth_required":{"type":"boolean","description":"Optional explicit override for generated-app login requirement. Prefer access_mode when possible."},"make_public":{"type":"boolean","description":"Optional explicit override for whether published URLs are publicly reachable. Prefer access_mode when possible."}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_platform_guide":{"post":{"operationId":"get_platform_guide","summary":"Return a machine-readable Fine Structure / FSe2 guide for AI agents","description":"Return a machine-readable Fine Structure / FSe2 guide for AI agents. Call this at the start of an MCP session to learn app files, entities, safe edit workflows, validation, publishing, A/B testing, secrets, and platform rules.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"Optional app ID. If provided, the guide includes a safe app context summary."},"sections":{"type":"array","description":"Optional subset of guide sections to return.","items":{"type":"string","enum":["ab_testing","agency","app_code","checklists","data_model","direct_file_edit","domains","file_model","generation","overview","publishing","saas","safety","sdk","secrets_integrations","security","validation"]}},"task_type":{"type":"string","description":"Optional task hint, for example edit_app, direct_file_edit, seed_data, or publish_app."}}}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_recommended_workflow":{"post":{"operationId":"get_recommended_workflow","summary":"Return the recommended MCP tool sequence for a task type","description":"Return the recommended MCP tool sequence for a task type. Use this before creating apps, editing files, seeding data, publishing, setting up A/B tests, restoring versions, or configuring secrets/integrations.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"task_type":{"type":"string","description":"The task type to plan.","enum":["ab_test","agency_client_app","create_app","direct_file_edit","domain_setup","edit_app","fix_runtime_error","inspect_preview","publish_app","saas_setup","schema_change","secrets_integration","security_setup","seed_data","unknown","version_restore"],"default":"unknown"},"goal":{"type":"string","description":"Optional short description of the user's goal.","default":""},"app_id":{"type":"string","description":"Optional app ID. If provided, the workflow includes a safe app context summary."}}}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_job_status":{"post":{"operationId":"get_job_status","summary":"Poll the status of an async generation job","description":"Poll the status of an async generation job. Use this after create_app or update_app to know when the job is done. Returns status ('running' or 'done'), progress events, and result summary when complete.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","description":"The job_id returned by create_app or update_app"}},"required":["job_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_app_status":{"post":{"operationId":"get_app_status","summary":"Get app overview: files, published state, URL, active jobs","description":"Get app overview: files, published state, URL, active jobs.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_app_links":{"post":{"operationId":"get_app_links","summary":"Return editor, preview, published path, subdomain, and custom-domain links plus whether each works for anonymous visi...","description":"Return editor, preview, published path, subdomain, and custom-domain links plus whether each works for anonymous visitors, app users, or Studio users based on publish and auth settings.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/list_app_domains":{"post":{"operationId":"list_app_domains","summary":"List an app's platform path, subdomain, and configured custom domain with verification, SSL, primary-domain, redirect...","description":"List an app's platform path, subdomain, and configured custom domain with verification, SSL, primary-domain, redirect, publish, and login-gating status.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/add_custom_domain":{"post":{"operationId":"add_custom_domain","summary":"Attach or replace the app custom domain through the same Fine Structure Studio custom-domain flow","description":"Attach or replace the app custom domain through the same Fine Structure Studio custom-domain flow. Returns exact DNS verification and routing records for the user to configure at their DNS provider.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"domain":{"type":"string","description":"Custom domain to connect, for example example.com or app.example.com"}},"required":["app_id","domain"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_domain_verification":{"post":{"operationId":"get_domain_verification","summary":"Return the exact DNS records and instructions required to verify and route the app custom domain","description":"Return the exact DNS records and instructions required to verify and route the app custom domain.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"domain":{"type":"string","description":"Optional configured custom domain. If omitted, uses the app's current custom domain."}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/check_domain_verification":{"post":{"operationId":"check_domain_verification","summary":"Check Fine Structure custom-domain verification and SSL status for the configured custom domain, then save the latest...","description":"Check Fine Structure custom-domain verification and SSL status for the configured custom domain, then save the latest status.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"domain":{"type":"string","description":"Optional configured custom domain. If omitted, uses the app's current custom domain."}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/set_primary_domain":{"post":{"operationId":"set_primary_domain","summary":"Set which app host should be treated as primary for generated links and custom-domain redirects","description":"Set which app host should be treated as primary for generated links and custom-domain redirects.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"domain":{"type":"string","description":"Primary host, for example example.com, www.example.com, or the app subdomain host."}},"required":["app_id","domain"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/remove_custom_domain":{"post":{"operationId":"remove_custom_domain","summary":"Remove the configured custom domain from the app and clean up the platform-side hostname registration when possible","description":"Remove the configured custom domain from the app and clean up the platform-side hostname registration when possible.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"domain":{"type":"string","description":"Optional configured custom domain. If omitted, removes the current custom domain."}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_domain_ssl_status":{"post":{"operationId":"get_domain_ssl_status","summary":"Return SSL/certificate status and pending certificate validation DNS records for the app custom domain","description":"Return SSL/certificate status and pending certificate validation DNS records for the app custom domain.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"domain":{"type":"string","description":"Optional configured custom domain. If omitted, uses the app's current custom domain."}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/configure_domain_redirects":{"post":{"operationId":"configure_domain_redirects","summary":"Configure custom-domain redirect policy: primary domain, optional www/root redirect, and HTTPS enforcement","description":"Configure custom-domain redirect policy: primary domain, optional www/root redirect, and HTTPS enforcement.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"primary_domain":{"type":"string","description":"Canonical primary domain, for example example.com"},"redirect_www":{"type":"boolean","description":"Redirect the www/root counterpart to primary_domain","default":true},"force_https":{"type":"boolean","description":"Redirect HTTP custom-domain requests to HTTPS","default":true}},"required":["app_id","primary_domain"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/list_apps":{"post":{"operationId":"list_apps","summary":"List all applications owned by the authenticated user","description":"List all applications owned by the authenticated user.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_app_files":{"post":{"operationId":"get_app_files","summary":"Get the file tree for an app with paths and byte sizes","description":"Get the file tree for an app with paths and byte sizes.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/read_app_file":{"post":{"operationId":"read_app_file","summary":"Read one source file from an app's virtual filesystem","description":"Read one source file from an app's virtual filesystem.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"path":{"type":"string","description":"Virtual file path, for example pages/Home.jsx"},"max_chars":{"type":"integer","description":"Maximum content characters to return","default":200000}},"required":["app_id","path"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/read_app_files":{"post":{"operationId":"read_app_files","summary":"Read several source files from an app's virtual filesystem","description":"Read several source files from an app's virtual filesystem.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"paths":{"type":"array","items":{"type":"string"},"description":"Virtual file paths to read"},"max_chars_per_file":{"type":"integer","description":"Maximum characters per file","default":100000}},"required":["app_id","paths"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/write_app_file":{"post":{"operationId":"write_app_file","summary":"Create or replace one file in an app's virtual filesystem","description":"Create or replace one file in an app's virtual filesystem. Creates a Saved Version before changing content.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"path":{"type":"string","description":"Virtual file path"},"content":{"type":"string","description":"Complete file contents"},"file_type":{"type":"string","description":"Optional file type override"}},"required":["app_id","path","content"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/patch_app_file":{"post":{"operationId":"patch_app_file","summary":"Patch one file by replacing exact text","description":"Patch one file by replacing exact text. Safer than full overwrite for targeted edits. Creates a Saved Version before changing content.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"path":{"type":"string","description":"Virtual file path"},"old_text":{"type":"string","description":"Exact existing text to replace"},"new_text":{"type":"string","description":"Replacement text"},"replace_all":{"type":"boolean","description":"Replace all matches instead of the first match","default":false}},"required":["app_id","path","old_text","new_text"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/rename_app_file":{"post":{"operationId":"rename_app_file","summary":"Rename or move one app source file atomically","description":"Rename or move one app source file atomically. Internally stages an upsert at new_path and a delete at old_path, validates the resulting app state, and creates a Saved Version before applying.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"old_path":{"type":"string","description":"Existing virtual file path to rename"},"new_path":{"type":"string","description":"New virtual file path"},"overwrite":{"type":"boolean","description":"Allow replacing an existing file at new_path","default":false},"force":{"type":"boolean","description":"Apply even if validation reports blocking errors","default":false}},"required":["app_id","old_path","new_path"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_app_detail":{"post":{"operationId":"get_app_detail","summary":"Deep introspection of an app: entities, pages, settings, integrations, environment variables, and file structure","description":"Deep introspection of an app: entities, pages, settings, integrations, environment variables, and file structure. Use this to understand what an app contains before updating it.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_entities":{"post":{"operationId":"get_entities","summary":"Get all entity (data model) schemas for an app, with record counts","description":"Get all entity (data model) schemas for an app, with record counts. Each entity has fields, types, and relationships.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/query_entity":{"post":{"operationId":"query_entity","summary":"Query app data records for one entity with optional exact-match filters","description":"Query app data records for one entity with optional exact-match filters.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"entity":{"type":"string","description":"Entity name, for example Patient"},"filters":{"type":"object","description":"Exact-match field filters","default":{}},"sort":{"type":"string","description":"Sort field, prefix with - for descending","default":"-created_date"},"limit":{"type":"integer","description":"Max records to return","default":100},"offset":{"type":"integer","description":"Pagination offset","default":0}},"required":["app_id","entity"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/seed_entity":{"post":{"operationId":"seed_entity","summary":"Seed records into one app entity","description":"Seed records into one app entity. Useful during EDIT when new screens need sample data. Creates a Saved Version before inserting records.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"entity":{"type":"string","description":"Entity name"},"records":{"type":"array","items":{"type":"object"},"description":"Records to insert"},"mode":{"type":"string","enum":["append","skip_if_not_empty"],"description":"append always inserts; skip_if_not_empty inserts only into an empty entity","default":"skip_if_not_empty"}},"required":["app_id","entity","records"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/update_entity_record":{"post":{"operationId":"update_entity_record","summary":"Update one app entity record by ID","description":"Update one app entity record by ID. Creates a Saved Version before the update.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"entity":{"type":"string","description":"Entity name"},"record_id":{"type":"string","description":"Record ID"},"data":{"type":"object","description":"Fields to merge into the record"}},"required":["app_id","entity","record_id","data"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_pages":{"post":{"operationId":"get_pages","summary":"Get all pages in an app with their file paths and sizes","description":"Get all pages in an app with their file paths and sizes.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_errors":{"post":{"operationId":"get_errors","summary":"Get recent runtime errors for an app (last 20)","description":"Get recent runtime errors for an app (last 20). Useful for diagnosing issues before updating.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"limit":{"type":"integer","description":"Max errors to return (default 20)","default":20}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_preview_url":{"post":{"operationId":"get_preview_url","summary":"Return editor preview and published/public URLs for an app","description":"Return editor preview and published/public URLs for an app.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/list_saved_versions":{"post":{"operationId":"list_saved_versions","summary":"List restorable Saved Versions for an app, including versions created by MCP writes","description":"List restorable Saved Versions for an app, including versions created by MCP writes.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/restore_saved_version":{"post":{"operationId":"restore_saved_version","summary":"Restore an app to a Saved Version","description":"Restore an app to a Saved Version. Requires versions:write scope and confirm=true. This restores files, records, app settings, and A/B test state captured in the snapshot.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"snapshot_id":{"type":"string","description":"Saved Version snapshot_id to restore"},"confirm":{"type":"boolean","description":"Must be true to execute the restore","default":false}},"required":["app_id","snapshot_id","confirm"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/create_change_set":{"post":{"operationId":"create_change_set","summary":"Create a staged file change set","description":"Create a staged file change set. Add multiple file changes, validate them as one app state, then apply atomically.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"label":{"type":"string","description":"Optional short label"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/add_file_change":{"post":{"operationId":"add_file_change","summary":"Stage one file upsert or delete inside a change set","description":"Stage one file upsert or delete inside a change set. Does not modify the live app until apply_change_set.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"change_set_id":{"type":"string","description":"Change set ID"},"path":{"type":"string","description":"Virtual file path"},"content":{"type":"string","description":"Complete file contents for upsert","default":""},"file_type":{"type":"string","description":"Optional file type override","default":""},"operation":{"type":"string","enum":["upsert","delete"],"default":"upsert"}},"required":["app_id","change_set_id","path"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/validate_change_set":{"post":{"operationId":"validate_change_set","summary":"Validate current app files plus staged change set files before applying","description":"Validate current app files plus staged change set files before applying.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"change_set_id":{"type":"string","description":"Change set ID"},"include_runtime_errors":{"type":"boolean","default":true}},"required":["app_id","change_set_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/apply_change_set":{"post":{"operationId":"apply_change_set","summary":"Apply a staged change set to the app","description":"Apply a staged change set to the app. Creates a Saved Version before applying. Blocks on validation errors unless force=true.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"change_set_id":{"type":"string","description":"Change set ID"},"force":{"type":"boolean","description":"Apply even if validation has errors","default":false}},"required":["app_id","change_set_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/discard_change_set":{"post":{"operationId":"discard_change_set","summary":"Discard a pending staged change set without changing app files","description":"Discard a pending staged change set without changing app files.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"change_set_id":{"type":"string","description":"Change set ID"}},"required":["app_id","change_set_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/validate_app":{"post":{"operationId":"validate_app","summary":"Run deterministic app checks: syntax, imports, routes/pages, entity schemas, missing entities, and recorded runtime e...","description":"Run deterministic app checks: syntax, imports, routes/pages, entity schemas, missing entities, and recorded runtime errors.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"include_runtime_errors":{"type":"boolean","default":true}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/inspect_preview":{"post":{"operationId":"inspect_preview","summary":"Return server-side preview context: URLs, persisted runtime/network errors, static clickable candidates, pages, and e...","description":"Return server-side preview context: URLs, persisted runtime/network errors, static clickable candidates, pages, and explicit live-browser availability.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"route":{"type":"string","description":"Optional route to inspect","default":""},"auth_as":{"type":"string","description":"Optional auth simulation: anonymous","default":""},"auth_as_role":{"type":"string","description":"Optional app role simulation, e.g. staff/admin/customer","default":""}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_app_security_context":{"post":{"operationId":"get_app_security_context","summary":"Return safe security context for one owned app: owner id/email, Studio collaborators, generated-app members, route po...","description":"Return safe security context for one owned app: owner id/email, Studio collaborators, generated-app members, route policies, entity policies, and recent security audit entries. Does not return secrets and does not grant access to other apps.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"audit_limit":{"type":"integer","default":50}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/set_route_policy":{"post":{"operationId":"set_route_policy","summary":"Create or update a server-owned route policy for a generated app route","description":"Create or update a server-owned route policy for a generated app route.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"route":{"type":"string","description":"Route or wildcard route, e.g. /admin/*"},"require_auth":{"type":"boolean","default":true},"allowed_roles":{"type":"array","items":{"type":"string"},"description":"Allowed app roles"},"redirect_to":{"type":"string","default":"/Login"}},"required":["app_id","route","require_auth","allowed_roles"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/set_entity_policy":{"post":{"operationId":"set_entity_policy","summary":"Create or update server-side read/write role policy for an app entity","description":"Create or update server-side read/write role policy for an app entity.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"entity":{"type":"string","description":"Entity name, e.g. Booking"},"read":{"type":"array","items":{"type":"string"},"description":"Roles allowed to read"},"write":{"type":"array","items":{"type":"string"},"description":"Roles allowed to write"}},"required":["app_id","entity","read","write"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/list_app_members":{"post":{"operationId":"list_app_members","summary":"List generated-app runtime users/members for an app","description":"List generated-app runtime users/members for an app. This is separate from Studio project collaborators.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/invite_app_member":{"post":{"operationId":"invite_app_member","summary":"Provision a generated-app runtime member with a role","description":"Provision a generated-app runtime member with a role. This does not create a Studio collaborator. The owner role cannot be assigned. If password is omitted, a temporary password is generated and returned once.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"email":{"type":"string","description":"Member email"},"role":{"type":"string","description":"App role, e.g. admin/staff/customer"},"full_name":{"type":"string","default":""},"password":{"type":"string","description":"Optional initial password. If omitted, one is generated."}},"required":["app_id","email","role"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/update_app_member_role":{"post":{"operationId":"update_app_member_role","summary":"Update a generated-app runtime member role","description":"Update a generated-app runtime member role. This cannot assign owner and cannot change the Fine Structure account owner.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"user_id":{"type":"string","description":"Generated app user id"},"role":{"type":"string","description":"New role"}},"required":["app_id","user_id","role"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/remove_app_member":{"post":{"operationId":"remove_app_member","summary":"Remove a generated-app runtime member","description":"Remove a generated-app runtime member.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"user_id":{"type":"string","description":"Generated app user id"}},"required":["app_id","user_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_app_security_audit":{"post":{"operationId":"get_app_security_audit","summary":"Read recent server-side security audit events for an app","description":"Read recent server-side security audit events for an app.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"limit":{"type":"integer","default":100}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/compare_saved_versions":{"post":{"operationId":"compare_saved_versions","summary":"Compare two Saved Versions and return per-file additions, removals, modifications, and compact diffs","description":"Compare two Saved Versions and return per-file additions, removals, modifications, and compact diffs.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"base_snapshot_id":{"type":"string","description":"Older/base snapshot ID"},"target_snapshot_id":{"type":"string","description":"Newer/target snapshot ID"},"max_diff_chars":{"type":"integer","default":12000}},"required":["app_id","base_snapshot_id","target_snapshot_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/compare_current_to_version":{"post":{"operationId":"compare_current_to_version","summary":"Compare the current app files to a Saved Version and return compact per-file diffs","description":"Compare the current app files to a Saved Version and return compact per-file diffs.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"snapshot_id":{"type":"string","description":"Saved Version snapshot ID"},"max_diff_chars":{"type":"integer","default":12000}},"required":["app_id","snapshot_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/restore_file_from_version":{"post":{"operationId":"restore_file_from_version","summary":"Restore one file from a Saved Version instead of restoring the entire app","description":"Restore one file from a Saved Version instead of restoring the entire app. Creates a Saved Version before changing the file.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"snapshot_id":{"type":"string","description":"Saved Version snapshot ID"},"path":{"type":"string","description":"Virtual file path to restore"},"confirm":{"type":"boolean","default":false}},"required":["app_id","snapshot_id","path","confirm"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/create_entity_schema":{"post":{"operationId":"create_entity_schema","summary":"Create an entity schema file in entities/<Entity>.json","description":"Create an entity schema file in entities/<Entity>.json. Creates a Saved Version before writing.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"entity":{"type":"string","description":"Entity name"},"schema":{"type":"object","description":"JSON schema object"},"relationships":{"type":"array","items":{"type":"object"},"default":[]},"indexes":{"type":"array","items":{"type":"object"},"default":[]},"metadata":{"type":"object","default":{}},"overwrite":{"type":"boolean","default":false}},"required":["app_id","entity","schema"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/update_entity_schema":{"post":{"operationId":"update_entity_schema","summary":"Replace or shallow-merge an existing entity schema file","description":"Replace or shallow-merge an existing entity schema file. Creates a Saved Version before writing.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"entity":{"type":"string","description":"Entity name"},"schema":{"type":"object","description":"Schema fields to set or merge"},"relationships":{"type":"array","items":{"type":"object"},"default":[]},"indexes":{"type":"array","items":{"type":"object"},"default":[]},"metadata":{"type":"object","default":{}},"merge":{"type":"boolean","default":true}},"required":["app_id","entity","schema"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/validate_entity_relationships":{"post":{"operationId":"validate_entity_relationships","summary":"Validate entity relationship metadata and *_id references against existing entity schemas","description":"Validate entity relationship metadata and *_id references against existing entity schemas.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/update_entity_metadata":{"post":{"operationId":"update_entity_metadata","summary":"Set relationship/index metadata on an entity schema","description":"Set relationship/index metadata on an entity schema. This stores metadata in the schema file; DB index creation is automatic where supported by the platform.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"entity":{"type":"string","description":"Entity name"},"relationships":{"type":"array","items":{"type":"object"},"default":[]},"indexes":{"type":"array","items":{"type":"object"},"default":[]},"metadata":{"type":"object","default":{}}},"required":["app_id","entity"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/list_secret_keys":{"post":{"operationId":"list_secret_keys","summary":"List secret key names for an app","description":"List secret key names for an app. Secret values are never returned.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/set_secret":{"post":{"operationId":"set_secret","summary":"Create or update one encrypted app secret","description":"Create or update one encrypted app secret. The secret value is never returned.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"key":{"type":"string","description":"Secret key name"},"value":{"type":"string","description":"Secret value to encrypt and store"}},"required":["app_id","key","value"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/delete_secret":{"post":{"operationId":"delete_secret","summary":"Delete one app secret by key","description":"Delete one app secret by key.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"key":{"type":"string","description":"Secret key name"}},"required":["app_id","key"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/list_integrations":{"post":{"operationId":"list_integrations","summary":"List supported integrations and safe connected integration metadata for an app","description":"List supported integrations and safe connected integration metadata for an app. Tokens/secrets are never returned.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/configure_integration":{"post":{"operationId":"configure_integration","summary":"Store safe non-secret integration metadata for an app","description":"Store safe non-secret integration metadata for an app. Use set_secret for API keys/tokens.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"provider":{"type":"string","description":"Integration provider ID"},"config":{"type":"object","description":"Safe metadata only, such as workspace/team/name/email"},"is_active":{"type":"boolean","description":"Set false to disconnect this integration metadata","default":true}},"required":["app_id","provider","config"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/list_ab_tests":{"post":{"operationId":"list_ab_tests","summary":"List the platform A/B tests configured for an app","description":"List the platform A/B tests configured for an app.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/create_ab_test":{"post":{"operationId":"create_ab_test","summary":"Create a native Fine Structure A/B test between existing app pages","description":"Create a native Fine Structure A/B test between existing app pages. Use update_app first if a variant page still needs to be generated. Creates a Saved Version before the change.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"name":{"type":"string","description":"Experiment name"},"page_name":{"type":"string","description":"Base route page that triggers the experiment"},"variants":{"type":"array","items":{"type":"object","properties":{"page_name":{"type":"string","description":"Existing app page name or path"},"traffic_percent":{"type":"integer","description":"Traffic percentage for this variant"}},"required":["page_name","traffic_percent"]},"description":"At least two variants. Traffic must total 100."},"goal_event_type":{"type":"string","description":"Optional conversion goal type: entity_create, any, form_submit"},"goal_event_filter":{"type":"object","description":"Optional goal filter, for example {'entity_name': 'Lead'}"},"is_active":{"type":"boolean","description":"Whether to activate the test immediately","default":true}},"required":["app_id","name","page_name","variants"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/update_ab_test":{"post":{"operationId":"update_ab_test","summary":"Update a native A/B test, including active state, variants, traffic, and conversion goal","description":"Update a native A/B test, including active state, variants, traffic, and conversion goal. Creates a Saved Version before the change.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"test_id":{"type":"string","description":"A/B test ID"},"name":{"type":"string","description":"Optional new name"},"page_name":{"type":"string","description":"Optional new base route page"},"variants":{"type":"array","items":{"type":"object"},"description":"Optional replacement variants. Traffic must total 100."},"is_active":{"type":"boolean","description":"Optional active state"},"goal_event_type":{"type":"string","description":"Optional conversion goal type"},"goal_event_filter":{"type":"object","description":"Optional conversion goal filter"}},"required":["app_id","test_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/delete_ab_test":{"post":{"operationId":"delete_ab_test","summary":"Delete a native A/B test from an app","description":"Delete a native A/B test from an app. Creates a Saved Version before the change.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"test_id":{"type":"string","description":"A/B test ID"}},"required":["app_id","test_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/get_ab_test_stats":{"post":{"operationId":"get_ab_test_stats","summary":"Get views, unique visitors, conversions, and conversion rates for an A/B test","description":"Get views, unique visitors, conversions, and conversion rates for an A/B test.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"test_id":{"type":"string","description":"A/B test ID"}},"required":["app_id","test_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_status":{"post":{"operationId":"email_marketing_status","summary":"Admin only","description":"Admin only. Inspect the isolated Email Marketing module: enabled state, sender settings, templates, sequences, variable triggers, and recent campaign status.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"include_logs":{"type":"boolean","description":"Include recent delivery logs","default":false}}}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_configure_sender":{"post":{"operationId":"email_marketing_configure_sender","summary":"Admin only","description":"Admin only. Configure global Email Marketing sender details and module enabled state. Unsubscribe footer remains mandatory.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"is_enabled":{"type":"boolean","description":"Enable or disable the module at settings level"},"sender_name":{"type":"string","description":"Display sender name"},"sender_email":{"type":"string","description":"Sender email address used by the email provider"},"reply_to":{"type":"string","description":"Reply-To email address"},"organization_name":{"type":"string","description":"Organization name used in unsubscribe footer"},"postal_address":{"type":"string","description":"Optional postal/contact address for compliance"},"default_timezone":{"type":"string","description":"Default timezone for scheduling"}}}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_update_template":{"post":{"operationId":"email_marketing_update_template","summary":"Admin only","description":"Admin only. Update an automatic Email Marketing template, such as user_joined welcome email. The unsubscribe block is still appended by the server.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"template_id":{"type":"string","description":"Template/event id, e.g. user_joined"},"enabled":{"type":"boolean","description":"Whether this automatic template is active"},"subject":{"type":"string","description":"Email subject with {{variables}}"},"body_html":{"type":"string","description":"HTML body with {{variables}}"}},"required":["template_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_create_broadcast":{"post":{"operationId":"email_marketing_create_broadcast","summary":"Admin only","description":"Admin only. Create a filtered broadcast campaign, optionally scheduled or sent now.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Internal campaign name"},"subject":{"type":"string","description":"Email subject"},"body_html":{"type":"string","description":"HTML body. Unsubscribe is appended automatically."},"filters":{"type":"object","description":"Recipient filters: plans, roles, active_status, email_verified, min_apps, max_apps, has_published_app, search"},"scheduled_at":{"type":"string","description":"Optional ISO datetime. If no timezone is included, timezone is used."},"timezone":{"type":"string","description":"Timezone for naive scheduled_at","default":"UTC"},"send_now":{"type":"boolean","description":"Send immediately after creating the campaign","default":false}},"required":["subject","body_html"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_create_sequence":{"post":{"operationId":"email_marketing_create_sequence","summary":"Admin only","description":"Admin only. Create a scheduled email sequence using fixed dates or day offsets. Each generated email keeps mandatory unsubscribe.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Sequence name"},"schedule_mode":{"type":"string","enum":["fixed_dates","day_offsets"],"description":"fixed_dates uses each step.scheduled_at; day_offsets uses start_at + step day offsets"},"filters":{"type":"object","description":"Recipient filters"},"start_at":{"type":"string","description":"ISO datetime for day_offsets mode"},"timezone":{"type":"string","default":"UTC"},"steps":{"type":"array","items":{"type":"object"},"description":"Steps with subject, body_html, and either scheduled_at (fixed_dates) or day_offset/gap_days (day_offsets)."}},"required":["name","schedule_mode","steps"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_create_variable_trigger":{"post":{"operationId":"email_marketing_create_variable_trigger","summary":"Admin only","description":"Admin only. Create an email rule that sends when a named variable changes from one value to another. Empty from_value/to_value acts as wildcard.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Trigger name"},"enabled":{"type":"boolean","default":true},"variable_name":{"type":"string","description":"Variable name, e.g. plan"},"from_value":{"type":"string","description":"Previous value or empty wildcard"},"to_value":{"type":"string","description":"New value or empty wildcard"},"subject":{"type":"string","description":"Email subject"},"body_html":{"type":"string","description":"HTML body. Unsubscribe is appended automatically."},"filters":{"type":"object","description":"Optional recipient filters"}},"required":["variable_name","subject","body_html"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_trigger_variable":{"post":{"operationId":"email_marketing_trigger_variable","summary":"Admin only","description":"Admin only. Manually fire variable-transition email rules for one user. Useful for MCP/agent workflows and tests.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"user_id":{"type":"string","description":"Platform user id"},"variable_name":{"type":"string","description":"Variable name"},"from_value":{"type":"string","description":"Previous value"},"to_value":{"type":"string","description":"New value"},"context":{"type":"object","description":"Extra template variables"}},"required":["user_id","variable_name"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_status":{"post":{"operationId":"email_marketing_app_status","summary":"Inspect app-scoped Email Marketing for one generated app: settings, contacts, campaigns, event triggers, and recent e...","description":"Inspect app-scoped Email Marketing for one generated app: settings, contacts, campaigns, event triggers, and recent events.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"include_logs":{"type":"boolean","default":false}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_configure":{"post":{"operationId":"email_marketing_app_configure","summary":"Configure isolated Email Marketing settings for a generated app","description":"Configure isolated Email Marketing settings for a generated app. Can be used by Studio/chat agents.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"is_enabled":{"type":"boolean"},"default_contact_entity":{"type":"string","description":"Entity to sync as contacts, e.g. Customer or Lead"},"default_email_field":{"type":"string","description":"Field containing contact email"},"default_name_field":{"type":"string","description":"Field containing contact name"},"sender_name":{"type":"string"},"sender_email":{"type":"string"},"reply_to":{"type":"string"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_sync_contacts":{"post":{"operationId":"email_marketing_app_sync_contacts","summary":"Sync an app entity table into app-scoped Email Marketing contacts","description":"Sync an app entity table into app-scoped Email Marketing contacts. Records without a valid email are skipped.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"entity_name":{"type":"string","description":"Entity name, e.g. Customer or Lead"},"email_field":{"type":"string","default":"email"},"name_field":{"type":"string"},"limit":{"type":"integer","default":1000}},"required":["app_id","entity_name"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_create_broadcast":{"post":{"operationId":"email_marketing_app_create_broadcast","summary":"Create an app-scoped broadcast to contacts synced from that generated app, optionally scheduled or sent now","description":"Create an app-scoped broadcast to contacts synced from that generated app, optionally scheduled or sent now.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"name":{"type":"string"},"subject":{"type":"string"},"body_html":{"type":"string"},"filters":{"type":"object","description":"App contact filters such as source_entity, search, tags, field_equals"},"scheduled_at":{"type":"string"},"timezone":{"type":"string","default":"UTC"},"send_now":{"type":"boolean","default":false}},"required":["app_id","subject","body_html"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_create_event_trigger":{"post":{"operationId":"email_marketing_app_create_event_trigger","summary":"Create an app-scoped email rule that sends when an app event is recorded, for example entity_created or Customer.created","description":"Create an app-scoped email rule that sends when an app event is recorded, for example entity_created or Customer.created.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"name":{"type":"string"},"enabled":{"type":"boolean","default":true},"event_name":{"type":"string","description":"Event name, e.g. entity_created, Customer.created, order_paid"},"entity_name":{"type":"string","description":"Optional entity filter"},"subject":{"type":"string"},"body_html":{"type":"string"},"filters":{"type":"object","description":"Optional app contact filters"}},"required":["app_id","event_name","subject","body_html"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_record_event":{"post":{"operationId":"email_marketing_app_record_event","summary":"Record an app event and send matching app-scoped Email Marketing triggers","description":"Record an app event and send matching app-scoped Email Marketing triggers.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"event_name":{"type":"string"},"email":{"type":"string","description":"Contact email if no contact_id is known"},"contact_id":{"type":"string"},"entity_name":{"type":"string"},"record_id":{"type":"string"},"record":{"type":"object","description":"Entity record fields for template variables and contact extraction"},"properties":{"type":"object","description":"Extra event properties"}},"required":["app_id","event_name"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_create_workflow":{"post":{"operationId":"email_marketing_app_create_workflow","summary":"Create an app-scoped automation workflow with email, wait, condition, split, and goal steps","description":"Create an app-scoped automation workflow with email, wait, condition, split, and goal steps.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"name":{"type":"string"},"enabled":{"type":"boolean","default":true},"trigger_event_name":{"type":"string","description":"Event that enrolls a contact, e.g. Customer.created"},"trigger_entity_name":{"type":"string","description":"Optional entity filter"},"steps":{"type":"array","description":"Ordered workflow steps. Supported type values: email, wait, condition, split, goal.","items":{"type":"object"}},"definition":{"type":"object","description":"Optional full workflow definition; steps can also be supplied here."}},"required":["app_id","trigger_event_name"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_create_sequence":{"post":{"operationId":"email_marketing_app_create_sequence","summary":"Create an app-scoped email sequence using fixed dates or day offsets between emails","description":"Create an app-scoped email sequence using fixed dates or day offsets between emails.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"name":{"type":"string"},"schedule_mode":{"type":"string","enum":["fixed_dates","day_offsets"],"default":"day_offsets"},"start_at":{"type":"string","description":"Sequence start date/time for day_offsets mode"},"timezone":{"type":"string","default":"UTC"},"filters":{"type":"object","description":"App contact filters"},"steps":{"type":"array","description":"Emails in order. Each step supports subject, body_html, scheduled_at, day_offset, or gap_days.","items":{"type":"object"}}},"required":["app_id","steps"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_report":{"post":{"operationId":"email_marketing_app_report","summary":"Read app-scoped Email Marketing reporting: delivery counts, open/click rates, and recent tracking events","description":"Read app-scoped Email Marketing reporting: delivery counts, open/click rates, and recent tracking events.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"include_events":{"type":"boolean","default":true},"limit":{"type":"integer","default":50},"segment_limit":{"type":"integer","default":25}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_create_segment":{"post":{"operationId":"email_marketing_app_create_segment","summary":"Create an app-scoped saved audience segment using field, tag, and behavior filters","description":"Create an app-scoped saved audience segment using field, tag, and behavior filters.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"name":{"type":"string"},"filters":{"type":"object","description":"Segment filters. Supports rules with field/operator/value plus opened/clicked/sent behavior fields."},"sample_limit":{"type":"integer","default":10}},"required":["app_id","name","filters"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_contact_profile":{"post":{"operationId":"email_marketing_app_contact_profile","summary":"Read a contact profile with email delivery, tracking, app-event, workflow, suppression, and unsubscribe timeline","description":"Read a contact profile with email delivery, tracking, app-event, workflow, suppression, and unsubscribe timeline.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"contact":{"type":"string","description":"Contact id or email address"}},"required":["app_id","contact"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_deliverability":{"post":{"operationId":"email_marketing_app_deliverability","summary":"Read provider readiness, bounce/complaint rates, suppression reasons, and recent deliverability risk events","description":"Read provider readiness, bounce/complaint rates, suppression reasons, and recent deliverability risk events.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_process_queue":{"post":{"operationId":"email_marketing_app_process_queue","summary":"Process due app-scoped automation workflow runs and email queue jobs with locks, retries, and suppression checks","description":"Process due app-scoped automation workflow runs and email queue jobs with locks, retries, and suppression checks.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"max_jobs":{"type":"integer","default":50}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_queue_status":{"post":{"operationId":"email_marketing_app_queue_status","summary":"Inspect app-scoped Email Marketing queue jobs and per-status counts","description":"Inspect app-scoped Email Marketing queue jobs and per-status counts.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"limit":{"type":"integer","default":50},"status":{"type":"string","description":"Optional queue status filter"}},"required":["app_id"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/mcp/tools/email_marketing_app_suppress_contact":{"post":{"operationId":"email_marketing_app_suppress_contact","summary":"Suppress an app contact email after a bounce, complaint, manual block, provider block, or unsubscribe","description":"Suppress an app contact email after a bounce, complaint, manual block, provider block, or unsubscribe.","tags":["tools"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"app_id":{"type":"string","description":"The app ID"},"email":{"type":"string"},"reason":{"type":"string","default":"manual"},"source":{"type":"string","default":"mcp"},"metadata":{"type":"object"}},"required":["app_id","email"]}}}},"responses":{"200":{"description":"Tool executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}}}},"400":{"description":"Invalid arguments for this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits on the account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Token scope does not permit this tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown tool name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded, retry after the indicated delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error while executing the tool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"fse2_mcp_<token>","description":"User-created Fine Structure token. Create one self-serve at https://finestructure.ai/api-keys. Tokens are scoped by account, app and permissions."}},"schemas":{"ToolResult":{"type":"object","properties":{"ok":{"type":"boolean"},"tool":{"type":"string"},"result":{"type":"object","additionalProperties":true}},"required":["ok","tool","result"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]},"JsonRpcRequest":{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"integer"},{"type":"null"}]},"method":{"type":"string","enum":["initialize","tools/list","tools/call"]},"params":{"type":"object","additionalProperties":true}},"required":["jsonrpc","method"]}}},"externalDocs":{"description":"Agent integration guide","url":"https://finestructure.ai/api/mcp/docs"}}