Skip to main content

How to connect your AI assistant to Stripo

In this article, you will learn how to enable MCP integration in your Stripo workspace, connect your AI assistant, and install the Stripo Agent Plugin in supported tools. You’ll also learn how to verify your setup and start working with your emails.

Written by Dmitry Kulaksyz

In this article, you will learn how to enable MCP integration in your Stripo workspace, connect your AI assistant, and install the Stripo Agent Plugin in supported tools. You’ll also learn how to verify your setup and start working with your emails.

  • The MCP connection gives your assistant access to Stripo: it can find and read emails, templates and modules; create and edit emails; generate and edit images; export HTML and screenshots; and delete content. MCP stands for Model Context Protocol.

  • The Stripo Agent Plugin adds ready-made workflows, called skills, for creating emails from a brief or reference, editing existing content, and maintaining business profiles. The plugin is free; it requires a connected Stripo MCP server.

For the email creation and editing workflows in this guide, install the plugin or its skills in a supported agent alongside the MCP connection.

Your assistant always acts with your own Stripo permissions in the workspaces you belong to.

Choose your AI tool

Follow one tool guide. These are alternative setup paths, not steps to complete in order.

Your AI tool

Setup covered in this guide

Install the plugin and connect MCP.

Install the plugin and connect MCP in the CLI, IDE extension or desktop app.

Connect MCP and copy the plugin's skills into Cursor, in the terminal or with the agent.

Connect MCP and copy the plugin's skills into VS Code.

Connect MCP through a custom connector. This path does not install the Stripo Agent Plugin.

Check compatibility, then use native remote MCP or the local bridge.

Already connected through MCP?

You can add the plugin or its skills to an existing MCP connection. Keep your saved Client ID unless your Owner or Admin gives you a replacement.

Use the setup prompt for Claude Code, Codex, Cursor or VS Code. Its direct configuration steps preserve a working connection while the agent prepares missing software and installs or checks the skills. Invoking the plugin's connect skill can also migrate the connection, as described below.

In a setup prompt, leave YOUR_CLIENT_ID unchanged to reuse the saved ID. The agent must never save the placeholder. For a check that does not change configuration, ask the agent to call whoami through the existing connection.

What the connect skill changes

The connect skill can check, register or repair Stripo MCP. It reuses the saved Client ID, including one stored in an mcp-remote bridge, unless you explicitly provide a replacement. Reusing the ID does not always preserve the connection's transport or scope.

In Claude Code and Codex, it keeps a matching user-level HTTP entry with no local/project override. Other configurations, including working bridge or project-only connections, are migrated to user-level HTTP. It explains the migration first, saves the user-level entry, then removes Stripo overrides from the current project's configuration; in Claude Code, this includes both local and project scopes. The resulting connection is available across projects. Other MCP server entries remain unchanged.

In Cursor and VS Code, connect creates or updates a native HTTP entry in the user configuration by default. Explicitly request a project-only connection if that is what you need. If a project override still selects a different entry, follow conflicting settings.

If a matching connection is already available and whoami succeeds, no new sign-in is needed. Otherwise, the skill gives you the required restart and sign-in steps; you complete browser sign-in yourself.

Before you start

Requirement

What you need

Stripo plan

Medium, Pro or Prime.

Enable the integration

An Owner or Admin enables it in Workspace Settings.

Connect your AI tool

Any workspace member can connect using the workspace's Client ID. Ask your Owner or Admin for it.

Sign in

A confirmed Stripo email address and access through email and password, Google, or your company SSO.

Choose the setup method for your tool. With an agent-assisted setup, paste the tool's prompt below: the agent checks the environment, installs missing supporting software, and sets up Stripo. With a manual setup, complete the listed environment checks and commands yourself. For Cursor, this guide recommends the terminal steps and provides an agent-assisted alternative. The Claude custom connector needs no local software preparation.

You may need to approve an installation, restart your AI tool or computer, or sign in to Stripo. If your help is needed, the agent will give you one specific action at a time and continue after you complete it. On a company-managed computer, it may identify a step that needs your administrator.

Enable the integration in Stripo

If an Owner or Admin already gave you the Client ID, continue to your tool guide.

  1. In Stripo, click your organization name in the top-right corner and open Settings.

  2. Go to Workspace → Workspace Configuration.

  3. Find MCP integration and turn on Connect AI tools.

  4. Click Copy Client ID.

If the toggle is disabled and you see “Available on Medium, Pro and Prime”, your workspace needs an eligible plan.

The Client ID identifies the workspace's connection; it is not your password. Share it only with the people and tools that need it. Keep it out of public repositories and publicly shared prompts. Each person signs in with their own Stripo account.

When copying a command or configuration, replace only YOUR_CLIENT_ID. Keep the surrounding quotes and backslashes exactly as shown. In a form field, paste the Client ID without adding quotes. Never use the placeholder as an actual ID.

Connect Claude Code

Open Claude Code and sign in through your Claude plan or an Anthropic Console account. Your agent will check the version and supporting software. Stripo sign-in is separate.

Set up Claude Code with your agent

Paste this prompt into Claude Code. Replace YOUR_CLIENT_ID for a new connection, or leave it unchanged to reuse a saved ID. Let the agent complete setup before continuing to sign-in.

Set up the Stripo Agent Plugin and MCP connection in Claude Code.
Client ID: YOUR_CLIENT_ID

Handle technical preparation for me. Use official installation instructions and the normal approval flow. Preserve unrelated servers, plugins and settings; back up edited configuration. Fix recoverable setup errors and retry the failed step. If blocked, explain the exact action needed to continue without disabling global protections.

1. Detect the OS and the environment where this agent actually runs. Before switching environments, locate existing Stripo settings so the saved connection and Client ID can be reused. Check Node.js 20.18.1+, curl, Git and a POSIX shell. Reuse compatible tools; install missing dependencies or update unsupported versions with the existing package manager or official installers. For a new Node.js installation, choose a supported LTS release meeting the minimum. On local Windows, reuse or set up WSL 2 and run Claude Code there; do not install local WSL for an agent already running on remote Linux. Make the Claude CLI available in that environment using its official installation method; use claude update if its commands are unsupported. If an OS approval, restart, Linux account setup or reopening Claude Code needs my action, give me one exact step and a short progress summary so we can resume. Never ask for passwords. After any change, rerun dependency checks in the agent's actual environment.

2. Inspect stripo-mcp at user, local and project scope without printing credentials. For the direct setup steps below, keep a working connection unless I supply a replacement ID. If you invoke the plugin's connect skill instead, first explain that it migrates bridge and local/project entries to user-level HTTP and removes Stripo overrides from the current project's local and project scopes after saving the user entry. Use my supplied ID, otherwise the saved one; ask only if neither exists. Never save YOUR_CLIENT_ID. For a missing connection, substitute the selected ID and run:
claude mcp add --transport http --scope user --client-id YOUR_CLIENT_ID stripo-mcp https://mcp.stripo.email/mcp
For repairs, explain the Stripo-only change and check local/project overrides. Do not blindly remove a working entry.

3. If the stripo marketplace is missing, run:
claude plugin marketplace add stripoinc/agent-plugin
If stripo@stripo is missing, run:
claude plugin install stripo@stripo --scope user
If it is already installed, reuse it and ensure it is enabled; claude plugin install does not update an existing plugin. Run claude plugin marketplace update stripo and, if the marketplace offers a newer version, claude plugin update stripo@stripo in the installation's scope. For this local Claude Code marketplace installation, enable auto-updates in the active Claude settings file (normally ~/.claude/settings.json): set extraKnownMarketplaces.stripo.autoUpdate to true while preserving other keys. This configures the local Claude Code marketplace; do not report a separate Desktop account plugin's update policy as verified.

4. Check claude plugin list and the effective MCP entry. Summarize the result without dumping configuration. Let me complete browser sign-in.

5. Guide me through restarting Claude Code and, if needed, /mcp > stripo-mcp > Authenticate. After I return, verify that the Stripo skills load, its MCP tools are available, and whoami returns my expected account. Report those three results separately; leave any unverified result pending.

Finish Claude Code sign-in

  1. Exit Claude Code and start it again so the plugin and any new MCP configuration load.

  2. If sign-in is needed, run /mcp, select stripo-mcp, and choose Authenticate.

  3. Sign in to Stripo in the browser with email and password, Google, or SSO.

On a remote or SSH machine, run claude mcp login stripo-mcp --no-browser in an interactive terminal and follow its prompts.

