Koskamo

Atelier Photos MCP

An official MCP server for Atelier Photos that allows AI assistants to search, view, and license original photographs made by real photographers. It supports finding images by subject or feeling, displaying photographer details, and facilitating purchases via checkout or subscription credits for personal or commercial use.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Atelier Photos MCP logo, by Atelier PhotosVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Atelier Photos
You need:A new account can claim 3 credits free, with no card.Buying needs an account; the person signs in with a link sent to their email.A one-off purchase is paid on a checkout page the person opens themselves.
MCP endpoint (Streamable HTTP)
https://store.atelierphotos.app/api/mcp
Vendor documentation

What you can do with it

  • Search for photographs by subject, color, or feeling
  • View photographer details and gallery information
  • Purchase personal licenses for screen or print files
  • Buy commercial licenses for business use

Source and maintenance

Vendor evidenceRegistry 0.1.0

Protocol and capabilities

Server
atelier-store 0.1.0
MCP protocol
2025-06-18
Tools
10 advertised
Resources
4 advertised
Resource templates
0 advertised
Prompts
3 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

A store of original photographs sold under a personal-use license, and some under a commercial one too. Searching needs no account; the first account tool (get_account and the others that spend or download) asks the person to sign in by email, so tell them before you call it. Search with search_images, passing the destination screen size when there is one, then show the person the previews and let them choose. A host that supports MCP Apps draws the pictures for the person; others show them nothing, so there give them each result's preview_url as a link to open. Buying spends the image's price in credits (price.credits — not always 1): check get_account first, and confirm with the person before calling fulfil_image. The free trial is 3 credits, once per person and only before they have paid for anything (get_account says trial_available): offer start_trial only when it would buy the image they chose — price.credits no more than that, and price.trial_credits_accepted true. An image bought with trial credits comes as the screen file only; its print file can be bought afterwards at the full price (fulfil_image with buy_print: true, in paid credits, or by card). Anything the buyer already owns (owned: true in results once signed in) re-downloads free. For more credits, or to pay for one image by card where price.card_available is true, create_checkout returns a link for them to open — never ask anyone for card details. After they pay for an image by card, fulfil_image delivers it without spending credits. The personal license does not cover business use. When the person wants an image for a business, a client, marketing, advertising or anything sold, they need the commercial license: offered only where price.commercial is not null (search_images with licence: "commercial" finds those), bought by card with create_checkout kind=one_off licence=commercial, and never with credits, the trial or a subscription. Ask what the image is for when it is unclear, and read get_licence code=commercial before recommending it. If the person has a private gallery's link and access code from a photographer, unlock_collection opens it to their account. Every image names its photographer; the license asks for credit where practical, so pass the name on with the file. A bought image comes as a screen file and a full-resolution print file; the person can download them again at any time from the account_url that get_account returns. There, too, they cancel or change a subscription, disconnect you, or delete their data; you cannot do those for them.

Tools

10 advertised

