AI Manga & Anime Generator - Mangii MCP

Create manga and anime art from text. 24 styles, multi-panel stories, BYOK.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
96%
Naming quality
50%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (9)

  • LOWTool 'manga.list_styles' doesn't follow camelCase/snake_casein manga.list_styles
  • LOWTool 'manga.get_credits' doesn't follow camelCase/snake_casein manga.get_credits
  • LOWTool 'manga.list_panels' doesn't follow camelCase/snake_casein manga.list_panels
  • LOWTool 'manga.list_stories' doesn't follow camelCase/snake_casein manga.list_stories
  • LOWTool 'manga.create_story' doesn't follow camelCase/snake_casein manga.create_story
  • LOWTool 'manga.continue_story' doesn't follow camelCase/snake_casein manga.continue_story
  • LOWTool 'manga.regenerate_panel' doesn't follow camelCase/snake_casein manga.regenerate_panel
  • LOWTool 'manga.buy_credits' doesn't follow camelCase/snake_casein manga.buy_credits
  • LOWTool 'manga.get_job' doesn't follow camelCase/snake_casein manga.get_job

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,413Tokens (tool definitions)
~5.4 KBTypical response size
Significant attention impact (3.45% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "manga": {
      "url": "https://mcp.mangii.ai/mcp"
    }
  }
}

Remote endpoints

https://mcp.mangii.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢manga.list_styles(group, limit)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "group": {
      "type": "string",
      "enum": [
        "shonen_action",
        "modern_anime",
        "romance_cute",
        "dark_mature",
        "webtoon_cultivation",
        "painterly_artistic"
      ],
      "description": "Optional style group. Example: shonen_action or painterly_artistic. Omit to return every selectable style."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 24,
      "description": "Optional max number of styles to return after filtering. Example: 6."
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {
    "styles": {
      "type": "array",
      "description": "Selectable styles.",
      "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."
          }
        }
      }
    },
    "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."
    }
  },
  "required": [
    "styles"
  ]
}
🟢manga.get_credits(include_notes)

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.

Input Schema