Verify Claude Code setup

Ask the agent to complete the setup check. It should confirm the following:

  • /mcp shows stripo-mcp as connected and exposes its tools; claude mcp list also reports the connection status.

  • /plugin lists stripo as enabled. Typing /stripo: offers email-from-reference, email-model-editor, business-profile and connect.

  • whoami succeeds and identifies your expected Stripo account.

Manual reference: Claude Code plugin and MCP

The setup prompt handles these steps and prepares the environment for you. The commands below are for manual installation or troubleshooting after that preparation.

1. Install the plugin.

In Claude Code, run the first command only if the marketplace is missing, and the second only if the plugin is missing:

/plugin marketplace add stripoinc/agent-plugin
/plugin install stripo@stripo

The installation dialog may ask for a Stripo Client ID, the plugin's only option. Paste the workspace Client ID without quotes, or leave the field empty if stripo-mcp is already configured: /stripo:connect uses this value only when no connection exists. To set it later without the dialog, run this in your terminal, replacing YOUR_CLIENT_ID:

echo '{"client_id":"YOUR_CLIENT_ID"}' | claude plugin configure stripo@stripo --values-stdin

If the plugin is already installed, /plugin install does not update it: see Update the plugin or copied skills.

2. Configure the MCP connection. This is where you use your Stripo Client ID. If stripo-mcp already works, keep the existing connection and skip this step.

For a new connection, run this in your terminal, replacing YOUR_CLIENT_ID with the ID copied from Stripo:

claude mcp add --transport http --scope user \
--client-id "YOUR_CLIENT_ID" \
stripo-mcp https://mcp.stripo.email/mcp

The command saves the Client ID in Claude Code's MCP configuration. Stripo does not require a Client Secret. --scope user makes the connection available across projects. If an existing entry needs correction, see conflicting settings or Update a Client ID.

3. Restart and sign in. Restart Claude Code to load the plugin and MCP settings, then follow Finish Claude Code sign-in. You can then run /stripo:connect to check or repair the connection; it reuses the saved Client ID and may migrate the configuration. Complete the setup check.

For updates, follow the instructions for your interface in Update the plugin or copied skills: the Code tab of the Claude Desktop app, which has a graphical plugin screen, or Claude Code in a terminal.

Connect OpenAI Codex

Open Codex in the desktop app, IDE extension or terminal and sign in. Your agent will check the version, prepare the supporting software, and find the settings used by your installation.

Set up Codex with your agent

Paste this prompt into Codex. Replace YOUR_CLIENT_ID for a new connection; leave it unchanged to reuse a saved ID. Let the agent complete setup before continuing to sign-in.

Set up the Stripo Agent Plugin and MCP connection in Codex.
Client ID: YOUR_CLIENT_ID

Handle technical preparation for me. Use official installation instructions and the normal approval flow. Preserve unrelated servers, plugins and settings; back up edited configuration. Fix recoverable setup errors and retry the failed step. If blocked, explain the exact action needed to continue without disabling global protections.

1. Detect the OS and the environment where this agent actually runs. Before switching environments, locate existing Stripo settings so the saved connection and Client ID can be reused. Check Node.js 20.18.1+, curl, Git and a POSIX shell. Reuse compatible tools; install missing dependencies or update unsupported versions with the existing package manager or official installers. For a new Node.js installation, choose a supported LTS release meeting the minimum. On local Windows, reuse or set up WSL 2 and switch the actual Codex agent environment to WSL; changing only the integrated terminal is insufficient. Do not install local WSL for an agent already running on remote Linux. If an OS approval, restart, Linux account setup or app setting needs my action, give me one exact step and a short progress summary so we can resume. Never ask for passwords. After any change, rerun dependency checks in the agent's actual environment.

2. Locate the CLI, configuration and plugin directories used by this Codex installation; if the CLI is missing, set it up using the official Codex instructions and confirm it uses this client's configuration. Check codex --version and support for codex plugin; update through the existing installation method if necessary. Respect CODEX_HOME when set. Do not assume a separately installed WSL CLI shares the desktop app's configuration or authentication. Inspect stripo-mcp and project overrides without printing credentials. For the direct setup steps below, keep a working connection unless I supply a replacement ID. If you invoke the plugin's connect skill instead, first explain that it migrates bridge and project entries to user-level HTTP and removes Stripo project overrides after saving the user entry. Select my supplied ID, otherwise the saved one; ask only if neither exists. Use the active client's configuration and plugin locations for the following steps.

3. If the stripo marketplace is missing, run:
codex plugin marketplace add stripoinc/agent-plugin
If stripo@stripo is missing, run:
codex plugin add stripo@stripo
Reuse an existing installation and ensure it is enabled.

4. Only for a missing or incorrect entry, write these settings with the selected ID; never save YOUR_CLIENT_ID. Preserve unrelated tables. If replacing Stripo's stdio entry, remove its obsolete transport fields. Check project overrides.
[mcp_servers.stripo-mcp]
enabled = true
url = "https://mcp.stripo.email/mcp"
scopes = ["mcp:tools", "offline_access"]

[mcp_servers.stripo-mcp.oauth]
client_id = "YOUR_CLIENT_ID"

5. Check codex plugin list and codex mcp get stripo-mcp. Summarize status. Do not run codex mcp add or login: they can start browser sign-in. Do not change email content.

6. If needed, guide me to Authenticate in this client's MCP settings, or give me the command below with the exact terminal/environment to use:
codex mcp login stripo-mcp --scopes mcp:tools,offline_access
Let me complete browser sign-in and guide me through starting a new session. After I return, verify that the Stripo skills load, its MCP tools are available, and whoami returns my expected account. Report those three results separately; leave any unverified result pending.

Finish Codex sign-in

Follow the agent's sign-in instructions. Where available in the desktop app or IDE extension, open Settings → MCP servers and choose Authenticate next to stripo-mcp. Sign in to Stripo in the browser.

For a terminal setup, the agent will tell you where to run:

codex mcp login stripo-mcp --scopes mcp:tools,offline_access

Start a new Codex session to load newly installed skills and MCP settings.

Verify Codex setup

Ask the agent to complete the setup check. It should confirm the following:

  • codex mcp list lists stripo-mcp as enabled; /mcp in an interactive CLI session, or the app's MCP settings, shows its tools. An OAuth label alone does not prove successful sign-in.

  • codex plugin list shows stripo@stripo as installed and enabled. Its skills include $stripo:email-from-reference, $stripo:email-model-editor, $stripo:business-profile and $stripo:connect.

  • whoami succeeds and identifies your expected Stripo account.

Manual reference: Codex plugin and MCP

The setup prompt handles these steps and prepares the environment for you. The commands below are for manual installation or troubleshooting after that preparation.

Run the two codex plugin commands from the prompt, skipping existing installations. In a new session, use the app's plugin setup step or ask for $stripo:connect. It reuses the saved ID, asks only if missing, and may migrate the connection to user-level HTTP. It explains any configuration change and required sign-in.

To register MCP manually, run this in your terminal if no connection exists. The --oauth-client-id option requires Codex 0.134.0 or later. Install the plugin above for the email workflows:

codex mcp add stripo-mcp --url https://mcp.stripo.email/mcp --oauth-client-id YOUR_CLIENT_ID

This command can open browser sign-in immediately. If it does not, use Finish Codex sign-in. For an existing entry with the wrong ID, use Update a Client ID.

Connect Cursor

Open Cursor and start an Agent chat. Cursor supports plugins; this guide uses native MCP and a local copy of the Stripo skills and SDK.

The terminal steps below are the recommended path: they are deterministic, and Cursor's sandbox blocks the agent from writing ~/.cursor/mcp.json and from network access unless you approve each command outside it. The agent prompt is an alternative.

Set up Cursor in the terminal (recommended)

Check the environment first: the Stripo skills need Node.js 20.18.1+, curl, Git and a POSIX shell. See Prepare and verify the agent's environment; on Windows, use WSL 2 and connect Cursor to it.

1. Configure the MCP connection

If MCP already works, skip to step 2.

  1. Open Customize → MCPs → Connect External Tools with MCP → + New. For a connection across projects, edit ~/.cursor/mcp.json.

  2. Add stripo-mcp inside mcpServers. If the file already contains servers, merge this entry into it instead of replacing the file. Replace YOUR_CLIENT_ID:

