Skip to Content

Settings

Every Intellij SFCC VS Code setting - what it does, its default, when it takes effect, and settings.json examples

Every extension setting uses the intellij-sfcc.* prefix. Open Settings (Cmd+, / Ctrl+,) and search for Intellij SFCC, or edit settings.json directly with Preferences: Open User Settings (JSON) or Preferences: Open Workspace Settings (JSON). You only need to add the settings you want to change; anything you leave out keeps the default shown on this page

Connection selection, code version, and Auto Upload are not settings. They belong to the active connection and are managed from the Connections panel and its status-bar actions

User or workspace settings

VS Code keeps two levels of settings, and the workspace level wins when both define the same key:

  • User settings apply to every project you open. Use them for personal preferences such as tag colors, the formatter, or Log Center performance tuning
  • Workspace settings live in .vscode/settings.json and apply to one project. Use them for values the whole team should share, such as custom completion rules, <ismodule/> file names, or a fixed MCP port

Never put hostnames, usernames, passwords, or access keys in settings.json. Credentials live in the encrypted credentials file, and connections are stored separately, so .vscode/settings.json stays safe to commit

Some settings are also written for you by the extension:

SettingWritten byLevel
intellij-sfcc.credentialsFilePathThe Credentials panel when you create or select a credentials fileUser
intellij-sfcc.deployment.clearCodeVersionAn AI agent through the confirmed MCP deploy settings toolWorkspace
intellij-sfcc.mcp.tools.profile, mcp.tools.enabled, mcp.tools.disabledThe profile picker and tool toggles in the MCP panelWorkspace
intellij-sfcc.logs.*The Log Center Settings tabUser, or the level that already overrides the value

When changes take effect

Most settings apply as soon as you save. The exceptions are listed below

ChangeWhat happens
intellij-sfcc.isml.modules.filesThe ISML server keeps the new list but reads the module files again only on the next module-file change. Run Developer: Reload Window to apply it at once
intellij-sfcc.mcp.enabled, mcp.auth.enabled, mcp.allowDeprecatedSse, mcp.portThe local MCP server restarts with the new values. Connected AI clients need to reconnect
intellij-sfcc.mcp.tools.*, mcp.analytics.*Applied to the running MCP server without a restart. Clients that do not react to tools/list_changed need their refresh or reconnect action
Everything elseApplied immediately

Workspace and deployment

SettingDefaultPurpose
intellij-sfcc.credentialsFilePath""Absolute path to the encrypted credentials file shared across projects
intellij-sfcc.concurrentRequestsPerSecond7Maximum parallel WebDAV requests for auto upload and deployments
intellij-sfcc.deployment.clearCodeVersionfalseHow deployment cleans the target code version before uploading
intellij-sfcc.metadataAttributes.colorMode"unusedOnly"How metadata attribute definitions in XML are colored by usage: "off", "unusedOnly", or "heatmap"

SFCC MCP

These settings control the local MCP server that lets AI clients such as Claude Code, Cursor, Codex, and GitHub Copilot use your project's SFCC knowledge. See SFCC MCP for connecting a client

SettingDefaultPurpose
intellij-sfcc.mcp.enabledtrueStart the local MCP server together with the scripting language server
intellij-sfcc.mcp.port0Loopback port. 0 picks a stable automatic port per workspace
intellij-sfcc.mcp.auth.enabledfalseRequire a workspace bearer token from MCP clients
intellij-sfcc.mcp.allowDeprecatedSsefalseAlso serve the legacy /sse and /messages endpoints
intellij-sfcc.mcp.tools.profile"sfcc-full"Which group of tools AI clients can see
intellij-sfcc.mcp.tools.enabled[]Tools to show even when the profile hides them
intellij-sfcc.mcp.tools.disabled[]Tools to hide even when the profile shows them
intellij-sfcc.mcp.tools.allowAgentProfileActivationfalseDeprecated and ignored
intellij-sfcc.mcp.analytics.captureRawfalseAlso store full, unredacted request and response payloads in local analytics

Server and port

The server listens on the loopback interface only, so it is never reachable from other machines. With mcp.port set to 0, the extension derives a port from the workspace path (in the 32768-57767 range) and remembers it, so the address in your client configuration stays the same between VS Code sessions

Set an explicit port when a client configuration must point to a known address, or when the automatic port collides with another service. Put it in workspace settings; a port in user settings applies to every window, and two open projects would then compete for the same port:

.vscode/settings.json
{
  "intellij-sfcc.mcp.port": 43210
}

Set mcp.enabled to false to stop the server completely, for example on a project where you do not use AI clients

