From 80068eca17f0f09d28a1f1ef13749d2cb3734b42 Mon Sep 17 00:00:00 2001 From: Minu Palaniappan Date: Fri, 25 Sep 2026 11:36:35 -0700 Subject: [PATCH] feat(third_party): add Buffer plugin Adds a Buffer marketplace plugin pointing at Buffer's official remote MCP server (https://mcp.buffer.com/mcp) so agents can draft, schedule, and publish social posts, manage the queue and ideas, and review post performance. Auth is OAuth with PKCE and dynamic client registration via auth.buffer.com; registration was verified to accept every Cursor and Grok redirect set, including Grok Bot mobile. Tracks Linear PGT-4580. --- .cursor-plugin/marketplace.json | 5 ++ third_party/buffer/.cursor-plugin/plugin.json | 36 ++++++++++ third_party/buffer/CHANGELOG.md | 9 +++ third_party/buffer/LICENSE | 21 ++++++ third_party/buffer/README.md | 68 ++++++++++++++++++ third_party/buffer/assets/logo.png | Bin 0 -> 3551 bytes third_party/buffer/mcp.json | 8 +++ 7 files changed, 147 insertions(+) create mode 100644 third_party/buffer/.cursor-plugin/plugin.json create mode 100644 third_party/buffer/CHANGELOG.md create mode 100644 third_party/buffer/LICENSE create mode 100644 third_party/buffer/README.md create mode 100644 third_party/buffer/assets/logo.png create mode 100644 third_party/buffer/mcp.json diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 052ee8f68..e15b0e528 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -467,6 +467,11 @@ "name": "tinyfish", "source": "third_party/tinyfish", "description": "Browse and automate the web with TinyFish: run multi-step web automations, search the web, extract clean page content, and drive remote stealth browser sessions." + }, + { + "name": "buffer", + "source": "third_party/buffer", + "description": "Manage social media with Buffer: draft, schedule, and publish posts across connected channels, manage the queue and ideas, and review post performance." } ] } diff --git a/third_party/buffer/.cursor-plugin/plugin.json b/third_party/buffer/.cursor-plugin/plugin.json new file mode 100644 index 000000000..7e9e1af7a --- /dev/null +++ b/third_party/buffer/.cursor-plugin/plugin.json @@ -0,0 +1,36 @@ +{ + "name": "buffer", + "displayName": "Buffer", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Manage social media with Buffer: draft, schedule, and publish posts across connected channels, manage the queue and ideas, and review post performance.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://developers.buffer.com/guides/integrations/mcp.html", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "buffer", + "social media", + "scheduling", + "publishing", + "content calendar", + "queue", + "analytics", + "ideas", + "mcp" + ], + "category": "integrations", + "tags": [ + "buffer", + "social media", + "scheduling", + "mcp" + ], + "mcpServers": "./mcp.json" +} diff --git a/third_party/buffer/CHANGELOG.md b/third_party/buffer/CHANGELOG.md new file mode 100644 index 000000000..1f8f30068 --- /dev/null +++ b/third_party/buffer/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 — initial release + +- Added the `buffer` MCP server pointing at Buffer's hosted Streamable HTTP endpoint (`https://mcp.buffer.com/mcp`). +- Auth uses OAuth with Buffer user login (PKCE, dynamic client registration via `auth.buffer.com`) — no API key or client ID to configure. Registration was verified to accept every Cursor redirect set, including Grok Bot mobile. +- Logo: Buffer's official stacked mark, from the icon published on buffer.com, on a 192×192 tile. diff --git a/third_party/buffer/LICENSE b/third_party/buffer/LICENSE new file mode 100644 index 000000000..ca2bba771 --- /dev/null +++ b/third_party/buffer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Cursor + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/third_party/buffer/README.md b/third_party/buffer/README.md new file mode 100644 index 000000000..ef57d4417 --- /dev/null +++ b/third_party/buffer/README.md @@ -0,0 +1,68 @@ +# Buffer + +Cursor plugin that connects agents to [Buffer](https://buffer.com) through Buffer's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Read your connected social channels, browse the queue and drafts, draft, schedule, edit, and publish posts, capture ideas, reuse post templates, and pull post analytics — all from chat. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Buffer**. +3. Click **Install**, then complete the Buffer sign-in prompt. + +Or run `/add-plugin buffer` in chat. + +## MCP + +```json +{ + "mcpServers": { + "buffer": { + "type": "http", + "url": "https://mcp.buffer.com/mcp" + } + } +} +``` + +Auth is OAuth. Cursor prompts for Buffer sign-in when the plugin connects — there is no client ID or API key to configure. Each user signs in with their own Buffer account. + +## Before you connect + +You need a Buffer account ([sign up](https://buffer.com)) with at least one connected social channel. MCP access is included on every Buffer plan, including Free. Requests count against the same [rate limits](https://developers.buffer.com/guides/api-limits.html) as any other API client, with quotas that depend on your plan; every tool response reports the remaining quota. The connection covers your whole account — every organization and channel in it — so if you belong to more than one organization, the agent will ask which one you mean. + +## What agents can do + +| Category | Capabilities | +| --- | --- | +| Account | `get_account` returns the signed-in account, its organizations with plan limits and member counts, and the account timezone with its current local time, which the agent uses to turn "tomorrow at 5pm" into a real timestamp | +| Channels | `list_channels` lists the social accounts connected to an organization (service, type, avatar, connection status); `get_channel` adds a channel's posting schedule, posting goals, queue status, timezone, link shortening, and service-specific data such as Pinterest boards | +| Posts | `list_posts` filters by channel, status (`draft`, `needs_approval`, `scheduled`, `sending`, `sent`, `error`), tags, and date ranges, with optional per-post metrics; `get_post` reads one post in full including any publishing error; `create_post` schedules or publishes on one channel with queue, share-now, share-next, or custom-time modes, media, threads, link previews, service metadata, and a save-to-draft option; `edit_post` changes text, media, tags, or scheduling; `delete_post` removes a post permanently | +| Ideas | `list_ideas` and `list_idea_groups` browse the ideas board; `create_idea` saves a concept with title, text, media, tags, target services, and target date without scheduling anything | +| Post templates | `list_post_templates`, `get_post_template`, `create_post_template`, `update_post_template`, and `delete_post_template` manage reusable templates with `{{placeholders}}` at private or internal visibility | +| Analytics | `get_aggregated_post_metrics` totals reactions, comments, and, where every channel supports them, reach, impressions, and engagement rate across posts in a date range of up to 365 days | +| GraphQL | `introspect_schema` returns the full Buffer API schema; `execute_query` runs a read-only query and `execute_mutation` runs a mutation for anything the tools above do not cover | + +The server also exposes the schema as a `buffer://schema` resource and a `review_weekly_posts` prompt that groups the week's scheduled posts by channel. + +The hosted runtime is the source of truth for tool names and schemas. + +## Notes + +- **Publishing is live to real social accounts.** `create_post` with `shareNow` publishes immediately, and `automatic` scheduling publishes without a further check; `delete_post` cannot be undone. Confirm the channel, text, and time before letting the agent publish or schedule, and leave Cursor's tool-approval prompts on for write tools. +- `saveToDraft` on `create_post` keeps a post in the queue for review instead of scheduling it, and `schedulingType: notification` sends you a reminder to post manually rather than publishing for you. +- `execute_mutation` can reach any state-changing operation in the Buffer GraphQL API, not only posts. +- Post metrics refresh once a day, so analytics can lag the social network by up to a day. + +## Docs + +- MCP integration guide: https://developers.buffer.com/guides/integrations/mcp.html +- MCP overview: https://buffer.com/mcp +- API reference: https://developers.buffer.com/ +- Server URL: https://mcp.buffer.com/mcp + +Logo is Buffer's official mark. + +## License + +MIT diff --git a/third_party/buffer/assets/logo.png b/third_party/buffer/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e783327706043aab488fffd2357324e2e480bc1c GIT binary patch literal 3551 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 ih#e#V_