{
"mcpServers": {
"stripo-mcp": {
"url": "https://mcp.stripo.email/mcp",
"auth": {
"CLIENT_ID": "YOUR_CLIENT_ID",
"scopes": ["mcp:tools", "offline_access"]
}
}
}
}
  1. Save the file and add the Stripo skills below before restarting. If the skills are already installed, continue to Cursor sign-in.

2. Add the Stripo skills to Cursor

The paths below use the standard ~/.cursor layout. Keep the repository at a permanent location: you will use it for updates.

Before cloning or copying

Inspect destination paths. For an existing ~/stripo-agent-plugin, check its origin with git -C ~/stripo-agent-plugin remote get-url origin and changes with git -C ~/stripo-agent-plugin status --short. Only for a clean Stripo checkout, replace cloning with git -C ~/stripo-agent-plugin pull --ff-only. Resolve a different origin or local changes before continuing.

Back up existing destination files to a separate folder and overwrite only files confirmed to belong to Stripo. Preserve other skills and packages. If you cannot identify a file's owner, stop and contact support. Never delete the whole shared skills or packages directory.

git clone https://github.com/stripoinc/agent-plugin.git ~/stripo-agent-plugin
mkdir -p ~/.cursor/skills
cp -R ~/stripo-agent-plugin/plugins/stripo/skills/. ~/.cursor/skills/
cp -R ~/stripo-agent-plugin/plugins/stripo/packages ~/.cursor/
cp ~/stripo-agent-plugin/plugins/stripo/mcp-tools.json ~/stripo-agent-plugin/plugins/stripo/bundle.json ~/.cursor/

Keep skills, packages, mcp-tools.json and bundle.json together in ~/.cursor. The skills need the accompanying SDK. Use actual folders for this installation, so skill discovery does not depend on symbolic-link handling. Then continue to Cursor sign-in.

Alternative: set up Cursor with your agent

Choose a capable model in Agent chat before pasting the prompt: the free default models have not completed this setup reliably, downloading files one by one instead of running the copy commands. Paste this prompt into Agent chat. Replace YOUR_CLIENT_ID for a new connection; leave it unchanged to reuse a saved ID. Approve commands that Cursor asks to run outside its sandbox. Let the agent complete setup before continuing to sign-in.

Set up the Stripo MCP connection and the Stripo Agent Plugin skills in Cursor.
Client ID: YOUR_CLIENT_ID

Handle technical preparation for me. Use official installation instructions and Cursor's normal approval flow. Preserve unrelated servers, settings, skills and packages; back up edited configuration and replaced files. Fix recoverable setup errors and retry the failed step. If blocked, explain the exact action needed to continue without disabling global protections.

Install or update the Stripo plugin package only with the git clone/pull and copy commands below, adapting paths to the actual environment. Never download plugin files individually, recreate or hand-write them, or generate an installer for the package. Read-only inspection, dependency checks and installation, backups, and targeted edits to the Stripo MCP entry are allowed; use normal shell commands, structured edits or a short script to preserve unrelated configuration. If Cursor's sandbox blocks writing ~/.cursor/mcp.json, the skills location or network access, ask me to approve running that command outside the sandbox and continue; do not stop at the first sandbox error.

1. Detect the OS and the environment where this agent actually runs. Before switching environments, locate existing Stripo settings so the saved connection and Client ID can be reused. Check Node.js 20.18.1+, curl, Git and a POSIX shell. Reuse compatible tools; install missing dependencies or update unsupported versions with the existing package manager or official installers. For a new Node.js installation, choose a supported LTS release meeting the minimum. On local Windows, reuse or set up WSL 2 and connect Cursor's workspace and agent to it; changing only a terminal is insufficient. Do not install local WSL for an agent already running on remote Linux. If an OS approval, restart, Linux account setup or reconnecting Cursor needs my action, give me one exact step and a short progress summary so we can resume. Never ask for passwords. After any change, rerun dependency checks in the agent's actual environment.

2. Locate Cursor's effective user MCP configuration and personal skills directory, including any local/remote split. Inspect stripo-mcp in the user configuration (normally ~/.cursor/mcp.json) and the project's .cursor/mcp.json without printing credentials. Keep a working connection unless I supply a replacement ID. Never save YOUR_CLIENT_ID: reuse the saved ID or ask if missing. For a missing/incorrect entry, edit only mcpServers.stripo-mcp: url = https://mcp.stripo.email/mcp, auth.CLIENT_ID = the selected ID, auth.scopes = ["mcp:tools", "offline_access"]. Preserve other entries and check project overrides.

3. Inspect checkout and destination paths. Back up existing destination files; replace only verified Stripo files and stop on unclear ownership. Clone if missing:
git clone https://github.com/stripoinc/agent-plugin.git ~/stripo-agent-plugin
If the folder already exists, verify that it is a clean checkout of that repository, then run git -C ~/stripo-agent-plugin pull --ff-only instead. Stop for a different origin or local changes.

4. Copy the complete package into the personal skills location read by this agent. For the standard ~/.cursor layout in the agent's environment, run:
mkdir -p ~/.cursor/skills
cp -R ~/stripo-agent-plugin/plugins/stripo/skills/. ~/.cursor/skills/
cp -R ~/stripo-agent-plugin/plugins/stripo/packages ~/.cursor/
cp ~/stripo-agent-plugin/plugins/stripo/mcp-tools.json ~/stripo-agent-plugin/plugins/stripo/bundle.json ~/.cursor/
If the effective location differs, use it consistently and keep skills, packages, mcp-tools.json and bundle.json together. Use real folders. Do not recreate or alter the plugin's files, invent an installer, or delete shared directories.

5. Check the copied package and guide me through restarting Cursor and, if needed, Customize > MCPs > stripo-mcp > Authenticate. Let me complete browser sign-in. After I return, verify that the Stripo skills load, its MCP tools are available, and whoami returns my expected account. Report those three results separately; leave any unverified result pending. Do not change email content.

Finish Cursor sign-in

  1. Restart Cursor to load newly copied skills and settings.

  2. Open Customize → MCPs. If stripo-mcp needs authentication, click Authenticate.

  3. Sign in to Stripo in the browser. When you see Authorization complete, click Return to Cursor.

Verify Cursor setup

Ask the agent to complete the setup check. It should confirm the following:

  • stripo-mcp appears under Connected and shows its enabled tools.

  • The skills email-from-reference, email-model-editor, business-profile and connect are available in Agent chat. You can also find them by typing /.

  • whoami succeeds and identifies your expected Stripo account.

Once skills load, /connect can check or configure Stripo MCP using the saved Client ID. It uses the user configuration by default; see what the connect skill changes. Supply a different ID explicitly only when you want to replace it.

Connect VS Code with GitHub Copilot

Open VS Code, sign in to GitHub Copilot, and select Agent in Chat. Your agent will check the VS Code version and prepare the supporting software. On Business/Enterprise, your GitHub admin must enable MCP servers in the Copilot policy.

Set up VS Code with your agent

Paste this prompt into Agent chat. Replace YOUR_CLIENT_ID for a new connection; leave it unchanged to reuse a saved ID. Let the agent complete setup before continuing to sign-in.

Set up the Stripo MCP connection and the Stripo Agent Plugin skills in VS Code with GitHub Copilot.
Client ID: YOUR_CLIENT_ID

Handle technical preparation for me. Use official installation instructions and VS Code's normal approval flow. Preserve unrelated servers, settings, skills and packages; back up edited configuration and replaced files. Fix recoverable setup errors and retry the failed step. If blocked, explain the exact action needed to continue without disabling global protections.

1. Detect the OS and the environment where this agent actually runs. Before switching environments, locate existing Stripo settings so the saved connection and Client ID can be reused. Check Node.js 20.18.1+, curl, Git and a POSIX shell. Reuse compatible tools; install missing dependencies or update unsupported versions with the existing package manager or official installers. For a new Node.js installation, choose a supported LTS release meeting the minimum. On local Windows, reuse or set up WSL 2, install VS Code's WSL extension if missing, and reopen the workspace in WSL so the agent runs there. Do not install local WSL for an agent already running on remote Linux. If an OS approval, restart, Linux account setup or reconnecting VS Code needs my action, give me one exact step and a short progress summary so we can resume. Never ask for passwords. After any change, rerun dependency checks in the agent's actual environment.

2. Check VS Code is 1.123+ for oauth.clientId support; update through its existing installation method if necessary. Locate the effective user MCP configuration and the personal skills directory, including any local/remote split. Inspect stripo-mcp in the user configuration and the workspace's .vscode/mcp.json without printing credentials. If you cannot locate the user configuration, guide me to MCP: Open User Configuration rather than guessing its path. Keep a working connection unless I supply a replacement ID. Never save YOUR_CLIENT_ID: reuse the saved ID or ask if missing.

