> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Kit MCP server

The Kit MCP connector routes your AI agent's tool calls to Kit's own MCP server through Scalekit. Each user signs in to Kit once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 81 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** Marketing, Automation
**Tools:** 81: 43 read, 28 write, 10 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=KITMCP)

## What you can do

- **Manage subscribers**: create, update, and unsubscribe subscribers and filter them by opens, clicks, or sign-up date
- **Tag and segment**: create tags, apply or remove them in bulk, and list subscribers by tag, form, or segment
- **Build email sequences**: create sequences, add and edit their emails, and enroll subscribers
- **Draft broadcasts**: create, update, and delete draft broadcasts and review their clicks and performance stats
- **Track growth and sales**: view email and subscriber growth stats, purchases, and Commerce products
- **Create landing pages**: create, read, and update landing pages and reusable content snippets

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Kit MCP connection

   In **AgentKit > Connections**, create a Kit MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for Kit MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'kitmcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Kit MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'kitmcp_filter_subscribers',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "kitmcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Kit MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="kitmcp_filter_subscribers",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'kitmcp_filter_subscribers',
  toolInput: {},
  connector: 'kitmcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="kitmcp_filter_subscribers",
    tool_input={},
    connection_name="kitmcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `kitmcp_filter_subscribers`

Filter Subscribers · Read-only

Search and filter subscribers by engagement events (opens, clicks, sends, deliveries) or sign-up date. Returns paginated results.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Pagination cursor for the next page. Use `pagination.end_cursor` from a previous response. Distinct from per-filter date ranges in `all[].after`.
- `all` (`array`, optional): Array of filter conditions, AND-ed together. Each item filters by one event type (opens, clicks, sent, delivered) or by sign-up date (subscribed). Omit to match all subscribers.
- `before` (`string`, optional): Pagination cursor for the previous page. Use `pagination.start_cursor` from a previous response. Distinct from per-filter date ranges in `all[].before`.
- `include_total_count` (`boolean`, optional): If true, include `pagination.total_count` in the response (slower).
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `sort_field` (`string`, optional): Field to sort by. Defaults to `id` (recommended for stable cursor pagination). One of: `id`, `first_name`, `email_address`, `created_at`. Default: `id`.
- `sort_order` (`string`, optional): Sort direction (default: desc). One of: `asc`, `desc`.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_get_broadcast`

Get Broadcast · Read-only

Retrieve a single broadcast record by ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The broadcast ID
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_get_creator_profile`

Get Creator Profile · Read-only

Retrieve the creator profile linked to the authenticated Kit account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_get_current_account`

Get current account · Read-only

[Account] Get details for the authenticated Kit account.

Returns: top-level `user` (id and email of the authenticated user) and `account` with name, plan_type, primary_email_address, created_at, sending_addresses (each with email_address, from_name, status, is_default, is_verified, is_dmarc_configured), and a structured timezone (name, friendly_name, utc_offset).
Call this only when the user asks about their account details, plan, or profile. It is not a prerequisite for subscriber, broadcast, or other work, so don't call it as a preamble.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_get_email_stats`

Get Email Stats · Read-only

Retrieve overall email performance statistics for the Kit account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_get_email_template`

Get Email Template · Read-only

Retrieve a single email template by ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The email template ID (required). Use list_email_templates to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_get_growth_stats`

Get Growth Stats · Read-only

Retrieve subscriber growth statistics for a specified date range.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `ending` (`string`, optional): End date (YYYY-MM-DD). Defaults to today.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `starting` (`string`, optional): Start date (YYYY-MM-DD). Defaults to 90 days ago.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_get_landing_page`

Get Landing Page · Read-only

[Beta] [Landing Pages] Read an existing landing page. For pages built with the current (v2) editor this returns the page content as Kit-JSON: a `content_tree` in the same format `create_landing_page` accepts, with the page-level `theme` and `built_with_badge` as siblings — use it to inspect a page or as the starting point for a new one.

Check `editor_version` first: "v2" pages include content; "v1" pages (built with the older editor) return metadata only — their content can't be read via the API, so hand the creator the editor link (`confirm_url`) for those.

Reads never lose content silently. `is_clean: true` means `content_tree` fully represents the stored page. When it is false, `warnings` lists exactly what couldn't be expressed in Kit-JSON (e.g. `unknown_block` for a block type this format doesn't cover, `dropped_prop` for styling it can't express). A page re-created from a non-clean read would lose the flagged parts — tell the creator before building on it.

A page with `last_published_at: null` is an unpublished draft; its `public_url` won't load until the creator publishes it.

Returns: `id`, `root_page_id`, `name`, `editor_version`, `created_at`, `public_url`, `last_published_at`; for v2 pages also `content_tree`, `theme` (the full document-level theme), `built_with_badge`, `warnings`, and `is_clean`.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The landing page ID
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_get_landing_page_schema`

Get Landing Page Schema · Read-only

[Beta] [Landing Pages] Return the Kit-JSON schemas for a landing page's `content_tree` and `theme` — the exact shapes create_landing_page and update_landing_page accept. Call this first when building or editing a page, then construct `content_tree` (and optionally `theme`) to match, before calling create/update.

Returns: `content_tree` (a JSON Schema for the array of `section` blocks, with every block definition and its allowed values) and `theme` (a JSON Schema for the page-level typography/color theme). These are reference schemas, not account data — the same for every account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_get_link_clicks_for_a_broadcast`

Get link clicks for a broadcast · Read-only

[Broadcasts] Get click data for a specific broadcast.

Returns: list of clicked URLs and ids with click counts.
Useful for understanding which links in a broadcast perform best.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The broadcast ID
- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_get_post`

Get Post · Read-only

