DEV Community

Davide Conte
Davide Conte

Posted on

I built an MCP server for Shopify and Stripe write operations — the gap nobody filled

Every existing Shopify MCP server has the same problem: read-only.

You can ask your AI agent to show you orders, products, revenue. But you can't tell it to update a price, bulk-edit inventory, cancel an order, or issue a refund. The moment you need to do something, you're back in the dashboard.

I got tired of it. So I built mcp-ecom-hub.

What it does

npx mcp-ecom-hub
Enter fullscreen mode Exit fullscreen mode

A fully typed MCP server that covers what the others don't:

Shopify — write ops:

  • shopify_update_product — update title, price, inventory
  • shopify_bulk_update_prices — update multiple variants at once
  • shopify_fulfill_order — mark orders as fulfilled
  • shopify_cancel_order — cancel + refund in one call
  • shopify_create_discount — generate discount codes

Shopify — read ops:

  • shopify_get_orders — with filters (status, date, customer)
  • shopify_get_products — full product + variant details
  • shopify_get_analytics — revenue, AOV, conversion rate
  • shopify_get_customers — customer list + LTV

Stripe:

  • stripe_get_revenue — MRR, ARR, breakdown by period
  • stripe_list_subscriptions — active subscriptions
  • stripe_cancel_subscription — with proration handling
  • stripe_create_coupon — discount codes
  • stripe_get_payouts — payout history
  • stripe_refund_payment — issue refunds

Multi-store:

  • hub_list_stores — all configured stores
  • hub_get_overview — cross-store revenue summary

The gap it fills

Feature mcp-ecom-hub Shopify MCP (official) pipeboard
Shopify write ops
Bulk price update
Stripe integrated
Subscription mgmt
Multi-store
Self-hosted
Open source

Setup

{
  "mcpServers": {
    "ecom-hub": {
      "command": "npx",
      "args": ["-y", "mcp-ecom-hub"],
      "env": {
        "MCP_ECOM_CONFIG": "/path/to/stores.json"
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Config file (stores.json):

{
  "stores": [
    {
      "id": "mystore",
      "name": "My Store",
      "shopify": {
        "domain": "mystore.myshopify.com",
        "accessToken": "shpat_xxx"
      },
      "stripe": {
        "secretKey": "sk_live_xxx"
      }
    }
  ],
  "defaultStore": "mystore"
}
Enter fullscreen mode Exit fullscreen mode

Safety first

Destructive operations (cancel, refund) require explicit confirmation:

User: Cancel order #1234 and refund the customer
Agent: I'll cancel order #1234 ($89.00) and issue a full refund. Confirm? [yes/no]
User: yes
Agent: ✅ Order cancelled. Refund of $89.00 issued — arrives in 5-10 days.
Enter fullscreen mode Exit fullscreen mode

No accidental cancellations.

Multi-store

Running an agency with multiple clients? One config, all stores:

User: Show me revenue across all stores this week
Agent: 
  - Store A: €2,340 (12 orders, AOV €195)
  - Store B: €890 (8 orders, AOV €111)
  - Total: €3,230
Enter fullscreen mode Exit fullscreen mode

Links

Open source, MIT. Built for agencies managing multiple e-commerce clients.

PRs welcome — especially for WooCommerce support (next on the list).

Top comments (0)