Skip to content
Agentmart
Submit a tool

BulkPublish

Schedule, cross-post, and analyze social media posts across 15 platforms from AI agents.

Connector by azeemkafridi · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)Remote (HTTP)★ 3
Write a review

Install

Works with Claude Code, VS Code, Codex, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/azeemkafridi-bulkpublish

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://mcp.bulkpublish.com/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Schedule, cross-post, and analyze social media posts across 15 platforms from AI agents.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
25 read · 35 write · 13 delete
Secrets
1 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Node.js package

Tools by what they do 73

Read from the source code; the running server may list different tools.

Read 25 · Look things up without changing anything.

  • get_analytics
  • get_channel_health
  • get_channel_options
  • get_conversation
  • get_media
  • get_post
  • get_post_metrics
  • get_queue_slot
  • get_quota_usage
  • list_calendar_notes
  • list_channel_sets
  • list_channels
Show 13 more tools
  • list_client_connect_links
  • list_conversations
  • list_hashtag_groups
  • list_labels
  • list_media
  • list_platforms
  • list_post_comments
  • list_posts
  • list_review_links
  • list_rss_feeds
  • list_schedules
  • list_templates
  • search_mentions

Write 35 · Create, change, send or run things.

  • abort_multipart_upload
  • approve_post
  • bulk_posts
  • complete_multipart_upload
  • create_calendar_note
  • create_channel_set
  • create_client_connect_link
  • create_hashtag_group
  • create_label
  • create_media_upload
  • create_multipart_upload
  • create_post
Show 23 more tools
  • create_review_link
  • create_rss_feed
  • create_schedule
  • create_template
  • finalize_media_upload
  • publish_post
  • publish_story
  • reject_post
  • reply_to_comment
  • reply_to_conversation
  • retry_post
  • share_post
  • update_calendar_note
  • update_channel_set
  • update_conversation
  • update_hashtag_group
  • update_label
  • update_media
  • update_post
  • update_rss_feed
  • update_schedule
  • update_template
  • upload_media

Delete 13 · Delete, drop, revoke or wipe things.

  • delete_calendar_note
  • delete_channel_set
  • delete_client_connect_link
  • delete_hashtag_group
  • delete_label
  • delete_media
  • delete_post
  • delete_review_link
  • delete_rss_feed
  • delete_schedule
  • delete_template
  • moderate_comment
Show 1 more tools
  • unshare_post

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • BULKPUBLISH_API_KEY

Other settings (environment variables or headers).

  • BULKPUBLISH_TOOL_PROFILE

Network hosts it talks to 11

  • app.bulkpublish.com · found in code
  • app.invalid · found in code
  • bulkpublish.com · found in code
  • chatgpt.com · found in code
  • claude.ai · found in code
  • d46a1bf4b4491a708ec851e1aade51e5.r2.cloudflarestorage.com · found in code
  • fonts.googleapis.com · found in code
  • fonts.gstatic.com · found in code
  • github.com · found in code
  • images.bulkpublish.com · found in code
  • mcp.bulkpublish.com · found in remote endpoint, install command, code

Files it touches

  • Any path the agent passes to its tools