Retrieve a single Kit post (newsletter issue) by ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The post ID
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_get_product`

Get Product · Read-only

[Products] Fetch a single Commerce product by ID.

Returns the `product` in the same shape as list_products entries — `id`, `name`, `currency`, `product_type`, `pricing_type`, `published`, `prices`, `max_quantity`, `tax_product_type`, `tax_code_id`, `file_name`, `edit_url` and the public page `url`.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): ID of the product to fetch (required). Find it with list_products, or use the id returned by create_product / update_product.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_get_purchase`

Get Purchase · Read-only

Retrieve a single purchase record by ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The purchase ID
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_get_sequence`

Get Sequence · Read-only

Retrieve a single sequence record by ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The sequence ID
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_get_sequence_email`

Get Sequence Email · Read-only

Retrieve a single email within a sequence by email ID and sequence ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The email ID (required). Use list_sequence_emails to find IDs.
- `sequence_id` (`integer`, required): The sequence ID (required). Use list_sequences to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1,"sequence_id":1}`

### `kitmcp_get_snippet`

Get Snippet · Read-only

Retrieve a single content snippet by ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The snippet ID (required). Use list_snippets to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_get_stats_for_a_broadcast`

Get stats for a broadcast · Read-only

[Broadcasts] Get performance statistics for a single broadcast by ID. Requires a broadcast ID; use list_broadcasts first to find IDs. For stats across many broadcasts at once, use get_stats_for_a_list_of_broadcasts.

Returns: recipients, open rate, click rate, unsubscribe count, and bounce count.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The broadcast ID
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_get_stats_for_a_list_of_broadcasts`

Get stats for a list of broadcasts · Read-only

[Broadcasts] Performance analytics across many broadcasts at once. Use this when the goal is performance analysis or building a stats leaderboard across multiple sends. This is not the listing tool: to browse or find broadcasts, use list_broadcasts. For the stats of a single broadcast, use get_stats_for_a_broadcast after finding its ID with list_broadcasts.

Returns: paginated array of broadcasts, each with `id`, `subject`, `send_at`, and `stats` (recipients, open rate, click rate, unsubscribes, total clicks, `status`, etc.). Supports cursor pagination, an optional date-range filter on `send_at`, and a `status` filter (each broadcast's `stats.status` is one of `draft | scheduled | sending | completed | aborted`).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `sent_after` (`string`, optional): ISO 8601 date or datetime (e.g. `2026-01-15` or `2026-01-15T10:00:00Z`). Only include broadcasts with `send_at >= sent_after`.
- `sent_before` (`string`, optional): ISO 8601 date or datetime (e.g. `2026-01-15` or `2026-01-15T10:00:00Z`). Only include broadcasts with `send_at < sent_before`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `status` (`string`, optional): Filter to broadcasts in this state. Omit to return all states. One of: `draft`, `scheduled`, `sending`, `completed`, `aborted`.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_get_subscriber`

Get Subscriber · Read-only

Retrieve a single subscriber record by ID, including their custom fields.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The subscriber ID
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_list_broadcasts`

List Broadcasts · Read-only

List all broadcasts with optional status filter and cursor pagination.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `include` (`array`, optional): Extra fields to include per broadcast. `content` adds the full HTML body (can be large — only request when needed).
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `status` (`string`, optional): Filter to broadcasts in this state. Omit to return all states. One of: `draft`, `scheduled`, `sending`, `completed`, `aborted`.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_colors`

List colors · Read-only

[Account] Get the brand color palette for this Kit account.

Returns: array of hex color strings (e.g. ["#FF6900", "#FCB900"]).
Useful for understanding the creator's brand identity.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_custom_fields`

List Custom Fields · Read-only

List all custom subscriber fields in the account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_domains`

List Domains · Read-only

[Domains] List the account's domains.

Returns: `domains` — each with `id`, `domain` (the hostname) and `verified`. Only verified domains can host pages (landing pages, product pages); an unverified domain must finish verification in Kit before it can be used. Accounts typically have one or two domains. An empty list means the account has no domains yet and needs to add one in Kit.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_email_templates`

List Email Templates · Read-only

List all email templates in the account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_forms`

List Forms · Read-only

List all forms in the account with optional status filter.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `status` (`string`, optional): Form status (default: active). One of: `active`, `archived`, `trashed`, `all`.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_landing_pages`

List Landing Pages · Read-only

[Beta] [Landing Pages] List the account's landing pages (both the classic builder and the current v2 editor), newest first.

Returns a slim array — metadata only per page: `id`, `root_page_id`, `name`, `editor_version`, `created_at`, `last_published_at`. No page content and no `public_url` (fetch those per page with get_landing_page), to keep the list fast. `editor_version` tells you which pages are v2 — those are readable and editable here: call get_landing_page for a page's content, then update_landing_page to change it. Classic (v1) pages are listed but can't be read or edited via the API.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_posts`

List Posts · Read-only

List all Kit newsletter posts with optional cursor pagination.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `include_content` (`boolean`, optional): Set to true to include the full HTML body of each post. Omit (or set false) for a slim response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_products`

List Products · Read-only

[Products] List the account's Commerce products — everything the creator sells, including tip jars.