search_images — Search the image catalogue
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_images input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 12,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "description": "Free text: subject, mood, colour, setting."
    },
    "cursor": {
      "type": "string",
      "description": "next_cursor from the previous page, unchanged, with the same query and filters. Cannot be combined with target_width/target_height."
    },
    "licence": {
      "enum": [
        "personal",
        "commercial"
      ],
      "type": "string",
      "description": "\"commercial\" for only the images that can be licensed for business use. Every image has the personal license."
    },
    "orientation": {
      "enum": [
        "landscape",
        "portrait",
        "square"
      ],
      "type": "string"
    },
    "target_width": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Destination width in pixels, e.g. 1290 for an iPhone. Give both or neither."
    },
    "collection_id": {
      "type": "string",
      "description": "Restrict to one collection from list_collections."
    },
    "target_height": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Destination height in pixels, e.g. 2796. Give both or neither."
    },
    "include_previews": {
      "type": "boolean",
      "description": "Set false for metadata only, which is much cheaper."
    }
  }
}
search_images output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "results",
    "next_cursor"
  ],
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "listing_id",
          "headline",
          "title",
          "description",
          "keywords",
          "orientation",
          "aspect_ratio",
          "pixels",
          "collection",
          "photographer",
          "preview_url",
          "price",
          "licence"
        ],
        "properties": {
          "match": {
            "enum": [
              "keyword",
              "semantic",
              "semantic_weak"
            ],
            "type": "string"
          },
          "owned": {
            "type": "boolean"
          },
          "price": {
            "type": "object",
            "required": [
              "credits",
              "cents",
              "currency",
              "trial_credits_accepted",
              "card_available",
              "commercial"
            ],
            "properties": {
              "cents": {
                "type": "number"
              },
              "credits": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "commercial": {
                "anyOf": [
                  {
                    "type": "object",
                    "required": [
                      "cents",
                      "currency"
                    ],
                    "properties": {
                      "cents": {
                        "type": "number"
                      },
                      "currency": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "card_available": {
                "type": "boolean"
              },
              "trial_credits_accepted": {
                "type": "boolean"
              }
            },
            "additionalProperties": false
          },
          "title": {
            "type": "string"
          },
          "pixels": {
            "anyOf": [
              {
                "type": "object",
                "required": [
                  "width",
                  "height"
                ],
                "properties": {
                  "width": {
                    "type": "number"
                  },
                  "height": {
                    "type": "number"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "licence": {
            "type": "object",
            "required": [
              "code",
              "version"
            ],
            "properties": {
              "code": {
                "type": "string"
              },
              "version": {
                "type": "number"
              }
            },
            "additionalProperties": false
          },
          "headline": {
            "type": [
              "string",
              "null"
            ]
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "shape_fit": {
            "type": "object",
            "required": [
              "score",
              "target"
            ],
            "properties": {
              "score": {
                "type": "number"
              },
              "target": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "collection": {
            "type": "object",
            "required": [
              "id",
              "title"
            ],
            "properties": {
              "id": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "additionalProperties": false
          },
          "listing_id": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "orientation": {
            "type": "string"
          },
          "preview_url": {
            "type": [
              "string",
              "null"
            ]
          },
          "aspect_ratio": {
            "type": "string"
          },
          "photographer": {
            "type": "string"
          },
          "owned_licences": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      }
    },
    "next_cursor": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
search_images annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_image — Get one image
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_image input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "listing_id"
  ],
  "properties": {
    "listing_id": {
      "type": "string"
    }
  }
}
get_image output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "listing_id",
    "headline",
    "title",
    "description",
    "keywords",
    "orientation",
    "aspect_ratio",
    "pixels",
    "collection",
    "photographer",
    "preview_url",
    "price",
    "licence",
    "licence_summary"
  ],
  "properties": {
    "match": {
      "enum": [
        "keyword",
        "semantic",
        "semantic_weak"
      ],
      "type": "string"
    },
    "owned": {
      "type": "boolean"
    },
    "price": {
      "type": "object",
      "required": [
        "credits",
        "cents",
        "currency",
        "trial_credits_accepted",
        "card_available",
        "commercial"
      ],
      "properties": {
        "cents": {
          "type": "number"
        },
        "credits": {
          "type": "number"
        },
        "currency": {
          "type": "string"
        },
        "commercial": {
          "anyOf": [
            {
              "type": "object",
              "required": [
                "cents",
                "currency"
              ],
              "properties": {
                "cents": {
                  "type": "number"
                },
                "currency": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "card_available": {
          "type": "boolean"
        },
        "trial_credits_accepted": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "title": {
      "type": "string"
    },
    "pixels": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "width",
            "height"
          ],
          "properties": {
            "width": {
              "type": "number"
            },
            "height": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "licence": {
      "type": "object",
      "required": [
        "code",
        "version"
      ],
      "properties": {
        "code": {
          "type": "string"
        },
        "version": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "headline": {
      "type": [
        "string",
        "null"
      ]
    },
    "keywords": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "shape_fit": {
      "type": "object",
      "required": [
        "score",
        "target"
      ],
      "properties": {
        "score": {
          "type": "number"
        },
        "target": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "collection": {
      "type": "object",
      "required": [
        "id",
        "title"
      ],
      "properties": {
        "id": {
          "type": [
            "string",
            "null"
          ]
        },
        "title": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": false
    },
    "listing_id": {
      "type": "string"
    },
    "description": {
      "type": [
        "string",
        "null"
      ]
    },
    "orientation": {
      "type": "string"
    },
    "preview_url": {
      "type": [
        "string",
        "null"
      ]
    },
    "aspect_ratio": {
      "type": "string"
    },
    "photographer": {
      "type": "string"
    },
    "owned_licences": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "licence_summary": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "code",
            "version",
            "name",
            "summary",
            "permitted",
            "prohibited",
            "effective_from"
          ],
          "properties": {
            "code": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "summary": {
              "type": "string"
            },
            "version": {
              "type": "number"
            },
            "permitted": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "prohibited": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "effective_from": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": false
}
get_image annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
list_collections — List collections
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_collections input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
list_collections output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "collections"
  ],
  "properties": {
    "collections": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "title",
          "description",
          "listing_count"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "listing_count": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
list_collections annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_licence — Read the license
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_licence input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "code": {
      "type": "string",
      "description": "One of: personal, commercial. Omit for personal."
    },
    "version": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Omit for the terms currently on offer. Pass a version to read what was sold earlier."
    }
  }
}
get_licence output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "code",
    "version",
    "name",
    "summary",
    "permitted",
    "prohibited",
    "effective_from",
    "terms"
  ],
  "properties": {
    "code": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "terms": {
      "type": "string"
    },
    "summary": {
      "type": "string"
    },
    "version": {
      "type": "number"
    },
    "permitted": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "prohibited": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "effective_from": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
get_licence annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
unlock_collection — Unlock a private collection
Advertised by the server during the last successful anonymous check.

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.

unlock_collection input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "gallery",
    "access_code"
  ],
  "properties": {
    "gallery": {
      "type": "string",
      "description": "The gallery's address as the person has it, e.g. https://example.com/jane/smith-wedding, or \"jane/smith-wedding\"."
    },
    "access_code": {
      "type": "string",
      "minLength": 1,
      "description": "The access code the photographer gave the person."
    }
  }
}
unlock_collection output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "collection_id",
    "title",
    "listing_count"
  ],
  "properties": {
    "title": {
      "type": "string"
    },
    "collection_id": {
      "type": "string"
    },
    "listing_count": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
unlock_collection annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_account — Check the signed-in account
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_account input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
get_account output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "email",
    "credits",
    "trial_credits",
    "paid_credits",
    "subscription",
    "entitlement_count",
    "trial_available",
    "licence",
    "account_url"
  ],
  "properties": {
    "email": {
      "type": "string"
    },
    "credits": {
      "type": "number"
    },
    "licence": {
      "type": "object",
      "required": [
        "code",
        "version"
      ],
      "properties": {
        "code": {
          "type": "string"
        },
        "version": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "account_url": {
      "type": "string"
    },
    "paid_credits": {
      "type": "number"
    },
    "subscription": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "plan_code",
            "status",
            "credits_per_period",
            "current_period_end",
            "cancel_at_period_end"
          ],
          "properties": {
            "status": {
              "type": "string"
            },
            "plan_code": {
              "type": "string"
            },
            "credits_per_period": {
              "type": "number"
            },
            "current_period_end": {
              "type": [
                "number",
                "null"
              ]
            },
            "cancel_at_period_end": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "trial_credits": {
      "type": "number"
    },
    "trial_available": {
      "type": "boolean"
    },
    "entitlement_count": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
get_account annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
start_trial — Start the free trial
Advertised by the server during the last successful anonymous check.

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.

start_trial input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
start_trial output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "granted",
    "credits"
  ],
  "properties": {
    "credits": {
      "type": "number"
    },
    "granted": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
start_trial annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_checkout — Start a purchase the person completes themselves
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_checkout input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind"
  ],
  "properties": {
    "kind": {
      "enum": [
        "subscription",
        "one_off"
      ],
      "type": "string"
    },
    "licence": {
      "enum": [
        "personal",
        "commercial"
      ],
      "type": "string",
      "description": "For kind=one_off. \"commercial\" buys the business licence, by card only; omit for personal."
    },
    "plan_code": {
      "type": "string",
      "description": "For kind=subscription. Call with kind=subscription and no plan_code to list the plans and their prices."
    },
    "listing_id": {
      "type": "string",
      "description": "For kind=one_off: the image to buy outright."
    }
  }
}
create_checkout output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "checkout_url",
    "kind",
    "order_id",
    "listing_id",
    "expires_at",
    "plans"
  ],
  "properties": {
    "kind": {
      "type": "string"
    },
    "plans": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "code",
          "name",
          "description",
          "credits_per_period",
          "price"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "price": {
            "anyOf": [
              {
                "type": "object",
                "required": [
                  "cents",
                  "currency",
                  "interval",
                  "interval_count"
                ],
                "properties": {
                  "cents": {
                    "type": "number"
                  },
                  "currency": {
                    "type": "string"
                  },
                  "interval": {
                    "type": "string"
                  },
                  "interval_count": {
                    "type": "number"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "credits_per_period": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "order_id": {
      "type": [
        "string",
        "null"
      ]
    },
    "expires_at": {
      "type": [
        "number",
        "null"
      ]
    },
    "listing_id": {
      "type": [
        "string",
        "null"
      ]
    },
    "checkout_url": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
create_checkout annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
fulfil_image — Get an image the buyer is entitled to
Advertised by the server during the last successful anonymous check.
Advertised destructive

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.

fulfil_image input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "listing_id"
  ],
  "properties": {
    "buy_print": {
      "type": "boolean",
      "description": "For an image the free trial bought (print_included false): buy its print file, spending print_offer.credits of PAID credit. Only with the person's agreement."
    },
    "full_image": {
      "type": "boolean",
      "description": "Also return the full 2560px file inline. Large; see the description."
    },
    "listing_id": {
      "type": "string"
    },
    "abandon_checkout": {
      "type": "boolean",
      "description": "Only after payment_pending, and only when the person has said they will not pay by card: cancels the open payment link and spends credits instead."
    }
  }
}
fulfil_image output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "listing_id",
    "already_owned",
    "credits_spent",
    "licence",
    "credits_remaining",
    "source_pixels",
    "download_url",
    "print_url",
    "print_included",
    "print_offer",
    "download_expires_at",
    "file_name",
    "inline",
    "paid_by",
    "photographer"
  ],
  "properties": {
    "inline": {
      "enum": [
        "preview",
        "full",
        "none"
      ],
      "type": "string"
    },
    "licence": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "code",
            "version",
            "expires_at"
          ],
          "properties": {
            "code": {
              "type": "string"
            },
            "version": {
              "type": "number"
            },
            "expires_at": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "paid_by": {
      "anyOf": [
        {
          "enum": [
            "credit",
            "trial",
            "purchase",
            "comp"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "file_name": {
      "type": "string"
    },
    "print_url": {
      "type": [
        "string",
        "null"
      ]
    },
    "listing_id": {
      "type": "string"
    },
    "print_offer": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "credits",
            "paid_credits",
            "card_price"
          ],
          "properties": {
            "credits": {
              "type": "number"
            },
            "card_price": {
              "anyOf": [
                {
                  "type": "object",
                  "required": [
                    "cents",
                    "currency"
                  ],
                  "properties": {
                    "cents": {
                      "type": "number"
                    },
                    "currency": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "paid_credits": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "download_url": {
      "type": "string"
    },
    "photographer": {
      "type": "string"
    },
    "already_owned": {
      "type": "boolean"
    },
    "credits_spent": {
      "type": "number"
    },
    "source_pixels": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "width",
            "height"
          ],
          "properties": {
            "width": {
              "type": "number"
            },
            "height": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "entitlement_id": {
      "type": [
        "string",
        "null"
      ]
    },
    "print_included": {
      "type": "boolean"
    },
    "credits_remaining": {
      "type": "number"
    },
    "download_expires_at": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
fulfil_image annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
list_entitlements — List images the buyer owns
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_entitlements input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1
    },
    "cursor": {
      "type": "string"
    },
    "include_previews": {
      "type": "boolean",
      "description": "A small picture of each image. Caps the page at 12."
    }
  }
}
list_entitlements output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "entitlements",
    "next_cursor",
    "revoked"
  ],
  "properties": {
    "revoked": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "listing_id",
          "title",
          "licence",
          "revoked_at"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "licence": {
            "type": "string"
          },
          "listing_id": {
            "type": "string"
          },
          "revoked_at": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "next_cursor": {
      "type": [
        "string",
        "null"
      ]
    },
    "entitlements": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "listing_id",
          "headline",
          "title",
          "description",
          "orientation",
          "photographer",
          "preview_url",
          "licence",
          "licensee",
          "print_included",
          "granted_at"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "licence": {
            "type": "object",
            "required": [
              "code",
              "version"
            ],
            "properties": {
              "code": {
                "type": "string"
              },
              "version": {
                "type": "number"
              }
            },
            "additionalProperties": false
          },
          "headline": {
            "type": [
              "string",
              "null"
            ]
          },
          "licensee": {
            "type": [
              "string",
              "null"
            ]
          },
          "granted_at": {
            "type": "number"
          },
          "listing_id": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "orientation": {
            "type": [
              "string",
              "null"
            ]
          },
          "preview_url": {
            "type": [
              "string",
              "null"
            ]
          },
          "photographer": {
            "type": "string"
          },
          "print_included": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
list_entitlements annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}

Prompts

3 advertised

phone_wallpaper — Find a phone wallpaper

Advertised by the server during the last successful anonymous check.

A portrait photograph that fits a phone screen, in the mood you describe.

look
What it should feel like, e.g. "calm, moody and minimal, a deep teal seascape at night".
screen
Which phone, e.g. "iPhone 16 Pro" or "Pixel 9".
desktop_background — Find a desktop background

Advertised by the server during the last successful anonymous check.

A wide photograph that fits a computer screen, in the mood you describe.

look
What it should feel like, e.g. "warm golden-hour mountains, not too busy".
screen
Which screen, e.g. "MacBook Air" or "2560×1440 monitor".
print_for_home — Find a photo to print for your home

Advertised by the server during the last successful anonymous check.

A landscape photograph to print large for a room, checked for print size and licence.

room
The room and the feeling, e.g. "my bright, airy living room: light, calm and open, soft blues and pale sand, coastal if you have it".

Resources

4 advertised

Personal use license v1

Advertised by the server during the last successful anonymous check.

Use the image on your own devices and personal projects, forever. No resale, no redistribution, no commercial use, no AI training.

Personal use license v1 URI
atelier://licence/personal/1

MIME type: text/plain

Personal use license v2

Advertised by the server during the last successful anonymous check.

Use the image on your own devices and in personal projects, with no expiry. Credit the photographer where practical. No resale, no redistribution, no commercial use, no AI training.

Personal use license v2 URI
atelier://licence/personal/2

MIME type: text/plain

Commercial use license v1

Advertised by the server during the last successful anonymous check.

Use the image to promote and run a business — websites, social media, advertising, marketing and client work — with no expiry. Licensed to one named person or business. No merchandise or templates for resale, no redistribution, no AI training.

Commercial use license v1 URI
atelier://licence/commercial/1

MIME type: text/plain

Photographs

Advertised by the server during the last successful anonymous check.

The search results and images, drawn for the person.

Photographs URI
ui://atelier/pictures-v2.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
723 ms
95th percentile latency
723 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 723 ms · metadata changed · 10 tool(s), 4 resource(s), 0 resource template(s), 3 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http atelier-photos-mcp https://store.atelierphotos.app/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add atelier-photos-mcp --url https://store.atelierphotos.app/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable atelier-photos-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "atelier-photos-mcp": {
      "url": "https://store.atelierphotos.app/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "atelier-photos-mcp": {
      "type": "streamableHttp",
      "url": "https://store.atelierphotos.app/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start atelier-photos-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "atelier-photos-mcp": {
      "type": "http",
      "url": "https://store.atelierphotos.app/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http atelier-photos-mcp https://store.atelierphotos.app/api/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "atelier-photos-mcp": {
      "url": "https://store.atelierphotos.app/api/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "atelier-photos-mcp": {
      "serverUrl": "https://store.atelierphotos.app/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Atelier Photos MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Atelier Photos MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing