Inspiration

On Aug 5, Shopify made a million storefronts agent-ready overnight — identical catalog/cart/checkout WebMCP tools everywhere. The question that interested us: what does an agent still fail at on a real store? Answer: everything a human clerk knows. "Which tape for plantar fasciitis if I sweat a lot?" returned nothing useful.

What it does

On tapegeeks.com and geartopdesign.com, document.modelContext.getTools() returns 15 tools each: Shopify's 10 defaults + 5 domain tools that encode merchant expertise — injury-to-product recommendation with taping-guide URLs, kids nasal-strip sizing with medical guardrails, hat sizing by head circumference, duties/shipping by country, wholesale tiers. Read-only, data-driven, with an on-page results panel so the human sees what their agent did, and GA4 telemetry (webmcp_tool_call) because server analytics can't see WebMCP. We also rebuilt the knowledge layer Shopify's own FAQ tool reads: 7 to 77 answers (TapeGeeks) and 0 to 45 (GearTOP), mined from the query log, our blogs' FAQPage schema, Google People-Also-Ask, and Reddit.

Two doors, one brain

TapeGeeks also runs "Tappy," a human-facing AI chat concierge (a Storefront MCP client — proprietary, not part of this submission's code). The WebMCP tools are the second door into the same knowledge: Tappy serves humans conversationally, the WebMCP tools serve the visitor's own agent instantly at $0 per call — and both read the same data file. Update webmcp-data.json once (a price, a sizing rule, a shipping fact) and the human door and the agent door stay in sync.

How we built it

Vanilla JS registered via registerTool(tool, {signal}) with one AbortController per group; decision tables in a JSON asset (edit data, not code); tight schemas (enum, required, additionalProperties:false); descriptions written as instructions with explicit negative cases ("Do NOT use for cart — Shopify's update_cart does that") so a model picks correctly among 15 tools. Shipped as Shopify theme assets via the Admin API. A Node harness stubs modelContext and tests every tool.

Challenges

The old navigator.modelContext.provideContext draft is everywhere in tutorials and dead since March; argument shapes changed mid-build with Shopify's UCP migration; and the live theme turned out to hard-code its widgets, so app-extension deploys silently did nothing — we ship straight into the theme.

Accomplishments

Live on two real revenue-producing stores, verified end-to-end in Chrome; a store "mystery-shopper" journey eval that went 3-stalled-of-5 to 5-of-5 completed; a reusable MIT-licensed pattern any Shopify merchant can adapt in a day.

What we learned

The moat isn't tool plumbing — it's encoded domain knowledge and description quality. And the knowledge layer (the FAQ tool's data) matters as much as custom tools: it's what every agent quotes.

What's next

Description tuning against real agent traffic via the GA4 events; a generator that builds a store's domain tools from its own blog FAQPage schema automatically.

Try it: open tapegeeks.com in ChatGPT's desktop browser and ask: "I have plantar fasciitis and sweat a lot — which tape should I buy, and how do I apply it?"

Built With

Share this project:

Updates

Submission history