{
  "serverInfo": {
    "name": "haulbound",
    "version": "0.2.0"
  },
  "name": "haulbound",
  "title": "Haulbound",
  "version": "0.2.0",
  "description": "Manage an eBay seller account from an AI assistant: orders, listings, stock, fees, payouts and traffic. Hosted and remote — sign in with eBay, with no eBay developer account, no API keys and nothing to install. Every write previews and waits for confirmation, including refunds. There is no payout tool and no cancellation tool.",
  "websiteUrl": "https://haulbound.com",
  "documentationUrl": "https://haulbound.com/connect-claude-to-ebay",
  "supportEmail": "support@haulbound.com",
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://haulbound.com/mcp"
    }
  ],
  "authentication": {
    "required": true,
    "type": "oauth2",
    "schemes": [
      "oauth2"
    ],
    "note": "OAuth 2.1 with dynamic client registration; discovery via /.well-known/oauth-protected-resource"
  },
  "pricing": {
    "model": "subscription",
    "amount": "19",
    "currency": "USD",
    "period": "month",
    "trialDays": 14
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "prompts": {
      "listChanged": false
    }
  },
  "prompts": [
    {
      "name": "morning_triage",
      "title": "Morning triage — what needs my attention today?",
      "description": "What needs shipping, what money moved, anything needing action — one daily summary."
    },
    {
      "name": "month_end_review",
      "title": "Month-end money review — what did eBay actually cost me?",
      "description": "A one-page monthly P&L: sales, every fee, refunds, payouts, honest net."
    },
    {
      "name": "listing_health_check",
      "title": "Listing health check — why isn't this selling?",
      "description": "Funnel diagnosis for a listing: visibility, click-through, conversion, and one concrete fix."
    }
  ],
  "tools": [
    {
      "name": "get_listings",
      "title": "Get listings (stock + prices together)",
      "description": "Every listing with stock, price, listing status and total inventory value, in one call. Covers eBay Inventory-model listings only — classic listings are invisible to this API, so use audit_unmanaged_listings before treating a total as complete.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "description": "Listings to return (default 25)",
            "minimum": 1,
            "maximum": 100
          },
          "offset": {
            "type": "integer",
            "description": "Pagination offset (default 0)",
            "minimum": 0
          }
        }
      },
      "annotations": {
        "title": "Get listings (stock + prices together)",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_orders",
      "title": "Get orders",
      "description": "Orders newest first: filter by creation date, by change date (daily triage), by fulfillment status, or look up ids in batch.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "createdAfter": {
            "type": "string",
            "description": "ISO 8601 date-time, e.g. 2026-08-01T00:00:00.000Z"
          },
          "createdBefore": {
            "type": "string",
            "description": "ISO 8601 date-time"
          },
          "modifiedAfter": {
            "type": "string",
            "description": "ISO 8601 date-time — orders CHANGED since then. Not combinable with created*"
          },
          "modifiedBefore": {
            "type": "string",
            "description": "ISO 8601 date-time"
          },
          "orderIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "maxItems": 50,
            "description": "Batch lookup by order id (max 50). Not combinable with filters or pagination."
          },
          "fulfillmentStatus": {
            "type": "string",
            "enum": [
              "UNSHIPPED",
              "SHIPPED"
            ],
            "description": "UNSHIPPED = not yet dispatched or partially dispatched. SHIPPED = fully dispatched."
          },
          "includeTaxBreakdown": {
            "type": "boolean",
            "description": "Adds tax detail AND changes what the order total includes — read totalBasis in the response."
          },
          "limit": {
            "type": "integer",
            "description": "Max orders to return (default 25)",
            "minimum": 1,
            "maximum": 200
          }
        }
      },
      "annotations": {
        "title": "Get orders",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_order",
      "title": "Get one order",
      "description": "Full detail for one order: line items, shipping address, costs, refunds; optional tracking read-back.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "description": "The eBay order id from get_orders"
          },
          "includeTaxBreakdown": {
            "type": "boolean",
            "description": "Adds tax detail and changes the total's meaning — read totalBasis in the response."
          },
          "includeTracking": {
            "type": "boolean",
            "description": "Also return uploaded tracking numbers, carriers and ship dates."
          }
        },
        "required": [
          "orderId"
        ]
      },
      "annotations": {
        "title": "Get one order",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "list_inventory",
      "title": "List inventory items",
      "description": "Inventory items with SKU, title, condition and quantity.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "description": "Items per page (default 25, max 100)",
            "minimum": 1,
            "maximum": 100
          },
          "offset": {
            "type": "integer",
            "description": "Pagination offset (default 0)",
            "minimum": 0
          }
        }
      },
      "annotations": {
        "title": "List inventory items",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_inventory_item",
      "title": "Get inventory item",
      "description": "Full product data for one SKU, or a multi-variation group via groupKey.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string",
            "description": "A SKU. Give this OR groupKey."
          },
          "groupKey": {
            "type": "string",
            "description": "An inventory item group key, from a listing's partOfGroup. Give this OR sku."
          }
        }
      },
      "annotations": {
        "title": "Get inventory item",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_offers",
      "title": "Get offers for a SKU",
      "description": "Offers for a SKU, including offer id, price, quantity and listing status.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string"
          }
        },
        "required": [
          "sku"
        ]
      },
      "annotations": {
        "title": "Get offers for a SKU",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_transactions",
      "title": "Get financial transactions",
      "description": "Sales, refunds, fees, credits, disputes and shipping label charges.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "dateFrom": {
            "type": "string",
            "description": "ISO 8601 date-time, e.g. 2026-08-01T00:00:00.000Z"
          },
          "dateTo": {
            "type": "string",
            "description": "ISO 8601 date-time"
          },
          "transactionType": {
            "type": "string",
            "enum": [
              "SALE",
              "REFUND",
              "CREDIT",
              "DISPUTE",
              "NON_SALE_CHARGE",
              "SHIPPING_LABEL",
              "TRANSFER",
              "ADJUSTMENT"
            ]
          },
          "limit": {
            "type": "integer",
            "description": "Default 50",
            "minimum": 1,
            "maximum": 200
          }
        }
      },
      "annotations": {
        "title": "Get financial transactions",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_payouts",
      "title": "Get payouts",
      "description": "Payouts to the seller's bank account, with totals paid, failed and pending.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "description": "Default 20",
            "minimum": 1,
            "maximum": 100
          }
        }
      },
      "annotations": {
        "title": "Get payouts",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_seller_funds_summary",
      "title": "Get seller funds summary",
      "description": "Funds on hold, processing, and available for payout.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "title": "Get seller funds summary",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_traffic_report",
      "title": "Get listing traffic report",
      "description": "Listing impressions, page views and conversion rate over a date range.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "dateFrom": {
            "type": "string",
            "description": "YYYYMMDD, e.g. 20260801"
          },
          "dateTo": {
            "type": "string",
            "description": "YYYYMMDD, e.g. 20260814"
          },
          "dimension": {
            "type": "string",
            "enum": [
              "DAY",
              "LISTING"
            ],
            "default": "DAY",
            "description": "Group results by day or by listing"
          }
        },
        "required": [
          "dateFrom",
          "dateTo"
        ]
      },
      "annotations": {
        "title": "Get listing traffic report",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_seller_standards",
      "title": "Get seller standards profile",
      "description": "Seller performance level and the metrics behind it, optionally with INAD/INR service-metric ratings vs peers.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeServiceMetrics": {
            "type": "boolean",
            "description": "Also fetch 'item not as described' / 'item not received' ratings vs peer benchmark."
          },
          "evaluation": {
            "type": "string",
            "enum": [
              "CURRENT",
              "PROJECTED"
            ],
            "description": "Service-metrics cycle (default PROJECTED)."
          }
        }
      },
      "annotations": {
        "title": "Get seller standards profile",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "audit_unmanaged_listings",
      "title": "Find listings Haulbound cannot manage yet",
      "description": "Counts active eBay listings created outside eBay's newer Inventory model — the ones the other listing tools cannot see or change.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "maxPages": {
            "type": "integer",
            "description": "Pages of 200 listings to walk (default 3, max 5)",
            "minimum": 1,
            "maximum": 5
          }
        }
      },
      "annotations": {
        "title": "Find listings Haulbound cannot manage yet",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_account_status",
      "title": "Get Haulbound account status",
      "description": "The seller's own Haulbound subscription: plan, days remaining, and the links to manage billing or disconnect.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "title": "Get Haulbound account status",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "mark_order_shipped",
      "title": "Mark order shipped (write)",
      "description": "Mark an order shipped with a carrier and tracking number. Previews first and requires confirmation.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string"
          },
          "trackingNumber": {
            "type": "string"
          },
          "carrierCode": {
            "type": "string",
            "description": "Carrier code, e.g. \"USPS\", \"FedEx\", \"UPS\", \"DHL\""
          },
          "confirm": {
            "type": "boolean",
            "default": false,
            "description": "Must be true to execute. Leave false to preview the action."
          }
        },
        "required": [
          "orderId",
          "trackingNumber",
          "carrierCode"
        ]
      },
      "annotations": {
        "title": "Mark order shipped (write)",
        "readOnlyHint": false,
        "destructiveHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "update_price",
      "title": "Update listing price (write)",
      "description": "Change the price of one listing. Previews first and requires confirmation.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string"
          },
          "offerId": {
            "type": "string",
            "description": "From get_offers"
          },
          "price": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "New price in the listing currency"
          },
          "currency": {
            "type": "string",
            "description": "Currency code. Defaults to the listing's existing currency."
          },
          "confirm": {
            "type": "boolean",
            "default": false,
            "description": "Must be true to execute. Leave false to preview the action."
          }
        },
        "required": [
          "sku",
          "offerId",
          "price"
        ]
      },
      "annotations": {
        "title": "Update listing price (write)",
        "readOnlyHint": false,
        "destructiveHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "update_quantity",
      "title": "Update listing quantity (write)",
      "description": "Change the available quantity of one listing. Previews first and requires confirmation.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string"
          },
          "offerId": {
            "type": "string",
            "description": "From get_offers"
          },
          "quantity": {
            "type": "integer",
            "description": "New available quantity",
            "minimum": 0
          },
          "confirm": {
            "type": "boolean",
            "default": false,
            "description": "Must be true to execute. Leave false to preview the action."
          }
        },
        "required": [
          "sku",
          "offerId",
          "quantity"
        ]
      },
      "annotations": {
        "title": "Update listing quantity (write)",
        "readOnlyHint": false,
        "destructiveHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "issue_refund",
      "title": "Issue a refund (write)",
      "description": "Refund a buyer — full order, partial, or specific line items. Previews first, shows existing refunds, and requires confirmation with a double-refund guard.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "description": "The eBay order id from get_orders"
          },
          "reason": {
            "type": "string",
            "enum": [
              "BUYER_CANCEL",
              "SELLER_CANCEL",
              "ITEM_NOT_RECEIVED",
              "BUYER_RETURN",
              "ITEM_NOT_AS_DESCRIBED",
              "OTHER_ADJUSTMENT",
              "SHIPPING_DISCOUNT"
            ],
            "description": "Why the refund is happening. Some values affect seller metrics — ask, don't guess."
          },
          "amount": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "Order-level refund amount. Give this OR lineItems, not both."
          },
          "lineItems": {
            "type": "array",
            "description": "Line-item refunds [{lineItemId, amount}]. Give this OR amount, not both.",
            "items": {
              "type": "object",
              "properties": {
                "lineItemId": {
                  "type": "string"
                },
                "amount": {
                  "type": "number",
                  "exclusiveMinimum": 0
                }
              },
              "required": [
                "lineItemId",
                "amount"
              ]
            }
          },
          "comment": {
            "type": "string",
            "description": "Optional note to the buyer (max 100 characters)"
          },
          "expectedPriorRefunds": {
            "type": "integer",
            "minimum": 0,
            "description": "The count of existing refunds the preview reported. REQUIRED on confirm if the order already has any refunds — the call aborts without it. The confirm re-reads the order and refunds nothing if the count has changed."
          },
          "confirm": {
            "type": "boolean",
            "default": false,
            "description": "Must be true to execute. Leave false to preview the action."
          }
        },
        "required": [
          "orderId",
          "reason"
        ]
      },
      "annotations": {
        "title": "Issue a refund (write)",
        "readOnlyHint": false,
        "destructiveHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "find_offer_eligible_listings",
      "title": "Find listings eligible for offers to watchers",
      "description": "Listings with interested buyers (watchers or cart-abandoners) the seller can send a private discount offer to.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "description": "Default 25",
            "minimum": 1,
            "maximum": 200
          },
          "offset": {
            "type": "integer",
            "description": "Pagination offset (default 0)",
            "minimum": 0
          }
        }
      },
      "annotations": {
        "title": "Find listings eligible for offers to watchers",
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "send_offer_to_watchers",
      "title": "Send a discount offer to interested buyers (write)",
      "description": "Sends a private discount offer for one listing to everyone watching it. Previews first and requires confirmation.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "string",
            "description": "eBay item number, from find_offer_eligible_listings"
          },
          "discountPercentage": {
            "type": "number",
            "minimum": 5,
            "description": "Percent off the listed price (minimum 5). Give this OR price, not both."
          },
          "price": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "Fixed offer price, at least 5% below the listed price. Give this OR discountPercentage."
          },
          "currency": {
            "type": "string",
            "description": "Only with price. Defaults to the listing marketplace's own currency."
          },
          "quantity": {
            "type": "integer",
            "description": "Buyer must take this many to get the price (default 1)",
            "minimum": 1
          },
          "message": {
            "type": "string",
            "description": "Optional plain-text note to buyers (no HTML, max 2000 chars)"
          },
          "confirm": {
            "type": "boolean",
            "default": false,
            "description": "Must be true to execute. Leave false to preview the action."
          }
        },
        "required": [
          "listingId"
        ]
      },
      "annotations": {
        "title": "Send a discount offer to interested buyers (write)",
        "readOnlyHint": false,
        "destructiveHint": true,
        "openWorldHint": true
      }
    }
  ],
  "resources": []
}