BulkPublish

io.github.azeemkafridi由 GitHub 账号 azeemkafridi 发布v1.42.0更新于 Oct 27, 2026

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

发布方自己的服务:Publish.fun

已验证Streamable HTTP可网页运行沟通与协作数据与分析商业与电商

概览

AI 生成的概览

BulkPublish 让 AI 助手通过 BulkPublish 发布 API,在 15 个平台上排期、跨平台发布并分析社交媒体内容。

可以做什么
  • 创建、修改、排期、发布、重试、审批、驳回和删除帖子,支持快拍、轮播、串文和批量操作
  • 列出已连接渠道、检查渠道令牌健康、读取平台选项并管理渠道分组
  • 上传和管理媒体(含大视频分块上传)、标签和话题标签组
  • 读取互动指标与分析汇总,并打开交互式仪表盘和发帖编辑器
  • 管理循环排期、RSS 自动发布源、模板、日历备注以及审阅链接和客户连接链接
  • 使用 inbox 配置时,可读取会话与评论、回复并管理评论
适用场景
适合让助手在多个已连接账号上起草、排期或发布社交内容,汇报帖子表现,或整理评论与私信,而无需切换到 BulkPublish 网页端。
运行要求
需要 BulkPublish 账号和 API 密钥,通过环境变量 BULKPUBLISH_API_KEY 提供(以 bp_ 开头)。本地运行需 Node 20.19 或更高版本,可用 npx 或全局 npm 安装;也可使用托管 HTTP 端点。可选 BULKPUBLISH_TOOL_PROFILE 选择 core、inbox 或 full 工具集。托管服务器支持 OAuth。
安装前请注意
该 API 密钥可访问整个工作区,请勿放入共享配置;托管服务器还允许通过连接 URL 或 Authorization 请求头传入密钥。许多工具会发布、发送回复、管理或删除内容,部分操作不可撤销。RSS 源可自动发布,循环排期也会自行发帖。帖子内容和媒体会发送到所连接的社交平台。

安装

在 SourceWeft 中

  1. 打开 控制台中的 BulkPublish,将其添加到工作区。
  2. 连接 所需的 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.azeemkafridi%2Fbulkpublish/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。 客户端会在首次连接时完成 OAuth 登录。

{
  "mcpServers": {
    "bulkpublish": {
      "type": "http",
      "url": "https://mcp.bulkpublish.com/mcp"
    }
  }
}

README

BulkPublish MCP Server

A Model Context Protocol server that lets Claude and other AI assistants interact with the BulkPublish social media publishing API.

What it does

This MCP server exposes BulkPublish API operations as tools that AI assistants can call directly. You can ask Claude to schedule posts, check analytics, upload media, manage labels, and more — all through natural conversation.

Installation

Option 1: npx (recommended)

bash
npx @bulkpublish/mcp-server

Option 2: Global install

bash
npm install -g @bulkpublish/mcp-serverbulkpublish-mcp

Option 3: From source

bash
git clone https://github.com/azeemkafridi/bulkpublish-api.gitcd bulkpublish-api/mcp-servernpm installnpm run buildnode dist/index.js

Requires Node ≥ 20.19. npm run build bundles the composer UI with Vite (build:ui), then compiles the server with tsc.

Configuration

Set your API key as an environment variable:

bash
export BULKPUBLISH_API_KEY=bp_your_api_key_here

Get your API key at app.bulkpublish.com/developer.

Claude Desktop

Add this to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

json
{  "mcpServers": {    "bulkpublish": {      "command": "npx",      "args": ["-y", "@bulkpublish/mcp-server"],      "env": {        "BULKPUBLISH_API_KEY": "bp_your_api_key_here"      }    }  }}

If you installed from source:

json
{  "mcpServers": {    "bulkpublish": {      "command": "node",      "args": ["/absolute/path/to/bulkpublish-api/mcp-server/dist/index.js"],      "env": {        "BULKPUBLISH_API_KEY": "bp_your_api_key_here"      }    }  }}

