Server definition
- Hash
- sha256:79ff5dd2fe1bd8f8a2efb854911126049d79dad24a377aac69a7ec19dbddec91
- What it is
- What a remote MCP server returned when asked what it offers: 52 tools
The blob, as servednamed by its sha256
{
"instructions": "\nZernio API server for scheduling social media posts.\n\nAvailable tools are prefixed by resource:\n- accounts_* : Manage connected social media accounts\n- profiles_* : Manage profiles (groups of accounts)\n- posts_* : Create, list, update, delete posts\n- media_* : Upload images and videos\n- docs_* : Search Zernio API documentation\n\nMULTI-ACCOUNT WORKFLOW (agencies, multi-client setups):\nWhen a user has more than one account on the same platform, you MUST\ndisambiguate before posting:\n\n 1. Call accounts_list (or profiles_list then accounts_list with a\n profile_id filter) to discover account IDs.\n 2. Pass account_id to posts_create / posts_publish_now, or account_ids\n (parallel to platforms) to posts_cross_post.\n\nIf account_id is omitted and the selection is ambiguous, the write tools\nreturn an error containing the candidate list - read it, pick the right\naccount, and retry with account_id set. Never guess. The legacy behaviour\nof silently picking the first matching account has been removed.\n",
"tools": [
{
"description": "List groups",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "account_groups_list_account_groups",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Get account details for a specific platform.\n\nReturns username and ID for the first account matching the platform.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"platform": {
"description": "Platform name: twitter, instagram, linkedin, tiktok, bluesky, facebook, youtube, pinterest, threads (required)",
"type": "string"
}
},
"required": [
"platform"
],
"type": "object"
},
"name": "accounts_get",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Check account health",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"description": "The account ID to check (required)",
"type": "string"
}
},
"required": [
"account_id"
],
"type": "object"
},
"name": "accounts_get_account_health",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Check accounts health",
"inputSchema": {
"additionalProperties": false,
"properties": {
"platform": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by platform"
},
"profile_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by profile ID"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by health status"
}
},
"type": "object"
},
"name": "accounts_get_all_accounts_health",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Get follower stats",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_ids": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Comma-separated list of account IDs (optional, defaults to all user's accounts)"
},
"from_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Start date in YYYY-MM-DD format (defaults to 30 days ago)"
},
"granularity": {
"default": "daily",
"description": "Data aggregation level",
"type": "string"
},
"profile_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by profile ID"
},
"to_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "End date in YYYY-MM-DD format (defaults to today)"
}
},
"type": "object"
},
"name": "accounts_get_follower_stats",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "List all connected social media accounts.\n\nReturns the platform, username, and account ID for each connected account.\nUse this to find account IDs needed for creating posts.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "accounts_list",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Move account to another profile",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"description": "(required)",
"type": "string"
},
"profile_id": {
"description": "Target profile ID (must be a valid ObjectId and owned by the same user as the account). (required)",
"type": "string"
}
},
"required": [
"account_id",
"profile_id"
],
"type": "object"
},
"name": "accounts_move_account_to_profile",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Get post analytics",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by account ID"
},
"from_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive lower bound (YYYY-MM-DD). Defaults to 90 days ago if omitted. Max range is 366 days."
},
"limit": {
"default": 50,
"description": "Page size (default 50)",
"type": "integer"
},
"order": {
"default": "desc",
"description": "Sort order",
"type": "string"
},
"page": {
"default": 1,
"description": "Page number (default 1)",
"type": "integer"
},
"platform": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by platform (default \"all\")"
},
"post_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Returns analytics for a single post. Accepts both Zernio Post IDs and External Post IDs. Zernio IDs are auto-resolved to External Post analytics."
},
"profile_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by profile ID (default \"all\")"
},
"sort_by": {
"default": "date",
"description": "Sort by date, engagement, or a specific metric. Platform-specific metrics (follows, reposts, reels_skip_rate, ig_reels_*, completion_rate, profile_views) sort a null value as 0.",
"type": "string"
},
"source": {
"default": "all",
"description": "Filter by post source: late (posted via Zernio API), external (synced from platform), all (default)",
"type": "string"
},
"to_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive upper bound (YYYY-MM-DD). Defaults to today if omitted."
}
},
"type": "object"
},
"name": "analytics_get_analytics",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Get best times to post",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by account ID. Omit for all accounts."
},
"platform": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by platform (e.g. \"instagram\", \"tiktok\"). Omit for all platforms."
},
"profile_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by profile ID. Omit for all profiles."
},
"source": {
"default": "all",
"description": "Filter by post origin. \"late\" for posts published via Zernio, \"external\" for posts imported from platforms.",
"type": "string"
}
},
"type": "object"
},
"name": "analytics_get_best_time_to_post",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Get daily aggregated metrics\n\n Args:\n platform: Filter by platform (e.g. \"instagram\", \"tiktok\"). Omit for all platforms.\n profile_id: Filter by profile ID. Omit for all profiles.\n account_id: Filter by account ID\n from_date: Inclusive start date (ISO 8601). Defaults to 180 days ago.\n to_date: Inclusive end date (ISO 8601). Defaults to now.\n source: Filter by post origin. \"late\" for posts published via Zernio, \"external\" for posts imported from platforms.\n attribution: How each post's engagement is attributed to a day.\n\"publish\" (default) sums each post's lifetime total on its publish date.\n\"received\" buckets the per-day increase in engagement by the day it actually arrived (engagement-over-time), so engagement on older posts appears on the day it was gained rather than the post's publish date.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"attribution": {
"default": "publish",
"type": "string"
},
"from_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"platform": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"profile_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"source": {
"default": "all",
"type": "string"
},
"to_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"type": "object"
},
"name": "analytics_get_daily_metrics",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Get post analytics timeline\n\n Args:\n post_id: The post to fetch timeline for. Accepts an ExternalPost ID, a platformPostId, or a Zernio Post ID.\n(required)\n from_date: Start of date range (ISO 8601). Defaults to 90 days ago.\n to_date: End of date range (ISO 8601). Defaults to now.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"from_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"post_id": {
"type": "string"
},
"to_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"post_id"
],
"type": "object"
},
"name": "analytics_get_post_timeline",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Call a tool by name with the given arguments.\n\nUse this to execute tools discovered via search_tools.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"arguments": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Arguments to pass to the tool"
},
"name": {
"description": "The name of the tool to call",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "call_tool",
"outputSchema": null
},
{
"description": "Get post comments",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"description": "(required)",
"type": "string"
},
"comment_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "(Reddit and TikTok only) Get replies to a specific comment"
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Pagination cursor, returned by a previous call as `pagination.cursor`. This is the platform's own opaque paging value passed through verbatim: never construct, decode or validate it client-side."
},
"limit": {
"default": 25,
"description": "Maximum number of comments to return",
"type": "integer"
},
"post_id": {
"description": "Zernio post ID or platform-specific post ID. Zernio IDs are auto-resolved. LinkedIn third-party posts accept full activity URN or numeric ID. On Facebook and Instagram, a comment ID is also accepted here and returns that comment's replies. (required)",
"type": "string"
},
"subreddit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "(Reddit only) Subreddit name"
}
},
"required": [
"post_id",
"account_id"
],
"type": "object"
},
"name": "comments_get_inbox_post_comments",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "List commented posts",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by specific account ID"
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"limit": {
"default": 50,
"type": "integer"
},
"min_comments": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Minimum comment count"
},
"platform": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by platform. `metaads` is a synthetic value meaning the user's ads (boosted/dark posts) only; `facebook`/`instagram` return organic posts only. `tiktok` covers accounts connected through the TikTok Business app only; developer-app TikTok accounts are returned under `meta.accountsSkipped`."
},
"profile_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by profile ID"
},
"since": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Posts created after this date"
},
"sort_by": {
"default": "date",
"description": "Sort field",
"type": "string"
},
"sort_order": {
"default": "desc",
"description": "Sort order",
"type": "string"
}
},
"type": "object"
},
"name": "comments_list_inbox_comments",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Reply to comment",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"description": "(required)",
"type": "string"
},
"attachment_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "(Facebook only) URL of an image to attach, publishing a photo comment alongside the text. The URL must be publicly accessible so Meta can fetch it. Returns 400 for other platforms."
},
"comment_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Reply to specific comment (optional)"
},
"message": {
"description": "(required)",
"type": "string"
},
"parent_cid": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "(Bluesky only) Parent content identifier"
},
"post_id": {
"description": "Zernio post ID or platform-specific post ID. LinkedIn third-party posts accept full activity URN or numeric ID. (required)",
"type": "string"
},
"root_cid": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "(Bluesky only) Root post CID"
},
"root_uri": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "(Bluesky only) Root post URI"
}
},
"required": [
"post_id",
"account_id",
"message"
],
"type": "object"
},
"name": "comments_reply_to_inbox_post",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Search across the Late API documentation to find relevant information, code examples, API references, and guides.\n\nUse this tool when you need to answer questions about Late, find specific documentation, understand how features work, or locate implementation details.\n\nThe search returns contextual content with section titles and relevant snippets.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"query": {
"description": "Search query (e.g., 'webhooks', 'create post', 'authentication') (required)",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "docs_search",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Check the status of an upload token and get uploaded file URLs.\n\nUse this after the user has uploaded files through the browser upload page.\nReturns: pending (waiting for upload), completed (files ready), or expired (token expired).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"token": {
"description": "The upload token from media_generate_upload_link (required)",
"type": "string"
}
},
"required": [
"token"
],
"type": "object"
},
"name": "media_check_upload_status",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Generate a unique upload URL for the user to upload files via browser.\n\nUse this when the user wants to include images or videos in their post.\nThe flow is:\n1. Call this tool to get an upload URL\n2. Ask the user to open the URL in their browser\n3. User uploads files through the web interface\n4. Call media_check_upload_status to get the uploaded file URLs\n5. Use those URLs when creating the post with posts_create",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "media_generate_upload_link",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "List mentions",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by account ID"
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Cursor for pagination (ID of the last item from the previous page)"
},
"limit": {
"default": 25,
"type": "integer"
},
"profile_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by profile ID"
},
"sort_order": {
"default": "desc",
"description": "Sort order by publishedAt",
"type": "string"
}
},
"type": "object"
},
"name": "mentions_list_inbox_mentions",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Reply to a mention",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"description": "The Instagram account ID (required)",
"type": "string"
},
"comment_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The mentioning comment's ID. Omit for a caption mention."
},
"media_id": {
"description": "The ID of the media the account was mentioned in (required)",
"type": "string"
},
"message": {
"description": "The reply text (required)",
"type": "string"
}
},
"required": [
"account_id",
"media_id",
"message"
],
"type": "object"
},
"name": "mentions_reply_to_mention",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Bulk upload from CSV\n\nArgs:\n dry_run",
"inputSchema": {
"additionalProperties": false,
"properties": {
"dry_run": {
"default": false,
"type": "boolean"
}
},
"type": "object"
},
"name": "posts_bulk_upload_posts",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Create a social media post. Can be saved as DRAFT, SCHEDULED, or PUBLISHED immediately.\n\n⚠️ IMPORTANT - Choose the correct mode based on user intent:\n\n**DRAFT MODE (is_draft=True)**\nUse when user says: \"draft\", \"borrador\", \"save for later\", \"don't publish\", \"save it\", \"guardar\"\n→ Post is saved but NOT published and NOT scheduled. User can edit it later.\n\n**IMMEDIATE MODE (publish_now=True)**\nUse when user says: \"publish now\", \"post now\", \"publica ya\", \"immediately\", \"right now\", \"ahora\"\n→ Post goes live IMMEDIATELY.\n\n**SCHEDULED MODE (default)**\nUse when user says: \"schedule\", \"programar\", \"in X minutes/hours\", \"at 3pm\", \"tomorrow\"\n→ Post is scheduled for future publication. Use schedule_minutes to set the delay.\n\n⚠️ MULTI-ACCOUNT USERS (agencies, multi-client setups):\nIf the user has more than one account on the target platform, you MUST pass\n`account_id`. Call `accounts_list` (or `profiles_list` then `accounts_list`)\nfirst to discover the right ID. If you omit account_id when multiple accounts\nexist, the tool returns an error listing the candidates - use it to retry.\n\nExamples:\n- \"Create a draft tweet\" → is_draft=True\n- \"Post this to Twitter now\" → publish_now=True\n- \"Schedule a LinkedIn post for 2 hours from now\" → schedule_minutes=120\n- \"Post this to Acme's Twitter\" → call accounts_list, find Acme's twitter ID, pass account_id",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"default": "",
"description": "Specific account ID to post from. REQUIRED when the user has multiple accounts on this platform. Call accounts_list first to find IDs. Leave empty only if there is exactly one account for this platform. Default: .",
"type": "string"
},
"content": {
"description": "The post text/content (required)",
"type": "string"
},
"is_draft": {
"default": false,
"description": "Set to True to save as DRAFT (not published, not scheduled). Use when user wants to save without publishing Default: False.",
"type": "boolean"
},
"media_urls": {
"default": "",
"description": "Comma-separated URLs of media files to attach (images, videos) Default: .",
"type": "string"
},
"platform": {
"description": "Target platform: twitter, instagram, linkedin, tiktok, bluesky, facebook, youtube, pinterest, threads (required)",
"type": "string"
},
"profile_id": {
"default": "",
"description": "Scope account resolution to one profile (e.g. one client in an agency setup). Use when account_id is unknown but the target profile is. Call profiles_list to find IDs. Default: .",
"type": "string"
},
"publish_now": {
"default": false,
"description": "Set to True to publish IMMEDIATELY. Post goes live right now Default: False.",
"type": "boolean"
},
"schedule_minutes": {
"default": 0,
"description": "Minutes from now to schedule. Only used when is_draft=False AND publish_now=False Default: 60.",
"type": "integer"
},
"title": {
"default": "",
"description": "Post title (required for YouTube, recommended for Pinterest) Default: .",
"type": "string"
}
},
"required": [
"content",
"platform"
],
"type": "object"
},
"name": "posts_create",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Post the same content to multiple platforms at once.\n\n⚠️ IMPORTANT - Choose the correct mode based on user intent:\n\n**DRAFT MODE (is_draft=True)**\nUse when user says: \"draft\", \"borrador\", \"save for later\", \"don't publish\"\n→ Posts are saved but NOT published. User can edit them later.\n\n**IMMEDIATE MODE (publish_now=True)**\nUse when user says: \"publish now\", \"post now\", \"immediately\"\n→ Posts go live IMMEDIATELY on all platforms.\n\n**SCHEDULED MODE (default)**\nUse when user says: \"schedule\", \"programar\", \"in X hours\"\n→ Posts are scheduled for 1 hour from now.\n\n⚠️ MULTI-ACCOUNT USERS:\n- To pick a specific account per platform, pass `account_ids` parallel to\n `platforms` (same order, comma-separated). Use empty string for a position\n to fall back to profile/auto-resolution.\n- To target multiple accounts of the SAME platform in one call, repeat the\n platform: platforms='twitter,twitter', account_ids='acc_a,acc_b'.\n- If you omit account_ids and the user has multiple accounts for any of the\n requested platforms, the tool errors with the candidate list - use it to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_ids": {
"default": "",
"description": "Comma-separated account IDs, parallel to `platforms`. Empty positions fall back to profile/auto-resolution. Required for multi-account users to disambiguate. Default: .",
"type": "string"
},
"content": {
"description": "The post text/content (required)",
"type": "string"
},
"is_draft": {
"default": false,
"description": "Set to True to save as DRAFT (not published). Use when user wants to save without publishing Default: False.",
"type": "boolean"
},
"media_urls": {
"default": "",
"description": "Comma-separated URLs of media files to attach Default: .",
"type": "string"
},
"platforms": {
"description": "Comma-separated list of platforms (e.g., 'twitter,linkedin,bluesky'). Repeat a platform to target multiple accounts of it: 'twitter,twitter'. (required)",
"type": "string"
},
"profile_id": {
"default": "",
"description": "Scope auto-resolution to one profile when account_ids is empty. Default: .",
"type": "string"
},
"publish_now": {
"default": false,
"description": "Set to True to publish IMMEDIATELY to all platforms Default: False.",
"type": "boolean"
}
},
"required": [
"content",
"platforms"
],
"type": "object"
},
"name": "posts_cross_post",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Delete a post by ID.\n\nPublished posts cannot be deleted.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"post_id": {
"description": "The post ID to delete (required)",
"type": "string"
}
},
"required": [
"post_id"
],
"type": "object"
},
"name": "posts_delete",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Edit published post",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Which account's copy of the post to edit when the post was published to several accounts on the same platform; defaults to the first."
},
"content": {
"description": "The new post text content (required)",
"type": "string"
},
"platform": {
"description": "The platform to edit the post on. (required)",
"type": "string"
},
"post_id": {
"description": "(required)",
"type": "string"
}
},
"required": [
"post_id",
"platform",
"content"
],
"type": "object"
},
"name": "posts_edit_post",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Get full details of a specific post including content, status, and scheduling info.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"post_id": {
"description": "The post ID to retrieve (required)",
"type": "string"
}
},
"required": [
"post_id"
],
"type": "object"
},
"name": "posts_get",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "List posts with optional filtering by status.\n\nStatus options: draft, scheduled, published, failed",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 10,
"description": "Maximum number of posts to return Default: 10.",
"type": "integer"
},
"status": {
"default": "",
"description": "Filter by status: draft, scheduled, published, failed. Leave empty for all posts Default: .",
"type": "string"
}
},
"type": "object"
},
"name": "posts_list",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "List all failed posts that can be retried.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 10,
"description": "Maximum number of posts to return Default: 10.",
"type": "integer"
}
},
"type": "object"
},
"name": "posts_list_failed",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Publish a post immediately to a platform. The post goes live right away.\n\nUse this when user explicitly wants to publish NOW, not schedule for later.\nThis is a convenience wrapper around posts_create with publish_now=True.\n\n⚠️ MULTI-ACCOUNT USERS: pass `account_id` when the user has more than one\naccount on this platform. Call `accounts_list` first to find the right ID.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"default": "",
"description": "Specific account ID. REQUIRED when the user has multiple accounts on this platform. Leave empty only if there is exactly one. Default: .",
"type": "string"
},
"content": {
"description": "The post text/content (required)",
"type": "string"
},
"media_urls": {
"default": "",
"description": "Comma-separated URLs of media files to attach Default: .",
"type": "string"
},
"platform": {
"description": "Target platform: twitter, instagram, linkedin, tiktok, bluesky, etc. (required)",
"type": "string"
},
"profile_id": {
"default": "",
"description": "Scope auto-resolution to a single profile when account_id is unknown. Default: .",
"type": "string"
}
},
"required": [
"content",
"platform"
],
"type": "object"
},
"name": "posts_publish_now",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Retry publishing a failed post. Only works on posts with 'failed' status.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"post_id": {
"description": "The ID of the failed post to retry (required)",
"type": "string"
}
},
"required": [
"post_id"
],
"type": "object"
},
"name": "posts_retry",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Retry all failed posts at once.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "posts_retry_all_failed",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Unpublish post",
"inputSchema": {
"additionalProperties": false,
"properties": {
"platform": {
"description": "The platform to delete the post from (required)",
"type": "string"
},
"post_id": {
"description": "(required)",
"type": "string"
}
},
"required": [
"post_id",
"platform"
],
"type": "object"
},
"name": "posts_unpublish_post",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Update an existing post.\n\nOnly draft, scheduled, and failed posts can be updated.\nPublished posts cannot be modified.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"content": {
"default": "",
"description": "New content (leave empty to keep current) Default: .",
"type": "string"
},
"post_id": {
"description": "The post ID to update (required)",
"type": "string"
},
"scheduled_for": {
"default": "",
"description": "New schedule time as ISO string (leave empty to keep current) Default: .",
"type": "string"
},
"title": {
"default": "",
"description": "New title (leave empty to keep current) Default: .",
"type": "string"
}
},
"required": [
"post_id"
],
"type": "object"
},
"name": "posts_update",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Create a new profile for grouping social accounts.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"color": {
"default": "",
"description": "Optional hex color (e.g., '#4CAF50') Default: .",
"type": "string"
},
"description": {
"default": "",
"description": "Optional description Default: .",
"type": "string"
},
"name": {
"description": "Profile name (required)",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "profiles_create",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Delete a profile. The profile must have no connected accounts.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"profile_id": {
"description": "The profile ID to delete (required)",
"type": "string"
}
},
"required": [
"profile_id"
],
"type": "object"
},
"name": "profiles_delete",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Get details of a specific profile including name, description, and color.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"profile_id": {
"description": "The profile ID (required)",
"type": "string"
}
},
"required": [
"profile_id"
],
"type": "object"
},
"name": "profiles_get",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "List all profiles.\n\nProfiles group multiple social accounts together for easier management.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "profiles_list",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Update an existing profile. Only provided fields will be changed.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"color": {
"default": "",
"description": "New hex color (leave empty to keep current) Default: .",
"type": "string"
},
"description": {
"default": "",
"description": "New description (leave empty to keep current) Default: .",
"type": "string"
},
"is_default": {
"default": false,
"description": "Set as default profile Default: False.",
"type": "boolean"
},
"name": {
"default": "",
"description": "New name (leave empty to keep current) Default: .",
"type": "string"
},
"profile_id": {
"description": "The profile ID to update (required)",
"type": "string"
}
},
"required": [
"profile_id"
],
"type": "object"
},
"name": "profiles_update",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Create schedule",
"inputSchema": {
"additionalProperties": false,
"properties": {
"active": {
"default": true,
"type": "boolean"
},
"name": {
"description": "Queue name (e.g., Evening Posts) (required)",
"type": "string"
},
"profile_id": {
"description": "Profile ID (required)",
"type": "string"
},
"slots": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "(required)"
},
"timezone": {
"description": "IANA timezone (required)",
"type": "string"
}
},
"required": [
"profile_id",
"name",
"timezone",
"slots"
],
"type": "object"
},
"name": "queue_create_queue_slot",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Delete schedule",
"inputSchema": {
"additionalProperties": false,
"properties": {
"profile_id": {
"description": "(required)",
"type": "string"
},
"queue_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Queue ID to delete. Omit to delete all queues for the profile"
}
},
"required": [
"profile_id"
],
"type": "object"
},
"name": "queue_delete_queue_slot",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Get next available slot",
"inputSchema": {
"additionalProperties": false,
"properties": {
"profile_id": {
"description": "(required)",
"type": "string"
},
"queue_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Specific queue ID (optional, defaults to profile's default queue)"
}
},
"required": [
"profile_id"
],
"type": "object"
},
"name": "queue_get_next_queue_slot",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "List schedules",
"inputSchema": {
"additionalProperties": false,
"properties": {
"all": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Set to 'true' to list all queues for the profile"
},
"profile_id": {
"description": "Profile ID to get queues for (required)",
"type": "string"
},
"queue_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Specific queue ID to retrieve (optional)"
}
},
"required": [
"profile_id"
],
"type": "object"
},
"name": "queue_list_queue_slots",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Preview upcoming slots",
"inputSchema": {
"additionalProperties": false,
"properties": {
"count": {
"default": 20,
"type": "integer"
},
"profile_id": {
"description": "(required)",
"type": "string"
},
"queue_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by specific queue ID. Omit to use the default queue."
}
},
"required": [
"profile_id"
],
"type": "object"
},
"name": "queue_preview_queue",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Update schedule",
"inputSchema": {
"additionalProperties": false,
"properties": {
"active": {
"default": true,
"type": "boolean"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Queue name"
},
"profile_id": {
"description": "(required)",
"type": "string"
},
"queue_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Queue ID to update (optional)"
},
"reshuffle_existing": {
"default": false,
"description": "Whether to reschedule existing queued posts to match new slots",
"type": "boolean"
},
"set_as_default": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Make this queue the default"
},
"slots": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "(required)"
},
"timezone": {
"description": "(required)",
"type": "string"
}
},
"required": [
"profile_id",
"timezone",
"slots"
],
"type": "object"
},
"name": "queue_update_queue_slot",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Search for tools using natural language.\n\nReturns matching tool definitions ranked by relevance,\nin the same format as list_tools.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"query": {
"description": "Natural language query to search for tools",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_tools",
"outputSchema": {
"properties": {
"result": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
}
]
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Get aggregated event stats",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"description": "(required)",
"type": "string"
},
"aggregation": {
"default": "event",
"description": "Aggregation dimension. Defaults to `event`.",
"type": "string"
},
"end_time": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Unix seconds upper bound."
},
"start_time": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Unix seconds lower bound."
},
"tag_id": {
"description": "Pixel id. (required)",
"type": "string"
}
},
"required": [
"account_id",
"tag_id"
],
"type": "object"
},
"name": "tracking_tags_get_tracking_tag_stats",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "List tracking tags",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"description": "Ads SocialAccount id (platform `metaads` or `openaiads`). (required)",
"type": "string"
},
"ad_account_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional, Meta only. Scope to one ad account, e.g. `act_123456789`. Ignored for OpenAI Ads."
}
},
"required": [
"account_id"
],
"type": "object"
},
"name": "tracking_tags_list_tracking_tags",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Usage snapshot (default) or billed-spend metering (with params)\n\n Args:\n reconcile: Snapshot mode only. For Stripe subscription users, `true` forces a\nsubscription reconciliation pass even when cached plan data looks\ncomplete.\n range: Window to report. `cycle` / `prev-cycle` resolve to the customer's\nreal billing-period bounds (falling back to a trailing 30 days when\nno invoice exists yet); `7d`…`12mo` are trailing windows; `custom`\nuses `from` / `to`.\n from_: Inclusive start (UTC date). Required when `range=custom`.\n to: Inclusive end (UTC date). Required when `range=custom`. Max span 366 days.\n granularity: Bucketing of the `days` series: `day` (one row per UTC day),\n`month` (one row per calendar month, dated to the 1st), or `total`\n(no series, read `totals`). Does not affect `totals`.\n group_by: Metering mode. Adds `attribution`: the window's spend split per profile or per account (keys are ids; resolve names via `GET /v1/profiles` / `GET /v1/accounts`).\n profile_id: Metering mode (pair with `range`). Project the payload onto this profile's attributed share. Mutually exclusive with `accountId`, and `groupBy` (if given) must be `profile`; 404 when the profile is not in your team (or outside a scoped key's profiles).\n account_id: Metering mode (pair with `range`). Project the payload onto this account's attributed share. Mutually exclusive with `profileId`, and `groupBy` (if given) must be `account`; 404 when the account is not visible to the caller.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"from_": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"granularity": {
"default": "day",
"type": "string"
},
"group_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"profile_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"range": {
"default": "cycle",
"type": "string"
},
"reconcile": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null
},
"to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"type": "object"
},
"name": "usage_get_usage",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Validate media URL",
"inputSchema": {
"additionalProperties": false,
"properties": {
"url": {
"description": "Public media URL to validate (required)",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "validate_media",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Validate post content",
"inputSchema": {
"additionalProperties": false,
"properties": {
"content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Post text content"
},
"media_items": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Root media items shared across platforms"
},
"platforms": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Target platforms (same format as POST /v1/posts) (required)"
}
},
"required": [
"platforms"
],
"type": "object"
},
"name": "validate_post",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Validate character count",
"inputSchema": {
"additionalProperties": false,
"properties": {
"text": {
"description": "The post text to check (required)",
"type": "string"
}
},
"required": [
"text"
],
"type": "object"
},
"name": "validate_post_length",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Show an overview of what this Zernio MCP server can do (accounts, posts, analytics, ads, inbox) and how to find the right tool.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "zernio_overview",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:79ff5dd2fe1bd8f8a2efb854911126049d79dad24a377aac69a7ec19dbddec91 | sha256sum