Verified-fit aftermarket parts. New categories often. Kits, reviews, PayPal. AUD free shipping.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Ops-only. Order detail with events and linked tickets. Requires opsToken.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http shop https://fitsthis.com/mcp
Ops-only. Order detail with events and linked tickets. Requires opsToken.
| Argument | Type | Description |
|---|---|---|
| orderId* | string | |
| opsToken* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken",
"orderId"
],
"properties": {
"orderId": {
"type": "string"
},
"opsToken": {
"type": "string"
}
}
}Ops-only. Revenue / order counts / per-product sales. Requires opsToken.
| Argument | Type | Description |
|---|---|---|
| to | string | |
| from | string | |
| opsToken* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken"
],
"properties": {
"to": {
"type": "string"
},
"from": {
"type": "string"
},
"opsToken": {
"type": "string"
}
}
}Ops-only. AliExpress supplier context for an order: AE product/order links, tracking, and which actions are available (refresh AE, refresh tracking, retry fulfill, retry afterpay). Requires opsToken.
| Argument | Type | Description |
|---|---|---|
| orderId* | string | |
| opsToken* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken",
"orderId"
],
"properties": {
"orderId": {
"type": "string"
},
"opsToken": {
"type": "string"
}
}
}Ops-only. Ticket + full message thread. Requires opsToken.
| Argument | Type | Description |
|---|---|---|
| opsToken* | string | |
| ticketId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken",
"ticketId"
],
"properties": {
"opsToken": {
"type": "string"
},
"ticketId": {
"type": "string"
}
}
}Ops-only. Unmet demand_signals by hit_count. Requires opsToken.
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| limit | integer | |
| opsToken* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken"
],
"properties": {
"kind": {
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1
},
"opsToken": {
"type": "string"
}
}
}Ops-only. List FitsThis orders. Requires opsToken = OPS_ADMIN_TOKEN.
| Argument | Type | Description |
|---|---|---|
| q | string | |
| limit | integer | |
| status | string | |
| opsToken* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken"
],
"properties": {
"q": {
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1
},
"status": {
"type": "string"
},
"opsToken": {
"type": "string"
}
}
}Ops-only. List support tickets. Requires opsToken.
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| limit | integer | |
| status | string | |
| opsToken* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken"
],
"properties": {
"kind": {
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1
},
"status": {
"type": "string"
},
"opsToken": {
"type": "string"
}
}
}Ops-only. Pull AliExpress trade.ds.order.get for this FitsThis order (fund/order/issue status). Requires opsToken.
| Argument | Type | Description |
|---|---|---|
| orderId* | string | |
| opsToken* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken",
"orderId"
],
"properties": {
"orderId": {
"type": "string"
},
"opsToken": {
"type": "string"
}
}
}Ops-only. Refresh AliExpress tracking for an order; marks shipped when a tracking number appears. Requires opsToken.
| Argument | Type | Description |
|---|---|---|
| orderId* | string | |
| opsToken* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken",
"orderId"
],
"properties": {
"orderId": {
"type": "string"
},
"opsToken": {
"type": "string"
}
}
}Ops-only. Append internal_note or email_reply (CF Email when EMAIL binding configured). Requires opsToken.
| Argument | Type | Description |
|---|---|---|
| body* | string | |
| channel | string | |
| opsToken* | string | |
| ticketId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken",
"ticketId",
"body"
],
"properties": {
"body": {
"type": "string",
"maxLength": 8000,
"minLength": 1
},
"channel": {
"enum": [
"internal_note",
"email_reply"
],
"type": "string",
"default": "internal_note"
},
"opsToken": {
"type": "string"
},
"ticketId": {
"type": "string"
}
}
}Ops-only. Retry AliExpress ds.order.afterpay for an existing AE order id on this FitsThis order. Often unavailable depending on AE account. Requires opsToken.
| Argument | Type | Description |
|---|---|---|
| orderId* | string | |
| opsToken* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken",
"orderId"
],
"properties": {
"orderId": {
"type": "string"
},
"opsToken": {
"type": "string"
}
}
}Ops-only. Retry AliExpress fulfill for paid/failed orders (place AE order + optional afterpay). Requires opsToken. Prefer adminGetSupplierContext first.
| Argument | Type | Description |
|---|---|---|
| orderId* | string | |
| opsToken* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken",
"orderId"
],
"properties": {
"orderId": {
"type": "string"
},
"opsToken": {
"type": "string"
}
}
}Ops-only. Set ticket status. Requires opsToken.
| Argument | Type | Description |
|---|---|---|
| status* | string | |
| opsToken* | string | |
| ticketId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opsToken",
"ticketId",
"status"
],
"properties": {
"status": {
"enum": [
"pending_confirm",
"open",
"awaiting_customer",
"awaiting_ops",
"resolved",
"closed"
],
"type": "string"
},
"opsToken": {
"type": "string"
},
"ticketId": {
"type": "string"
}
}
}Create a PayPal Checkout order and return the hosted PayPal approve URL (paypal.com). Call via a connected/saved FitsThis MCP connector when the human intends to buy (raw HTTP skips checkout/status UI). productId accepts id OR slug. NO cart. Show messageToHuman EXACTLY ([Pay here] markdown). Wait ~60s then poll getOrderStatus every 60s. Prefer quickCheckout when the human only named a device.
| Argument | Type | Description |
|---|---|---|
| slug | string | Product slug — alias for productId |
| quantity | number | |
| productId | string | Product id or slug (required unless slug is set) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"slug": {
"type": "string",
"description": "Product slug — alias for productId"
},
"quantity": {
"type": "number"
},
"productId": {
"type": "string",
"description": "Product id or slug (required unless slug is set)"
}
}
}Open a FitsThis support ticket. Prefer orderId when known. If email matches the PayPal buyer on that order, the ticket opens immediately; otherwise status is pending_confirm and the human must open confirmUrl on fitsthis.com. Rate-limited. Prefer getOrderStatus first for tracking questions.
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| email* | string | |
| message* | string | |
| orderId | string | |
| subject | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email",
"message"
],
"properties": {
"kind": {
"enum": [
"cancel_before_ship",
"refund_request",
"tracking_help",
"wrong_fit_return",
"address_change",
"other"
],
"type": "string"
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"message": {
"type": "string",
"maxLength": 4000,
"minLength": 10
},
"orderId": {
"type": "string"
},
"subject": {
"type": "string",
"maxLength": 200,
"minLength": 3
}
}
}Find FitsThis maintenance kits/filters compatible with a device model. Returns fit_status, evidence, one price (free shipping included), seller rating, AU ETA. Follow with getProduct + getReviews before recommending purchase.
| Argument | Type | Description |
|---|---|---|
| need | string | e.g. filter, dust bag, 3-month kit |
| deviceQuery | string | |
| deviceModelId | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"need": {
"type": "string",
"description": "e.g. filter, dust bag, 3-month kit"
},
"deviceQuery": {
"type": "string"
},
"deviceModelId": {
"type": "string"
}
}
}Get order status, tracking, timeline, and agent.messageToHuman. Prefer calling via a connected FitsThis MCP connector so the order-status island can render. After createCheckout/quickCheckout, wait ~60s then call this (and every 60s while open). Also call when the human asks for an update. No push webhook. Polling refreshes AliExpress tracking when available.
| Argument | Type | Description |
|---|---|---|
| orderId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orderId"
],
"properties": {
"orderId": {
"type": "string"
}
}
}Full product detail: kit contents, gallery URLs, compatibility, one price with free shipping included, and verified marketplace review summary. Also call getReviews for the review list before recommending purchase.
| Argument | Type | Description |
|---|---|---|
| productId* | string | Product id or slug |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"productId"
],
"properties": {
"productId": {
"type": "string",
"description": "Product id or slug"
}
}
}REQUIRED before recommending a purchase. Returns paginated verified marketplace buyer reviews and FitsThis reviews with provenance labels. Use after getProduct. Empty list means none imported yet — still disclose that.
| Argument | Type | Description |
|---|---|---|
| page | number | |
| pageSize | number | |
| productId* | string | Product id or slug |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"productId"
],
"properties": {
"page": {
"type": "number"
},
"pageSize": {
"type": "number"
},
"productId": {
"type": "string",
"description": "Product id or slug"
}
}
}Identify a device brand/model from free text for FitsThis compatibility matching. Use before recommending parts.
| Argument | Type | Description |
|---|---|---|
| text* | string | User device description, e.g. Roborock S7 MaxV Ultra |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "User device description, e.g. Roborock S7 MaxV Ultra"
}
}
}ONE-SHOT: resolve a verified-fit kit and return a hosted PayPal approve URL. Prefer this for “order me an S7 kit”. Hosts should call this via a connected/saved FitsThis MCP connector (not one-off raw HTTP) so Pay here / status UI can render. Pass deviceQuery (+ optional need) OR productId/slug. If multiple kits match, returns choices instead of checking out. Show messageToHuman EXACTLY (keeps [Pay here](url) markdown). Wait ~60s then poll getOrderStatus every 60s.
| Argument | Type | Description |
|---|---|---|
| need | string | What they want, e.g. 3-month kit, bulk pack, filter |
| slug | string | Product slug alias |
| quantity | number | |
| productId | string | Product id or slug if already known |
| deviceQuery | string | Device model text, e.g. Roborock S7 or S7+ |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"need": {
"type": "string",
"description": "What they want, e.g. 3-month kit, bulk pack, filter"
},
"slug": {
"type": "string",
"description": "Product slug alias"
},
"quantity": {
"type": "number"
},
"productId": {
"type": "string",
"description": "Product id or slug if already known"
},
"deviceQuery": {
"type": "string",
"description": "Device model text, e.g. Roborock S7 or S7+"
}
}
}Search FitsThis catalog of verified-fit aftermarket kits and filters. Prices include free shipping. Results include seller ratings — call getReviews for review text before purchase advice.
| Argument | Type | Description |
|---|---|---|
| limit | number | |
| query | string | |
| deviceModelId | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "number"
},
"query": {
"type": "string"
},
"deviceModelId": {
"type": "string"
}
}
}Leave a FitsThis buyer review for a paid/shipped/delivered order. Requires orderId + the buyer email from PayPal checkout. One review per order. Use after getOrderStatus shows review.canSubmit.
| Argument | Type | Description |
|---|---|---|
| body* | string | Review text, 10–2000 chars |
| email* | string | Buyer email used at PayPal checkout |
| title | string | |
| rating* | number | 1–5 stars |
| orderId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orderId",
"email",
"rating",
"body"
],
"properties": {
"body": {
"type": "string",
"description": "Review text, 10–2000 chars"
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Buyer email used at PayPal checkout"
},
"title": {
"type": "string"
},
"rating": {
"type": "number",
"description": "1–5 stars"
},
"orderId": {
"type": "string"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 14, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.