Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,537Letters: 14Defects: 1,323counted 4 min ago
teppi

Server definition

Hash
sha256:a37aa9075b102c3f7b19952d826e1bd72d1efede84e67ebbc90aec5d5b90c8dc
What it is
What a remote MCP server returned when asked what it offers: 33 tools

The blob, as servednamed by its sha256

{ "instructions": "SocialClaw schedules and publishes social media posts through the accounts connected to the user's SocialClaw workspace on X, LinkedIn, Instagram, Threads, Facebook Pages, TikTok, Discord, Telegram, YouTube, Reddit, WordPress, and Pinterest. Before publishing, replying, sending a message, cancelling, or deleting anything, show the user exactly what will happen and get their confirmation. Typical flow: list_accounts -> account_capabilities -> (list_assets to reuse an already-uploaded file, or upload_asset for a new one) -> validate_schedule -> apply_schedule -> run_status. To post media the user uploaded in the dashboard, call list_assets and use an asset's publicUrl as media_link.", "tools": [ { "description": "Get publish capabilities and provider rules for connected accounts: what media is allowed, text limits, and whether publishing is currently possible. Pass accountId for one account, or provider to filter, or neither for all.", "inputSchema": { "properties": { "accountId": { "description": "Optional account id.", "type": "string" }, "provider": { "description": "Optional provider filter.", "type": "string" } }, "type": "object" }, "name": "account_capabilities", "outputSchema": null }, { "description": "Create a publishing run from a schedule document. Posts are scheduled or published through connected accounts. Send an idempotencyKey so retries do not create duplicate runs.", "inputSchema": { "properties": { "idempotencyKey": { "description": "Stable key to deduplicate retries.", "type": "string" }, "schedule": { "additionalProperties": true, "description": "SocialClaw schedule document. Minimal shape: { timezone, posts: [{ account, name, description, publish_at, media_link? }] }. Campaign documents use { timezone, campaigns: [...] }. Per-post provider settings go in settings, e.g. TikTok inbox mode: settings: { tiktokPostMode: \"draft\" } sends the media to TikTok's inbox notification flow instead of publishing, and the creator finishes the post inside the TikTok app.", "type": "object" } }, "required": [ "schedule" ], "type": "object" }, "name": "apply_schedule", "outputSchema": null }, { "description": "Cancel a scheduled post before it publishes.", "inputSchema": { "properties": { "postId": { "type": "string" } }, "required": [ "postId" ], "type": "object" }, "name": "cancel_post", "outputSchema": null }, { "description": "Start connecting one of the user's own social accounts to their SocialClaw workspace. For most providers this returns an authorizeUrl; give it to the user so they sign in with the provider themselves (SocialClaw never sees their password). Telegram and Discord have no sign-in page: Telegram takes the bot token and chat id of a bot the user created and made admin of their channel, and Discord takes a webhook URL the user created for their channel. Only pass values the user gave you for this purpose.", "inputSchema": { "properties": { "botToken": { "description": "Telegram only: token of the user's own bot, from @BotFather.", "type": "string" }, "chatId": { "description": "Telegram chat target, e.g. @yourchannel (telegram only).", "type": "string" }, "provider": { "description": "Provider to connect.", "type": "string" }, "webhookUrl": { "description": "Discord only: webhook URL the user created in their channel settings.", "type": "string" } }, "required": [ "provider" ], "type": "object" }, "name": "connect_account", "outputSchema": null }, { "description": "Permanently delete an Instagram comment on the user's media. Prefer hide_instagram_comment when unsure.", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" }, "commentId": { "type": "string" } }, "required": [ "account", "commentId" ], "type": "object" }, "name": "delete_instagram_comment", "outputSchema": null }, { "description": "Get analytics snapshots for a post, an account, or a run. scope must be post, account, or run; id is the matching identifier.", "inputSchema": { "properties": { "id": { "type": "string" }, "scope": { "enum": [ "post", "account", "run" ], "type": "string" }, "window": { "description": "Optional analytics window, e.g. 7d.", "type": "string" } }, "required": [ "scope", "id" ], "type": "object" }, "name": "get_analytics", "outputSchema": null }, { "description": "Get an Instagram account's insight trend (a daily time series, e.g. reach) over the last N days.", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" }, "days": { "description": "Window in days (2-30, default 14).", "type": "number" }, "metric": { "description": "Account metric, default reach (e.g. reach, profile_views, accounts_engaged).", "type": "string" } }, "required": [ "account" ], "type": "object" }, "name": "get_instagram_account_insights", "outputSchema": null }, { "description": "Read the comments and replies people left on one of the user's own Instagram posts, so the user can review and answer them. Use list_instagram_media first to get a mediaId.", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" }, "after": { "description": "Pagination cursor from a previous response.", "type": "string" }, "limit": { "description": "Max comments to return (default 25, capped at 100).", "type": "number" }, "mediaId": { "description": "The IG media id from list_instagram_media.", "type": "string" } }, "required": [ "account", "mediaId" ], "type": "object" }, "name": "get_instagram_comments", "outputSchema": null }, { "description": "Get analytics for one Instagram post (reach, likes, comments, saved, shares, views). Use list_instagram_media for the mediaId.", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" }, "mediaId": { "type": "string" }, "mediaProductType": { "description": "Optional: FEED, REELS, or STORY — refines which metrics are requested.", "type": "string" } }, "required": [ "account", "mediaId" ], "type": "object" }, "name": "get_instagram_media_insights", "outputSchema": null }, { "description": "Read the messages in an Instagram direct-message conversation.", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" }, "after": { "description": "Pagination cursor from a previous response.", "type": "string" }, "conversationId": { "description": "Conversation id from list_instagram_conversations.", "type": "string" }, "limit": { "description": "Max messages (default 25, capped at 100).", "type": "number" } }, "required": [ "account", "conversationId" ], "type": "object" }, "name": "get_instagram_messages", "outputSchema": null }, { "description": "Get an Instagram account's profile stats: followers, follows, media count, bio.", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" } }, "required": [ "account" ], "type": "object" }, "name": "get_instagram_profile", "outputSchema": null }, { "description": "Get one post including its delivery state and provider identifiers.", "inputSchema": { "properties": { "postId": { "type": "string" } }, "required": [ "postId" ], "type": "object" }, "name": "get_post", "outputSchema": null }, { "description": "Identify the connected SocialClaw workspace: its stable id, name, and plan. Use it to confirm which workspace you are acting on.", "inputSchema": { "properties": {}, "type": "object" }, "name": "get_profile", "outputSchema": null }, { "description": "Hide or unhide an Instagram comment on the user's media. Set hidden=false to unhide.", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" }, "commentId": { "type": "string" }, "hidden": { "description": "true to hide (default), false to unhide.", "type": "boolean" } }, "required": [ "account", "commentId" ], "type": "object" }, "name": "hide_instagram_comment", "outputSchema": null }, { "description": "List connected social accounts in the SocialClaw workspace. Optionally filter by provider (x, facebook, instagram_business, instagram, threads, linkedin, linkedin_page, pinterest, tiktok, telegram, discord, youtube, reddit, wordpress).", "inputSchema": { "properties": { "provider": { "description": "Optional provider filter.", "type": "string" } }, "type": "object" }, "name": "list_accounts", "outputSchema": null }, { "description": "List media (images/videos) the user has uploaded to their SocialClaw library, newest first. Each asset includes a publicUrl usable directly as media_link in validate_schedule/apply_schedule. Use this to find a previously uploaded file (e.g. from the dashboard) to post. Optionally filter by kind (image/video), mime, or a text query over filename/id.", "inputSchema": { "properties": { "kind": { "description": "Filter by media kind: image or video.", "enum": [ "image", "video" ], "type": "string" }, "limit": { "description": "Maximum assets to return. Defaults to 24, capped at 48.", "type": "number" }, "mime": { "description": "Optional mime prefix filter, e.g. video/mp4.", "type": "string" }, "query": { "description": "Optional text match over filename, id, kind, mime, or url.", "type": "string" }, "sort": { "description": "created_desc (default, newest first) or created_asc.", "enum": [ "created_desc", "created_asc" ], "type": "string" } }, "type": "object" }, "name": "list_assets", "outputSchema": null }, { "description": "List the Instagram direct-message conversations for an account, most recent first. Each conversation includes `counterpart` (the other person's {id, username}) — use its id as the recipientId when replying; `participants` also lists the account itself.", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" }, "after": { "description": "Pagination cursor from a previous response.", "type": "string" }, "limit": { "description": "Max conversations (default 25, capped at 100).", "type": "number" } }, "required": [ "account" ], "type": "object" }, "name": "list_instagram_conversations", "outputSchema": null }, { "description": "List an Instagram account's recent posts (caption, permalink, timestamp, comment count) so you can find one to read or moderate comments on. account is the connected-account id or handle.", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" }, "after": { "description": "Pagination cursor from a previous response.", "type": "string" }, "limit": { "description": "Max media to return (default 25, capped at 100).", "type": "number" } }, "required": [ "account" ], "type": "object" }, "name": "list_instagram_media", "outputSchema": null }, { "description": "List recent @mentions of the workspace's Instagram accounts (captured from Instagram mention webhooks).", "inputSchema": { "properties": { "limit": { "description": "Max mentions (default 30, capped at 100).", "type": "number" } }, "type": "object" }, "name": "list_instagram_mentions", "outputSchema": null }, { "description": "List posts in the workspace with optional filters.", "inputSchema": { "properties": { "account": { "description": "Account handle filter.", "type": "string" }, "campaignId": { "type": "string" }, "limit": { "description": "Maximum posts to return. Defaults to 20 and is capped at 50.", "type": "number" }, "offset": { "description": "Offset for paging through results.", "type": "number" }, "provider": { "type": "string" }, "runId": { "type": "string" }, "status": { "description": "e.g. scheduled, published, action_required, failed, canceled.", "type": "string" } }, "type": "object" }, "name": "list_posts", "outputSchema": null }, { "description": "List publish attempts for a post, including provider errors. Use this to debug failed posts.", "inputSchema": { "properties": { "postId": { "type": "string" } }, "required": [ "postId" ], "type": "object" }, "name": "post_attempts", "outputSchema": null }, { "description": "Preview how a campaign schedule document expands into concrete posts and steps without creating anything.", "inputSchema": { "properties": { "schedule": { "additionalProperties": true, "description": "SocialClaw schedule document. Minimal shape: { timezone, posts: [{ account, name, description, publish_at, media_link? }] }. Campaign documents use { timezone, campaigns: [...] }. Per-post provider settings go in settings, e.g. TikTok inbox mode: settings: { tiktokPostMode: \"draft\" } sends the media to TikTok's inbox notification flow instead of publishing, and the creator finishes the post inside the TikTok app.", "type": "object" } }, "required": [ "schedule" ], "type": "object" }, "name": "preview_campaign", "outputSchema": null }, { "description": "Publish a previously created draft run, optionally at a given ISO-8601 start time.", "inputSchema": { "properties": { "runId": { "description": "Draft run id.", "type": "string" }, "startAt": { "description": "Optional ISO-8601 publish start time.", "type": "string" } }, "required": [ "runId" ], "type": "object" }, "name": "publish_draft", "outputSchema": null }, { "description": "React to a received Instagram direct message (e.g. love).", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" }, "conversationId": { "type": "string" }, "messageId": { "type": "string" }, "reaction": { "description": "Reaction name, default love.", "type": "string" }, "recipientId": { "description": "The other participant's Instagram-scoped user id (IGSID).", "type": "string" } }, "required": [ "account", "conversationId", "messageId", "recipientId" ], "type": "object" }, "name": "react_instagram_message", "outputSchema": null }, { "description": "Fetch fresh analytics for a published post from the provider and store a new snapshot, then return it. Supported providers: Instagram, TikTok, YouTube, Reddit, X, Pinterest, Snapchat (others return an unsupported snapshot). Call this before get_analytics when you need current numbers rather than the last stored snapshot.", "inputSchema": { "properties": { "postId": { "description": "The published post id to refresh.", "type": "string" }, "window": { "description": "Optional analytics window, e.g. 7d (default lifetime).", "type": "string" } }, "required": [ "postId" ], "type": "object" }, "name": "refresh_analytics", "outputSchema": null }, { "description": "Reply to an Instagram comment on the user's media.", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" }, "commentId": { "type": "string" }, "message": { "description": "The reply text.", "type": "string" } }, "required": [ "account", "commentId", "message" ], "type": "object" }, "name": "reply_instagram_comment", "outputSchema": null }, { "description": "Retry a failed post.", "inputSchema": { "properties": { "postId": { "type": "string" } }, "required": [ "postId" ], "type": "object" }, "name": "retry_post", "outputSchema": null }, { "description": "Get the status summary of a publishing run and its posts.", "inputSchema": { "properties": { "runId": { "type": "string" } }, "required": [ "runId" ], "type": "object" }, "name": "run_status", "outputSchema": null }, { "description": "Send an Instagram direct message — a text reply, or an image/video attachment via attachment_url. Only allowed within 24 hours of the recipient's last message unless a message tag (e.g. HUMAN_AGENT) is supplied.", "inputSchema": { "properties": { "account": { "description": "Instagram connected-account id or handle.", "type": "string" }, "attachment_type": { "description": "Attachment type: image (default), video, or audio.", "enum": [ "image", "video", "audio" ], "type": "string" }, "attachment_url": { "description": "Public URL of an image/video to send as an attachment.", "type": "string" }, "conversationId": { "description": "Conversation id (for routing/storage).", "type": "string" }, "recipientId": { "description": "The recipient's Instagram-scoped user id (IGSID).", "type": "string" }, "tag": { "description": "Optional message tag, e.g. HUMAN_AGENT, to reply outside the 24h window.", "type": "string" }, "text": { "description": "Message body (omit when sending an attachment).", "type": "string" } }, "required": [ "account", "conversationId", "recipientId" ], "type": "object" }, "name": "send_instagram_message", "outputSchema": null }, { "description": "Upload an image or video the user wants to post, so it can be attached to a post. Provide either sourceUrl (a public http(s) URL of the media) or contentBase64. The file is stored in the user's SocialClaw media library and the result includes an asset id and a public URL to use as media_link in schedules.", "inputSchema": { "properties": { "contentBase64": { "description": "Base64-encoded file content (alternative to sourceUrl).", "type": "string" }, "filename": { "description": "Filename including extension, e.g. launch.png.", "type": "string" }, "sourceUrl": { "description": "Public http(s) URL of the image or video.", "type": "string" } }, "required": [ "filename" ], "type": "object" }, "name": "upload_asset", "outputSchema": null }, { "description": "Validate a schedule document against provider rules, media limits, account state, and publish times WITHOUT creating any posts. Always run this before apply_schedule.", "inputSchema": { "properties": { "schedule": { "additionalProperties": true, "description": "SocialClaw schedule document. Minimal shape: { timezone, posts: [{ account, name, description, publish_at, media_link? }] }. Campaign documents use { timezone, campaigns: [...] }. Per-post provider settings go in settings, e.g. TikTok inbox mode: settings: { tiktokPostMode: \"draft\" } sends the media to TikTok's inbox notification flow instead of publishing, and the creator finishes the post inside the TikTok app.", "type": "object" } }, "required": [ "schedule" ], "type": "object" }, "name": "validate_schedule", "outputSchema": null }, { "description": "Get workspace health, including connection state across providers. Pass provider to check one provider's connections.", "inputSchema": { "properties": { "provider": { "description": "Optional provider to check connection health for.", "type": "string" } }, "type": "object" }, "name": "workspace_health", "outputSchema": null }, { "description": "Get workspace usage counters and plan entitlement consumption.", "inputSchema": { "properties": {}, "type": "object" }, "name": "workspace_usage", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:a37aa9075b102c3f7b19952d826e1bd72d1efede84e67ebbc90aec5d5b90c8dc | sha256sum