MCP 服务器

AI Manga & Anime Generator - Mangii MCP

ai.mangii/manga
设计与创意 媒体与内容 公开且可连接 MCP 2026-07-28

此 MCP 可以做什么

Creates manga and anime artwork from text, including multi-panel stories and multiple visual styles.

manga.buy_credits
Buy API credits
Return the Console billing URL so a human can fund apiPackCredits. Generate-scoped keys cannot create Checkout sessions. Call this after 402 insufficient_credits.
只读 可访问外部资源 幂等
输入模式
{'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.'}}}
输出模式
{'type': 'object', 'required': ['buy_url', 'credit_costs'], 'properties': {'error': {'type': 'string', 'description': 'Machine error code such as invalid_request, insufficient_credits, or quality_forbidden.'}, 'buy_url': {'type': 'string', 'description': 'Absolute Console billing URL. Always https://mangii.ai/console/billing.'}, 'message': {'type': 'string', 'description': 'Human-readable error. Never includes stack traces or internal paths.'}, 'credit_costs': {'type': 'object', 'properties': {'hd': {'type': 'integer'}, 'ultra': {'type': 'integer'}, 'standard': {'type': 'integer'}}, 'description': 'Credits charged per successful panel.'}, 'next_generation_credits': {'type': 'integer', 'description': 'Credits needed for the requested quality, or null if quality was omitted.'}}}
manga.continue_story
Continue manga story
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.
可访问外部资源
输入模式
{'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.'}}}
输出模式
{'type': 'object', 'properties': {'error': {'type': 'string', 'description': 'Machine error code such as invalid_request, insufficient_credits, or quality_forbidden.'}, 'job_id': {'type': 'string', 'description': 'Async job id when async is true or the work is still running.'}, 'message': {'type': 'string', 'description': 'Human-readable error. Never includes stack traces or internal paths.'}, 'quality': {'enum': ['standard', 'hd', 'ultra'], 'type': 'string', 'description': 'Quality used for this generation.'}, 'panel_id': {'type': 'string', 'description': 'Generated or regenerated panel id.'}, 'story_id': {'type': 'string', 'description': 'Created or existing story id.'}, 'image_url': {'type': 'string', 'description': 'HTTPS URL of the finished panel when async is false and generation succeeded.'}, 'next_step': {'type': 'string', 'description': 'What the agent should call next. Follow this instead of guessing.'}, 'request_id': {'type': 'string', 'description': 'Request correlation id.'}, 'credits_charged': {'type': 'integer', 'description': 'API credits billed for a successful generation.'}, 'credits_remaining': {'type': 'integer', 'description': 'Remaining spendableCredits after the call (apiPack plus packCredits after a purchase).'}}, 'description': 'Completed panel, accepted job, or tool error.'}
manga.create_story
Create manga story
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.
可访问外部资源
输入模式
{'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.'}}}
输出模式
{'type': 'object', 'properties': {'error': {'type': 'string', 'description': 'Machine error code such as invalid_request, insufficient_credits, or quality_forbidden.'}, 'job_id': {'type': 'string', 'description': 'Async job id when async is true or the work is still running.'}, 'message': {'type': 'string', 'description': 'Human-readable error. Never includes stack traces or internal paths.'}, 'quality': {'enum': ['standard', 'hd', 'ultra'], 'type': 'string', 'description': 'Quality used for this generation.'}, 'panel_id': {'type': 'string', 'description': 'Generated or regenerated panel id.'}, 'story_id': {'type': 'string', 'description': 'Created or existing story id.'}, 'image_url': {'type': 'string', 'description': 'HTTPS URL of the finished panel when async is false and generation succeeded.'}, 'next_step': {'type': 'string', 'description': 'What the agent should call next. Follow this instead of guessing.'}, 'request_id': {'type': 'string', 'description': 'Request correlation id.'}, 'credits_charged': {'type': 'integer', 'description': 'API credits billed for a successful generation.'}, 'credits_remaining': {'type': 'integer', 'description': 'Remaining spendableCredits after the call (apiPack plus packCredits after a purchase).'}}, 'description': 'Completed panel, accepted job, or tool error.'}
manga.get_credits
Get API credits
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.
只读 可访问外部资源 幂等
输入模式
{'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.'}}}
输出模式
{'type': 'object', 'properties': {'error': {'type': 'string', 'description': 'Machine error code such as invalid_request, insufficient_credits, or quality_forbidden.'}, 'notes': {'type': 'string', 'description': 'Wallet rules for agents.'}, 'message': {'type': 'string', 'description': 'Human-readable error. Never includes stack traces or internal paths.'}, 'packCredits': {'type': 'integer', 'description': 'In-app pack credits. After a purchase (hasEverPurchasedCredits), the full current balance is included in spendableCredits, including later ad/referral grants. Never-purchased pack balances do not spend.'}, 'weeklyCredits': {'type': 'integer', 'description': 'In-app weekly credits. Display-only for API/MCP.'}, 'apiPackCredits': {'type': 'integer', 'description': 'Spendable API credits for generate tools.'}, 'spendableCredits': {'type': 'integer', 'description': 'apiPackCredits plus packCredits when the account has ever purchased. Same number useApiCredit will spend.'}}}
manga.get_job
Get generation job
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.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'Job id from a previous generate result. Example: job_ab12cd34.'}}}
输出模式
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Job id.'}, 'error': {'type': 'string', 'description': 'Machine error code such as invalid_request, insufficient_credits, or quality_forbidden.'}, 'result': {'type': 'object', 'description': 'Finished panel fields when status is succeeded.'}, 'status': {'enum': ['queued', 'running', 'succeeded', 'failed'], 'type': 'string', 'description': 'Job status.'}, 'message': {'type': 'string', 'description': 'Human-readable error. Never includes stack traces or internal paths.'}, 'next_step': {'type': 'string', 'description': 'What to call next.'}}}
manga.list_panels
List story panels
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.
只读 可访问外部资源 幂等
输入模式
{'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.'}}}
输出模式
{'type': 'object', 'required': ['panels'], 'properties': {'hint': {'type': 'string', 'description': 'How to override Image 1 and Image 2 on continue or regenerate.'}, 'error': {'type': 'string', 'description': 'Machine error code such as invalid_request, insufficient_credits, or quality_forbidden.'}, 'panels': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Panel id. Pass as identity_panel_id or continuity_panel_id.'}, 'prompt': {'type': 'string', 'description': 'Stored user prompt for this panel.'}, 'ref_role': {'type': 'string', 'description': 'Default continue slot: identity, scene, or null if unused.'}, 'story_id': {'type': 'string', 'description': 'Parent story id.'}, 'image_url': {'type': 'string', 'description': 'HTTPS URL of this panel image.'}, 'order_index': {'type': 'integer', 'description': 'Zero-based reading order. First panel is 0.'}}}, 'description': 'Panels in reading order, with ids for identity_panel_id and continuity_panel_id.'}, 'message': {'type': 'string', 'description': 'Human-readable error. Never includes stack traces or internal paths.'}, 'story_id': {'type': 'string', 'description': 'Story id from manga.create_story. Example: a Firestore story document id returned as story_id.'}}}
manga.list_stories
List own stories
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).
只读 可访问外部资源 幂等
输入模式
{'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.'}}}
输出模式
{'type': 'object', 'required': ['stories', 'next_step'], 'properties': {'error': {'type': 'string', 'description': 'Machine error code such as invalid_request, insufficient_credits, or quality_forbidden.'}, 'message': {'type': 'string', 'description': 'Human-readable error. Never includes stack traces or internal paths.'}, 'stories': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Story id. Pass as story_id on manga.continue_story.'}, 'title': {'type': ['string', 'null'], 'description': 'Story title. Null when the story was never named.'}, 'language': {'type': ['string', 'null'], 'description': 'Story language code when stored.'}, 'style_id': {'type': ['string', 'null'], 'description': 'Locked art style id from create. Do not send it on continue.'}, 'cover_url': {'type': ['string', 'null'], 'description': 'Cover image HTTPS URL when the story has one.'}, 'created_at': {'type': ['string', 'null'], 'description': 'ISO created timestamp, or null if missing.'}, 'panelCount': {'type': 'integer', 'description': 'How many panels this story currently has.'}, 'updated_at': {'type': ['string', 'null'], 'description': 'ISO updated timestamp, or null if missing.'}, 'visibility': {'type': 'string', 'description': 'private or public. Defaults to private.'}}}, 'description': 'Owned active stories, newest updated_at first.'}, 'next_step': {'type': 'string', 'description': 'What to call next. Follow this instead of guessing.'}}}
manga.list_styles
List manga styles
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.
只读 可访问外部资源 幂等
输入模式
{'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.'}}}
输出模式
{'type': 'object', 'required': ['styles'], 'properties': {'error': {'type': 'string', 'description': 'Machine error code such as invalid_request, insufficient_credits, or quality_forbidden.'}, 'styles': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'group'], 'properties': {'id': {'type': 'string', 'description': 'Pass this as style_id on manga.create_story. Example: classic_shonen.'}, 'name': {'type': 'string', 'description': 'Human display name. Example: Classic Action.'}, 'group': {'type': 'string', 'description': 'Picker group id. Example: shonen_action.'}}}, 'description': 'Selectable styles.'}, 'message': {'type': 'string', 'description': 'Human-readable error. Never includes stack traces or internal paths.'}}}
manga.regenerate_panel
Regenerate manga panel
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.
可访问外部资源
输入模式
{'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.'}}}
输出模式
{'type': 'object', 'properties': {'error': {'type': 'string', 'description': 'Machine error code such as invalid_request, insufficient_credits, or quality_forbidden.'}, 'job_id': {'type': 'string', 'description': 'Async job id when async is true or the work is still running.'}, 'message': {'type': 'string', 'description': 'Human-readable error. Never includes stack traces or internal paths.'}, 'quality': {'enum': ['standard', 'hd', 'ultra'], 'type': 'string', 'description': 'Quality used for this generation.'}, 'panel_id': {'type': 'string', 'description': 'Generated or regenerated panel id.'}, 'story_id': {'type': 'string', 'description': 'Created or existing story id.'}, 'image_url': {'type': 'string', 'description': 'HTTPS URL of the finished panel when async is false and generation succeeded.'}, 'next_step': {'type': 'string', 'description': 'What the agent should call next. Follow this instead of guessing.'}, 'request_id': {'type': 'string', 'description': 'Request correlation id.'}, 'credits_charged': {'type': 'integer', 'description': 'API credits billed for a successful generation.'}, 'credits_remaining': {'type': 'integer', 'description': 'Remaining spendableCredits after the call (apiPack plus packCredits after a purchase).'}}, 'description': 'Completed panel, accepted job, or tool error.'}
已添加
manga.get_job
2026年9月17日 07:57
已添加
manga.buy_credits
2026年9月17日 07:57
已添加
manga.regenerate_panel
2026年9月17日 07:57
已添加
manga.continue_story
2026年9月17日 07:57
已添加
manga.create_story
2026年9月17日 07:57
已添加
manga.list_stories
2026年9月17日 07:57
已添加
manga.list_panels
2026年9月17日 07:57
已添加
manga.get_credits
2026年9月17日 07:57
已添加
manga.list_styles
2026年9月17日 07:57