3. For a missing/incorrect entry, edit only servers.stripo-mcp in the user MCP configuration: type = http, url = https://mcp.stripo.email/mcp, oauth.clientId = the selected ID. Preserve other entries and check workspace overrides. Stripo needs no client secret; VS Code obtains scopes from the server. Do not put the Client ID in a public repository.

4. Inspect checkout and destination paths. Back up existing destination files; replace only verified Stripo files and stop on unclear ownership. Clone if missing:
git clone https://github.com/stripoinc/agent-plugin.git ~/stripo-agent-plugin
If the folder already exists, verify that it is a clean checkout of that repository, then run git -C ~/stripo-agent-plugin pull --ff-only instead. Stop for a different origin or local changes.

5. Copy the complete package into the personal skills location read by this agent. For the standard ~/.copilot layout in the agent's environment, run:
mkdir -p ~/.copilot/skills
cp -R ~/stripo-agent-plugin/plugins/stripo/skills/. ~/.copilot/skills/
cp -R ~/stripo-agent-plugin/plugins/stripo/packages ~/.copilot/
cp ~/stripo-agent-plugin/plugins/stripo/mcp-tools.json ~/stripo-agent-plugin/plugins/stripo/bundle.json ~/.copilot/
If the effective location differs, use it consistently and keep skills, packages, mcp-tools.json and bundle.json together. Use real folders. Do not recreate or alter the plugin's files, invent an installer, or delete shared directories.

6. Check the copied package and guide me through restarting VS Code, then MCP: List Servers > stripo-mcp > Start Server. Let me confirm trust and complete browser sign-in. After I return, verify that the Stripo skills load, its MCP tools are available in Agent mode, and whoami returns my expected account. Report those three results separately; leave any unverified result pending. Do not change email content.

Finish VS Code sign-in

  1. Restart VS Code if the agent asks you to, then open the Command Palette (Ctrl+Shift+P on Windows/Linux, Cmd+Shift+P on macOS) and run MCP: List Servers → stripo-mcp → Start Server. If the configuration file is open, you can also click Start above stripo-mcp.

  2. Confirm that you trust the server. When VS Code asks to authenticate, click Allow and sign in to Stripo in the browser.

Verify VS Code setup

Ask the agent to complete the setup check. It should confirm the following:

  • Open Chat, select Agent, and check Configure Tools for Stripo tools. In sessions using the Copilot harness, use Agent Customizations → Tools.

  • The skills email-from-reference, email-model-editor, business-profile and connect are available in chat. You can also find them by typing /.

  • whoami succeeds and identifies your expected Stripo account.

Manual reference: VS Code MCP

The setup prompt handles these steps and prepares the environment for you. Manual configuration requires VS Code 1.123+, which supports oauth.clientId.

If MCP already works, skip to Add the Stripo skills to VS Code.

  1. Open the Command Palette (Ctrl+Shift+P on Windows/Linux, Cmd+Shift+P on macOS) and run MCP: Open User Configuration. For a connection limited to one project, use that project's .vscode/mcp.json instead. Keep the Client ID out of public repositories.

  2. Add stripo-mcp inside servers, preserving other entries. Replace YOUR_CLIENT_ID:

{
"servers": {
"stripo-mcp": {
"type": "http",
"url": "https://mcp.stripo.email/mcp",
"oauth": { "clientId": "YOUR_CLIENT_ID" }
}
}
}

VS Code obtains the scopes from the server. Ignore Set Client Secret: Stripo uses a public OAuth client and needs no secret.

Manual reference: add the Stripo skills to VS Code

Install the skills for the email creation and editing workflows. If they are already installed, continue to VS Code sign-in.

VS Code supports agent plugins. These instructions use a local copy of the Stripo skills and SDK in the personal Copilot folder.

Use these commands after the agent has prepared the environment and confirmed where VS Code loads personal skills. The paths below use the standard layout in that environment. Follow the checkout/backup rules; for an existing clean Stripo checkout, replace cloning with git -C ~/stripo-agent-plugin pull --ff-only.

git clone https://github.com/stripoinc/agent-plugin.git ~/stripo-agent-plugin
mkdir -p ~/.copilot/skills
cp -R ~/stripo-agent-plugin/plugins/stripo/skills/. ~/.copilot/skills/
cp -R ~/stripo-agent-plugin/plugins/stripo/packages ~/.copilot/
cp ~/stripo-agent-plugin/plugins/stripo/mcp-tools.json ~/stripo-agent-plugin/plugins/stripo/bundle.json ~/.copilot/

Keep skills, packages, mcp-tools.json and bundle.json side by side. Restart VS Code after copying. Once the skills load, /connect can also check or register stripo-mcp using your Client ID. It uses the user configuration by default; see what the connect skill changes.

Connect Claude web, desktop or mobile

This path connects Stripo through a custom connector; it does not require a config file, Node.js or the Stripo Agent Plugin. It applies to Claude chat on the web, in the desktop app and on mobile. The Code tab of the Claude Desktop app runs Claude Code: use the Claude Code guide there instead. Add the connector on claude.ai or in Claude Desktop to use it across Claude web, desktop, Cowork and mobile.

Set up Claude on Free, Pro or Max

Claude Free allows one custom connector. If that slot is already in use, decide whether to replace the existing connector or use a plan that supports more before adding Stripo. See Claude's custom connector limits.

  1. In Claude Desktop, click your name in the bottom-left corner and open Settings. Under Customize, select Connectors. On the web, open Customize → Connectors.

  2. Click + Add → Add custom connector.

  3. Enter a name, such as stripo-mcp, and the server URL https://mcp.stripo.email/mcp. Click Continue.

  4. Under OAuth client, select Use your own OAuth client. If Register automatically is preselected and marked Detected, change it to Use your own OAuth client.

  5. Paste the Client ID copied from your Stripo workspace into OAuth client ID. Leave OAuth client secret (optional) empty. No Request headers are needed.

  6. Click Add to create the connector.

  7. On the connector's page, click Connect, then sign in to Stripo in the browser. Return to Claude after sign-in.

Set up Claude on Team or Enterprise

  1. A Claude Owner or Primary Owner opens Organization settings → Connectors → Add → Custom → Web.

  2. Enter the name and server URL, then click Continue. Use the same authentication settings as above: Sign in now, Use your own OAuth client, and your Stripo workspace's OAuth client ID. Leave the secret and request headers empty, then click Add.

  3. Each member opens Customize → Connectors, finds Stripo, and clicks Connect to sign in with their own Stripo account.

Verify the Claude connector

Return to Customize → Connectors and check that Stripo is connected. If the connector's page still says You're not connected … yet, click Connect and complete sign-in. Adding the connector alone does not authenticate your Stripo account.

In a chat, use + → Connectors or / to make sure Stripo is turned on, then run the authentication check.

To change the Client ID, remove the Stripo connector and add it again with the replacement ID. See Update a Client ID.

Verify your setup and try a first task

After any requested restart or sign-in, return to your agent and paste:

Continue the Stripo setup and verify it in this session. Check that Stripo's MCP tools are available and use whoami to confirm my account. For a setup path that includes the plugin or copied skills, verify that the Stripo skills are available; missing required skills are a setup failure to diagnose and fix. Only for an explicitly selected MCP-only path, including the Claude custom connector, report skills as not applicable. Do not infer an MCP-only setup from missing skills. Report skills, tools and authentication separately, marking unchecked results as pending. Diagnose failed checks and guide me through any sign-in or restart that needs my action. If you use connect for a repair, explain its configuration changes first. Do not change email content during verification.

The agent reports three results. Confirm that the authentication result names the Stripo account you expect.

Check

What counts as success

Plugin or copied skills

The Stripo skills are available in the current session when the selected setup path includes them. Missing required skills are a failed check. Report not applicable only for an explicitly selected MCP-only path, including the Claude custom connector.

MCP tools

The agent can discover the Stripo tools.

Authentication

whoami succeeds and returns the expected account.

If a check fails, use Troubleshooting. If the plugin is installed, its connect skill can help: /stripo:connect in Claude Code, $stripo:connect in Codex, or /connect in Cursor and VS Code. Review what it changes before using it to repair a connection.

Try a first task

After the checks pass, try this read-only task in any connected client, including the Claude custom connector:

