/
Guidebooks

Lego API: Brickfact's ChatGPT plugin and MCP server

🗓 Updated: 
👤 Moritz

Lego does not offer a public developer API for its catalogue or its shop prices. Brickfact fills the shopping side of that gap: the Brickfact plugin for ChatGPT and our public MCP server let an AI assistant search Lego sets and compare current retailer offers, with shipping, in nine countries. Neither needs a Brickfact account or a key.

This guide shows how to add the plugin to ChatGPT, how to connect the MCP server to other assistants, and what the tools return. The examples use US dollars and pounds sterling. Brickfact runs this service, so we describe its limits as plainly as its features.

Add the Brickfact plugin to ChatGPT

The quickest way in is the Brickfact plugin in ChatGPT's plugin directory. There is nothing to download: the plugin is installed inside ChatGPT and works on the web, in the desktop app and on mobile.

  1. Open the Brickfact plugin page while signed in to ChatGPT. Alternatively, select Plugins in the ChatGPT sidebar and search for Brickfact.
  2. Review what the plugin includes and install it.
  3. Start a chat and ask a shopping question with a country, for example "Compare offers for Lego 75192 delivered in the UK". ChatGPT uses installed plugins when they fit your request. To call Brickfact directly, type @Brickfact, or select + and enter its name.

The directory only shows plugins that your plan and workspace allow. In a company workspace, the admin decides which plugins members can install. The plugin needs no sign-in to Brickfact, because it only reads the public catalogue.

What Brickfact covers

Brickfact monitors retailer offers, with item price, reported shipping and total in the currency of the destination you choose. The plugin and the MCP server use the same service at https://mcp.brickfact.com/mcp: set search, specifications, offers, comparisons, recorded retail price history, deal checks and related sets. The service is read-only. The JSON routes behind it are not public; they require a key, and Brickfact does not issue keys publicly.

No key does not mean unlimited use or a promise that the service stays free forever. It is a shared service, so requests are rate-limited per client and overall. When a limit is reached, the server answers with HTTP 429 and a Retry-After header, and the client should wait that long before trying again.

MarketCodeCurrency
United StatesUSUSD
United KingdomGBGBP
GermanyDEEUR
AustriaATEUR
SwitzerlandCHCHF
FranceFREUR
NetherlandsNLEUR
SpainESEUR
ItalyITEUR

Every tool call needs one of these markets. It decides which retailers count and which currency you get. Other countries are rejected rather than mapped to a neighbour. The optional language input only changes names and labels. A German market answer in English still shows euros, German retailers and a link to the German comparison page.

What the tools return

Ask for sets within a budget and the assistant calls search_sets. It filters by name or set number, theme, budget, piece count, age labels such as 18+, and retirement status, sorts by price, discount or newest, and returns up to 20 sets per page. list_themes supplies theme IDs. Unknown inputs are rejected rather than ignored, so a misread filter does not silently widen the search.

For one set, get_set_offers lists each offer with item price, shipping, total, currency, feed time (feed_updated_at) and stock status. Offers with a known delivered total come first, and the result names the lowest known total and the lowest item price. When a shop's shipping fee is unknown, shipping and total stay empty (null). Treat that as unknown, never as free.

The stock status (stock_status) is always not_verified. A feed listing a price does not prove the set is in stock, and the reported shipping is the fee for a single set. Free-shipping thresholds, vouchers and checkout rules can change the final amount, so the shop's checkout has the last word.

get_set_details adds the recommended retail price, age label, minifigure count, dimensions and an estimated retirement date. compare_sets puts two to four sets side by side.

Item price or delivered price?

The default price_basis is "item". In this mode budgets and sorting use the price of the set alone, item_price is filled and total_price stays null. A set listed at $45 with $6.99 shipping passes a $50 item budget even though it costs more than $50 at your door.

With "delivered", Brickfact uses the total including reported shipping to the selected market. Offers with unknown shipping are removed before the price filter, the result count and pagination, so total and every page only include sets with a known delivered total, and filtering never leaves gaps between pages. The trade-off: a shop that does not report shipping drops out of delivered results entirely.

For shopping, delivered is usually the honest choice. A low item price from a shop abroad often stops being a bargain once shipping to your country is added, which is why collectors tend to compare prices including delivery. Keep the item mode for catalogue views where shipping does not matter.

Two kinds of price history

Brickfact has two history datasets, and mixing them up gives wrong answers.

Retail price history (tool get_retail_price_history) records the lowest known delivered price per day at the monitored retailers of one market, in that market's currency. Amazon is excluded, and so are days with unknown or estimated shipping. Past days are priced with today's shipping rules for the destination. The result states observation_days and first_observed_day. This series only began on 12 October 2026, so a long requested window does not mean a long record; read the coverage before you draw conclusions.

Market valuation history (tool get_price_history) is a separate series of sealed-set valuations in euros. It answers what a sealed set is worth over time, the kind of value our Lego market-performance study analyses. Asking for the US market does not convert it to dollars, and it is not a record of shop prices.

