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