{"serverId":"mcp-registry/ai.mangii/manga","tools":[{"name":"manga.buy_credits","fixed":{"name":"manga_buy_credits","description":"Return the Console billing URL so a human can fund apiPackCredits. Generate-scoped keys cannot create Checkout sessions. Call this after 402 insufficient_credits.","inputSchema":{"type":"object","properties":{"quality":{"enum":["standard","hd","ultra"],"type":"string","description":"Optional quality you plan to generate next. Included in the response as next_generation_credits so the human knows how many credits to buy."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"title":"Buy API credits"},"changes":[{"kind":"name","detail":"Renamed \"manga.buy_credits\" → \"manga_buy_credits\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":131,"tokensAfter":131},{"name":"manga.continue_story","fixed":{"name":"manga_continue_story","description":"Add the next panel. Do not send style_id. Defaults: Image 1 = first panel (identity), Image 2 = last distinct panel (scene). Override via manga.list_panels then identity_panel_id or identity_image and/or continuity_panel_id or continuity_image. Same credit costs as create.","inputSchema":{"type":"object","required":["story_id","prompt"],"properties":{"async":{"type":"boolean","description":"On this MCP server the default is false: wait and return image_url in one call. Set true only if you will poll manga.get_job. HTTP API default remains async."},"prompt":{"type":"string","description":"Scene in everyday language: characters, place, action, mood, camera, weather, color or black-and-white. Example: \"A duel under cherry blossoms, low angle, rain, full color.\" Max 2000 characters."},"quality":{"enum":["standard","hd","ultra"],"type":"string","description":"Generation quality. standard costs 1 credit, hd 2, ultra 5. Default standard. HD/Ultra need an unlocked API wallet."},"story_id":{"type":"string","description":"Story id from manga.create_story. Example: a Firestore story document id returned as story_id."},"identity_image":{"type":"string","description":"Replacement photo: https URL or data:image/...;base64,... URI. Public hosts only. Same slot cannot also send a panel id."},"idempotency_key":{"type":"string","maxLength":200,"minLength":8,"description":"Optional. Reuse the same key on retry so a timeout does not charge twice. 8-200 chars. Omit to mint a one-shot key (unsafe on retry)."},"reference_image":{"type":"string","description":"Alias for identity_image. Replaces Image 1 with an uploaded photo or URL."},"continuity_image":{"type":"string","description":"Replacement Image 2 (scene) photo: https URL or data URI. Do not also send continuity_panel_id."},"context_panel_ids":{"type":"array","items":{"type":"string"},"description":"Legacy list override [identity_panel_id, scene_panel_id]. Ignored when identity_* or continuity_* fields are set. Prefer those named slots."},"identity_panel_id":{"type":"string","description":"Override Image 1 (identity) with this panel id from manga.list_panels. Do not also send identity_image."},"continuity_panel_id":{"type":"string","description":"Override Image 2 (scene) with this panel id from manga.list_panels. Do not also send continuity_image."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Continue manga story"},"changes":[{"kind":"name","detail":"Renamed \"manga.continue_story\" → \"manga_continue_story\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":660,"tokensAfter":660},{"name":"manga.create_story","fixed":{"name":"manga_create_story","description":"Start a new private manga (panel 1). Required: prompt + style_id from manga.list_styles. Optional identity_image or reference_image is Image 1. Style locks. Default async=false returns image_url, story_id, panel_id. Then manga.continue_story. Costs 1/2/5 credits by quality.","inputSchema":{"type":"object","required":["prompt","style_id"],"properties":{"async":{"type":"boolean","description":"On this MCP server the default is false: wait and return image_url in one call. Set true only if you will poll manga.get_job. HTTP API default remains async."},"title":{"type":"string","description":"Optional story title shown in the library. Example: \"Rain Duel\". Omit to let Mangii name it."},"prompt":{"type":"string","description":"Scene in everyday language: characters, place, action, mood, camera, weather, color or black-and-white. Example: \"A duel under cherry blossoms, low angle, rain, full color.\" Max 2000 characters."},"quality":{"enum":["standard","hd","ultra"],"type":"string","description":"Generation quality. standard costs 1 credit, hd 2, ultra 5. Default standard. HD/Ultra need an unlocked API wallet."},"style_id":{"type":"string","description":"Canonical style id from manga.list_styles. Example: classic_shonen or cinematic_anime. Locked after panel 0."},"identity_image":{"type":"string","description":"Replacement photo: https URL or data:image/...;base64,... URI. Public hosts only. Same slot cannot also send a panel id."},"idempotency_key":{"type":"string","maxLength":200,"minLength":8,"description":"Optional. Reuse the same key on retry so a timeout does not charge twice. 8-200 chars. Omit to mint a one-shot key (unsafe on retry)."},"reference_image":{"type":"string","description":"Optional first-panel identity photo. https URL or data URI. Alias of identity_image."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Create manga story"},"changes":[{"kind":"name","detail":"Renamed \"manga.create_story\" → \"manga_create_story\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":514,"tokensAfter":514},{"name":"manga.get_credits","fixed":{"name":"manga_get_credits","description":"Return the API wallet. Spendable is apiPackCredits plus packCredits after the account has ever purchased. Later ad/referral grants on that pack pool also spend. weeklyCredits is display-only.","inputSchema":{"type":"object","properties":{"include_notes":{"type":"boolean","description":"When true (default), include a notes string explaining that weeklyCredits does not spend on API or MCP."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"title":"Get API credits"},"changes":[{"kind":"name","detail":"Renamed \"manga.get_credits\" → \"manga_get_credits\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":122,"tokensAfter":122},{"name":"manga.get_job","fixed":{"name":"manga_get_job","description":"Poll a generation job from manga.create_story, manga.continue_story, or manga.regenerate_panel when async=true. Repeat until status is succeeded or failed. Prefer async=false so you do not need this tool.","inputSchema":{"type":"object","required":["job_id"],"properties":{"job_id":{"type":"string","description":"Job id from a previous generate result. Example: job_ab12cd34."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"title":"Get generation job"},"changes":[{"kind":"name","detail":"Renamed \"manga.get_job\" → \"manga_get_job\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"manga.list_panels","fixed":{"name":"manga_list_panels","description":"List panels you own for a story. Use this to get panel_id values before changing Image 1 or Image 2 on manga.continue_story or manga.regenerate_panel. Each row has ref_role: identity on the first panel, scene on the last distinct panel, otherwise null.","inputSchema":{"type":"object","required":["story_id"],"properties":{"story_id":{"type":"string","description":"Story id from manga.create_story. Example: a Firestore story document id returned as story_id."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"title":"List story panels"},"changes":[{"kind":"name","detail":"Renamed \"manga.list_panels\" → \"manga_list_panels\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":142,"tokensAfter":142},{"name":"manga.list_stories","fixed":{"name":"manga_list_stories","description":"List stories you own, newest first. Call this when you lost story_id after context compaction so you can resume with manga.continue_story. Optional limit is an integer from 1 to 50 (default 20).","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Max stories to return. Integer from 1 to 50. Default 20. Omit to use the default."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"title":"List own stories"},"changes":[{"kind":"name","detail":"Renamed \"manga.list_stories\" → \"manga_list_stories\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":122,"tokensAfter":122},{"name":"manga.list_styles","fixed":{"name":"manga_list_styles","description":"List the 24 canonical Mangii art styles with live style ids. Call this before manga.create_story. Experimental and alias ids are excluded. Filter with group or limit when you only need one look.","inputSchema":{"type":"object","properties":{"group":{"enum":["shonen_action","modern_anime","romance_cute","dark_mature","webtoon_cultivation","painterly_artistic"],"type":"string","description":"Optional style group. Example: shonen_action or painterly_artistic. Omit to return every selectable style."},"limit":{"type":"integer","maximum":24,"minimum":1,"description":"Optional max number of styles to return after filtering. Example: 6."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"title":"List manga styles"},"changes":[{"kind":"name","detail":"Renamed \"manga.list_styles\" → \"manga_list_styles\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":190,"tokensAfter":190},{"name":"manga.regenerate_panel","fixed":{"name":"manga_regenerate_panel","description":"Redraw or edit one panel. Style stays locked. Same Image 1 / Image 2 ref overrides as manga.continue_story. Get ids from manga.list_panels. Costs the same credits as a new panel.","inputSchema":{"type":"object","required":["story_id","panel_id"],"properties":{"async":{"type":"boolean","description":"On this MCP server the default is false: wait and return image_url in one call. Set true only if you will poll manga.get_job. HTTP API default remains async."},"prompt":{"type":"string","description":"Optional rewrite of the scene. Same prompt rules as create. Omit to retry the stored prompt."},"quality":{"enum":["standard","hd","ultra"],"type":"string","description":"Generation quality. standard costs 1 credit, hd 2, ultra 5. Default standard. HD/Ultra need an unlocked API wallet."},"panel_id":{"type":"string","description":"Panel id from a previous generate result or manga.list_panels. Example: the panel_id returned by manga.create_story."},"story_id":{"type":"string","description":"Story id from manga.create_story. Example: a Firestore story document id returned as story_id."},"identity_image":{"type":"string","description":"Replacement photo: https URL or data:image/...;base64,... URI. Public hosts only. Same slot cannot also send a panel id."},"idempotency_key":{"type":"string","maxLength":200,"minLength":8,"description":"Optional. Reuse the same key on retry so a timeout does not charge twice. 8-200 chars. Omit to mint a one-shot key (unsafe on retry)."},"reference_image":{"type":"string","description":"Alias for identity_image. Replaces Image 1 with an uploaded photo or URL."},"continuity_image":{"type":"string","description":"Replacement Image 2 (scene) photo: https URL or data URI. Do not also send continuity_panel_id."},"context_panel_ids":{"type":"array","items":{"type":"string"},"description":"Legacy list override [identity_panel_id, scene_panel_id]. Ignored when identity_* or continuity_* fields are set. Prefer those named slots."},"identity_panel_id":{"type":"string","description":"Override Image 1 (identity) with this panel id from manga.list_panels. Do not also send identity_image."},"continuity_panel_id":{"type":"string","description":"Override Image 2 (scene) with this panel id from manga.list_panels. Do not also send continuity_image."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Regenerate manga panel"},"changes":[{"kind":"name","detail":"Renamed \"manga.regenerate_panel\" → \"manga_regenerate_panel\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":651,"tokensAfter":651}],"toolsChanged":9,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}