foto foto
app.fotofoto/photo-bookfotofoto.appstreamable-httpv2.0.0Scanned
Turn your photos or a public iCloud Shared Album into a printed hardcover photo book.
8 tools: 1 can delete or cancel things, 1 do something that can't be undone, 3 change things and 3 only read.
- Reads private data · 0
- Reads text others write · 1
- Can send data out · 1
- 2 findings
Anlyon alternative
5 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
8 tools
Deletes or cancels 1Claude Code: deny
pay_bookBuy the exact quoted book using native MPP.1 finding
Why it is in this group
- The name "pay_book" says "pay": a word that usually means money moves, which cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...e same call with the authorized payment credential in _meta. This charges the buyer."
Description, as the server wrote it 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.
Annotations the server declares
- title: Pay for a photo book
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
Can't be undone 1Claude Code: ask
create_payment_quotePrepare a fixed payment quote for a printed book, including shipping, for MPP and, when listed, x402 (USDC on Base).Can send data outNo findings
Why it is in this group
- The name "create_payment_quote" says "create": a word for a change.
- The name "create_payment_quote" also says "payment": a word that usually means money moves, which cannot be taken back.
What it can reach
- outboundThe input takes a destination (input.shippingAddress.phone): what the tool writes goes there.
Description, as the server wrote it 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.
Annotations the server declares
- title: Prepare a payment quote
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Changes things 3Claude Code: ask
create_bookUse 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.Reads text others writeNo findings
Why it is in this group
- The name "create_book" says "create": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Make a photo book
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
create_checkoutPrepare an optional Stripe checkout link after email claim, using the bookToken.No findings
Why it is in this group
- The name "create_checkout" says "create": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Prepare checkout
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
start_photo_bookUse this when someone wants to make a printed photo book (Dutch: fotoboek) or photo album but has not shared any photos yet.1 finding
Why it is in this group
- The name "start_photo_book" says "start": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "start_photo_book" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "start_photo_book" says "start": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Pick photos for a photo book
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 3Show 3 read-only tools
compare_photo_book_pricesUse 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 fi…No findings
Why it is in this group
- The name "compare_photo_book_prices" says "compare": a word for reading.
Description, as the server wrote 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.
Annotations the server declares
- title: Compare photo book prices
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_bookUse this to show a book that was already made, or to get its price for one copy including shipping when country is supplied.No findings
Why it is in this group
- The name "get_book" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Show a photo book and its price
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_catalogList book types, shipping countries and photo requirements.No findings
Why it is in this group
- The name "get_catalog" says "get": a word for reading.
Description, as the server wrote it List book types, shipping countries and photo requirements. Free.
Annotations the server declares
- title: Get book types and shipping countries
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data.
- Reads private data0
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write1
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
- Warnstart_photo_book
The server marks "start_photo_book" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "start_photo_book" says "start": a word for a change.
- Infopay_book
The description mentions "credential".
What this check looks forMatched text
description: "...e same call with the authorized payment credential in _meta. This charges the buyer."
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 2.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http photo-book https://fotofoto.app/mcpclaude mcp add --transport http photo-book https://fotofoto.app/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__photo-book__get_catalog",
"mcp__photo-book__compare_photo_book_prices",
"mcp__photo-book__get_book"
],
"ask": [
"mcp__photo-book__start_photo_book",
"mcp__photo-book__create_book",
"mcp__photo-book__create_checkout",
"mcp__photo-book__create_payment_quote"
],
"deny": [
"mcp__photo-book__pay_book"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as photo-book. Review it before you use it.
Capability tags behind 2 rules
- mcp__photo-book__create_book untrusted-input
- mcp__photo-book__create_payment_quote outbound
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/app.fotofoto/photo-book/verify?hash=a69795f00070914005ea4a718b0a81988fbd2f9320ad555cc0ddb4a74b65d723" | jq -e '.changed == false'Pinned hash a69795f00070, from Oct 27, 2026, 20:17 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/app.fotofoto/photo-book/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/app.fotofoto/photo-book)Source: MCP Registry. Synced Oct 27, 2026, 20:17 UTC.