Markus Michalski FAQ

Shopware Admin: Tool reference

All 42 tools of the Shopware Admin MCP server with parameters, limits and return values: products, content, categories, mail templates, flows, media, orders, cross-selling, SEO URLs.

Deutsche Version

Back to overview

Shopware Admin: Tool reference

This documentation always describes the current state of the main branch.

The server provides 42 tools. The limits below come from the input validation (Zod), which validates every call before it runs.

Area Count Tools
Products 6 product_create, product_get, product_list, product_update, product_set_active, search_products
Content 4 product_generate_content, product_generate_seo, variant_generate_content, content_update
Categories 4 category_list, category_get, category_generate_content, category_update
Helpers 3 get_properties, get_manufacturers, snippet_list
Mail templates 4 mail_template_list, mail_template_get, mail_template_update, mail_template_send_test
Flows 3 flow_list, flow_get, flow_toggle
Media 6 media_list, media_get, media_update, media_search, media_audit_alt, media_upload_url
Orders 3 order_list, order_get, order_stats
Cross-selling 5 cross_selling_list, cross_selling_get, cross_selling_create, cross_selling_update, cross_selling_suggest
SEO URLs 4 seo_url_list, seo_url_audit, seo_url_update, seo_url_generate

General rules

Products

Tool Parameters Behaviour
product_create Required: name (1 to 255), productNumber (1 to 64), price (gross, greater than 0), categoryId. Optional: description (HTML, up to 65535), ean (up to 50), manufacturerId, taxId, stock (integer, from 0, default 0), salesChannelId, tags, searchKeywords Creates the product always inactive, with visibility "everywhere" in the sales channel. The price is stored as gross in the default currency, the net price is calculated from SHOPWARE_DEFAULT_TAX_RATE. Tags are created when needed. A duplicate product number yields PRODUCT_NUMBER_EXISTS. Returns id, productNumber, name, active.
product_get id or productNumber (one of them) Returns the product with categories, manufacturer, variants including options, properties and media. Cached for 5 minutes.
product_list categoryId, active, search (up to 255, searches name and product number), limit (1 to 100, default 25), offset Returns products and total.
product_update Required: id. Optional: name, price, description, ean, stock, manufacturerId, customFields (up to 50 fields, values text up to 5000, number, boolean or null), metaTitle, metaDescription, keywords (each up to 255), tags, searchKeywords Writes through the sync API (upsert with the product's version ID). The price is gross, the net price comes from SHOPWARE_DEFAULT_TAX_RATE.
product_set_active id, active Activates or deactivates the product.
search_products query (2 to 255), limit (1 to 50, default 20) Full-text search. Returns id, productNumber, name, active.

Content

These tools do not produce text. They provide context and instructions, Claude writes the text. It is saved with content_update.

Tool Parameters Behaviour
product_generate_content Required: productId. Optional: style, maxLength (200 to 5000, default 1000), includeSnippets (default true), snippetIds Returns style, profile, context, wikiUrl (always null), availableSnippets, maxLength and prompt. The prompt text is in German and contains product data, properties, profile instructions and the first 500 characters of the existing description without HTML. Snippets are only offered for a profile with includeSnippets: true.
product_generate_seo Required: productId. Optional: style, maxTitleLength (30 to 70, default 60), maxDescriptionLength (100 to 160, default 155) Returns style, profile, productName, categoryPath, existingDescription, constraints and prompt.
variant_generate_content Required: variantId. Optional: inheritFromParent (default true), focusOnOptions (default true) Prompt for the variant description, fixed length 500. inheritFromParent has no effect: the server does not load a parent product, the prompt is based on the variant itself. Style detection also runs automatically on the variant's own categories, there is no style parameter.
content_update Required: productId. Optional: description (up to 65535), metaTitle, metaDescription, keywords (each up to 255) Saves through the same update as product_update. Returns productId and the list of changed fields.

Categories

Tool Parameters Behaviour
category_list parentId, depth (1 to 10, default 3), includeInactive (default false) Flat list of up to 500 categories. With parentId only direct children. children is always empty, depth does not change the result. productCount is the number of subcategories. Cached for 10 minutes.
category_get Required: id. Optional: includeProducts (default false), productLimit (1 to 100, default 25) Category with breadcrumb and SEO data, optionally with a product list.
category_generate_content Required: id. Optional: style, maxLength (100 to 2000, default 500) Returns the category (id, name, breadcrumb), style, maxLength and a short English instruction with the profile's form of address, tone and target audience.
category_update Required: id. Optional: description (up to 65535), metaTitle, metaDescription, keywords (each up to 255) Updates the fields and then clears the server's entire cache.

Helpers

Tool Parameters Behaviour
get_properties groupId Property groups with options, up to 100 groups, sorted by position.
get_manufacturers search (up to 100), limit (1 to 100, default 50) Manufacturers with link, description and logo. The list without a search is cached for 10 minutes.
snippet_list activeOnly (default true) Snippets of the plugin with the mmd-product-snippet entity, up to 100, with identifier, name and active.

Mail templates

Templates can neither be created nor deleted.

Tool Parameters Behaviour
mail_template_list search (type name or subject), limit (1 to 100, default 50), offset Returns templates with technicalName, typeName, subject, systemDefault, updatedAt as well as count and total.
mail_template_get id or technicalName Details with subject, HTML and plain content and the mail type including the entities available for Twig. Cached for 10 minutes.
mail_template_update Required: id. Optional: subject (1 to 998), contentHtml, contentPlain (each up to 16777215), senderName (up to 255), description (up to 65535) Changes only the fields you pass. Twig syntax stays untouched in the content.
mail_template_send_test Required: mailTemplateId, recipient. Optional: salesChannelId Sends the template in test mode (Shopware fills Twig variables with sample data). The recipient must be a valid email address up to 254 characters and must neither contain localhost nor use an IP address as domain. Limited to 5 calls per template and 10 in total per minute (RATE_LIMITED).

Flows

Tool Parameters Behaviour
flow_list active, eventName (exact), search (name or description), hasMailAction, limit (1 to 100, default 50), offset List with actionCount and hasMailAction. action.mail.send and action.mail.send.create.document count as mail actions. The hasMailAction filter applies after the page was fetched, so total then counts only the filtered page.
flow_get id or name (exact) Flow with sequences as a tree ordered by position, including the rule. Cached for 5 minutes.
flow_toggle id, active Switches the flow on or off and returns the updated flow.

Media

Tool Parameters Behaviour
media_list mediaFolderId, mimeTypePrefix (format type/, such as image/), hasAlt, limit (1 to 100, default 25), offset Newest first. hasAlt: false returns media without alt text (NULL). Returns count, total, media.
media_get id Details with thumbnails, folder and the products that use the medium. Cached for 5 minutes.
media_update Required: id. Optional: alt, title (each up to 255) At least one of the two is required.
media_search query (2 to 255), limit (1 to 50, default 20) Full-text search across file name, alt text and title.
media_audit_alt onlyActive (default true), limit (1 to 200, default 100) Finds images (image/) without alt text through the product-media assignment and groups them per medium with the affected products. The limit applies to the queried assignments. If that query fails, the route through the media entity is used. Returns totalMediaChecked, missingAltCount, affectedProductCount, items, recommendation.
media_upload_url Required: url (http or https, up to 2048). Optional: alt, title, mediaFolderId Creates a medium and has Shopware download the file from the URL. File name and extension come from the URL, extensions not on the list become jpg. Allowed: jpg, jpeg, png, gif, webp, svg, bmp, tiff, tif, pdf, ico. If the download fails the created medium is deleted again. Internal and private addresses are rejected, see Security.

Orders (read only)

Tool Parameters Behaviour
order_list orderStatus (open, in_progress, completed, cancelled), paymentStatus (open, authorized, paid, paid_partially, refunded, refunded_partially, failed, cancelled, unconfirmed, reminded, chargeback), deliveryStatus (open, shipped, shipped_partially, returned, returned_partially, cancelled), customerEmail (substring), dateFrom, dateTo (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS), limit (1 to 100, default 25), offset Newest first. Returns count, total, orders including customerName and customerEmail. dateFrom and dateTo are passed unchanged to Shopware as lower and upper bound. Whether the end day is still included for a plain date depends on how Shopware interprets the date.
order_get id or orderNumber Order with customer (including company), billing and shipping address (with phone number), line items, payments, deliveries and customer comment. Cached for 2 minutes.
order_stats dateFrom, dateTo Count, revenue (sum of the order totals), average order value (average of the order total per order, including shipping and tax, rounded to two decimals), breakdown by order and payment status, period and currency symbol. The same date caveat as for order_list applies.

The order tools bring personal data (name, email, addresses, phone number) into the conversation with Claude. See Security and privacy.

Cross-selling

Tool Parameters Behaviour
cross_selling_list productId Up to 50 groups with id, name, type, active, position, assignedProductCount.
cross_selling_get id Group with assigned products and, where applicable, the product stream. Cached for 5 minutes.
cross_selling_create Required: productId, name (1 to 255). Optional: type (productList or productStream, default productList), active (default true), position (from 0, default 1), sortBy (name, cheapestPrice, releaseDate, productNumber), sortDirection (ASC, DESC), limit (1 to 100, default 24), assignedProductIds, productStreamId Creates the group. The order of assignedProductIds determines the position.
cross_selling_update Required: id. Optional: name, active, position, sortBy, sortDirection, limit, assignedProductIds Changes only the fields you pass.
cross_selling_suggest Required: productId. Optional: limit (5 to 50, default 20) Provides context for recommendations: the source product with properties, candidates (active products from the same categories, main products only, no variant child products) and the names of existing groups. Claude makes the selection.

SEO URLs

Allowed values for routeName: frontend.detail.page (product), frontend.navigation.page (category), frontend.landing.page (landing page).

Tool Parameters Behaviour
seo_url_list routeName, salesChannelId, foreignKey, isCanonical, isDeleted, search (2 to 255), limit (1 to 100, default 25), offset Sorted by path. Returns urls and total.
seo_url_audit routeName, salesChannelId, limit (10 to 500, default 200) Checks the first URLs (sorted by entity) for three problems: deleted_url (warning), duplicate_path (error, several canonical URLs with the same path in the same sales channel) and no_canonical (error, entity without a canonical URL). When limit truncates the data, findings can be incomplete.
seo_url_update Required: id. Optional: seoPathInfo (1 to 2048), isCanonical, isDeleted At least one field is required. A new seoPathInfo automatically sets isModified to true.
seo_url_generate routeName, salesChannelId (both required) Calls the Shopware action /api/_action/seo-url/create-custom-url and falls back to /api/_action/seo-url/canonical on error.