Bedtime Book Studio
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bedtime Book StudioMake a bedtime book from this photo: Leo's box becomes a rocket."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bedtime Book Studio 📚✨
Turn a quick photo (or character description) and a bedtime story idea into an interactive, mobile-friendly landscape children's picture book in minutes.
1. Toss your agent a photo & a story idea... | 2. ...get an interactive bedtime book on your iPad! |
|
|
"Leo turns a cardboard moving box in the living room into a rocket ship landing on the moon." | Single-file |
Bedtime Book Studio is an open-source Agent Skill and Model Context Protocol (MCP) server that works with any AI coding/chat agent (Claude Code, Cursor, Antigravity, Windsurf, OpenClaw, etc.).
When your book finishes building, you get:
A Single-File HTML Picture Book (
books/<slug>.html): Every illustration (.webp), stylesheet, and interactive page-turn/flap script is bundled into one self-contained.htmlfile. You can double-click it to open in any browser, AirDrop/text/email it straight to your phone or iPad for bedtime, or drop that single file onto any static web host.Instant Local Hosting on Your Device: By default, Bedtime Book Studio automatically serves your books locally on your machine (
http://localhost:8765/<slug>/) and prints your device's local Wi-Fi URL (http://<your-lan-ip>:8765/<slug>/) so you can open the book immediately on a phone or tablet on the same Wi-Fi network.Optional Custom Self-Hosting: If you run your own web server or static site folder, you can optionally set
PUBLISH_WEB_ROOTandPUBLISH_BASE_URLin.envto auto-copy new books to your server.
✨ Two Interactive Book Modes
Lift-the-Flap Mode (
lift-the-flap— Default):Every story page shows the everyday Reality scene on a tactile, stitched cardboard flap.
Kids can tap the button, press
Space/F, or drag the flap upward with their finger to lift it in 3D and reveal the Imaginary world underneath!
Standard Picture-Book Mode (
standard):Classic single-illustration landscape spreads with big read-aloud typography, a
Aa Text Onlyfocus mode, and a celebratory "Hooray! The End" confetti finale.
Related MCP server: ASCII & SVG Art Studio
🚀 Step-by-Step Setup (2 Minutes)
Prerequisites
Python 3.10+
Any AI agent that supports MCP or Skills (and has access to an image generation tool/subagent).
Step 1: Clone the Repo & Run Setup
git clone https://github.com/danmaps/bedtime-book-studio.git
cd bedtime-book-studio
./setup.shWhat ./setup.sh does:
Creates a local Python virtual environment (
.venv/) and installsPillow+mcp.Launches the interactive onboarding wizard to set up your main character and defaults, saving everything locally in
.env(which is gitignored).Prints the exact copy-paste config snippet for your AI agent.
Tip: Want your AI agent to interview you in chat instead of using the terminal wizard? Run
./setup.sh --skip-onboard. The first time you ask your agent to make a book, it will detect that.envisn't configured yet and walk you through onboarding right in chat!
Step 2: Connect Your AI Agent
Choose MCP Server, Agent Skill, or both:
Option A: Connect via MCP (Claude Code, Cursor, Antigravity, Windsurf)
Add bedtime-book-studio to your agent's MCP config file (for example ~/.claude.json, .cursor/mcp.json, or ~/.gemini/config/mcp_config.json):
{
"mcpServers": {
"bedtime-book-studio": {
"command": "/absolute/path/to/bedtime-book-studio/.venv/bin/python",
"args": [
"/absolute/path/to/bedtime-book-studio/scripts/mcp_server.py"
]
}
}
}(Note: ./setup.sh prints this exact JSON block with your real absolute paths filled in!)
Option B: Connect via Agent Skill (SKILL.md)
Symlink the repo into your agent's skills folder:
mkdir -p ~/.agents/skills
ln -sfn "$(pwd)" ~/.agents/skills/bedtime-book-studioStep 3: Onboard Your Main Character (Photo and/or Text)
During onboarding (via ./setup.sh, python3 scripts/book_studio.py onboard, or in chat with your agent), you configure your default character once:
Name & Age: e.g.
Leo, age4Visual Reference (Photo, Text, or Both):
Photo(s): Provide path(s) to 1 or more photos of your main character. They are copied into
./local_profile/references/(gitignored) and automatically included as visual references in future books.Text Description & Outfit: Describe their hair, eyes, skin tone, and signature outfit (e.g., "4-year-old with curly brown hair, wearing a red striped T-shirt and denim overalls"). You can use text alone or combine it with reference photos for rock-solid consistency.
Supporting Cast & Favorite Toys (Optional): Pets, siblings, parents, or favorite real-world toys that frequently appear in bedtime stories.
Book Defaults:
lift-the-flapvs.standardmode, default page count (12), and default illustration style.
All of these settings live in your local .env file. You can re-run onboarding anytime:
./.venv/bin/python scripts/book_studio.py onboard📖 Making a Bedtime Book
Once connected, just ask your AI agent in plain English:
"Make a new lift-the-flap bedtime book! Here's a photo of our cardboard box (
/path/to/box.jpg). The story is about turning a cardboard moving box in the living room into a rocket ship landing on the moon."
What Happens Behind the Scenes:
create_book_project: Scaffoldsbooks/<slug>/and copies your default character photo(s) from.envplus any new prop photo(s).save_book_storyboard: Writesstoryboard.jsonandprompts.mdwith locked character continuity and matching Reality + Imaginary scene prompts for every page.ingest_generated_images: Your agent generates the illustrations, and Bedtime Book Studio center-crops every image to1280x960(4:3 landscape) and exports.png+.webp.build_and_publish_book:Generates the single-file standalone HTML book at
books/<slug>.html(andbooks/<slug>/<slug>.html).Generates the standard multi-file folder at
books/<slug>/index.html.Starts the local device web server so you can read immediately!
📱 Reading on Your Phone, Tablet, or Computer
Out of the box, you have three easy ways to read your finished book:
1. Open the Single-File HTML Book (books/<slug>.html)
Every book produces a completely self-contained
books/<slug>.htmlfile (~2–4 MB total, with all illustrations embedded).Double-click
books/<slug>.htmlon your computer to read in any browser.AirDrop, iMessage, WhatsApp, or email
books/<slug>.htmlto your phone or tablet and tap it to open full-screen in landscape mode!
2. Read Over Local Wi-Fi (Built-In Local Server)
When
publishruns, it automatically starts a lightweight local server on port8765(configurable viaLOCAL_SERVER_PORTin.env):On your computer:
http://localhost:8765/<slug>/On your phone/tablet (same Wi-Fi):
http://<your-computer-lan-ip>:8765/<slug>/
Need to restart the local server later? Run:
./.venv/bin/python scripts/book_studio.py serve
3. Optional Self-Hosting (Bring Your Own Web Server / Static Host)
Single-File Upload: Because
books/<slug>.htmlhas zero external dependencies, you can drag-and-drop it onto Netlify Drop, Cloudflare Pages, GitHub Pages, S3, or any static host.Automated Static Folder Copy: If you run a local or remote web server directory (Nginx, Caddy, Tailscale Serve, etc.), set these optional variables in
.env:PUBLISH_WEB_ROOT="/var/www/my-site/books" PUBLISH_BASE_URL="https://example.com/books"Whenever a book is published, Bedtime Book Studio will automatically copy the built book into
<PUBLISH_WEB_ROOT>/<slug>and return<PUBLISH_BASE_URL>/<slug>.
🛠️ CLI & MCP Tool Reference
MCP Tool | CLI Command | Description |
|
| Check if |
|
| Save character photo(s), text description, outfit, and defaults to |
|
| View the active character and studio configuration loaded from |
|
| List all generated books, single-file HTML paths, and local URLs |
|
| Scaffold a new book project and copy character/prop reference photos |
|
| Validate and save |
|
| Center-crop generated images to 4:3 ( |
|
| Build single-file |
(CLI helper) |
| Start or check the local device HTTP server for |
🔒 Privacy by Design
.env,local_profile/, andbooks/are all gitignored in.gitignore.Your personal family photos, character names, and generated books never leave your device unless you choose to share them.
📄 License
MIT License — see LICENSE.
Available Tools
8 toolsbuild_and_publish_bookA
Step 4: Compile the book into:
A self-contained single-file HTML book (
<slug>.htmlwith all CSS, JS, and images embedded) that can be opened directly in any browser or AirDropped/shared to a phone or tablet.A multi-file web reader (
index.html,styles.css,script.js,assets/).By default (
serve_local=True), hosts the book immediately on the local device athttp://localhost:<port>/<slug>/andhttp://<lan-ip>:<port>/<slug>/for phones on Wi-Fi.Optionally copies to
PUBLISH_WEB_ROOTif the user configured custom self-hosting in.env.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | ||
| slug | Yes | ||
| serve_local | No | ||
| deploy_static | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: it writes files to disk, embeds assets, starts a local HTTP server on a port reachable via LAN IP, and optionally copies to PUBLISH_WEB_ROOT. It omits whether an existing build is overwritten and whether serving blocks or runs in the background, so it stops short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb and organized as a numbered list of outputs, so an agent can scan the deliverables quickly. Slightly verbose with parenthetical detail, but every line conveys a concrete behavior rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a build-and-publish tool the description covers the artifacts, hosting endpoints, and optional deploy path well; the only real gap is the unexplained deploy_static parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains slug (via <slug> filenames/paths), port (localhost:<port> and LAN-IP URLs), and serve_local (default true, hosts immediately), but the fourth parameter, deploy_static, is never mentioned anywhere. Partial compensation for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (compile the book) and enumerates the concrete artifacts produced: a single-file HTML book, a multi-file web reader, local hosting, and optional publishing. The 'Step 4' framing places it in the pipeline, though it never names or contrasts with any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Step 4' prefix implies it comes after project creation, storyboard saving, and image ingestion, and the serve_local default hints at typical usage. But there is no explicit when-to-use/when-not statement and no mention of the sibling alternatives it should be chosen over.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_studioC
Save or update user onboarding settings in the local gitignored .env file.
Copies any main_character_photos into local_profile/references/ so every future
book automatically has access to the main character's reference photo(s) and/or
text description.
| Name | Required | Description | Default |
|---|---|---|---|
| recurring_props | No | ||
| books_output_dir | No | ||
| publish_base_url | No | ||
| publish_web_root | No | ||
| default_art_style | No | ||
| default_book_mode | No | ||
| local_server_port | No | ||
| default_page_count | No | ||
| main_character_age | No | ||
| main_character_name | No | ||
| main_character_outfit | No | ||
| main_character_photos | No | ||
| supporting_characters | No | ||
| main_character_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose meaningful behavior: writes to a gitignored `.env` file and copies `main_character_photos` into `local_profile/references/`. It does not say whether omitted fields are preserved or overwritten, which is critical for a 14-parameter mutation where every field is optional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and persistence target, then adds the photo-copy side effect. Three compact sentences with no filler, though the second sentence is slightly convoluted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, but for a 14-parameter configuration tool with zero annotation and zero schema-description coverage, the description omits the semantics of the vast majority of settings and their null-vs-omit behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 14 parameters, and the description mentions only `main_character_photos`, leaving 13 parameters (output dirs, publish URLs, art style, book mode, port, page count, character fields) undocumented. The description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Save or update user onboarding settings', which is clearly distinguishable from the read-side sibling get_onboarding_status. It does not, however, name any sibling explicitly to distinguish itself, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to call this versus get_onboarding_status or get_studio_profile, and no prerequisites. The implied use (configure the studio before generating books) must be inferred from the mention of 'future book'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_book_projectB
Step 1: Initialize a new bedtime picture-book project workspace.
Any omitted fields (mode, character_name, character_description, page_count)
automatically inherit the user's defaults from .env, and default character reference
photos are automatically copied alongside any book-specific reference_images.
| Name | Required | Description | Default |
|---|---|---|---|
| idea | Yes | ||
| mode | No | ||
| slug | Yes | ||
| title | Yes | ||
| page_count | No | ||
| character_name | No | ||
| reference_images | No | ||
| character_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses inheritance behavior from .env and automatic copying of reference photos, which is valuable behavioral context. But it omits critical details like permissions needed, what gets created (files, directories), whether it's idempotent, and what errors might occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: a clear purpose statement and a detailed note on defaults and reference images. It is front-loaded with the main action. Slightly dense but no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters with zero schema descriptions, no annotations, and an output schema present, the description provides some context but is insufficiently complete. It explains defaults for some parameters but does not cover required parameters or overall expected outcomes (though output schema exists).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that omitted mode, character_name, character_description, and page_count inherit defaults, and that reference_images are supplemented with default photos. This adds meaning for 5 of 8 parameters but leaves slug, title, and idea undefined in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Initialize') and resource ('new bedtime picture-book project workspace'), making the purpose clear. It does not explicitly distinguish from siblings like list_existing_books or configure_studio, but the verb+resource combo is specific enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied as the first step in a workflow via 'Step 1', which gives some context. However, there is no explicit when/when-not guidance or mention of alternatives, leaving the agent to infer when to use this vs other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_onboarding_statusA
Call this FIRST when starting a session.
Checks whether the user has completed first-time onboarding in .env (main character
name, reference photo(s) and/or text appearance description, outfit, art style, and
default book mode). If is_onboarded is false, follow agent_onboarding_instructions
to ask the user for their main character details and call configure_studio.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the tool reads `.env`, returns an `is_onboarded` flag and `agent_onboarding_instructions`, and what onboarding fields are checked. However, it does not explicitly state that the operation is read-only or has no side effects, which is a minor gap for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences, front-loaded with the most important instruction ('Call this FIRST'). Every sentence adds necessary information: the check, the fields examined, and the conditional follow-up. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description need not explain return values. It still provides the conditional logic for acting on the result and names the relevant sibling tool, making it complete for an agent to invoke and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so per the rubric the baseline is 4. There are no parameter semantics to clarify, and the description appropriately focuses on behavior rather than nonexistent inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Checks whether the user has completed first-time onboarding in `.env`') and front-loads the invocation priority ('Call this FIRST when starting a session'). It clearly distinguishes itself from the conditional next-step sibling `configure_studio`, so an agent can tell what this tool is for without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('Call this FIRST when starting a session') and provides a conditional alternative: if `is_onboarded` is false, follow `agent_onboarding_instructions` and call `configure_studio`. This gives the agent a clear decision path and names the alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_studio_profileB
Return the active studio profile from .env, including main character details
(name, age, text description, outfit, reference photo paths), supporting cast,
default art style, default book mode, and local hosting paths.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the source ('from `.env`') and the 'active' selection semantics, which is real context beyond the schema. However, it says nothing about failure modes (no profile configured), whether the file is read fresh each call, or any side effects of the read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb and source first, followed by the field inventory. The field enumeration is somewhat long but each item is meaningful since it defines the profile's scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Zero-parameter read with an output schema, so return shape needs no explanation and the description is sufficient to invoke correctly. The only real gap is the unaddressed case where no active profile exists in `.env`.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return the active studio profile') and enumerates exactly what the payload contains (character details, cast, art style, book mode, paths). It reads as a read-side counterpart to configure_studio, but it never names that sibling or any other, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no alternatives are named. An agent must infer that this is the read used before configure_studio writes, or before project creation, entirely from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_generated_imagesA
Step 3: After generating illustrations (via subagents or image tools), pass a dictionary
mapping asset keys (e.g. {"cover": "/path/to/img.jpg", "page-01-reality": "..."})
to normalize, center-crop to 1280x960 (4:3 landscape), and save both .png and .webp.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| image_map | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load, and it does disclose the meaningful behavioral trait: images are center-cropped (a lossy operation) to a fixed 1280x960 4:3 frame and written out in two formats. It does not say where files land, whether existing files are overwritten, or how invalid keys are handled, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the step context and the input format, then lists the transformations. The inline example removes ambiguity at no real cost in length; nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers input shape and the processing pipeline adequately for a 2-parameter write tool. Remaining gaps around output file location and overwrite/missing-key behavior are minor but real.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema only shows an untyped string map, so the description must compensate — and it does, defining image_map as asset-key-to-path with a concrete example including keys like "cover" and "page-01-reality". The required `slug` parameter is never explained, which keeps this from being a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource (ingest generated images) and goes further to state exactly what happens to them: normalize, center-crop to 1280x960, and save as .png and .webp. No sibling tool in the list deals with image ingestion, so there is no ambiguity to resolve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Step 3: After generating illustrations (via subagents or image tools)" gives clear sequencing and prerequisite context, telling the agent this runs downstream of image generation. It stops short of naming explicit exclusions or alternatives, so it is not a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_existing_booksA
List all bedtime picture-book projects in BOOKS_OUTPUT_DIR, their single-file HTML path, and local URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but this is a zero-parameter read operation whose safety profile is self-evident from 'List'. It discloses the directory scope and the returned fields, yet says nothing about empty results, whether the directory is created if absent, or whether listing is paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler: verb, scope, and returned payload all land in one pass. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no elaboration, and with no parameters and no annotations there is little else an agent needs. The only gap is the absence of any hint about when in the workflow to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to document; the baseline for a parameterless tool is 4. The mention of BOOKS_OUTPUT_DIR is environmental context rather than a parameter, which is helpful but not required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), a specific resource ('bedtime picture-book projects'), and the exact scope ('in `BOOKS_OUTPUT_DIR`'), plus what each entry contains (HTML path, local URLs). No sibling tool in the list performs a discovery/list function, so there is no ambiguity to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — an agent can infer this is the discovery step before create_book_project or build_and_publish_book, but the description never says when to call it or that it should precede project creation. No exclusions or alternatives are given, and none exist among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_book_storyboardB
Step 2: Save the complete storyboard.json for a book and generate prompts.md
plus the exact list of required image keys (cover, page-01-reality, page-01-imaginary, ...).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| storyboard | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose a non-obvious side effect: saving the storyboard also generates prompts.md and the exact list of required image keys, which tells the agent this is not a plain write. It does not cover overwrite/merge behavior, validation failures, or permissions, which is a meaningful gap for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the step marker and the primary action, with the side effects appended. No filler text, though the backtick-quoted fragments make it read like a changelog line rather than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return value (the generated key list) need not be explained. The remaining gap is the required nested storyboard object, which is undocumented in both schema and description; for a two-parameter mutation tool with no annotations, that leaves the agent under-informed about what to supply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, and the description does not compensate. It hints that the book is identified by a slug and that the storyboard is a JSON file, but gives no indication of the storyboard object's required structure (nested, additionalProperties true) or any slug format constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Save') plus the resource ('complete storyboard.json for a book') and the derived artifacts it produces (prompts.md, required image keys). An agent can tell this is the storyboard-persistence step, though it does not name or differentiate itself from any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Step 2' prefix implies a position in a workflow (after onboarding/project creation, before image ingestion and publishing), which is useful ordering guidance. However, it names no alternative and states no explicit when/when-not condition, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
build_and_publish_book - First observed
configure_studio - First observed
create_book_project - First observed
get_onboarding_status - First observed
get_studio_profile - First observed
ingest_generated_images - First observed
list_existing_books - First observed
save_book_storyboard
TDQS
Scored across 8 tools
Most tools have clearly distinct roles, and the four pipeline steps (create_book_project, save_book_storyboard, ingest_generated_images, build_and_publish_book) are explicitly numbered, which strongly disambiguates them. The main overlap risk is between get_onboarding_status and get_studio_profile, which both read settings/profile data, though the descriptions distinguish the onboarding-check versus full-profile purposes.
All eight tools follow a consistent snake_case verb_noun pattern (get_onboarding_status, list_existing_books, configure_studio, create_book_project, save_book_storyboard, etc.). The only mild deviation is the compound verb in build_and_publish_book, but it still fits the convention.
Eight tools is well-scoped for a book-production pipeline spanning onboarding, project setup, storyboarding, image ingestion, and publishing. Each tool maps to a distinct stage and none appears redundant or filler.
The surface covers a full create-to-publish lifecycle including onboarding configuration and listing existing books. Minor gaps exist — no explicit tool for editing/regenerating an existing storyboard or deleting/archiving a book — but the core end-to-end workflow is intact.
Maintenance
Related MCP Connectors
AI story generator — create illustrated storybooks, AI songs, and short AI video films
AI story generator — create illustrated storybooks, AI songs, and short AI video films
Create and read private AI-illustrated storybooks with your PictureBooks account and credits.
Create personalized stories, gifts, memoirs, tributes, classroom books, and printed keepsakes.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables local-first book writing with AI assistance, allowing users to scaffold, create, search, validate, and enrich a book repository through natural language using OpenCode or Claude.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI to create ASCII and SVG art through a character canvas, with tools for drawing, previewing, and exporting to multiple formats, as well as composing stop-motion animations with optional voice-over.MIT

livefolioofficial
AlicenseNot gradedqualityBmaintenanceEnables AI agents to create, version, review, publish, and manage interactive HTML folios locally, with support for feedback collection and sharing via tunnels.2AGPL 3.0- AlicenseNot gradedqualityBmaintenanceEnables Alexa+ and other voice agents to tell personalized, feelings-aware bedtime stories using a child's saved hero profile, with interactive choices, timed wind-down stories, and optional MP3 narration.MIT

