Your assistant can make the book. You still approve it.
Your assistant turns your photos into a coloring book. You pick what it can do, and only you can pay.
Each book.
Pay per book, no subscription, about $15 shipped at the current promo.
Your assistant can remind you it’s book time, help pick photos, and put the pages together. You look at every page, check the price, then pay in your browser. You can disconnect it anytime from your account page.
for developers and assistants
How to connect, the tools, and the protocol.
Parents can skip this. Fetch the current skill (every tool and action) as markdown at https://tinytaleslab.com/mcp/skill.md. Same file: /SKILL.md. Linked from /llms.txt.
Client config
Claude, ChatGPT, and Cursor:
{
"mcpServers": {
"tinytales": {
"url": "https://tinytaleslab.com/mcp"
}
}
}
- Claude Desktop: put this JSON in
claude_desktop_config.json. macOS:~/Library/Application Support/Claude/. Windows:%APPDATA%\Claude\. Linux:~/.config/Claude/. Open it from Settings → Developer → Edit Config. - ChatGPT: Settings → Connectors. Add a connector and paste
https://tinytaleslab.com/mcp. - Cursor: put this JSON in
~/.cursor/mcp.json, or in.cursor/mcp.jsoninside a project. Cursor Settings → MCP writes that file.
The client runs OAuth with PKCE from that address. Dynamic client registration and Client ID Metadata Documents are both accepted.
If Muse’s connector setup asks for a Client ID, paste this: MmXDWeirFGYinSEZpguKpkHIlYygVOIW — then finish the email-code sign-in and approve the consent screen.
Endpoint
Send one JSON-RPC request per POST to https://tinytaleslab.com/mcp. Use Content-Type: application/json, MCP-Protocol-Version: 2026-07-28, and Mcp-Method set to the method name. Tool calls also send Mcp-Name. A call with no token comes back 401, with a WWW-Authenticate challenge that starts the sign-in.
tools/list returns a resource tool when the token holds any scope for it. Calling an action without that action’s scope returns 403 insufficient_scope. Longer how-to lives on this page; tool descriptions in the list stay short.
Hand-rolled clients must send a browser-like User-Agent. A library default such as Python urllib is rejected at the edge with HTTP 403 and no explanation.
Revision 2026-07-28 asks every request to include params._meta.io.modelcontextprotocol/protocolVersion and params._meta.io.modelcontextprotocol/clientCapabilities. TinyTales fills those from the MCP-Protocol-Version header when a client omits them, so a standard client still works.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tinytales_account",
"arguments": { "action": "get" },
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientCapabilities": {}
}
}
}
Discovery
- Protected resource:
https://tinytaleslab.com/.well-known/oauth-protected-resource/mcp - Discovery document:
https://tinytaleslab.com/api/auth/.well-known/openid-configuration - Registration:
https://tinytaleslab.com/api/auth/oauth2/register - Redirect URIs at registration:
webclients needhttpson public hosts (loopback is rejected).nativeclients may use RFC 8252 loopback redirects (http://127.0.0.1,http://localhost, orhttp://[::1]with a port) when the body setsapplication_typetonative. Omittingapplication_typedefaults toweb, which is why loopback-only DCR can fail with “web clients require https redirect URIs on non-loopback hosts.” - Authorize:
https://tinytaleslab.com/api/auth/oauth2/authorize - Token:
https://tinytaleslab.com/api/auth/oauth2/token - Scopes:
account:read,books:read,books:write,books:manage,orders:read,checkout:write,profile:write. Consent is per-scope checkboxes (reads on, writes off). Grant is the intersection of checked boxes and the scopes the client requested.
account:read— See your account, print pricing, and saved book notes. This does not charge a card.books:read— See your books, pages, images, and share links.books:write— Create and edit books, upload photos, and add pages.books:manage— Publish a book; delete a book, page, or photo; change or turn off a share link; or remove someone from a book.orders:read— See your print orders.checkout:write— Approve a preview and make a checkout or reprint link. Payment still happens in your browser.profile:write— Save kids’ names, how often you make a book, photo notes, and default copy count.
Recommended assistant flow
About three minutes for the pairing interview. Save answers with tinytales_profile action update. Assistants that skip this interview can still create books, approve a preview, and create a checkout link. Pay per book — there is no subscription. Do not brief remaining counts or limits.
Pairing interview
Ask only what the first book needs. Save as you go. Anything else waits until first checkout.
- Kids. Names, with ages optional. Keep kid data minimal. Save as
kids_json. - Cadence. Monthly, occasions, or on demand. Save as
cadence(monthly,occasions,on_demand). - Photo source. Attach-in-chat is the agent photo path: the human drops JPEGs into the conversation and the assistant calls
tinytales_images_write action upload. Savephoto_sourceasattach_in_chat. There is no Google Photos MCP tool. The account page at https://tinytaleslab.com/app/account can still connect Google Photos for the in-app picker only. - Taste check. Curate a first batch. The human corrects it. Save picked vs skipped with reasons (
photo_ref/decision/reason). - Buyer defaults. Ask quantity directly: one for the family or one per kid? Default is 1 (one shared copy). Save
default_quantityandshipping_address_jsonwithname,street1,city,postcode, andcountry_code. Optional:street2,state_code,phone_number.{ "name": "Ada Lovelace", "street1": "1 Book St", "city": "Brooklyn", "postcode": "11201", "country_code": "US" }
Monthly loop
Pay per book. No subscription.
- Remind them it’s book time. Load
tinytales_profile action get. - Bulk pick with attach-in-chat. The Google Photos picker stays in the book screen; there is no Google Photos MCP tool.
- The assistant curates with reasons. Write picked vs skipped to the profile.
- Build:
tinytales_books_write action create, upload withtinytales_images_write action upload,tinytales_books_write action process, polltinytales_books action progress. Set the cover withtinytales_pages action set_coverif needed. - Full preview of every rendered page. Signed preview URLs expire in 15 minutes: download immediately, never hotlink.
- Call
tinytales_account action pricingand state the total before checkout. Approve withtinytales_checkout action approveonce the human says the book and the amount look right. The approval response includes the price breakdown and total for the quantity. - Checkout link:
tinytales_checkout action createfor a first print, ortinytales_checkout action reprintfor a past completed book. The checkout-link response includes the same price breakdown and total. Hand them the Polar URL. The human pays in the browser. Stop.
Notes
Checkout is a Polar link the human pays in the browser. No MCP tool can charge a card or submit a Lulu job. Checkout-link responses echo quantity and shipping_address so you can show them again. Polar still collects the paid shipping address on the checkout page. When quantity is omitted, checkout uses defaultQuantity from the profile, or 1 if no profile exists. Multi-copy orders use the same pricing as the dashboard checkout.
A curation profile is optional. If generation is temporarily unavailable, wait and retry.
Tools and fields
tinytales_images_write action upload— rejected files returndata.codeundecodable,unsupported_type,dimensions,low_entropy,blank, ornoise(magic bytes, dimensions 32–16384, payload entropy ≥ 1.5 bits/byte, luma/lag-1 or JPEG density). Tell the person which photo failed and ask for another one.tinytales_images action preview— returnssigned_urlandexpires_at. Signed preview URLs expire in 15 minutes: download immediately, never hotlink. Do not embed those URLs in a page the human will open later.tinytales_account action pricing— optionalquantity(profile default, then 1). Returns the current unit price (promo when active), list price, additional-copy price,promoActive,shippingIncluded,currency, andtotalCentsfrom the same Polar config checkout uses. State the total before checkout.tinytales_checkout action approve— records a fingerprint of pages + cover. Required before an MCP checkout link. Changing pages or the cover invalidates approval. Book reads includepreviewApproved,previewStale,allPagesRendered. The response includes the price breakdown and total for the quantity so the human approves the book and the amount together.tinytales_pages action set_cover—page_id, optionalmove_to_front(default true). Book reads returncoverPageId,coverPageNumber, andpages[].isCover.tinytales_profile action get/tinytales_profile action update— optional notes. Photo decisions:preferences,entries_json, or onephoto_ref+decision(picked|skipped) +reason. Interview fields:kids_json(names; ages optional),cadence,photo_source(attach_in_chatonly). Buyer defaults:default_quantity(int, default 1 = one shared copy) andshipping_address_json(name,street1,city,postcode,country_code; optionalstreet2,state_code,phone_number).tinytales_checkout action create/tinytales_checkout action reprint— Polar payment link. Optionalquantityandshipping_address_json; omitted values fall back to the profile, then to quantity1and no shipping reference. The response includes the price breakdown and total. Reprint requires a prior paid (or later) order and the same preview gate.
Every tool, named for the job.
Each tool is a resource with an action param. Read tools need account:read, books:read, or orders:read. Writes need books:write, checkout:write, or profile:write. Publish, delete, and share revoke need books:manage (books:delete is an alias for existing grants). tools/list is filtered to the scopes you granted; actions outside those scopes return 403 insufficient_scope. Each page below has the full input, output, and the errors an agent should expect. Short tool descriptions; the recommended flow above is the long guidance. The same catalog is at https://tinytaleslab.com/mcp/skill.md.
Read
Accounttinytales_accountRead this account or Polar print pricing (does not charge a card).
Bookstinytales_booksList or load coloring books, generation progress, or a print shipping quote (does not charge a card).
Imagestinytales_imagesList coloring images, check generation status, or get a 15-minute preview URL (no image bytes).
Orderstinytales_ordersList print orders or load one order, including tracking when the printer has provided it.
Sharetinytales_shareRead a book’s invite link, list collaborators, or preview an invite without joining.
Write
Edit bookstinytales_books_writeCreate or update a draft coloring book, or queue generation.
Pagestinytales_pagesAdd a page, change captions, reorder, set the cover, or retry a failed page.
Upload a phototinytales_images_writeAdd one photo to a draft book and queue a coloring page.
Share writetinytales_share_writeCreate or return a collaborator invite link, or join a book from a token.
Checkouttinytales_checkoutApprove a preview, make a Polar checkout or reprint link, or join the waitlist if ordering is paused.
Curation profiletinytales_profileRead or save optional photo-curation notes and buyer defaults.
Last updated September 2026