An API, a widget, and an MCP server.
ShopFlare is a self-contained Worker. Three surfaces are exposed publicly: a REST-ish search API for any frontend, a vanilla-JS embeddable widget, and an MCP server so AI assistants can query your catalogue directly.
Embeddable widget
~22KB IIFE bundle. Drop it on any page, replace the default search input.
<!-- In your WooCommerce theme --> <script src="https://your-store-search.workers.dev/widget.js"></script> <script> FlareSearch.init({ apiBaseUrl: 'https://your-store-search.workers.dev', mode: 'dropdown', // or 'fullscreen' theme: { primaryColor: '#F38020' }, placeholder: 'Search for parts, brands, bike models...', }); </script>
Search API
CORS-enabled, anonymous, rate-limited. The widget talks to this; you can too.
POST https://your-store-search.workers.dev/api/search/autocomplete Content-Type: application/json { "query": "1971 norton commando", "limit": 20 }
POST https://your-store-search.workers.dev/api/search/event
{ "type": "click", "query": "norton", "productId": 1234, "position": 3 }
GET https://your-store-search.workers.dev/api/search/fitment/:id
MCP server
Streamable HTTP transport, bearer-token auth. Add to Claude Desktop, Cursor, or any MCP client to make your catalogue a tool.
# claude_desktop_config.json { "mcpServers": { "your-store": { "url": "https://your-store-search.workers.dev/mcp", "headers": { "Authorization": "Bearer YOUR_MCP_TOKEN" } } } }
| Tool | Signature | Description |
|---|---|---|
| search | (query, type?, limit?) | Multi-type sectioned search across products, posts, pages, categories, brands, fitments |
| get_product | (id) | Full product with aliases, parsed categories, brands, manuals, and known-as names |
| find_parts_for_bike | (year, make, model) | Resolve year + make + model to a fitment, return all matching parts joined to products |
| nearest_fitment | (year, make, fuzzy_model) | Fuzzy-match a fitment using British-bike synonyms (e.g. Bonneville โ T120/T140) |
| check_fitment_availability | (fitment_id) | Stock-aware feasibility check across all parts in a fitment |
| find_similar_products | (product_id) | Adjacent products via the product_similarity index |
| find_manuals | (query?, make?, sku?) | Filter the PDF manuals library by query, make, or SKU |
| list_models | (make?, search?) | List motorcycle models, filterable by make or partial name |
| list_brands | () | All brands with product counts |
| list_categories | () | Full category tree with product counts |
| get_fitment | (fitment_id) | Fitment with featured image, plate code, and feasibility data |
| track_event | (event_type, payload) | Log a search or click event to the analytics store |
| get_store_info | () | Store-level metadata: counts, last sync, available data types |
Tool list reflects the standard ShopFlare install for stores with motorcycle fitments. Stores without fitments get the relevant subset. Custom installs can expose additional tools for custom data types.
What people build with this
A site chat widget
Hook ShopFlare's MCP server up to an L2Chat agent and customers can ask "I have a 1971 Norton Commando, what oil filter do I need?" and get a real answer with a buy link.
A phone agent
Connect ShopFlare to an ElevenLabs voice agent and your phone-orders staff get the catalogue read out to them as they take the call.
Internal tools
Your warehouse team can ask Claude Desktop "show me everything we have in stock for a Triumph Bonneville T120 1969" and get a sortable table.
Customer's own assistant
Power users can add your store to their own AI assistant. They search your catalogue from inside the tools they already use.