An MCP server for exploring Shopware Admin API and Store API contracts without having to manually piece together routes, auth requirements, and multi-step workflows.
It is built to help developers who get stuck on questions like:
- Which route do I actually need?
- Is this Admin API or Store API?
- What request shape should I start with?
- Why does this flow fail even though one step worked?
- How do I chain these calls together without guessing?
This server runs over MCP stdio.
The fastest way to try it locally is:
go run .That starts the MCP server on stdio for an MCP client to connect to. It does not start an HTTP server.
- Go 1.26+
- launch the server from the repository root, or set absolute file paths in the environment
The server includes bundled Shopware contract data in data/ and will use those files by default when they are available from the repository root.
Example:
go run .This is the easiest setup for exploring the server without live Shopware credentials.
If you launch the server outside the repository root, set absolute SHOPWARE_*_FILE paths explicitly.
If you want live Shopware data, set:
export SHOPWARE_BASE_URL="https://your-shopware.example"
export SHOPWARE_ADMIN_TOKEN="..."
export SHOPWARE_STORE_ACCESS_KEY="..."
export SHOPWARE_PREFER_LIVE_DATA="true"
go run .You can also combine live access with file fallbacks by setting both the live credentials and the file-path variables.
Your MCP client needs to start the server from this repository and pass the environment variables above.
Example shape:
{
"mcpServers": {
"shopware-dev": {
"command": "go",
"args": ["run", "."],
"cwd": "/absolute/path/to/shopware-dev-mcp"
}
}
}If you launch from another working directory, add the file-path env vars explicitly.
If you build the binary first, you can replace command and args with the compiled executable path.
Once the server is connected in your MCP client, start with:
explain_flowforcreate a product and complete checkoutexplain_flowforinvestigate search criteria for product and categoryfind_routeswithcreate productdescribe_routefor a route returned byfind_routes
This server combines three things:
- Shopware API contract discovery
- request/example generation
- curated workflow guidance and diagnostics for common multi-step developer tasks
It can answer both low-level and high-level questions:
- low-level:
- find a route
- describe a route
- analyze the OpenAPI spec
- analyze Product/Category search-capability gaps
- assess workflow support against the spec
- generate a flow-aware checklist and request pack
- export an assessment report for review or docs work
- explain auth
- generate a request example
- high-level:
- explain how to create a product and complete checkout
- explain how to make a product discoverable in Store API
- explain how to investigate search criteria for Product and Category
- explain how customer registration, login, and order history fit together
- explain how to manage order state transitions and refunds
- main.go The MCP server implementation and tool behavior
- main_test.go Regression tests for route ranking, flow selection, and real OpenAPI-backed behavior
- data/admin-openapi.json
- data/store-openapi.json
- data/admin-routes.json
- data/store-routes.json
- data/entity-schema.json
These files let the server work even without live Shopware credentials, and they are also used in tests. They are also the default runtime fallback when the server is launched from the repository root.
- data/flows/README.md
- data/flows/create_product_and_complete_checkout.json
- data/flows/catalog_setup_for_real_discoverability.json
- data/flows/investigate_search_criteria_for_product_and_category.json
- data/flows/customer_registration_to_order_history.json
- data/flows/manage_order_state_and_refund.json
These flow files are human-readable artifacts you can inspect directly, and they are also loaded by the explain_flow MCP tool at runtime.
They also power flow scoring, checklist generation, request-pack generation, and workflow-level assessment output.
The server exposes tools for route discovery, contract inspection, examples, and workflow guidance.
list_admin_routesList Shopware Admin API routeslist_store_routesList Shopware Store API routesget_admin_openapiReturn the Admin API OpenAPI documentget_store_openapiReturn the Store API OpenAPI documentget_entity_schemaReturn Shopware entity schema metadatafind_routesSearch routes using ranking, confidence, and match reasonsdescribe_routeDescribe a route with method, parameters, request body, responses, confidence, and match reasonanalyze_openapiRun structural diagnostics and workflow-support heuristics against Shopware OpenAPI data, including an overall score, rating, and score breakdownanalyze_search_capabilitiesAssess how discoverable Product and Category search capabilities are in the contract, including searchable/filterable/sortable metadata gaps and term-vs-filter clarityassess_workflow_supportScore curated workflows against the current contract and report route coverage, missing routes, weak documentation, hidden-prerequisite steps, and flow-to-contract gapsgenerate_flow_checklistTurn a curated workflow into a step-by-step manual execution checklist with request examples, variable handoff hints, and route detailsgenerate_flow_request_packGenerate a flow-aware request pack with per-step starter payloads, example requests, and evolving variable handoff contextexport_assessment_reportCombine OpenAPI analysis, workflow support assessment, and checklist output into a stable JSON or Markdown report
generate_criteria_payloadGenerate starter Criteria payloads for Admin API search tasksgenerate_api_request_exampleGeneratecurlor JavaScript examples for a routeexplain_surfaceExplain whether a use case belongs in Admin API, Store API, or extension workexplain_authExplain likely authentication requirements
explain_flowSelect a curated workflow fromdata/flows/*.json, enrich it with route metadata from OpenAPI, and return a structured sequence of steps
find_routes and describe_route do more than plain substring matching.
They now use:
- normalized route matching
- token matching
- verb-to-method intent
- entity-aware ranking
- path-like query boosts
- confidence values
- match reasons
That means queries like:
create productcheckout ordersearch product manufacturer
should produce more useful top results than raw text matching alone.
The flow-driven tools like explain_flow, generate_flow_checklist, and generate_flow_request_pack do this:
- load all curated flow files from
data/flows/ - score them against the incoming use case with weighted trigger, token, name, summary, and step relevance
- choose the best matching flow
- enrich each step with route details from Admin or Store OpenAPI
- return the combined structured result
So the server is not generating workflows from scratch every time. It is selecting curated guidance and grounding it in the current Shopware contract data.
- uses
Authorization: Bearer <token>
- uses
sw-access-key
The server can work from file-based fallback data, or from live Shopware if credentials are configured.
The server reads configuration from environment variables.
SHOPWARE_BASE_URLSHOPWARE_ADMIN_TOKENSHOPWARE_STORE_ACCESS_KEYSHOPWARE_PREFER_LIVE_DATA
SHOPWARE_PREFER_LIVE_DATA=true tells the server to try the live Shopware instance before any configured file fallback.
SHOPWARE_ADMIN_OPENAPI_FILESHOPWARE_STORE_OPENAPI_FILESHOPWARE_ENTITY_SCHEMA_FILESHOPWARE_ADMIN_ROUTES_FILESHOPWARE_STORE_ROUTES_FILE
Use absolute paths when possible. If you use relative paths, they are resolved from the process working directory.
You only need to set these explicitly when:
- you want to override the bundled files
- you launch the server outside the repository root
Example:
export SHOPWARE_ADMIN_OPENAPI_FILE="$PWD/data/admin-openapi.json"
export SHOPWARE_STORE_OPENAPI_FILE="$PWD/data/store-openapi.json"
export SHOPWARE_ENTITY_SCHEMA_FILE="$PWD/data/entity-schema.json"
export SHOPWARE_ADMIN_ROUTES_FILE="$PWD/data/admin-routes.json"
export SHOPWARE_STORE_ROUTES_FILE="$PWD/data/store-routes.json"Curated workflow files are loaded from data/flows/ at runtime.
That means your MCP client should either:
- launch the server with
cwdset to the repository root - or use a wrapper script/binary setup that preserves the repository-root working directory
This is the simplest practical sequence.
Describe what you are trying to do in plain language.
Examples:
create a product and complete checkoutmake sure a product is visible in the sales channelinvestigate search criteria for product and categoryrefund an order and update its state
Use this when you are unsure whether the task belongs in:
- Admin API
- Store API
- plugin/app/extension work
If the task is a known workflow, this should be your main entry point.
It gives:
- summary
- ordered steps
- prerequisites
- common failure reasons
- diagnostics
- enriched route details where available
If you want the same workflow in a more execution-oriented shape, follow it with:
generate_flow_checklistgenerate_flow_request_pack
If you need to inspect the exact available routes for a step, use find_routes.
Examples:
create productsearch product manufacturercheckout orderorder transaction state
Use this to confirm:
- method
- route
- request body
- parameters
- response shape
Use:
generate_api_request_examplegenerate_criteria_payloadgenerate_flow_request_pack
This gives you a concrete first request instead of a blank page.
If a chain still fails:
- check
explain_auth - check
explain_flowfailure reasons - verify the route with
describe_route - compare Admin-side existence with Store-side visibility where relevant
- run
analyze_openapiwhen you suspect the contract itself is incomplete, weakly described, or missing workflow-critical metadata - run
analyze_search_capabilitieswhen you want a focused read on Product/Category search discoverability, field-capability metadata gaps, and term-vs-filter ambiguity - run
assess_workflow_supportwhen you want to know how well the current contract supports the workflows you care about - run
generate_flow_checklistwhen you want an actionable manual sequence for executing a workflow step by step - run
generate_flow_request_packwhen you want the actual starter requests for each step in a curated flow - run
export_assessment_reportwhen you want a shareable artifact for docs, product review, or contract assessment
Use:
explain_flowdescribe_routegenerate_flow_request_packgenerate_api_request_example
Use:
find_routesdescribe_route
Use:
explain_flowgenerate_criteria_payloadget_entity_schemaanalyze_search_capabilitiesdescribe_route
Because the curated workflows now live in files, you can test them in two ways:
Call the flow-oriented tools with natural-language use cases:
explain_flowgenerate_flow_checklistgenerate_flow_request_packassess_workflow_support
Open the JSON files in data/flows and follow the described steps manually.
This is useful when you want to:
- review workflow content
- edit triggers
- refine diagnostics
- compare the written flow to actual Shopware behavior
Run:
GOCACHE=/tmp/shopware-dev-mcp-gocache go test ./...The tests cover:
- route ranking behavior
- exact route description behavior
- curated flow loading
- flow enrichment against bundled OpenAPI data
- flow request-pack generation
- real-schema regression cases for Shopware Admin and Store APIs
- Curated flows are intentionally selective, not exhaustive
- Flow matching is now weighted and more resilient than plain trigger matching, but it is still heuristic and may need tuning as more workflows are added
- The server can now diagnose missing search-capability metadata, but it still cannot invent contract-level searchable/filterable/sortable fields that the Shopware spec does not expose
- Some workflow steps are still guidance-first because Shopware prerequisites are not always explicit in OpenAPI alone
This server is best for:
- developers integrating with Shopware APIs
- people learning the difference between Admin API and Store API
- debugging chained API workflows
- reducing trial-and-error for common Shopware tasks
It is especially useful when raw route docs exist, but the sequence and hidden prerequisites are what actually block progress.