{
  "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."
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {
    "weeklyCredits": {
      "type": "integer",
      "description": "In-app weekly credits. Display-only for API/MCP."
    },
    "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."
    },
    "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."
    },
    "notes": {
      "type": "string",
      "description": "Wallet rules for agents."
    },
    "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."
    }
  }
}
🟢manga.list_panels(story_id)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "story_id": {
      "type": "string",
      "description": "Story id from manga.create_story. Example: a Firestore story document id returned as story_id."
    }
  },
  "required": [
    "story_id"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "story_id": {
      "type": "string",
      "description": "Story id from manga.create_story. Example: a Firestore story document id returned as story_id."
    },
    "panels": {
      "type": "array",
      "description": "Panels in reading order, with ids for identity_panel_id and continuity_panel_id.",
      "items": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Panel id. Pass as identity_panel_id or continuity_panel_id."
          },
          "story_id": {
            "type": "string",
            "description": "Parent story id."
          },
          "order_index": {
            "type": "integer",
            "description": "Zero-based reading order. First panel is 0."
          },
          "image_url": {
            "type": "string",
            "description": "HTTPS URL of this panel image."
          },
          "prompt": {
            "type": "string",
            "description": "Stored user prompt for this panel."
          },
          "ref_role": {
            "type": "string",
            "description": "Default continue slot: identity, scene, or null if unused."
          }
        }
      }
    },
    "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."
    },
    "message": {
      "type": "string",
      "description": "Human-readable error. Never includes stack traces or internal paths."
    }
  },
  "required": [
    "panels"
  ]
}
🟢manga.list_stories(limit)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Max stories to return. Integer from 1 to 50. Default 20. Omit to use the default."
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {
    "stories": {
      "type": "array",
      "description": "Owned active stories, newest updated_at first.",
      "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."
          },
          "visibility": {
            "type": "string",
            "description": "private or public. Defaults to private."
          },
          "panelCount": {
            "type": "integer",
            "description": "How many panels this story currently has."
          },
          "style_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Locked art style id from create. Do not send it on continue."
          },
          "language": {
            "type": [
              "string",
              "null"
            ],
            "description": "Story language code when stored."
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISO created timestamp, or null if missing."
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISO updated timestamp, or null if missing."
          },
          "cover_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cover image HTTPS URL when the story has one."
          }
        }
      }
    },
    "next_step": {
      "type": "string",
      "description": "What to call next. Follow this instead of guessing."
    },
    "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."
    }
  },
  "required": [
    "stories",
    "next_step"
  ]
}
⚪manga.create_story(prompt, style_id, quality, title, reference_image, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "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."
    },
    "style_id": {
      "type": "string",
      "description": "Canonical style id from manga.list_styles. Example: classic_shonen or cinematic_anime. Locked after panel 0."
    },
    "quality": {
      "type": "string",
      "enum": [
        "standard",
        "hd",
        "ultra"
      ],
      "description": "Generation quality. standard costs 1 credit, hd 2, ultra 5. Default standard. HD/Ultra need an unlocked API wallet."
    },
    "title": {
      "type": "string",
      "description": "Optional story title shown in the library. Example: \"Rain Duel\". Omit to let Mangii name it."
    },
    "reference_image": {
      "type": "string",
      "description": "Optional first-panel identity photo. https URL or data URI. Alias of identity_image."
    },
    "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."
    },
    "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."
    },
    "idempotency_key": {
      "type": "string",
      "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).",
      "minLength": 8,
      "maxLength": 200
    }
  },
  "required": [
    "prompt",
    "style_id"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "story_id": {
      "type": "string",
      "description": "Created or existing story id."
    },
    "panel_id": {
      "type": "string",
      "description": "Generated or regenerated panel id."
    },
    "image_url": {
      "type": "string",
      "description": "HTTPS URL of the finished panel when async is false and generation succeeded."
    },
    "job_id": {
      "type": "string",
      "description": "Async job id when async is true or the work is still running."
    },
    "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)."
    },
    "quality": {
      "type": "string",
      "enum": [
        "standard",
        "hd",
        "ultra"
      ],
      "description": "Quality used for this generation."
    },
    "next_step": {
      "type": "string",
      "description": "What the agent should call next. Follow this instead of guessing."
    },
    "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."
    }
  },
  "description": "Completed panel, accepted job, or tool error."
}
🟡manga.continue_story(story_id, prompt, quality, identity_panel_id, identity_image, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "story_id": {
      "type": "string",
      "description": "Story id from manga.create_story. Example: a Firestore story document id returned as story_id."
    },
    "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": {
      "type": "string",
      "enum": [
        "standard",
        "hd",
        "ultra"
      ],
      "description": "Generation quality. standard costs 1 credit, hd 2, ultra 5. Default standard. HD/Ultra need an unlocked API wallet."
    },
    "identity_panel_id": {
      "type": "string",
      "description": "Override Image 1 (identity) with this panel id from manga.list_panels. Do not also send identity_image."
    },
    "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."
    },
    "reference_image": {
      "type": "string",
      "description": "Alias for identity_image. Replaces Image 1 with an uploaded photo or URL."
    },
    "continuity_panel_id": {
      "type": "string",
      "description": "Override Image 2 (scene) with this panel id from manga.list_panels. Do not also send continuity_image."
    },
    "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."
    },
    "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."
    },
    "idempotency_key": {
      "type": "string",
      "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).",
      "minLength": 8,
      "maxLength": 200
    }
  },
  "required": [
    "story_id",
    "prompt"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "story_id": {
      "type": "string",
      "description": "Created or existing story id."
    },
    "panel_id": {
      "type": "string",
      "description": "Generated or regenerated panel id."
    },
    "image_url": {
      "type": "string",
      "description": "HTTPS URL of the finished panel when async is false and generation succeeded."
    },
    "job_id": {
      "type": "string",
      "description": "Async job id when async is true or the work is still running."
    },
    "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)."
    },
    "quality": {
      "type": "string",
      "enum": [
        "standard",
        "hd",
        "ultra"
      ],
      "description": "Quality used for this generation."
    },
    "next_step": {
      "type": "string",
      "description": "What the agent should call next. Follow this instead of guessing."
    },
    "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."
    }
  },
  "description": "Completed panel, accepted job, or tool error."
}
🟡manga.regenerate_panel(story_id, panel_id, prompt, quality, identity_panel_id, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "story_id": {
      "type": "string",
      "description": "Story id from manga.create_story. Example: a Firestore story document id returned as story_id."
    },
    "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."
    },
    "prompt": {
      "type": "string",
      "description": "Optional rewrite of the scene. Same prompt rules as create. Omit to retry the stored prompt."
    },
    "quality": {
      "type": "string",
      "enum": [
        "standard",
        "hd",
        "ultra"
      ],
      "description": "Generation quality. standard costs 1 credit, hd 2, ultra 5. Default standard. HD/Ultra need an unlocked API wallet."
    },
    "identity_panel_id": {
      "type": "string",
      "description": "Override Image 1 (identity) with this panel id from manga.list_panels. Do not also send identity_image."
    },
    "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."
    },
    "reference_image": {
      "type": "string",
      "description": "Alias for identity_image. Replaces Image 1 with an uploaded photo or URL."
    },
    "continuity_panel_id": {
      "type": "string",
      "description": "Override Image 2 (scene) with this panel id from manga.list_panels. Do not also send continuity_image."
    },
    "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."
    },
    "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."
    },
    "idempotency_key": {
      "type": "string",
      "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).",
      "minLength": 8,
      "maxLength": 200
    }
  },
  "required": [
    "story_id",
    "panel_id"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "story_id": {
      "type": "string",
      "description": "Created or existing story id."
    },
    "panel_id": {
      "type": "string",
      "description": "Generated or regenerated panel id."
    },
    "image_url": {
      "type": "string",
      "description": "HTTPS URL of the finished panel when async is false and generation succeeded."
    },
    "job_id": {
      "type": "string",
      "description": "Async job id when async is true or the work is still running."
    },
    "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)."
    },
    "quality": {
      "type": "string",
      "enum": [
        "standard",
        "hd",
        "ultra"
      ],
      "description": "Quality used for this generation."
    },
    "next_step": {
      "type": "string",
      "description": "What the agent should call next. Follow this instead of guessing."
    },
    "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."
    }
  },
  "description": "Completed panel, accepted job, or tool error."
}
🟢manga.buy_credits(quality)