Claude Code

Add the MCP server to your Claude Code configuration:

bash
claude mcp add bulkpublish -- npx -y @bulkpublish/mcp-server

Set the environment variable in your shell profile or .env file:

bash
export BULKPUBLISH_API_KEY=bp_your_api_key_here

Remote / hosted server (HTTP)

The npx/stdio setup above runs the server locally. Web clients that cannot spawn a local process — claude.ai custom connectors and Smithery's gateway — connect to a hosted HTTP endpoint instead. Alongside the stdio bin, the server ships a Streamable HTTP transport (dist/http.js, run with npm run start:http):

EndpointPurpose
POST /mcpMCP Streamable HTTP (stateless)
GET /.well-known/mcp/server-card.jsonStatic metadata so registries can skip scanning
GET /healthLiveness check

It is multi-tenant — the process holds no API key. Each caller supplies their own bp_… key per request via the connection URL (?key=bp_…), a Smithery ?config= blob, or an Authorization: Bearer bp_… / X-BulkPublish-Key header. initialize, tools/list, and resources/* need no key (so scans and tool discovery work); a tools/call without one returns 401.

A Dockerfile is included:

bash
docker build -t bulkpublish-mcp . && docker run -p 8080:8080 bulkpublish-mcp

Once deployed, add it to claude.ai → Settings → Connectors → Add custom connector as https://<host>/mcp?key=bp_…, or publish the https://<host>/mcp URL to Smithery.

Auto-connect for organizations

The hosted server at https://mcp.bulkpublish.com/mcp supports enterprise-managed authorization (the MCP io.modelcontextprotocol/enterprise-managed-authorization extension). An organization on Claude Team or Enterprise can connect every member to BulkPublish at once, with no sign-in screen and no pasted API key: the workspace owner trusts the organization's issuer (its Claude organization, or its identity provider) under API → MCP Auto-connect in BulkPublish, and members are matched to the workspace by their verified email address. In Claude, an organization Owner sets it up under Organization settings → Connectors → Set up auto-connect.

For client developers: the token endpoint accepts grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer with an identity assertion, from a public client identified by a Client ID Metadata Document (an https client_id). Access tokens from this grant last up to an hour and carry no refresh token. Dynamic client registration and the authorization-code flow are unchanged.

Tool profiles

The server ships three tool profiles, chosen with BULKPUBLISH_TOOL_PROFILE:

ProfileToolsDefault for
core26 — channels, posts, media, analytics, labels, approvals, post comments, channel sync settings, and the interactive panelsThe hosted HTTP server (dist/http.js), which is what the Claude and ChatGPT directories list
inbox32 — everything in core, plus the Inbox and comment-reply tools: list_conversations, get_conversation, reply_to_conversation, update_conversation, reply_to_comment, moderate_commentOpt-in on a hosted deployment (BULKPUBLISH_TOOL_PROFILE=inbox). The core tools in it are identical to the core profile's
fullEvery tool (including the Inbox and comment tools; label management, hashtag groups, templates, calendar notes, review links, client-connect links, recurring schedules, channel sets, RSS feeds, chunked uploads, quota)The local stdio server (npx @bulkpublish/mcp-server)

Set BULKPUBLISH_TOOL_PROFILE=full on a hosted deployment to expose everything, or core locally to keep a small tool list. The panels' buttons call back into create_post, publish_post, retry_post, update_post, delete_post, list_channels, list_media, get_post, create_media_upload and finalize_media_upload, so all of those are in core.

Every tool carries a title and explicit readOnlyHint, destructiveHint, idempotentHint and openWorldHint booleans; npm run check:annotations verifies that for every profile (add --table to print the per-tool justification table used in directory submissions).

Available Tools

Tools marked ★ are in the core profile (see Tool profiles); tools marked ✉ are in inbox (with every ★ tool); the rest need full.

ToolDescription
Posts
create_post ★Create and optionally schedule a post (supports reels, stories, carousels, threads via postTypeOverrides)
compose_post ★Open an interactive composer UI (MCP Apps) to draft/schedule a post; submits via create_post
update_post ★Update a draft or scheduled post: content, timing, media, labels, the full channel list (add or drop channels), per-platform text, thread parts, assignee and recurring schedule
get_post ★Get a single post with full details
list_posts ★List posts with filters (status, search, date range, labels, recurring)
delete_post ★Delete a post
publish_post ★Publish a draft post immediately
retry_post ★Retry a failed post
approve_post ★Approve a post awaiting team approval (roles with post:approve)
reject_post ★Reject a pending post back to draft, with an optional reason
get_post_metrics ★Get engagement metrics (impressions, likes, comments, shares). Each platform entry carries supportedMetrics — a key not in that list is a stored 0, not a measurement
publish_storyPublish as a story to Facebook or Instagram
bulk_postsBulk delete, retry or reschedule up to 100 posts
get_queue_slot ★Get the next optimal time slot for a channel
Channels
list_channels ★List all connected social media channels
get_channel_healthCheck channel token health
get_channel_options ★Get platform-specific options (boards, playlists)
update_channel ★Turn an X channel's analytics sync or DM/reply reading on or off
search_mentionsSearch users for @mention (X, Bluesky, Mastodon, LinkedIn Pages — LinkedIn results carry the vanityName slug they matched on)
Channel Sets
list_channel_setsList saved channel groups for one-click multi-channel targeting
create_channel_setSave a named group of channels (max 50 per org, names unique per org)
update_channel_setRename a set or change its channels
delete_channel_setDelete a channel set
RSS Autopost
list_rss_feedsList RSS/Atom feeds polled every 15 minutes (new items become posts)
create_rss_feedAdd a feed (max 20 per org); mode = draft (default, items become drafts) or publish (auto-published); optional fieldMapping controls how items render (caption template, media pick, truncation, per-channel overrides)
update_rss_feedChange, pause, or re-point a feed (changing feedUrl re-baselines it — the backlog is not flooded)
delete_rss_feedStop and remove a feed
Media
upload_media ★Upload a media file from a URL (or local path on the stdio server)
get_mediaGet a media file by ID
list_media ★List uploaded media files
delete_mediaDelete a media file
create_media_upload ★Reserve a presigned R2 URL for a direct browser upload (used by the composer)
finalize_media_upload ★Record an uploaded object as a media file after the browser PUT (used by the composer)
create_multipart_uploadStart a chunked upload for large media (videos up to 1GB) — presigned URLs for fixed 10MB parts
complete_multipart_uploadAssemble the uploaded parts (partNumber + ETag each) and record the media file
abort_multipart_uploadCancel an in-progress chunked upload and free its stored parts
Labels
create_labelCreate a new label
list_labels ★List all labels
update_labelUpdate a label name or color
delete_labelDelete a label
Analytics
get_analytics ★Get analytics summary for a date range
Schedules
list_schedulesList recurring schedules
create_scheduleCreate a recurring schedule
update_scheduleUpdate a schedule
delete_scheduleDelete a schedule
Inbox and comments
list_conversations ✉List direct messages, reviews and comment threads, newest activity first, with filters and paging (Pro and Business plans)
get_conversation ✉Read one conversation's messages, oldest first; does not mark it read
reply_to_conversation ✉Send a reply to the person on the platform right away; it cannot be unsent
update_conversation ✉Mark read or unread, archive or reopen, snooze, or assign a conversation; nothing is sent
list_post_comments ★List the comments and reactions on a published post, per channel, with the ids the reply and moderate tools take
reply_to_comment ✉Post a public reply to a comment right away, as the channel the post went out on
moderate_comment ✉Like, unlike, hide, unhide or delete a comment on the platform (delete is permanent)
Account
get_quota_usageCheck current account usage (hidden when BULKPUBLISH_HIDE_BILLING=1)
Interactive UI (MCP Apps)
compose_post ★Open the interactive post composer (also listed above)
view_analytics ★Open an interactive analytics dashboard
view_posts ★Open an interactive posts list
view_channels ★Open an interactive channels view
view_media ★Open an interactive media gallery
view_quotaOpen an interactive account-usage view (hidden when BULKPUBLISH_HIDE_BILLING=1)

Interactive UI (MCP Apps)

In hosts that support MCP Apps — Claude, ChatGPT, VS Code, Goose, Postman, and the Smithery playground — the compose_post tool opens an interactive composer rendered inline in the conversation: pick channels, write content, optionally schedule, then submit. On submit it calls create_post through the host bridge, so the sandboxed iframe never holds your API key. Hosts without MCP Apps support simply receive a plain-text summary, so nothing breaks.

Several tools render UIs — compose_post (composer), view_analytics, view_posts, view_channels, view_media, and view_quota. Each is a self-contained widget under src/ui/<name>/, bundled into a single HTML file with Vite (one single-input pass per widget — see scripts/build-ui.mjs) and inlined into the server via src/ui/widgets.generated.ts. They share the BulkPublish web app's design tokens (src/ui/tokens.css), so the look matches. A View receives its data from the triggering tool's structuredContent and can call other tools back through the host bridge — so the sandboxed iframe never holds your API key. Hosts without MCP Apps support simply receive a plain-text summary.

Prompts

The server also lists ready-made prompts: starting points your MCP client shows in its prompt or slash menu (for example /schedule_post or /weekly_report). Each one tells the assistant which tools to call, the limits that apply, and to ask before anything is published, sent or deleted.

A prompt is listed only when every tool it needs is available, so what you see depends on the tool profile: all means every profile, including the hosted core server; inbox, full needs the inbox or full profile; full needs the full profile (the npm server's default). plan_usage is also left out when BULKPUBLISH_HIDE_BILLING=1. Prompts read nothing from your account until the assistant follows them.

PromptWhat it doesProfiles
getting_startedA quick tour: which accounts are connected, what is scheduled next, and what was published recently.all
check_channel_connectionsFind accounts that are disconnected, need reconnecting, or have expiring access.all
platform_availabilityList every supported platform and whether it can be connected and posted to right now.full
plan_usageHow much of the plan's posts, channels and storage are used.full
draft_postWrite a post from an idea and save it as a draft on the accounts you choose. Nothing is published.all
schedule_postWrite and schedule a post for a specific time, or the next free slot in your queue.all
publish_nowWrite a post and publish it immediately, after you confirm.all
add_to_queueSchedule a post into your next free queue slot, or at the very end of the queue.all
compose_in_editorOpen the interactive composer, pre-filled with your text, to pick accounts and media yourself.all
cross_post_adaptedOne message rewritten to fit each platform's length, tone and format, in a single post.all
write_threadTurn an idea or article into a multi-part thread for X, Threads, Bluesky or Mastodon.all
post_with_mediaUpload images or a video and attach them to a new post.all
reuse_library_mediaFind a file already in your media library and build a post around it.all
video_postPost one video as a YouTube video or Short, TikTok, Instagram Reel, Facebook Reel and more, with the right settings for each.all
carousel_postA multi-image post: Instagram, Facebook or Threads carousel, Pinterest carousel, LinkedIn multi-image, TikTok photo slideshow.all
poll_postPost a native poll on X, LinkedIn, Threads, Mastodon, Discord or Telegram.all
repost_or_quoteRepost or quote an existing post on X, Bluesky, Threads or Mastodon, reshare on LinkedIn, or reblog on Tumblr.all
story_postPost an image or short video as an Instagram, Facebook or Snapchat story.all
repeating_postA post that re-publishes daily, weekly, every two weeks or monthly (evergreen content, reminders).all
auto_engagement_boostPost a follow-up comment, or repost automatically, once a post reaches a number of likes.all
tracked_links_postShorten the links in a post and count their clicks, or force links to publish as written.all
submit_for_approvalSchedule a post that waits for a teammate to approve it before publishing.all
upcoming_postsEverything going out in a date range, soonest first, with gaps and clashes flagged.all
find_postSearch posts by text, status, account, label or date.all
edit_postChange a draft, scheduled, failed or partial post: text, time, media, accounts or labels.all
reschedule_postMove a post to a new time, or to the top or bottom of the queue.all
change_post_accountsAdd accounts to a post or drop some, keeping the rest as they are.all
unschedule_postTake a scheduled post off the calendar and keep it as a draft.all
delete_postsClean up drafts and failed posts you no longer need.all
fix_failed_postsFind posts that failed or partly failed, explain why, and retry the right ones safely.all
posts_dashboardAn interactive list of posts with status, schedule and accounts.all
my_assigned_postsPosts a teammate has handed to you, and what each one needs.all
posts_by_labelList posts carrying one or more labels, e.g. one campaign.all
approval_queueGo through posts waiting for approval and approve or reject each one.all
resubmit_rejectedRead why posts were rejected, revise them, and send them back for approval.all
performance_reportPosting activity and results over a date range, optionally compared with the period before.all
weekly_reportThe last 7 days compared with the 7 before, with highlights.all
post_performanceLikes, comments, shares, views and link clicks for one post, per platform.all
top_postsRank recent published posts by engagement.all
platform_comparisonWhich networks get the most out of your posting.all
content_type_analysisCompare text-only, image and video posts, and single posts against threads.all
campaign_reportResults for the posts carrying a campaign label.all
link_click_reportClicks on the tracked short links in your recent posts.all
analytics_dashboardInteractive charts for a date range.all
x_sync_settingsChoose whether BulkPublish reads analytics, likers, messages and replies for an X account.all
read_post_commentsWho commented and reacted on one of your published posts, per platform.all
reply_to_commentsDraft replies to comments on a published post and post the ones you approve.inbox, full
moderate_commentsFind spam or abusive comments on a post and hide, delete or like them.inbox, full
inbox_triageSort unread messages, reviews and comment threads by urgency, and tidy them up.inbox, full
reply_to_messagesDraft replies to unanswered direct messages and send the ones you approve.inbox, full
respond_to_reviewsDraft thoughtful responses to customer reviews and post the ones you approve.inbox, full
inbox_searchFind conversations by a person's name, handle or words in the messages.inbox, full
upload_filesAdd images, videos or documents to your media library for later posts.all
large_video_uploadUpload a video over 100MB (up to 1GB) in 10MB chunks. Needs a client that can send HTTP requests itself.full
media_library_browseOpen an interactive gallery of your uploaded media.all
alt_text_auditFind images without alt text and write descriptions for them.full
media_cleanupFind files you no longer need and delete them, without breaking scheduled posts.full
manage_labelsCreate, rename, recolour or delete the labels you tag posts and media with.full
hashtag_groupsResearch and save reusable hashtag sets, or add a saved set to a post.full
caption_templatesSave reusable caption and first-comment text, or start a post from a saved template.full
calendar_notesPin campaigns, holidays and blackout days to the calendar. Notes never publish.full
channel_setsSave named groups of accounts (e.g. 'All brand accounts', 'Client A') for quick targeting.full
plan_content_weekA full week of posts across your accounts, saved as drafts or scheduled.all
plan_campaignA multi-week campaign: teaser, launch and follow-up posts, labelled so you can report on it.all
repurpose_contentTurn an article, video script or newsletter into a set of posts and threads.all
recurring_scheduleA rule that creates and publishes a post on a fixed cadence (tips, weekly roundups).full
manage_schedulesSee every recurring schedule, then pause, change or delete them.full
rss_autopostTurn new blog or news items into posts automatically, as drafts or published.full
rss_feed_troubleshootCheck every RSS feed for errors, and pause, re-point or remove them.full
client_review_linkA link a client can open without an account to review one post or a whole batch.full
revoke_review_linksStop old review links from working.full
client_connect_linkA one-time link a client opens to connect their own social account, without sharing a password or needing a BulkPublish account.full
client_onboardingConnect link, account group, label and a first batch of draft posts for a new client.full
post_to_facebookWrite and schedule a post for Facebook, with its post types, settings and limits.all
post_to_instagramWrite and schedule a post for Instagram, with its post types, settings and limits.all
post_to_xWrite and schedule a post for X, with its post types, settings and limits.all
post_to_tiktokWrite and schedule a post for TikTok, with its post types, settings and limits.all
post_to_youtubeWrite and schedule a post for YouTube, with its post types, settings and limits.all
post_to_threadsWrite and schedule a post for Threads, with its post types, settings and limits.all
post_to_blueskyWrite and schedule a post for Bluesky, with its post types, settings and limits.all
post_to_pinterestWrite and schedule a post for Pinterest, with its post types, settings and limits.all
post_to_gmbWrite and schedule a post for Google Business Profile, with its post types, settings and limits.all
post_to_linkedinWrite and schedule a post for LinkedIn, with its post types, settings and limits.all
post_to_mastodonWrite and schedule a post for Mastodon, with its post types, settings and limits.all
post_to_discordWrite and schedule a post for Discord, with its post types, settings and limits.all
post_to_telegramWrite and schedule a post for Telegram, with its post types, settings and limits.all
post_to_tumblrWrite and schedule a post for Tumblr, with its post types, settings and limits.all
post_to_snapchatWrite and schedule a post for Snapchat, with its post types, settings and limits.all

Example Conversation

Here is an example of using the BulkPublish tools in Claude:

You: Schedule a post for tomorrow at 9am EST saying "Excited to announce our new feature! Check it out at example.com" to all my connected channels.

Claude: Let me check your connected channels first.

[Calls list_channels]

You have 3 active channels:

  • X/Twitter: @yourcompany (ID: 1)
  • LinkedIn: Your Company Page (ID: 2)
  • Instagram: @yourcompany (ID: 3)

Now I'll schedule the post for tomorrow at 9:00 AM Eastern.

[Calls create_post with content, channels, scheduledAt: "2025-01-16T14:00:00Z", timezone: "America/New_York", status: "scheduled"]

Done! Your post has been scheduled:

  • Post ID: 42
  • Status: scheduled
  • Scheduled for: January 16, 2025 at 9:00 AM EST
  • Channels: X/Twitter, LinkedIn, Instagram

You: How did my posts perform this month?

Claude: [Calls get_analytics with from: "2025-01-01", to: "2025-01-31"]

Here is your January analytics summary:

  • Total posts: 28
  • Published: 25
  • Failed: 1
  • Scheduled (pending): 2
  • By platform: X/Twitter (25 posts, 24 published), LinkedIn (20 posts, 19 published), Instagram (15 posts, all published)
  • Best day: January 12 with 5 posts

You: Upload this image and create a draft post with it: https://example.com/product-launch.png

Claude: [Calls upload_media with url]

Image uploaded successfully (ID: 15, 1200x630px, 245KB).

[Calls create_post with content and mediaFileIds]

Draft post created (ID: 43) with the product launch image attached. You can review and publish it when ready.

Environment Variables

VariableRequiredDefaultDescription
BULKPUBLISH_API_KEYYes—Your API key (starts with bp_)
BULKPUBLISH_BASE_URLNohttps://app.bulkpublish.comAPI base URL (for self-hosted instances)
BULKPUBLISH_TOOL_PROFILENofull (stdio) / core (hosted HTTP)core, inbox or full — see Tool profiles
BULKPUBLISH_HIDE_BILLINGNo—1 drops get_quota_usage and view_quota (only relevant with full; core never includes them)

License

MIT

来源:mcp-server/README.md,提交 5d608cd

工具

0
该服务器需要登录,因此 SourceWeft 无法在没有账号的情况下读取其工具,也未收录。已连接账号所能看到的内容可能因账号及其权限而异。

版本历史

2
  1. v1.42.0最新Oct 8, 2026
  2. v1.1.2Sep 16, 2026

评分

已满足适用检查项的 85%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Publish 集成