Authentication

By default, any local process can call the server. With mcp.auth.enabled set to true, clients must send a bearer token that is unique to the workspace. The token is generated on first use, stored in VS Code SecretStorage, and handed to clients through the INTELLIJ_SFCC_MCP_TOKEN environment variable. Generated client configuration snippets reference that variable and never contain the token itself

.vscode/settings.json
{
  "intellij-sfcc.mcp.auth.enabled": true
}

Enable it on shared machines or when other local tools should not reach your SFCC instance through MCP. Copy or rotate the token from the MCP panel

Tool profiles

Profiles are cumulative: each one contains everything in the profile before it

ProfileAddsCan change anything?
router-coreProject context, client profile, tool policy status, and tool recommendations onlyNo
sfcc-readonlyLocal code intelligence: cartridge path and overrides, */ and ~/ resolution, DW types, routes, hooks, templates, resources, forms, pipelines, and referencesNo, local reads only
sfcc-operationalReads from the connected instance: logs, WebDAV list and read, instance, site, and code-version status, remote diff, debugger contextNo, remote reads only
sfcc-planPlan tools that describe a deploy, upload, WebDAV change, or code-version change without running itNo, plans only
sfcc-fullExecute tools for the planned operationsYes. Uploads and deploys of code run at once, and every other guarded action needs a confirmation in VS Code

Pick the smallest profile that covers the task. sfcc-readonly suits day-to-day coding, sfcc-operational adds sandbox debugging, and sfcc-full is for short, supervised sessions where the agent needs to deploy or upload. Choosing a profile in the MCP panel writes this setting to workspace settings for you

Enabling or disabling individual tools

mcp.tools.enabled and mcp.tools.disabled adjust the chosen profile tool by tool, using full intellijsfcc.* tool names. Each tool is resolved in this order:

  1. Core tools (intellijsfcc.project.context, intellijsfcc.client.profile, intellijsfcc.skills.list, intellijsfcc.skills.read, intellijsfcc.task.plan, intellijsfcc.tools.policy.status, intellijsfcc.tools.recommend) are always available and cannot be disabled
  2. A tool listed in mcp.tools.disabled is hidden
  3. A tool listed in mcp.tools.enabled is shown
  4. Otherwise the profile decides

Because disabled wins over enabled, listing a tool in both hides it. For example, keep an agent read-only on your code but let it search Log Center:

.vscode/settings.json
{
  "intellij-sfcc.mcp.tools.profile": "sfcc-readonly",
  "intellij-sfcc.mcp.tools.enabled": ["intellijsfcc.logs.center.search"]
}

Or allow everything except deployment:

.vscode/settings.json
{
  "intellij-sfcc.mcp.tools.profile": "sfcc-full",
  "intellij-sfcc.mcp.tools.disabled": ["intellijsfcc.deploy.execute"]
}

Switching individual tools on or off in the MCP panel updates these two lists in workspace settings

Legacy transport and analytics

Streamable HTTP is the normal transport. Enable mcp.allowDeprecatedSse only for an older client that can connect exclusively through the SSE endpoints

Request metadata such as tool names, timings, and status is always logged locally under .intellij-sfcc/mcp-analytics in the workspace. mcp.analytics.captureRaw additionally stores the complete request and response bodies, which helps when debugging a misbehaving client

Raw capture is unredacted. Payloads can contain credentials, tokens, cookies, prompts, and source code. Turn it on only while debugging, turn it off afterwards, and keep .intellij-sfcc/ out of version control (the .gitignore the extension writes there does that unless you replaced it)

mcp.tools.allowAgentProfileActivation no longer has any effect. Agents cannot change the profile; select it in the MCP panel, then refresh or reconnect the client

Log Center

These settings tune how Log Center downloads, parses, indexes, and displays instance logs. The Settings tab in Log Center edits the same values, and changes apply without a reload. Values outside the allowed range are clamped to the nearest limit

SettingDefaultRangePurpose
intellij-sfcc.logs.parseConcurrency101-32Parse and tail worker jobs that can run at the same time
intellij-sfcc.logs.initialParseConcurrency31-8CPU-heavy parses allowed at once during a bulk initial import
intellij-sfcc.logs.rangeChunkSizeMb41-64Megabytes per tail read, fallback range download, or local parse chunk
intellij-sfcc.logs.tailIntervalMs1000250-60000How often watched log files are polled for new lines, in milliseconds
intellij-sfcc.logs.autoRefreshIntervalSec52-600How often the list of remote log files is refreshed, in seconds
intellij-sfcc.logs.maxIndexedOccurrences500001000-1000000Recent occurrences kept for in-memory search when SQLite full-text search is unavailable
intellij-sfcc.logs.maxRawExamples5000100-100000Recent raw log lines kept in memory for event details and reports
intellij-sfcc.logs.filterOptionBatchSize10025-500Values rendered first, and added per scroll step, in large filter menus
intellij-sfcc.logs.maxFacetValues10000100-50000Distinct source, site, endpoint, and session values sent to filter menus

