plunk-mcp
A Model Context Protocol server for Plunk, the open-source self-hosted email platform. Provides 84 tools for transactional email, contacts, campaigns, segments, templates, workflows, events, and analytics through the Plunk API.
README
plunk-mcp
A Model Context Protocol server for Plunk, the open-source self-hosted email platform. Gives Claude (and any MCP client) 84 tools across the Plunk API: transactional email, contacts, campaigns, segments, templates, workflows, events, analytics.
Unofficial. Not affiliated with Plunk. Built by Ignyte.
Why this exists
Plunk's official Node SDK does two things: track and send. The API behind those two methods has grown into a full email automation platform that includes workflows, segments, templates, analytics, but the SDK never caught up. So Claude couldn't reach any of it.
This MCP closes that gap. Every endpoint Claude can usefully call, it can call.
Requirements
The active Plunk codebase: useplunk/plunk, distributed as ghcr.io/useplunk/plunk. Self-hosted or on useplunk.com.
Note that this MCP does not support the legacy driaug/plunk Docker image. If you're on that image, see Migrating from legacy.
Node.js ≥ 18 if you're running from source.
Install
Add to ~/.claude.json or your Claude Desktop config:
{
"mcpServers": {
"plunk": {
"command": "npx",
"args": ["-y", "@ignytehq/plunk-mcp"],
"env": {
"PLUNK_API_KEY": "sk_your_secret_key_here",
"PLUNK_API_URL": "https://your-plunk-host"
}
}
}
}
Restart Claude.
Multiple Plunk projects
Plunk API keys are project-scoped. To work with multiple projects in the same session, register one MCP server per project:
{
"mcpServers": {
"plunk-acme": {
"command": "npx",
"args": ["-y", "@ignytehq/plunk-mcp"],
"env": {
"PLUNK_API_KEY": "sk_acme_...",
"PLUNK_API_URL": "https://plunk.acme.com"
}
},
"plunk-personal": {
"command": "npx",
"args": ["-y", "@ignytehq/plunk-mcp"],
"env": {
"PLUNK_API_KEY": "sk_personal_...",
"PLUNK_API_URL": "https://plunk.example.com"
}
}
}
}
Claude sees each as its own tool namespace.
Configuration
| Env var | Required | Default | What it does |
|---|---|---|---|
PLUNK_API_KEY |
yes | — | Secret API key (sk_*) from your project settings. |
PLUNK_API_URL |
no | https://api.useplunk.com |
Base URL of your Plunk API. For self-hosted, point at the API host (e.g. https://api.plunk.example.com, or https://plunk.example.com/api if your reverse proxy maps it that way). |
PLUNK_SKIP_CAPABILITY_DETECTION |
no | false |
Skip the startup probe and expose every tool regardless of what your instance supports. Useful for debugging. |
What's in the box
84 tools across 11 categories. At startup, the MCP probes one endpoint per category and only registers tools whose category responds — so on older useplunk/plunk releases, missing features are hidden rather than failing at call time.
| Category | Tools | Highlights |
|---|---|---|
| Transactional | 3 | send_transactional, track_event, verify_email |
| Contacts | 18 | CRUD, bulk import/subscribe/unsubscribe/delete, custom field management |
| Campaigns | 10 | Full lifecycle: create, update, send, cancel, test, stats |
| Segments | 10 | Dynamic + static segments, member management, recompute |
| Templates | 7 | Reusable email templates referenced from sends/campaigns/workflows |
| Workflows | 16 | Steps, transitions, executions — the whole automation builder |
| Events | 6 | Read API: history, stats, names, usage, delete |
| Domains | 4 | Add, verify, delete sending domains |
| Activity | 5 | Activity feed, stats, upcoming sends |
| Analytics | 4 | Timeseries, top campaigns, top events |
| Uploads | 1 | Image uploads for templates and campaigns |
Tool names follow plunk_<verb>_<resource>. Examples:
plunk_send_transactional— send a one-off emailplunk_track_event— fire an event (which then drives workflows and segment filters)plunk_create_workflow+plunk_add_workflow_step+plunk_start_workflow_executionplunk_create_segment(full filter-condition schema)plunk_get_analytics_timeseries,plunk_get_top_campaigns
Every tool has a typed input schema. Claude knows what to pass.
Capability detection, briefly
On startup the MCP makes one probe request per tool family to see what your instance answers. If /templates 404s, the seven template tools are hidden for the rest of the session. If /workflows answers, the sixteen workflow tools are registered.
The point is to keep Claude from confidently invoking endpoints that don't exist on your specific Plunk version. The probe takes one round trip per family at startup, then nothing.
Migrating from legacy driaug/plunk
The legacy image exposes a smaller, different API. This MCP won't fully work against it. The migration path:
- Stand up
ghcr.io/useplunk/plunk:lateston a separate host or subdomain. Don't disrupt your existing sender. The official guide is at docs.useplunk.com/self-hosting/introduction. - Re-create your project on the new instance. Grab a fresh
sk_*API key. The schemas differ; there's no in-place upgrade. - Export contacts from legacy (CSV from the dashboard). Import on the new instance via
plunk_import_contacts. - Re-create campaigns and templates. Workflows and segments are entirely new on the modern codebase.
- Repoint your apps to the new host. Decommission legacy.
This is a real migration project, an easy evening or two of work.
Building from source
git clone https://github.com/ignytehq/plunk-mcp.git
cd plunk-mcp
npm install
npm run build
PLUNK_API_KEY=sk_... PLUNK_API_URL=https://your-plunk node dist/index.js
Contributing
Issues and PRs welcome. If an endpoint responds unexpectedly, please include:
- Which Plunk version you're running (
docker inspect <container> | grep Imageplus the tag) - The endpoint path that misbehaved
- The full error message
License
MIT. See LICENSE.
Acknowledgements
Plunk and Driaug Aerts, for being open source. Anthropic, for the Model Context Protocol.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.