{"schemaVersion":"1.0","name":"Fantas AI Connect","description":"Member-only image and video generation tools for AI assistants.","descriptionZh":"供会员把 Fantas 生图、生视频能力连接给自己 AI 使用的机器可读入口。","documentationUrl":"https://nredyd7yzs.feishu.cn/wiki/I0IZwPee8icp9hkNs1Sckk2nnFb","membershipRequired":true,"transport":{"protocol":"mcp","protocolVersion":"2025-11-25","type":"streamable-http","endpoint":"https://aifantas.com/api/mcp"},"authorization":{"type":"bearer","header":"Authorization","format":"Bearer <FANTAS_CONNECTION_TOKEN>","pairing":{"type":"one-time-code-exchange","endpoint":"https://aifantas.com/api/ai-connect/exchange","method":"POST","body":{"pairing_code":"<FANTAS_ONE_TIME_PAIRING_CODE>"},"pairingCodeExpiresMinutes":10,"accessTokenExpiresDays":30},"note":"Exchange the one-time pairing code once, store the returned token securely, and never echo credentials in assistant replies or logs."},"behavior":{"quoteBeforeGeneration":true,"requireOutOfBandUserApproval":true,"approvalTool":"fantas_quote_generation","asynchronousJobs":true,"statusTool":"fantas_get_generation_status"},"tools":[{"name":"fantas_account_status","title":"Fantas account status","description":"Check whether the connected Fantas account has an active membership and view its available credit balance. Use this before explaining an access or billing problem.","inputSchema":{"type":"object","additionalProperties":false}},{"name":"fantas_list_models","title":"List Fantas models","description":"List the image and/or video models currently available to the connected Fantas member. Prefer omitting model_id in generation unless the user asks for a specific model.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"media_type":{"type":"string","enum":["all","image","video"],"default":"all"}}}},{"name":"fantas_quote_generation","title":"Quote Fantas generation","description":"Calculate the current Fantas credit cost without starting generation. The result includes a Fantas approval URL and quote_id. The user must approve that exact quote in Fantas before generation.","inputSchema":{"type":"object","additionalProperties":false,"required":["media_type","prompt"],"properties":{"media_type":{"type":"string","enum":["image","video"]},"prompt":{"type":"string","minLength":1,"maxLength":20000,"description":"What the user wants Fantas to create."},"model_id":{"type":"string","maxLength":160,"description":"Optional Fantas model ID. Omit it to use the safe platform default."},"aspect_ratio":{"type":"string","maxLength":32,"description":"Optional ratio such as 1:1, 3:4, 9:16, or 16:9."},"resolution":{"type":"string","maxLength":32,"description":"Optional model-supported resolution such as 1k, 2k, 720p, or 1080p."},"quality":{"type":"string","enum":["auto","low","medium","high"],"description":"Optional quality. Omit it to use the model default."},"reference_images":{"type":"array","maxItems":14,"items":{"type":"string","format":"uri","maxLength":4096},"description":"Optional HTTPS image URLs that the user authorized for this generation."},"output_count":{"type":"integer","minimum":1,"maximum":1,"default":1},"duration_seconds":{"type":"integer","minimum":1,"maximum":60,"description":"Video duration. Ignored for images."},"generate_audio":{"type":"boolean","description":"Whether the video should include generated audio when supported."}}}},{"name":"fantas_generate_image","title":"Generate an image with Fantas","description":"Start one asynchronous Fantas image-generation job. First quote the exact same request and wait for the user to approve it in Fantas. A quote_id is single-use and bound to the request and approved credits.","inputSchema":{"type":"object","additionalProperties":false,"required":["prompt","client_request_id","quote_id"],"properties":{"prompt":{"type":"string","minLength":1,"maxLength":20000,"description":"What the user wants Fantas to create."},"model_id":{"type":"string","maxLength":160,"description":"Optional Fantas model ID. Omit it to use the safe platform default."},"aspect_ratio":{"type":"string","maxLength":32,"description":"Optional ratio such as 1:1, 3:4, 9:16, or 16:9."},"resolution":{"type":"string","maxLength":32,"description":"Optional model-supported resolution such as 1k, 2k, 720p, or 1080p."},"quality":{"type":"string","enum":["auto","low","medium","high"],"description":"Optional quality. Omit it to use the model default."},"reference_images":{"type":"array","maxItems":14,"items":{"type":"string","format":"uri","maxLength":4096},"description":"Optional HTTPS image URLs that the user authorized for this generation."},"output_count":{"type":"integer","minimum":1,"maximum":1,"default":1},"client_request_id":{"type":"string","minLength":8,"maxLength":180,"description":"A unique stable ID for this user-approved request. Reuse it only when retrying the exact same request."},"quote_id":{"type":"string","minLength":20,"maxLength":100,"description":"Single-use quote approval ID returned by fantas_quote_generation and approved by the user in Fantas."}}}},{"name":"fantas_generate_video","title":"Generate a video with Fantas","description":"Start one asynchronous Fantas video-generation job. First quote the exact same request and wait for the user to approve it in Fantas. A quote_id is single-use and bound to the request and approved credits.","inputSchema":{"type":"object","additionalProperties":false,"required":["prompt","client_request_id","quote_id"],"properties":{"prompt":{"type":"string","minLength":1,"maxLength":20000,"description":"What the user wants Fantas to create."},"model_id":{"type":"string","maxLength":160,"description":"Optional Fantas model ID. Omit it to use the safe platform default."},"aspect_ratio":{"type":"string","maxLength":32,"description":"Optional ratio such as 1:1, 3:4, 9:16, or 16:9."},"resolution":{"type":"string","maxLength":32,"description":"Optional model-supported resolution such as 1k, 2k, 720p, or 1080p."},"quality":{"type":"string","enum":["auto","low","medium","high"],"description":"Optional quality. Omit it to use the model default."},"reference_images":{"type":"array","maxItems":14,"items":{"type":"string","format":"uri","maxLength":4096},"description":"Optional HTTPS image URLs that the user authorized for this generation."},"output_count":{"type":"integer","minimum":1,"maximum":1,"default":1},"duration_seconds":{"type":"integer","minimum":1,"maximum":60},"generate_audio":{"type":"boolean"},"client_request_id":{"type":"string","minLength":8,"maxLength":180,"description":"A unique stable ID for this user-approved request. Reuse it only when retrying the exact same request."},"quote_id":{"type":"string","minLength":20,"maxLength":100,"description":"Single-use quote approval ID returned by fantas_quote_generation and approved by the user in Fantas."}}}},{"name":"fantas_get_generation_status","title":"Get Fantas generation status","description":"Check an asynchronous Fantas image or video job. Poll again after poll_after_ms while processing. A successful response includes the final media URL.","inputSchema":{"type":"object","additionalProperties":false,"required":["media_type"],"properties":{"media_type":{"type":"string","enum":["image","video"]},"job_id":{"type":"string","maxLength":512},"client_request_id":{"type":"string","maxLength":180}},"anyOf":[{"required":["job_id"]},{"required":["client_request_id"]}]}}]}