Connects Claude to Kit.com's V4 API with 13 composite tools that cover subscriber management, broadcast analytics, tagging, forms, sequences, and custom fields. The design choice here matters: instead of wrapping each endpoint as a separate tool (which bloats context and confuses LLMs), it bundles related operations into agent-friendly commands with formatted responses. You get engagement analytics per subscriber, batch operations for up to 10k records, per-link click tracking on broadcasts, and automatic rate limit handling with exponential backoff. Requires a Kit API key for most features, OAuth token for purchases and bulk ops. Useful if you're running email campaigns through Kit and want Claude to pull stats, compare engagement, draft broadcasts, or manage your list without switching to the web UI.
Public tool metadata for what this MCP can expose to an agent.
KIT_ADD_SUBSCRIBER_TO_FORMTool to add a subscriber to a specific form by ID. Use after confirming form and subscriber IDs.3 paramsTool to add a subscriber to a specific form by ID. Use after confirming form and subscriber IDs.
idintegerform_idintegerreferrerstringKIT_CREATE_CUSTOM_FIELDTool to create a new custom field for subscriber data. Use when you need to store extra attributes for subscribers.1 paramsTool to create a new custom field for subscriber data. Use when you need to store extra attributes for subscribers.
labelstringKIT_CREATE_TAGTool to create a new tag in the account. Use when you need a custom label to segment subscribers. Use after confirming tag uniqueness to avoid duplicates. Example: "Create a tag called 'VIP' for premium customers."1 paramsTool to create a new tag in the account. Use when you need a custom label to segment subscribers. Use after confirming tag uniqueness to avoid duplicates. Example: "Create a tag called 'VIP' for premium customers."
namestringKIT_CREATE_WEBHOOKTool to create a new webhook subscription. Use when you need subscriber or purchase event notifications.2 paramsTool to create a new webhook subscription. Use when you need subscriber or purchase event notifications.
eventobjecttarget_urlstringKIT_DELETE_BROADCASTTool to delete a specific broadcast. Use when you need to permanently remove a broadcast by ID (after confirming the ID). Example prompt: "Delete broadcast with ID 123"1 paramsTool to delete a specific broadcast. Use when you need to permanently remove a broadcast by ID (after confirming the ID). Example prompt: "Delete broadcast with ID 123"
idintegerKIT_DELETE_CUSTOM_FIELDTool to delete a specific custom field. Use after confirming the custom field ID is correct. Deletes the field permanently.1 paramsTool to delete a specific custom field. Use after confirming the custom field ID is correct. Deletes the field permanently.
idintegerKIT_DELETE_SUBSCRIBERTool to delete (unsubscribe) a subscriber by ID. Use when you need to remove a subscriber from all sequences and forms after confirming the subscriber exists.1 paramsTool to delete (unsubscribe) a subscriber by ID. Use when you need to remove a subscriber from all sequences and forms after confirming the subscriber exists.
idintegerKIT_DELETE_TAGTool to delete a tag by ID. Use when you need to remove obsolete or incorrect tags after confirming the tag exists.1 paramsTool to delete a tag by ID. Use when you need to remove obsolete or incorrect tags after confirming the tag exists.
idintegerKIT_DELETE_WEBHOOKTool to delete a webhook by ID. Use when you want to permanently remove a webhook after confirming its ID.1 paramsTool to delete a webhook by ID. Use when you want to permanently remove a webhook after confirming its ID.
idintegerKIT_GET_ACCOUNTTool to retrieve current account information. Use after validating API key to fetch account ID, plan type, primary email, and timezone details.Tool to retrieve current account information. Use after validating API key to fetch account ID, plan type, primary email, and timezone details.
No parameter schema in public metadata yet.
KIT_GET_ACCOUNT_COLORSTool to retrieve list of colors associated with the account. Use after confirming authentication to fetch account-specific color palette.Tool to retrieve list of colors associated with the account. Use after confirming authentication to fetch account-specific color palette.
No parameter schema in public metadata yet.
KIT_GET_BROADCASTTool to retrieve details of a specific broadcast by ID. Use when you have a valid broadcast ID and need its metadata.1 paramsTool to retrieve details of a specific broadcast by ID. Use when you have a valid broadcast ID and need its metadata.
idintegerKIT_GET_BROADCAST_STATSTool to retrieve statistics for a specific broadcast by ID. Use after a broadcast has been sent to monitor performance.1 paramsTool to retrieve statistics for a specific broadcast by ID. Use after a broadcast has been sent to monitor performance.
idintegerKIT_GET_CREATOR_PROFILETool to retrieve the creator profile information for the account. Use when you need creator metadata (bio, avatar, social links) before publishing or customizing content.Tool to retrieve the creator profile information for the account. Use when you need creator metadata (bio, avatar, social links) before publishing or customizing content.
No parameter schema in public metadata yet.
KIT_GET_EMAIL_STATSTool to retrieve email statistics for the account. Use after confirming authentication to fetch metrics on emails (sent, opened, clicked) over the last 90 days.Tool to retrieve email statistics for the account. Use after confirming authentication to fetch metrics on emails (sent, opened, clicked) over the last 90 days.
No parameter schema in public metadata yet.
KIT_LIST_BROADCASTSTool to retrieve a paginated list of all broadcasts. Use when you need to enumerate or review broadcast summaries with cursor-based pagination.4 paramsTool to retrieve a paginated list of all broadcasts. Use when you need to enumerate or review broadcast summaries with cursor-based pagination.
afterstringbeforestringper_pageintegerinclude_total_countstringKIT_LIST_CUSTOM_FIELDSTool to retrieve a paginated list of custom fields. Use after confirming you need to enumerate or inspect all custom fields with cursor-based pagination.4 paramsTool to retrieve a paginated list of custom fields. Use after confirming you need to enumerate or inspect all custom fields with cursor-based pagination.
afterstringbeforestringper_pageintegerinclude_total_countstringKIT_LIST_FORMSTool to list all forms. Use when you need to fetch forms with optional filters and pagination.6 paramsTool to list all forms. Use when you need to fetch forms with optional filters and pagination.
typestringembed · hostedafterstringbeforestringstatusstringper_pageintegerinclude_total_countstringtrue · falseKIT_LIST_SEGMENTSTool to retrieve a paginated list of segments. Use when you need to enumerate segments with cursor-based pagination for further processing or display.4 paramsTool to retrieve a paginated list of segments. Use when you need to enumerate segments with cursor-based pagination for further processing or display.
afterstringbeforestringper_pageintegerinclude_total_countstringtrue · falseKIT_LIST_SEQUENCESTool to retrieve a paginated list of all sequences. Use when you need to enumerate sequences with pagination for further processing or display.4 paramsTool to retrieve a paginated list of all sequences. Use when you need to enumerate sequences with pagination for further processing or display.
afterstringbeforestringper_pageintegerinclude_total_countstringtrue · falseKIT_LIST_SUBSCRIBERSTool to retrieve a list of subscribers. Use when you need to fetch subscriber records with optional filtering, sorting, and pagination.12 paramsTool to retrieve a list of subscribers. Use when you need to fetch subscriber records with optional filtering, sorting, and pagination.
afterstringbeforestringstatusstringper_pageintegersort_fieldstringsort_orderstringasc · desccreated_afterstringemail_addressstringupdated_afterstringcreated_beforestringupdated_beforestringinclude_total_countstringtrue · falseKIT_LIST_SUBSCRIBERS_FOR_FORMTool to retrieve subscribers for a specific form by ID. Use when you need to page or filter subscribers of a form.10 paramsTool to retrieve subscribers for a specific form by ID. Use when you need to page or filter subscribers of a form.
afterstringbeforestringstatusstringform_idintegerper_pageintegeradded_afterstringadded_beforestringcreated_afterstringcreated_beforestringinclude_total_countstringtrue · falseKIT_LIST_TAGSTool to retrieve a list of all tags. Use when you need a complete inventory of tags for the Kit account.Tool to retrieve a list of all tags. Use when you need a complete inventory of tags for the Kit account.
No parameter schema in public metadata yet.
KIT_LIST_TAG_SUBSCRIBERSTool to retrieve subscribers for a specific tag. Use after confirming the tag ID when you need to list subscribers associated with a tag.10 paramsTool to retrieve subscribers for a specific tag. Use after confirming the tag ID when you need to list subscribers associated with a tag.
afterstringbeforestringstatusstringtag_idintegerper_pageintegertagged_afterstringcreated_afterstringtagged_beforestringcreated_beforestringinclude_total_countstringtrue · falseKIT_TAG_SUBSCRIBERTool to associate a subscriber with a specific tag by ID. Use after confirming tag and subscriber IDs when tagging a subscriber.2 paramsTool to associate a subscriber with a specific tag by ID. Use after confirming tag and subscriber IDs when tagging a subscriber.
tag_idintegersubscriber_idintegerKIT_TAG_SUBSCRIBER_BY_EMAILTool to associate a subscriber with a tag using an email address. Use when you have a tag ID and subscriber email ready. Use after confirming both resources exist.2 paramsTool to associate a subscriber with a tag using an email address. Use when you have a tag ID and subscriber email ready. Use after confirming both resources exist.
tag_idintegeremail_addressstringKIT_UPDATE_ACCOUNT_COLORSTool to update the list of colors for the account. Use when customizing your Kit account's color palette for broadcasts and templates.1 paramsTool to update the list of colors for the account. Use when customizing your Kit account's color palette for broadcasts and templates.
colorsarrayKIT_UPDATE_CUSTOM_FIELDTool to update a custom field's label. Use after listing or retrieving custom fields and confirming the field ID to rename.2 paramsTool to update a custom field's label. Use after listing or retrieving custom fields and confirming the field ID to rename.
idintegerlabelstringKIT_UPDATE_TAGTool to update a tag's name by ID. Use after retrieving tag ID and confirming the new name.2 paramsTool to update a tag's name by ID. Use after retrieving tag ID and confirming the new name.
idintegernamestringThe most complete MCP server for Kit.com (formerly ConvertKit). 13 agent-optimized tools covering 100% of the Kit V4 API — including engagement analytics, bulk operations, and broadcast click tracking that no other Kit MCP offers.
Other Kit MCP servers wrap each API endpoint as a separate tool (29+ tools). That approach breaks in practice:
| @dancumberland/kit-mcp | Other Kit MCPs | |
|---|---|---|
| Tool count | 13 composite tools (45 actions) | 29+ individual tools |
| Engagement analytics | Per-subscriber open/click rates, batch comparison across 100 subscribers, engagement-based filtering | None |
| Broadcast analytics | Per-broadcast stats, cross-broadcast comparison, per-link click tracking | Basic list/get only |
| Bulk operations | Batch create subscribers, tags, form subscriptions (up to 10k per call) | None |
| Response format | Formatted text summaries (agent-friendly) | Raw JSON (agent must parse) |
| Rate limiting | Sliding window with automatic retry + exponential backoff | None |
| Error recovery | Typed errors with actionable recovery hints | Generic errors |
| Cursor compatible | 13 tools (well under 40-tool limit) | 29+ tools (risks hitting limit) |
| Token overhead | ~3,200 tokens for all tool definitions | ~8,000+ tokens |
This is the only Kit MCP that can answer "who are my most engaged subscribers?":
> Find my most engaged 100 subscribers who've been on my list over 6 months
Subscriber Comparison (100 of 100 loaded, sorted by open rate):
1. Alice <alice@example.com> — Open: 82.3% | Click: 24.1% | Sent: 95 | Last open: 2026-03-15 (ID: 456)
2. Bob <bob@example.com> — Open: 71.0% | Click: 18.5% | Sent: 102 | Last open: 2026-03-14 (ID: 789)
...
Other Kit MCPs can list subscribers and get basic profiles, but can't fetch engagement stats, compare across subscribers, or filter by engagement metrics.
Connects any MCP client (Claude Desktop, Claude Code, Cursor, Windsurf, etc.) to your Kit.com email marketing account. Ask questions naturally:
No coding required — just set it up and start talking.
node --version.kit_.Mac:
open ~/Library/Application\ Support/Claude/
Open claude_desktop_config.json in any text editor.
Windows:
%APPDATA%\Claude\claude_desktop_config.json
If the file is empty or doesn't exist, paste this (replace your-kit-api-key with your actual key):
{
"mcpServers": {
"kit": {
"command": "npx",
"args": ["-y", "@dancumberland/kit-mcp@latest"],
"env": {
"KIT_API_KEY": "your-kit-api-key"
}
}
}
}
If you already have other MCP servers, add "kit" inside the existing "mcpServers" block with a comma after the previous entry.
Fully quit (not just close the window) and reopen.
Test my Kit connection
Claude should respond with your account name, auth method, and rate limit.
Cowork is Claude Desktop's background agent. After completing the setup above, Cowork automatically has access to your Kit tools.
Example tasks:
Add to .claude/settings.local.json or ~/.claude/settings.json:
{
"mcpServers": {
"kit": {
"command": "npx",
"args": ["-y", "@dancumberland/kit-mcp@latest"],
"env": {
"KIT_API_KEY": "your-kit-api-key"
}
}
}
}
{
"kit": {
"command": "npx",
"args": ["-y", "@dancumberland/kit-mcp@latest"],
"env": {
"KIT_API_KEY": "your-kit-api-key"
}
}
}
| Tool | Actions | What You Can Do |
|---|---|---|
manage_subscribers | 10 | Find, list, create, update, unsubscribe, view stats, compare engagement across up to 100 subscribers, find top engaged subscribers in one call, filter by status/tags, filter by engagement metrics |
manage_tags | 6 | List, create, update, tag/untag subscribers, list tagged |
manage_broadcasts | 8 | List, get, create drafts, update, delete, view stats, compare stats across broadcasts, analyze per-link click data |
manage_forms | 3 | List forms, list subscribers, add subscriber |
manage_sequences | 3 | List sequences, add subscriber, list subscribers |
manage_custom_fields | 4 | List, create, update, delete |
manage_purchases | 3 | List, get, create (OAuth required) |
manage_segments | 1 | List segments |
manage_webhooks | 3 | List, create, delete |
manage_email_templates | 1 | List templates |
get_account | — | Full account overview with email and growth stats |
test_connection | — | Verify your API key works |
bulk_operations | 7 | Batch subscriber/tag/form/field operations (OAuth required) |
| What You Say | What Happens |
|---|---|
| "How's my email list doing?" | Account stats, subscriber count, growth trends |
| "Find dan@example.com" | Subscriber profile with tags, custom fields, engagement stats |
| "Who are my most engaged subscribers?" | Engagement-filtered list ranked by open/click rates |
| "Show me my recent broadcasts" | Broadcasts with status (draft/scheduled/sent) |
| "How did my last broadcast perform?" | Open rate, click rate, unsubscribes, per-link click data |
| "Which links got the most clicks?" | Per-link click analytics for any broadcast |
| "Compare my broadcast performance" | Side-by-side stats across all broadcasts |
| "Create a tag called vip-customers" | Creates the tag in Kit |
| "Tag dan@example.com with vip-customers" | Applies the tag |
| "Draft a broadcast with subject 'Big News'" | Creates a draft (doesn't send) |
API Key (covers most features): Get at kit.com → Developer. Set as KIT_API_KEY.
OAuth Token (optional, for purchases and bulk operations): Set KIT_OAUTH_TOKEN alongside your API key.
{
"env": {
"KIT_API_KEY": "your-api-key",
"KIT_OAUTH_TOKEN": "your-oauth-token"
}
}
Rate limits enforced automatically: 120 req/min (API key) or 600 req/min (OAuth), with retry + backoff on 429s.
Most MCP servers create one tool per API endpoint. For Kit's API, that means 29+ tools — which causes real problems:
This server uses 13 composite tools with a discriminated action parameter. Same API coverage, 60% fewer tokens, better accuracy. Each tool groups related operations (e.g., all subscriber actions under manage_subscribers) so the AI picks the right tool on the first try.
Errors include recovery hints that Claude can act on:
Error 401: Invalid API key
Recovery: Check your KIT_API_KEY. Find your key at kit.com → Account Settings → Developer.
| Problem | Solution |
|---|---|
| "Cannot find module" or npx errors | Make sure Node.js 22+ is installed: node --version |
| "Invalid API key" | Double-check your key at kit.com → Developer |
| Tools don't appear in Claude | Fully quit and restart Claude Desktop (not just close the window) |
| "requires OAuth authentication" | manage_purchases and bulk_operations need KIT_OAUTH_TOKEN |
| Rate limit errors | Automatic — the server retries with backoff. If persistent, wait 60 seconds |
npm install
npm run dev # Watch mode
npm run build # Production build
npm test # Unit tests (179 tests)
npm run test:int # Integration tests (requires KIT_API_KEY)
npm run lint # Biome check
npm run typecheck # TypeScript check
MIT
KIT_API_KEYYour Kit.com API key (find at kit.com → Account Settings → Developer)
KIT_OAUTH_TOKENOAuth token for bulk operations and purchases (optional)
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent