TrustRails standardises messy retailer feeds into one predictable source: 26,000+ deduplicated UK electronics products across 7 retailers. Connect an agent over MCP, or query the REST API and SDK directly.
Save weeks of integration time and focus on building your project, not babysitting product feeds.
Two ways to connect an agent, both live today. Use the hosted endpoint if your client supports remote MCP servers over HTTP; use the npm package if it only supports local (stdio) servers. That includes the free tier of Claude Desktop.
https://trustrails.app/api/mcp: MCP over JSON-RPC 2.0, no API key required, rate limited to 50 requests/hour per IP.
Claude Code:
claude mcp add --transport http trustrails https://trustrails.app/api/mcp
Cursor (.cursor/mcp.json):
{
"mcpServers": {
"trustrails": {
"url": "https://trustrails.app/api/mcp"
}
}
}Claude Desktop: remote HTTP servers are added under Settings → Connectors → Add custom connector, pasting the URL above (paid plans). On the free plan, or for any client without remote MCP support, use the npm package below instead.
@trustrails/mcp-server calls the same public API over HTTP, run locally via npx. Add this block to Claude Desktop's claude_desktop_config.json or Cursor's .cursor/mcp.json:
{
"mcpServers": {
"trustrails": {
"command": "npx",
"args": ["-y", "@trustrails/mcp-server"],
"env": {
"TRUSTRAILS_API_KEY": "mcp-public-2026"
}
}
}
}Or for Claude Code:
claude mcp add trustrails -e TRUSTRAILS_API_KEY=mcp-public-2026 -- npx -y @trustrails/mcp-server
| Env var | Default |
|---|---|
| TRUSTRAILS_API_KEY | mcp-public-2026 |
| TRUSTRAILS_BASE_URL | https://trustrails.app |
Tools (identical on both):
search_products filters by query, brand, category, and price range. Results include an offer count so agents can surface cross-retailer price comparisons.get_product returns full specs, stock, delivery time, and every retailer's price for one product ID.Install first:
npm install @trustrails/sdk
import TrustRails from "@trustrails/sdk";
const trustrails = new TrustRails(process.env.TRUSTRAILS_KEY);
// The SDK sets Authorization: Bearer <TRUSTRAILS_KEY> automatically
async function main() {
// Use query to refine within brand + category (model lines, variants, series names)
const res = await trustrails.search({
brand: "Samsung",
category: "TVs",
query: "qled", // narrows to Samsung QLED TVs specifically
maxPrice: 1000,
});
console.log(res.products);
// [{
// id: "samsung-qled-001",
// title: "Samsung 55\" QLED 4K Smart TV",
// brand: "Samsung",
// price: 799,
// availability: "in_stock",
// category: "TVs",
// product_type: "product",
// ...
// }]
}
main();curl -s "https://trustrails.app/api/search?brand=Samsung&category=TVs&query=qled&max_price=1000" \ -H "Authorization: Bearer $TRUSTRAILS_KEY"
When to use query: Use it to refine within a brand and category - model lines, series names, variants, or model numbers. Examples: query="qled", query="neo", query="WH-1000XM5". Never put category names (query="tablet" → use category="Tablets"), brand names, product family names (MacBook, Galaxy, ThinkPad), or prices in query - use the brand, category, and min_price/max_price filters instead.
See Auth & rate limits below for keys, rate limits, and contact options. Or try the Live Explorer (no auth required).
| Endpoint | Description | Example |
|---|---|---|
| GET /api/search | Search products. Returns summary data (title, price, availability). For full specs, use /api/product/[id] | /api/search?brand=HP&category=Laptops&lite=true |
| GET /api/product/[id] | Full details: complete specs, description, stock, delivery, and retailer source | /api/product/usb001 |
| POST /api/mcp | MCP protocol endpoint (JSON-RPC 2.0). No auth required. Exposes search_products and get_product as tools. | see MCP quickstart above |
| GET /api/health | Check API status (no auth) | /api/health |
/api/search, /api/product/[id]) require an Authorization: Bearer <key> header. The public key mcp-public-2026 works out of the box./api/mcp) and Explorer endpoints need no key at all, but are still rate limited.X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers./api/health is open and not rate limited.Errors return a flat JSON object with an error string:
401 Unauthorized
{
"error": "Unauthorized"
}429 Rate limited
{
"error": "Rate limit exceeded",
"resetAt": "2026-09-24T15:00:00.000Z"
}400 Validation error
{
"error": "Invalid min_price parameter"
}