Returns: paginated `products`, each with `id`, `name`, `currency`, `product_type`, `pricing_type`, `published` (whether the product can take purchases — false for every product until the creator connects Stripe, so don't read it as the creator having unpublished anything), `prices` (each plan's `amount` as a string in the major currency unit — for installment plans this is the total split across the plan — plus `interval`/`interval_count` for recurring and installment pricing, `installments` (the number of charges) for installment plans, and `suggested_amount` for pay-what-you-want plans), `max_quantity` (0 = unlimited; only settable for standard pricing), `tax_product_type` and `tax_code_id` (null unless the creator configured tax — resolve the id to a name with list_tax_codes), `file_name` (the attached file for download products, null otherwise; the file's location is never returned), `edit_url` (the product's management page in Kit — share it when the creator wants to customize or configure a product) and `url` (the public storefront page — the link to share with the creator's audience).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `50`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_prompt_suggestions`

List Prompt Suggestions · Read-only

Retrieve suggested prompts to help the user get started with Kit via AI.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_purchases`

List Purchases · Read-only

List all purchase records in the account, paginated.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_segments`

List Segments · Read-only

List all subscriber segments in the account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_sequence_emails`

List Sequence Emails · Read-only

List all emails in a specific sequence.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `sequence_id` (`integer`, required): The sequence ID (required). Use list_sequences to find IDs.
- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `include_content` (`boolean`, optional): Include HTML content in each email (default: false)
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"sequence_id":1}`

### `kitmcp_list_sequences`

List Sequences · Read-only

List all email sequences in the account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_snippets`

List Snippets · Read-only

List all content snippets in the account with optional type and archive filters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `archived` (`boolean`, optional): true to list archived snippets, false (default) for active ones
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `include_content` (`boolean`, optional): Include content and document fields in each snippet (default: false)
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `snippet_type` (`string`, optional): Filter by type: 'inline' or 'block'. One of: `inline`, `block`.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_stats_for_a_subscriber`

List stats for a subscriber · Read-only

[Subscribers] Get engagement statistics for a specific subscriber by ID. Returns (under `subscriber.stats`): `sent`, `opened`, `clicked`, `bounced`, `open_rate`, `click_rate`, `last_sent`, `last_opened`, `last_clicked`, `sends_since_last_open`, `sends_since_last_click`. Use `email_sent_after`/`email_sent_before` (YYYY-MM-DD) to scope to a date range.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The subscriber ID
- `email_sent_after` (`string`, optional): ISO 8601 date (YYYY-MM-DD). Scope stats to emails sent on or after this date. Must be on or after 2024-12-31 (the event floor) or the API returns 400.
- `email_sent_before` (`string`, optional): ISO 8601 date (YYYY-MM-DD). Scope stats to emails sent on or before this date.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_list_subscribers`

List Subscribers · Read-only

List all subscribers with optional status, sort, and cursor pagination.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `include` (`array`, optional): Extra data to include per subscriber. `fields` adds custom field values (omit for slim responses). `canceled_at` requires `status` set to `cancelled` (otherwise the API returns 422).
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `sort_field` (`string`, optional): Sort by `id` (default, recommended for stable cursor pagination), `created_at`, or `updated_at`. One of: `id`, `created_at`, `updated_at`. Default: `id`.
- `sort_order` (`string`, optional): Sort direction: asc or desc. One of: `asc`, `desc`.
- `status` (`string`, optional): Filter by subscriber state. Defaults to active when omitted. Use `all` to include every state. One of: `active`, `cancelled`, `bounced`, `complained`, `inactive`, `all`.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_subscribers_for_form`

List subscribers for a form · Read-only

[Forms] List subscribers who signed up through a specific form.

By default returns a slim response: id, email_address, first_name, state, created_at, added_at — no custom fields. Add `"fields"` to `include` only when you need custom field values.

Use list_forms first to find the form ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The form ID. Use list_forms to find IDs.
- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `include` (`array`, optional): Extra data to include per subscriber. `fields` adds custom field values (omit for slim responses).
- `include_total_count` (`boolean`, optional): If true, include `pagination.total_count` in the response (slower).
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_list_subscribers_for_sequence`

List subscribers for a sequence · Read-only

[Sequences] List subscribers in a specific sequence.

By default returns a slim response: id, email_address, first_name, state, created_at, added_at — no custom fields. Add `"fields"` to `include` only when you need custom field values.

Use list_sequences first to find the sequence ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The sequence ID
- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `include` (`array`, optional): Extra data to include per subscriber. `fields` adds custom field values (omit for slim responses).
- `include_total_count` (`boolean`, optional): If true, include `pagination.total_count` in the response (slower).
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_list_subscribers_for_tag`

List subscribers for a tag · Read-only

[Tags] List all subscribers who have a specific tag.

By default returns a slim response: id, email_address, first_name, state, created_at, tagged_at — no custom fields. Add `"fields"` to `include` only when you need custom field values.

Use list_tags first to find the tag ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The tag ID. Use list_tags to find IDs.
- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `include` (`array`, optional): Extra data to include per subscriber. `fields` adds custom field values (omit for slim responses).
- `include_total_count` (`boolean`, optional): If true, include `pagination.total_count` in the response (slower).
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_list_tags`

List Tags · Read-only

List all tags in the account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_tags_for_a_subscriber`

List tags for a subscriber · Read-only

[Subscribers] List all tags applied to a specific subscriber.

Returns: array of tags with IDs and names.
Useful for understanding how a subscriber is categorized.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The subscriber ID
- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_list_tax_codes`

List Tax Codes · Read-only

[Products] List the Kit tax codes used to classify a product's tax category, i.e. to choose a product's `tax_code_id` when creating or updating a product.

Returns: `tax_collection_enabled` — whether this account collects tax (VAT, GST, or US sales tax) — and `tax_codes`, each with `id`, `name`, and `description`. When `tax_collection_enabled` is false the account doesn't collect tax, `tax_codes` is empty, and products don't need a `tax_code_id`. When true, match the product to a code by its `name`/`description` and pass that code's `id`.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_list_webhooks`

List Webhooks · Read-only

List all registered webhooks in the account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`string`, optional): Cursor for next page. Use `pagination.end_cursor` from a previous response.
- `before` (`string`, optional): Cursor for previous page. Use `pagination.start_cursor` from a previous response.
- `per_page` (`integer`, optional): Results per page (1-100). Default: `10`.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{}`

### `kitmcp_add_subscriber_to_form`

Add Subscriber To Form · Write

Subscribe a single email address to a Kit form. Creates the subscriber if they do not exist; returns the subscriber record.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `email_address` (`string`, required): Subscriber's email address (required)
- `form_id` (`integer`, required): The form ID (required). Use list_forms to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"email_address":"<email_address>","form_id":1}`

### `kitmcp_add_subscriber_to_sequence`

