Markus Michalski FAQ

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.

Deutsche Version

Back to overview

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_URL and the three CACHE_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 yields wikiUrl: null in content results.

At startup a missing HTTPS scheme in SHOPWARE_URL is only reported as a warning on stderr. The server also runs with http:// but then sends the credentials unencrypted. No warning is printed for localhost and 127.0.0.1.

Set up the Shopware integration

  1. In the Shopware admin create a new integration under Settings > System > Integrations.
  2. Copy client ID and client secret into the .env.
  3. 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.example file 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

  1. CONTENT_PROFILES_PATH, if set.
  2. ~/.claude/mcp-servers/shopwareadmin/content-profiles.json, if present.
  3. ./content-profiles.json in 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

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.