@elixa/mcp-server
v0.1.0
Published
The universal shopping MCP for AI agents. One install, searches Shopify + WooCommerce + indie merchants, ranked by quality and trust.
Maintainers
Readme
@elixa/mcp-server
The universal shopping MCP for AI agents. One install, search across every connected merchant backend — ranked by quality, completeness, and trust.
- No merchant fees. Merchants are free to be discovered.
- No user fees. The MCP is free to install and use.
- Neutral ranking. Results are ordered by a composite of relevance, data completeness, merchant trust (Tranco domain authority), price-fit, and rating — not by who paid most.
- Runs over stdio. Works with Claude Desktop, Cursor, Zed, and every MCP-compatible client.
Install
Claude Desktop
Edit claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Add the Elixa entry:
{
"mcpServers": {
"elixa": {
"command": "npx",
"args": ["-y", "@elixa/mcp-server"]
}
}
}Restart Claude Desktop. Ask it "find me a wool jumper under £80" and watch it call the search_products tool.
Cursor / Zed / other MCP clients
Same pattern — add an elixa entry under mcpServers pointing at npx -y @elixa/mcp-server.
Tools exposed
search_products
Search every connected backend in parallel. Returns ranked, deduplicated results.
Arguments:
| Arg | Type | Notes |
|---|---|---|
| query | string | Natural-language shopping query (required) |
| min_price, max_price | number | Numeric price band |
| currency | string | ISO 4217 code (USD, GBP, EUR) |
| brand | string | Brand-name filter |
| category | string | Category filter |
| merchant | string | Merchant domain filter |
| availability | "in_stock" / "any" | Restrict to in-stock results |
| min_trust | 0–100 | Minimum merchant trust score |
| min_completeness | 0–100 | Minimum product data completeness |
| min_rating | 0–5 | Minimum product rating |
| sort | relevance / price_asc / price_desc / rating / trust | Sort order |
| limit | 1–50 | Default 20 |
get_product
Get the full product record for an elixa_id returned from search_products.
find_alternatives
Given a product, return similar alternatives — cheaper by default, or from higher-trust merchants.
Backends
| Backend | Status | Coverage | |---|---|---| | Elixa (our index) | Always on | WooCommerce, Magento, custom storefronts, DTC opt-ins | | Shopify Catalog MCP | Opt-in via env vars | All eligible Shopify stores | | Amazon PAAPI | Roadmap | Amazon US catalog | | Etsy Open API | Roadmap | Handmade + vintage | | eBay Finding API | Roadmap | Resale + refurbished |
Configuration
Everything's env-var driven. Defaults point at the live Elixa API so the server works out of the box.
| Env var | Default | Notes |
|---|---|---|
| ELIXA_API_BASE | https://api.elixa.app | Root of the Elixa REST API |
| ELIXA_API_KEY | none | Optional; Elixa's free tier is unauthenticated |
| SHOPIFY_CATALOG_MCP_URL | none | Shopify's Catalog MCP endpoint — enables the Shopify backend |
| SHOPIFY_CLIENT_ID | none | Shopify Dev Dashboard → Catalog section |
| SHOPIFY_CLIENT_SECRET | none | ditto |
| BACKEND_TIMEOUT_MS | 5000 | Per-backend timeout; slow backends are dropped, not waited on |
| DEFAULT_LIMIT | 20 | Default result count |
| ELIXA_AFFILIATE_TAG | elixa | Injected as elixa_ref=… query param on outbound URLs |
How ranking works
Every result is scored 0–1 on five axes and a weighted composite decides the final order:
composite = 0.40 · relevance (keyword match to query)
+ 0.20 · completeness (0–100, normalised)
+ 0.15 · trust (Tranco domain rank, normalised)
+ 0.15 · price_fit (how well it matches price intent)
+ 0.10 · rating (0–5, normalised)Weights are defaults. If you're running the server and want different behaviour (e.g. weight trust higher for a luxury use case), fork it — the ranker is deliberately one small file.
Development
npm install
npm run dev # run from source with tsx
npm run build # compile to dist/
npm start # run the compiled buildLicense
MIT. No warranty. Use at your own discretion.
