Fold Laboratories
Original art from galleries and artists: search, details, delivered prices and checkout links.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"art": {
"url": "https://api.foldlaboratories.com/mcp"
}
}
}Remote endpoints
https://api.foldlaboratories.com/mcpstreamable-httphttps://api.foldlaboratories.com/mcp?surface=registrystreamable-httpWhat it can do
Tool inventory
Tools (10)
🟢search_artworks(query, limit, min_price_usd, max_price_usd, orientation, ...)
Use this when someone wants to find original paintings, prints, photographs or sculpture from independent artists: by subject, style, colour, size or budget; for a particular wall; or like a work or a photo they have. It returns only works that meet everything asked for, each with what it met. near_matches come apart, each saying what it misses or what its seller left unsaid: a blank fact is unknown, never a no. Write the request in words ("a large blue abstract painting under $2,000"; misspellings, and Spanish, Portuguese, French, Italian and German, are read) or send filters — min_price_usd, max_price_usd, orientation, subject, style, medium, colors, min_height_in, max_height_in, min_width_in, max_width_in, ships_to, framed, ready_to_hang, signed, edition — and a filter wins over the words. applied_filters lists every constraint and where it came from; understood says how each word was read (read_as, corrected); correct a misreading with a filter. A word about the work that names no constraint must appear in its own words to match ("lighthouse"). Words of mood ("calm") and of where it will hang ("hallway") only order the results; "to hang" and "a gift" are not used. A place it ships to, with its state or ZIP, is read as ships_to. fold_derived marks Fold’s reading of the seller’s words. This catalogue CANNOT be filtered by authenticity or provenance strength: Fold verifies sellers, not works (see _verification). Works on sale now; include_sold adds sold works. Attributes are the seller’s; null means unspecified, never estimated. completeness says whether every work was checked. A wall — wall: {width, height, furniture_width, furniture_height, unit} — keeps only works whose size suits it by Fold’s rules of thumb, and wall_fit gives the size range and the reasoning to relay: a rule of thumb, not a measurement of the room. With a wall, query may be left out. similar_to {artwork_id | image_url | image_base64} keeps only works that look like it, at or above Fold’s similarity threshold, the closest first, each with its similarity from 0 to 1: how alike the photographs look to an image model, not a judgement of style or quality. With similar_to, query may be left out. A photo is used for this search only and kept nowhere. Each of the first 5 matches carries offer — the impression to buy (listing_id), whether it can be bought now, its price, delivery, ship-by and arrival dates and returns — and, with the buyer’s US ZIP code in ships_to, the first 3 a delivered_estimate with sales tax. Pass offer.listing_id straight to the checkout, which checks availability itself. Every answer ends with next_actions: the next call, its ids filled in. The first 3 works shown come with a small picture of each, attached after the answer as images, so you can see how they look — colour, mood, whether one suits a room or a photo — rather than going by words alone; image.url is the full size.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "What the buyer is looking for, in their words. Leave it out only to search by a wall or similar_to alone.",
"type": "string",
"minLength": 1
},
"limit": {
"description": "Maximum matches. Default 10, hard cap 100.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"min_price_usd": {
"description": "Lowest acceptable price, in US dollars.",
"type": "number",
"minimum": 0
},
"max_price_usd": {
"description": "Highest acceptable price, in US dollars.",
"type": "number",
"exclusiveMinimum": 0
},
"orientation": {
"description": "Any of: portrait (taller than wide), landscape (wider than tall), square.",
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"portrait",
"landscape",
"square"
]
}
},
"subject": {
"description": "Any of these subjects.",
"minItems": 1,
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"enum": [
"abstract",
"landscape",
"seascape",
"cityscape",
"still_life",
"botanical",
"animals",
"portrait",
"figurative",
"interior",
"spiritual",
"text"
]
}
},
"style": {
"description": "Any of these styles.",
"minItems": 1,
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"enum": [
"abstract_expressionism",
"expressionism",
"impressionism",
"realism",
"photorealism",
"minimalism",
"geometric",
"pop_art",
"surrealism",
"folk",
"street_art",
"illustrative"
]
}
},
"medium": {
"description": "Any of these media; a family such as painting or print includes its members.",
"minItems": 1,
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"enum": [
"painting",
"oil",
"acrylic",
"watercolor",
"gouache",
"tempera",
"drawing",
"charcoal",
"graphite",
"pastel",
"ink",
"print",
"screenprint",
"etching",
"lithograph",
"woodcut",
"linocut",
"giclee",
"monotype",
"photograph",
"sculpture",
"bronze",
"ceramic",
"glass",
"textile",
"collage",
"mixed_media",
"digital"
]
}
},
"colors": {
"description": "Every one of these among the colours the seller confirmed for the work.",
"minItems": 1,
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"red",
"orange",
"yellow",
"green",
"teal",
"blue",
"purple",
"pink",
"brown",
"beige",
"black",
"grey",
"white"
]
}
},
"min_height_in": {
"description": "Height at least this, in inches.",
"type": "number",
"exclusiveMinimum": 0
},
"max_height_in": {
"description": "Height at most this, in inches.",
"type": "number",
"exclusiveMinimum": 0
},
"min_width_in": {
"description": "Width at least this, in inches.",
"type": "number",
"exclusiveMinimum": 0
},
"max_width_in": {
"description": "Width at most this, in inches.",
"type": "number",
"exclusiveMinimum": 0
},
"ships_to": {
"description": "Where the buyer wants it delivered. Fold delivers to the 50 US states and DC.",
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 56,
"description": "ISO 3166-1 alpha-2, e.g. US."
},
"region": {
"description": "The state, e.g. CO or Colorado.",
"type": "string",
"maxLength": 56
},
"postal_code": {
"type": "string",
"maxLength": 16
}
},
"required": [
"country"
],
"additionalProperties": false
},
"framed": {
"description": "Framed (true) or unframed (false), as the seller stated.",
"type": "boolean"
},
"ready_to_hang": {
"description": "Ready to hang, as the seller stated.",
"type": "boolean"
},
"signed": {
"description": "Signed by the artist, as the seller stated.",
"type": "boolean"
},
"edition": {
"description": "unique: one of a kind; edition: one impression of an edition.",
"type": "string",
"enum": [
"unique",
"edition"
]
},
"wall": {
"description": "The wall the work will hang on: only works whose size suits it.",
"type": "object",
"properties": {
"width": {
"type": "number",
"exclusiveMinimum": 0,
"description": "The wall’s width, in `unit`."
},
"height": {
"type": "number",
"exclusiveMinimum": 0,
"description": "The wall’s height from the floor, in `unit`."
},
"furniture_width": {
"description": "The width of the furniture the work will hang above — a sofa, a bed, a sideboard — if any.",
"type": "number",
"exclusiveMinimum": 0
},
"furniture_height": {
"description": "The furniture’s height from the floor, to hang the work above it. Give it with furniture_width.",
"type": "number",
"exclusiveMinimum": 0
},
"unit": {
"description": "in (inches, the default) or cm.",
"type": "string",
"enum": [
"in",
"cm"
]
}
},
"required": [
"width",
"height"
],
"additionalProperties": false
},
"similar_to": {
"description": "A work, or a photo, the works must look like.",
"type": "object",
"properties": {
"artwork_id": {
"description": "A work on Fold to find works like: an artwork_id from search_artworks.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"image_url": {
"description": "A photo to find works like: its https address. Fetched once, used for this search only, and kept nowhere.",
"type": "string",
"minLength": 1,
"maxLength": 2048
},
"image_base64": {
"description": "A photo to find works like, inline: a JPEG, PNG or WebP as base64 or a data: URL, at most 700 KB. Used for this search only, and kept nowhere.",
"type": "string",
"minLength": 1,
"maxLength": 1000000
},
"min_similarity": {
"description": "The least similarity a work must reach, 0.50 to 1; Fold's threshold, 0.60, when left out. Lower it only when the buyer would see works less alike.",
"type": "number",
"minimum": 0.5,
"maximum": 1
}
},
"additionalProperties": false
},
"include_sold": {
"description": "Also include works that have already sold. Off by default. Works taken off sale are never returned either way.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_artwork(artwork_id)
Use this when someone wants the full facts about one work before deciding: what it is, its size, how it looks, what delivery costs and when it ships, whether it can be returned, who made it, and what Fold verified about the seller. Full detail for one artwork: attribution, medium, dimensions, edition structure, provenance, seller, and every individual impression that can be bought with its own price and availability. A numbered edition has one entry per impression — including artist proofs (AP), printer proofs (PP), and the bon à tirer (BAT), which are separate objects from the numbered run and usually priced differently. Each entry in `attributes` says who stands behind it (seller_stated, fold_derived or fold_verified), and a null means unspecified rather than estimated. Also returns image URLs to show the buyer. A signed URL is TEMPORARY: honour its `expires_at` and re-fetch rather than caching or redistributing it. An image marked `permanent` is one of the work’s public images, with no expiry: a clean display copy, or, where it also says `preview`, a reduced copy watermarked by Fold. Use this before presenting a work to a buyer, and quote the `impression` label exactly as given. Its public images, up to 3, also come as small pictures attached after the answer, so you can see how it looks.
Input Schema
{
"type": "object",
"properties": {
"artwork_id": {
"type": "string",
"minLength": 1,
"description": "artwork_id from search_artworks."
}
},
"required": [
"artwork_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢check_availability(listing_ids)
Use this when time has passed since a search or a work’s detail answered — the buyer came back later, or is weighing several works — to re-check whether specific impressions can still be bought before offering them. Each work here is unique or from a small edition, so an impression can sell at any time: never offer one as available from an old answer. A search’s offers and get_artwork say what can be bought as they answer, and the checkout checks again itself, so no call is needed between them and the checkout.
Input Schema
{
"type": "object",
"properties": {
"listing_ids": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "listing_id values from get_artwork."
}
},
"required": [
"listing_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴save_search_alert(email, webhook_url, query, min_price_usd, max_price_usd, ...)
Use this when a buyer wants to hear about works listed later that match what they are looking for. It saves the search — the buyer’s words in query and the same filters as search_artworks — and tells the buyer by e-mail, or your own system by webhook, when a work that matches it is listed: only works that meet everything asked, never near matches, at most one alert a day, for 180 days. An e-mail alert starts only when the buyer confirms it from the one e-mail Fold sends to ask; ask the buyer before giving Fold their address. Every alert e-mail has one-click unsubscribe. A webhook alert starts once webhook_url answers a signed verification event by echoing its challenge. Works flagged as mature content are left out unless include_mature is true, which only the buyer’s own request should set. Answers with search_alert_id and manage_token, shown once: get_search_alert reads the alert and cancel_search_alert ends it.
Input Schema
{
"type": "object",
"properties": {
"email": {
"description": "The buyer’s e-mail address, which they gave for this alert. Fold sends it one e-mail to confirm, and nothing else until they do.",
"type": "string",
"minLength": 3,
"maxLength": 254
},
"webhook_url": {
"description": "Your https endpoint for search_alert.new_works events, signed as Standard Webhooks specifies. It must echo the verification event’s data.challenge.",
"type": "string",
"minLength": 1,
"maxLength": 2048
},
"query": {
"description": "What the buyer is looking for, in their words, as for search_artworks.",
"type": "string",
"maxLength": 1000
},
"min_price_usd": {
"description": "Lowest acceptable price, in US dollars.",
"type": "number",
"minimum": 0
},
"max_price_usd": {
"description": "Highest acceptable price, in US dollars.",
"type": "number",
"exclusiveMinimum": 0
},
"orientation": {
"description": "Any of: portrait (taller than wide), landscape (wider than tall), square.",
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"portrait",
"landscape",
"square"
]
}
},
"subject": {
"description": "Any of these subjects.",
"minItems": 1,
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"enum": [
"abstract",
"landscape",
"seascape",
"cityscape",
"still_life",
"botanical",
"animals",
"portrait",
"figurative",
"interior",
"spiritual",
"text"
]
}
},
"style": {
"description": "Any of these styles.",
"minItems": 1,
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"enum": [
"abstract_expressionism",
"expressionism",
"impressionism",
"realism",
"photorealism",
"minimalism",
"geometric",
"pop_art",
"surrealism",
"folk",
"street_art",
"illustrative"
]
}
},
"medium": {
"description": "Any of these media; a family such as painting or print includes its members.",
"minItems": 1,
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"enum": [
"painting",
"oil",
"acrylic",
"watercolor",
"gouache",
"tempera",
"drawing",
"charcoal",
"graphite",
"pastel",
"ink",
"print",
"screenprint",
"etching",
"lithograph",
"woodcut",
"linocut",
"giclee",
"monotype",
"photograph",
"sculpture",
"bronze",
"ceramic",
"glass",
"textile",
"collage",
"mixed_media",
"digital"
]
}
},
"colors": {
"description": "Every one of these among the colours the seller confirmed for the work.",
"minItems": 1,
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"red",
"orange",
"yellow",
"green",
"teal",
"blue",
"purple",
"pink",
"brown",
"beige",
"black",
"grey",
"white"
]
}
},
"min_height_in": {
"description": "Height at least this, in inches.",
"type": "number",
"exclusiveMinimum": 0
},
"max_height_in": {
"description": "Height at most this, in inches.",
"type": "number",
"exclusiveMinimum": 0
},
"min_width_in": {
"description": "Width at least this, in inches.",
"type": "number",
"exclusiveMinimum": 0
},
"max_width_in": {
"description": "Width at most this, in inches.",
"type": "number",
"exclusiveMinimum": 0
},
"ships_to": {
"description": "Where the buyer wants it delivered. Fold delivers to the 50 US states and DC.",
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 56,
"description": "ISO 3166-1 alpha-2, e.g. US."
},
"region": {
"description": "The state, e.g. CO or Colorado.",
"type": "string",
"maxLength": 56
},
"postal_code": {
"type": "string",
"maxLength": 16
}
},
"required": [
"country"
],
"additionalProperties": false
},
"framed": {
"description": "Framed (true) or unframed (false), as the seller stated.",
"type": "boolean"
},
"ready_to_hang": {
"description": "Ready to hang, as the seller stated.",
"type": "boolean"
},
"signed": {
"description": "Signed by the artist, as the seller stated.",
"type": "boolean"
},
"edition": {
"description": "unique: one of a kind; edition: one impression of an edition.",
"type": "string",
"enum": [
"unique",
"edition"
]
},
"wall": {
"description": "Only works whose size suits this wall, as search_artworks’ wall reads it.",
"type": "object",
"properties": {
"width": {
"type": "number",
"exclusiveMinimum": 0,
"description": "The wall’s width, in `unit`."
},
"height": {
"type": "number",
"exclusiveMinimum": 0,
"description": "The wall’s height from the floor, in `unit`."
},
"furniture_width": {
"description": "The width of the furniture the work will hang above — a sofa, a bed, a sideboard — if any.",
"type": "number",
"exclusiveMinimum": 0
},
"furniture_height": {
"description": "The furniture’s height from the floor, to hang the work above it. Give it with furniture_width.",
"type": "number",
"exclusiveMinimum": 0
},
"unit": {
"description": "in (inches, the default) or cm.",
"type": "string",
"enum": [
"in",
"cm"
]
}
},
"required": [
"width",
"height"
],
"additionalProperties": false
},
"include_mature": {
"description": "Also announce works their sellers flagged as mature content. Only when the buyer asked.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_search_alert(search_alert_id, manage_token)
Use this when a buyer asks about an alert for new works they saved: whether it is waiting for them to confirm it, active or ended, what it watches, when it last sent works and when it ends. Needs the search_alert_id and manage_token save_search_alert gave.
Input Schema
{
"type": "object",
"properties": {
"search_alert_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The search_alert_id save_search_alert gave."
},
"manage_token": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The manage_token save_search_alert gave."
}
},
"required": [
"search_alert_id",
"manage_token"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🔴cancel_search_alert(search_alert_id, manage_token)
Use this when a buyer wants to stop an alert for new works. Nothing more is sent, and the saved words, filters and address are erased. Needs the search_alert_id and manage_token save_search_alert gave; a buyer can also stop it from any alert e-mail in one click.
Input Schema
{
"type": "object",
"properties": {
"search_alert_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The search_alert_id save_search_alert gave."
},
"manage_token": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The manage_token save_search_alert gave."
}
},
"required": [
"search_alert_id",
"manage_token"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢start_checkout(listing_id)
Use this when the buyer has chosen one work and wants to buy it. It answers with checkout_url, a page on Fold’s own site for that one work, where the buyer enters the delivery address, sees the total with sales tax and the terms, and pays. It charges nothing and reserves nothing: the work can still sell to someone else until the buyer presses Pay, and the link works once and lapses at expires_at. Give the link to the buyer or open it in your browser. It checks availability itself, so call it straight from a search’s offer.listing_id or get_artwork’s listings, with no other call first; one listing_id per call, since each work is its own purchase. The buyer needs no account and never signs in: on the page they give a name, an e-mail for the order confirmation and a US delivery address, and pay. If the work has sold, or another buyer is paying for it, the refusal carries out_of_stock: what the work is now, and up to three similar works on sale here to offer the buyer instead.
Input Schema
{
"type": "object",
"properties": {
"listing_id": {
"type": "string",
"minLength": 1,
"maxLength": 36,
"description": "A single listing_id from get_artwork or check_availability."
}
},
"required": [
"listing_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_delivered_quote(listing_id, destination)
Use this when a buyer asks what a work will cost delivered to them and when it would arrive. Given one listing_id and a US destination (a five-digit ZIP code, and the state if known), it answers with the price, the seller’s delivery charge, an ESTIMATE of sales tax from Fold’s tax engine for that ZIP code, the total, the date the seller says it ships by and the arrival window their transit estimate gives, the returns that apply, the policy links and how to check out. Read-only: nothing is opened or reserved. Checkout calculates the exact tax from the full address before the buyer pays. Fold delivers only to the 50 US states and DC.
Input Schema
{
"type": "object",
"properties": {
"listing_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "A listing_id from get_artwork."
},
"destination": {
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 56,
"description": "US: Fold delivers only within the US."
},
"postal_code": {
"type": "string",
"minLength": 5,
"maxLength": 10,
"description": "A five-digit US ZIP code."
},
"region": {
"description": "The state, e.g. CO or Colorado.",
"type": "string",
"maxLength": 56
}
},
"required": [
"country",
"postal_code"
],
"additionalProperties": false
}
},
"required": [
"listing_id",
"destination"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_order_status(order_token, order_reference, buyer_email)
Use this when a buyer asks where their order is or what they can still claim. With the token from the order page’s address, or the order reference from the confirmation e-mail and the e-mail address the buyer gave at checkout, it answers with the order’s status, the tracking the seller recorded, and each return or claim window with when it closes. An order is shown only to whoever proves they placed it; an unknown order and a wrong proof get the same answer.
Input Schema
{
"type": "object",
"properties": {
"order_token": {
"description": "The token in the order page’s address, from the confirmation e-mail: /order/<token>.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"order_reference": {
"description": "The order reference printed in the confirmation e-mail. Send with buyer_email.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"buyer_email": {
"description": "The e-mail address the buyer gave at checkout. Send with order_reference.",
"type": "string",
"minLength": 3,
"maxLength": 320
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢open_claim(order_token, order_reference, buyer_email, ground, description)
Use this when a buyer wants to return a work or report a problem with an order: damage or a difference from the description on arrival, non-delivery, a doubt about authenticity or title, an agent purchase they did not authorise, cancelling before dispatch, or a 30-day return. It checks the ground against the Returns policy’s window for this order, records the request for a person at Fold, and answers with a link for sending photographs. It refunds nothing: a person at Fold decides every request and replies by e-mail. Needs the same proof as get_order_status.
Input Schema
{
"type": "object",
"properties": {
"order_token": {
"description": "The token in the order page’s address, from the confirmation e-mail: /order/<token>.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"order_reference": {
"description": "The order reference printed in the confirmation e-mail. Send with buyer_email.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"buyer_email": {
"description": "The e-mail address the buyer gave at checkout. Send with order_reference.",
"type": "string",
"minLength": 3,
"maxLength": 320
},
"ground": {
"type": "string",
"enum": [
"cancellation_before_dispatch",
"unauthorised_agent_purchase",
"damaged_or_not_as_described",
"not_delivered",
"authenticity_or_title",
"thirty_day_return"
],
"description": "The ground, as Returns §2 names it."
},
"description": {
"description": "What went wrong, in the buyer’s words.",
"type": "string",
"maxLength": 2000
}
},
"required": [
"ground"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Community
Evidence