List the Stripo projects I can access. Ask me to choose one, then show its five most recently updated emails with their names and IDs. Do not change any content.

If you installed the plugin or copied skills, you can then start an email creation workflow:

Use Stripo's email-from-reference skill to help me create an email in a project I choose. Ask me for the brief and any required text, links and images before creating it.

Troubleshooting

Stripo tools are missing or unavailable

Check that stripo-mcp is configured and enabled in the agent's environment, then start a new session. Use the installed connect skill or the MCP instructions for your tool.

In Claude, enable Stripo in the chat's connector picker. In VS Code, select Agent mode and enable Stripo in the tools picker. Still unavailable? Check project overrides and sign-in errors, then retry whoami.

Stripo skills are missing or cannot load their SDK

Start a new session, or use /reload-plugins in Claude Code. Check installation and enabled status with claude plugin list or codex plugin list.

For copied skills, check that ~/.cursor/skills or ~/.copilot/skills contains real folders named connect, email-from-reference, email-model-editor and business-profile, then restart.

For “Cannot find the packaged convo-email-agent SDK”, check that packages, mcp-tools.json and bundle.json sit next to skills. Repeat the complete Cursor or VS Code copy procedure with backup checks, or reinstall the marketplace plugin. Verify skills and MCP afterward.

Sign-in fails or the wrong account appears

Message or symptom

What to check and do

MCP settings are missing in Stripo

Only Owners and Admins see them. Ask your Owner or Admin to enable MCP and share the Client ID.

The toggle is disabled or a plan banner appears

The workspace needs Medium, Pro or Prime.

“Client not found”

The ID may be wrong, contain spaces, or have been regenerated. Copy the current ID and update the connection.

Invalid parameter: redirect_uri

The client's callback URL may not be supported. Update the client and follow its guide here. For another client, check compatibility. Contact support if it persists.

invalid_scope or “Invalid scopes”

Use mcp:tools and offline_access. Preserve the array, comma-separated or space-separated format shown for your client.

Client registration error or “Dynamic Client Registration not supported”

Check the Client ID field for your client. In VS Code, use 1.123+ with oauth.clientId; if the fallback dialog offers Copy URIs & Proceed, use it and paste your Client ID, leaving the secret empty.

“Account is disabled, contact your administrator”

First confirm your Stripo email address using the confirmation email, or request a new one from your profile. If it is already confirmed, contact support.

You cannot sign in with your original social provider

Use email/password, Google or your company SSO. Google can use the same email address as your Stripo account. If you registered with Facebook, Microsoft or Apple and do not use Google, set a password in your Stripo profile first.

whoami returns an unexpected account

Sign out of the Stripo connection in that AI tool, then sign in with the intended account. Do not regenerate a workspace Client ID to switch users.

Claude connector fails before sign-in: add it with Use your own OAuth client and the Stripo Client ID. Recreate the connector after an ID change. Include any error reference when contacting support.

Cursor sign-in does not return: check whether stripo-mcp already shows Connected. Otherwise, allow the browser to open Cursor and retry Authenticate. If logs show a callback port conflict, identify the process using port 8787 before closing it. Contact support if the callback still fails.

Codex: if it says the server “may or may not require login”, use the explicit login command, complete browser sign-in and start a new session.

Installation commands fail

Paste the error into the same agent chat and ask it to continue setup. You do not need to diagnose or install the missing software yourself.

  • An unknown command or option: the agent should check which installation it is using and update the AI tool if needed.

  • Missing Node.js, curl, Git or a suitable shell: the agent should install the missing software, then repeat the checks in its working environment. See the technical setup reference.

  • Cursor: “Operation not permitted” on ~/.cursor/mcp.json or no network access: Cursor's sandbox blocked the command. Approve rerunning it outside the sandbox when the agent asks; the confirmation button may still read Run in sandbox. Or use the terminal steps.

  • Permission errors or “Operation not permitted”: the agent should request access for the specific operation. If an administrator must act, it should explain the exact step and resume afterward. It should diagnose network errors without disabling global protections.

  • PowerShell says scripts are disabled: let the agent identify the appropriate launcher or prepare the environment required by the skills. The technical reference includes the Windows details.

  • The agent writes plugin files individually: ask it to use the complete package from the repository. It must inspect and back up affected files, replace only verified Stripo files, and preserve shared directories and files of unknown origin.

The client keeps using an old Stripo connection

A local or project entry can override a user-level entry. Inspect only stripo-mcp in the relevant locations; preserve other servers and settings.

Client

Settings to compare

Claude Code

claude mcp get stripo-mcp reports the effective scope. Check user/local entries and the current project's .mcp.json; local and project entries take precedence over user scope.

Codex

Compare the user config.toml with the current project's .codex/config.toml, including enabled and oauth.client_id. codex mcp get alone does not show the saved Client ID.

Cursor

Compare ~/.cursor/mcp.json with the project's .cursor/mcp.json.

VS Code

Compare MCP: Open User Configuration with .vscode/mcp.json in the workspace.

For manual repairs, keep matching settings. Back up and correct only a confirmed obsolete Stripo override. In Claude Code, use claude mcp remove stripo-mcp --scope local or claude mcp remove stripo-mcp --scope project for the affected scope. Verify the intended workspace and replacement entry first. If you use connect in Claude Code or Codex instead, its migration procedure removes Stripo project overrides after saving the user-level entry, even when those overrides previously worked. Restart and retry whoami.

Updates and access

Staying signed in

Your client normally refreshes access automatically. You may need to sign in again after a long period without use, signing out in the client, an Owner/Admin regenerating the Client ID or disabling the integration, or a workspace plan change.

Update the plugin or copied skills

Plugin updates normally preserve the separate MCP configuration. You do not need to replace the Client ID just to update skills.

Choose the row that matches your interface. In the Code tab of the Claude Desktop app, /plugin may open the graphical Plugins screen with Yours and Discover tabs. The Marketplaces → Enable auto-update instructions below refer to the plugin menu in a terminal Claude Code session. The Claude custom connector path has no plugin to update.

Installation

How to update

Claude Desktop app, Code tab: graphical plugin screen

Open Settings → Customize → Plugins → Yours and select Stripo. Click Update when the button is available. The on/off switch enables or disables the plugin; it is not an auto-update setting. If no auto-update control is shown, use the Update button for manual updates.

Claude Code in a terminal: local marketplace installation

Start Claude Code with claude, then open /plugin → Marketplaces → stripo → Enable auto-update. To update manually, run claude plugin marketplace update stripo, then claude plugin update stripo@stripo in your terminal, using the installation's scope. Run /reload-plugins or start a new session.

Codex

Codex refreshes configured marketplaces when it starts. To refresh manually, run codex plugin marketplace upgrade stripo, then start a new session.

Cursor, VS Code or other copied skills

Check the checkout and destination files using the backup rules. Run git -C ~/stripo-agent-plugin pull --ff-only, repeat the complete copy procedure for your client, and restart it. Updating the checkout alone does not update copied skills.

After an update, start a new conversation or session and check that the Stripo skills are available. The absence of an auto-update control does not tell you whether the Desktop app updates that plugin automatically.

Regenerate or update a Client ID

An Owner or Admin can regenerate an exposed ID in Workspace Settings → MCP integration. This is not a routine connection check.

Regeneration affects every AI connection in the workspace. Click Generate a new Client ID and confirm: new sign-ins with the old ID stop immediately; existing connections lose access within minutes. Share the new ID with your team and update each connection:

AI tool

What to do with the replacement ID

Claude Code

Run /stripo:connect and explicitly provide the new ID in the same message so the skill updates the MCP configuration. For an MCP-only user-scope entry, run claude mcp remove stripo-mcp --scope user, then the add command in the Claude Code guide with the new ID. Check for old project overrides, restart and authenticate in /mcp.

Codex

Ask for $stripo:connect with the new ID, or update mcp_servers.stripo-mcp.oauth.client_id in the effective configuration. Run codex mcp logout stripo-mcp, then codex mcp login stripo-mcp --scopes mcp:tools,offline_access. Start a new session.

Cursor

Use /connect with the new ID if skills are installed, or update auth.CLIENT_ID in the effective mcp.json. Click Authenticate next to stripo-mcp.

VS Code

Update oauth.clientId in mcp.json and run Developer: Reload Window. If “Client not found” persists, run Authentication: Remove Dynamic Authentication Providers, remove only the relevant sso.stripo.email entry, and start the server again.