How the values work together

  • Throughput versus CPU. parseConcurrency limits all worker jobs, including tails that mostly wait on the network. initialParseConcurrency limits only the CPU-bound work of parsing freshly downloaded files. Raise the second one on a machine with many cores to import a day of logs faster; lower it when VS Code feels sluggish during an import
  • Chunk size. Initial parses of remote files normally download a ZIP first. rangeChunkSizeMb sets the size of each ranged read used for tailing, for the fallback when a ZIP download is not possible, and for streaming local files. Larger chunks mean fewer requests but more memory per job
  • Freshness versus load. tailIntervalMs sets how quickly new lines appear in a watched file, and autoRefreshIntervalSec sets how quickly newly created log files appear in the list. Shorter intervals send more requests to the instance
  • Memory. maxRawExamples and maxIndexedOccurrences bound the memory used by detail views, reports, and fallback search. Older entries are dropped first; parsed results already stored on disk are not affected
  • Filter menus. maxFacetValues caps how many distinct values a filter menu can list. Typing an exact value still filters correctly beyond the cap. filterOptionBatchSize only affects how quickly a long menu opens
User settings.json
{
  "intellij-sfcc.logs.initialParseConcurrency": 6,
  "intellij-sfcc.logs.rangeChunkSizeMb": 16,
  "intellij-sfcc.logs.maxRawExamples": 20000,
  "intellij-sfcc.logs.maxFacetValues": 30000
}

Imports large log sets faster, keeps more raw lines for reports, and lists more distinct sessions and endpoints in filters, at the cost of more CPU and memory

Getting started, releases, and pipelines

SettingDefaultPurpose
intellij-sfcc.gettingStarted.doNotOpenAutomaticallyfalseStop the Getting Started page from opening by itself
intellij-sfcc.gettingStarted.statusBarIconOnlyfalseShow only the red panda in the Setup status bar item, without its text
intellij-sfcc.releases.notificationstrueNotify you about release notes for your installed version and about newer releases
intellij-sfcc.pipelines.nodeGutterIconstrueShow the pipeline node type icon in the gutter of each node line when a pipeline XML file is open as source

Without gettingStarted.doNotOpenAutomatically, the Getting Started page opens every time a window starts on an SFCC project whose setup is unfinished. The page has the same switch as a Don't open automatically checkbox, and the Setup item in the status bar always opens it. With gettingStarted.statusBarIconOnly the item keeps its tooltip with the setup progress

releases.notifications checks at startup and every five minutes while the window is focused. Release history stays available in the Account view when it is off. Both settings are application wide, so they apply to every window

pipelines.nodeGutterIcons uses the same icons as the Pipeline Editor (start, pipelet, script, decision, join, interaction, and more), so you can read a pipeline's XML source at a glance

ISML editing

SettingDefaultPurpose
intellij-sfcc.isml.formatter.enabledtrueFormat .isml files with the built-in formatter
intellij-sfcc.isml.formatter.type"Indentation"Formatting engine: "Indentation" or "JS-Beautify"
intellij-sfcc.isml.formatter.escapeHashtrueFormat Document and Organize Imports write each bare # as ${'#'}
intellij-sfcc.isml.formatter.wrapAttributes"preserve"Attribute wrapping for the JS-Beautify engine
intellij-sfcc.isml.lintertrueISML template checks: unclosed and misplaced tags, missing required attributes and a bare #
intellij-sfcc.isml.modules.files["modules.isml", "module.isml"]File names scanned for <ismodule/> custom tag declarations
intellij-sfcc.customTagColorDark"#2ed09a"Color of <is…> tags in dark themes
intellij-sfcc.customTagColorLight"#0a7b7b"Color of <is…> tags in light themes

Formatter

The ISML language server formats .isml files, so Format Document, Format Selection, and format on save use it. If another extension also formats ISML, choose the formatter with Format Document With.... The two engines behave differently:

  • Indentation re-indents ISML and HTML structure (block tags, <iselse>/<iselseif> branches, nested markup) and leaves everything else exactly as written: tag text, attributes, ${...} expressions, and one-line markup. A bare # is the one exception, escaped while formatter.escapeHash is on. It follows editor.tabSize and editor.insertSpaces. wrapAttributes has no effect on this engine
  • JS-Beautify is the legacy engine. It rewrites markup with js-beautify and reads VS Code's html.format.* settings (such as html.format.wrapLineLength and html.format.indentInnerHtml) in addition to wrapAttributes

