FableMaker

AI story generator — create illustrated storybooks, AI songs, and short AI video films

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
85%
Naming quality
92%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,523Tokens (tool definitions)
~1.3 KBTypical response size
Moderate attention impact (1.19% 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": {
    "fable-maker": {
      "url": "https://fable-maker.pendia-community.workers.dev/mcp"
    }
  }
}

Remote endpoints

https://fable-maker.pendia-community.workers.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡signup(username, password)

Create a new FableMaker account. Returns a JWT token that expires in 26 days. Username must be at least 3 characters, password at least 7 characters with 1 digit.

Input Schema

{
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "description": "Username (min 3 chars, must be unique)"
    },
    "password": {
      "type": "string",
      "description": "Password (min 7 chars, must contain at least 1 digit)"
    }
  },
  "required": [
    "username",
    "password"
  ]
}
⚪login(username, password)

Login to an existing FableMaker account. Returns a JWT token that expires in 26 days. Use this token as Bearer auth for subsequent MCP calls.

Input Schema

{
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "description": "Your username"
    },
    "password": {
      "type": "string",
      "description": "Your password"
    }
  },
  "required": [
    "username",
    "password"
  ]
}
🟡create_story(title, storyIdea, type, outputs, duration, ...)

Generate a new story from your idea. Creates an illustrated storybook (MD), an AI song, or an AI drama video. Returns a storyId immediately — processing happens in the background. Use get_story to check progress.

Input Schema

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "description": "Story title (optional, defaults to \"Untitled\")"
    },
    "storyIdea": {
      "type": "string",
      "description": "Your story idea, prompt, or description"
    },
    "type": {
      "type": "string",
      "enum": [
        "script",
        "song",
        "drama"
      ],
      "description": "script=illustrated storybook, song=AI music with cover art, drama=AI video"
    },
    "outputs": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "md",
          "song",
          "drama"
        ]
      },
      "description": "What to create: md (storybook), song, or drama (video)"
    },
    "duration": {
      "type": "string",
      "enum": [
        "snappy",
        "exq",
        "clappy"
      ],
      "description": "snappy=shorter/faster, exq=longer/higher quality, clappy=premium video (90-180s, new stories only). Default: snappy"
    },
    "scriptStyle": {
      "type": "string",
      "description": "Writing style for storybook: William Shakespeare, Jane Austen, Charles Dickens, etc."
    },
    "playStyle": {
      "type": "string",
      "description": "Writing style for play/screenplay: Oscar Wilde, Stan Lee, etc."
    },
    "songStyle": {
      "type": "string",
      "description": "Music artist style: Amy Winehouse, David Bowie, etc."
    },
    "dramaStyle": {
      "type": "string",
      "description": "Director style for video: Quentin Tarantino, Christopher Nolan, etc."
    },
    "dramaTheme": {
      "type": "string",
      "enum": [
        "standard",
        "scifi",
        "mythical"
      ],
      "description": "Video theme: standard (animation), scifi, mythical. Default: standard"
    },
    "songDuration": {
      "type": "string",
      "enum": [
        "snappy",
        "exq"
      ],
      "description": "snappy=~60sec, exq=1.5-3min (default: snappy)"
    },
    "contextVersionIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional: link previous episodes for context. Use get_story to find version IDs."
    }
  },
  "required": [
    "storyIdea",
    "type",
    "outputs"
  ]
}
⚪remix_story(storyId, targetFormat, duration, songDuration, dramaTheme)

Turn an existing story into a different format. For example, convert a storybook into a song or video. Uses the same story text — faster and cheaper than creating from scratch. Not available for Model A accounts.

Input Schema

{
  "type": "object",
  "properties": {
    "storyId": {
      "type": "string",
      "description": "The story to remix. Use list_stories to find your story first."
    },
    "targetFormat": {
      "type": "string",
      "enum": [
        "md",
        "song",
        "drama"
      ],
      "description": "What to create: md (storybook), song (AI music), or drama (AI video)"
    },
    "duration": {
      "type": "string",
      "enum": [
        "snappy",
        "exq"
      ],
      "description": "Override duration (optional)"
    },
    "songDuration": {
      "type": "string",
      "enum": [
        "snappy",
        "exq"
      ],
      "description": "Override song duration (optional)"
    },
    "dramaTheme": {
      "type": "string",
      "enum": [
        "standard",
        "scifi",
        "mythical"
      ],
      "description": "Video theme override (optional)"
    }
  },
  "required": [
    "storyId",
    "targetFormat"
  ]
}
⚪quake_story(storyId, output, duration, songDuration, scriptStyle, ...)

Regenerate a story completely fresh. Same original idea, but creates a brand new version from scratch with new text and media. Like a "do-over". Not available for Model B accounts.

Input Schema

{
  "type": "object",
  "properties": {
    "storyId": {
      "type": "string",
      "description": "The story to regenerate. Use list_stories to find your story first."
    },
    "output": {
      "type": "string",
      "enum": [
        "md",
        "song",
        "drama"
      ],
      "description": "What to create: md (storybook), song (AI music), or drama (AI video)"
    },
    "duration": {
      "type": "string",
      "enum": [
        "snappy",
        "exq"
      ],
      "description": "Override duration (optional)"
    },
    "songDuration": {
      "type": "string",
      "enum": [
        "snappy",
        "exq"
      ],
      "description": "Override song duration (optional)"
    },
    "scriptStyle": {
      "type": "string",
      "description": "Override writing style (optional)"
    },
    "playStyle": {
      "type": "string",
      "description": "Override play writing style (optional)"
    },
    "songStyle": {
      "type": "string",
      "description": "Override music artist style (optional)"
    },
    "dramaStyle": {
      "type": "string",
      "description": "Override director style (optional)"
    },
    "dramaTheme": {
      "type": "string",
      "enum": [
        "standard",
        "scifi",
        "mythical"
      ],
      "description": "Video theme override (optional)"
    }
  },
  "required": [
    "storyId",
    "output"
  ]
}
🟢get_story(storyId)

Get story details, versions, and media download links. Story status can be: pending, processing, paraphrasing, generating, generating_media, completed, failed.

Input Schema

{
  "type": "object",
  "properties": {
    "storyId": {
      "type": "string",
      "description": "The story ID. Use list_stories to find it."
    }
  },
  "required": [
    "storyId"
  ]
}
🟢list_stories

List all your stories with their titles, status, and type.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢get_balance

Check your account balance. For B2C: shows credit count. For Model A: shows quota remaining and prepaid balance. For Model B: shows prepaid balance in USD.

Input Schema

{
  "type": "object",
  "properties": {}
}
🔴delete_story(storyId)

Delete a story and all its media (files, versions, logs). This cannot be undone. Use list_stories to find story IDs.

Input Schema

{
  "type": "object",
  "properties": {
    "storyId": {
      "type": "string",
      "description": "The story ID to delete"
    }
  },
  "required": [
    "storyId"
  ]
}
🟡buy_credits(pack)

Get a Stripe payment link to add funds. For B2C: buy credit packs (Starter/Writer/Author/Storyteller). For B2B: top up prepaid balance with preset amounts.

Input Schema

{
  "type": "object",
  "properties": {
    "pack": {
      "type": "string",
      "enum": [
        "starter",
        "writer",
        "author",
        "storyteller"
      ],
      "default": "starter",
      "description": "B2C only: starter=40cr/$10.99, writer=120cr/$20.99, author=350cr/$38.99, storyteller=600cr/$40.99"
    }
  }
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools