Talk to your Shopware shop. Read-only until you say otherwise.
One small server that speaks MCP to Claude, Cursor, VS Code or any other host, and the Admin API to your shop. Stuck orders, last month's numbers, low stock, a launch code, a shipped parcel: one sentence each, with Shopware doing the counting.
$ npx shopware-mcp init
Real output, replayed.
Every recording is the server's own output against a Shopware 6.7 test shop with generated demo data. Tool calls and results are verbatim, shortened to fit the screen. The prose is what an MCP host says with them.
One question, thirteen checks. Three paid orders wait for shipment, the storefront is in maintenance, a summer promotion outlived August. The answer names order numbers and amounts, and offers the safe next step.
Curated tools, not a thin API wrapper.
Each tool returns compact JSON with exact totals, a description written for a model, and Shopware's own Criteria filters. No invented query language.
Nineteen curated reads
Products, orders and their history, documents, customers, categories, promotions, reviews, payment and shipping methods, plugins, stock, sales channels, trading settings. { term, filter, sort, page, limit } in, { total, items } out.
A health audit
shop_audit runs fifteen checks in one call, from paid-but-unshipped orders and missing invoices to products running out and storefronts missing a legal page. The same audit runs as shopware-mcp audit from cron or CI.
Reports and a forecast
sales_report and customer_report let Shopware aggregate: revenue by channel and state, timelines, top products, new and returning customers, the change against the period before. stock_forecast turns sales velocity into days of cover and reorder quantities.
Thirteen guarded writes
Ship, mark paid, remind, refund, correct stock, note, generate a document, create a product or promotion, give a product a picture, moderate a review, update a customer. Registered only with --allow-write, dry run by default, a write budget on top.
Any entity
entity_schema describes any of the 200+ entities, custom ones included, and entity_search queries them, with Shopware aggregations over the match on request. Secrets scrubbed, credential entities refused, long text truncated.
Plugin-aware
The server detects installed extensions and adds tools for the ones it knows, without touching the plugins: FroshTools for platform health, queue and advisories, Merqo for compliance. Your own pack is one file under src/extensions/.
Doctor and init
shopware-mcp doctor says per tool whether this integration can use it and which privilege is missing. init writes the host config for eight hosts. audit and report print Markdown with exit codes for cron and CI.
Packaged four ways
npm with build provenance, a Docker image on GHCR for amd64 and arm64, a one-click .mcpb bundle for Claude Desktop, and a listing in the official MCP registry.
You say. The agent calls.
| You say | The agent calls |
|---|---|
| "Is everything okay with the shop?" | shop_audit |
| "How did we do in August?" | sales_report { from, to, interval: "week" } |
| "Who were our best customers this quarter?" | customer_report { from, to, topCustomers: 20 } |
| "What happened to order 10042, and who did it?" | order_history |
| "Order 10042 shipped with DHL, tracking 00340434." | order_delivery_transition { transition: "ship", trackingCodes } |
| "Send me the invoice for 10042." | order_documents_list, then document_download hands over the PDF |
| "Which reviews are waiting for approval?" | reviews_search, or the review_moderation prompt |
| "Is guest checkout on, and what is the default tax?" | shop_settings |
| "Thumbnails are missing, is the platform okay?" | frosh_health and frosh_queue, with FroshTools installed |
| "What do I need to reorder in the next two weeks?" | stock_forecast, or the reorder_list prompt |
| "Orders per payment method last month, with revenue?" | entity_search with a terms aggregation and a nested sum |
| "Create a 10 % code AUTUMN10 for October." | promotion_create, inactive until you say otherwise |
| "Which manufacturers have no logo?" | entity_schema, then entity_search on product_manufacturer |
| "Which of my tools will fail with this integration?" | not a tool: npx shopware-mcp doctor |
| "Mail me the audit every Monday." | not a tool either: shopware-mcp audit --fail-on warning in cron |
A brake on every write.
- Read-only by default. Without
--allow-writethe write tools are not registered. An agent cannot discover what it cannot call. - Every write is a dry run first. The tools return the exact request they would send. Only an explicit
dryRun: falsetouches the shop, and the result is re-read from Shopware. - A write budget.
SHOPWARE_MCP_MAX_WRITES=20refuses the twenty-first real write of a process. No prompt can lift it. - Narrow writes, nothing deletes. The transition tools only move state machines; nothing moves money. Promotions are created inactive. There is no delete tool.
- No secrets anywhere. Credentials never appear in output, logs or errors.
entity_searchscrubs passwords, keys and tokens and refuses entities that hold credentials. - No telemetry. The server talks to your shop and to your host. Nothing else.
Three steps, one of them optional.
npx shopware-mcp init asks for URL, key and secret, tests them against the shop and prints or writes the host configuration.npx shopware-mcp doctor first to see which tools this integration can use and what is missing.Download shopware-mcp.mcpb from the latest release and double-click it, or add this to claude_desktop_config.json (npx shopware-mcp init --for claude-desktop --write does it for you):
{
"mcpServers": {
"shopware": {
"command": "npx",
"args": ["-y", "shopware-mcp"],
"env": {
"SHOPWARE_URL": "https://shop.example.com",
"SHOPWARE_CLIENT_ID": "SWIA...",
"SHOPWARE_CLIENT_SECRET": "..."
}
}
}
}
One command; add --allow-write after shopware-mcp when you want the write tools.
claude mcp add shopware \
-e SHOPWARE_URL=https://shop.example.com \
-e SHOPWARE_CLIENT_ID=SWIA... \
-e SHOPWARE_CLIENT_SECRET=... \
-- npx -y shopware-mcp
They all take the same three fields. Cursor reads .cursor/mcp.json, VS Code .vscode/mcp.json (under servers), Windsurf and Gemini CLI their own mcpServers files, Codex CLI a table in config.toml, Zed its context_servers block. init --for <host> --write writes each of them.
{
"mcpServers": {
"shopware": {
"command": "npx",
"args": ["-y", "shopware-mcp"],
"env": {
"SHOPWARE_URL": "https://shop.example.com",
"SHOPWARE_CLIENT_ID": "SWIA...",
"SHOPWARE_CLIENT_SECRET": "..."
}
}
}
}
The image serves Streamable HTTP on /mcp. Add SHOPWARE_MCP_HTTP_TOKEN and the endpoint requires a bearer token; without one, keep it on localhost.
docker run --rm -p 127.0.0.1:3333:3333 \
-e SHOPWARE_URL=https://shop.example.com \
-e SHOPWARE_CLIENT_ID=SWIA... \
-e SHOPWARE_CLIENT_SECRET=... \
ghcr.io/bnymndev/shopware-mcp
Three environment variables, then the server on stdio or HTTP.
export SHOPWARE_URL=https://shop.example.com
export SHOPWARE_CLIENT_ID=SWIA...
export SHOPWARE_CLIENT_SECRET=...
npx shopware-mcp # stdio (default)
npx shopware-mcp --http --port 3333 # Streamable HTTP on http://127.0.0.1:3333/mcp
npx shopware-mcp --allow-write # also register the guarded write tools
npx shopware-mcp doctor # which tools can this integration use