Buffer MCP server for AI agents

Live

OAUTH 2.0

SOCIAL MEDIA

Marketing

Buffer gives your agent social media scheduling across your connected channels: create, edit, and queue posts, capture ideas, manage tags and hashtag snippets, and check daily posting limits.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Buffer
agent · Acme Q3
Run
What's scheduled on our LinkedIn channel this week?
S
buffer_list_posts
98ms
Social media agent
5 posts are scheduled on the LinkedIn channel this week. The next one goes out Tuesday at 9:00am.
Sources: Buffer posts, 1 channel
buffer
5 posts
18:29
Message Claude...

Tools your social media agent reaches for on Buffer, scoped per user.

CALL ANY TOOL
23 tools for social media in Buffer: list channels and posts, create, edit, and reorder queued posts, capture ideas, manage tags and hashtag snippets, and check daily posting limits.
buffer_create_idea
Create idea
Create an idea in a Buffer organization to capture content before it is assigned to a channel. Returns the created idea with id, title, text, services, media and timestamps. Use create_idea to save draft content for later. Use create_post to schedule content on a channel now.
Parameters
Name
Type
Required
Description
organizationId
string
Required
ID of the Buffer organization that owns the idea. Get it from buffer_list_organizations.
date
string
Optional
Target date for the idea as an ISO 8601 datetime, often used for planning.
imageUrls
array
Optional
Publicly accessible HTTPS URLs of images to attach to the idea. Video is not supported for ideas.
services
array
Optional
Social networks the idea targets. Valid values: bluesky, facebook, googlebusiness, instagram, linkedin, mastodon, pinterest, startPage, substack, threads, tiktok, twitter, whatsapp, youtube.
text
string
Optional
Main body text of the idea.
title
string
Optional
Title or headline of the idea.
buffer_create_post
Post create
buffer_create_snippet
Create snippet
buffer_create_tag
Create tag
buffer_delete_post
Post delete
buffer_delete_snippet
Delete snippet
buffer_delete_tag
Delete tag
buffer_edit_post
Post edit
buffer_get_account
Get account
buffer_get_channel
Get channel
buffer_get_daily_posting_limits
Get daily posting limits
buffer_get_post
Post get
buffer_get_tag
Get tag
buffer_list_channels
List channels
buffer_list_idea_groups
List idea groups
buffer_list_ideas
List ideas
buffer_list_organizations
List organizations
buffer_list_posts
List posts
buffer_list_snippets
List snippets
buffer_list_tags
List tags
buffer_move_post_in_queue
Move post in queue
buffer_update_snippet
Update snippet
buffer_update_tag
Update tag
Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Buffer tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["buffer"], toolNames: [
    "buffer_list_channels",
    "buffer_create_post",
    "buffer_list_posts"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Schedule this launch post on our LinkedIn channel for Tuesday at 9am" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["buffer"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Schedule this launch post on our LinkedIn channel for Tuesday at 9am" }],
  tools,
});

// Execute the tool call with the user's vaulted Buffer OAuth token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["buffer"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Schedule this launch post on our LinkedIn channel for Tuesday at 9am" }],
  tools,
});

// Tool call runs with the user's vaulted Buffer OAuth token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["buffer"] }, pageSize: 100,
});

const agent = new Agent({
  name: "social_media_agent",
  model: "gemini-2.5-pro",
  instruction: "Buffer tools scoped to this user",
  tools,
});

await agent.run("Schedule this launch post on our LinkedIn channel for Tuesday at 9am");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Buffer tool. Click to copy, paste into your agent, done.
Posts
Copy the prompt
Copied
Schedule this post on our LinkedIn channel for Tuesday at 9am.
Copy the prompt
Copied
Move the product launch post to the top of its queue.
Copy the prompt
Copied
Edit tomorrow's post to fix the link in its text.
Planning
Copy the prompt
Copied
List posts scheduled across all channels this week.
Copy the prompt
Copied
Check how many posts each channel has scheduled for Friday against its daily limit.
Copy the prompt
Copied
Save an idea for a customer story thread.
Organization
Copy the prompt
Copied
Create a tag called Product Launch in green.
Copy the prompt
Copied
Save a hashtag snippet called Events with our usual event hashtags.
Copy the prompt
Copied
List the idea groups on our board.
SEE HOW AUTH WORKS
Each user signs in to Buffer once, and Scalekit stores and refreshes their tokens. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Buffer
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Buffer
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Buffer
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Buffer
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other marketing and social connectors.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
Engineering Teams
Slack triage
Polls Slack for new messages, classifies bugs and support requests with a LangGraph router, files GitHub issues or Zendesk tickets, and confirms in the thread.
Test other agents
See the same per-user auth pattern across other marketing and social connectors.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
ENGINEERING
Slack triage agent
Classify new Slack messages as bugs or support requests, file the GitHub issue or Zendesk ticket, and reply in the thread.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Buffer token looks fine in a demo. In production every scheduled post looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Buffer today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Buffer as the user or through a shared service account?
As the user. Each user signs in to Buffer once, and Scalekit stores and refreshes their tokens. Posts the agent creates or edits are attributed to that user in your audit trail, not a shared service account.
Where is the Buffer OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Buffer?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the list and post tools without buffer_delete_post, buffer_delete_tag, or buffer_delete_snippet. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Buffer access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Which social accounts can the agent post to through Buffer?
The channels connected to the user's Buffer organization. buffer_list_channels lists them, and buffer_create_post adds a post to one channel at a time: to the queue, shared now or next, or scheduled for a set time.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""buffer"": {
""url"": ""https://mcp.scalekit.com/buffer"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.buffer]
url = ""https://mcp.scalekit.com/buffer""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""buffer"": {
""url"": ""https://mcp.scalekit.com/buffer"",
""type"": ""http""
}
}
}