mcp-server-sfmc
Provides tools for Salesforce Marketing Cloud (SFMC) including AMPscript, SSJS, and GTL language intelligence, validation, lookup, PR review, fix suggestions, completions, platform detection, MCN compatibility analysis, migration, code conversion, and help search for MCE and MCN documentation.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-server-sfmcreview this AMPscript for MCN compatibility"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-server-sfmc
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.
VS Code MCP Server Gallery (@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"
Related MCP server: Marketing Connect MCP Services
VS Code without manual MCP config
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.
Using this package without the VS Code extension
You do not have to install the VS Code extension. Pick one way to run the server:
Approach | When to use it |
| 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 |
| Same CLI as |
| Keeps a pinned version in that folder's |
| For CI: spawns this MCP server, calls |
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.
CI templates and sfmc-review-diff
Ready-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.
What it gives your AI assistant
Feature | Details |
Validation | Syntax errors, unknown functions, arity mismatches, unsupported SSJS syntax; |
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; |
Completions | AMPscript completions (filtered to MCN-supported when |
Platform detection |
|
MCN compatibility analysis |
|
MCN migration |
|
Code conversion |
|
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 |
|
Connecting AI clients
VS Code (1.99+) + GitHub Copilot — manual mcp.json
If 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.
Cursor
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.
Claude Desktop
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.
Windsurf
Add to your Windsurf MCP settings (~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"sfmc": {
"command": "npx",
"args": ["-y", "mcp-server-sfmc@latest"]
}
}
}Local install (faster startup than npx)
npm install -g mcp-server-sfmcThen replace "command": "npx", "args": ["-y", "mcp-server-sfmc@latest"] with:
"command": "mcp-server-sfmc",
"args": []Tools
Tool | Description |
| Validate AMPscript code — unknown functions, arity, delimiter balance, comment syntax. |
| Validate SSJS — ES6+ usage, missing Platform.Load, wrong API calls. |
| Validate HTML with embedded AMPscript, SSJS, and GTL blocks. |
| Full signature, parameters, return type, MCN compatibility badge (API version), behavioral notes for MCN, and examples |
| Full signature and description for any SSJS Platform function or method |
| List all AMPscript functions, optionally filtered by |
| Review a unified diff — validates only added lines, maps back to diff line numbers |
| Generate fix suggestions for each diagnostic in a code snippet. |
| List valid completions at a given cursor position; MCN-unsupported functions marked |
| List SSJS Platform API completions, optionally filtered by prefix; redirects to AMPscript completions when |
| Apply basic formatting conventions (keyword casing, quote normalisation) |
| Detect the target platform for a project — checks |
| 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 |
| Deterministic MCN rewrite engine: fixes |
| Rule-based SSJS → AMPscript conversion engine: |
| Rule-based AMPscript → SSJS conversion engine: variables, control flow, function calls. Flags AMPscript-only constructs as |
| Unified help search — auto-detects the platform from |
| Search bundled Marketing Cloud Engagement setup/ops help; use |
| Search bundled Marketing Cloud Next developer API documentation (objects, flows, segments, REST/SOAP APIs, AMPscript behavior in MCN) |
Resources
URI | Description |
| Full AMPscript function catalog with signatures |
| Full SSJS function catalog |
| All AMPscript keywords |
| ES6+ features not supported in SFMC SSJS |
| How Marketing Cloud Engagement differs from Marketing Cloud Next (when to use which) |
| List of bundled MCE help files and section counts per product scope |
| List of bundled MCN developer API doc files and chunk counts |
Prompts
Access via /mcp.sfmc.writeAmpscript etc. in VS Code, or via the prompts API:
Prompt | Description |
| Generate AMPscript code for a described task. |
| Generate SSJS code for a described task. |
| Review AMPscript or SSJS code for bugs and best-practice violations. |
| Primary interface for MCN migration. Internally calls the |
| Primary interface for SSJS → AMPscript conversion. Internally calls the |
| Primary interface for AMPscript → SSJS conversion. Internally calls the |
| Guided prompt for admin/setup questions — searches bundled help and keeps Engagement vs Next explicit |
Migrating code to Marketing Cloud Next
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.
Recommended workflow
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 cleanWhat check_mcn_compatibility tells you
Pass one or more { filename, content } pairs and get back:
Per-function classification for every AMPscript call site:
✅ Supported — works as-is
⚠️ Needs review — supported but has behavioral differences in MCN
❌ Not supported — no MCN equivalent
SSJS block analysis — classified as "needs conversion" (has AMPscript equivalents) or "not migratable" (uses JS-native constructs such as
try/catch,forEach, regex)Migration difficulty per file — Ready / Minor changes needed / Significant rewrite / Not migratable
Executive summary across all files
What rewrite_for_mcn does
Use 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):
Removes
StringToDate()wrappers fromFormatDate()calls (FormatDate(StringToDate(@x), fmt)→FormatDate(@x, fmt))Converts
.NET → Java SimpleDateFormatformat strings (e.g.tt→a)Annotates
Lookup()calls with an odd number of search argumentsMarks MCE-only AMPscript functions with
%%-- NOT SUPPORTED IN MCN %%Converts convertible SSJS blocks to AMPscript (
Platform.Function.*→ AMPscript equivalents,Platform.Variable.GetValue/SetValue→@variablereferences)Flags JS-native SSJS constructs (
try/catch, array methods, regex, complex logic) asMANUAL_REWRITE_REQUIRED
AI 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.
MCN behavioral differences to watch for
Function | Difference |
| Uses Java |
| 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. |
| Returns a locale-formatted string in MCN (G standard format, e.g. |
CloudPages functions — not migratable
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.
Writing effective prompts
Automatic tool use
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.
Quick reference: which tool or prompt to use
Situation | What to do |
MCE admin question (classic Engagement) | Ask naturally; the server calls |
Marketing Cloud Next developer API question | The server calls |
MCN operational / migration / setup question | Use |
Not sure which product | Use |
Write or validate AMPscript | Use the |
Write or validate SSJS | Use the |
Check if code is MCN-ready | Use |
Migrate code to Marketing Cloud Next | Use the |
Convert SSJS ↔ AMPscript | Use the |
Review a code diff | Use the |
Copy-paste prompt templates
Classic Engagement admin (most common)
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.Marketing Cloud Next — developer API
Search the Marketing Cloud Next developer docs and tell me:
<your question here>
Confirm the steps apply to Marketing Cloud Next, not classic Engagement.MCN migration analysis
Check these files for Marketing Cloud Next compatibility and give me an executive summary:
<paste file contents>Rewrite code for MCN
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.Unknown product / migration question
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.Explicit use of the answerMceHowTo prompt
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: engagementCombining MCE admin with code
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.What to expect from the AI
The AI cites the product scope (Engagement or Next) in every answer.
If the bundled excerpts do not cover the question fully, the AI says so and suggests verifying in the live Salesforce Help.
Function signatures (AMPscript / SSJS) are always sourced from the language catalog, not from training data.
Refresh bundled help indexes
Marketing Cloud Engagement help
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 testExample: MCE_HELP_DOCS=/absolute/path/to/mce-help-mirror npm run bundle-mce-help
Marketing Cloud Next developer docs
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 testTo rebuild both indexes in one command: npm run bundle-all
AI code review in pull requests
Cursor Bugbot
Cursor Bugbot reviews pull requests (GitHub) and merge
requests (GitLab) automatically, leaves inline comments with fix suggestions, and publishes
a Cursor Bugbot check. It does not run sfmc-review-diff itself — you make it
SFMC-aware in two ways:
1. Repository rules (BUGBOT.md) — all plans. Copy
ci-templates/BUGBOT.md to .cursor/BUGBOT.md in your repo
root. It tells Bugbot how to review AMPscript, SSJS, and SFMC HTML — unknown functions,
arity, delimiter balance, ES3-only SSJS, and optional Marketing Cloud Next migration
rules. Bugbot reads the root file plus any nested .cursor/BUGBOT.md files near changed
files, so you can scope stricter rules to subfolders.
2. MCP tools (mcp-server-sfmc) — Team / Enterprise plans only. Bugbot can call MCP
tools during a review so its findings come from the same language catalog as the editor:
In the Bugbot dashboard, enable Bugbot on the repository.
Open the MCP configuration for Bugbot and add this server:
{
"mcpServers": {
"sfmc": {
"command": "npx",
"args": ["-y", "mcp-server-sfmc@latest"]
}
}
}Add the tools to Bugbot in the dashboard. The relevant review tools are
review_change,validate_ampscript,validate_ssjs,validate_sfmc_html, andsuggest_fix. TheBUGBOT.mdrules above instruct Bugbot when to call them.
Branch protection: require the
Cursor Bugbotcheck to make sure a review runs before merge. Findings default to aneutralconclusion; enable fail-on-unresolved-issues in the dashboard (where available) if you want findings to produce a failing check.
Run it locally first. In Cursor 3.7+, run /review-bugbot on your branch before you
push; Bugbot reuses that review on the PR/MR with the same diff, avoiding a duplicate run.
GitHub Copilot (cloud agent)
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:
Copy
.github/agents/sfmc-reviewer.agent.mdto your repo.In your GitHub repo settings → Copilot → Cloud agent → MCP configuration, add:
{
"mcpServers": {
"sfmc": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-server-sfmc@latest"],
"tools": ["*"]
}
}
}Assign the
sfmc-revieweragent to a pull request by mentioning it in a comment or via the @sfmc-reviewer agent in GitHub Copilot Chat.
GitHub Copilot (dedicated PR review)
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.
GitLab Duo
Copy the content of
ci-templates/gitlab-duo-review-instructions.mdto.gitlab/duo-instructions.mdin your repository.GitLab Duo Code Review will apply these instructions on every merge request.
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.
CI linting (deterministic checks)
For deterministic, blocking CI validation, use the templates provided in ci-templates/.
Each one runs two checks on every PR/MR: eslint-plugin-sfmc on changed files, and
sfmc-review-diff (this package) on the unified diff — so a finding fails the job
regardless of which AI reviewer (Bugbot, Copilot, Duo) is also enabled.
Platform | File |
GitHub Actions | |
GitLab CI | |
Jenkins | |
Azure DevOps | |
Bitbucket Pipelines |
The ESLint job posts lint results as PR/MR comments; the sfmc-review-diff job exits
non-zero on ERROR diagnostics by default (--fail-on warning|info to be stricter).
See ci-templates/README.md for the difference between the two
checks.
ESLint + @eslint/mcp
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.
Architecture
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.
Contributing
See CONTRIBUTING.md.
License
MIT — see LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/JoernBerkefeld/mcp-server-sfmc'
If you have feedback or need assistance with the MCP directory API, please join our Discord server