Money-Back Guarantee · 100 days Free Worldwide Delivery
644,615artworks 52,888artists 5,406museums 32languages

Use AllPaintingsStore.com from your AI assistant

AllPaintingsStore is built for volume and trade buyers: paintings in repeatable standard sizes, hand-painted on linen canvas, prints, digital licensing, custom sizing, and framing at volume.

What your assistant can do

Search artworks, artists, museums and articles, read their details, check what is for sale now, and get a price for a print or a hand-painted oil reproduction.

The catalog holds 644,615 artworks, 52,888 artists and 5,406 museums.

What it cannot do

It cannot place an order, take a payment or change anything on your behalf. It gives you links: you order and pay on the website, in your browser.

What you need

An assistant that supports the Model Context Protocol (MCP). You need no account and no key.

The server at a glance

Server nameallpaintingsstore-art-search (AllPaintingsStore Art Search & Quotation, version 1.0.0)
Addresshttps://direct.allpaintingsstore.com/mcp/
TransportStreamable HTTP: JSON-RPC 2.0 over POST, one JSON answer per request, no event stream and no session
Protocol revision2025-06-18
AuthenticationNone: no account, no key, no OAuth
PriceFree to use
Capabilities14 tools, all read-only. No resources and no prompts.
CatalogThe catalog holds 644,615 artworks, 52,888 artists and 5,406 museums.
LanguagesEach tool takes a language parameter: 32 site languages, English by default.
Rate limit30 requests per second per IP address, with short bursts of 20 more. Beyond that the server answers HTTP 429.

Connect

Add this address to your assistant as a remote MCP server or custom connector:

https://direct.allpaintingsstore.com/mcp/

In an assistant with a settings screen, such as Claude or ChatGPT: open its connector settings, add a custom connector, paste the address and leave the authentication empty.

With Claude Code:

claude mcp add --transport http allpaintingsstore https://direct.allpaintingsstore.com/mcp/

In a client configured with a JSON file:

{
  "mcpServers": {
    "allpaintingsstore-art-search": {
      "type": "http",
      "url": "https://direct.allpaintingsstore.com/mcp/"
    }
  }
}

Ask for example

  • Price this painting as a print at 50 x 70 cm and at 100 x 140 cm, in US dollars.
  • Which oil paintings are in stock now, under 500 dollars?
  • Find seascapes suitable for a corridor of guest rooms.

How a request runs

  1. Your assistant searches the catalog and gets a list of results, each with an identifier (pk), a page address, an image address and a relevance score.
  2. It reads the details of the result you care about: description, museum where the original is kept, and links to related pages.
  3. For a price, it asks for a quotation at your size and in your currency, and gets the price with a link to an order form already filled in with that size and frame.
  4. You open the link, check the order and pay on the website.

Try it from a terminal

Say hello to the server and read its name and instructions:

curl -s https://direct.allpaintingsstore.com/mcp/ \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "initialize"}'

List the tools with their full input schemas:

curl -s https://direct.allpaintingsstore.com/mcp/ \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'

Call a tool:

curl -s https://direct.allpaintingsstore.com/mcp/ \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "search_artworks", "arguments": {"query": "seascape", "limit": 3}}}'

Available tools

This list is built from what the server answers to tools/list, so it always matches the server. The descriptions are the ones your assistant reads, in English.

Which search tool to use:

All the tools:

search_artworks

Search artworks · read-only

Full-text search of the artwork catalog by title, artist name and description. Returns only good-confidence matches with pk, artist_name, title, url, image_url (absolute URL of the large artwork image, null when the artwork has no image) and relevance score.

Parameter Type Required Description
query string yes Words from the artwork title, artist name and/or description.
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".
limit integer no Maximum number of results (1-10, default 10).

search_museums

Search museums · read-only

Full-text search of museums by name, optionally narrowed by city and country. Returns only good-confidence matches with pk, name, url, image_url (absolute URL of the large museum image, null when there is none), city, country and relevance score.

Parameter Type Required Description
query string yes Museum name or words from it.
city string no Optional city to narrow the search.
country string no Optional country to narrow the search.
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".
limit integer no Maximum number of results (1-10, default 10).

search_artists

Search artists · read-only

Full-text search of artists by name and biography, optionally narrowed by birth city/country and by a year the artist was alive (born <= year <= died, or born + 80 years when the death year is unknown). Returns pk, artist_name, url, image_url (absolute URL of the large artist portrait, null when there is none), city, country, date_born, date_death and score.

