Shopware Admin: Configuration
Configure the Shopware Admin MCP server: environment variables with defaults, setting up the Shopware integration and content profiles in content-profiles.json.
Shopware Admin: Configuration
This documentation always describes the current state of the main branch.
Environment variables
Values come from the process environment or from the .env file (search order see Installation). A template ships as .env.example in the repository. Lines starting with # are comments, values may be wrapped in single or double quotes.
Required
| Variable | Description |
|---|---|
SHOPWARE_URL |
Base URL of the shop without a trailing slash, for example https://shop.example.com. Must be a valid URL. |
SHOPWARE_CLIENT_ID |
Client ID of the Shopware integration. |
SHOPWARE_CLIENT_SECRET |
Client secret of the Shopware integration. |
SHOPWARE_DEFAULT_TAX_ID |
ID of the default tax rate (32 hex characters), used by product_create when no taxId is passed. |
SHOPWARE_DEFAULT_SALES_CHANNEL_ID |
ID of the default sales channel. New products become visible there, and test mails use it as their context. |
WIKIJS_BASE_URL |
Must be a valid URL, otherwise startup aborts. The address is not used anywhere, see the note below. |
Optional
| Variable | Default | Description |
|---|---|---|
SHOPWARE_DEFAULT_TAX_RATE |
0 |
Tax rate in percent as a whole number. The net price is calculated from it, 0 suits small-business owners. An invalid value falls back to 0. |
SHOPWARE_DEFAULT_CURRENCY_ID |
b7d2554b0ce847cd82f3ac9bd1c0dfca |
Currency ID used for prices. The default is the ID of the EUR currency in a standard installation. |
CONTENT_PROFILES_PATH |
not set | Path to the content profiles file, absolute or relative to the working directory. Without a value the search order applies: ~/.claude/mcp-servers/shopwareadmin/content-profiles.json if present, otherwise ./content-profiles.json. |
LOG_LEVEL |
info |
debug, info, warn or error. Any other value is treated like info. |
CACHE_TTL_CATEGORIES |
3600000 |
Has no effect, see the note below. |
CACHE_TTL_PROPERTIES |
3600000 |
Has no effect, see the note below. |
CACHE_TTL_SNIPPETS |
300000 |
Has no effect, see the note below. |
WIKIJS_BASE_URLand the threeCACHE_TTL_*variables are read and validated at startup (valid URL, value greater than 0) but no service uses them afterwards. Cache lifetimes are fixed in the code, see Technical details. The wiki hook always yieldswikiUrl: nullin content results.
At startup a missing HTTPS scheme in
SHOPWARE_URLis only reported as a warning on stderr. The server also runs withhttp://but then sends the credentials unencrypted. No warning is printed forlocalhostand127.0.0.1.
Set up the Shopware integration
- In the Shopware admin create a new integration under Settings > System > Integrations.
- Copy client ID and client secret into the
.env. - Give the integration the permissions for the areas you want to use.
The server signs in with the OAuth2 client credentials grant (POST /api/oauth/token). These are the entities it addresses per tool area:
| Area | Entities | Access |
|---|---|---|
| Products, content | product, product_media, tag |
read, write |
| Categories | category |
read, write |
| Properties, manufacturers | property_group, property_group_option, product_manufacturer |
read |
| Mail templates | mail_template, mail_template_type |
read, write, send test mail |
| Media | media, media_folder, media_thumbnail |
read, write, create, delete after a failed upload |
| Orders | order with customer, addresses, line items, payments, deliveries, states, currency, sales channel |
read only |
| Flows | flow, flow_sequence, rule |
read, change flow |
| Cross-selling | product_cross_selling, assigned products, product_stream |
read, write |
| SEO URLs | seo_url |
read, write |
| Snippets | mmd-product-snippet (plugin) |
read |
The
.env.examplefile names only part of these permissions. The repository contains no permission check: whatever the integration may do, the server may do. Grant only the permissions of the areas you need and use separate integrations for test and production.
Content profiles
The tools product_generate_content, product_generate_seo, variant_generate_content and category_generate_content produce instructions for Claude. Tone, form of address, structure and target audience come from content profiles that you define in a JSON file.
Search order
CONTENT_PROFILES_PATH, if set.~/.claude/mcp-servers/shopwareadmin/content-profiles.json, if present../content-profiles.jsonin the working directory.
If the server finds no file at the resolved location it uses the built-in profiles and writes a note to the log. This also applies when CONTENT_PROFILES_PATH points to a missing file. An existing but invalid file prevents startup, with one error message per faulty field.
Structure
{
"language": "de",
"defaultProfile": "creative",
"profiles": {
"creative": {
"tonality": "Persoenlich, warm, emotional",
"addressing": "du",
"structure": ["Emotionaler Einstieg (Frage/Anekdote)", "Was ist es?", "Technische Details (Format, Groesse)", "Anwendungstipps"],
"targetAudience": "Hobbybastler, Kreative, DIY-Enthusiasten",
"exampleIntro": "Was waere denn Ostern ohne den Osterhasen?",
"includeSnippets": false
}
},
"categoryMapping": {
"Stickdateien": "creative"
}
}
| Field | Type | Description |
|---|---|---|
language |
text, 2 to 5 characters | Default de. Read but not evaluated by any tool. |
defaultProfile |
text | Required. Name of an existing profile, applies when no category matches. |
profiles |
object | Required, at least one profile. The key is the profile name and also the value for the style parameter. |
profiles.*.tonality |
text | Required, not empty. |
profiles.*.addressing |
du or Sie |
Required, exactly this spelling. |
profiles.*.structure |
list of texts | Required, at least one entry. |
profiles.*.targetAudience |
text | Required, not empty. |
profiles.*.exampleIntro |
text | Required, not empty. |
profiles.*.includeSnippets |
boolean | Default false. With true the server offers the active snippets. |
categoryMapping |
object | Required (may be empty). Category name to profile name, every value must be an existing profile. |
Built-in profiles
Without a file the profiles creative (address du, default) and software (address Sie, with snippets) apply. The category mapping is Software to software and Stickdateien, Genaehtes and 3D-Druck to creative. These are the values of the author's shop.
Style detection
- The server takes the product's first category and its breadcrumb (path from the root).
- Each path segment is compared exactly, case-sensitive, against the keys in
categoryMapping. The first hit counted from the root wins. - Without a hit or without a category
defaultProfileapplies. - The
styleparameter overrides detection. An unknown name leads toINVALID_INPUTwith the list of available profiles. variant_generate_contenthas nostyleparameter and always detects the style automatically.
Snippets
With includeSnippets: true the server queries the mmd-product-snippet entity. It comes from a Shopware plugin for product text snippets that must be installed in the shop. Without that plugin the query fails with an API error, and so does the snippet_list tool.