Skip to main content
Glama
singhjitesh889-blip

mcp-commerce-starter

README.md
# mcp-commerce-starter

An MCP server is how you hand an AI agent a real set of hands. This one exposes
a Shopify commerce backend — orders, inventory, logistics, fulfillment — as ~22
typed tools an agent can actually call, with the guardrails that keep it from
doing something irreversible.

It's ~1,100 lines of Node.js, and it's a *real* server, not a tutorial. It
handles pagination over large order sets, idempotent fulfillment calls,
structured errors the model can recover from, and read/write separation so an
agent can analyze freely but only mutate through explicit, narrow tools.

I'm shipping it as a starter because the gap between "MCP hello-world" and
"MCP server you'd trust against a production backend" is exactly the part
nobody publishes.

---

## Tools

### Analytics (read-only)
| Tool | What it does |
|------|--------------|
| `get_monthly_sales` | Revenue, order count, AOV, COD/prepaid split for a month |
| `get_daily_sales` | Sales for a specific date |
| `get_monthly_trend` | Month-over-month trend table |
| `compare_months` | Side-by-side comparison of two months |
| `get_product_sales_by_month` | Per-product revenue breakdown |
| `get_store_stats` | Lifetime store stats |

### Products (read + write)
| Tool | What it does |
|------|--------------|
| `get_all_products` | Full catalog with status, price, SEO fields |
| `get_product` | Single product by ID |
| `update_product_seo` | Update SEO meta title + description |
| `update_product_description` | Update product body HTML |
| `update_product_image_alt` | Update image alt text |
| `get_product_page_analytics` | Cross-references catalog with orders to flag low-converting products |
| `get_inventory_status` | Live inventory levels across all products |

### Orders (read-only)
| Tool | What it does |
|------|--------------|
| `search_order` | Find order by name, phone, or email |
| `get_order` | Single order by ID |
| `get_order_tracking` | AWB + tracking status for an order |
| `get_recent_orders` | Last N orders |
| `get_cod_orders` | COD orders for a date range |
| `get_unfulfilled_orders` | Pending fulfillment queue |

### Logistics (write — Delhivery API)
| Tool | What it does |
|------|--------------|
| `create_delhivery_shipment` | Book a forward shipment (creates AWB) |
| `create_delhivery_reverse_pickup` | Book a return pickup from customer |
| `fulfill_shopify_order` | Mark order fulfilled in Shopify with tracking |

---

## Architecture Notes

**Auth:** Uses Shopify Partner app OAuth flow (`client_credentials`) — access tokens
cached in memory, auto-refreshed before expiry. No session tokens stored to disk.

**Pagination:** Large order sets paginated transparently via Shopify's cursor-based
`page_info` system. Callers get complete data without managing cursors.

**Read/write separation:** Analytics, product reads, and order reads are all
read-only. Only `update_*`, `create_*`, and `fulfill_*` tools mutate state.
This separation is enforced at the tool description level — the model is told
explicitly which tools are safe to call freely vs. which require confirmation.

**IST date handling:** All date boundaries shifted for IST (UTC+5:30). A query
for "today's orders" returns orders placed on the Indian calendar day, not the
UTC day.

**Structured errors:** Tool errors return a JSON object with `error`, `code`,
and `detail` fields — not raw stack traces. The model can parse the error and
either retry with corrected inputs or explain the failure to the user.

---

## Setup

### 1. Clone and install

```bash
git clone https://github.com/singhjitesh889-blip/mcp-commerce-starter.git
cd mcp-commerce-starter
npm install
```

### 2. Configure environment

```bash
cp .env.example .env
# Fill in your Shopify credentials and seller details
```

### 3. Create a Shopify Partner app

You need a Shopify Partner app with the following scopes:
- `read_products`, `write_products`
- `read_orders`
- `read_inventory`

Get your `client_id` and `client_secret` from the Shopify Partner Dashboard.

### 4. Wire into Claude Code

Add to `~/.claude/settings.json`:

```json
{
  "mcpServers": {
    "commerce": {
      "command": "node",
      "args": ["/path/to/mcp-commerce-starter/index.js"],
      "env": {
        "SHOPIFY_SHOP": "https://your-store.myshopify.com",
        "SHOPIFY_CLIENT_ID": "your_client_id",
        "SHOPIFY_CLIENT_SECRET": "your_client_secret",
        "SELLER_NAME": "Your Business",
        "SELLER_CITY": "Your City",
        "SELLER_STATE": "Your State",
        "RETURN_PIN": "000000",
        "RETURN_PHONE": "9999999999",
        "RETURN_ADDRESS": "Your return address",
        "RETURN_CITY": "Your City",
        "RETURN_STATE": "Your State"
      }
    }
  }
}
```

### 5. Test

```
> what were my sales last month?
> show me unfulfilled orders
> search for order #1234
```

---

## The Logistics Tools

The Delhivery integration (`create_delhivery_shipment`, `create_delhivery_reverse_pickup`)
requires a Delhivery API account. These are India-specific — swap in your own
logistics provider's API for other markets. The tool interface stays the same;
the API call underneath is what changes.

If you don't use Delhivery, leave `DELHIVERY_API_TOKEN` unset — the tools
will return an error if called, but all other tools continue to work.

---

## Related

- **[claude-code-knowledge-architecture](https://github.com/singhjitesh889-blip/claude-code-knowledge-architecture)** — the methodology that makes this server useful in sustained AI-assisted operations.
- **[mcp-seo-starter](https://github.com/singhjitesh889-blip/mcp-seo-starter)** — companion MCP server for search performance data.