socialclaw

Connect any AI agent to 11+ social platforms: schedule, publish & track posts via hosted MCP.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
97%
Integridad del esquema
91%
Calidad de los nombres
94%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (1)

  • LOWTool 'reply_instagram_comment' description lacks action verben reply_instagram_comment

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~3,395Tokens (definiciones de herramientas)
~870 BTamaño de respuesta típico
Impacto significativo en la atención (2.65% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "socialclaw": {
      "url": "https://getsocialclaw.com/mcp"
    }
  }
}

Puntos de conexión remotos

https://getsocialclaw.com/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (32)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢list_accounts(provider)

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

Esquema de entrada

{
  "type": "object",
  "properties": {
    "provider": {
      "type": "string",
      "description": "Optional provider filter."
    }
  }
}
🟡account_capabilities(accountId, provider)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "accountId": {
      "type": "string",
      "description": "Optional account id."
    },
    "provider": {
      "type": "string",
      "description": "Optional provider filter."
    }
  }
}
⚪connect_account(provider, botToken, chatId, webhookUrl)

Start connecting a new social account. For OAuth providers this returns an authorizeUrl the user must open in a browser. Telegram requires botToken and chatId; Discord requires webhookUrl.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "provider": {
      "type": "string",
      "description": "Provider to connect."
    },
    "botToken": {
      "type": "string",
      "description": "Telegram bot token (telegram only)."
    },
    "chatId": {
      "type": "string",
      "description": "Telegram chat target, e.g. @yourchannel (telegram only)."
    },
    "webhookUrl": {
      "type": "string",
      "description": "Discord channel webhook URL (discord only)."
    }
  },
  "required": [
    "provider"
  ]
}
🟡upload_asset(filename, sourceUrl, contentBase64)

Upload media (image or video) to SocialClaw hosted storage. Provide either sourceUrl (a public URL the server downloads) or contentBase64. Returns an asset id and a public URL usable as media_link in schedules.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "filename": {
      "type": "string",
      "description": "Filename including extension, e.g. launch.png."
    },
    "sourceUrl": {
      "type": "string",
      "description": "Public URL to download the media from."
    },
    "contentBase64": {
      "type": "string",
      "description": "Base64-encoded file content (alternative to sourceUrl)."
    }
  },
  "required": [
    "filename"
  ]
}
🟡validate_schedule(schedule)

Validate a schedule document against provider rules, media limits, account state, and publish times WITHOUT creating any posts. Always run this before apply_schedule.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "schedule": {
      "type": "object",
      "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.",
      "additionalProperties": true
    }
  },
  "required": [
    "schedule"
  ]
}
⚪preview_campaign(schedule)

Preview how a campaign schedule document expands into concrete posts and steps without creating anything.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "schedule": {
      "type": "object",
      "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.",
      "additionalProperties": true
    }
  },
  "required": [
    "schedule"
  ]
}
🟡apply_schedule(schedule, idempotencyKey)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "schedule": {
      "type": "object",
      "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.",
      "additionalProperties": true
    },
    "idempotencyKey": {
      "type": "string",
      "description": "Stable key to deduplicate retries."
    }
  },
  "required": [
    "schedule"
  ]
}
🟡publish_draft(runId, startAt)

Publish a previously created draft run, optionally at a given ISO-8601 start time.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "runId": {
      "type": "string",
      "description": "Draft run id."
    },
    "startAt": {
      "type": "string",
      "description": "Optional ISO-8601 publish start time."
    }
  },
  "required": [
    "runId"
  ]
}
🟢list_posts(runId, status, account, provider, campaignId, ...)

