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
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/mcpRemote (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.
About
Reviews
Write a reviewNo 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_analyticsget_channel_healthget_channel_optionsget_conversationget_mediaget_postget_post_metricsget_queue_slotget_quota_usagelist_calendar_noteslist_channel_setslist_channels
Show 13 more tools
list_client_connect_linkslist_conversationslist_hashtag_groupslist_labelslist_medialist_platformslist_post_commentslist_postslist_review_linkslist_rss_feedslist_scheduleslist_templatessearch_mentions
Write 35 · Create, change, send or run things.
abort_multipart_uploadapprove_postbulk_postscomplete_multipart_uploadcreate_calendar_notecreate_channel_setcreate_client_connect_linkcreate_hashtag_groupcreate_labelcreate_media_uploadcreate_multipart_uploadcreate_post
Show 23 more tools
create_review_linkcreate_rss_feedcreate_schedulecreate_templatefinalize_media_uploadpublish_postpublish_storyreject_postreply_to_commentreply_to_conversationretry_postshare_postupdate_calendar_noteupdate_channel_setupdate_conversationupdate_hashtag_groupupdate_labelupdate_mediaupdate_postupdate_rss_feedupdate_scheduleupdate_templateupload_media
Delete 13 · Delete, drop, revoke or wipe things.
delete_calendar_notedelete_channel_setdelete_client_connect_linkdelete_hashtag_groupdelete_labeldelete_mediadelete_postdelete_review_linkdelete_rss_feeddelete_scheduledelete_templatemoderate_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 codeapp.invalid· found in codebulkpublish.com· found in codechatgpt.com· found in codeclaude.ai· found in coded46a1bf4b4491a708ec851e1aade51e5.r2.cloudflarestorage.com· found in codefonts.googleapis.com· found in codefonts.gstatic.com· found in codegithub.com· found in codeimages.bulkpublish.com· found in codemcp.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_uploadAbort 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_postApprove 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_postsPerform a bulk action on multiple posts. Supports deleting, retrying, or rescheduling multiple posts at once.
complete_multipart_uploadComplete 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_notePin a note to a day on the content calendar. Not a post: nothing is published.
create_channel_setCreate 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_linkCreate 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_groupSave 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_labelCreate a new label for organizing posts or media files.
create_media_uploadReserve a presigned upload URL for a direct browser upload (used by the composer UI). For scripted uploads use upload_media instead.
create_multipart_uploadStart 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_postCreate 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_linkCreate 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_feedAdd 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_scheduleCreate 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_templateSave 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_noteDelete a calendar note.
delete_channel_setDelete a channel set by ID. Does not affect the channels themselves.
delete_client_connect_linkRevoke 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_groupDelete a saved hashtag group. Posts that already contain its hashtags are untouched.
delete_labelDelete a label by ID. Removes the label from all associated posts or media.
delete_mediaDelete a media file by ID. Removes the file from storage and detaches it from any posts.
delete_postDelete a post by ID. Only draft and failed posts can be deleted.
delete_review_linkRevoke 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_feedDelete an RSS autopost feed by ID. Stops polling; already-created posts are kept.
delete_scheduleDelete a recurring schedule by ID. Stops all future posts from this schedule.
delete_templateDelete a saved post template.
finalize_media_uploadRecord an uploaded file as a media file after the browser PUT (pairs with create_media_upload; used by the composer UI).
get_analyticsGet 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_healthCheck the health status of a connected channel. Returns token validity, connection status, and any issues.
get_channel_optionsGet 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_conversationGet 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_mediaGet details of a single media file by ID. Returns metadata, URL, dimensions, and labels.
get_postGet 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_metricsGet 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_slotGet the organization's next available queue slot. Useful for finding the next optimal scheduling time.
get_quota_usageCheck 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_notesList 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_setsList saved channel sets — named channel groupings for one-click multi-channel targeting. Returns id, name, and channelIds for each set, ordered by name.
list_channelsList 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_linksList 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_conversationsList 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_groupsList the organization's saved hashtag groups — named sets of hashtags to drop into a post.
list_labelsList all labels available for tagging posts and media.
list_mediaList uploaded media files with optional search and pagination. Returns file metadata including URLs, dimensions, and labels.
list_platformsList 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_commentsList 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_postsList 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_linksList 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_feedsList 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_schedulesList 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_templatesList 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_commentLike, 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_postPublish 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_storyPublish a post as a story on Facebook or Instagram.
reject_postReject 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_commentReply 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_conversationSend 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_postRetry 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_mentionsSearch 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_postCreate (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_postRevoke 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_noteChange a calendar note's day, text and/or colour (partial update — at least one field is required).
update_channel_setUpdate 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_conversationChange 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_groupRename a hashtag group and/or replace its hashtags (partial update — at least one field is required).
update_labelUpdate an existing label's name or color.
update_mediaSet 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_postUpdate 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_feedUpdate 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_scheduleUpdate 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_templateRename a template and/or replace its text (partial update — at least one field is required).
upload_mediaUpload 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
- Packages
- npm @bulkpublish/mcp-server
- License
- MIT
- Repository
- github.com/azeemkafridi/bulkpublish-api
- First seen
- Oct 24, 2026
- Last checked
- Oct 25, 2026
More from azeemkafridi
- 0.604score
media-library
azeemkafridi
Upload images and video to BulkPublish and browse the media library, so files can be attached to posts.
SkillAFreshness: A★ 3Claude Code +9 - 0.603score
schedule-post
azeemkafridi
Create, schedule, or publish social media posts via BulkPublish MCP.
SkillAFreshness: A★ 3Claude Code +9 - 0.601score
platform-reference
azeemkafridi
Complete reference for all 15 BulkPublish platforms — post types, media requirements, required fields, character limits, and platformSpecific options.
SkillAFreshness: A★ 3Claude Code +9 - 0.564score
get-analytics
azeemkafridi
Pull analytics, engagement metrics, and performance data from BulkPublish.
SkillBFreshness: B★ 3Claude Code +9 - 0.564score
manage-channels
azeemkafridi
List connected social media channels and check what the caller may do with them in BulkPublish.
SkillBFreshness: B★ 3Claude Code +9 - 0.559score
platform-content-adapter
azeemkafridi
Adapt social media content for multiple platforms while preserving the message, voice, and call to action.
SkillBFreshness: B★ 3Claude Code +9
Cite this page
BulkPublish MCP server. Agent Mart. https://agentmart.dev/connectors/azeemkafridi-bulkpublish (last updated 2026-10-25)