{"openapi":"3.1.0","info":{"title":"Fuzion MCP","version":"1.3.0","summary":"Remote MCP server for Fuzion image, video, audio, and motion generation.","description":"Fuzion MCP is a remote Model Context Protocol server.\n\nAgents should connect to the MCP URL with OAuth 2.1 (authorization code + PKCE S256).\n\nAlways call fuzion_list_models first. If the user did not choose aspect_ratio, resolution, or duration, ASK them using that model's listed options. Never guess or pick a default. Call fuzion_quote, then tell the user the total_credits and current balance. If insufficient_credits is true, tell the user they cannot generate and share topup_url. Do not call fuzion_generate. For job_count above 1, wait for confirmation, call fuzion_confirm with quote_id, then submit each fuzion_generate with confirm_id as soon as the previous submit is accepted. Do not wait for a job to finish before submitting the next. If retry_after_seconds is returned, wait only that long, then retry that submit. Do not fire every generate in the same instant. For one job, wait for confirmation, then call fuzion_generate with quote_id. For chat attachments, ask the user before uploading, then call fuzion_upload_init, PUT the exact bytes to upload_url using the returned headers, and call fuzion_upload_complete. Use the returned asset_id in fuzion_generate. For BytePlus Seedance human-face video reference, use face_video_asset_id instead of video_asset_ids. After a job is submitted, poll fuzion_get_job for results. Confirmed batches may have several jobs processing at the same time. Enhance models are unavailable. Machine-readable spec: /mcp/openapi.json\n\nDo not put API keys or Bearer tokens in URLs. Chat attachments use short-lived presigned uploads and owned asset IDs; external reference media must be public HTTPS.\n\nHuman docs: https://fuzionhub.co/mcp\n\nThis document: https://fuzionhub.co/mcp/openapi.json","contact":{"url":"https://fuzionhub.co/mcp"}},"servers":[{"url":"https://fuzionhub.co","description":"Fuzion"}],"tags":[{"name":"MCP","description":"JSON-RPC MCP transport"},{"name":"OAuth","description":"OAuth 2.1 discovery, DCR, authorize, and token"},{"name":"Discovery","description":"Public machine-readable docs"}],"paths":{"/mcp/openapi.json":{"get":{"tags":["Discovery"],"operationId":"getMcpOpenApi","summary":"OpenAPI document for Fuzion MCP","security":[],"responses":{"200":{"description":"OpenAPI 3.1 document","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/openapi.json":{"get":{"tags":["Discovery"],"operationId":"getRootOpenApi","summary":"Alias of /mcp/openapi.json","security":[],"responses":{"200":{"description":"OpenAPI 3.1 document","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/.well-known/oauth-authorization-server":{"get":{"tags":["OAuth"],"operationId":"getOAuthAuthorizationServer","summary":"OAuth 2.1 authorization server metadata","security":[],"responses":{"200":{"description":"Authorization server metadata"}}}},"/.well-known/oauth-protected-resource":{"get":{"tags":["OAuth"],"operationId":"getOAuthProtectedResource","summary":"OAuth protected resource metadata for Fuzion MCP","security":[],"responses":{"200":{"description":"Protected resource metadata"}}}},"/api/mcp/oauth/register":{"post":{"tags":["OAuth"],"operationId":"registerMcpOAuthClient","summary":"Dynamic client registration for public PKCE clients","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthRegisterRequest"}}}},"responses":{"201":{"description":"Registered public client"},"400":{"description":"Invalid client metadata or redirect URI"},"429":{"description":"Rate limited"}}}},"/api/mcp/oauth/authorize":{"get":{"tags":["OAuth"],"operationId":"authorizeMcpOAuth","summary":"Authorization-code + PKCE S256 consent","security":[],"parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"string"}},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string"}},{"name":"response_type","in":"query","required":true,"schema":{"type":"string","enum":["code"]}},{"name":"code_challenge","in":"query","required":true,"schema":{"type":"string"}},{"name":"code_challenge_method","in":"query","required":true,"schema":{"type":"string","enum":["S256"]}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}},{"name":"scope","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"302":{"description":"Redirect to login or client redirect_uri"},"400":{"description":"Invalid request"}}}},"/api/mcp/oauth/token":{"post":{"tags":["OAuth"],"operationId":"exchangeMcpOAuthToken","summary":"Exchange an authorization code for a Bearer access token","security":[],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/OAuthTokenRequest"}},"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokenRequest"}}}},"responses":{"200":{"description":"Access token"},"400":{"description":"Invalid grant"}}}},"/api/mcp":{"post":{"tags":["MCP"],"operationId":"mcpJsonRpc","summary":"MCP JSON-RPC endpoint","description":"Streamable HTTP MCP server. Send JSON-RPC 2.0 in the request body. Supported methods: initialize, ping, tools/list, tools/call, notifications/initialized. Requires Authorization: Bearer after OAuth. Do not send cookies or API keys.","security":[{"oauth2":["fuzion:mcp"]},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcRequest"}}}},"responses":{"200":{"description":"JSON-RPC result or error envelope"},"401":{"description":"Missing or invalid Bearer token"},"429":{"description":"Rate limited"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"MCP access token","description":"OAuth access token from /api/mcp/oauth/token. Header only."},"oauth2":{"type":"oauth2","description":"OAuth 2.1 authorization code with PKCE S256. Public clients only (token_endpoint_auth_method=none).","flows":{"authorizationCode":{"authorizationUrl":"https://fuzionhub.co/api/mcp/oauth/authorize","tokenUrl":"https://fuzionhub.co/api/mcp/oauth/token","refreshUrl":"https://fuzionhub.co/api/mcp/oauth/token","scopes":{"fuzion:mcp":"Call Fuzion MCP tools with the signed-in user wallet."}}}}},"schemas":{"fuzion_list_models_input":{"type":"object","properties":{"category":{"type":"string","enum":["video","image","audio","motion"]}},"additionalProperties":false},"fuzion_quote_input":{"type":"object","properties":{"model":{"type":"string","minLength":1,"maxLength":200},"prompt":{"type":"string","maxLength":25000},"aspect_ratio":{"type":"string","maxLength":30,"description":"Required when the model lists 2+ aspect_ratios. Ask the user; do not guess."},"duration":{"oneOf":[{"type":"string"},{"type":"number"}],"description":"Required when the model lists 2+ durations. Use any listed second the model supports. Ask the user; do not guess."},"resolution":{"type":"string","maxLength":30,"description":"Required when the model lists 2+ resolutions. Ask the user; do not guess."},"quality":{"type":"string","enum":["low","medium","high"],"description":"GPT Image 2 ALL only. Defaults to low."},"output_format":{"type":"string","enum":["png","jpeg","webp"],"description":"GPT Image 2 ALL encoded output format. Defaults to png."},"audio":{"type":"boolean"},"batch_count":{"type":"integer","minimum":1,"maximum":4},"job_count":{"type":"integer","minimum":1,"maximum":12}},"required":["model","prompt"],"additionalProperties":false},"fuzion_confirm_input":{"type":"object","properties":{"quote_id":{"type":"string","minLength":16,"maxLength":2048}},"required":["quote_id"],"additionalProperties":false},"fuzion_generate_input":{"type":"object","properties":{"model":{"type":"string","minLength":1,"maxLength":200},"prompt":{"type":"string","maxLength":25000},"aspect_ratio":{"type":"string","maxLength":30,"description":"Required when the model lists 2+ aspect_ratios. Ask the user; do not guess."},"duration":{"oneOf":[{"type":"string"},{"type":"number"}],"description":"Required when the model lists 2+ durations. Use any listed second the model supports. Ask the user; do not guess."},"resolution":{"type":"string","maxLength":30,"description":"Required when the model lists 2+ resolutions. Ask the user; do not guess."},"quality":{"type":"string","enum":["low","medium","high"],"description":"GPT Image 2 ALL only. Defaults to low."},"output_format":{"type":"string","enum":["png","jpeg","webp"],"description":"GPT Image 2 ALL encoded output format. Defaults to png."},"audio":{"type":"boolean"},"batch_count":{"type":"integer","minimum":1,"maximum":4},"quote_id":{"type":"string","minLength":16,"maxLength":2048,"description":"Use for a confirmed one-job quote. Do not provide with confirm_id."},"confirm_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"images":{"type":"array","items":{"type":"string","pattern":"^https://","maxLength":2048},"maxItems":12},"videos":{"type":"array","items":{"type":"string","pattern":"^https://","maxLength":2048},"maxItems":9},"audios":{"type":"array","items":{"type":"string","pattern":"^https://","maxLength":2048},"maxItems":9},"face_video":{"type":"string","pattern":"^https://","maxLength":2048},"image_asset_ids":{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"maxItems":12},"video_asset_ids":{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"maxItems":9},"audio_asset_ids":{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"maxItems":9},"face_video_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36,"description":"BytePlus Seedance only. A 2–15s reference video containing a human face whose identity should be preserved. Do not also include it in video_asset_ids."},"first_frame":{"type":"string","pattern":"^https://","maxLength":2048},"last_frame":{"type":"string","pattern":"^https://","maxLength":2048},"motion_image":{"type":"string","pattern":"^https://","maxLength":2048},"motion_video":{"type":"string","pattern":"^https://","maxLength":2048},"mask_image":{"type":"string","pattern":"^https://","maxLength":2048,"description":"GPT Image 2 ALL only. PNG mask; transparent pixels are edited."},"first_frame_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"last_frame_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"motion_image_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"motion_video_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"mask_image_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36}},"required":["model","prompt"],"additionalProperties":false},"fuzion_get_job_input":{"type":"object","properties":{"job_id":{"type":"string","minLength":1,"maxLength":100}},"required":["job_id"],"additionalProperties":false},"fuzion_upload_init_input":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":200},"content_type":{"type":"string","minLength":3,"maxLength":100},"size_bytes":{"type":"integer","minimum":1,"maximum":209715200}},"required":["filename","content_type","size_bytes"],"additionalProperties":false},"fuzion_upload_complete_input":{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36}},"required":["upload_id"],"additionalProperties":false},"fuzion_balance_input":{"type":"object","properties":{},"additionalProperties":false},"fuzion_info_input":{"type":"object","properties":{},"additionalProperties":false},"JsonRpcRequest":{"type":"object","required":["jsonrpc","method"],"additionalProperties":false,"properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"description":"Required for requests. Omit for notifications/initialized.","oneOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","enum":["initialize","ping","tools/list","tools/call","notifications/initialized"]},"params":{"type":"object","additionalProperties":true}}},"ToolsCallParams":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","enum":["fuzion_list_models","fuzion_quote","fuzion_confirm","fuzion_generate","fuzion_get_job","fuzion_upload_init","fuzion_upload_complete","fuzion_balance","fuzion_info"]},"arguments":{"type":"object","additionalProperties":true}}},"OAuthRegisterRequest":{"type":"object","required":["redirect_uris"],"additionalProperties":false,"properties":{"client_name":{"type":"string","maxLength":120},"redirect_uris":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"string"}},"token_endpoint_auth_method":{"type":"string","enum":["none"]},"grant_types":{"type":"array","items":{"type":"string","enum":["authorization_code"]}},"response_types":{"type":"array","items":{"type":"string","enum":["code"]}}}},"OAuthTokenRequest":{"type":"object","required":["grant_type","code","redirect_uri","client_id","code_verifier"],"additionalProperties":false,"properties":{"grant_type":{"type":"string","enum":["authorization_code"]},"code":{"type":"string"},"redirect_uri":{"type":"string"},"client_id":{"type":"string"},"code_verifier":{"type":"string"}}}}},"x-mcp":{"serverUrl":"https://fuzionhub.co/api/mcp","openapi":"https://fuzionhub.co/mcp/openapi.json","documentation":"https://fuzionhub.co/mcp","protocolVersions":["2025-06-18","2025-03-26","2024-11-05"],"transport":"streamable-http","oauth":{"authorizationServer":"https://fuzionhub.co/.well-known/oauth-authorization-server","protectedResource":"https://fuzionhub.co/.well-known/oauth-protected-resource","pkce":"S256","tokenEndpointAuthMethod":"none"},"tools":[{"name":"fuzion_list_models","description":"List Fuzion generation models and their current input limits. Call this before quote or generate. Use the returned aspect_ratios, resolutions, and durations to ASK the user when they have not chosen them.","inputSchema":{"type":"object","properties":{"category":{"type":"string","enum":["video","image","audio","motion"]}},"additionalProperties":false}},{"name":"fuzion_quote","description":"Estimate Fuzion credits for one to twelve jobs and check whether the user can afford the total. Required before generate. Ask the user for missing aspect_ratio, resolution, or duration. Tell them total_credits and balance, then wait for confirmation.","inputSchema":{"type":"object","properties":{"model":{"type":"string","minLength":1,"maxLength":200},"prompt":{"type":"string","maxLength":25000},"aspect_ratio":{"type":"string","maxLength":30,"description":"Required when the model lists 2+ aspect_ratios. Ask the user; do not guess."},"duration":{"oneOf":[{"type":"string"},{"type":"number"}],"description":"Required when the model lists 2+ durations. Use any listed second the model supports. Ask the user; do not guess."},"resolution":{"type":"string","maxLength":30,"description":"Required when the model lists 2+ resolutions. Ask the user; do not guess."},"quality":{"type":"string","enum":["low","medium","high"],"description":"GPT Image 2 ALL only. Defaults to low."},"output_format":{"type":"string","enum":["png","jpeg","webp"],"description":"GPT Image 2 ALL encoded output format. Defaults to png."},"audio":{"type":"boolean"},"batch_count":{"type":"integer","minimum":1,"maximum":4},"job_count":{"type":"integer","minimum":1,"maximum":12}},"required":["model","prompt"],"additionalProperties":false}},{"name":"fuzion_confirm","description":"Create a confirmed multi-job generation session after the user accepts a quote. Use the returned confirm_id to submit each job. Prompts may differ. Submit the next job after the previous submit is accepted; do not wait for completion.","inputSchema":{"type":"object","properties":{"quote_id":{"type":"string","minLength":16,"maxLength":2048}},"required":["quote_id"],"additionalProperties":false}},{"name":"fuzion_generate","description":"Generate media after confirmation. Use quote_id for a one-job quote, or confirm_id for a confirmed multi-job session. For BytePlus Seedance, send a person-identity video through face_video_asset_id (or face_video) rather than video_asset_ids; a video used to continue an existing clip is a separate flow. With confirm_id, return a job_id immediately so the next job can be submitted without waiting for completion. If retry_after_seconds is returned, wait that long then retry.","inputSchema":{"type":"object","properties":{"model":{"type":"string","minLength":1,"maxLength":200},"prompt":{"type":"string","maxLength":25000},"aspect_ratio":{"type":"string","maxLength":30,"description":"Required when the model lists 2+ aspect_ratios. Ask the user; do not guess."},"duration":{"oneOf":[{"type":"string"},{"type":"number"}],"description":"Required when the model lists 2+ durations. Use any listed second the model supports. Ask the user; do not guess."},"resolution":{"type":"string","maxLength":30,"description":"Required when the model lists 2+ resolutions. Ask the user; do not guess."},"quality":{"type":"string","enum":["low","medium","high"],"description":"GPT Image 2 ALL only. Defaults to low."},"output_format":{"type":"string","enum":["png","jpeg","webp"],"description":"GPT Image 2 ALL encoded output format. Defaults to png."},"audio":{"type":"boolean"},"batch_count":{"type":"integer","minimum":1,"maximum":4},"quote_id":{"type":"string","minLength":16,"maxLength":2048,"description":"Use for a confirmed one-job quote. Do not provide with confirm_id."},"confirm_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"images":{"type":"array","items":{"type":"string","pattern":"^https://","maxLength":2048},"maxItems":12},"videos":{"type":"array","items":{"type":"string","pattern":"^https://","maxLength":2048},"maxItems":9},"audios":{"type":"array","items":{"type":"string","pattern":"^https://","maxLength":2048},"maxItems":9},"face_video":{"type":"string","pattern":"^https://","maxLength":2048},"image_asset_ids":{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"maxItems":12},"video_asset_ids":{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"maxItems":9},"audio_asset_ids":{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"maxItems":9},"face_video_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36,"description":"BytePlus Seedance only. A 2–15s reference video containing a human face whose identity should be preserved. Do not also include it in video_asset_ids."},"first_frame":{"type":"string","pattern":"^https://","maxLength":2048},"last_frame":{"type":"string","pattern":"^https://","maxLength":2048},"motion_image":{"type":"string","pattern":"^https://","maxLength":2048},"motion_video":{"type":"string","pattern":"^https://","maxLength":2048},"mask_image":{"type":"string","pattern":"^https://","maxLength":2048,"description":"GPT Image 2 ALL only. PNG mask; transparent pixels are edited."},"first_frame_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"last_frame_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"motion_image_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"motion_video_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36},"mask_image_asset_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36}},"required":["model","prompt"],"additionalProperties":false}},{"name":"fuzion_get_job","description":"Get and synchronize a Fuzion job owned by the authenticated user.","inputSchema":{"type":"object","properties":{"job_id":{"type":"string","minLength":1,"maxLength":100}},"required":["job_id"],"additionalProperties":false}},{"name":"fuzion_upload_init","description":"Reserve a short-lived direct upload into the signed-in user Fuzion Assets. Ask the user before uploading a chat attachment. PUT the exact file bytes to upload_url with every returned header, then call fuzion_upload_complete.","inputSchema":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":200},"content_type":{"type":"string","minLength":3,"maxLength":100},"size_bytes":{"type":"integer","minimum":1,"maximum":209715200}},"required":["filename","content_type","size_bytes"],"additionalProperties":false}},{"name":"fuzion_upload_complete","description":"Validate and finalize a reserved direct upload into the signed-in user Fuzion Assets. Returns a private asset_id for use as a generation reference.","inputSchema":{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","maxLength":36}},"required":["upload_id"],"additionalProperties":false}},{"name":"fuzion_balance","description":"Get the authenticated user Fuzion credit balance.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"fuzion_info","description":"Explain the Fuzion MCP workflow, billing, references, and polling behavior.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}}],"excluded":["Enhance","Prompt Agent","chat top-up","binary upload"]}}