Add Subscriber To Sequence · Write

Enroll a single subscriber (by email) into a Kit email sequence. Use list_sequences to find the sequence ID.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `email_address` (`string`, required): Subscriber's email address (required)
- `sequence_id` (`integer`, required): The sequence ID (required). Use list_sequences to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"email_address":"<email_address>","sequence_id":1}`

### `kitmcp_bulk_add_subscribers_to_form`

Bulk Add Subscribers To Form · Write

[STALE — upstream renamed 'bulk_add_subscribers_to_form' to 'bulk_add_subscribers_to_forms'; kept for compatibility, no longer exposed by upstream MCP server] Subscribe multiple existing subscribers to one or more forms in a single request. Batches over 100 are processed asynchronously.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `additions` (`array`, required): Form subscriptions to create (required). Each item must include `form_id` and `subscriber_id`.
- `callback_url` (`string`, optional): URL to POST results to when the batch is processed asynchronously (batches > 100).
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"additions":[]}`

### `kitmcp_bulk_create_custom_fields`

Bulk Create Custom Fields · Write

Create multiple custom subscriber fields in one request. Use list_custom_fields to view existing fields.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `custom_fields` (`array`, required): Custom field definitions to create (required). Each item must include `label`.
- `callback_url` (`string`, optional): URL to POST results to when the batch is processed asynchronously (batches > 100).
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"custom_fields":[]}`

### `kitmcp_bulk_create_subscribers`

Bulk Create Subscribers · Write

Create or update multiple subscribers in one request. Batches over 100 are processed asynchronously.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `subscribers` (`array`, required): Subscribers to upsert (required). Each item must include `email_address`; `first_name` and `state` are optional.
- `callback_url` (`string`, optional): URL to POST results to when the batch is processed asynchronously (batches > 100).
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"subscribers":[]}`

### `kitmcp_bulk_create_tags`

Bulk Create Tags · Write

Create multiple tags in one request. Returns created tag records.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `tags` (`array`, required): Tags to create (required). Each item must include `name`.
- `callback_url` (`string`, optional): URL to POST results to when the batch is processed asynchronously (batches > 100).
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"tags":[]}`

### `kitmcp_bulk_tag_subscribers`

Bulk Tag Subscribers · Write

Apply a tag to multiple subscribers in one request. Batches over 100 are processed asynchronously.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `taggings` (`array`, required): Tag-subscriber pairs to apply (required). Each item must include `tag_id` (integer) and `subscriber_id` (integer).
- `callback_url` (`string`, optional): URL to POST results to when the batch is processed asynchronously (batches > 100).
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"taggings":[]}`

### `kitmcp_bulk_update_subscriber_custom_field_values`

Bulk Update Subscriber Custom Field Values · Write

Update custom field values for multiple subscribers in one request.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `custom_field_values` (`array`, required): Custom field updates to apply (required). Each item must include `subscriber_id`, `subscriber_custom_field_id`, and `value`.
- `callback_url` (`string`, optional): URL to POST results to when the batch is processed asynchronously (batches > 100).
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"custom_field_values":[]}`

### `kitmcp_create_broadcast`

Create Broadcast · Write

Create a draft email broadcast in Kit. The broadcast is saved as a draft; scheduling and sending happen from the Kit UI.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `content` (`string`, required): Email body content in HTML (required)
- `subject` (`string`, required): Email subject line (required)
- `allow_starting_point` (`boolean`, optional): Set to true when posting adapted content from a Starting-point template (in combination with `email_template_id` set to that template's id and `content` set to the adapted body). Required only for the Starting-point + content combination; omit otherwise.
- `description` (`string`, optional): Internal description for organizing broadcasts
- `email_template_id` (`integer`, optional): Email template ID. Use list_email_templates to find IDs.
- `preview_text` (`string`, optional): Preview text shown in email clients
- `public` (`boolean`, optional): Whether to publish on the creator's profile page
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `subscriber_filter` (`array`, optional): Target audience filter. A single-element array wrapping one filter group (all/any/none). Example: [{ "all": [{ "type": "tag", "ids": [1, 2] }] }]. Only one filter group (all, any, or none) may be populated per request. Filter types allowed: 'tag' or 'segment'. Omit to target all subscribers.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"content":"<content>","subject":"<subject>"}`

### `kitmcp_create_custom_field`

Create Custom Field · Write

Create a new custom subscriber field. Returns the created field record with its key.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `label` (`string`, required): Field label (required), e.g. 'Company' or 'Website'
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"label":"Company"}`

### `kitmcp_create_landing_page`

Create Landing Page · Write

[Beta] [Landing Pages] Create a landing page from a Kit-JSON content tree. This is an early release that intentionally supports creation only — there is no update or read-back path yet, and the set of supported blocks will grow over time. The page is created as an unpublished draft; after it returns, point the creator at Kit's editor to review, tweak, and publish.

Build `content_tree` as an array of `section` blocks. A section contains either rows (a row holds 1-4 columns) or text blocks (heading/paragraph) directly. Text is an array of leaves with optional inline marks (bold/italic/underline/strikethrough/color/highlight). Colors are 6-digit hex (#RRGGBB). Omit attributes to accept the editor's defaults. Call `get_landing_page_schema` for the exact block shapes and allowed values, then build `content_tree` to match.

Optionally set `theme` to control the page's default typography and colors per element type (headings, paragraph, links, buttons, etc.). It's a sibling to `content_tree`; send only the keys you want to change — anything omitted falls back to the default theme.

If a subscribe form collects a custom field or applies tags, resolve the real ids first: call `list_custom_fields` / `list_tags`, then pass the resolved custom-field `key` and Tag `id`s into the form's fields. These reference existing account data — never invent a key or id.

Optionally set `built_with_badge` (also a sibling) to control the "Built with Kit" branding badge; hiding it requires a paid plan.

Returns: the landing page (`id`, `name`, `public_url`). The page is an unpublished draft, so `public_url` won't load until the creator publishes it — don't share it as a working link; point them to the editor to review and publish.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `content_tree` (`array`, required): The page content as a Kit-JSON content tree: an array of `section` blocks. Call get_landing_page_schema for the full block schema and allowed values, then build this to match. It's validated on submit — an invalid tree returns a 422 explaining what's wrong.
- `name` (`string`, required): Internal name for the landing page (required).
- `built_with_badge` (`object`, optional): Control over the "Built with Kit" branding badge that renders at the bottom of the page. A sibling to content_tree/theme. Hiding it (show: false) requires a paid plan; on accounts without that entitlement the badge stays visible regardless of this setting.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `theme` (`object`, optional): Optional page-level theme: default typography and colors per element type (headings, paragraph, links, buttons, etc.). See get_landing_page_schema for the exact shape; send only the keys you want to change.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"content_tree":[],"name":"<name>"}`