wrapAttributes accepts the js-beautify values preserve, auto, force, force-aligned, force-expand-multiline, aligned-multiple, and preserve-aligned. With preserve, line wrapping is turned off completely so existing attribute layout is kept. For example, to put each attribute on its own line when a tag is too long:

.vscode/settings.json
{
  "intellij-sfcc.isml.formatter.type": "JS-Beautify",
  "intellij-sfcc.isml.formatter.wrapAttributes": "force-expand-multiline",
  "html.format.wrapLineLength": 120
}

Set formatter.enabled to false when your team formats ISML with another tool, such as Prettier. See Formatting for before-and-after examples

Linter and custom tags

isml.linter turns the ISML server's template checks on or off: unclosed and misplaced ISML tags, missing required attributes, and the bare # error with its quick fixes. A change applies without a restart. Problems inside ${...} and <isscript> come from the Script server either way. See ISML diagnostics

isml.modules.files lists the file names the ISML server scans for <ismodule/> declarations. Tags declared in matching files complete with their attributes in every template, and the tag name links to the module template. Add your own file names if your project declares custom tags elsewhere, and keep the defaults you still use, because the list replaces the default:

.vscode/settings.json
{
  "intellij-sfcc.isml.modules.files": ["modules.isml", "module.isml", "brandmodules.isml"]
}

See Custom tags for how module declarations are resolved

Tag colors

customTagColorDark and customTagColorLight color every tag that starts with <is, so ISML logic stands out from HTML. Dark themes use customTagColorDark; light themes and both high contrast themes use customTagColorLight. The extension applies the color through editor.semanticTokenColorCustomizations for the active theme in your user settings, and changing the theme or either color updates the editor immediately

User settings.json
{
  "intellij-sfcc.customTagColorDark": "#c792ea",
  "intellij-sfcc.customTagColorLight": "#7c4dff"
}

Scripting completion rules

The scripting language server offers route, hook, template, and resource completions inside string arguments of specific functions. These rules tell it which functions and which argument to watch, so you can extend completions to your project's own helpers

SettingCompletesDefault rules
intellij-sfcc.completions.routesController route names such as Cart-ShowURLUtils.url/abs/http/https, any url/abs/http/https call, and URLAction, argument 0
intellij-sfcc.completions.hooks.nameHook extension point namescallHook, hasHook, hooksHelper, hookHelper, argument 0
intellij-sfcc.completions.hooks.functionFunction names implemented for a hookcallHook, hooksHelper, hookHelper, argument 1
intellij-sfcc.completions.templatesISML template pathsrender/renderTemplate argument 0, and sendEmail argument 1
intellij-sfcc.completions.resources.propertiesResource property keysmsg/msgf, argument 0
intellij-sfcc.completions.resources.bundlesResource bundle namesmsg/msgf, argument 1

Rule format

Each setting is an array of rules. A rule has three fields:

FieldRequiredMeaning
methodsYesFunction or method names that trigger the completion
paramIndexYesZero-based position of the argument that receives the completion. 0 is the first argument
classNameNoRestrict the rule to calls on this exact identifier, such as URLUtils.url(...)

Without className, a rule matches both a plain call (myHelper('...')) and a method call on any object (helpers.myHelper('...')). With className, it matches only ClassName.method('...') where the receiver is written as that identifier. Completion triggers inside a string literal, including a string that is part of a + concatenation

routes adds to its defaults: your rules are tried first, then the built-in ones, which always stay on. Every other array replaces its defaults instead of adding to them, so copy the default rules you still need into your value, as in the examples below

Examples

A project wraps URLUtils in its own helper, urlHelper.getUrl(action, params). To get route completion in that helper, add one rule. The built-in route rules stay on after it:

.vscode/settings.json
{
  "intellij-sfcc.completions.routes": [
    { "methods": ["getUrl"], "paramIndex": 0 }
  ]
}

The same route rules drive go to definition, references and the usage counts of the route CodeLens. A list that still repeats the built-in rules works too, each rule is used once. The JetBrains plugin reads this setting from the project's .vscode/settings.json as well, see SFCC Route Calls

A custom email service takes the template as its second argument, emailService.send(recipient, templatePath, context):