Tools (73)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • abort_multipart_upload

    Abort an in-progress chunked upload and permanently free its stored parts. Use only when the upload should be cancelled; do not use this after all parts have been uploaded if you intend to complete the upload. This action cannot be undone.

  • approve_post

    Approve a post awaiting team approval. Requires a role with post:approve (owner, admin, approver). Releases a post with approvalStatus 'pending': it publishes at its scheduled time, or immediately if that time passed less than 15 minutes ago. If the scheduled time passed more than 15 minutes ago, whenLate decides: 'publish' publishes it immediately (status 'publishing'); 'hold' approves it but returns it with status 'draft' (approvalStatus 'approved', scheduledAt unchanged) and the author is notified to choose a new time — tell the user it needs rescheduling. When whenLate is omitted it follow…

  • bulk_posts

    Perform a bulk action on multiple posts. Supports deleting, retrying, or rescheduling multiple posts at once.

  • complete_multipart_upload

    Complete a chunked upload: the server assembles the uploaded parts, verifies the stored object (existence, size, magic bytes, storage quota) and records the media file — same verification and response shape as finalize_media_upload. A failed assembly automatically aborts the upload.

  • create_calendar_note

    Pin a note to a day on the content calendar. Not a post: nothing is published.

  • create_channel_set

    Create a channel set — a saved channel grouping for one-click multi-channel targeting. Names are unique per organization (a duplicate fails with a 409, code DUPLICATE_NAME); an organization can have up to 50 sets.

  • create_client_connect_link

    Create a one-time link a client can open, with no BulkPublish account of their own, to connect one of their platform accounts into this organization. The client picks which platform when they open it — only these are supported (telegram asks for a bot token instead of a plain sign-in, and stays a manual connect by your own team): bluesky, facebook, instagram, x, tiktok, youtube, threads, pinterest, gmb, linkedin, mastodon, discord, tumblr, snapchat. For bluesky, the client enters their handle and approves access on Bluesky; they are never asked for a password. For facebook, the client signs in…

  • create_hashtag_group

    Save a named set of hashtags (1-30) for reuse in posts. Hashtags may be given with or without the leading '#'; letters, digits and underscores only. Up to 100 groups per organization.

  • create_label

    Create a new label for organizing posts or media files.

  • create_media_upload

    Reserve a presigned upload URL for a direct browser upload (used by the composer UI). For scripted uploads use upload_media instead.

  • create_multipart_upload

    Start a chunked (multipart) direct-to-storage upload for large media — videos up to 1GB, images up to 100MB. Returns r2Key, uploadId, the fixed partSize (10485760 bytes = 10MB), and one presigned PUT URL per part (valid 3600s). PUT each 10MB slice to its URL, collect each response's ETag header, then call complete_multipart_upload. For ordinary files prefer upload_media.

  • create_post

    Create a new social media post. Can be saved as a draft or scheduled for a specific time. Supports platform-specific content overrides, media attachments, labels, and thread format. IMPORTANT: YouTube and TikTok REQUIRE video — do not include them when posting images only. Instagram defaults to feed_photo — set postTypeOverrides for video content (reel, feed_video).

  • create_review_link

    Create a read-only review link covering several posts at once — the multi-post counterpart of share_post. Anyone with the link can open it without signing in. Every postId must belong to the organization. Unlike share_post this is never regenerated in place: each call mints a new link and a new token, even for the same posts. Returns { reviewLink, url }. Pro and Business only: on the single-seat Free and Lifetime plans this answers 403 FEATURE_DISABLED with the plan and an upgrade hint.

  • create_rss_feed

    Add an RSS autopost feed. The feed is polled every 15 minutes and new items become posts on the chosen channels. The server validates that feedUrl is a reachable public RSS 2.0 or Atom feed. An organization can have up to 20 feeds.

  • create_schedule

    Create a new recurring post schedule. Posts are automatically created and published on the chosen frequency. The schedule is visible in the web app (Repeat Posts page, with upcoming runs on the Calendar); a post record exists only once an occurrence fires, carrying recurringScheduleId.

