Turn your photos or a public iCloud Shared Album into a printed hardcover photo book.
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.
Use this when someone asks what a photo book (Dutch: fotoboek) costs, how foto foto's price compares with other services, or which services sell a layflat book, a linen cover or fine-art paper. Prices one book (binding, cover, paper, pages) at foto foto and at albelli, CEWE, Fotofabriek, Pixum, smartphoto, Kruidvat, Profotonet and Saal Digital, cheapest first, with the page each price was read from. List prices in euros with VAT, without shipping or discounts. For a book that was already made, get_book gives its price with shipping. Free, changes nothing.
smooth: the standard hardcover. linen: a linen hardcover.
Printed pages, an even number from 24 to 300, layflat up to 120. An odd count is rounded up and a count outside the range is moved inside it. Default 78.
glossy (the standard), matte or fine-art.
perfect: the standard binding, where the pages curve towards the spine. layflat: opens completely flat, up to 120 pages.
Use this when someone asks what a photo book (Dutch: fotoboek) costs, how foto foto's price compares with other services, or which services sell a layflat book, a linen cover or fine-art paper. Prices one book (binding, cover, paper, pages) at foto foto and at albelli, CEWE, Fotofabriek, Pixum, smartphoto, Kruidvat, Profotonet and Saal Digital, cheapest first, with the page each price was read from. List prices in euros with VAT, without shipping or discounts. For a book that was already made, get_book gives its price with shipping. Free, changes nothing.
| Argument | Type | Description |
|---|---|---|
| cover | string | smooth: the standard hardcover. linen: a linen hardcover. |
| pages | integer | Printed pages, an even number from 24 to 300, layflat up to 120. An odd count is rounded up and a count outside the range is moved inside it. Default 78. |
| paper | string | glossy (the standard), matte or fine-art. |
| binding | string | perfect: the standard binding, where the pages curve towards the spine. layflat: opens completely flat, up to 120 pages. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cover": {
"enum": [
"smooth",
"linen"
],
"type": "string",
"description": "smooth: the standard hardcover. linen: a linen hardcover."
},
"pages": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Printed pages, an even number from 24 to 300, layflat up to 120. An odd count is rounded up and a count outside the range is moved inside it. Default 78."
},
"paper": {
"enum": [
"glossy",
"matte",
"fine-art"
],
"type": "string",
"description": "glossy (the standard), matte or fine-art."
},
"binding": {
"enum": [
"perfect",
"layflat"
],
"type": "string",
"description": "perfect: the standard binding, where the pages curve towards the spine. layflat: opens completely flat, up to 120 pages."
}
}
}Use this when the person wants a photo book (Dutch: fotoboek) made from photos they attached, direct image links, or a public iCloud Shared Album link. Designs a draft book from the photos in the supplied order; nothing is ordered or charged. Photos the person attached in this chat go in attachments, which ChatGPT fills in; never pass local file paths. Otherwise provide direct CDN image URLs or uploadIds from POST /api/connector/photos in photos, or a public iCloud Shared Album link as sharedAlbumUrl (https://www.icloud.com/sharedalbum/#TOKEN). A book needs at least 24 pages to be printed, so a handful of photos gives a book that can be viewed but not yet ordered. Returns a preview and a private link to save the book by email. No account setup. Allow up to 180 seconds for imports.
| Argument | Type | Description |
|---|---|---|
| title* | string | |
| photos | array | Public https image URLs on a known CDN, or uploadIds. Not for chat attachments or local paths. |
| language | string | Two-letter code of the language the person writes in, such as nl or en. |
| productId | string | |
| attachments | array | Photos the person attached in this chat. ChatGPT supplies the file objects; never invent them. |
| idempotencyKey* | string | |
| sharedAlbumUrl |
Prepare an optional Stripe checkout link after email claim, using the bookToken. No charge occurs until the user confirms payment at Stripe. Collect the destination country first. Reuse idempotencyKey on retry.
| Argument | Type | Description |
|---|---|---|
| bookId* | string | |
| country* | string | |
| quantity | integer | |
| bookToken* | string | |
| idempotencyKey* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"bookId",
"bookToken",
"country",
"idempotencyKey"
],
"properties": {
"bookId": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$",
"maxLength": 100,
"minLength": 1
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2
},
"quantity": {
"type": "integer",
"default": 1,
"maximum": 10,
"minimum": 1
},
"bookToken": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$",
"maxLength": 100,
"minLength": 8
}
}
}Prepare a fixed payment quote for a printed book, including shipping, for MPP and, when listed, x402 (USDC on Base). Requires a complete delivery address. No charge yet. Ask the user to confirm before paying: pay_book for MPP, or POST paymentUrl with an x402 client for USDC. Quote expires after 15 minutes.
| Argument | Type | Description |
|---|---|---|
| bookId* | string | |
| country* | string | |
| quantity | integer | |
| bookToken* | string | |
| idempotencyKey* | string | |
| shippingAddress* | object |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"bookId",
"bookToken",
"country",
"idempotencyKey",
"shippingAddress"
],
"properties": {
"bookId": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$",
"maxLength": 100,
"minLength": 1
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2
},
"quantity": {
"type": "integer",
"default": 1,
"maximum": 10,
"minimum": 1
},
"bookToken": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$",
"maxLength": 100,
"minLength": 8
},
"shippingAddress": {
"type": "object",
"required": [
"firstName",
"lastName",
"addressLine1",
"city",
"postalCode",
"phone"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"phone": {
"type": "string",
"maxLength": 40,
"minLength": 5
},
"state": {
"type": "string",
"maxLength": 100
},
"lastName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"firstName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"postalCode": {
"type": "string",
"maxLength": 20,
"minLength": 1
},
"addressLine1": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"addressLine2": {
"type": "string",
"maxLength": 160
}
}
}
}
}Use this to show a book that was already made, or to get its price for one copy including shipping when country is supplied. Needs the book's private bookToken. Photos, cover, title, layout and materials are changed in the foto foto editor.
| Argument | Type | Description |
|---|---|---|
| bookId* | string | |
| country | string | |
| language | string | Two-letter code of the language the person writes in, such as nl or en. |
| bookToken* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"bookId",
"bookToken"
],
"properties": {
"bookId": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$",
"maxLength": 100,
"minLength": 1
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2
},
"language": {
"type": "string",
"maxLength": 35,
"description": "Two-letter code of the language the person writes in, such as nl or en."
},
"bookToken": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
}
}List book types, shipping countries and photo requirements. Free.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Buy the exact quoted book using native MPP. Only after the buyer approves its total and delivery address. Supply quoteId and bookToken. A payment challenge is returned through JSON-RPC; retry the same call with the authorized payment credential in _meta. This charges the buyer.
| Argument | Type | Description |
|---|---|---|
| quoteId* | string | |
| bookToken* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"quoteId",
"bookToken"
],
"properties": {
"quoteId": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"bookToken": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
}
}Use this when someone wants to make a printed photo book (Dutch: fotoboek) or photo album but has not shared any photos yet. Shows a card where they pick the photos, in order, right here. Nothing is ordered or charged.
| Argument | Type | Description |
|---|---|---|
| title | string | |
| language | string | Two-letter code of the language the person writes in, such as nl or en. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"language": {
"type": "string",
"maxLength": 35,
"description": "Two-letter code of the language the person writes in, such as nl or en."
}
}
}| string |
| Public iCloud Shared Album link, used instead of photos. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"idempotencyKey",
"title"
],
"properties": {
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"photos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 4096
},
"filename": {
"type": "string",
"default": "photo.jpg",
"maxLength": 200,
"minLength": 1
},
"uploadId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"maxItems": 100,
"minItems": 1,
"description": "Public https image URLs on a known CDN, or uploadIds. Not for chat attachments or local paths."
},
"language": {
"type": "string",
"maxLength": 35,
"description": "Two-letter code of the language the person writes in, such as nl or en."
},
"productId": {
"type": "string",
"maxLength": 100
},
"attachments": {
"type": "array",
"items": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1,
"description": "Photos the person attached in this chat. ChatGPT supplies the file objects; never invent them."
},
"idempotencyKey": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"sharedAlbumUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "Public iCloud Shared Album link, used instead of photos."
}
}
}