Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Kit MCP server

Vendor MCP
Open markdown

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.

Tools
81
What they doRead · write · destructive
43 · 28 · 1043 read28 write10 destructive
Users sign in with
OAuth app
Scalekit's or your own

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

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .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.

    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

    quickstart.mts
    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)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • kitmcp_filter_subscribersSearch and filter subscribers by engagement events (opens, clicks, sends, deliveries) or sign-up date.Read-only

    Filter Subscribers

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

    Inputs

    afterstring
    Pagination cursor for the next page. Use `pagination.end_cursor` from a previous response. Distinct from per-filter date ranges in `all[].after`.
    allarray
    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.
    beforestring
    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_countboolean
    If true, include `pagination.total_count` in the response (slower).
    per_pageinteger
    Results per page (1-100).default 10
    session_idstring
    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_fieldstring
    Field to sort by. Defaults to `id` (recommended for stable cursor pagination).one of idfirst_nameemail_addresscreated_atdefault id
    sort_orderstring
    Sort direction (default: desc).one of ascdesc
    user_goalstring
    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_performanceaudit_list_healthfind_subscribersdraft_sequence_emaildraft_broadcast_emailmanage_audiencemanage_publishingoptimize_contentaccount_cleanupautomate_my_newsletterconnect_my_toolsunknown
  • kitmcp_get_broadcastRetrieve a single broadcast record by ID.Read-only

    Get Broadcast

    Retrieve a single broadcast record by ID.

    Inputs

    idintegerrequired
    The broadcast ID
    session_idstring
    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_goalstring
    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_performanceaudit_list_healthfind_subscribersdraft_sequence_emaildraft_broadcast_emailmanage_audiencemanage_publishingoptimize_contentaccount_cleanupautomate_my_newsletterconnect_my_toolsunknown
  • kitmcp_get_creator_profileRetrieve the creator profile linked to the authenticated Kit account.Read-only

    Get Creator Profile

    Retrieve the creator profile linked to the authenticated Kit account.

    Inputs

    session_idstring
    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_goalstring
    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_performanceaudit_list_healthfind_subscribersdraft_sequence_emaildraft_broadcast_emailmanage_audiencemanage_publishingoptimize_contentaccount_cleanupautomate_my_newsletterconnect_my_toolsunknown
  • kitmcp_get_current_account[Account] Get details for the authenticated Kit account.Read-only

    Get current account

    [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.

    Inputs

    session_idstring
    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_goalstring
    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_performanceaudit_list_healthfind_subscribersdraft_sequence_emaildraft_broadcast_emailmanage_audiencemanage_publishingoptimize_contentaccount_cleanupautomate_my_newsletterconnect_my_toolsunknown
  • kitmcp_get_email_statsRetrieve overall email performance statistics for the Kit account.Read-only

    Get Email Stats

    Retrieve overall email performance statistics for the Kit account.

    Inputs

    session_idstring
    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_goalstring
    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_performanceaudit_list_healthfind_subscribersdraft_sequence_emaildraft_broadcast_emailmanage_audiencemanage_publishingoptimize_contentaccount_cleanupautomate_my_newsletterconnect_my_toolsunknown
  • kitmcp_get_email_templateRetrieve a single email template by ID.Read-only

    Get Email Template

    Retrieve a single email template by ID.

    Inputs

    idintegerrequired
    The email template ID (required). Use list_email_templates to find IDs.
    session_idstring
    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_goalstring
    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_performanceaudit_list_healthfind_subscribersdraft_sequence_emaildraft_broadcast_emailmanage_audiencemanage_publishingoptimize_contentaccount_cleanupautomate_my_newsletterconnect_my_toolsunknown
  • kitmcp_get_growth_statsRetrieve subscriber growth statistics for a specified date range.Read-only

    Get Growth Stats

    Retrieve subscriber growth statistics for a specified date range.

    Inputs

    endingstring
    End date (YYYY-MM-DD). Defaults to today.
    session_idstring
    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.
    startingstring
    Start date (YYYY-MM-DD). Defaults to 90 days ago.
    user_goalstring
    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_performanceaudit_list_healthfind_subscribersdraft_sequence_emaildraft_broadcast_emailmanage_audiencemanage_publishingoptimize_contentaccount_cleanupautomate_my_newsletterconnect_my_toolsunknown
  • kitmcp_get_landing_page[Beta] [Landing Pages] Read an existing landing page.Read-only

    Get Landing Page

    [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`.

    Inputs

    idintegerrequired
    The landing page ID
    session_idstring
    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_goalstring
    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_performanceaudit_list_healthfind_subscribersdraft_sequence_emaildraft_broadcast_emailmanage_audiencemanage_publishingoptimize_contentaccount_cleanupautomate_my_newsletterconnect_my_toolsunknown