[DEPRECATED — use Kit's official MCP at https://app.kit.com/mcp] MCP server for Kit.com (formerly ConvertKit) email marketing API - manage subscribers, tags, sequences, broadcasts, forms, and more
This server demonstrates solid fundamentals with consistent naming conventions, clear descriptions across all 19 tools, and properly structured Zod schemas. All tools follow verb_noun naming (kit_get_*, kit_list_*, kit_create_*, kit_update_*, kit_delete_*, kit_add_*, kit_remove_*) with action-oriented starts. Descriptions are present and substantive (ranging from 35-194 chars, aligning with production baselines of avg 194 chars). Parameter schemas are well-typed with Zod and include descriptions for all inputs. However, there are notable gaps: (1) No output schema documentation, the code shows formatResponse() converting to JSON but never documents what fields clients should expect from Kit.com API responses; (2) Error handling is generic (try-catch returning error.message) with no recovery guidance or categorization; (3) Pagination support exists (per_page, after params on list tools) but no documentation of pagination strategy or result limits; (4) Security: API key via KIT_API_KEY env var is correct, but no mention of rate limiting, permission gates, or audit trails; (5) No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels being declared in the spec. The kit-client.ts implementation is not visible, so output schemas cannot be fully verified. Parameter descriptions are consistently present and actionable, avoiding vague terms.
Add a subscriber to an email sequence
Add a tag to a subscriber
Create a new subscriber in Kit.com
Create a new tag in Kit.com
Delete a tag from Kit.com
Get information about the Kit.com account
Get a specific broadcast by ID
No output schema documentation. The server returns formatResponse() with JSON stringified data, but LLMs have no documented schema for what fields to expect from Kit.com API responses (e.g., subscriber object structure, pagination cursor format, error field names). This forces LLMs to infer structure from trial-and-error.
Generic error handling with no recovery guidance. All tools use try-catch returning error.message (via formatError), with no categorization as retryable/user-fixable/fatal, no invalid value echoing, and no actionable next steps for the LLM. E.g., 'Subscriber not found' should suggest 'Try kit_list_subscribers to find valid IDs'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 74 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 11 | - | v1 |
Get a specific sequence by ID
Get a specific subscriber by ID
Get all tags for a specific subscriber
Get a specific tag by ID
List all broadcasts (email campaigns) in Kit.com
List all email sequences in Kit.com
List subscribers from Kit.com with optional filters. Returns paginated results.
List all subscribers with a specific tag
List all tags in Kit.com
Remove a tag from a subscriber
Update an existing subscriber
Update an existing tag's name
No tool annotations despite clear risk levels in spec. Tools like kit_delete_tag, kit_remove_tag_from_subscriber are marked DESTRUCTIVE, and kit_create_subscriber, kit_update_subscriber are WRITE operations. The server declaration lists these risks but does not apply readOnlyHint or destructiveHint annotations to the tool definitions. LLMs cannot infer safety without explicit annotations.
Pagination documented as parameters (per_page, after) but no guidance on result limits or pagination strategy. Rubric baseline: A+ tools cap large results (e.g., 20-50 items) and document the limit in the tool description. kit_list_subscribers, kit_list_tags, kit_list_sequences, kit_list_broadcasts should each state 'Returns up to N results per page; use the after cursor to fetch the next batch.'
No confirmation/dry-run pattern for destructive operations. kit_delete_tag and kit_remove_tag_from_subscriber are irreversible. Neither has a dry_run parameter nor a confirmation step. Agents make mistakes, these tools should support a confirm_before_execute pattern to prevent accidental data loss.
kit-client.ts implementation not visible. Parameter descriptions reference optional fields and API behavior (e.g., 'custom field values as key-value pairs' for fields param in kit_create_subscriber) but without seeing the client implementation, output schemas and error handling completeness cannot be verified. This blocks full assessment of response structure and error categorization.
No rate limiting or permission gate declarations. The server injects KIT_API_KEY via environment (correct for secret injection) but offers no rate limiting, no permission scope declarations (e.g., 'read:subscribers', 'write:tags'), and no audit trail hints. Production servers should guard against runaway agents and log who called what.