# Shop Tools Universe from Claude

> The store is also an MCP server: Claude can search the catalogue, compare tools on a battery platform, book a rental machine and fill a basket, with the same Crystallize data and the same personal ranking as the website. And every page is written to be read by machines: structured data, typed specs with unit and ETIM codes, and plain-text versions for language models.

- **MCP server (Streamable HTTP):** https://tools-universe.superfast.shop/api/mcp

## Set up the MCP server

Five minutes in Claude, one line in Claude Code. The public tools work without an account; sign in as a demo customer for prices, history and recommendations of your own.

### Add the store to Claude

claude.ai, Claude Desktop and the mobile apps share connectors. Interactive product cards need a host that supports MCP Apps; the tools themselves work everywhere.

1. Open **Settings → Connectors** and choose **Add custom connector**.
2. Name it “Tools Universe” and paste the server URL above.
3. Leave authentication on **Sign in when needed**: the server answers without a token on purpose, and only the personal tools ask you to sign in.
4. If asked for an OAuth client, let Claude register itself. Leave request headers empty.
5. Start a new chat, open **+ → Connectors** and switch Tools Universe on.

**Claude Code:**

```
claude mcp add --transport http tools-universe https://tools-universe.superfast.shop/api/mcp
claude "I’m on Milwaukee M18. Which SDS-plus hammers can I run on the batteries I already have?"
```

Run `/mcp` in a session to sign in when a personal tool asks for it.

**Any other MCP host:** Streamable HTTP, stateless, OAuth 2.1 with PKCE and discovery at `/.well-known/oauth-protected-resource`. VS Code, Cursor, ChatGPT and the MCP Inspector connect the same way.

### Sign in as a demo customer

There are no passwords. Ask something personal and Claude shows a Connect button; the store opens a page where you pick one of the demo customers, the same people as the account switcher in the header.

Each customer has a real order history in the Shop API, a company with trade or contract prices, and a market. Sindre, the Festool-only cabinetmaker, has the clearest taste; Martin cuts concrete on Hilti Nuron; Lotte is a weekend woodworker on DeWalt XR.

- **Prices and market:** Prices follow the customer’s market (EUR, NOK or SEK) and their price list: trade customers see their company’s trade or contract price, excl. VAT.
- **Personal ranking:** Every list is ranked with the taste vector built from their orders: the battery platform they own, their trade, the gear they buy.
- **Their own records:** Orders, rental bookings and quotes are read from the Shop API. Baskets and bookings are made for that customer.

### What Claude can do

The tools mirror what the storefront does. Search and product tools return cards with packshots, price and stock; every answer links back to the same page in the store.

**Catalogue**

- `search_products`: Free text plus filters: category, brand, platform, trade, typed specs (`concrete.impactEnergy ≥ 8`), price and stock.
- `get_product`: Everything about one tool: specs with units and ETIM codes, versions and kits with what is in the box, price, stock.
- `similar_products`: Alternatives by product type, platform and specs.
- `show_products`: Cards for a shortlist Claude picked itself.
- `list_categories`: The departments and product types.
- `list_brands`: The six manufacturers.

**Battery platforms**

- `battery_platforms`: Every platform with voltage and brand; with a platform, the tools on it and the batteries and chargers that fit; with a SKU, what fits that tool.

**Rental**

- `search_rentals`: Machines for rent, with day, weekend, week and 4-week prices.
- `rental_availability`: Free units per depot and period.

**Basket and checkout**

- `add_to_cart`: Add a version by SKU; returns a basket you keep adding to.
- `view_cart`: Lines, totals incl. and excl. VAT.
- `update_cart_line`: Change a quantity or remove a line.
- `suggest_add_ons`: Accessories, batteries and storage that go with what is in the basket.
- `checkout`: A link that opens the basket in the store’s checkout.

**Signed in** (Ask you to sign in)

- `book_rental`: Reserve a machine into the basket; confirmed at checkout.
- `whoami`: Who you are to the store: company, market, price list and taste.
- `my_orders`: Orders, rentals and quotes, with their stage.
- `recommendations`: Picks ranked with your taste vector.

### Things to try

- (Open) “I’m on Milwaukee M18. Which SDS-plus hammers can I run on the batteries I already have?”
- (Open) “Compare the 18V impact drivers with at least 200 Nm, cheapest first, only what is in stock.”
- (Open) “Which battery and charger should I buy for a Makita LXT circular saw? Put them in a basket.”
- (Open) “I need to break up a concrete floor next weekend in Oslo. What can I rent, and what does it cost?”
- (Open) “Hva er forskjellen på Hilti Nuron og Milwaukee MX FUEL for riving?”
- (Open) “A diamond core drill for 150 mm holes: buy or rent for a week?”
- (Signed in) “What would you recommend for me, and why?”
- (Signed in) “What have I ordered before? Which batteries fit the tools I own?”
- (Signed in) “Book the jackhammer from my nearest depot for Friday to Monday.”
- (Signed in) “Show my open quotes and rentals.”

## Built to be found by search engines and language models

Being connectable is half of it. The other half is being read correctly when someone asks an AI assistant for a cordless breaker or a 5 Ah battery. Everything below is generated from the same Crystallize data as the pages, in four languages.

### A JSON-LD graph on every page

schema.org in `<script type="application/ld+json">`, linked by `@id` so the product, its brand page and its battery platform page describe one graph.

The organisation and website (with a search action) on the front page; Product or ProductGroup with a Product per version on product pages; leased Products on rental pages; CollectionPage with an ItemList on categories, brands and platforms; BreadcrumbList everywhere.

- `ProductGroup / Product`: versions (bare tool, kits) with SKU, GTIN and their own Offer
- `Offer`: price incl. and excl. VAT, volume prices, stock as availability and inventoryLevel, what is in the box, warranty
- `category`: product type path and the ETIM class as a CategoryCode
- `isAccessoryOrSparePartFor · isConsumableFor`: the machines a battery, charger, blade or bit is made for
- `DefinedTerm`: the battery platform, defined on its own page and referenced from every product on it
- `Offer on rentals`: LeaseOut, lease length in hours, the depots as places with address and coordinates

### Typed facts, not text

Each spec is a PropertyValue with the ETIM feature as `propertyID`, a numeric `value`, `unitText` and the UN/CEFACT `unitCode`, and `maxValue` or `minValue` when the field is a bound. Selections carry the option key and the ETIM value code. The same codes are in the Markdown pages and in llms-full.txt.

| Spec | Value | unitCode | ETIM |
|---|---|---|---|
| Voltage | 18 V | VLT | EF000002 |
| Capacity | 5 Ah | AMH | EF001985 |
| Torque, hard joint | 230 Nm | NU | EF002842 |
| No-load speed | 3,400 1/min | RPM | EF011125 |
| Weight without battery | 2.2 kg | KGM | EF011121 |
| Tool holder | SDS-max | – | EF002843 · EV005657 |

### Plain text for language models

- **llms.txt and llms-full.txt:** A Markdown map of the store (markets, categories, platforms, brands, rental) per llmstxt.org, and the full catalogue in one file with prices in three currencies, stock, product type, ETIM class and every typed spec with its codes. https://tools-universe.superfast.shop/llms.txt, https://tools-universe.superfast.shop/llms-full.txt
- **A Markdown version of every page:** Append `.md` to any URL, or send `Accept: text/markdown`. Product pages list specs with unit and ETIM codes, versions, what is in the box, fits and pairings; each page links to the others. Announced in `<head>` with `rel="alternate" type="text/markdown"`. https://tools-universe.superfast.shop/en.md, https://tools-universe.superfast.shop/en/batteries-and-chargers.md
- **robots.txt with named AI crawlers:** GPTBot, ClaudeBot, Claude-SearchBot, PerplexityBot, Google-Extended and others are allowed by name, with a `Content-Signal: search=yes, ai-input=yes`. Basket, account, API and OAuth routes are kept out. https://tools-universe.superfast.shop/robots.txt
- **Sitemap with hreflang:** Every category, product, rental, brand, platform and technology page in four languages, each with its translated alternates and the last change from Crystallize. https://tools-universe.superfast.shop/sitemap.xml
- **Canonicals and hreflang:** Paths are translated per language, so alternates are looked up by item id. Filtered category views point their canonical at the clean category; search results are noindex.
- **Metadata in the HTML for bots:** Next.js streams metadata after the first byte. For crawlers that read HTML without running JavaScript (search engines and AI agents alike) `htmlLimitedBots` puts title, description, canonical and hreflang in `<head>`.

Check it yourself: paste a product URL into Claude with web access and ask for its voltage, weight and price incl. VAT, or open the page’s `.md` version.

---

Web page: https://tools-universe.superfast.shop/en/mcp
Markdown version of this page, for language models. Prices are net (excl. VAT) unless marked incl. VAT.