List posts in the workspace with optional filters.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "runId": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "description": "e.g. scheduled, published, action_required, failed, canceled."
    },
    "account": {
      "type": "string",
      "description": "Account handle filter."
    },
    "provider": {
      "type": "string"
    },
    "campaignId": {
      "type": "string"
    },
    "limit": {
      "type": "number",
      "description": "Maximum posts to return. Defaults to 20 and is capped at 50."
    },
    "offset": {
      "type": "number",
      "description": "Offset for paging through results."
    }
  }
}
🟢list_assets(query, kind, mime, sort, limit)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Optional text match over filename, id, kind, mime, or url."
    },
    "kind": {
      "type": "string",
      "description": "Filter by media kind: image or video.",
      "enum": [
        "image",
        "video"
      ]
    },
    "mime": {
      "type": "string",
      "description": "Optional mime prefix filter, e.g. video/mp4."
    },
    "sort": {
      "type": "string",
      "description": "created_desc (default, newest first) or created_asc.",
      "enum": [
        "created_desc",
        "created_asc"
      ]
    },
    "limit": {
      "type": "number",
      "description": "Maximum assets to return. Defaults to 24, capped at 48."
    }
  }
}
🟡get_post(postId)

Get one post including its delivery state and provider identifiers.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "postId": {
      "type": "string"
    }
  },
  "required": [
    "postId"
  ]
}
🟡post_attempts(postId)

List publish attempts for a post, including provider errors. Use this to debug failed posts.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "postId": {
      "type": "string"
    }
  },
  "required": [
    "postId"
  ]
}
🟡retry_post(postId)

Retry a failed post.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "postId": {
      "type": "string"
    }
  },
  "required": [
    "postId"
  ]
}
🔴cancel_post(postId)

Cancel a scheduled post before it publishes.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "postId": {
      "type": "string"
    }
  },
  "required": [
    "postId"
  ]
}
🟢run_status(runId)

Get the status summary of a publishing run and its posts.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "runId": {
      "type": "string"
    }
  },
  "required": [
    "runId"
  ]
}
🟢get_analytics(scope, id, window)

Get analytics snapshots for a post, an account, or a run. scope must be post, account, or run; id is the matching identifier.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "scope": {
      "type": "string",
      "enum": [
        "post",
        "account",
        "run"
      ]
    },
    "id": {
      "type": "string"
    },
    "window": {
      "type": "string",
      "description": "Optional analytics window, e.g. 7d."
    }
  },
  "required": [
    "scope",
    "id"
  ]
}
🟡refresh_analytics(postId, window)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "postId": {
      "type": "string",
      "description": "The published post id to refresh."
    },
    "window": {
      "type": "string",
      "description": "Optional analytics window, e.g. 7d (default lifetime)."
    }
  },
  "required": [
    "postId"
  ]
}
🟢list_instagram_media(account, limit, after)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    },
    "limit": {
      "type": "number",
      "description": "Max media to return (default 25, capped at 100)."
    },
    "after": {
      "type": "string",
      "description": "Pagination cursor from a previous response."
    }
  },
  "required": [
    "account"
  ]
}
🟢get_instagram_comments(account, mediaId, limit, after)

Read the comments (and replies) on an Instagram post. Use list_instagram_media first to get a mediaId.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    },
    "mediaId": {
      "type": "string",
      "description": "The IG media id from list_instagram_media."
    },
    "limit": {
      "type": "number",
      "description": "Max comments to return (default 25, capped at 100)."
    },
    "after": {
      "type": "string",
      "description": "Pagination cursor from a previous response."
    }
  },
  "required": [
    "account",
    "mediaId"
  ]
}
⚪reply_instagram_comment(account, commentId, message)

Reply to an Instagram comment on the user's media.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    },
    "commentId": {
      "type": "string"
    },
    "message": {
      "type": "string",
      "description": "The reply text."
    }
  },
  "required": [
    "account",
    "commentId",
    "message"
  ]
}
🟡hide_instagram_comment(account, commentId, hidden)

Hide or unhide an Instagram comment on the user's media. Set hidden=false to unhide.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    },
    "commentId": {
      "type": "string"
    },
    "hidden": {
      "type": "boolean",
      "description": "true to hide (default), false to unhide."
    }
  },
  "required": [
    "account",
    "commentId"
  ]
}
🔴delete_instagram_comment(account, commentId)

