Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Zernio MCP server

Vendor MCP
Open markdown

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

Tools
54
What they doRead · write · destructive
29 · 0 · 2529 read0 write25 destructive
Users sign in with
OAuth app
Your own Zernio MCP server app

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 Zernio MCP connection

    In AgentKit > Connections, create a Zernio MCP connection and copy its redirect URI. The name you give it is the connection_name your code passes. See Configure connections.

  4. Register an OAuth app

    Zernio MCP server connections use your own OAuth app. Register one with Zernio MCP server and add the redirect URI you copied.

    Then enter the app's Client ID and Client Secret on the Zernio MCP connection.

  5. 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 = 'zerniomcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Zernio 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: 'zerniomcp_account_groups_list_account_groups',
    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
  • zerniomcp_account_groups_list_account_groupsList groups Returns all account groups visible to the authenticated user.Read-only

    List groups

    List groups Returns all account groups visible to the authenticated user. Groups can contain accounts from multiple profiles. For API keys scoped to specific profiles, only groups whose accounts all live in allowed profiles are returned.

    Inputs

    This tool takes no inputs.

  • zerniomcp_accounts_getGet account details for a specific platform.Read-only

    Get account details for a specific platform

    Get account details for a specific platform. Returns username and ID for the first account matching the platform.

    Inputs

    platformstringrequired
    Platform name: twitter, instagram, linkedin, tiktok, bluesky, facebook, youtube, pinterest, threads (required)
  • zerniomcp_accounts_get_account_healthCheck account health Returns detailed health info for a specific account including token status, permissions, and recommendations.Read-only

    Check account health

    Check account health Returns detailed health info for a specific account including token status, permissions, and recommendations. A failing or stalled analytics sync (see `analyticsSync`) raises a healthy account to at least `warning`. ### Facebook, Instagram and Threads The token is also probed live. A probe Meta refuses with a dead-token error sets `tokenStatus.valid` to `false` and names Meta's code, subcode and fbtrace in `issues`. The exception: if an analytics sync succeeded with that token in the last six hours, the token stays `valid` and `issues` reports the probe as inconclusive, since Meta answers a transient 190 to live tokens now and then. Neither verdict disconnects the account. That happens only when a real operation fails, and `account.disconnected` is sent. ### WhatsApp The response also includes `platformConnection`, a live probe of the Meta link behind the channel (the same read as `GET /v1/whatsapp/number-info`). The OAuth token can be perfectly valid while Meta refuses to ...

    Inputs

    account_idstringrequired
    The account ID to check (required)
  • zerniomcp_accounts_get_all_accounts_healthCheck accounts health Returns health status of all connected accounts including token validity, permissions, and issues needing attention.Read-only

    Check accounts health

    Check accounts health Returns health status of all connected accounts including token validity, permissions, and issues needing attention. A failing or stalled analytics sync (see `analyticsSync`) raises a healthy account to at least warning.

    Inputs

    platformstring
    Filter by platformone of facebookinstagramlinkedintwittertiktokyoutubethreadspinterestredditblueskygooglebusinesstelegramsnapchatdiscordslackwhatsappshopifywordpresswixlinkedinadsmetaadspinterestadstiktokadsxadsgoogleadsopenaiadsredditadsmicrosoftadswhopadshubspotwebflowgoogleanalytics
    profile_idstring
    Filter by profile ID
    statusstring
    Filter by health statusone of healthywarningerror
  • zerniomcp_accounts_get_follower_statsGet follower stats Returns follower count history and growth metrics for connected accounts.Read-only

    Get follower stats

    Get follower stats Returns follower count history and growth metrics for connected accounts. Requires analytics add-on subscription. Follower counts are refreshed once per day.

    Inputs

    account_idsstring
    Comma-separated list of account IDs (optional, defaults to all user's accounts)
    cursorstring
    Opaque cursor from a previous response's `pagination.nextCursor`; returns the next page of `limit` accounts (25 when limit is omitted). A cursor we cannot parse returns 400.
    from_datestring
    Start date in YYYY-MM-DD format (defaults to 30 days ago)
    granularitystring
    Data aggregation levelone of dailyweeklymonthlydefault daily
    limitinteger
    Accounts per page, ordered by account id. Send it to page through accounts; the response then carries `pagination.nextCursor`. Without limit or cursor every matching account is returned.
    profile_idstring
    Filter by profile ID
    to_datestring
    End date in YYYY-MM-DD format (defaults to today)
  • zerniomcp_accounts_listList connected social media accounts, one page at a time.Read-only

    List connected social media accounts, one page at a time

    List connected social media accounts, one page at a time. Returns the platform, username, and account ID for each account on the page. Use this to find account IDs needed for creating posts. In a large workspace filter by platform, profile_id or search instead of paging through everything.

    Inputs

    cursorstring
    Cursor returned by the previous page. Keep the same filters Default: .default
    limitinteger
    Page size, up to 500 Default: 100.default 100
    platformstring
    Only accounts on this platform (e.g., 'twitter') Default: .default
    profile_idstring
    Only accounts in this profile Default: .default
    searchstring
    Text matched against account ID, username, display name and platform user ID Default: .default
  • zerniomcp_analytics_get_analyticsGet post analytics Returns analytics for posts.Read-only

    Get post analytics

    Get post analytics Returns analytics for posts. With postId, returns a single post. Without it, returns a paginated list with overview stats. - Accepts both Zernio Post IDs and External Post IDs (auto-resolved). - fromDate defaults to 90 days ago if omitted, max range 366 days. - Single post lookups may return 202 (sync pending) or 424 (all platforms failed). - For follower stats, use /v1/accounts/follower-stats. ### LinkedIn personal accounts Analytics are only available for posts published through Zernio. LinkedIn's API only returns metrics for posts authored by the authenticated user. Organization/company page analytics work for all posts. ### Facebook Page stories Stories on a connected Page, published through Zernio or natively, are collected while they are live and returned like any other post (platformPostUrl points to the story). Metrics for a story published through Zernio are available on its Zernio post ID. Their lifetime metrics refresh about hourly, with a final reading shortly ...

    Inputs

    account_idstring
    Filter by account ID. With a native postId, selects that account's copy of the post.
    from_datestring
    Inclusive lower bound (YYYY-MM-DD). Defaults to 90 days ago if omitted. Max range is 366 days.
    limitinteger
    Page size (default 50)default 50
    orderstring
    Sort orderone of ascdescdefault desc
    pageinteger
    Page number (default 1)default 1
    platformstring
    Filter by platform (default "all")
    post_idstring
    Returns analytics for a single post. Accepts Zernio Post IDs, External Post IDs and the platform's native post ID. Zernio IDs are auto-resolved to External Post analytics.
    profile_idstring
    Filter by profile ID (default "all"). With a native postId, selects that profile's copy of the post.
    sort_bystring
    Sort by date, engagement, or a specific metric. Platform-specific metrics (follows, reposts, reels_skip_rate, ig_reels_*, completion_rate, profile_views, website_clicks) sort a null value as 0.one of dateengagementimpressionsreachlikescommentssharessavesclicksviewsfollowsig_reels_avg_watch_timeig_reels_video_view_total_timerepostsreels_skip_ratecompletion_rateprofile_viewswebsite_clicksdefault date
    sourcestring
    Filter by post source: late (posted via Zernio API), external (synced from platform), all (default)one of alllateexternaldefault all
    tagsstring
    Comma-separated tags (at most 20). Lists only posts created through Zernio that carry every listed tag, matched exactly and case-sensitively. Up to 200 published posts can match within the date range; more returns 400 asking to narrow fromDate and toDate. Ignored when postId is set.
    to_datestring
    Inclusive upper bound (YYYY-MM-DD). Defaults to today if omitted.
  • zerniomcp_analytics_get_best_time_to_postGet best times to post Returns the best times to post based on historical engagement data.Read-only

    Get best times to post

    Get best times to post Returns the best times to post based on historical engagement data. Groups all published posts by day of week and hour (UTC), calculating average engagement per slot. Use this to auto-schedule posts at optimal times.

    Inputs

    account_idstring
    Filter by account ID. Omit for all accounts.
    platformstring
    Filter by platform (e.g. "instagram", "tiktok"). Omit for all platforms.
    profile_idstring
    Filter by profile ID. Omit for all profiles.
    sourcestring
    Filter by post origin. "late" for posts published via Zernio, "external" for posts imported from platforms.one of alllateexternaldefault all