Make a free illustrated family book cover or a personalized comic from a family photo.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Check the status of a free family cover request. When ready, the response includes the cover image itself so it renders inline in the conversation, plus a shareUrl. Pass the ownerKey that start_family_cover returned to also get makeBookUrl for the full-book upsell (only the creator of the cover gets it).
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http joonoo https://joonoo.art/api/mcp
Check the status of a free family cover request. When ready, the response includes the cover image itself so it renders inline in the conversation, plus a shareUrl. Pass the ownerKey that start_family_cover returned to also get makeBookUrl for the full-book upsell (only the creator of the cover gets it).
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| ownerKey | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"pattern": "^[A-Za-z0-9]{12}$"
},
"ownerKey": {
"type": "string",
"maxLength": 200
}
},
"additionalProperties": false
}Start a personalized comic starring the user's family (1-4 heroes). Returns an uploadUrl for the user to upload a family photo (with every hero in it), a private ownerKey, and nextSteps. List heroes in the order they stand in the photo, from left to right. An 8-page comic is offered only in lower-income countries; elsewhere (or if unsure) the comic may be made at 16 pages. The preview is free; the full comic is a digital PDF bought with purchase_comic.
| Argument | Type | Description |
|---|---|---|
| title* | string | |
| heroes* | array | The heroes (the first is the main character). List heroes in the order they stand in the photo, from left to right. |
| language | string | Comic language code, one of: en, es, fr, de, it, pt, nl, sv, da, no, fi. Defaults to en. |
| subStyle* | string | |
| colorMode | string | |
| pageCount* | number | |
| storyIdea | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"heroes",
"subStyle",
"pageCount"
],
"properties": {
"title": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"heroes": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"age": {
"type": "integer",
"maximum": 99,
"minimum": 1
},
"name": {
"type": "string",
"maxLength": 40,
"minLength": 1
},
"gender": {
"enum": [
"girl",
"boy",
"woman",
"man",
"person"
],
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 4,
"minItems": 1,
"description": "The heroes (the first is the main character). List heroes in the order they stand in the photo, from left to right."
},
"language": {
"type": "string",
"description": "Comic language code, one of: en, es, fr, de, it, pt, nl, sv, da, no, fi. Defaults to en."
},
"subStyle": {
"enum": [
"shonen",
"shojo",
"chibi",
"kodomo",
"superhero",
"cartoon",
"european"
],
"type": "string"
},
"colorMode": {
"enum": [
"full-color",
"screentone"
],
"type": "string"
},
"pageCount": {
"enum": [
8,
16
],
"type": "number"
},
"storyIdea": {
"type": "string",
"maxLength": 500
}
},
"additionalProperties": false
}Check a comic started with create_comic_preview. Pass the slug and the private ownerKey. Returns status (awaiting_photo, creating_preview, preview_ready, drawing, ready or failed), a link to view the comic once it exists, and nextSteps.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| ownerKey* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"ownerKey"
],
"properties": {
"slug": {
"type": "string",
"pattern": "^[A-Za-z0-9]{12}$"
},
"ownerKey": {
"type": "string",
"maxLength": 200
}
},
"additionalProperties": false
}List the illustrated themes available for a free family cover (e.g. Superhero Family, Space Adventure). Use this to help the user pick a theme before calling start_family_cover.
No arguments.
{
"type": "object",
"properties": {}
}Buy the full personalized comic (digital PDF, emailed) once get_comic_status reports preview_ready. Pass slug, ownerKey and the email the PDF should go to. Returns a Stripe checkoutUrl for the user to pay in their own browser — this tool never sees card details. This tool buys the digital PDF only; printed copies can be ordered on the website.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| email* | string | |
| ownerKey* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"ownerKey",
"email"
],
"properties": {
"slug": {
"type": "string",
"pattern": "^[A-Za-z0-9]{12}$"
},
"email": {
"type": "string",
"format": "email"
},
"ownerKey": {
"type": "string",
"maxLength": 200
}
},
"additionalProperties": false
}Re-send a fresh 6-digit verification code for a pending free cover (the previous code expired or was never received). Use this whenever verify_cover_email reports an expired code.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"pattern": "^[A-Za-z0-9]{12}$"
}
},
"additionalProperties": false
}Start generating a free illustrated family cover. Validates the title, creates the cover request, and returns an uploadUrl (a photo-upload link to relay to the user) plus nextSteps guidance. A verification code is emailed to the user separately.
| Argument | Type | Description |
|---|---|---|
| email* | string | |
| title* | string | |
| themeId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"email",
"themeId",
"title"
],
"properties": {
"email": {
"type": "string",
"format": "email"
},
"title": {
"type": "string"
},
"themeId": {
"type": "string"
}
},
"additionalProperties": false
}Verify the 6-digit code the user received by email for their free cover request. On success this may kick off generation (if the photo has already been uploaded).
| Argument | Type | Description |
|---|---|---|
| code* | string | |
| slug* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"code"
],
"properties": {
"code": {
"type": "string",
"pattern": "^\\d{6}$"
},
"slug": {
"type": "string",
"pattern": "^[A-Za-z0-9]{12}$"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 10, 2026.