### `kitmcp_create_product`

Create Product · Write

[Products] Create a Commerce product the creator can sell — a digital download, an external URL, a paid newsletter, or a tip jar.

Prerequisites: the account needs a verified domain for the product page (its default verified domain is used unless `domain_id` says otherwise; creating fails with a clear error if there is none). Stripe doesn't need to be connected to create the product, but the creator must connect it in Kit before the product can take payments — mention that if they haven't. Coupons and upsells aren't available here; the creator adds those in Kit.

See `pricing` for the supported pricing models and each one's plan shape. Amounts are strings in the major currency unit (e.g. "5.00").

Before calling: prices and the billing model must come from the creator — ask, don't assume. Derive `path` from the product name and tell the creator the resulting public URL.

Returns: the created product in the same shape as list_products entries — `id`, `name`, `currency`, `product_type`, `pricing_type`, `published`, `prices`, `max_quantity`, `tax_product_type`, `tax_code_id`, `file_name`, `edit_url` and the public page `url`.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Product name (required).
- `path` (`string`, required): URL slug for the product's checkout/landing page, e.g. 'my-ebook' (required). Must be unique within the domain.
- `pricing` (`object`, required): Pricing for the product (required). An object with `pricing_type` and `plans`.

- 'standard': a single plan with an `amount`.
- 'recurring' (a subscription): each plan needs `amount`, `interval` (always "month"), and `interval_count`; set the frequency via `interval_count` (1 = monthly, 3 = quarterly, 12 = yearly) and pass multiple plans to offer several.
- 'tipjar': a single plan whose `amount` is the suggested tip (minimum "1.00"); use with product_type 'tipjar'.
- 'pay_what_you_want': a single plan whose `amount` is the minimum the buyer must pay ("0.00" for no minimum, otherwise at least "1.00"); add an optional `suggested_amount` for the pre-filled default.
- 'installments': a single plan whose `amount` is the total, split into `installments` equal charges (2 or more) billed monthly (`interval` "month", `interval_count` 1); each charge (amount / installments) must be at least "1.00".
- `product_type` (`string`, required): Fulfillment type (required). One of: 'download' (a hosted file — requires file_url and file_name), 'url' (an external URL — requires fulfillment_url), 'newsletter' (a paid newsletter subscription — no file or URL needed), 'something_else' (no specific fulfillment), 'tipjar' (a tip jar — use together with pricing_type 'tipjar'). One of: `download`, `url`, `newsletter`, `something_else`, `tipjar`.
- `currency` (`string`, optional): ISO currency code for the product, e.g. 'USD'. Defaults to USD. Default: `USD`.
- `domain_id` (`integer`, optional): ID of the verified domain that hosts the product page. Omit to use the account's default verified domain; pass one only to choose a specific domain — find the options with list_domains.
- `file_name` (`string`, optional): Display name of the delivered file. Required when product_type is 'download'.
- `file_url` (`string`, optional): URL of the hosted file to deliver. Required when product_type is 'download'.
- `fulfillment_url` (`string`, optional): External URL the buyer is sent to after purchase. Required when product_type is 'url'.
- `max_quantity` (`integer`, optional): Optional maximum quantity a buyer can purchase in one order. Only settable for standard pricing; must stay 1 for every other pricing type. 0 = unlimited.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `tax_code_id` (`integer`, optional): ID of the Kit tax code classifying this product for tax rates. Required (together with tax_product_type) only when the account has tax/VAT collection enabled. Use list_tax_codes to look up the available codes and pass the matching code's `id`.
- `tax_product_type` (`string`, optional): Tax classification of the product: 'good' or 'service'. Required (together with tax_code_id) only when the account has tax/VAT collection enabled — creation fails with a tax-configuration error otherwise. Leave out for accounts not collecting tax. One of: `good`, `service`.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"name":"<name>","path":"my-ebook","pricing":{},"product_type":"download"}`

### `kitmcp_create_sequence`

Create Sequence · Write

Create a new email sequence. Returns the sequence record including its ID.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Sequence name (required)
- `email_address` (`string`, optional): From email address to use for this sequence
- `email_template_id` (`integer`, optional): Email template ID. Use list_email_templates to find IDs.
- `repeat` (`boolean`, optional): Whether the sequence repeats for subscribers
- `send_days` (`array`, optional): Days to send on (e.g. ['monday', 'wednesday', 'friday'])
- `send_hour` (`integer`, optional): Hour of day to send (0-23)
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `time_zone` (`string`, optional): Timezone for send scheduling (e.g. 'America/New_York')
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"name":"<name>"}`

### `kitmcp_create_sequence_email`

Create Sequence Email · Write

