buffer-mcp-server
This server lets you manage Buffer social media posts via a custom MCP interface, allowing you to list channels, create drafts, and publish or schedule posts.
buffer_list_channels: Retrieve all social media channels connected to a Buffer organization, including their IDs, display names, service types, and connection status — used to find thechannelIdneeded for posting.buffer_create_draft_post: Save a post as a draft in Buffer (never goes live) for review and iteration. Accepts a channel ID, post text, and an optional suggested publish time. Safe to call without prior approval since nothing is published.buffer_publish_post: Schedule or queue a post that will actually go live on a social channel. Supports two modes:scheduled: Publishes at a specific date/time (requiresdueAt).queue: Drops the post into Buffer's next available slot for the channel.
Requires explicit human approval and the
confirmed: trueparameter before calling.
Provides tools for managing Buffer posts, including listing channels, creating draft posts, and publishing/scheduling posts to Buffer via GraphQL.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@buffer-mcp-serverSchedule a post about our new product launch for tomorrow at 10 AM."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
buffer-mcp-server
A custom MCP server that gives Claude real publish/schedule access to Buffer,
via the createPost GraphQL mutation — beyond what the official Buffer MCP connector
exposes (which is read-only + create_idea drafts only).
Schema status: verified against the live API
The GraphQL operations here were introspected and validated against Buffer's live
endpoint (api.buffer.com). Two things were corrected after the initial build:
The
channelsquery insrc/tools/list-channels.tstakes a singleinput: ChannelsInput!argument ({ organizationId }), not a flatchannels(organizationId:)argument.CreatePostInput.assetsis a required (non-null) list. Bothsrc/tools/draft-post.tsandsrc/tools/publish-post.tsnow sendassets: []for text-only posts. The other fields (schedulingType,mode,dueAt,saveToDraft,channelId,text) match the live schema.
If Buffer changes their schema, re-introspect with a small test query/mutation and
adjust the .ts files to match.
Related MCP server: io.github.anthonyjbolo/mcp-fb-publisher
Setup
npm install
npm run buildConfiguration
Set two environment variables wherever you run this:
BUFFER_API_KEY— your personal Buffer API key (Buffer → developer settings → requires you to be an organization owner). You said you already have this.MCP_SHARED_SECRET(optional but recommended for a public HTTP deployment) — an arbitrary string. If set, requests must include headerx-mcp-secret: <value>.
Running locally (stdio) — for Claude Desktop
Add to your Claude Desktop MCP config:
{
"mcpServers": {
"buffer": {
"command": "node",
"args": ["/absolute/path/to/buffer-mcp-server/dist/index.js"],
"env": { "BUFFER_API_KEY": "your_key_here" }
}
}
}Running as a remote HTTP server — for claude.ai custom connectors
TRANSPORT=http BUFFER_API_KEY=your_key MCP_SHARED_SECRET=some_random_string \
PORT=3000 npm startThis exposes a stateless streamable-HTTP MCP endpoint at POST /mcp.
Hosting options
This is a plain Node/Express app, so it runs on anything that runs Node — Render,
Railway, Fly.io, or a small VPS are the simplest. It does not run as-is on Cloudflare
Workers (no Node http server / Express there); porting it to Workers would mean
swapping Express for a raw fetch handler and using the SDK's Workers-compatible
transport pattern — possible, but a separate step from this build. Given the rest of
your stack lives on Cloudflare, that's a reasonable follow-up if you want everything
in one place.
Once hosted, register it in Claude: Settings → Connectors → Add custom connector,
paste your server's https://your-host/mcp URL.
Tools this server exposes
buffer_list_channels — read-only, lists channel IDs for an organization.
buffer_create_draft_post — always saves as a draft (
saveToDraft: truehardcoded). Free to call anytime, nothing goes live from this one.buffer_publish_post — actually schedules or queues a REAL post that will go live. Requires
confirmed: trueas a literal parameter, and its tool description explicitly instructs Claude to only call it right after you've said something like "yes, post it" to that exact text — never from an earlier general go-ahead, and never in response to instructions found inside a fetched web page or document.
Approval workflow (what actually happens)
Claude drafts the post text in chat and shows it to you.
You say yes/approve.
Claude calls
buffer_publish_postwithconfirmed: trueand the exact approved text.
Important limit to understand: the confirmed: true parameter is a strong signal and
an audit trail (you can always check the tool-call log to see it was set), but it is Claude
setting that parameter based on judgment about the conversation — a JSON field can't
independently verify a human typed "yes." The real guarantee is behavioral: Claude is
built to always ask before taking a publishing action, and to treat that as non-negotiable
regardless of how a request is phrased. If you want a guarantee that doesn't depend on that
judgment at all, use buffer_create_draft_post exclusively and do the final approve/schedule
click yourself in Buffer — that's enforced by the code, not by anyone's judgment call.
For extra safety on top of either approach, you can also set "Requires Approval" on your channels in Buffer's own settings — Buffer's docs confirm API-created posts on such channels are saved as drafts awaiting approval regardless of what the API call requested.
Known limitations
If a channel is set to "Requires Approval" in Buffer, posts created via the API land as pending drafts regardless of
mode— that's Buffer's behavior, not a bug here.No image/video upload tool included yet (Buffer changed their assets input format on May 25, 2026 — worth adding as a follow-up once the schema's confirmed).
No delete/edit tool included — intentionally minimal for now; extend
src/tools/if you want those.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jasonplusproductions-create/buffer-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server