Atelier
app.atelierphotos/storeatelierphotos.appstreamable-httpv0.1.0Scanned
Search and license original photographs for personal or commercial use, as screen and print files.
10 tools: 1 can delete or cancel things, 4 change things and 5 only read.
- Reads private data · 0
- Reads text others write · 1
- Can send data out · 1
- 1 finding
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.
10 tools
Deletes or cancels 1Claude Code: deny
fulfil_imageDeliver an image to the signed-in buyer, spending the image's price in credits (price.credits in search_images and get_image — often 1, sometimes more) if they do not already own i…Can send data outNo findings
Why it is in this group
- The description's first verb is "deliver": a word for sending, and what is sent cannot be taken back.
- The server marks it destructive (destructiveHint: true).
What it can reach
- outboundThe description's first verb is "deliver": it sends or publishes something to other people.
Description, as the server wrote it Deliver an image to the signed-in buyer, spending the image's price in credits (price.credits in search_images and get_image — often 1, sometimes more) if they do not already own it. Credits buy the personal license only; the commercial license is bought with create_checkout, and this then delivers it. If they DO already own it this is free and always will be — use it freely for re-downloads, and for a fresh download link. The purchased image comes as two links, both as the photographer framed it, uncropped: download_url, 2560px WebP on the long side, which a phone or desktop fits to its own screen as a wallpaper; and print_url, the original file at full resolution (often 10–35 MB), for printing (null when unavailable). Give the person both; they expire at download_expires_at, a day out, and their account page (account_url in get_account) lists every image they own with fresh links. The picture returned inline is a 1200px copy to show them what they got. Pass full_image: true to have the full file inline as well — often 1–3 MB — only if you can accept a result that large and save it yourself. Confirm the price with the person before spending credits. An image bought wholly with free-trial credits is the screen file only: print_url is null, print_included false, and print_offer says what the print costs — the full price again, in paid credits. With the person's agreement, call again with buy_print: true to spend them (or create_checkout kind=one_off to pay by card). After a card checkout for this image it spends nothing: it answers payment_pending until the payment lands, then delivers. Requires sign-in.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
Changes things 4Claude Code: ask
create_checkoutReturn a payment link for the person to open in a browser: either a subscription plan, or a single image bought outright (only where price.card_available is true) — or that image's…Reads text others writeNo findings
Why it is in this group
- The name "create_checkout" 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 Return a payment link for the person to open in a browser: either a subscription plan, or a single image bought outright (only where price.card_available is true) — or that image's commercial license, with licence=commercial, where price.commercial is not null. The commercial license is sold only this way; Stripe's page asks the person to name the licensee. THE AGENT NEVER HANDLES CARD DETAILS and must not ask for any — hand the url over and let the person pay on the payment page. Nothing is granted until they finish. After a one-off, call fulfil_image with the same listing_id: once the payment has landed it delivers the image at no credit cost, and until then it answers payment_pending. After a subscription, get_account shows it. Every result lists the plans with their prices. Use fulfil_image instead when the buyer already has credits or already owns the image, and start_trial when they have none and have not tried the store. Refused when the buyer already owns the image or already has a subscription, so that nobody pays twice — except an image the free trial bought, which is the screen file only: a one-off for it buys the print file at the full price. Each new link cancels the previous one — any earlier subscription link, or an earlier link for the same image — so give the person only the latest.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
get_licenceThe full terms an image is sold under: what the buyer may and may not do with it.1 finding
Why it is in this group
- The name "get_licence" says "get": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "get_licence" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "get_licence" says "get": a word for reading.
Description, as the server wrote it The full terms an image is sold under: what the buyer may and may not do with it. Read this before recommending a purchase, and whenever the person asks what they are allowed to do with an image. "personal" (the default) is what credits and a card one-off buy; "commercial" is the business licence, sold by card where price.commercial is offered.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
start_trialGive the signed-in buyer 3 credits free, once per email address, ever, and never to an account that has paid here.No findings
Why it is in this group
- The name "start_trial" says "start": a word for a change.
Description, as the server wrote it Give the signed-in buyer 3 credits free, once per email address, ever, and never to an account that has paid here. Offer it when get_account says trial_available, someone wants an image, has no credits and has not tried the store before — AND the trial would buy that image: its price.credits is no more than 3 and price.trial_credits_accepted is true. Otherwise the trial is spent on nothing they wanted. Trial credits buy the screen file only — tell the person, so a print is not expected; the print can be bought afterwards at the full price. Requires sign-in.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
unlock_collectionOpen a PRIVATE collection to the signed-in buyer, using the address and access code its photographer gave them — for example a wedding or client gallery whose pictures are also for…No findings
Why it is in this group
- The name "unlock_collection" says "unlock": a word for a change.
Description, as the server wrote it Open a PRIVATE collection to the signed-in buyer, using the address and access code its photographer gave them — for example a wedding or client gallery whose pictures are also for sale. Afterwards search_images, get_image and list_collections include it for this buyer, and its images can be bought like any other. Use it only with a code the person gave you; never guess one. Requires sign-in.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 5Show 5 read-only tools
get_accountThe signed-in buyer: their credit balance, subscription status, how many images they already own, and whether a free trial is still available.No findings
Why it is in this group
- The name "get_account" says "get": a word for reading.
Description, as the server wrote it The signed-in buyer: their credit balance, subscription status, how many images they already own, and whether a free trial is still available. Call this before proposing a purchase, so you know what they can already afford. Requires sign-in.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
get_imageEverything known about a single listing: its description, keywords, price in credits and money, the license it sells under, and a preview.No findings
Why it is in this group
- The name "get_image" says "get": a word for reading.
Description, as the server wrote it Everything known about a single listing: its description, keywords, price in credits and money, the license it sells under, and a preview. Use after search_images when the person wants a closer look at one option.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
list_collectionsThe collections available in the store, with how many images are in each.No findings
Why it is in this group
- The name "list_collections" says "list": a word for reading.
Description, as the server wrote it The collections available in the store, with how many images are in each. Use for browsing when there is no particular search in mind; prefer search_images when the person has described what they want.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
list_entitlementsEverything the signed-in buyer has bought, newest first.No findings
Why it is in this group
- The name "list_entitlements" says "list": a word for reading.
Description, as the server wrote it Everything the signed-in buyer has bought, newest first. Re-downloading any of them with fulfil_image costs nothing. Pass include_previews: true whenever the person wants to see their library: small pictures (at most 12 per page) without a fulfil_image per image. Requires sign-in.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
search_imagesFind images for sale by description, mood, colour or subject — a plain description of the feeling or scene works as well as a keyword, so pass what the person actually said.No findings
Why it is in this group
- The name "search_images" says "search": a word for reading.
Description, as the server wrote it Find images for sale by description, mood, colour or subject — a plain description of the feeling or scene works as well as a keyword, so pass what the person actually said. Give target_width and target_height when the image is destined for a specific screen — results are then ranked by how close each frame is to that shape, and frames whose shape is badly wrong for it (a landscape frame for a phone) are left out. Images are sold as the photographer framed them, never cropped. Returns a preview of each image. Use get_image for one listing you already have the id of; use list_collections to browse rather than search.
Annotations the server declares
- readOnlyHint: 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.
- Warnget_licence
The server marks "get_licence" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "get_licence" says "get": a word for reading.
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 0.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http store https://store.atelierphotos.app/api/mcpclaude mcp add --transport http store https://store.atelierphotos.app/api/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__store__search_images",
"mcp__store__get_image",
"mcp__store__list_collections",
"mcp__store__get_account",
"mcp__store__list_entitlements"
],
"ask": [
"mcp__store__get_licence",
"mcp__store__unlock_collection",
"mcp__store__start_trial",
"mcp__store__create_checkout"
],
"deny": [
"mcp__store__fulfil_image"
]
}
}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 store. Review it before you use it.
Capability tags behind 2 rules
- mcp__store__create_checkout untrusted-input
- mcp__store__fulfil_image 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.atelierphotos/store/verify?hash=259e9338fbd2b405d9bf5731e600181a425a9835b211ffee1dc6a761606479d4" | jq -e '.changed == false'Pinned hash 259e9338fbd2, from Oct 23, 2026, 02:17 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/app.atelierphotos/store/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/app.atelierphotos/store)Source: MCP Registry. Synced Oct 23, 2026, 02:17 UTC.