Add a new email to an existing sequence at a specified position and delay.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `delay_unit` (`string`, required): 'days' or 'hours' (required). One of: `days`, `hours`.
- `delay_value` (`integer`, required): Number of days or hours to wait before sending this email (required). Unit is controlled by delay_unit.
- `sequence_id` (`integer`, required): The sequence ID (required). Use list_sequences to find IDs.
- `subject` (`string`, required): Email subject line (required)
- `content` (`string`, optional): Email body content in HTML
- `email_template_id` (`integer`, optional): Layout template ID. Use list_email_templates to find IDs.
- `position` (`integer`, optional): 0-based position in the sequence. Defaults to the end.
- `preview_text` (`string`, optional): Preview text shown in email clients
- `published` (`boolean`, optional): Publish the email immediately (default: false)
- `send_days` (`array`, optional): Days of the week this email may send. Omit or pass null to allow all days (inherits the sequence schedule).
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"delay_unit":"days","delay_value":1,"sequence_id":1,"subject":"<subject>"}`

### `kitmcp_create_snippet`

Create Snippet · Write

Create a reusable content snippet (inline or block) for use in broadcasts and sequences.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Snippet name (required). Used to auto-generate the key.
- `snippet_type` (`string`, required): 'inline' or 'block' (required). Cannot be changed after creation. One of: `inline`, `block`.
- `content` (`string`, optional): Text/Liquid content for inline snippets (required when snippet_type is 'inline')
- `document_attributes` (`object`, optional): Rich HTML content for block snippets (required when snippet_type is 'block')
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"name":"<name>","snippet_type":"inline"}`

### `kitmcp_create_subscriber`

Create Subscriber · Write

Create or update a single subscriber by email address (upsert). Returns the subscriber record.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `email_address` (`string`, required): Subscriber's email address (required)
- `fields` (`object`, optional): Custom field values as key-value pairs
- `first_name` (`string`, optional): Subscriber's first name
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `state` (`string`, optional): Subscriber state (default: active). One of: `active`, `cancelled`, `bounced`, `complained`, `inactive`.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"email_address":"<email_address>"}`

### `kitmcp_create_tag`

Create Tag · Write

Create a new tag. Returns the tag record with its ID.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `name` (`string`, required): Tag name (required)
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"name":"<name>"}`

### `kitmcp_create_webhook`

Create Webhook · Write

Register a webhook endpoint to receive Kit events. Returns the created webhook record.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `event` (`object`, required): Event configuration (required). Must include 'name' and optional filter IDs.
- `target_url` (`string`, required): URL to receive webhook POST requests (required)
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"event":{},"target_url":"<target_url>"}`

### `kitmcp_tag_subscriber`

Tag Subscriber · Write

Apply a tag to a subscriber identified by email address.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `email_address` (`string`, required): Subscriber's email address (required)
- `tag_id` (`integer`, required): The tag ID (required). Use list_tags to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"email_address":"<email_address>","tag_id":1}`

### `kitmcp_update_broadcast`

Update Broadcast · Write

Update a draft broadcast's subject, content, or audience filter.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `broadcast_id` (`integer`, required): The broadcast ID (required). Use list_broadcasts to find IDs.
- `content` (`string`, optional): Email body content in HTML
- `description` (`string`, optional): Internal description
- `email_template_id` (`integer`, optional): Email template ID
- `preview_text` (`string`, optional): Preview text shown in email clients
- `public` (`boolean`, optional): Whether to publish on the creator's profile page
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `subject` (`string`, optional): Email subject line
- `subscriber_filter` (`array`, optional): Target audience filter. A single-element array wrapping one filter group (all/any/none). Example: [{ "all": [{ "type": "tag", "ids": [1, 2] }] }]. Only one filter group (all, any, or none) may be populated per request. Filter types allowed: 'tag' or 'segment'. Omit to leave current filter unchanged.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"broadcast_id":1}`

### `kitmcp_update_colors`

Update colors · Write

[Account] Replace the brand color palette for this Kit account.

Accepts up to 10 hex color codes (e.g. ["#FF6900", "#FCB900"]).
Overwrites the existing palette entirely, so include every color you want to keep.
Use list_colors first to fetch the current palette before editing.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `colors` (`array`, required): Array of up to 10 hex color codes (e.g. ["#FF6900", "#FCB900"]). Replaces the existing palette entirely.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"colors":[]}`

### `kitmcp_update_custom_field`

Update Custom Field · Write

Rename a custom subscriber field by ID.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `custom_field_id` (`integer`, required): The custom field ID (required). Use list_custom_fields to find IDs.
- `label` (`string`, required): New field label (required)
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"custom_field_id":1,"label":"Company"}`

### `kitmcp_update_product`

Update Product · Write

[Products] Update a Commerce product. Only the fields you pass change — everything else keeps its current value, so to rename a product just send `name`. Omit any field you don't want to change.

Fixed at creation and not updatable here: the pricing model (one-time vs subscription vs tip jar), the currency, and the fulfillment type (download vs URL vs newsletter) — for those, share the product's `edit_url` so the creator can change them in Kit. When you pass `pricing`, its `plans` replace the product's plans wholesale, so include every plan the product should end up with.

Monetary amounts are strings in the major currency unit (e.g. "5.00" for $5.00).

Before calling: price changes must come from the creator — never assume amounts. Changing `path` or `domain_id` changes the product's public URL; mention the new URL.

Returns: the updated product in the same shape as list_products entries — `id`, `name`, `currency`, `product_type`, `pricing_type`, `published`, `prices`, `max_quantity`, `tax_product_type`, `tax_code_id`, `file_name`, `edit_url` and the public page `url`.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): ID of the product to update (required). Find it with list_products.
- `domain_id` (`integer`, optional): ID of the verified domain that hosts the product page. Pass it to move the page to another of the account's verified domains — find the options with list_domains.
- `file_name` (`string`, optional): New display name of the delivered file. Only applies to 'download' products.
- `file_url` (`string`, optional): New URL of the hosted file to deliver. Only applies to 'download' products.
- `fulfillment_url` (`string`, optional): New URL the buyer is sent to after purchase. Only applies to 'url' products.
- `max_quantity` (`integer`, optional): New maximum quantity a buyer can purchase in one order. Only settable for standard pricing; must stay 1 for every other pricing type. 0 = unlimited.
- `name` (`string`, optional): New product name.
- `path` (`string`, optional): New URL slug for the product's checkout/landing page, e.g. 'my-ebook'. Must be unique within the domain.
- `pricing` (`object`, optional): Replacement plans — they replace all current plans, and the pricing model can't change, so match the product's existing type.

- 'standard': a single plan with an `amount`.
- 'recurring' (a subscription): each plan needs `amount`, `interval` (always "month"), and `interval_count`; set the frequency via `interval_count` (1 = monthly, 3 = quarterly, 12 = yearly) and pass multiple plans for several.
- 'tipjar': a single plan whose `amount` is the suggested tip.
- 'pay_what_you_want': a single plan whose `amount` is the minimum ("0.00" for no minimum, otherwise at least "1.00"); add an optional `suggested_amount` for the pre-filled default.
- 'installments': a single plan whose `amount` is the total, split into `installments` equal charges (2 or more) billed monthly (`interval` "month", `interval_count` 1); each charge (amount / installments) must be at least "1.00".
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `tax_code_id` (`integer`, optional): ID of the Kit tax code classifying this product for tax rates. Only relevant when the account has tax/VAT collection enabled. Use list_tax_codes to look up the available codes and pass the matching code's `id`.
- `tax_product_type` (`string`, optional): Tax classification of the product: 'good' or 'service'. Only relevant when the account has tax/VAT collection enabled. One of: `good`, `service`.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_update_sequence`

