# SellerChamp MCP Server
An MCP (Model Context Protocol) server that connects AI agents to the [SellerChamp](https://www.sellerchamp.com/) API for inventory reporting, cross-listing analysis, and multi-marketplace management.
## Why This Exists
SellerChamp is a great platform for managing multi-marketplace ecommerce, but its built-in reporting has gaps. This MCP server fills those gaps by giving AI agents (Claude, etc.) direct access to your SellerChamp data so you can:
- **Find missing listings** — discover SKUs listed on one marketplace but missing from another (any pair: Amazon, eBay, Shopify, Walmart, etc.)
- **Cross-listing analysis** — filter your catalog by per-marketplace status across any combination of connected marketplaces
- **Bulk inventory reporting** — scan your entire catalog and get structured data back, not spreadsheets
- **Order management** — query, filter, and update orders across all marketplaces from one interface
None of these workflows are available as a single action in SellerChamp's UI.
## Available Tools (20)
### Marketplace Accounts
| Tool | Description |
|------|-------------|
| `sellerchamp_get_marketplace_accounts` | Get all connected marketplace accounts (Amazon, eBay, Shopify, etc.) with account IDs |
### Orders
| Tool | Description |
|------|-------------|
| `sellerchamp_get_orders` | List orders with filtering by status, marketplace, date range |
| `sellerchamp_get_order` | Get full order details (items, shipping address, tracking) |
| `sellerchamp_update_order` | Update tracking number, carrier, or notes |
| `sellerchamp_acknowledge_order` | Acknowledge/confirm an order |
### Products
| Tool | Description |
|------|-------------|
| `sellerchamp_get_products` | Get products with filtering (SKU, ASIN, UPC, marketplace, tags) |
| `sellerchamp_get_products_compact` | Get products with essential fields only (lighter response) |
| `sellerchamp_get_product` | Get a single product by SKU or product ID |
| `sellerchamp_update_product` | Update pricing, quantity, title, condition, and more |
| `sellerchamp_set_product_pricing` | Set min/max/retail/cost price by SKU |
| `sellerchamp_set_product_quantity` | Set available quantity by SKU |
| `sellerchamp_bulk_update_products` | Bulk update up to 1,000 products at once |
### Cross-Listing & Analysis
| Tool | Description |
|------|-------------|
| `sellerchamp_find_missing_listings` | Find SKUs on one marketplace but missing from another — any pair (full catalog scan) |
| `sellerchamp_find_crosslist_candidates` | Find products by per-marketplace status filters across any connected marketplace |
### Variants
| Tool | Description |
|------|-------------|
| `sellerchamp_get_variants` | Get all variants for a product (sizes, colors, etc.) |
| `sellerchamp_update_variant` | Update a variant's pricing or inventory |
### Inventory Locations
| Tool | Description |
|------|-------------|
| `sellerchamp_get_inventory_locations` | Get warehouse bin locations for a product |
| `sellerchamp_bulk_update_inventory` | Bulk update inventory quantities across locations (up to 1,000) |
### Manifests
| Tool | Description |
|------|-------------|
| `sellerchamp_get_manifests` | Get manifests (listing collections), optionally filtered by marketplace |
## Setup
### Prerequisites
- Python 3.8+
- A SellerChamp account with API access
- Your API token (found in SellerChamp → Settings → API Settings)
### Install
```bash
git clone https://github.com/WowWashington/sellerchamp-mcp.git
cd sellerchamp-mcp
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
### Configure Claude Desktop
Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"sellerchamp": {
"command": "/path/to/sellerchamp-mcp/venv/bin/python",
"args": ["/path/to/sellerchamp-mcp/server.py"],
"env": {
"SELLERCHAMP_API_TOKEN": "your_api_token_here"
}
}
}
}
```
Replace `/path/to/sellerchamp-mcp` with the actual path where you cloned the repo.
### Run Standalone
```bash
export SELLERCHAMP_API_TOKEN="your_api_token_here"
./run.sh
```
## Example Workflows
### Find items on Amazon but missing from eBay
```
Use sellerchamp_find_missing_listings with:
source_marketplace: "amazon"
missing_from_marketplace: "ebay"
```
### Find items on Shopify but missing from Walmart
```
Use sellerchamp_find_missing_listings with:
source_marketplace: "shopify"
missing_from_marketplace: "walmart"
```
### Legacy call (still works)
```
Use sellerchamp_find_missing_listings with missing_from="ebay"
```
Automatically sets source to "amazon" for backwards compatibility.
### Cross-list candidates: active on Amazon, missing from eBay
```
Use sellerchamp_find_crosslist_candidates with:
marketplace_filters: '{"amazon": "active", "ebay": "missing"}'
min_quantity: 1
```
### Cross-list across 3 marketplaces
```
Use sellerchamp_find_crosslist_candidates with:
marketplace_filters: '{"amazon": "active", "shopify": "active", "walmart": "missing"}'
```
Returns SKUs active on both Amazon and Shopify but not listed on Walmart.
### Filter by country (e.g. Canada only)
```
Use sellerchamp_find_missing_listings with:
source_marketplace: "amazon"
missing_from_marketplace: "ebay"
country_code: "CA"
```
### Get open orders from a specific marketplace
```
1. Use sellerchamp_get_marketplace_accounts to get the account ID
2. Use sellerchamp_get_orders with order_status="open" and the marketplace_account_id
```
### Bulk price update
```
Use sellerchamp_bulk_update_products with an array of:
{ "sku": "ABC-123", "retail_price": 29.99, "min_price": 24.99 }
```
## Rate Limiting
The server enforces SellerChamp's API limit of 120 requests per 60 seconds using a sliding window rate limiter. It caps at 110 requests per window to leave headroom for automatic retries. When the limit is reached, the server sleeps until capacity is available (logged to stderr for visibility).
Automatic retries with exponential backoff handle transient 429/5xx errors.
## Technical Details
- **Protocol**: MCP (Model Context Protocol) over JSON-RPC 2.0 on stdin/stdout
- **Language**: Python 3
- **Dependencies**: `requests` (with urllib3 retry adapter)
- **Catalog scan time**: ~2 minutes for 20,000 listings (rate-limit bound)
## License
MIT