Permanently delete an Instagram comment on the user's media. Prefer hide_instagram_comment when unsure.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    },
    "commentId": {
      "type": "string"
    }
  },
  "required": [
    "account",
    "commentId"
  ]
}
🟡get_instagram_media_insights(account, mediaId, mediaProductType)

Get analytics for one Instagram post (reach, likes, comments, saved, shares, views). Use list_instagram_media for the mediaId.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    },
    "mediaId": {
      "type": "string"
    },
    "mediaProductType": {
      "type": "string",
      "description": "Optional: FEED, REELS, or STORY — refines which metrics are requested."
    }
  },
  "required": [
    "account",
    "mediaId"
  ]
}
🟢get_instagram_profile(account)

Get an Instagram account's profile stats: followers, follows, media count, bio.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    }
  },
  "required": [
    "account"
  ]
}
🟢get_instagram_account_insights(account, metric, days)

Get an Instagram account's insight trend (a daily time series, e.g. reach) over the last N days.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    },
    "metric": {
      "type": "string",
      "description": "Account metric, default reach (e.g. reach, profile_views, accounts_engaged)."
    },
    "days": {
      "type": "number",
      "description": "Window in days (2-30, default 14)."
    }
  },
  "required": [
    "account"
  ]
}
⚪react_instagram_message(account, conversationId, messageId, recipientId, reaction)

React to a received Instagram direct message (e.g. love).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    },
    "conversationId": {
      "type": "string"
    },
    "messageId": {
      "type": "string"
    },
    "recipientId": {
      "type": "string",
      "description": "The other participant's Instagram-scoped user id (IGSID)."
    },
    "reaction": {
      "type": "string",
      "description": "Reaction name, default love."
    }
  },
  "required": [
    "account",
    "conversationId",
    "messageId",
    "recipientId"
  ]
}
🟢list_instagram_mentions(limit)

List recent @mentions of the workspace's Instagram accounts (captured from Instagram mention webhooks).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Max mentions (default 30, capped at 100)."
    }
  }
}
🟢list_instagram_conversations(account, limit, after)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    },
    "limit": {
      "type": "number",
      "description": "Max conversations (default 25, capped at 100)."
    },
    "after": {
      "type": "string",
      "description": "Pagination cursor from a previous response."
    }
  },
  "required": [
    "account"
  ]
}
🟢get_instagram_messages(account, conversationId, limit, after)

Read the messages in an Instagram direct-message conversation.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    },
    "conversationId": {
      "type": "string",
      "description": "Conversation id from list_instagram_conversations."
    },
    "limit": {
      "type": "number",
      "description": "Max messages (default 25, capped at 100)."
    },
    "after": {
      "type": "string",
      "description": "Pagination cursor from a previous response."
    }
  },
  "required": [
    "account",
    "conversationId"
  ]
}
🟡send_instagram_message(account, conversationId, recipientId, text, attachment_url, ...)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "account": {
      "type": "string",
      "description": "Instagram connected-account id or handle."
    },
    "conversationId": {
      "type": "string",
      "description": "Conversation id (for routing/storage)."
    },
    "recipientId": {
      "type": "string",
      "description": "The recipient's Instagram-scoped user id (IGSID)."
    },
    "text": {
      "type": "string",
      "description": "Message body (omit when sending an attachment)."
    },
    "attachment_url": {
      "type": "string",
      "description": "Public URL of an image/video to send as an attachment."
    },
    "attachment_type": {
      "type": "string",
      "description": "Attachment type: image (default), video, or audio.",
      "enum": [
        "image",
        "video",
        "audio"
      ]
    },
    "tag": {
      "type": "string",
      "description": "Optional message tag, e.g. HUMAN_AGENT, to reply outside the 24h window."
    }
  },
  "required": [
    "account",
    "conversationId",
    "recipientId"
  ]
}
🟢workspace_usage

Get workspace usage counters and plan entitlement consumption.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
🟢workspace_health(provider)

Get workspace health, including connection state across providers. Pass provider to check one provider's connections.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "provider": {
      "type": "string",
      "description": "Optional provider to check connection health for."
    }
  }
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada32 herramientas
verificadoversión no registrada32 herramientas