Return the Console billing URL so a human can fund apiPackCredits. Generate-scoped keys cannot create Checkout sessions. Call this after 402 insufficient_credits.

Input Schema

{
  "type": "object",
  "properties": {
    "quality": {
      "type": "string",
      "enum": [
        "standard",
        "hd",
        "ultra"
      ],
      "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."
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {
    "buy_url": {
      "type": "string",
      "description": "Absolute Console billing URL. Always https://mangii.ai/console/billing."
    },
    "credit_costs": {
      "type": "object",
      "description": "Credits charged per successful panel.",
      "properties": {
        "standard": {
          "type": "integer"
        },
        "hd": {
          "type": "integer"
        },
        "ultra": {
          "type": "integer"
        }
      }
    },
    "next_generation_credits": {
      "type": "integer",
      "description": "Credits needed for the requested quality, or null if quality was omitted."
    },
    "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."
    }
  },
  "required": [
    "buy_url",
    "credit_costs"
  ]
}
🟢manga.get_job(job_id)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "description": "Job id from a previous generate result. Example: job_ab12cd34."
    }
  },
  "required": [
    "job_id"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Job id."
    },
    "status": {
      "type": "string",
      "enum": [
        "queued",
        "running",
        "succeeded",
        "failed"
      ],
      "description": "Job status."
    },
    "result": {
      "type": "object",
      "description": "Finished panel fields when status is succeeded."
    },
    "error": {
      "type": "string",
      "description": "Machine error code such as invalid_request, insufficient_credits, or quality_forbidden."
    },
    "next_step": {
      "type": "string",
      "description": "What to call next."
    },
    "message": {
      "type": "string",
      "description": "Human-readable error. Never includes stack traces or internal paths."
    }
  }
}

Recommended Prompts

retrieve_data
Get details about [item] from AI Manga & Anime Generator - Mangii MCP
Expected tools: manga.get_credits
fetch_info
Fetch [information type] using AI Manga & Anime Generator - Mangii MCP
Expected tools: manga.get_credits
list_items
List all [items] available in AI Manga & Anime Generator - Mangii MCP
Expected tools: manga.list_styles
browse_collection
Show me the [collection] from AI Manga & Anime Generator - Mangii MCP
Expected tools: manga.list_styles
explore_workflow
List available [items], then get details for each one using AI Manga & Anime Generator - Mangii MCP
Expected tools: manga.list_stylesmanga.get_credits

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools
verifiedversion not recorded9 tools