Zernio
Zernio
OverviewMCPSetupToolsDocumentation MCP
Dashboard
llms.txtOpenAPI
OverviewPlatformsAPI ReferenceResources
MCP

Tools

The parameters of the 20 core Zernio MCP tools, the tools/list call that returns the catalog your client sees, and the browser upload flow for media.


The MCP server exposes 20 core tools for the common flows plus one generated tool per API endpoint. Connect a client on the setup page, then call tools/list for the catalog your client sees.

First call

tools/list returns the tools the server offers a client, each with its JSON Schema. It needs no credential:

curl https://mcp.zernio.com/mcp \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc": "2.0", "method": "tools/list", "id": 1}'

The reply is one server-sent event whose data: line carries the JSON-RPC result. Response (200), trimmed to one tool:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "media_check_upload_status",
        "title": "Check upload status and get file URLs",
        "description": "Check the status of an upload token and get uploaded file URLs.",
        "inputSchema": {
          "type": "object",
          "properties": {
            "token": {
              "type": "string",
              "description": "The upload token from media_generate_upload_link (required)"
            }
          },
          "required": ["token"],
          "additionalProperties": false
        },
        "annotations": {
          "readOnlyHint": true,
          "destructiveHint": false,
          "openWorldHint": false
        }
      }
    ]
  }
}

That list is the core tools plus the everyday endpoints. Every other tool stays callable through search_tools and call_tool, described under how it behaves.

Core tools

The 20 hand-written tools take arguments shaped for an assistant (a platform name, minutes from now) and resolve the account for you:

ToolDescription
accounts_listShow all connected accounts
accounts_getGet account details for a specific platform
profiles_list / get / create / update / deleteManage profiles
posts_list / get / create / update / deleteManage posts
posts_publish_nowPublish a post immediately
posts_cross_postPost to multiple platforms at once
posts_retry / posts_list_failed / posts_retry_all_failedHandle failed posts
media_generate_upload_linkGet a link to upload media files
media_check_upload_statusCheck if media upload is complete
docs_searchSearch the Zernio API documentation

Every write tool below refuses an ambiguous account instead of picking one; see how it behaves.

posts_create

Creates a post as a draft, scheduled, or published now. The two booleans pick the mode:

is_draftpublish_nowResult
trueanySaved as a draft, not scheduled
falsetruePublished immediately
falsefalse (default)Scheduled schedule_minutes from now
ParameterTypeDescriptionRequiredDefault
contentstringThe post textYes-
platformstringTarget platform: twitter, instagram, linkedin, tiktok, bluesky, facebook, youtube, pinterest, threadsYes-
account_idstringThe account to post from. Required when the user has more than one account on this platform; accounts_list returns the idsNo""
profile_idstringScope account resolution to one profile (one client in an agency setup) when account_id is unknown but the profile isNo""
is_draftbooleanSave as a draft, neither published nor scheduledNofalse
publish_nowbooleanPublish immediatelyNofalse
schedule_minutesintegerMinutes from now to schedule. Used only when is_draft and publish_now are both falseNo60
media_urlsstringComma-separated URLs of images or videos to attachNo""
titlestringPost title (required for YouTube, recommended for Pinterest)No""

posts_publish_now

posts_create with publish_now=true.

ParameterTypeDescriptionRequiredDefault
contentstringThe post textYes-
platformstringTarget platformYes-
account_idstringThe account to post from. Required when the user has more than one account on this platformNo""
profile_idstringScope account resolution to one profile when account_id is unknownNo""
media_urlsstringComma-separated URLs of media files to attachNo""

posts_cross_post

Posts the same content to several platforms at once. To target two accounts on the same platform in one call, repeat the platform: platforms="twitter,twitter", account_ids="66b2e19d8c3f5a7e9d0b1c2d,66b2e19d8c3f5a7e9d0b1c2e".

ParameterTypeDescriptionRequiredDefault
contentstringThe post textYes-
platformsstringComma-separated platforms (twitter,linkedin,bluesky). Repeat a platform to target several of its accountsYes-
account_idsstringComma-separated account ids, parallel to platforms. An empty position falls back to profile or automatic resolution. Required for users with several accounts on a platformNo""
profile_idstringScope resolution to one profile when account_ids is emptyNo""
is_draftbooleanSave as a draftNofalse
publish_nowbooleanPublish immediately to every platformNofalse
media_urlsstringComma-separated URLs of media files to attachNo""

posts_list

