BulkPublish
io.github.azeemkafridiPublished by GitHub account azeemkafridiv1.42.0Updated Oct 27, 2026
Schedule, cross-post, and analyze social media posts across 15 platforms from AI agents.
The publisher's own server: Publish.fun
Overview
BulkPublish lets an AI assistant schedule, cross-post, and analyze social media posts across 15 platforms through the BulkPublish publishing API.
- What you can do
- Create, update, schedule, publish, retry, approve, reject and delete posts, including stories, carousels, threads and bulk actions
- List connected channels, check channel health, read platform options and manage saved channel sets
- Upload and manage media, including chunked uploads for large videos, plus labels and hashtag groups
- Read engagement metrics and analytics summaries, and open interactive dashboards and a post composer
- Manage recurring schedules, RSS autopost feeds, templates, calendar notes and review or client-connect links
- With the inbox profile, read conversations and comments, reply to them, and moderate comments
- When to use it
- Useful when an assistant should draft, schedule or publish social content across many connected accounts, report on post performance, or triage comments and messages, without switching to the BulkPublish web app.
- Requirements
- A BulkPublish account and API key supplied as BULKPUBLISH_API_KEY (starts with bp_). Local use needs Node 20.19 or later via npx or a global npm install; a hosted HTTP endpoint is also available. Optional BULKPUBLISH_TOOL_PROFILE selects core, inbox or full tools. OAuth is supported for the hosted server.
Installation
In SourceWeft
- Open BulkPublish in the dashboard and add it to a workspace.
- Connect the required credentials. They are stored privately and never shown on public pages.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Use with an agent
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.azeemkafridi%2Fbulkpublish/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Other MCP clients
Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.
{
"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)
Option 2: Global install
Option 3: From source
Requires Node ≥ 20.19.
npm run buildbundles the composer UI with Vite (build:ui), then compiles the server withtsc.
Configuration
Set your API key as an environment variable:
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
If you installed from source:
Claude Code
Add the MCP server to your Claude Code configuration:
Set the environment variable in your shell profile or .env file:
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):
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:
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:
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.
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.
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
License
MIT
Source: mcp-server/README.md at commit 5d608cd
Tools
0Version history
2- v1.42.0LatestOct 8, 2026
- v1.1.2Sep 16, 2026
Score
85% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 daysRequired25 pts
- Auth declaredRequired10 pts
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Other Publish integrations
Publish.fun
fun.publishOfficial publisher
Publish.fun lets an assistant submit research papers for AI review, track and revise them, upload figures, cite published work and file or answer reports.
new.estate — listing drafts
estate.newOfficial publisher
Remote MCP server that lets an assistant draft personal real estate listings on a user's new.estate account from a conversation.

Publish To All Skill Stores
Published by GitHub account xixi048
Local MCP server that helps an assistant list agent-skill stores, run a readiness check on a SKILL.md skill, and build the package shapes stores accept.

HaoyouBox Publish
com.haoyoubox
Publishes a single local HTML or Markdown file to HaoyouBox as an expiring, password-protected browser link and returns the link, password and expiry.

mcpship: check and publish MCP servers
Published by GitHub account emanueltns
Checks a remote MCP server against the Claude connector directory rules and guides its publication step by step.