MCP
Agent access over MCP.
POST https://middleware.treadready.com/mcp is a stateless Streamable-HTTP MCP endpoint. Same bearer API keys, same org scoping, same scopes — enforced per tool. REST routes and MCP tools are thin wrappers over the same resource layer, so behavior is identical.
Connecting
Client config
{
"url": "https://middleware.treadready.com/mcp",
"headers": { "Authorization": "Bearer trk_live_XXXX" }
}POST only
GET and DELETE answer 405. There is no SSE stream and no session — each call is stateless.
Org scoping
All data is scoped to the org that owns the key. A key only ever sees its own org's data — there is no org parameter anywhere in the API.
Products & inventory
| Tool | Inputs | Notes |
|---|---|---|
| list_products | — | Active products with stock levels. |
| get_product | sku | Case-insensitive. |
| upsert_product | sku, name?, description?, status?, stock_qty?, bin_location? | Create requires sku + name. |
| push_inventory | rows: [{ sku, qty }] | Bulk stock set; queues to hub if unreachable. |
Orders
| Tool | Inputs | Notes |
|---|---|---|
| list_orders | status? | — |
| get_order | id_or_po_number | — |
| create_order | po_number?, buyer_org_id?, ship_to?, notes?, lines: [{ sku, quantity, unit_price? }] | — |
| acknowledge_order | id_or_po_number | — |
| update_order_status | id_or_po_number, status | — |
Warranty
| Tool | Inputs | Notes |
|---|---|---|
| list_warranty_claims | status? | — |
| get_warranty_claim | id_or_claim_number | — |
| create_warranty_claim | description, sku?, dot_number?, quantity?, customer_ref? | — |
| update_warranty_claim | id_or_claim_number, status?, resolution? | — |
Telematics
| Tool | Inputs | Notes |
|---|---|---|
| telematics_list_connections | — | Masked credential hints only, never secrets. |
| telematics_connection_health | connection_id | — |
| telematics_run_connection | connection_id | — |
| telematics_replay_range | connection_id, from, to | Window ≤ 31 days. |
Storefront
Passthroughs to the hub's consumer storefront API for agents building dealer sites. The publishable storefront key is stored server-side on the org's hub connection — agents never see or send it. dealer_slug defaults to the org's portal slug. Scopes: storefront:read / storefront:write.
| Tool | Inputs | Notes |
|---|---|---|
| storefront_get_site | dealer_slug? | — |
| storefront_list_inventory | dealer_slug?, query? (size, category, page…) | — |
| storefront_list_slots | dealer_slug?, query? (date range, service…) | — |
| storefront_create_booking | dealer_slug?, payload | — |
| storefront_create_order | dealer_slug?, payload | — |
| storefront_create_quote | dealer_slug?, payload | — |
Direct storefront access
Consumer dealer-site embeds can also call the hub's storefront API directly with a publishable key at
{hub_url}/api/storefront/v1 (OpenAPI at …/openapi.yaml). The MCP storefront tools exist so agents can do it without handling keys.