Update Sequence · Write

Update sequence settings such as name, send days, or active state.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The sequence ID (required). Use list_sequences to find IDs.
- `active` (`boolean`, optional): Whether the sequence is active
- `email_address` (`string`, optional): From email address
- `email_template_id` (`integer`, optional): Email template ID
- `hold` (`boolean`, optional): Whether the sequence is on hold
- `name` (`string`, optional): New sequence name
- `repeat` (`boolean`, optional): Whether the sequence repeats
- `send_days` (`array`, optional): Days to send on
- `send_hour` (`integer`, optional): Hour of day to send (0-23)
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `time_zone` (`string`, optional): Timezone for send scheduling
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_update_sequence_email`

Update Sequence Email · Write

Update an existing sequence email's subject, content, delay, or position.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The email ID (required). Use list_sequence_emails to find IDs.
- `sequence_id` (`integer`, required): The sequence ID (required). Use list_sequences to find IDs.
- `content` (`string`, optional): Email body content in HTML
- `delay_unit` (`string`, optional): 'days' or 'hours'. One of: `days`, `hours`.
- `delay_value` (`integer`, optional): Number of days or hours to wait before sending this email. Unit is controlled by delay_unit.
- `email_template_id` (`integer`, optional): Layout template ID. Use list_email_templates to find IDs.
- `position` (`integer`, optional): 0-based position in the sequence
- `preview_text` (`string`, optional): Preview text shown in email clients
- `published` (`boolean`, optional): Publish or unpublish the email
- `send_days` (`array`, optional): Days of the week this email may send. To reset to the full weekly schedule, pass all 7 values explicitly.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `subject` (`string`, optional): Email subject line
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1,"sequence_id":1}`

### `kitmcp_update_snippet`

Update Snippet · Write

Update a content snippet's name, content, or archived state.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The snippet ID (required). Use list_snippets to find IDs.
- `archived` (`boolean`, optional): true to archive, false to restore
- `content` (`string`, optional): New text/Liquid content (inline snippets only)
- `document_attributes` (`object`, optional): New HTML content (block snippets only)
- `name` (`string`, optional): New snippet name
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_update_subscriber`

Update Subscriber · Write

Update a subscriber's email, name, or custom field values by subscriber ID.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `subscriber_id` (`integer`, required): The subscriber ID (required). Use list_subscribers or filter_subscribers to find IDs.
- `email_address` (`string`, optional): New email address
- `fields` (`object`, optional): Custom field values to update as key-value pairs
- `first_name` (`string`, optional): New first name
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"subscriber_id":1}`

### `kitmcp_update_tag_name`

Update tag name · Write

[Tags] Rename an existing tag.

Use list_tags to find the tag ID. Returns: the updated tag record.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `name` (`string`, required): New tag name (required)
- `tag_id` (`integer`, required): The tag ID (required). Use list_tags to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"name":"<name>","tag_id":1}`

### `kitmcp_bulk_delete_tags`

Bulk Delete Tags · Destructive

[Tags] Delete multiple tags in a single call by ID. Use this to clean up a tag taxonomy or remove tags in bulk.

Each entry in `tags` requires an `id`. Deleting a tag removes it from all subscribers (soft delete). Partial failures are reported per-entry; the batch does not fail because one entry errors (e.g. a tag id that no longer exists).

Batches of 100 or fewer are processed synchronously (200). Larger batches are queued asynchronously (202) — supply `callback_url` to receive results when processing completes.

Use list_tags to find tag IDs.
Returns: `failures` (one entry per id that could not be deleted, with error details; an empty array means all deletions succeeded).

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `tags` (`array`, required): Tags to delete (required). Each item must include `id`.
- `callback_url` (`string`, optional): URL to POST results to when the batch is processed asynchronously (batches > 100).
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"tags":[]}`

### `kitmcp_bulk_remove_tags_from_subscribers`

Bulk remove tags from subscribers · Destructive

[Tags] Remove a tag from multiple subscribers in a single call. Prefer this over repeated remove_tag_from_subscriber calls when untagging more than a handful of subscribers.

Each entry in `taggings` requires a `tag_id` and `subscriber_id`. Partial failures are reported per-subscriber; the batch does not fail because one entry errors.

Batches of 100 or fewer are processed synchronously (200). Larger batches are queued asynchronously (202) — supply `callback_url` to receive results when processing completes.