Parameter Type Required Description
query string yes Artist name or words from the biography.
city string no Optional birth city.
country string no Optional birth country.
alive_in_year integer no Optional year the artist was alive, e.g. 1503.
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".
limit integer no Maximum number of results (1-10, default 10).

search_articles

Search articles · read-only

Full-text search of website articles, optionally filtered by category code. Returns pk, title, url, image_url (absolute URL of the large article image, null when there is none), category_code, meta_description and relevance score.

Parameter Type Required Description
query string yes Words to search in the article texts.
category_code string no Optional article category filter. (Video, Blog, Testimonial, Top10, Top25, Top10Versus, Top, Ebook, Support, Misc, Menu, Website, Compare, QuestionAnswer, ArtVsArt)
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".
limit integer no Maximum number of results (1-10, default 10).

search_sections_semantically

Search passages by meaning (articles, museums, artists, artworks) · read-only

Semantic search of the texts of our site: returns the sections that answer the question best, by meaning rather than shared words, each WHOLE (section_text is never cut), from the requested models - "article" (our articles: how reproductions are made, policies, art history), "museum", "artist", "artwork" (their descriptions / biographies); default all models indexed on this server. Each result: model, object_pk (use it with the matching get_detail_* tool), object_title, object_url, category_code (articles), section_heading, section_text, is_faq_question, score (cosine; higher is closer). Ask in a full sentence; any language works (the texts are in English). Sections are packed best first into about 9,000 characters: sections_omitted_for_size says how many more matched. Use it to answer a question from what our texts say; to find a work, artist or museum by name or keywords, use search_fts; to find the objects a text is about, use search_objects_semantically. Error index_unavailable: fall back to the search_* full-text tools.

Parameter Type Required Description
query string yes The question or text to find passages for (up to 2000 characters).
models array no Which texts to search (default: every model indexed on this server).
category_code string no Optional article category filter (Support / Website for service and policy questions); applies to articles only. (Video, Blog, Testimonial, Top10, Top25, Top10Versus, Top, Ebook, Support, Misc, Menu, Website, Compare, QuestionAnswer, ArtVsArt)
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".
limit integer no Maximum number of sections (1-10, default 5).

search_objects_semantically

Find artworks, artists, museums or articles by meaning · read-only