ParameterTypeDescriptionRequiredDefault
statusstringFilter by status: draft, scheduled, published, failedNo""
limitintegerMaximum number of posts to returnNo10

posts_get / posts_delete / posts_retry

ParameterTypeDescriptionRequired
post_idstringThe post idYes

posts_update

ParameterTypeDescriptionRequiredDefault
post_idstringThe post to updateYes-
contentstringNew contentNo""
scheduled_forstringNew scheduled time (ISO 8601)No""
titlestringNew titleNo""

Only draft, scheduled and failed posts can be updated.

media_generate_upload_link

Takes no parameters. Returns an upload URL for the user to open in a browser, plus the token that media_check_upload_status polls and its expiry; see media uploads go through a browser link.

media_check_upload_status

ParameterTypeDescriptionRequired
tokenstringThe upload token from media_generate_upload_linkYes

The reply is pending while the user has not uploaded, expired when the link timed out, or completed with the filename, type, size and URL of each file and the comma-separated media_urls value to pass to posts_create.

docs_search

Searches these docs and returns the 5 best-matching sections, each with its heading and its text, so the assistant can answer a question about the API without leaving your client.

ParameterTypeDescriptionRequired
querystringWhat to look for: webhooks, create post, authenticationYes

Generated tools

One tool per API endpoint, generated from the OpenAPI spec, so new endpoints appear as they ship. Names follow {category}_{operation}: the listAdCampaigns endpoint becomes ad_campaigns_list_ad_campaigns. Each tool maps 1:1 to an API reference operation, where the request and response schemas live, and the argument names are the snake_case form of the fields documented there.

The names are not retyped on this page. Call tools/list for the ones your client sees, and search_tools for the rest.

One generated tool is worth naming next to its core twin. posts_create_post mirrors the full createPost REST surface, so use it instead of posts_create for per-target customisation the core tool does not expose: customContent (a different caption per platform), customMedia (different attachments per target), a per-target scheduledFor, or platformSpecificData (TikTok privacy, YouTube category). Its platforms argument is an array of objects with platform, accountId and any per-target overrides. Available in zernio-sdk 1.4.0 and later.

How it behaves

search_tools and call_tool load the long tail on demand

Your client never loads every tool at once. tools/list returns about 50: the 20 core tools plus the everyday posting, queue, validation, account-health, analytics and engagement tools. The rest sit behind two tools: search_tools, a full-text search over the catalog ("send a WhatsApp template", "TikTok insights", "pause a campaign") that returns the best matches with their schemas, and call_tool, which invokes any tool the search found. A tool such as whatsapp_flows_publish_whats_app_flow costs no context until the assistant needs it, and there is nothing to configure.

Write tools refuse an ambiguous account

When you have more than one account on a platform, posts_create, posts_publish_now and posts_cross_post need account_id (or profile_id) to pick one. Without it they return an error listing the candidate account ids instead of picking one silently; the assistant calls accounts_list and retries. Available in zernio-sdk 1.4.0 and later.

Media uploads go through a browser link

An AI client cannot read files on your computer, so media reaches the server through a browser upload:

Ask for an upload link

Say that you want to post an image or video. The assistant calls media_generate_upload_link and gives you a URL.

Upload the file

Open the URL in your browser and drop the image or video on the upload page. The link expires 30 minutes after it is generated.

Say that the upload is done

The assistant calls media_check_upload_status with the token, reads the file URLs, and creates the post with media_urls set.

Accepted file types are JPG, PNG, WebP and GIF images, MP4, MOV, AVI, WebM and M4V videos, and PDF documents, up to 5 GB per file.

Related

  • MCP: the first call from a client, and the tools/call request an agent sends.
  • Setup: per-client configuration and the local server.
  • Create post: the REST operation behind posts_create and posts_create_post.
  • Media uploads: size and format limits per platform.
  • Python SDK: the package the server ships in.
Was this page helpful?

Setup

Connect Cursor, Claude Code, Codex, ChatGPT, Claude, VS Code or any MCP client to the hosted Zernio MCP server with OAuth or an API key, or run the server locally.

Documentation MCP

Give AI assistants read-only access to Zernio guides and API reference pages.

On this page

First callCore toolsposts_createposts_publish_nowposts_cross_postposts_listposts_get / posts_delete / posts_retryposts_updatemedia_generate_upload_linkmedia_check_upload_statusdocs_searchGenerated toolsHow it behavessearch_tools and call_tool load the long tail on demandWrite tools refuse an ambiguous accountMedia uploads go through a browser linkAsk for an upload linkUpload the fileSay that the upload is doneRelated