Buffer MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BUFFER_API_KEY | No | Private account-wide PAT or authorized OAuth access token. | |
| BUFFER_ACCOUNTS | No | Private named profile array (JSON array of objects with name, api_key/api_token, token_file, organization_id); no global credential/default inheritance. | |
| BUFFER_API_TOKEN | No | Legacy alias for BUFFER_API_KEY; API_KEY wins if both exist. | |
| BUFFER_AUDIT_LOG | No | Private append-only guard decisions log, no input content. | |
| BUFFER_READ_ONLY | No | 1/true hides and refuses mutations; default false. | |
| BUFFER_TOKEN_FILE | No | Regular owner-only token-only file, max 64 KiB; overrides environment key. | |
| BUFFER_DEFAULT_ACCOUNT | No | Exact configured label for the default account profile; defaults to the first entry. | |
| BUFFER_ORGANIZATION_ID | No | Optional input default for a single account; does not restrict provider permissions. | |
| BUFFER_ALLOW_DESTRUCTIVE | No | 0/false refuses even confirmed mutations; default true. | |
| BUFFER_REQUEST_TIMEOUT_MS | No | Request timeout in milliseconds; default 30000, range 100-300000. | |
| BUFFER_MIN_REQUEST_INTERVAL_MS | No | Minimum request interval in milliseconds; default 200, range 0-10000; process/profile pacing only. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_accountA | Get your account information. Current Buffer GraphQL account. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| add_post_to_content_itemA | Add a post that already exists to a content item. The mutation creates no post. To add a new post, call createPost first.. Current Buffer GraphQL addPostToContentItem. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_aggregated_post_metricsA | Aggregate post performance for an organization across a date range, optionally filtered by channel or tag. Current Buffer GraphQL aggregatedPostMetrics. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_channelB | Get a channel by ID. Current Buffer GraphQL channel. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_channelsA | List channels for an organization. Current Buffer GraphQL channels. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_configurationA | Global, per-organization configuration: the connected |
| get_content_itemB | Fetch a single content item by id. Errors if no content item with that id exists. This API is an early preview and can change without a deprecation period.. Current Buffer GraphQL contentItem. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_content_itemsA | Fetch an organization's content items in the requested order, newest first
by default. Uses standard cursor pagination: pass the previous page's
This API is an early preview and can change without a deprecation period.. Current Buffer GraphQL contentItems. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| create_content_itemA | Create a content item together with all of its channel-specific post variants in a single operation. Validation is all-or-nothing: if any variant fails validation, no content item and no variants are created. Variants that fail while being processed after creation are reported per channel in the failure payload; the content item and its variants are still created in that case. This API is an early preview and can change without a deprecation period.. Current Buffer GraphQL createContentItem. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| create_content_item_draftA | Create a content item holding a channel-less draft, before any channels are selected. No network-specific validation applies to the draft content. The draft needs text or at least one asset. This API is an early preview and can change without a deprecation period.. Current Buffer GraphQL createContentItemDraft. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| create_ideaA | Create a new idea with the given content and metadata. Current Buffer GraphQL createIdea. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| create_postA | Create a new post. Current Buffer GraphQL createPost. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| create_post_templateB | Create a post template visible only to the caller ( |
| get_daily_posting_limitsA | Returns daily posting limit status for the given channels on the specified date.. Current Buffer GraphQL dailyPostingLimits. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| delete_content_itemA | Delete a content item: the item itself and any posts created from it. Deletion is all-or-nothing. Every post must be deletable on its own, or nothing is deleted and every blocked post is reported at once. A post can only be deleted while it is a draft, awaiting approval, scheduled, or failed, so an item cannot be deleted while any of its posts is publishing or already published. An item still holding a channel-less draft has no posts, so nothing blocks it. An error can also be reported when a post could not be fully processed after the deletion already took effect; re-fetch before retrying. This API is an early preview and can change without a deprecation period.. Current Buffer GraphQL deleteContentItem. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| delete_postB | Delete a post by id.. Current Buffer GraphQL deletePost. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| delete_post_templateA | Delete a post template owned by the caller (or an internal template in the caller's organization, if the caller is an org admin/owner).. Current Buffer GraphQL deletePostTemplate. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| edit_postB | Edit post for channel. Current Buffer GraphQL editPost. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_idea_groupsA | List idea groups (folders) for an organization. Current Buffer GraphQL ideaGroups. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_ideasA | Fetch a paginated list of ideas with optional filtering. Current Buffer GraphQL ideas. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_instagram_audioA | Refresh metadata and preview availability for one Instagram audio asset. Requires Facebook Login. Instagram Login channels return ChannelRefreshRequired.. Current Buffer GraphQL instagramAudio. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| move_post_in_queueA | Move a queued post to the top or bottom of its channel's queue. Unlike editPost, this is a scheduling-only operation that never re-validates the post's content.. Current Buffer GraphQL movePostInQueue. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_postA | Get a post by ID. Current Buffer GraphQL post. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_postsA | List posts for an organization. Current Buffer GraphQL posts. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_post_templateA | Fetch a single post template by ID. Returns null if not found.. Current Buffer GraphQL postTemplate. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_post_templatesA | Fetch the templates visible to the current actor for the template
library: public templates, plus internal templates from the supplied
|
| promote_content_item_draft_to_postsA | Promote a channel-less draft into channel-specific posts. One-way: once promoted, the content item can no longer be edited as a draft. If any post fails validation, none are created. A failure can also be reported when a post could not be fully processed after the promotion already took effect; re-fetch the content item to check its state before retrying. This API is an early preview and can change without a deprecation period.. Current Buffer GraphQL promoteContentItemDraftToPosts. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| remove_post_from_content_itemA | Remove a post from a content item. The post survives on its own channel and keeps its schedule, text, status, and tags. Only the link to the content item goes away. To delete a post, call deletePost. A second call with a post that belongs to no content item changes nothing, and the mutation reports success.. Current Buffer GraphQL removePostFromContentItem. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_search_instagram_audioA | Search Instagram audio for one channel. Requires Facebook Login. Instagram Login channels return ChannelRefreshRequired.. Current Buffer GraphQL searchInstagramAudio. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_tagA | Fetch a single tag by id. Resolves to null with a NOT_FOUND error when no tag has that id, and with an UNAUTHORIZED error when the tag belongs to an organization the caller cannot read. Both are reported in the errors array. This API is an early preview and can change without a deprecation period.. Current Buffer GraphQL tag. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_tags_v2A | Fetch a page of the organization's tags, sorted by name in ascending order.
Uses standard cursor pagination: pass the previous page's This API is an early preview and can change without a deprecation period.. Current Buffer GraphQL tagsV2. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| get_trending_instagram_audioA | Return Meta trending Instagram audio for one channel. Requires Facebook Login. Instagram Login channels return ChannelRefreshRequired.. Current Buffer GraphQL trendingInstagramAudio. One request, no automatic pagination. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| update_content_itemA | Update a content item's title or target date. Fields that are omitted keep their current value. This API is an early preview and can change without a deprecation period.. Current Buffer GraphQL updateContentItem. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| update_content_item_draftA | Replace a channel-less draft's content in full, and optionally set the content item's target date in the same write. The draft needs text or at least one asset. Only valid while the content item is still a draft. This API is an early preview and can change without a deprecation period.. Current Buffer GraphQL updateContentItemDraft. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| update_post_templateB | Update a post template owned by the caller (or an internal template in the caller's organization, if the caller is an org admin/owner).. Current Buffer GraphQL updatePostTemplate. Requires explicit confirmation. Use upstream fields to bound data; provider errors are failures even with HTTP 200. |
| list_accountsB | Local names, default marker and whether authentication is configured. No token, token path or organization ID. |
| graphql_queryA | One parsed GraphQL query; mutations and subscriptions are refused. Use explicit minimal selections. Current experimental APIs are accessible subject to provider availability. |
| graphql_mutationA | One parsed GraphQL mutation with one direct root field and explicit confirmation. Adds __typename and MutationError catch-all to detect HTTP 200 failures. No automatic retry. |
| preview_operationA | Validate a current named input and upstream field selection, then return document and variables without credentials or a request. Does not validate permissions, assets or platform rules remotely. Operation names use native GraphQL camelCase. |
| query_pagesA | Read one to five pages of a schema-generated query. No mutations. Automatically includes hasNextPage/endCursor, stops on repeated or missing cursors and returns continuation state. API errors abort the remaining pages; no retries. |
| get_operation_schemaC | Local current operation input schema, every selectable upstream field path and bounded default selections. No credentials or request. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 41 tools
Most tools target a clearly distinct resource+action (channels, posts, content items, templates, ideas, tags, metrics, Instagram audio), so selection is usually unambiguous. The main overlap is among the generic GraphQL escape hatches (graphql_query, query_pages, preview_operation, get_operation_schema) which can blur together, plus singular/plural pairs like get_post_template/get_post_templates.
Overwhelmingly consistent snake_case verb_noun (get_, create_, delete_, update_, add_, remove_, move_, promote_). A few deviations break the pattern: edit_post uses a different verb than update_post_template/update_content_item, get_tags_v2 carries a version suffix, get_search_instagram_audio is awkwardly phrased, and list_accounts mixes 'list' with the 'get' used for other collections.
41 tools is on the heavy side, and the five generic GraphQL helper tools (graphql_query, graphql_mutation, query_pages, preview_operation, get_operation_schema) substantially overlap with the specific tools, suggesting consolidation is possible. The breadth is partly justified by the genuinely large surface area (posts, content items, drafts, templates, ideas, tags, channels, metrics, audio).
CRUD coverage is strong for posts, content items/drafts, and post templates, with read coverage for channels, ideas, tags, metrics, and Instagram audio, plus generic query/mutation escape hatches for gaps. Ideas and tags expose only read/create (no update/delete) for ideas and read-only tags, so a few lifecycle operations are missing.