Semantic search returning OBJECTS, not passages: the artworks, artists, museums or articles whose texts are closest in meaning to a text (a question, a paragraph, a section of an article). Each result: model, object_pk (use it with the matching get_detail_* tool), object_title, object_url, best_score (cosine of the object's single best passage; higher is closer), score_sum (its matching passages added up) and matched_vectors_count. rank_by "score_sum" (default) favours objects matching in many passages; "best_score" favours the one passage closest to the text - use it to find the exact work a text is about. Any language works (the texts are in English). Use it when you have a text and want the objects it is about; with a name or keywords, use search_fts; for the passages that answer a question, use search_sections_semantically. Error index_unavailable: fall back to the search_* full-text tools.

Parameter Type Required Description
query string yes The text to find objects for (up to 2000 characters).
models array no Which objects to search (default: artwork, artist, museum).
rank_by string no Ranking: sum of the matching passages (default) or the single best one. (score_sum, best_score)
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".
limit integer no Maximum number of objects (1-20, default 10).

search_fts

Find artworks, artists, museums and articles by name or keywords · read-only

Full-text search across artworks, artists, museums and articles at once (maximum 10 results per model, merged by relevance). Use it when you know a name or keywords and want the objects; to answer a question from what our texts say, use search_sections_semantically. Each result carries pk, model, title, artist_name, city, country, date_born, date_death, url, image_url (absolute URL of the large image, null when there is none), meta_description and score.

Parameter Type Required Description
query string yes Words to search across all four catalogs.
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".

get_detail_artwork

Get artwork details · read-only

Full data of ONE artwork identified by pk (use a search tool first to find the pk). Always returns: pk, title, meta_description, meta_keywords (first 5), description_html (the artwork description as HTML), url (the artwork page), image_url, and "links" — up to 5 ready-to-give absolute URLs of the most useful related pages (download_page, buy_print_page, buy_oil_painting_page (only for channels on sale), student_guide_page, similar_artworks_page, preview_in_room_page). Also for every caller: "museum" - where the original is kept (pk, name, url of its page on this site, city, country), null when unknown. artwork_not_found when no such artwork is published. The result is capped at 25000 characters: when description_html had to be shortened to fit, "truncated" is true.

Parameter Type Required Description
pk integer yes The object pk, as returned by a search tool.
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".

get_detail_artist

Get artist details · read-only

Full data of ONE artist identified by pk (use a search tool first to find the pk). Always returns: pk, title, meta_description, meta_keywords (first 5), description_html (the artist biography as HTML), url (the artist page), image_url, and "links" — up to 5 ready-to-give absolute URLs of the most useful related pages (artwork_timeline_page, all_artworks_page, chronicle_page, subject_atlas_page, mood_room_page). artist_not_found when no such artist is published. The result is capped at 25000 characters: when description_html had to be shortened to fit, "truncated" is true.

Parameter Type Required Description
pk integer yes The object pk, as returned by a search tool.
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".

get_detail_museum

Get museum details · read-only

Full data of ONE museum identified by pk (use a search tool first to find the pk). Always returns: pk, title, meta_description, meta_keywords (first 5), description_html (the museum description as HTML), url (the museum page), image_url, and "links" — up to 5 ready-to-give absolute URLs of the most useful related pages (city_museums_page, museums_by_country_page, official_website, all_museums_page). museum_not_found when no such museum is published. The result is capped at 25000 characters: when description_html had to be shortened to fit, "truncated" is true.

Parameter Type Required Description
pk integer yes The object pk, as returned by a search tool.
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".

get_detail_article

Get article details · read-only

Full data of ONE article identified by pk (use a search tool first to find the pk). Always returns: pk, title, meta_description, meta_keywords (first 5), description_html (the full article content as HTML), url (the article page), image_url, and "links" — up to 5 ready-to-give absolute URLs of the most useful related pages (articles_by_category_page, all_articles_page, rss_feed). article_not_found when no such article is published. The result is capped at 25000 characters: when description_html had to be shortened to fit, "truncated" is true.

Parameter Type Required Description
pk integer yes The object pk, as returned by a search tool.
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".

get_a_quotation

Get a reproduction price quotation · read-only

Price quotation for a reproduction of an artwork, as an art print or a hand-painted oil painting, at a given size and in a given currency. Leave type out to get BOTH in one call: the result then holds "quotations" (one full quotation per type the artwork sells, each with its own price, buy_url and offer_text) and "types_not_available". Every quotation carries offer_text, one ready-to-paste line (type, size, frame, price, order link): give it to the user as is, translating its words if needed but never changing its numbers or link. Optional frame_code adds the frame price to quotation_price ("WhiteWrap" = stretched on stretcher bars, "default" = a decorative frame chosen for the artwork, or a catalog code); optional senior_artist (oil painting only) adds the "Elite Senior Artist" upgrade — more detail and finesse, extra production time — to quotation_price. Identify the artwork by pk, or by title and/or artist_name (an exact title match wins; otherwise the first good-confidence search match is used, and its relevance is returned in "score"). A fuzzy match can be a different painting than the one asked for: when the result carries a "warning", verify the returned title before using the price, as the warning instructs. width/height need not match the artwork's own proportions: when its aspect ratio is known, the quoted size is snapped to that ratio while keeping the same surface area (width x height) you requested, so the reproduction is never stretched or distorted; the actual quoted size is returned as width_cm/height_cm (vs. your original requested_width_cm/requested_height_cm), with size_ratio_adjusted set to true when this happened. Give only width OR only height (e.g. "25 cm high", "smallest side 25 cm") to keep that side exactly: the other side is then derived from the artwork's aspect ratio and size_derived_from names the side you gave (fails with invalid_size when the ratio is unknown - then give both). Each side must be 25-250 cm (about 10-98 inches): a size outside that range is NOT refused but quoted at the nearest valid size with the same proportions, with size_adjusted_to_minimum / size_adjusted_to_maximum set to true; whenever the quoted size differs from the request, size_note says in one sentence what changed and why - repeat it to the user. invalid_size only comes back when no size of these proportions can fit the range. Returns pk, artist_name, title, meta_description, quotation_price, currency, frame_code (+ frame_description, frame_delivery), url (catalog page) and buy_url. buy_url is a ready-to-open, fully-parameterised buy form: reproduction medium, size and frame are all set from the query string, so the page opens showing exactly quotation_price. Give it to the user as the link to order the artwork at the quoted configuration. When the artwork ITSELF is for sale right now (a ready-made oil painting in stock, an open auction lot, an original, a studio collectible), the result also carries available_now (offers with price, stock quantity and offer_text, plus a note): tell the customer about the real object in the same answer — a quotation is a copy made to order. An artwork sold only as such an object answers with quotations empty and available_now set, not with channel_not_available.

Parameter Type Required Description
pk integer no Artwork pk (from a search tool).
title string no Artwork title (used when pk is not given).
artist_name string no Artist name (used when pk is not given).
type string no Reproduction type: "print" (art print) or "oil painting" (hand-painted). Omit to quote both at once. (print, oil painting)
width number no Width in the given unit. Omit to derive it from height.
height number no Height in the given unit. Omit to derive it from width.
unit string yes Unit of width/height. (inches, cm)
currency string yes ISO currency code, e.g. "USD", "EUR", "GBP".
frame_code string no Optional frame; when set, quotation_price includes it. Omit it (or "NoFrame") for the canvas rolled in a tube. "WhiteWrap" = the canvas stretched on wooden stretcher bars, white edges, no outer frame (use it for any request for a stretcher, stretcher bars, a stretched canvas or a canvas ready to hang without a frame); "BlurSideWrap" / "ExtendedWrap" = the same with the image blurred / continued around the edges. "default" = a decorative outer frame chosen for you (the frame recommended for the artwork when it has one, else our best-selling frame) — use it to quote a framed option without knowing the catalog. Any other catalog code (e.g. "P118B", "P919G", "W316G", "H24-GOLD-Portrait") is that specific decorative frame. The result then carries frame_description, frame_delivery (assembled, or a disassembled kit over 105 cm) and, for "default", frame_chosen_by. buy_url prefills the frame.
senior_artist boolean no Oil painting only: have an Elite Senior Artist paint it (more detail, finesse and extra production time). When true, quotation_price includes the upgrade and buy_url pre-selects it.
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".

get_a_custom_reproduction_quotation

Get a custom reproduction price quotation (no catalog artwork needed) · read-only

Price quotation for a CUSTOM reproduction — one made from an image the customer supplies (their own photo, or an artwork that is not in the catalog) — as an art print or a hand-painted oil painting. No artwork identification is needed or accepted: the price depends only on the size, the reproduction type and the currency. Use this whenever the artwork cannot be found in the catalog (the search tools return nothing relevant, or get_a_quotation fails with artwork_not_found), or the customer wants their own picture reproduced. Optional frame_code ("WhiteWrap" = stretched on stretcher bars, "default" = a decorative frame chosen for you, or a catalog code) adds the frame price to quotation_price; optional senior_artist (oil painting only) adds the "Elite Senior Artist" upgrade — more detail and finesse, extra production time. Each side must be 25-250 cm (about 10-98 inches). Returns quotation_price (the base price: options chosen on the order form, like varnish or urgent delivery, cost extra — see "notes"), currency, frame_code (+ frame_description, frame_delivery), width_cm/height_cm, notes, and order_page_url — the page where the customer uploads their image and orders the reproduction. Give order_page_url to the user as the link to place this order. For a hand-painted portrait the price covers up to 3 faces; the per-extra-face surcharge is stated in notes.

Parameter Type Required Description
type string yes Reproduction type: "print" (art print) or "oil painting" (hand-painted). (print, oil painting)
width number no Width in the given unit.
height number no Height in the given unit.
unit string yes Unit of width/height. (inches, cm)
currency string yes ISO currency code, e.g. "USD", "EUR", "GBP".
frame_code string no Optional frame; when set, quotation_price includes it. Omit it (or "NoFrame") for the canvas rolled in a tube. "WhiteWrap" = the canvas stretched on wooden stretcher bars, white edges, no outer frame (use it for any request for a stretcher, stretcher bars, a stretched canvas or a canvas ready to hang without a frame); "BlurSideWrap" / "ExtendedWrap" = the same with the image blurred / continued around the edges. "default" = a decorative outer frame chosen for you (the frame recommended for the artwork when it has one, else our best-selling frame) — use it to quote a framed option without knowing the catalog. Any other catalog code (e.g. "P118B", "P919G", "W316G", "H24-GOLD-Portrait") is that specific decorative frame. The result then carries frame_description, frame_delivery (assembled, or a disassembled kit over 105 cm) and, for "default", frame_chosen_by. The customer selects that frame on the order form (notes says which).
senior_artist boolean no Oil painting only: have an Elite Senior Artist paint it (more detail, finesse and extra production time). When true, quotation_price includes the upgrade; the customer selects the option on the order form.
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".

get_artwork_availability

Is this artwork available now, and at what price (stock, auction, originals, collectibles) · read-only

Every way to buy ONE artwork right now, on every sales channel it sells: the physical objects first — a ready-made oil painting in stock ("Stock Discount Oil Painting", a real canvas that ships within 48 hours), an auction lot (current bid, minimum next bid, closing time), an original sold by its owner, a studio collectible — each with available_now, stock_quantity, price (fixed, shipping included) in your currency, size, buy_url and offer_text (one ready-to-paste line: give it to the customer as is, numbers and link untouched); then the made-to-order channels (hand-painted oil reproduction, art print: price by size through get_a_quotation) and the digital image licence. available_now is true only when the artwork ITSELF can be bought or bid on today; available_now_summary says it in one sentence. Call it whenever a customer asks whether something is available, in stock, ready to ship, discounted, on auction, or what it costs as a real object — and before any "yes, it is available". Identify the artwork by pk, or by title and/or artist_name (exact title first, then a surname-guarded search whose relevance comes back in "score"; a "warning" means check the returned title). Without pk or title, give channel to LIST the objects of that channel for sale now (cheapest first; optional artist_name, query words from the title, max_price in your currency, limit 1-10): "what do you have in stock under 200 euros?", "which auctions are open?". Prices follow the strict no-fallback currency rule of the quotation tools.

Parameter Type Required Description
pk integer no Artwork pk (from a search tool or the page).
title string no Artwork title (used when pk is not given).
artist_name string no Artist name: with title/pk it identifies the artwork; in the list mode it filters the objects by artist.
channel string no List mode (no pk, no title): which physical channel to list — PaintingReady (ready-made oil paintings in stock), ProductAuction (auction lots), SellerProduct (originals sold by their owner), FactoryProduct (studio collectibles). With pk/title it narrows the offers to that channel. (ProductAuction, SellerProduct, FactoryProduct, PaintingReady)
query string no List mode: words from the title (e.g. "flowers", "sunset").
max_price number no List mode: highest price, in the given currency.
limit integer no List mode: how many objects (default 10).
currency string yes ISO currency code, e.g. "USD", "EUR", "GBP".
language string no Site language code (2 letters, e.g. "en", "fr"). Default "en".

Good to know

  • Search covers the whole catalog we share across our sites, not only the specialty of this site, so a result can fall outside it.
  • Every address in an answer is absolute and points to this website.
  • Each side of a reproduction must be 25 to 250 cm. A size outside that range is quoted at the nearest valid size, and the answer says what changed.
  • A quotation is the price of a copy made to order. When the artwork itself is for sale now, the answer says so too, with its price and stock.
  • A semantic search can answer index_unavailable: the assistant then falls back on the full-text search tools.

Errors

JSON-RPC code Meaning
-32700The request body is not valid JSON.
-32600The message is not a valid JSON-RPC 2.0 message. Batches are refused.
-32601The method is not supported. The server answers initialize, ping, tools/list and tools/call.
-32602Unknown tool or invalid arguments. The message says which.
-32603The tool failed on our side. Try again, or write to us.

Privacy

The server asks for no name, no account and no key, and these tools read public catalog data only.

What we record. For each tool call we record the tool name, the language, the website, the time, the client's user agent and a salted hash of its IP address. Your search words are not part of this record. Our web server also keeps standard access logs, which contain IP addresses.

Why. To count usage of the server, and to keep it secure and working.

Who receives it. This data stays on the servers we rent from our hosting provider. We do not sell it and we do not share it with advertisers. Your assistant's provider handles your conversation under its own terms.

How long. One year at most, after which records are deleted automatically. Backup copies can last a few weeks longer.

Your choices. You can use the server without an account, and remove it from your assistant at any time. These records carry no name. To ask a question or request deletion, write to our support address below and tell us your IP address and the dates concerned.

Read the privacy policy of this website

Support

A question or a problem with the server? Write to us: [email protected]