Claude custom connector

Remove the Stripo connector, add it with the new ID, and click Connect. On Team/Enterprise, the Owner re-adds it and each member connects again.

mcp-remote bridge

Quit the agent, update client_id, and point MCP_REMOTE_CONFIG_DIR at a new, empty folder used only for Stripo. Restart and sign in again. Preserve the previous credential folder, including any shared ~/.mcp-auth folder.

The plugin or copied skills stay installed. After reconnecting, repeat the authentication check.

Disconnect one tool or disable the integration

To sign out of just one connection, use the client's Stripo disconnect/sign-out action. In Claude Code, use claude mcp logout stripo-mcp or Clear authentication in /mcp. In Codex, use codex mcp logout stripo-mcp.

To disable access for the whole workspace, an Owner or Admin turns off Connect AI tools in Stripo. All connected AI tools lose access within a few minutes. Turning it back on lets you use the same Client ID again.

A downgrade to a plan without MCP integration disables the integration automatically. After upgrading to an eligible plan, turn it on again.

Technical setup reference for AI agents

These instructions support the copyable prompts above. In an agent-assisted setup, the agent performs the relevant checks; readers following a manual guide perform them in the environment specified by that guide. Local skill-runtime requirements apply only to a setup with the plugin or copied skills.

  1. Identify the AI tool, the selected setup path and the actual execution environment: macOS, Linux, native Windows, WSL or a remote host. Follow only that tool's guide. Install the plugin or its skills alongside MCP when the selected path includes the email workflows. For an explicitly selected MCP-only path, including the Claude custom connector, verify tools and authentication without requiring skills. Missing skills alone do not make a setup MCP-only.

  2. Inspect existing Stripo configuration before changing environments. Reuse the saved Client ID unless the user supplies a replacement. The direct setup prompts preserve a working entry; if invoking connect, first explain its changes to transport and scope. Ask for an ID only when missing; never save YOUR_CLIENT_ID. Locate the active client's configuration, plugin and skill directories instead of inferring them from a terminal's home folder. Do not copy credential stores to a new environment; use the client's sign-in flow if needed.

  3. Check user and current-project settings for conflicting stripo-mcp entries. Back up modified files and preserve unrelated settings, plugins, skills and packages. Follow the copy and backup rules.

  4. Treat a missing dependency as a setup task: install it, then verify it. Use the client's normal approval flow for additional access and preserve global approval and sandbox settings. If a required action is outside your capabilities or blocked by company policy, explain one specific next step for the user or administrator.

  5. Before a restart or environment switch, provide a short progress summary with completed steps, relevant paths and the next action, excluding credentials. Resume from it afterward; do not repeat completed installations. Let the user complete interactive account setup and browser sign-in. Never request passwords or tokens, or display whole configuration files.

  6. Report plugin/skills available, MCP tools available, and authentication verified separately. Mark unchecked states pending and failed checks failed. Mark skills not applicable only for an explicitly selected MCP-only path. After any required restart, verify tool availability and, when required by the selected path, skill discovery in the new session, then call whoami. Diagnose and fix missing required skills instead of marking them not applicable. Never modify content to test setup.

Prepare and verify the agent's environment

For a setup with the plugin or copied skills, the agent must load SKILL.md skills, use a shell and MCP tools, read local files, and inspect image previews. The Stripo skills require Node.js 20.18.1+, curl, a POSIX shell, and network access to Stripo and its returned upload/download URLs. Repository cloning and updates also require Git. The SDK is included in the plugin package; no separate SDK installation is needed.

Check the existing tools in the shell that will execute the skills:

node --version
curl --version
git --version

Use the OS's existing package manager or official installers to install missing tools. Reuse compatible installations; do not downgrade them. For a new Node.js installation, choose a supported LTS release that meets the minimum using the official Node.js installation instructions. After installing or updating software, refresh the session if necessary and rerun the checks in the agent's environment. A successful check in a separate terminal does not prove the agent can use the tool.

On local Windows: the Stripo skills use a POSIX environment. Inspect existing WSL installations first, including their version, and reuse a suitable WSL 2 environment. If missing, follow Microsoft's WSL installation guide, using the normal approval flow for wsl --install. A restart and first-run Linux account setup may require the user's action. Explain the exact action, then continue setup inside that environment. Do not install local WSL when the agent already runs on a remote Linux host.

Connect the actual agent to that environment: launch Claude Code or the Codex CLI there, use Codex's supported WSL agent setting, or connect the Cursor/VS Code workspace to WSL. For VS Code, follow its WSL setup guide. Changing only the integrated terminal does not switch the agent. Confirm where the client loads its settings and skills before installing the Stripo package.

Codex paths and versions: respect an existing CODEX_HOME. The usual config path is ~/.codex/config.toml; the Windows app normally uses %USERPROFILE%\.codex, while a separate WSL CLI uses its Linux home. These installations may have separate configuration and authentication. See Codex's Windows app guide. Use the CLI associated with the active installation and its effective configuration for setup commands. Check codex --version and plugin-command support; update through the existing installation method if needed. Manual --oauth-client-id registration requires 0.134.0+. For Claude Code, check that the CLI is available in the chosen environment and use claude update if needed.

Native Windows MCP-only setups: the skill runtime above is unnecessary for a direct MCP connection. If PowerShell blocks npm.ps1 or codex.ps1, use npm.cmd or codex.cmd instead. A user who explicitly chooses a per-user execution-policy change can run Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser and confirm with Y; administrator rights are not required. Follow Microsoft's execution-policy guide, and do not change policy automatically to bypass an error. For the Stripo skills, prepare the POSIX environment described above.

Advanced: connect another AI tool

Your client must support remote MCP and Stripo's OAuth flow: a pre-registered public Client ID, PKCE S256, the required scopes, and an accepted callback URL. Stripo allows specific client callbacks and local loopback patterns; other callbacks can produce redirect_uri errors.

Use these settings in a compatible client's native MCP configuration:

Setting

Value

Server name

stripo-mcp

Transport

Streamable HTTP

Server URL

https://mcp.stripo.email/mcp

OAuth Client ID

Your workspace's Client ID from Stripo

Client Secret

None; leave it empty

Scopes

mcp:tools and offline_access

Configure these values, sign in, and verify authentication. If the client cannot use the Client ID or complete remote OAuth, consider the bridge. Contact support for unsupported callbacks.

Use the mcp-remote bridge

For clients that launch local stdio servers, this bridge handles remote OAuth. The pinned mcp-remote version below requires Node.js 20.18.1+, even for an MCP-only setup without Stripo skills. It opens browser sign-in on first start, using callback port 3334.

In clients using an mcpServers configuration, add the entry below while preserving existing servers. Other clients may need a different wrapper around the same command, environment and arguments. Replace YOUR_CLIENT_ID and ABSOLUTE_PATH_TO_STRIPO_AUTH_FOLDER.

Use a Stripo-only absolute path: /Users/your-name/.stripo/mcp-auth on macOS, /home/your-name/.stripo/mcp-auth on Linux/WSL, or C:/Users/your-name/.stripo/mcp-auth on Windows. Substitute your OS username. When migrating, sign in again and preserve the previous credential folder.

{
"mcpServers": {
"stripo-mcp": {
"command": "npx",
"env": {
"MCP_REMOTE_CONFIG_DIR": "ABSOLUTE_PATH_TO_STRIPO_AUTH_FOLDER"
},
"args": [
"-y", "mcp-remote@0.14.3", "https://mcp.stripo.email/mcp", "3334",
"--static-oauth-client-info", "{\"client_id\":\"YOUR_CLIENT_ID\"}",
"--static-oauth-client-metadata", "{\"scope\":\"mcp:tools offline_access\"}"
]
}
}
}

On native Windows, use npx.cmd as command. Start the connection in your client, complete sign-in yourself, and run the authentication check.

Troubleshoot the bridge

  • “npx not found” or “spawn npx ENOENT”: ask the agent to install the required Node.js version, check the launcher path, and guide you through fully restarting the client. If npx works only in the terminal, the agent should set command to its full path, found with which npx on macOS/Linux or where npx.cmd on Windows.

  • “Callback port 3334 is already in use”: change 3334 in args to a free port such as 3335, restart and sign in again.

  • Repeated sign-in requests: check the Client ID and that the bridge can write to its dedicated auth folder. If saved authentication needs resetting, quit the client and set MCP_REMOTE_CONFIG_DIR to a new, empty Stripo-only folder. Restart and sign in again. Keep the previous folder and shared ~/.mcp-auth data unchanged.