The deal check (tool assess_deal) compares the cheapest current delivered offer, from a feed no older than 48 hours, with the recorded retail low. It returns at_or_below_recorded_low or above_recorded_low with the difference in percent. Without at least two recorded days and history no older than 48 hours it returns insufficient_history, and without a usable offer no_delivered_offer. The current offer may come from Amazon even though the history excludes it. A result at the recorded low is not an all-time low and says nothing about next month's price.

Connect the MCP server to other assistants

The Model Context Protocol is an open standard for connecting AI applications to external systems. The assistant discovers Brickfact's tools and calls them when your question needs live data, so you do not write any requests yourself.

SettingValue
Server URLhttps://mcp.brickfact.com/mcp
TransportStreamable HTTP (stateless POST)
AuthenticationNone
Tools11, all read-only

Any client that supports remote Streamable HTTP servers connects with this URL. Local-only clients that speak stdio need a bridge.

In ChatGPT you can also connect the server yourself instead of installing the plugin, for example when your workspace allows custom MCP servers but not the directory plugin, or when a tool from the list below is missing in your plugin. OpenAI's connection guide describes the route: open ChatGPT Plugins, select the plus button and Add custom MCP server, give it a name and description, enter the URL including /mcp, choose no authentication, confirm the risk warning and select Create as a plugin.

The eleven tools:

ToolWhat it does
search_setsSearch by name, number, theme, budget, pieces, age or retirement
get_set_detailsSpecifications, retirement estimate and offers
get_set_offersOffers for one set with shipping
compare_setsTwo to four sets side by side
list_themesTheme names and IDs
get_retail_price_historyRecorded delivered shop prices
assess_dealCurrent offer against the recorded retail low
get_price_historySealed-set market valuations in euros
find_alternativesRelated, cheaper or smaller sets
render_setsShopping cards or a comparison view
get_app_handoffSteps to finish a price alert or watchlist entry in the Brickfact app

Shopping prompts that work

The server asks the assistant to use the shopping country from your conversation and to ask when it is missing, so name it. These prompts cover the main tools:

  • "Find Lego Star Wars sets under $100 including shipping to the United States and show them as cards."
  • "Help me choose a Lego gift under £60 delivered in the UK for a 10-year-old who likes cars."
  • "Compare Lego 10311 and 10313 for delivery to the UK, with piece counts and delivered prices."
  • "Is today's price for Lego 75192 in the US good compared with recorded retail prices? Tell me how many days of data you have."
  • "Find cheaper alternatives to Lego 75192 delivered in the UK."

Hosts that support MCP Apps show set cards with images, a side-by-side comparison and retail-history charts. Elsewhere the assistant answers in text with the same data. Where the host lets apps keep state, the card can hold a shortlist of up to six set numbers. That shortlist lives in the conversation's card, not in a Brickfact account, and may not carry over to a new chat.

What the assistant cannot do

The plugin and the MCP server read public catalogue data only. They cannot buy anything, ask for payment details, see your Brickfact collection or change your account. Ask for "notify me when Lego 10311 drops below $35" and you get an app handoff with "created": false: a link to the Brickfact app and the steps to set the alert there. Nothing is created until you confirm it in the app. If alerts are what you are after, our guide to the Lego price tracker covers that side.

Prices in an answer are only as current as the feed behind them. A good deal can sell out minutes after a price drops, so open the returned comparison link and check the shop before you buy.

Habits that keep answers accurate

A few habits keep answers correct when the data changes:

  • Start with one set and one market, and check the currency and price basis in every answer before you add more destinations.
  • Keep unknown shipping as unknown. Do not read it as free.
  • Note when the feed was updated (feed_updated_at), or when you asked, next to the prices.
  • Treat empty results and short histories as normal answers, not errors.
  • After an HTTP 429, respect Retry-After, and do not crawl the whole catalogue through search pages.
  • Use the returned comparison link (comparison_url) rather than building set page URLs yourself.

If you prefer to compare prices by hand, the Lego database has the same offers with filters, and how we compare prices explains which retailers we monitor.

Other Lego data sources

Brickfact covers shop offers, not parts or the second-hand market. For parts, colours and set inventories, Rebrickable's API is the usual source; Brickset's API covers set records and collections, and the BrickLink API exposes marketplace prices for new and used sets. All three need their own key and set their own usage rules.

An API for programming Lego hubs and motors is a robotics question rather than a data one: our guide to Lego robotics programming covers SPIKE, Mindstorms and Python with Pybricks. Brickfact is independent of the Lego Group.

Brickfact may earn a commission when you buy through a merchant link. Commissions do not determine the order of offers. Editorial and testing policy

Disclaimer

Brickfact may earn a commission when you buy through a merchant link. Commissions do not determine the order of offers.

LEGO® is a trademark of the LEGO Group, but this website is not sponsored, authorized or endorsed by them.
As an Amazon partner, we earn money on qualified sales that you make through links to Amazon on our website. The price for you remains the same, but you support this project ❤️ .
© 2026 Brickfact. All Rights Reserved