Show 58 more tools
  • create_template

    Save post text as a named template for reuse (text only; media and channels belong to the post). Up to 200 per organization per kind (captions and first-comment snippets each have their own 200); names are unique per kind, so a caption and a first-comment snippet can share a name.

  • delete_calendar_note

    Delete a calendar note.

  • delete_channel_set

    Delete a channel set by ID. Does not affect the channels themselves.

  • delete_client_connect_link

    Revoke a client-connect link before it has been used. Idempotent; an account it already connected is untouched. Pro and Business only: on the single-seat Free and Lifetime plans this answers 403 FEATURE_DISABLED with the plan and an upgrade hint.

  • delete_hashtag_group

    Delete a saved hashtag group. Posts that already contain its hashtags are untouched.

  • delete_label

    Delete a label by ID. Removes the label from all associated posts or media.

  • delete_media

    Delete a media file by ID. Removes the file from storage and detaches it from any posts.

  • delete_post

    Delete a post by ID. Only draft and failed posts can be deleted.

  • delete_review_link

    Revoke a client review link. The posts it covered are untouched. Pro and Business only: on the single-seat Free and Lifetime plans this answers 403 FEATURE_DISABLED with the plan and an upgrade hint.

  • delete_rss_feed

    Delete an RSS autopost feed by ID. Stops polling; already-created posts are kept.

  • delete_schedule

    Delete a recurring schedule by ID. Stops all future posts from this schedule.

  • delete_template

    Delete a saved post template.

  • finalize_media_upload

    Record an uploaded file as a media file after the browser PUT (pairs with create_media_upload; used by the composer UI).

  • get_analytics

    Get an analytics summary for a date range. Returns total posts, status breakdown (published, failed, scheduled), per-platform stats, and daily post counts. Optional filters narrow every figure to matching posts; `compare` adds the equal-length previous window under `previous` (available for windows of 15 days or fewer — the 30-day statistics-retention cap applies).

  • get_channel_health

    Check the health status of a connected channel. Returns token validity, connection status, and any issues.

  • get_channel_options

    Get platform-specific options for a channel: Pinterest boards (or, with boardId, that board's sections), YouTube playlists, Tumblr blogs, Discord text channels, Threads location search.

  • get_conversation

    Get the messages of one Inbox conversation: the newest 500, oldest first, each with its direction (in from the other person, out sent by the workspace), text, attachments and time. Reading does not mark the conversation read. The Inbox is part of the Pro and Business plans; on other plans, or before it is available to the account, the call is refused with a message saying so.

  • get_media

    Get details of a single media file by ID. Returns metadata, URL, dimensions, and labels.

  • get_post

    Get a single post by ID with full details including platform statuses, labels, media files, recurring schedule info, and metrics. For a thread post, `threadParts` holds the parts and `threadMediaFiles` resolves the media they reference: that media is NOT in `mediaFiles`, which carries only the media on the post itself.

  • get_post_metrics

    Get engagement metrics for a published post. Returns likes, comments, shares, impressions, and other platform-specific metrics. IMPORTANT: every platform entry carries `metricsSupported` and `supportedMetrics` — a metric key NOT in `supportedMetrics` is stored as 0 because that platform's API has no such field, so report it as unavailable rather than as zero. X reports impressions/likes/comments/shares/saves (bookmarks); Bluesky and Mastodon report no impressions; Pinterest reports no reach; YouTube reports no shares or reach; Discord reports likes (reaction counts) and comments (thread replie…

  • get_queue_slot

    Get the organization's next available queue slot. Useful for finding the next optimal scheduling time.

  • get_quota_usage

    Check current account usage. Returns daily/monthly post counts, scheduled post counts, channel counts, and media storage usage. Also returns channelSlots — purchased extra channel slots ($2.99/month each, available on every plan; a seat-based subscription whose unused slots are auto-canceled before renewal): each active slot raises the effective total channel limit by one and allows one channel above the per-platform cap; per-slot autoRenews says whether it renews or lapses at expiresAt.

  • list_calendar_notes

    List calendar notes (free text pinned to a day — campaigns, holidays, 'no posts this week'; they never publish) in a date range of at most a year.

  • list_channel_sets

    List saved channel sets — named channel groupings for one-click multi-channel targeting. Returns id, name, and channelIds for each set, ordered by name.

  • list_channels

    List all connected social media channels (X/Twitter, Instagram, LinkedIn, Facebook, TikTok, etc.). Returns channel ID, platform, account name, and token status, plus a `capabilities` object saying whether the caller may create, publish or approve posts. Check that before attempting a write rather than discovering the permission from a 403.

  • list_client_connect_links

    List the organization's client-connect links, newest first — one-time links a client can open, with no BulkPublish account, to connect their own platform account. Pro and Business only: on the single-seat Free and Lifetime plans this answers 403 FEATURE_DISABLED with the plan and an upgrade hint.

  • list_conversations

    List Inbox conversations: direct messages, reviews and comment threads across the connected channels, newest activity first. Each conversation has its platform, kind (dm, review or comment), the other person, unread count, a preview of the last message, and canReply with replyNotice saying why a reply cannot be sent now. Internal team notes are not included. Results are paged: pass nextCursor back as cursor for the next page. The Inbox is part of the Pro and Business plans; on other plans, or before it is available to the account, the call is refused with a message saying so.

  • list_hashtag_groups

    List the organization's saved hashtag groups — named sets of hashtags to drop into a post.

  • list_labels

    List all labels available for tagging posts and media.

  • list_media

    List uploaded media files with optional search and pagination. Returns file metadata including URLs, dimensions, and labels.

  • list_platforms

    List every social platform BulkPublish supports and whether it is currently available. Check this before telling a user they can connect a platform or scheduling a post to one: a platform in state 'off' rejects post creation with a 403 PLATFORM_DISABLED error and holds any already-scheduled posts until it is re-enabled, and one in state 'connect_off' cannot accept new connections although existing channels keep publishing. Disabled platforms are still listed, with enabled=false and a reason. A platform may also carry a 'variants' object keyed by channel accountType for sub-platforms gated on t…

  • list_post_comments

    List the comments and reactions on one published post, per channel, read from each platform. Each channel's entry has its postPlatformId and each comment its id, which reply_to_comment and moderate_comment take, plus commentActions listing the actions that channel supports. Some platforms have no comment access (TikTok, Pinterest, Google Business, Telegram, Snapchat) and say so in a notice.

  • list_posts

    List posts with optional filters for status, search text, date range, channel, and label. Returns paginated results with platform statuses and metrics, ordered newest-first by publishedAt if the post is live, else scheduledAt, else createdAt.

  • list_review_links

    List the organization's client review links (batch review links), newest first, with how many posts each one covers. Pro and Business only: on the single-seat Free and Lifetime plans this answers 403 FEATURE_DISABLED with the plan and an upgrade hint.

  • list_rss_feeds

    List RSS autopost feeds — RSS/Atom feeds polled every 15 minutes whose new items automatically become posts. Returns name, feedUrl, channelIds, mode, fieldMapping (how items are rendered into posts; null = default), enabled, lastCheckedAt, and lastError for each feed.

  • list_schedules

    List all recurring post schedules. Returns schedule name, frequency/timeOfDay timing fields, target channels, active status, and nextRunAt. These schedules also appear in the web app: managed on the Repeat Posts page, with upcoming runs shown on the Calendar.

  • list_templates

    List the organization's saved post templates — reusable text to start a new post from. Filter by kind to get saved first-comment snippets instead of captions.

  • moderate_comment

    Like, unlike, hide, unhide or delete a comment on one of the workspace's published posts, on the platform, as the channel the post was published to. Likes and hides can be undone; delete is permanent and needs a role that can publish. Hiding or deleting also removes the comment from the Inbox. Which actions a channel supports is in its commentActions from list_post_comments (Threads supports hide and unhide; Facebook supports hide, unhide and delete). A comment hidden on Threads or Facebook comes back with hidden: true. If the channel's connection has stopped working, the call is refused and t…

  • publish_post

    Publish a draft or scheduled post immediately. The post will be queued for publishing to all its target channels. Requires a role with post:publish — contributors get 403 APPROVAL_REQUIRED and must submit the post for approval instead (create/update with requestApproval, then a teammate approves). To 'publish now' with approval, create_post with status 'scheduled', scheduledAt = now, requestApproval true and publishWhenApproved true, so it goes out the moment it is approved. Publishing a pending/rejected post as an approver implicitly approves it.

  • publish_story

    Publish a post as a story on Facebook or Instagram.

  • reject_post

    Reject a post awaiting team approval. Requires a role with post:approve. The post returns to draft with approvalStatus 'rejected' and the optional reason; the author is notified and can edit + reschedule to resubmit for approval. Rejecting sets publishWhenApproved to false. Pass the updatedAt you reviewed as ifUnmodifiedSince to refuse the rejection if the post changed since. Errors: 400 if the post is not awaiting approval or ifUnmodifiedSince is not a timestamp, 403 if the role lacks post:approve, 404 if not found, 409 if the post changed since you loaded it (checked when ifUnmodifiedSince i…

  • reply_to_comment

    Reply to a comment on one of the workspace's published posts. The reply is posted publicly on the platform right away, as the channel the post was published to, and it cannot be taken back from here. Up to 2,000 characters. If the channel's connection has stopped working, the call is refused and the channel needs reconnecting from the Channels page. Comment replies are on every plan except Free; on Free, or before they are available to the account, the call is refused with a message saying so.

  • reply_to_conversation

    Send a reply in an Inbox conversation. The message goes to the person on the platform right away, from the channel the conversation belongs to, and it cannot be unsent. Send text (up to 4,000 characters), up to 4 media library files, or both; reviews and comment threads take text only. Facebook Messenger and Instagram accept a reply only within 24 hours of the person's last message; after that the call is refused. If the channel's connection has stopped working, the call is refused and the channel needs reconnecting from the Channels page. The Inbox is part of the Pro and Business plans; on ot…

  • retry_post

    Retry publishing a failed or partially failed post. Only retries the platforms that failed, not the ones that already succeeded. Platforms in status 'unconfirmed' (the publish request may have reached the platform but its response was lost — the post may already be live) are NOT retried unless republish is true; if the post has unconfirmed platforms and no failed ones, the call fails with a 400 and code UNCONFIRMED_REQUIRES_REPUBLISH — ask the user to check the account on the platform, and only pass republish: true after they confirm the post is not live.

  • search_mentions

    Search for @mention suggestions on a channel (X, Bluesky, Mastodon, LinkedIn). On LinkedIn the query is a Page's URL slug (exact match), each result's handle is a ready-to-paste @[Name](urn:li:organization:ID) token, and vanityName is the slug it matched — check it against the Page you meant before using the token, since a display name alone is ambiguous.

  • share_post

    Create (or fetch) a post's read-only review link that anyone can open without signing in — for client approval outside the app. Returns { shareToken, url, created }. regenerate=true mints a new link and kills the old one. Pro and Business only: on the single-seat Free and Lifetime plans this answers 403 FEATURE_DISABLED with the plan and an upgrade hint.

  • unshare_post

    Revoke a post's review link so the URL stops working. Idempotent. Pro and Business only: on the single-seat Free and Lifetime plans this answers 403 FEATURE_DISABLED with the plan and an upgrade hint.

  • update_calendar_note

    Change a calendar note's day, text and/or colour (partial update — at least one field is required).

  • update_channel_set

    Update a channel set's name and/or channels (partial update — at least one field is required). A name that collides with another set fails with a 409, code DUPLICATE_NAME.

  • update_conversation

    Change how the workspace handles one Inbox conversation: mark it read or unread, archive or reopen it, snooze it until a time (at most 90 days out), or assign it to a teammate, who is notified. Nothing is sent to the other person and nothing changes on the platform. Send at least one field. The Inbox is part of the Pro and Business plans; on other plans, or before it is available to the account, the call is refused with a message saying so.

  • update_hashtag_group

    Rename a hashtag group and/or replace its hashtags (partial update — at least one field is required).

  • update_label

    Update an existing label's name or color.

  • update_media

    Set a media file's alt text (accessibility description). It belongs to the file, so one value covers every post that reuses it, and is sent to Instagram, LinkedIn, X, Bluesky, Tumblr and Discord. Pass an empty string to clear.

  • update_post

    Update an existing post. Can change content, schedule, media, labels, status, and platform-specific settings. Only draft, scheduled, failed, or partial posts can be edited; editing a failed post resets it to draft, a partial post stays partial. Set status to 'draft' or 'scheduled' to move the post between those states — scheduling a partial post re-queues only its failed channels; use publish_post to publish immediately.

  • update_rss_feed

    Update an RSS autopost feed (partial update). Note: changing feedUrl re-baselines the feed — its check state resets and only items published after the change are posted, so the new feed's backlog is not flooded.

  • update_schedule

    Update an existing recurring schedule. Can change name, content template, frequency/timing, timezone, media, or active status. The next run time is recomputed by the server when timing changes.

  • update_template

    Rename a template and/or replace its text (partial update — at least one field is required).

  • upload_media

    Upload a media file (image, video or document) from a URL or local file path. The file is stored in BulkPublish for use in posts. Supported formats: JPEG, PNG, WebP, GIF, MP4, MOV, WebM, and documents (PDF, Word .doc/.docx, PowerPoint .ppt/.pptx). Max 100MB. A document has no thumbnail or preview and can only be published to LinkedIn, as a `document` post. Provide either url OR filePath, not both.

Signals

Stars
3
Forks
1
Open issues
1
Weekly downloads
32
Last commit (this folder)
Oct 24, 2026 (5 days ago)
Last release
Oct 8, 2026 (20 days ago)
Last package publish
Oct 24, 2026 (5 days ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.azeemkafridi/bulkpublish
Version
1.42.0
Auth
Auth not stated, API key
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 25, 2026

More from azeemkafridi

Cite this page

BulkPublish MCP server. Agent Mart. https://agentmart.dev/connectors/azeemkafridi-bulkpublish (last updated 2026-10-25)