loading…
Search for a command to run...
loading…
SFMC AMPscript/SSJS/GTL tools and searchable Marketing Cloud Engagement help (MCE vs Next scoped) via MCP.
SFMC AMPscript/SSJS/GTL tools and searchable Marketing Cloud Engagement help (MCE vs Next scoped) via MCP.
MCP server providing Salesforce Marketing Cloud language intelligence — AMPscript, SSJS, and GTL — as Model Context Protocol tools, resources, and prompts for AI-assisted development and code review. Ships two searchable doc indexes: MCE help (Salesforce Help for Marketing Cloud Engagement administration and setup) and MCN developer docs (Marketing Cloud Next REST API and developer reference). Includes full Marketing Cloud Next (MCN) platform awareness: auto-detects whether a project targets MCE or MCN, restricts completions and validation to MCN-supported functions, flags SSJS as unsupported in MCN, surfaces MCN behavioral differences in hover and diagnostics, and provides a migration toolkit to analyze and rewrite code for MCN.
Built on sfmc-language-lsp, the same engine that powers the SFMC Language Service VS Code extension.
@mcp)This package is registered with the official MCP Registry as io.github.JoernBerkefeld/mcp-server-sfmc so it can appear in Visual Studio Code when you use the @mcp filter in the Extensions view (see the publish quickstart). Enable chat.mcp.gallery.enabled if the gallery does not show.
The registry only stores metadata; the server still runs locally via stdio (for example npx -y mcp-server-sfmc@latest). This is separate from @contribute:mcp, which lists VS Code extensions that contribute MCP definitions — use the SFMC Language Service for that path.
After publishing metadata (see Publish an MCP Server or the release workflow), you can confirm the entry with:
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.JoernBerkefeld/mcp-server-sfmc"
If you use the SFMC Language Service extension (1.101+), it registers this MCP server for discovery in VS Code — you normally do not need to edit .vscode/mcp.json or run npm install for that path; VS Code still launches the published package via npx when the server starts.
For other editors, or if you prefer explicit configuration, use the npx or install options below.
You do not have to install the VS Code extension. Pick one way to run the server:
| Approach | When to use it |
|---|---|
npx (no install) |
Default in the examples below. Runs the latest published version from npm on demand; first run may download the package. Requires Node.js and npm (which provides npx). |
npm install -g mcp-server-sfmc |
Same CLI as npx, but the package stays on disk so startup is faster and you can set "command": "mcp-server-sfmc" with empty args in your MCP config. |
npm install mcp-server-sfmc in a project |
Keeps a pinned version in that folder's node_modules — point your MCP config at npx mcp-server-sfmc with cwd set to the project, or run ./node_modules/.bin/mcp-server-sfmc directly. |
sfmc-review-diff (bundled CLI) |
For CI: spawns this MCP server, calls review_change on a unified diff (stdin or file), exits non-zero on ERROR by default. Install the package in the job, then e.g. git diff base...HEAD | npx sfmc-review-diff. |
None of these replace the VS Code extension for editing (syntax, LSP, snippets); they only expose the MCP server to tools that speak the Model Context Protocol.
sfmc-review-diffReady-to-copy workflows (GitHub Actions, GitLab CI, Jenkins, Azure Pipelines, Bitbucket Pipelines) live under ci-templates/. They run eslint-plugin-sfmc on changed files and sfmc-review-diff on the PR/MR unified diff. See ci-templates/README.md for what each file does and how the two checks differ.
| Feature | Details |
|---|---|
| Validation | Syntax errors, unknown functions, arity mismatches, unsupported SSJS syntax; target: 'next' flags MCN-incompatible functions and all SSJS |
| Lookup | Full function signatures, parameters, return types, MCN compatibility badge (API version), behavioral notes, and examples |
| PR review | Diff-aware review tool that surfaces issues in the exact lines that changed |
| Fix suggestions | Concrete, compilable replacement code; target: 'next' includes MCN platform issues |
| Completions | AMPscript completions (filtered to MCN-supported when target: 'next'); SSJS catalog (redirects to AMPscript for MCN) |
| Platform detection | detect_sfmc_platform checks .mcdevrc.json (MCE) or sfdx-project.json (MCN) in the project root |
| MCN compatibility analysis | check_mcn_compatibility analyzes files for MCN readiness — per-function classification (supported / needs review / not supported), SSJS block migration difficulty, and an executive summary |
| MCN migration | rewrite_for_mcn (tool + prompt) deterministically rewrites AMPscript and converts convertible SSJS to AMPscript for MCN, then applies AI reasoning to remaining manual-rewrite sections |
| Code conversion | convertSsjsToAmpscript and convertAmpscriptToSsjs (tool + prompt hybrid) — rule-based conversion with AI-enhanced handling of flagged sections |
| Prompts | Guided prompts for writing AMPscript/SSJS (with MCN constraints), reviewing code, converting between the two, and rewriting for MCN |
| Resources | Full function catalogs, keyword list, unsupported ES6+ syntax list |
| Help search | search_help (unified, auto-detects MCE vs MCN from project root); search_mce_help (MCE help, 7 product scopes); search_mcn_help (MCN developer API reference) |
mcp.jsonIf you are not using the SFMC Language Service extension's built-in MCP registration, add a .vscode/mcp.json file to your project (or copy it from this repo):
{
"servers": {
"sfmc": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-server-sfmc@latest"]
}
}
}
Open the file in VS Code — a Start button appears at the top. Click it to launch the server. Open GitHub Copilot Chat in Agent mode and the SFMC tools appear automatically.
Add to your Cursor settings (~/.cursor/mcp.json or project-level .cursor/mcp.json):
{
"mcpServers": {
"sfmc": {
"command": "npx",
"args": ["-y", "mcp-server-sfmc@latest"]
}
}
}
Restart Cursor. The tools are available in Agent mode.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"sfmc": {
"command": "npx",
"args": ["-y", "mcp-server-sfmc@latest"]
}
}
}
Restart Claude Desktop.
Add to your Windsurf MCP settings (~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"sfmc": {
"command": "npx",
"args": ["-y", "mcp-server-sfmc@latest"]
}
}
}
npm install -g mcp-server-sfmc
Then replace "command": "npx", "args": ["-y", "mcp-server-sfmc@latest"] with:
"command": "mcp-server-sfmc",
"args": []
| Tool | Description |
|---|---|
validate_ampscript |
Validate AMPscript code — unknown functions, arity, delimiter balance, comment syntax. target: 'next' flags MCN-incompatible functions. |
validate_ssjs |
Validate SSJS — ES6+ usage, missing Platform.Load, wrong API calls. target: 'next' flags all SSJS as unsupported. |
validate_sfmc_html |
Validate HTML with embedded AMPscript, SSJS, and GTL blocks. target: 'next' enables MCN validation. |
lookup_ampscript_function |
Full signature, parameters, return type, MCN compatibility badge (API version), behavioral notes for MCN, and examples |
lookup_ssjs_function |
Full signature and description for any SSJS Platform function or method |
list_ampscript_functions |
List all AMPscript functions, optionally filtered by platform: 'next' to return only MCN-supported functions |
review_change |
Review a unified diff — validates only added lines, maps back to diff line numbers |
suggest_fix |
Generate fix suggestions for each diagnostic in a code snippet. target: 'next' includes MCN fixes. |
get_ampscript_completions |
List valid completions at a given cursor position; MCN-unsupported functions marked [MCE only] when target: 'next' |
get_ssjs_completions |
List SSJS Platform API completions, optionally filtered by prefix; redirects to AMPscript completions when target: 'next' |
format_sfmc_code |
Apply basic formatting conventions (keyword casing, quote normalisation) |
detect_sfmc_platform |
Detect the target platform for a project — checks .mcdevrc.json (→ "engagement") or sfdx-project.json (→ "next") |
check_mcn_compatibility |
Analyze one or more AMPscript/HTML files for MCN readiness. Returns per-function classification, SSJS block migration difficulty, and an executive summary with overall migration effort. Run this before rewrite_for_mcn. |
rewrite_for_mcn |
Deterministic MCN rewrite engine: fixes .NET → Java format strings, removes StringToDate wrappers, converts convertible SSJS to AMPscript, marks unsupported functions, annotates the rest as MANUAL_REWRITE_REQUIRED. Prefer the rewrite_for_mcn prompt for interactive use — it calls this tool first, then applies AI reasoning to the flagged sections. Use the tool directly only for structured JSON output in pipelines. |
convertSsjsToAmpscript |
Rule-based SSJS → AMPscript conversion engine: Platform.Function.* → AMPscript equivalents, variable/request access, control flow. Flags JS-native constructs as MANUAL_REWRITE_REQUIRED. Prefer the convertSsjsToAmpscript prompt for interactive use. |
convertAmpscriptToSsjs |
Rule-based AMPscript → SSJS conversion engine: variables, control flow, function calls. Flags AMPscript-only constructs as MANUAL_REWRITE_REQUIRED. Prefer the convertAmpscriptToSsjs prompt for interactive use. |
search_help |
Unified help search — auto-detects the platform from projectRoot and routes to the right doc index. MCN projects search both the developer API reference and MCN admin docs. Pass target to override detection. |
search_mce_help |
Search bundled Marketing Cloud Engagement setup/ops help; use product_focus to target Engagement vs Next |
search_mcn_help |
Search bundled Marketing Cloud Next developer API documentation (objects, flows, segments, REST/SOAP APIs, AMPscript behavior in MCN) |
| URI | Description |
|---|---|
sfmc://ampscript/functions |
Full AMPscript function catalog with signatures |
sfmc://ssjs/functions |
Full SSJS function catalog |
sfmc://ampscript/keywords |
All AMPscript keywords |
sfmc://ssjs/unsupported-syntax |
ES6+ features not supported in SFMC SSJS |
sfmc://mce/product-context |
How Marketing Cloud Engagement differs from Marketing Cloud Next (when to use which) |
sfmc://mce/help-index |
List of bundled MCE help files and section counts per product scope |
sfmc://mcn/help-index |
List of bundled MCN developer API doc files and chunk counts |
Access via /mcp.sfmc.writeAmpscript etc. in VS Code, or via the prompts API:
| Prompt | Description |
|---|---|
writeAmpscript |
Generate AMPscript code for a described task. target: 'next' enforces MCN constraints (MCN-supported functions only, Java SimpleDateFormat patterns, no SSJS). |
writeSsjs |
Generate SSJS code for a described task. target: 'next' redirects to AMPscript instead (SSJS is not available in MCN). |
reviewSfmcCode |
Review AMPscript or SSJS code for bugs and best-practice violations. target: 'next' adds MCN compatibility checklist. |
rewrite_for_mcn |
Primary interface for MCN migration. Internally calls the rewrite_for_mcn tool for all deterministic rewrites, then applies AI reasoning to every MANUAL_REWRITE_REQUIRED section — producing a single fully migrated code block with a prose changelog. You always get both the rule-based pass and the AI pass in one step. |
convertSsjsToAmpscript |
Primary interface for SSJS → AMPscript conversion. Internally calls the convertSsjsToAmpscript tool for rule-based conversion, then AI-reasons over any sections the rules could not handle. |
convertAmpscriptToSsjs |
Primary interface for AMPscript → SSJS conversion. Internally calls the convertAmpscriptToSsjs tool for rule-based conversion, then applies AI reasoning to flagged AMPscript-only constructs. |
answerMceHowTo |
Guided prompt for admin/setup questions — searches bundled help and keeps Engagement vs Next explicit |
Marketing Cloud Next (MCN) supports 41 of the 150 AMPscript functions and does not support SSJS. Three supported functions have behavioral differences (see below). The migration toolkit guides you from analysis through to a fully rewritten result.
1. detect_sfmc_platform → confirm the project targets MCN
2. check_mcn_compatibility → understand scope: which files need work, how hard
3. rewrite_for_mcn prompt → calls the rewrite_for_mcn tool internally, then applies AI
reasoning to any MANUAL_REWRITE_REQUIRED sections
4. validate_ampscript with target:'next' → verify the rewritten code is clean
check_mcn_compatibility tells youPass one or more { filename, content } pairs and get back:
try/catch, forEach, regex)rewrite_for_mcn doesUse the rewrite_for_mcn prompt — it is the primary interface and gives you the full result in one step. It first calls the rewrite_for_mcn tool internally for all deterministic rewrites, then applies AI reasoning to every section the tool could not handle mechanically. You get both the accuracy of rule-based conversion and the intelligence of an AI pass, without having to invoke them separately.
Deterministic rewrites (handled by the tool internally):
StringToDate() wrappers from FormatDate() calls (FormatDate(StringToDate(@x), fmt) → FormatDate(@x, fmt)).NET → Java SimpleDateFormat format strings (e.g. tt → a)Lookup() calls with an odd number of search arguments%%-- NOT SUPPORTED IN MCN %%Platform.Function.* → AMPscript equivalents, Platform.Variable.GetValue/SetValue → @variable references)try/catch, array methods, regex, complex logic) as MANUAL_REWRITE_REQUIREDAI reasoning layer (added by the prompt): for each MANUAL_REWRITE_REQUIRED section, the prompt instructs the AI to attempt a full conversion using its knowledge of AMPscript and SSJS, then produces a single final rewritten code block with a prose changelog covering every change.
Pipelines and programmatic use: call the
rewrite_for_mcntool directly when you need the structured JSON output ({ rewrittenCode, changes[], nonMigratableItems[], difficulty, summary }) without the AI layer — for example in a CI step that feeds results to another tool.
The same hybrid pattern applies to convertSsjsToAmpscript and convertAmpscriptToSsjs: always use the prompt for interactive use; use the tool when you need structured output in a pipeline.
| Function | Difference |
|---|---|
FormatDate |
Uses Java SimpleDateFormat patterns in MCN instead of .NET. Example: .NET "M/d/yyyy h:mm:ss tt" → Java "M/d/yyyy h:mm:ss a" |
Lookup |
Search arguments must come in column/value pairs — an odd argument count causes an error in MCN. All filter keys must fully specify the composite primary key. |
StringToDate |
Returns a locale-formatted string in MCN (G standard format, e.g. "5/15/2026 1:23:45 PM") instead of a dateTime object. Cannot be reliably passed to FormatDate() in MCN — use FormatDate() directly with the original date string instead. |
Functions that depend on CloudPages context (CloudPagesURL, RequestParameter, QueryParameter, Redirect, MicrositeURL) have no equivalent in Marketing Cloud Next. check_mcn_compatibility and rewrite_for_mcn flag these as Not migratable immediately.
Clients that honour the MCP instructions field (Cursor, Claude Desktop, GitHub Copilot Agent mode) will call search_help or search_mce_help automatically whenever you ask an MCE administration or setup question — no special phrasing needed. If your client does not process server instructions, or if you want explicit control, the templates below help.
| Situation | What to do |
|---|---|
| MCE admin question (classic Engagement) | Ask naturally; the server calls search_help (or search_mce_help directly). Or use the answerMceHowTo prompt with assumeProduct: engagement. |
| Marketing Cloud Next developer API question | The server calls search_help or search_mcn_help automatically. Or use search_mcn_help explicitly. |
| MCN operational / migration / setup question | Use search_mce_help with product_focus: 'next', or ask naturally and the server routes it. |
| Not sure which product | Use answerMceHowTo with assumeProduct: unsure, or search_help without a target. |
| Write or validate AMPscript | Use the writeAmpscript prompt, or ask directly (the server auto-validates). Add target: 'next' for MCN. |
| Write or validate SSJS | Use the writeSsjs prompt, or ask directly. Note: SSJS is not supported in MCN. |
| Check if code is MCN-ready | Use check_mcn_compatibility with your file contents. |
| Migrate code to Marketing Cloud Next | Use the rewrite_for_mcn prompt — it calls the tool internally for deterministic rewrites, then applies AI reasoning to any remaining manual sections. Use the tool directly only when you need structured JSON output in a pipeline. |
| Convert SSJS ↔ AMPscript | Use the convertSsjsToAmpscript or convertAmpscriptToSsjs prompt — same hybrid pattern: tool runs first, AI handles what the rules couldn't. |
| Review a code diff | Use the reviewSfmcCode prompt or mention "review the following diff". |
Search the Marketing Cloud Engagement help (product_focus: engagement) and tell me:
<your question here>
Cite which product version your steps apply to and note if the bundled docs are incomplete.
Search the Marketing Cloud Next developer docs and tell me:
<your question here>
Confirm the steps apply to Marketing Cloud Next, not classic Engagement.
Check these files for Marketing Cloud Next compatibility and give me an executive summary:
<paste file contents>
Use the rewrite_for_mcn prompt — it first runs the deterministic rewrite tool, then applies AI reasoning to any sections that need it. You get the full result in one step.
Rewrite the following AMPscript/HTML for Marketing Cloud Next:
<paste code>
Apply all deterministic fixes, convert convertible SSJS to AMPscript, and explain every change.
Search both Marketing Cloud Engagement and Next help (product_focus: any) and tell me:
<your question here>
Separate the steps for classic Engagement vs Marketing Cloud Next clearly.
In clients that support MCP prompts (e.g. VS Code with the /mcp.sfmc.answerMceHowTo command):
/mcp.sfmc.answerMceHowTo
question: "How do I create a child business unit and assign it a sender profile?"
assumeProduct: engagement
1. Use search_mce_help (product_focus: engagement) to find the correct Journey Builder entry event
configuration steps, then
2. Write the AMPscript snippet that reads the data extension row inside the journey email.
The published npm package includes bundled/mce-help/chunks.json, produced by npm run bundle-mce-help. By default the bundler uses the path in MCE_HELP_DOCS (see scripts/bundle-mce-help.mjs); set it to the root of your mirrored MCE Help Markdown tree when not using the maintainer default.
cd mcp-server-sfmc
npm run bundle-mce-help
npm run build
npm test
Example: MCE_HELP_DOCS=/absolute/path/to/mce-help-mirror npm run bundle-mce-help
The published npm package includes bundled/mcn-help/chunks.json, produced by npm run bundle-mcn-help. Set MCN_HELP_DOCS to the root of your mirrored MCN developer docs tree when not using the maintainer default (see scripts/bundle-mcn-help.mjs).
cd mcp-server-sfmc
npm run bundle-mcn-help
npm run build
npm test
To rebuild both indexes in one command: npm run bundle-all
The .github/agents/sfmc-reviewer.agent.md custom agent in this repository configures a GitHub Copilot cloud agent that uses mcp-server-sfmc for SFMC-aware PR reviews.
To enable it in your own repository:
.github/agents/sfmc-reviewer.agent.md to your repo.{
"mcpServers": {
"sfmc": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-server-sfmc@latest"],
"tools": ["*"]
}
}
}
sfmc-reviewer agent to a pull request by mentioning it in a comment or via the @sfmc-reviewer agent in GitHub Copilot Chat.Copy .github/copilot-instructions.md from this repo to your project. GitHub Copilot's dedicated PR review feature reads this file and applies the SFMC language rules when summarising your PRs.
ci-templates/gitlab-duo-review-instructions.md to .gitlab/duo-instructions.md in your repository.GitLab Duo's dedicated MR review does not support MCP directly. Use the CI lint job below for automated static analysis, and the Duo instructions for AI-assisted review comments.
For deterministic, blocking CI validation, use the eslint-plugin-sfmc templates provided in ci-templates/:
| Platform | File |
|---|---|
| GitHub Actions | github-actions.yml |
| GitLab CI | ci-templates/gitlab-ci.yml |
| Jenkins | ci-templates/Jenkinsfile |
| Azure DevOps | ci-templates/azure-pipelines.yml |
| Bitbucket Pipelines | ci-templates/bitbucket-pipelines.yml |
These templates run eslint-plugin-sfmc on changed files and post lint results as PR/MR comments.
For AI assistants that don't support MCP but do support tool-calling, you can combine eslint-plugin-sfmc with the official @eslint/mcp server. Add it alongside mcp-server-sfmc:
{
"servers": {
"sfmc": {
"command": "npx",
"args": ["-y", "mcp-server-sfmc@latest"]
},
"eslint": {
"command": "npx",
"args": ["-y", "@eslint/mcp@latest"]
}
}
}
Create an eslint.config.mjs in your project root:
import sfmc from 'eslint-plugin-sfmc';
export default [...sfmc.configs.recommended];
The @eslint/mcp server exposes an eslint_lint tool that your AI can call to run the full ESLint rule set (including all AMPscript and SSJS rules from eslint-plugin-sfmc) on any file.
mcp-server-sfmc
└── sfmc-language-lsp (language intelligence core)
├── ampscript-data (AMPscript function catalog)
└── ssjs-data (SSJS function catalog)
vscode-sfmc-language (VS Code extension)
└── sfmc-language-lsp (same core, bundled via esbuild)
Both the VS Code extension and the MCP server share exactly the same validation, completion, hover, and lookup logic through sfmc-language-lsp. This means the AI assistant sees the same errors and suggestions that the editor shows.
See CONTRIBUTING.md.
MIT — see LICENSE.
Выполни в терминале:
claude mcp add sfmc -- npx -y mcp-server-sfmcНе уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development