Skip to content

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.

Tools: 1 delete, 1 irreversible, 3 write, 3 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".

      Matched text

      description: "...e same call with the authorized payment credential in _meta. This charges the buyer."

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "start_photo_book" says "start": a word for a change.

      What this check looks for
    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.

1 warn1 info
  • The server marks "start_photo_book" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "start_photo_book" says "start": a word for a change.

    What this check looks for
  • The description mentions "credential".

    Matched text

    description: "...e same call with the authorized payment credential in _meta. This charges the buyer."

    What this check looks for

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/mcp
claude mcp add --transport http photo-book https://fotofoto.app/mcp

Run 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.

.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.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for app.fotofoto/photo-book
[![anlyon.dev](https://anlyon.dev/badge/app.fotofoto/photo-book.svg)](https://anlyon.dev/servers/app.fotofoto/photo-book)

Source: MCP Registry. Synced Oct 27, 2026, 20:17 UTC.