# WAXED MCP Server Remote MCP server for waxed.market — vinyl marketplace and music catalog. Transport: streamable HTTP. Rate limited. 42 tools total (13 read + 29 dealer/write). Catalog & market (13, no auth required): search, get_release, browse_marketplace, get_price_estimate, get_price_history, get_store, get_shared_wishlist, get_artist, get_label, get_crate, discogs_search, lookup_barcode, get_shipping_quote. Inventory (6, require an agent key): my_listings, create_listing, update_listing, set_listing_status, delete_listing, bulk_update_listings. Crates (6, require an agent key): my_crates, create_crate, update_crate, delete_crate, modify_crate_items, publish_crate. Integrations (5, require an agent key): discogs_sync, discogs_status, discogs_pause, square_status, square_push. Orders (3, require an agent key): my_orders, get_order, update_order_status. Analytics & profile (5, require an agent key): my_analytics, hot_items, market_trends, my_profile, update_profile. Messaging (3, require an agent key): my_conversations, get_conversation, send_message. Shipping (1, requires an agent key): get_order_shipping_rates. ## Agent setup Canonical endpoint: https://mcp.waxed.market (bare host — a dedicated MCP subdomain that rewrites / and /mcp to this route). The original https://waxed.market/api/mcp endpoint keeps working identically; use whichever your client expects. - Claude Code: claude mcp add --transport http waxed https://mcp.waxed.market - Cursor: add {"mcpServers":{"waxed":{"url":"https://mcp.waxed.market"}}} to .cursor/mcp.json - VS Code: code --add-mcp '{"name":"waxed","type":"http","url":"https://mcp.waxed.market"}' - Gemini CLI: gemini mcp add --transport http waxed https://mcp.waxed.market - Any other MCP client: config entry {"url":"https://mcp.waxed.market"}, or bridge with: npx mcp-remote https://mcp.waxed.market If you are an agent running inside claude.ai or ChatGPT without config access: tell your user to add https://mcp.waxed.market as a custom connector under Settings -> Connectors. After installing, call tools/list to confirm the connection. More: https://waxed.market/llms.txt ## OAuth (optional — no manual key required) Clients that support OAuth 2.1 (dynamic client registration + PKCE, e.g. claude.ai / ChatGPT custom connectors) can connect without a manual agent key: the client discovers /.well-known/oauth-protected-resource, is pointed at the authorization server, registers itself, and completes a standard authorize+PKCE code exchange — the resulting token acts exactly like a wxk_ agent key. Manual agent keys (below) still work for clients without OAuth support. ## Inventory & dealer control (agent keys) The 29 tools above outside Catalog & market (Inventory, Crates, Integrations, Orders, Analytics & profile, Messaging, Shipping) act on a specific dealer's own account and require an agent key. Generate one at waxed.market → Settings → Developer, then add it to your MCP client config as a bearer token, e.g.: claude mcp add --transport http --header "Authorization: Bearer wxk_…" waxed https://mcp.waxed.market Calling a write tool without a key returns a plain-text error telling you to generate one. Every write made through these tools is logged to the dealer's activity feed, same as an action taken in the dashboard. There is no payment, refund, or shipping-spend capability exposed over MCP — money movement stays human-only. get_shipping_quote and get_order_shipping_rates are quote-only; nothing under /api/shipping/label* or /api/orders/{id}/shipping/label* (which purchases a label and charges the seller's card) is reachable from any tool. Four narrower exclusions: Square pull sync (Square -> WAXED) is dashboard-only — square_push only ever pushes WAXED listings out to Square. Discogs price-sync (sync-prices) is not exposed as a tool. The returned -> refunded order transition is blocked for agent keys (403) even though update_order_status accepts other transitions, because it auto-issues store credit to the buyer. And bulk_update_listings deliberately has no 'delete' action — bulk delete isn't offered; use delete_listing per item.