Use list_tags to find tag IDs and list_subscribers or filter_subscribers to find subscriber IDs.
Returns: `failures` (with error details per entry; empty array means all removals succeeded).

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `taggings` (`array`, required): Tag-subscriber pairs to remove (required). Each item must include `tag_id` (integer) and `subscriber_id` (integer).
- `callback_url` (`string`, optional): URL to POST results to when the batch is processed asynchronously (batches > 100).
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"taggings":[]}`

### `kitmcp_delete_broadcast`

Delete Broadcast · Destructive

Delete a draft broadcast by ID. Only draft broadcasts can be deleted.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `broadcast_id` (`integer`, required): The broadcast ID to delete (required). Use list_broadcasts to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"broadcast_id":1}`

### `kitmcp_delete_custom_field`

Delete Custom Field · Destructive

Delete a custom subscriber field by ID.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `custom_field_id` (`integer`, required): The custom field ID to delete (required). Use list_custom_fields to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"custom_field_id":1}`

### `kitmcp_delete_sequence`

Delete Sequence · Destructive

Delete a sequence and all its emails by ID.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The sequence ID to delete (required). Use list_sequences to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1}`

### `kitmcp_delete_sequence_email`

Delete Sequence Email · Destructive

Delete a single email from a sequence by email ID and sequence ID.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): The email ID to delete (required). Use list_sequence_emails to find IDs.
- `sequence_id` (`integer`, required): The sequence ID (required). Use list_sequences to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"id":1,"sequence_id":1}`

### `kitmcp_delete_webhook`

Delete Webhook · Destructive

Delete a registered webhook by ID.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `webhook_id` (`integer`, required): The webhook ID to delete (required). Use list_webhooks to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"webhook_id":1}`

### `kitmcp_remove_tag_from_subscriber`

Remove tag from subscriber · Destructive

[Tags] Remove a tag from a subscriber. For removing a tag from more than one subscriber at once, use bulk_remove_tags_from_subscribers instead.

Use list_tags to find tag IDs, and list_subscribers_for_tag or get_subscriber to find subscriber IDs.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `subscriber_id` (`integer`, required): The subscriber ID (required)
- `tag_id` (`integer`, required): The tag ID (required). Use list_tags to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"subscriber_id":1,"tag_id":1}`

### `kitmcp_unsubscribe`

Unsubscribe · Destructive

Cancel a subscriber's subscription by subscriber ID.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `subscriber_id` (`integer`, required): The subscriber ID (required). Use list_subscribers or get_subscriber to find IDs.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"subscriber_id":1}`

### `kitmcp_update_landing_page`

Update Landing Page · Destructive

[Beta] [Landing Pages] Replace the content of an existing landing page. Only pages built with the current (v2) editor can be updated — check `editor_version` from get_landing_page first; v1 pages can't be edited via the API.

The page's content becomes exactly the `content_tree` you send (a full replace, not a merge). `theme` and `built_with_badge` are gentler: omitted keys keep the page's current values, so only send what you want to change. The intended workflow is read-edit-write: call get_landing_page, edit the returned `content_tree`, then call this tool.

If the stored page contains content that can't be expressed as Kit-JSON (get_landing_page returned `is_clean: false`), a full replace would permanently lose the flagged parts, so the update is rejected with a conflict listing the warnings. Show the creator what would be lost, and only retry with `allow_content_loss: true` after they explicitly accept it. Never set it pre-emptively.

Updating never publishes: a published page keeps serving its previous version until the creator republishes from the editor, and a draft stays a draft. Share the `confirm_url` so they can review and publish. If the creator has this page open in Kit's editor, tell them to reload it after the update — the editor doesn't pick up API changes on its own, and saving from a stale tab would overwrite them.

Same content rules as create_landing_page: build `content_tree` as an array of `section` blocks, omit attributes to accept the editor's defaults, and resolve real tag ids / custom-field keys via list_tags / list_custom_fields — never invent them.

Returns the updated page's metadata. To confirm the stored result, call get_landing_page again.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `content_tree` (`array`, required): The page content as a Kit-JSON content tree: an array of `section` blocks. Call get_landing_page_schema for the full block schema and allowed values, then build this to match. It's validated on submit — an invalid tree returns a 422 explaining what's wrong.
- `id` (`integer`, required): The landing page ID
- `allow_content_loss` (`boolean`, optional): Confirm replacing a page whose stored content can't be fully expressed as Kit-JSON, permanently discarding the parts listed in the conflict warnings. Only set true after the creator has seen what would be lost and explicitly accepted it.
- `built_with_badge` (`object`, optional): Control over the "Built with Kit" branding badge that renders at the bottom of the page. A sibling to content_tree/theme; omitted keys keep the page's current badge settings. Hiding it (show: false) requires a paid plan.
- `name` (`string`, optional): New internal name for the landing page. Omit to keep the current name.
- `session_id` (`string`, optional): UUID v4 identifier for grouping tool calls in the same conversation. Generate once at the start of the session and reuse it on every call.
- `theme` (`object`, optional): Optional page-level theme: default typography and colors per element type (headings, paragraph, links, buttons, etc.). See get_landing_page_schema for the exact shape; send only the keys you want to change.
- `user_goal` (`string`, optional): What the creator is trying to accomplish with this tool call. Pick the closest match; use 'unknown' only when no category fits. One of: `analyze_performance`, `audit_list_health`, `find_subscribers`, `draft_sequence_email`, `draft_broadcast_email`, `manage_audience`, `manage_publishing`, `optimize_content`, `account_cleanup`, `automate_my_newsletter`, `connect_my_tools`, `unknown`.

Example input: `{"content_tree":[],"id":1}`

## Related

Other Marketing connectors ([all 59](/agentkit/connectors/?category=marketing)):

- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Mailchimp](/agentkit/connectors/mailchimp/): Scalekit connector, OAuth, 73 tools
- [Twitter / X](/agentkit/connectors/twitteroauth/): Scalekit connector, OAuth, 92 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
