Provides a comprehensive suite of tools for managing Shopify stores, including product creation and searching, order fulfillment and timeline tracking, customer data analysis, inventory level adjustments, and business intelligence reporting.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cob-shopify-mcpShow me a sales summary for the past month and any items running low on stock."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cob-shopify-mcp
The most complete open-source MCP server and CLI for Shopify. 59 built-in tools + 5 custom tools across 5 domains — use it as an MCP server for AI agents (Claude, Cursor, Windsurf) or as a standalone CLI to manage Shopify stores directly from your terminal.
Features
59 built-in tools + 5 custom tools across 5 domains — Products (15), Orders (17), Customers (9), Inventory (7), Analytics (16)
Standalone CLI — natural domain commands from the terminal without MCP (
cob-shopify products list --limit 5,orders get --id ..., etc.)MCP server — connect to Claude, Cursor, Windsurf, or any MCP-compatible AI agent
4 MCP resources (Shop info, Locations, Policies, Currencies)
4 MCP prompts (Health check, Sales report, Inventory risk, Support summary)
Dual transport — stdio (default) + Streamable HTTP
3 auth methods — Static token, OAuth client credentials, OAuth authorization code
Cost tracking — Every response includes Shopify API cost metadata
Rate limiting — Respects Shopify's cost-based throttling
Query caching — Configurable TTL per query type
82% less context bloat — Advertise-and-Activate mode: 1 meta-tool instead of 59 schemas, domains loaded on demand
Config-driven — YAML config, env vars, CLI overrides
Type-safe — Full TypeScript with Zod validation
Why cob-shopify-mcp
What you get | |
Dual-mode | Same 64 tools work as both CLI commands and MCP server — no competitor offers both |
ShopifyQL Analytics | 16 analytics tools powered by ShopifyQL — sales summaries, cohort analysis, vendor performance, period-over-period comparison — each in a single API call |
82% less AI context | Advertise-and-Activate loads 1 meta-tool instead of 59 schemas. Domains activate on demand |
Production-grade | Cost-based rate limiting, query caching, retry with backoff, encrypted token storage, 600 tests |
MCP vs CLI — When to Use What
This project gives you two ways to interact with Shopify. Same tools, same engine, same auth — different interfaces.
CLI | MCP | |
What it is | Direct terminal commands | Protocol for AI agents |
Who it's for | Developers, scripts, CI/CD | Claude, Cursor, Windsurf, custom agents |
How to use |
| AI calls tools via MCP protocol |
Install via |
| Same npm install, then |
Docker | Not applicable | Yes — HTTP transport for remote/multi-agent |
Custom YAML tools | Auto-discovered | Auto-discovered |
Output | Table (TTY), JSON when piped; | JSON via MCP response |
Schema introspection |
| Built into MCP protocol |
Context window | Zero impact — no tool schemas loaded | All schemas injected — use Advertise-and-Activate for 82% reduction |
Best for | Quick lookups, scripting, pipelines, CI/CD | Conversational AI, multi-step workflows |
You don't have to choose — install once, use both:
# CLI — run directly from terminal
cob-shopify products list --limit 5
cob-shopify products list --limit 5 --fields id,title,status
cob-shopify orders get --id gid://shopify/Order/123 --json
# MCP — connect to Claude and let AI use the same tools
claude mcp add cob-shopify-mcp -- cob-shopify-mcp startAdvertise-and-Activate
Every MCP server on GitHub dumps all tool schemas into the AI's context on connect. With 59 tools, that's ~19,000 tokens consumed before the user even asks a question. Most conversations use 1-2 tools — 95% of those tokens are wasted.
Advertise-and-Activate fixes this. Instead of loading all 59 tool schemas, the server registers a single activate_tools meta-tool with a lightweight domain summary:
Before (default): 59 tool schemas → ~19,000 tokens per prompt
After (activate): 1 meta-tool → ~300 tokens per prompt
On-demand: AI activates 1 domain → +2,000-3,000 tokens only when neededHow it works:
Connect — AI sees 1 tool:
activate_toolswith a description listing all domains and their tool countsActivate — AI calls
activate_tools("analytics")— server dynamically registers 16 analytics toolsExecute — AI calls
top_productsas normal
Typical conversation: ~2,800 tokens instead of ~19,000. That's an 82% reduction.
No competitor Shopify MCP server has this. It requires clean domain grouping, a dynamic registry, and a meta-tool pattern — all built into this server's architecture.
Enable it:
# cob-shopify-mcp.config.yaml
tools:
advertise_and_activate: trueOr via environment variable:
COB_SHOPIFY_ADVERTISE_AND_ACTIVATE=trueCustom YAML tools are included automatically — they declare a domain and appear in the corresponding summary.
CLI as Agent Tool (Zero-Config AI Access)
AI agents like Claude Code and Cursor have built-in terminal access. That means they can run CLI commands directly — no MCP server needed, no config required:
# AI agent runs this via its Bash tool — zero setup
cob-shopify products list --limit 5 --json
cob-shopify orders get-by-name --name "#1001" --json
cob-shopify analytics sales-summary --start_date 2026-01-01 --end_date 2026-03-15 --jsonEvery command outputs clean JSON when piped or when --json is passed. The AI reads the output and uses the data. The --schema flag lets the AI discover what inputs any command accepts:
cob-shopify products list --schema # AI reads the schema, knows what flags to passNo MCP connection, no server process, no protocol overhead. Just npm install -g cob-shopify-mcp and the AI can use every tool immediately.
CLI via Agent's Terminal | MCP Protocol | |
Setup |
| Install + |
Tool discovery |
| Automatic schema injection |
Context cost | Zero tokens | ~16K tokens (or ~800 with Advertise-and-Activate) |
Best for | Quick access, zero-config, CI/CD | Rich tool discovery, multi-agent, streaming |
You don't have to choose — install once, use both. Same tools, same engine, same Shopify API.
Use Cases
flowchart LR
subgraph AGENTS["Your AI Layer"]
direction TB
SALES["Sales Assistant"]
SUPPORT["Customer Support Bot"]
WAREHOUSE["Warehouse Manager"]
SHIPPING["Shipping Tracker"]
BI["Business Intelligence"]
AUTO["Automation Workflows"]
end
MCP["cob-shopify-mcp\n59 tools · 4 resources · 4 prompts\nAdvertise-and-Activate: 82% less context"]
SHOPIFY["Shopify Store"]
AGENTS --> MCP --> SHOPIFYRole | What it does | Tools used |
Sales Assistant | Answer product questions, check inventory, create draft orders, look up customer history and lifetime value |
|
Customer Support Bot | Look up orders by name/number, track fulfillment, view timeline, pull customer details |
|
Warehouse Manager | Monitor stock levels, get low-stock alerts, adjust inventory, check location inventory |
|
Shipping Executive | Track fulfillment status, view order details, update order notes/tags |
|
Business Intelligence | Sales summaries, top products, refund rates, repeat customer analysis, inventory risk |
|
Automation Pipeline | Bulk product updates, tag management, order processing, customer segmentation |
|
Integration Patterns
1. Direct MCP (simplest) — Claude, Cursor, or any MCP client connects directly:
AI Agent → MCP Protocol → cob-shopify-mcp → Shopify API2. Agent Orchestration Layer — Your custom agent framework uses MCP as the Shopify bridge:
User → Your App → Agent Layer (LangChain, CrewAI, etc.) → MCP Client → cob-shopify-mcp → Shopify API3. RAG + MCP — Combine retrieval-augmented generation with live Shopify data:
User → Your App → RAG (product docs, policies, FAQs) + MCP (live store data) → Response4. Multi-Agent System — Multiple specialized agents share one MCP server:
Sales Agent ─┐
Support Agent ─┤→ cob-shopify-mcp (HTTP transport) → Shopify API
Warehouse Agent─┘Quick Start
Binary names:
cob-shopifyfor CLI use,cob-shopify-mcpfor MCP server setup. Same binary, two names.
First: Complete Getting Shopify Credentials below to get your Client ID, Client Secret, and store domain. Then come back here.
Pick one of the three paths below. All get you to the same result — a working MCP server connected to Claude.
Path A: npm install (simplest — no clone, no build)
Install globally and connect in two commands. No .env file needed — credentials go straight into the Claude config.
npm install -g cob-shopify-mcpConnect to Claude CLI:
claude mcp add cob-shopify-mcp \
-e SHOPIFY_CLIENT_ID=your_client_id \
-e SHOPIFY_CLIENT_SECRET=shpss_your_secret \
-e SHOPIFY_STORE_DOMAIN=your-store.myshopify.com \
-- cob-shopify-mcp startDone. Claude launches the server automatically when needed. Verify:
claude mcp list
# cob-shopify-mcp: ... - ✓ ConnectedOr with npx (no install at all):
claude mcp add cob-shopify-mcp \
-e SHOPIFY_CLIENT_ID=your_client_id \
-e SHOPIFY_CLIENT_SECRET=shpss_your_secret \
-e SHOPIFY_STORE_DOMAIN=your-store.myshopify.com \
-- npx cob-shopify-mcp startOr connect to Claude Desktop — add to claude_desktop_config.json (file location):
{
"mcpServers": {
"cob-shopify-mcp": {
"command": "cob-shopify-mcp",
"args": ["start"],
"env": {
"SHOPIFY_CLIENT_ID": "your_client_id",
"SHOPIFY_CLIENT_SECRET": "shpss_your_secret",
"SHOPIFY_STORE_DOMAIN": "your-store.myshopify.com"
}
}
}
}Restart Claude Desktop after saving. You'll see the tools icon showing 59 available tools.
Path B: Clone and build (for development / contributing)
Clone the repo and build from source. Claude launches the server via stdio — you don't run it yourself.
B1. Clone and build:
git clone https://github.com/svinpeace/cob-shopify-mcp.git
cd cob-shopify-mcp
pnpm install
pnpm buildB2. Connect to Claude CLI:
claude mcp add cob-shopify-mcp \
-e SHOPIFY_CLIENT_ID=your_client_id \
-e SHOPIFY_CLIENT_SECRET=shpss_your_secret \
-e SHOPIFY_STORE_DOMAIN=your-store.myshopify.com \
-- node /absolute/path/to/cob-shopify-mcp/dist/cli/index.js startDone. Verify:
claude mcp list
# cob-shopify-mcp: ... - ✓ ConnectedOr connect to Claude Desktop — add to claude_desktop_config.json (file location):
{
"mcpServers": {
"cob-shopify-mcp": {
"command": "node",
"args": ["/absolute/path/to/cob-shopify-mcp/dist/cli/index.js", "start"],
"env": {
"SHOPIFY_CLIENT_ID": "your_client_id",
"SHOPIFY_CLIENT_SECRET": "shpss_your_secret",
"SHOPIFY_STORE_DOMAIN": "your-store.myshopify.com"
}
}
}
}Path C: Docker (long-running HTTP server)
Run the server as a container via HTTP transport. Good for always-on setups, VPS deployments, or shared team access.
C1. Clone and configure:
git clone https://github.com/svinpeace/cob-shopify-mcp.git
cd cob-shopify-mcp
cp .env.example .envEdit .env with your credentials:
SHOPIFY_CLIENT_ID=your_client_id
SHOPIFY_CLIENT_SECRET=shpss_your_secret
SHOPIFY_STORE_DOMAIN=your-store.myshopify.comC2. Build and start the container:
docker compose up --build
# Server starts at http://127.0.0.1:3000Verify it's running:
curl http://127.0.0.1:3000/health
# {"status":"ok"}C3. Connect to Claude CLI:
claude mcp add --transport http shopify http://127.0.0.1:3000
# Verify
claude mcp list
# cob-shopify-mcp: http://127.0.0.1:3000 (HTTP) - ✓ ConnectedOr connect to Claude Desktop — add to claude_desktop_config.json (file location):
{
"mcpServers": {
"cob-shopify-mcp": {
"url": "http://127.0.0.1:3000"
}
}
}Windows note: Use
127.0.0.1notlocalhost— Docker on Windows may not bind to IPv6::1whichlocalhostcan resolve to.
Claude Desktop config file location:
OS | Path |
macOS |
|
Windows |
|
Getting Shopify Credentials
Everything happens through the Shopify Developer Dashboard at dev.shopify.com. You need two things: a dev store (free) and an app with the right scopes.
Step 1 — Sign in to the Developer Dashboard
Go to dev.shopify.com
Sign in with your Shopify account (or create one — it's free, no credit card needed)
You'll land on the Developer Dashboard with Apps, Dev stores, and Catalogs in the left sidebar
Step 2 — Create a development store
You need a store to test against. Dev stores are free and never expire.
Click Dev stores in the left sidebar
Click Create store
Fill in the store name (e.g.,
my-dev-store) — this becomesmy-dev-store.myshopify.comComplete the setup
Note your store domain — you'll need it:
my-dev-store.myshopify.com
Step 3 — Create an app and configure scopes
Click Apps in the left sidebar
Click Create app (top-right)
Enter an app name (e.g.,
Shopify MCP Server) and click NextYou'll land on the version configuration page
Scroll down to the Access section
Click Select scopes — this opens a dropdown where you can either:
Search and check each scope individually, or
Paste a comma-separated list directly into the field
Full access (recommended — copy-paste this entire block):
read_products, write_products, read_orders, write_orders, read_all_orders, read_draft_orders, write_draft_orders, read_order_edits, write_order_edits, read_customers, write_customers, read_inventory, write_inventory, read_locations, read_fulfillments, write_fulfillments, read_assigned_fulfillment_orders, write_assigned_fulfillment_orders, read_merchant_managed_fulfillment_orders, write_merchant_managed_fulfillment_orders, read_third_party_fulfillment_orders, write_third_party_fulfillment_orders, read_shipping, read_reports, read_legal_policiesRead-only? Use only the read scopes and set
COB_SHOPIFY_READ_ONLY=truein.env:read_products, read_orders, read_all_orders, read_draft_orders, read_customers, read_inventory, read_locations, read_fulfillments, read_assigned_fulfillment_orders, read_merchant_managed_fulfillment_orders, read_third_party_fulfillment_orders, read_shipping, read_reports, read_legal_policies
What each scope enables:
Scope | What it covers |
Products | |
| List, search, get products, variants, collections, tags |
| Create/update/delete products, variants, tags, status, collections |
Orders | |
| List, search, get orders (last 60 days), timeline, analytics |
| Read orders older than 60 days (historical data — requires approval) |
| Update order notes/tags, mark paid, cancel orders |
| List, get draft orders |
| Create draft orders, complete draft orders to real orders |
| View order modification history |
| Edit existing orders (add/remove items, adjust prices) |
Customers | |
| List, search, get customers, lifetime value, order history |
| Create/update customers, manage tags |
Inventory | |
| Inventory levels, items, SKU lookup, low stock reports |
| Adjust quantities, set inventory levels |
| Store locations (required by inventory tools) |
Fulfillment | |
| Read fulfillment data and services |
| Create/modify fulfillment services |
| Read fulfillment orders assigned to your app |
| Create fulfillments, update tracking for assigned orders |
| Read merchant-managed fulfillment orders |
| Fulfill and track merchant-managed orders |
| Read 3PL fulfillment orders |
| Fulfill and track 3PL orders |
Other | |
| Shipping zones, rates, and delivery carrier services |
| Store reports and analytics data |
| Store policies (used by shop-policies MCP resource) |
For even more scopes (themes, discounts, metafields, gift cards, marketing, returns, etc.) for custom YAML tools, see the Custom Tools Guide.
Click Release (top-right) to create the app version with these scopes
Step 4 — Get your Client ID and Client Secret
Click Settings in the left sidebar
Under Credentials, copy the Client ID (a 32-character hex string)
Click the reveal icon next to Secret and copy it (starts with
shpss_)
Step 5 — Install the app on your dev store
Click Overview in the left sidebar (or your app name at the top)
Under Installs, click Install app
Select your development store and approve the permissions
Step 6 — Configure .env
cp .env.example .envFill in your credentials:
SHOPIFY_CLIENT_ID=your_client_id_here
SHOPIFY_CLIENT_SECRET=shpss_your_secret_here
SHOPIFY_STORE_DOMAIN=my-dev-store.myshopify.com
SHOPIFY_API_VERSION=2025-01The server uses client credentials auth — it automatically exchanges your Client ID + Secret for a 24-hour access token, and refreshes it before it expires. No manual token management needed.
Alternative: Static access token. If you already have a
shpat_token (from Shopify CLI, a custom app, or another source), you can use that instead:SHOPIFY_ACCESS_TOKEN=shpat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx SHOPIFY_STORE_DOMAIN=my-dev-store.myshopify.comWhen
SHOPIFY_ACCESS_TOKENis set, the server uses it directly and ignores Client ID/Secret.
Done. Proceed to Quick Start to run the server.
Configuration
Config File
Create cob-shopify-mcp.config.yaml in your project root:
auth:
method: token # token | client-credentials | authorization-code
store_domain: ${SHOPIFY_STORE_DOMAIN}
access_token: ${SHOPIFY_ACCESS_TOKEN}
shopify:
api_version: "2026-01"
cache:
read_ttl: 30 # seconds
search_ttl: 10
analytics_ttl: 300
tools:
read_only: false # disable all mutations
disable: [] # tool names to disable
enable: [] # tool names to force-enable (even tier 2)
advertise_and_activate: false # lazy tool loading — 82% less context tokens
transport:
type: stdio # stdio | http
port: 3000
host: "0.0.0.0"
storage:
backend: json # json | sqlite
path: "~/.cob-shopify-mcp/"
observability:
log_level: info # debug | info | warn | error
audit_log: true
rate_limit:
respect_shopify_cost: true
max_concurrent: 10Environment Variables
Variable | Maps To |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Config Precedence
defaults < config file < environment variables < CLI flags
CLI Commands
# Natural commands — cob-shopify <domain> <action> [flags]
cob-shopify products list --limit 5
cob-shopify products list --limit 5 --fields id,title,status
cob-shopify products get --id gid://shopify/Product/123
cob-shopify products search --query "snowboard" --limit 10
cob-shopify orders list --limit 10 --json
cob-shopify orders get --id gid://shopify/Order/456 --fields id,name
cob-shopify customers search --query "email:john@example.com"
cob-shopify inventory low-stock-report --threshold 10
cob-shopify analytics sales-summary --start_date 2025-01-01 --end_date 2025-12-31
# Global flags (available on every command)
--json # Force JSON output (auto when piped)
--fields <f1,f2> # Select specific response fields
--jq <expr> # Filter JSON with jq expression
--schema # Show command schema, don't execute
--dry-run # Preview mutations without executing
--yes # Skip confirmation prompts
# Schema introspection (for AI agents)
cob-shopify products list --schema
# Mutation safety
cob-shopify products create --title "New Widget" --dry-run
cob-shopify products delete --id gid://shopify/Product/123 # prompts for confirmation
# Server commands
cob-shopify-mcp start # Start the MCP server
cob-shopify-mcp start --transport http --port 8080
cob-shopify connect --store my-store.myshopify.com
cob-shopify config show
# Legacy commands (deprecated, will be removed in v1.0)
cob-shopify tools list
cob-shopify tools info list_productsTools Reference
Products (15 tools)
Tool | Description | Scope |
| List products with filters |
|
| Get product by ID |
|
| Get product by URL handle |
|
| Full-text product search |
|
| List variants for a product |
|
| Get variant by ID |
|
| List collections |
|
| Get collection by ID |
|
| Create a new product |
|
| Add variant to product |
|
| Create a collection |
|
| Update product fields |
|
| Update variant fields |
|
| Change product status |
|
| Add/remove product tags |
|
Orders (17 tools)
Tool | Description | Scope |
| List orders with filters |
|
| Search orders by query |
|
| Get order by ID |
|
| Get order by name (#1001) |
|
| Get order events timeline |
|
| Get fulfillment details |
|
| Create a draft order |
|
| Add note to order |
|
| Update order note |
|
| Add tags to order |
|
| Update order tags |
|
| Mark order as paid |
|
| Cancel an order (async) |
|
| Complete draft to real order |
|
| Get fulfillment order IDs |
|
| Create fulfillment with tracking |
|
| Update tracking info |
|
Customers (9 tools)
Tool | Description | Scope |
| List customers |
|
| Search customers |
|
| Get customer by ID |
|
| Get customer's orders |
|
| Get customer LTV |
|
| Create a customer |
|
| Update customer fields |
|
| Add tags to customer |
|
| Remove tags from customer |
|
Inventory (7 tools)
Tool | Description | Scope |
| Get inventory item by ID |
|
| Get inventory by SKU |
|
| List inventory levels |
|
| Get inventory at location |
|
| Low stock items report |
|
| Adjust inventory quantity |
|
| Set inventory level |
|
Analytics (16 tools)
All analytics tools use ShopifyQL — single API call per query, no cursor pagination.
Tool | Description | Scope |
| Sales totals for date range |
|
| Best sellers by revenue or orders |
|
| Orders grouped by day/week/month |
|
| Refund rate and amounts |
|
| Repeat purchase analysis |
|
| Revenue by sales channel |
|
| Sales by country/region |
|
| Period-over-period comparison |
|
| Discount impact analysis |
|
| Revenue by vendor |
|
| Cohort analysis by period |
|
| Top customers by CLV |
|
| Sessions to orders funnel |
|
| Session traffic over time |
|
| Over/understock risk analysis |
|
| Raw ShopifyQL passthrough |
|
Other Editors (Cursor / Windsurf)
Add to .cursor/mcp.json or equivalent:
{
"mcpServers": {
"cob-shopify-mcp": {
"command": "npx",
"args": ["-y", "cob-shopify-mcp", "start"],
"env": {
"SHOPIFY_CLIENT_ID": "your_client_id",
"SHOPIFY_CLIENT_SECRET": "shpss_your_secret",
"SHOPIFY_STORE_DOMAIN": "your-store.myshopify.com"
}
}
}
}Development
pnpm install
pnpm test # Unit tests
pnpm test:integration # Integration tests (requires Shopify credentials)
pnpm lint # Biome linter
pnpm typecheck # TypeScript type checking
pnpm build # Build with tsupArchitecture
Animated, interactive diagram showing how Entry Points, Core Engine, Shopify Shell, and the GraphQL API connect
flowchart TB
subgraph ENTRY["Entry Points"]
direction LR
CLI["CLI\nproducts · orders · customers\ninventory · analytics"]
STDIO["MCP Server\nstdio transport"]
HTTP["HTTP Server\nStreamable HTTP"]
end
subgraph CORE["Core Engine (API-Agnostic)"]
direction TB
subgraph REGISTRY["Registry & Discovery"]
direction LR
AD["Auto-Discover\n*.tool.ts"]
REG["Tool Registry\nregister · list · filter"]
CF["Config Filter\nenable · disable · tiers"]
end
subgraph ENGINES["MCP Engines"]
direction LR
TE["Tool Engine\nschema gen · execute"]
RE["Resource Engine\nread-only data"]
PE["Prompt Engine\ntemplates · workflows"]
end
subgraph INFRA["Infrastructure"]
direction LR
AUTH["Auth Manager\nstatic · client-creds · OAuth"]
OBS["Observability\nlogs · metrics · audit"]
STORE["Storage\nJSON · SQLite+encryption"]
end
DT["defineTool() Helper"]
end
subgraph SHOPIFY["Shopify Shell"]
direction TB
subgraph CLIENT["Shopify GraphQL Client"]
direction LR
GQL["GraphQL Client\n@shopify/admin-api-client"]
RL["Rate Limiter"]
CACHE["Cache Layer"]
end
subgraph TOOLS["59 Tool Definitions"]
direction LR
PROD["Products\n15 tools"]
ORD["Orders\n12 tools"]
CUST["Customers\n9 tools"]
INV["Inventory\n7 tools"]
ANAL["Analytics\n16 tools"]
end
subgraph MCPPRIM["MCP Primitives"]
direction LR
RES["Resources\nshop info · locations"]
PROMPT["Prompts\nstore health · reports"]
end
end
SHOPIFY_API["Shopify Admin GraphQL API"]
CLI --> CORE
STDIO --> CORE
HTTP --> CORE
AD --> REG
REG --> CF
CF --> TE
CF --> RE
CF --> PE
DT -.-> REG
TE --> CLIENT
RE --> CLIENT
PE --> CLIENT
AUTH --> CLIENT
OBS -.-> TE
STORE -.-> AUTH
GQL --> RL
RL --> CACHE
TOOLS --> DT
MCPPRIM --> RE
MCPPRIM --> PE
CACHE --> SHOPIFY_APIProject Structure
src/
├── core/ # API-agnostic MCP server core
│ ├── config/ # Zod config schema, multi-source loader
│ ├── auth/ # Static token, client credentials, OAuth
│ ├── engine/ # Tool, Resource, Prompt execution engines
│ ├── registry/ # Tool registry with config filtering
│ ├── storage/ # JSON + SQLite backends with encryption
│ ├── transport/ # stdio + HTTP transports
│ ├── observability/ # pino logger, cost tracker, audit log
│ └── helpers/ # defineTool, defineResource, definePrompt
├── shopify/ # Shopify-specific implementation
│ ├── client/ # GraphQL client, rate limiter, cache, retry
│ ├── tools/ # 59 tools across 5 domains
│ ├── resources/ # 4 MCP resources
│ └── prompts/ # 4 MCP prompts
├── server/ # Server bootstrap and registration bridges
└── cli/ # CLI commands (Commander + consola)How It Compares
59 tools ship enabled out of the box — but the tool count is unlimited. Developers can add any Shopify GraphQL operation as a custom tool using simple YAML files, no TypeScript required:
# my-tools/get-metafields.yaml
name: get_shop_metafields
domain: shop
description: Get shop metafields by namespace
scopes: [read_metafields]
input:
namespace:
type: string
description: Metafield namespace
required: true
graphql: |
query($namespace: String!) {
shop {
metafields(first: 10, namespace: $namespace) {
edges { node { key value } }
}
}
}
response:
mapping: shop.metafields.edgesPoint your config at the directory and they're live:
tools:
custom_paths: ["./my-tools/"]The 3-tier system gives full control: Tier 1 (enabled by default), Tier 2 (disabled by default, opt-in via config), Tier 3 (custom YAML tools, enabled by default). Plus tools.enable / tools.disable for granular overrides.
See the Custom Tools Guide for the full reference — YAML structure, variable naming rules, response mapping, scopes reference, error handling, and step-by-step examples.
The package ships with 5 ready-to-use custom tools in custom-tools/ — draft order completion, fulfillment orders, create fulfillment with tracking, update tracking, and order cancellation. They're enabled by default in .env.example (COB_SHOPIFY_CUSTOM_TOOLS=./custom-tools). To disable them, remove or comment out that line.
Managing Tools
# Via environment variables
COB_SHOPIFY_CUSTOM_TOOLS=./custom-tools # Load custom YAML tools from directory
COB_SHOPIFY_DISABLE=cancel_order,tool2 # Disable specific tools
COB_SHOPIFY_ENABLE=some_tier2_tool # Enable specific Tier 2 tools
COB_SHOPIFY_READ_ONLY=true # Disable ALL write operationsFeature | cob-shopify-mcp | GeLi2001 (147⭐) | pashpashpash (35⭐) | antoineschaller (10⭐) | benwmerritt |
Tools | 64 (59 built-in + 5 custom) | 14 | 15 | 22 | 30+ |
MCP Resources | 4 | 0 | 0 | 0 | 0 |
MCP Prompts | 4 | 0 | 0 | 0 | 0 |
Auth methods | 3 (static, client-creds, OAuth) | 2 | 1 | 1 | 2 |
HTTP Transport | Streamable HTTP | No | No | No | No |
Encrypted Storage | JSON + SQLite | No | No | No | No |
Unit Tests | 600 | ~2 | minimal | 1 | ~2 |
Docker | Multi-stage | No | No | No | No |
Rate Limiter | Yes | No | No | No | No |
Query Cache | Yes | No | No | No | No |
Observability | pino + audit + cost | No | No | No | No |
Context Reduction | 82% (Advertise-and-Activate) | No | No | No | No |
Config-driven | Tier system + YAML | No | No | No | No |
Ecosystem
This server manages your store via the Admin GraphQL API. Pair it with Shopify's official MCP servers for the complete experience:
Server | Purpose | Complements cob-shopify-mcp |
Search Shopify docs, introspect Admin GraphQL schema | Learn the API while this server manages your store | |
Product browsing, cart, checkout (built into every store) | Customer-facing shopping vs admin-side management |
Changelog
See the full changelog here → CHANGELOG.md
About
Built by Call O Buzz Services — AI-driven software development, SaaS solutions, and open source tools.
License
MIT
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.