Add skills to another compatible agent

The agent should prepare the skill runtime and capabilities to use the Stripo workflows. A successful MCP connection alone does not load skills.

Use the agent's documented personal skills location. Keep skills/, packages/, mcp-tools.json and bundle.json from plugins/stripo/ together, following the backup rules. Copying only skills/ omits the SDK. See other-agent instructions for alternate layouts. Restart and verify skills, tools and authentication separately.

Tool reference

The reference for every tool the Stripo MCP server exposes to a connected AI agent: what each tool does, its parameters, and example requests and responses.

Core mechanics

Four patterns run across the tools. Understanding them makes the reference below obvious.

1. Large content travels by link, never inline. HTML, document JSON, screenshots, and schemas are never returned in the response body. Instead you get a temporary presigned URL (htmlUrl, downloadUrl, and so on) and an expiry (expiresAt). Links expire within minutes — download right away; to get a fresh link, run the tool again.

2. Editing content is a round-trip. You never send new content inline. To change an email:

  1. get_document_state → download the current JSON.

  2. prepare_document_state_upload → get an uploadId and a presigned uploadUrl. Upload your edited JSON there.

  3. set_document_state → apply it with the uploadId (never the URL).

  4. To keep other people’s concurrent edits, call prepare_document_state_upload a second time, upload the unmodified JSON to that ticket, and pass its id as baseUploadId — your change is then applied as a delta, not a full overwrite.

Validate your JSON against get_document_state_schema before uploading. Upload tickets are single-use.

3. Dates. find_content accepts relative tokens resolved on the server — pass last_month or -6mo as-is; don’t compute dates yourself. find_projects and find_activity take epoch-milliseconds only, so call get_server_time first.

4. Export limit and recovery. Each export_to_html call uses one export from your workspace quota — the tool returns QUOTA_EXCEEDED once it’s spent. delete_content is a soft delete: items go to the trash and stay recoverable.

Tools

Tools are grouped by what they do to your workspace:

  • 🟢 Reads — never changes your workspace.

  • 🟡 Creates or prepares — adds new content, exports, or issues an upload ticket; doesn’t change existing content.

  • 🔴 Changes or deletes — overwrites or removes existing content. Confirm before running.

Your identity is automatic — no tool takes a user ID. Call whoami first.

Discovery 🟢

Tool

What it does

Key parameters

whoami

Returns your profile, every accessible workspace with your role and plan, content counts, activeProjectId, and a roles legend. Call it first.

none

find_projects

Lists accessible projects with role, counts, and timestamps. A single projectId adds industry and logo detail.

nameContains, projectId, workspaceId, createdById, scope (current default / all), createdAfter/createdBefore, updatedAfter/updatedBefore (epoch-ms), offset, limit (≤100)

find_folders

Lists the folder tree: type (EMAIL/TEMPLATE), item count, empty flag, project, parent folder. Searches every accessible workspace by default.

nameContains, projectId, workspaceId, scope (all default / current), offset, limit (≤100)

find_content

Searches or counts emails, templates, and modules by name, body text, or metadata. Drafts are excluded by default.

nameContains, bodyText (all words must match), type (email/template/module), projectId, folderId, workspaceId, scope, createdAfter/createdBefore/updatedAfter/updatedBefore (relative tokens, ISO, or epoch-ms), createdById, updatedById, draft, syncedOnly, countOnly, groupBy (type/project/folder/createdById/updatedById), sortBy (name/createdAt/updatedAt), sortOrder, offset, limit (≤100)

find_activity

Searches create, update, delete, move, and restore events.

type (EMAIL/TEMPLATE/MODULE/FOLDER), operation (CREATE/UPDATE/DELETE/MOVE/RESTORE), actorId, entityId, folderId, projectId, workspaceId, scope, occurredAfter/occurredBefore (epoch-ms), offset, limit (≤100)

list_members

Lists workspace members with their role and access scope. Requires permission to view members (Owners and Admins have it by default).

workspaceId, projectId, offset, limit (≤100)

get_server_time

Returns the server’s current UTC time. The reference point for relative dates and epoch-ms filters.

none

Read content 🟢

Tool

What it does

Key parameters

get_content

Full detail of one email, template, or module: name, project and folder, author and editor, timestamps, draft flag, language, and for emails the subject line and preheader. With includeHtml=true, adds a presigned htmlUrl to the raw stored HTML.

id (required), type, includeHtml

get_document_state

Returns a presigned link to the current document JSON of one email or template — for inspection or a round-trip edit.

id (required), type (EMAIL default / TEMPLATE)

get_document_state_schema

Returns a presigned link to the JSON Schema every document state follows. set_document_state validates against it.

none

get_business_profile

Reads a project’s Business Profile: the brand context (brand and brand voice, contacts, socials, important links, languages) that email creation uses.

projectId (required)

get_screenshot

Returns presigned PNG links of the export-ready view, including unsaved co-editing changes.

id (required), mode (DESKTOP/MOBILE/BOTH, required), type

Create or prepare 🟡

Tool

What it does

Key parameters

create_email

Creates a new editable email and returns its emailId. Blank, from a template, or a copy of another email. Without projectId it lands in your last-active project. Not idempotent — each call creates another email.

name (≤200 chars), projectId, folderId, sourceTemplateId or sourceEmailId (mutually exclusive)

export_to_html

Compiles ready-to-send HTML (styles inlined, editor markup stripped) and returns a presigned htmlUrl. Uses one export from your quota. Emails and templates only — not modules.

id (required), type, includeAmpHtml, mergeTags (placeholder → value map), viewType

prepare_document_state_upload

Step 1 of an edit: returns a single-use uploadId and a presigned uploadUrl for your edited JSON. Checks write access.

id (required), type

prepare_business_profile_upload

Step 1 of a full Business Profile replace: returns an uploadId and upload URL.

projectId (required)

Change or delete 🔴

Tool

What it does

Key parameters

set_document_state

Applies an uploaded document state by uploadId. With baseUploadId, applies it as a delta so concurrent edits survive; without it, replaces the whole document.

id (required), uploadId, baseUploadId, type

patch_business_profile

Updates selected Business Profile fields. Omitted fields stay; a supplied array replaces the whole list, and [] clears it. Creates a profile if none exists.

projectId (required), patch (required; root paths brand, contacts, socials, importantLinks, languages)

replace_business_profile

Replaces a project’s entire Business Profile from an uploaded file. May overwrite concurrent changes.

projectId (required), uploadId, website (only when importing extracted site data)

delete_content

Soft-deletes emails, templates, or modules to the trash (recoverable). Requires confirm=true; dryRun=true previews without deleting and wins if both are set.

ids (required, ≤100), type, confirm, dryRun

🔴 Tools change or remove existing work. When your agent proposes one, review the target before you approve. Whether your AI tool pauses for approval depends on its own settings — make sure destructive calls require confirmation.

Rules agents trip on

  • Pick the project explicitly. create_email without projectId uses whoami’s activeProjectId — a guess. An email created in the wrong project can’t be moved, only deleted and recreated. Use a project whose role includes the EMAILS_MANAGE permission.

  • Retries can duplicate. After a create_email timeout, check with find_content (nameContains) before calling again.

  • Name collisions. A name already taken in the project gets a numeric suffix; the response reports the name actually stored.

  • Keep languages consistent. When patching a Business Profile, keep languages and brand.brandVoice.defaultLanguages in sync — include both if they’d conflict.

  • Mobile export isn’t available yet. viewType: "mobile" returns the desktop export with a warning.

  • Body search lags fresh edits. The bodyText index updates in the background, so an email edited moments ago may not match yet. Search by name, or use updatedAfter, for the latest changes.

  • Activity history has a start date. find_activity only returns events recorded since activity logging began. When results are empty or limited, the response’s note explains why; fall back to find_content with updatedAfter/updatedBefore.

Requests and responses

Every response is JSON. Examples show the fields each tool documents; values are illustrative and long URLs are shortened.

Response conventions

  • status — failures come back as a status code rather than a thrown error. The document-state and upload tools also return status: "OK" on success.

  • instruction — create_email, the upload-ticket tools, and non-OK set_document_state responses include an instruction naming the next call. Follow it.

  • note — find_projects and find_activity may add a plain-English note explaining a partial or empty result and what to try instead.

  • Presigned URLs — big payloads come back as downloadUrl / htmlUrl / uploadUrl with an expiry (expiresAt or htmlUrlExpiresAt).

  • Pagination — list tools return total, returned, and hasMore. When hasMore is true, pass the returned nextOffset as offset to get the next page.

  • Missing isn’t an error — an unknown or inaccessible id returns status: "NOT_FOUND", not a thrown error.