.vscode/settings.json
{
  "intellij-sfcc.completions.templates": [
    { "methods": ["render", "renderTemplate"], "paramIndex": 0 },
    { "methods": ["sendEmail"], "paramIndex": 1 },
    { "className": "emailService", "methods": ["send"], "paramIndex": 1 }
  ]
}

A localization wrapper, i18n.t(key, bundle), mirrors Resource.msg. Add it to both resource rules so keys and bundles complete:

.vscode/settings.json
{
  "intellij-sfcc.completions.resources.properties": [
    { "methods": ["msg", "msgf"], "paramIndex": 0 },
    { "methods": ["t"], "paramIndex": 0 }
  ],
  "intellij-sfcc.completions.resources.bundles": [
    { "methods": ["msg", "msgf"], "paramIndex": 1 },
    { "methods": ["t"], "paramIndex": 1 }
  ]
}

Rule changes are sent to the language server as soon as you save. See Code completion for everything else the scripting server completes

Unused setting

intellij-sfcc.editor.scripts.hooks-identifiers appears in the Settings UI but is not read by the extension. Its declaration duplicates the resource-bundle rule and has a mismatched type, so leave it unset

Defaults the extension sets

Installing the extension also changes a few VS Code defaults. They behave like any default: a value in your user or workspace settings wins. The one exception is the ISML default formatter, which the extension writes into your user settings on every start

VS Code settingDefault from Intellij SFCC
files.associations**/cartridge/**/*.js and *.ts open as SFCC JavaScript and SFCC TypeScript, except files under cartridge/client and cartridge/static, which stay plain JavaScript and TypeScript. Pipeline XML under pipelines/ opens as SFCC pipeline XML
workbench.editorAssociationsPipeline XML files under pipelines/ open in the Pipeline Editor
editor.quickSuggestionsSuggestions inside strings and comments for SFCC JavaScript, SFCC TypeScript, and DigitalScript, and inside strings for ISML, so route, template, and resource completions appear while you type
"[isml]" in user settingsSet to "editor.defaultFormatter": "intellijsfcccom.intellij-sfcc" on every start. This replaces the whole user "[isml]" block, so keep other ISML-only settings, such as editor.formatOnSave, under "[isml]" in workspace settings. See Formatting

To open pipelines as text by default, map the pattern back to the text editor in your settings:

User settings.json
{
  "workbench.editorAssociations": {
    "**/cartridge/pipelines/*.xml": "default",
    "**/pipelines/*.xml": "default"
  }
}

Theme colors

The extension contributes theme colors that you can override with workbench.colorCustomizations:

ColorUsed for
intellijsfcc.metadataAttribute.unusedForeground, unusedOverviewRulerMetadata attributes with no usages, and their scrollbar marker
intellijsfcc.metadataAttribute.lowUsageForeground, mediumUsageForeground, highUsageForegroundMetadata attributes with 1-2, 3-9, and 10 or more usages in "heatmap" mode
intellijsfcc.debugger.statusBar.readyBackground, readyForegroundThe debugger status bar item when it is ready to start
intellijsfcc.debugger.statusBar.runningBackground, runningForegroundThe debugger status bar item while a session runs
intellijsfcc.gettingStarted.statusBar.setupForegroundThe orange accent in the Getting Started walkthrough
User settings.json
{
  "workbench.colorCustomizations": {
    "intellijsfcc.metadataAttribute.unusedForeground": "#e06c75",
    "intellijsfcc.metadataAttribute.highUsageForeground": "#7aa2f7"
  }
}

Complete example

A shared .vscode/settings.json for a team project, with no connection or credential values:

.vscode/settings.json
{
  // Keep deployments gentle on a small sandbox
  "intellij-sfcc.concurrentRequestsPerSecond": 3,

  // Find dead custom attributes in metadata XML
  "intellij-sfcc.metadataAttributes.colorMode": "unusedOnly",

  // AI clients can read code and the sandbox, but never change it
  "intellij-sfcc.mcp.port": 43210,
  "intellij-sfcc.mcp.auth.enabled": true,
  "intellij-sfcc.mcp.tools.profile": "sfcc-operational",

  // Project-specific ISML custom tag declarations
  "intellij-sfcc.isml.modules.files": ["modules.isml", "module.isml", "brandmodules.isml"],

  // Route completion inside the project's URL helper, before the built-in rules
  "intellij-sfcc.completions.routes": [
    { "methods": ["getUrl"], "paramIndex": 0 }
  ]
}

VS Code accepts comments in settings.json. See Set Up Your Project for connections and cartridges, and SFCC MCP for connecting AI clients

On this page