whoami

json

{ "tool": "whoami", "arguments": {} }

Response (trimmed):

json

{   "userId": 20154,   "firstName": "Alex",   "lastName": "Doe",   "email": "you@example.com",   "activeProjectId": 44873,   "workspaces": [     {       "workspaceId": 44210,       "name": "Acme workspace",       "myRole": "owner",       "pricingPlan": "MEDIUM",       "scope": "WORKSPACE",       "counts": { "emails": 128, "templates": 12, "modules": 7, "projects": 3 },       "groups": [],       "projects": [         { "id": 44873, "name": "Newsletters", "role": "owner", "status": "ACTIVE",           "counts": { "emails": 64, "templates": 4, "modules": 2 } }       ]     }   ],   "roles": {     "owner": { "permissions": [ { "name": "EMAILS_MANAGE", "desc": "Create, edit, and delete emails" } ] }   } }

roles is a legend: each role your workspaces reference, with its full permission list.

get_server_time

json

{ "tool": "get_server_time", "arguments": {} }

json

{ "nowEpochMs": 1789568379943, "nowIso": "2026-09-16T14:19:39.943Z", "todayDate": "2026-09-16", "dayOfWeek": "Wednesday", "timezone": "UTC" }

find_content

json

{ "tool": "find_content", "arguments": { "nameContains": "welcome", "type": "email", "limit": 3 } }

Response (trimmed):

json

{   "total": 2,   "returned": 2,   "hasMore": false,   "appliedFilters": { "scope": "current", "workspaceIds": [44210], "draft": false, "countOnly": false, "limit": 3, "offset": 0 },   "byType": { "email": 2, "template": 0, "module": 0 },   "items": [     {       "type": "email", "id": 90218, "name": "Welcome — Day 1",       "projectId": 44873, "projectName": "Newsletters",       "folderId": 771, "folderName": "Onboarding",       "createdById": 20154, "createdByName": "Alex Doe", "createdAt": 1789400000000,       "updatedById": 20154, "updatedByName": "Alex Doe", "updatedAt": 1789500000000     }   ] }
  • appliedFilters echoes the filters the server actually used.

  • Modules have no folders, so module items omit folderId and folderName.

  • nextOffset appears only when hasMore is true.

  • To count without listing, add "countOnly": true and read total and byType. For a breakdown, add "groupBy": "project" — the response then includes groups[] (key, name, count) covering the full match set, not just the page.

  • When you pass a relative date token, the response includes resolvedWindow with the exact bounds the server used.

get_content (with HTML)

json

{ "tool": "get_content", "arguments": { "id": 90218, "type": "email", "includeHtml": true } }

Response:

json

{   "type": "email", "id": 90218, "name": "Welcome — Day 1",   "projectId": 44873, "projectName": "Newsletters",   "folderId": 771, "folderName": "Onboarding",   "createdById": 20154, "createdByName": "Alex Doe", "createdAt": 1789400000000,   "updatedById": 20154, "updatedByName": "Alex Doe", "updatedAt": 1789500000000,   "language": "en",   "subjectLine": "Welcome aboard",   "preheader": "Let's get you started",   "htmlUrl": "https://…/9f2c….html?X-Amz-…",   "htmlUrlExpiresAt": "2026-09-16T14:44:20Z" }

htmlUrl and htmlUrlExpiresAt appear only with includeHtml: true; htmlUrl points to the raw stored HTML. For ready-to-send HTML, use export_to_html. subjectLine and preheader are returned for emails only; modules have no folder fields.

get_document_state_schema

json

{ "tool": "get_document_state_schema", "arguments": {} }

json

{   "status": "OK",   "downloadUrl": "https://…/dfd4….json?X-Amz-…",   "expiresAt": "2026-09-16T14:44:20Z",   "message": "Fetch the JSON from downloadUrl with curl; the link is temporary." }

get_document_state returns the same shape for one email’s document JSON.

create_email

json

{ "tool": "create_email", "arguments": { "name": "March webinar invite", "projectId": 44873 } }

json

{   "emailId": 90477,   "projectId": 44873,   "name": "March webinar invite",   "instruction": "<the next call to make for this deployment>" }

The email starts blank unless you pass sourceTemplateId or sourceEmailId. Follow the instruction.

Edit an email — the full round-trip

1. Read the current state — get_document_state returns a downloadUrl (shape as above). Download and edit the JSON.

2. Get an upload ticket:

json

{ "tool": "prepare_document_state_upload", "arguments": { "id": 90477, "type": "EMAIL" } }

json

{   "status": "OK",   "uploadId": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",   "uploadUrl": "https://…/upload/….json?X-Amz-…",   "instruction": "<upload the file, then call set_document_state with this uploadId>" }

Upload your edited JSON to uploadUrl as the returned instruction describes. The URL is a short-lived credential — never pass it on.

3. Apply it:

json

{ "tool": "set_document_state", "arguments": { "id": 90477, "uploadId": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4" } }

json

{ "status": "OK" }

Concurrency-safe variant: mint a second ticket, upload the unmodified JSON to it, and add "baseUploadId": "<second uploadId>" in step 3.

export_to_html (with merge tags)

json

{ "tool": "export_to_html", "arguments": { "id": 90218, "type": "email", "mergeTags": { "{{first_name}}": "Anna" } } }

json

{   "type": "email", "id": 90218, "name": "Welcome — Day 1",   "htmlUrl": "https://…/export-….html?X-Amz-…",   "htmlUrlExpiresAt": "2026-09-16T14:44:20Z",   "exportedAt": 1789568379943,   "warnings": [ "Merge tag {{last_name}} was not replaced: no value provided" ] }

Merge-tag keys are the literal placeholders as they appear in the content. Unmapped placeholders come back in warnings[] as plain-text messages, not as errors. With includeAmpHtml: true you also get ampHtmlUrl and ampHtmlUrlExpiresAt — or a warning if the content has no AMP markup.

delete_content (preview, then confirm)

json

{ "tool": "delete_content", "arguments": { "ids": [90218, 90477], "type": "email", "dryRun": true } }

json

{ "requested": 2, "dryRun": true, "deleted": [90218, 90477], "denied": [] }

Then run the same call with "confirm": true instead of "dryRun": true:

json

{ "requested": 3, "dryRun": false, "deleted": [90218, 90477], "denied": [ { "id": 90650, "reason": "NOT_FOUND" } ] }

deleted[] lists the ids removed (or, on a dry run, the ids that would be). denied[] lists ids that weren’t, each with a reason — NOT_FOUND or FORBIDDEN. Deleted items go to the trash and stay recoverable.

Calling without confirm or dryRun returns an error instead of deleting:

json

{ "error": { "code": "INVALID_ARGUMENT", "terminal": true, "retryable": false, "hint": "Refusing to delete without confirm=true. Pass dryRun=true to preview, or confirm=true to delete." } }

get_business_profile

json

{ "tool": "get_business_profile", "arguments": { "projectId": 44873 } }

Response (trimmed):

json

{   "businessProfileId": 3021,   "businessProfile": {     "brand": { "brandVoice": { "defaultLanguages": ["en"] } },     "languages": ["en"]   } }

The other root sections are contacts, socials, and importantLinks. When no profile exists, businessProfileId is null and businessProfile holds defaults. Update it with patch_business_profile (partial) or prepare_business_profile_upload + replace_business_profile (full), then read it back to confirm.

Tool-chain examples

Job

Tool chain

Export an existing email to HTML

find_content → export_to_html

Create and fill a new email

whoami → create_email → get_document_state → prepare_document_state_upload → upload → set_document_state

Personalize on export

export_to_html with mergeTags

Review recent workspace activity

get_server_time → find_activity (+ list_members)

Delete safely

delete_content (dryRun) → delete_content (confirm)

Check how an email looks

get_screenshot (mode: BOTH)

Need help?

Ask your agent for a short setup summary, then email it to support@stripo.email. It should include your AI tool and version, operating system and agent environment, the failed step, and the exact error text or reference ID. Remove passwords, tokens and unrelated configuration from anything you share.

Documentation reviewed: October 15, 2026. Client interfaces can change; the version requirements above describe the features used by these instructions.

Did this answer your question?