From a8632b3d7cca644f6e039fbe2de779d40a2a5571 Mon Sep 17 00:00:00 2001 From: Santiago Medina Rolong Date: Mon, 19 Oct 2026 22:34:35 +0000 Subject: [PATCH 1/3] Request broadcast.read and broadcast.write in the X plugin The livestream tools on https://api.x.com/mcp (broadcasts, scheduled broadcasts, broadcast chat moderators and mutes, and stream sources) return 403 for missing scopes, because the plugin never asks for broadcast.read or broadcast.write. Request both after calls.write and list them in the README. --- third_party/x/README.md | 4 +++- third_party/x/mcp.json | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/third_party/x/README.md b/third_party/x/README.md index 501045c91..50cd1b699 100644 --- a/third_party/x/README.md +++ b/third_party/x/README.md @@ -39,6 +39,8 @@ Or run `/add-plugin x` in chat. "dm.write", "calls.read", "calls.write", + "broadcast.read", + "broadcast.write", "media.write", "developer.billing.write", "developer.write", @@ -76,7 +78,7 @@ Requests run in your user context, so they count against your account's rate lim ## Scopes requested -`tweet.read`, `users.read`, `follows.read`, `space.read`, `mute.read`, `like.read`, `list.read`, `list.write`, `block.read`, `block.write`, `bookmark.read`, `bookmark.write`, `dm.read`, `dm.write`, `calls.read`, `calls.write`, `media.write`, `developer.billing.write`, `developer.write`, `offline.access` +`tweet.read`, `users.read`, `follows.read`, `space.read`, `mute.read`, `like.read`, `list.read`, `list.write`, `block.read`, `block.write`, `bookmark.read`, `bookmark.write`, `dm.read`, `dm.write`, `calls.read`, `calls.write`, `broadcast.read`, `broadcast.write`, `media.write`, `developer.billing.write`, `developer.write`, `offline.access` ## X documentation search diff --git a/third_party/x/mcp.json b/third_party/x/mcp.json index bdb1b4b38..f25fad87d 100644 --- a/third_party/x/mcp.json +++ b/third_party/x/mcp.json @@ -22,6 +22,8 @@ "dm.write", "calls.read", "calls.write", + "broadcast.read", + "broadcast.write", "media.write", "developer.billing.write", "developer.write", From 21c6f2fb6e55723689456648ce63c0412e6572a6 Mon Sep 17 00:00:00 2001 From: Santiago Medina Rolong Date: Mon, 19 Oct 2026 22:34:35 +0000 Subject: [PATCH 2/3] Send missing livestream tools to a reconnect in the X MCP guide Missing broadcast or source tools, or a 403 for broadcast.read / broadcast.write, while other X tools work means the connection predates the new scopes. Say to reconnect, the same as for X Chat and call scopes, instead of error 2. --- third_party/x/skills/x-api-mcp-guide/SKILL.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/third_party/x/skills/x-api-mcp-guide/SKILL.md b/third_party/x/skills/x-api-mcp-guide/SKILL.md index adea1fcb4..d9d03bf2c 100644 --- a/third_party/x/skills/x-api-mcp-guide/SKILL.md +++ b/third_party/x/skills/x-api-mcp-guide/SKILL.md @@ -16,7 +16,10 @@ description: >- Scheduled X calls use schedule_call, list_scheduled_calls, get_scheduled_call, update_scheduled_call, cancel_scheduled_call, and respond_to_scheduled_call. Missing those tools or calls.read/calls.write while other X tools work: - reconnect the X plugin. Estimate every X call and confirm before anything expensive. + reconnect the X plugin. Livestreams use list_broadcasts, list_sources, and the + other broadcast and source tools. Missing those tools or + broadcast.read/broadcast.write while other X tools work: reconnect the X + plugin. Estimate every X call and confirm before anything expensive. --- # X MCP guide @@ -142,6 +145,8 @@ Missing **Chat** tools (`get_chat_conversations`, `send_chat_message`, …) whil Missing **call** tools (`schedule_call`, `list_scheduled_calls`, …) while other X tools work is **not** #2. That is [X call scopes](#x-call-scopes) — reconnect for `calls.read` / `calls.write`. +Missing **livestream** tools (`list_broadcasts`, `list_sources`, …) while other X tools work is **not** #2. That is [Livestream scopes](#livestream-scopes) — reconnect for `broadcast.read` / `broadcast.write`. + **When (fallback):** `client-forbidden`; `user-not-enrolled`; `client-not-enrolled`; Client Forbidden; 403 on timeline / mentions / search / bookmarks after Connect. **Say:** @@ -218,6 +223,16 @@ Do not tell them to create a Project or App. Do not ask for a Bearer token. Afte Do not tell them to create a Project or App. Do not ask for a Bearer token. After reconnect, follow [Scheduled calls](#scheduled-calls). +### Livestream scopes + +**When:** the user wants their broadcasts, scheduled broadcasts, stream sources, or broadcast chat moderators and mutes, other X tools work, but those tools are missing or a call 403s for `broadcast.read` / `broadcast.write`. + +**Say:** + +> Livestreams need an extra sign-in. Reconnect the X plugin in this chat and approve access to your broadcasts. Then I'll retry. Don't paste keys, tokens, or stream keys. + +Do not tell them to create a Project or App. Do not ask for a Bearer token. + ## Other errors `not-authorized-for-resource` (private account they don't own): stop. Their own timeline/bookmarks: probe current user, retry once with that id. @@ -599,6 +614,7 @@ If `add_conversation_keys` returns `UNAUTHORIZED_REQUESTING_USER` or similar: yo - Treat tools=0 / `user-X-*` not found as a paywall. That is [error 2](#2-account-not-ready). - Treat missing Chat tools as “create a Project and App.” If other X tools work, that is [X Chat scopes](#x-chat-scopes) — reconnect. - Treat missing call tools as “create a Project and App.” If other X tools work, that is [X call scopes](#x-call-scopes) — reconnect. +- Treat missing livestream tools as “create a Project and App.” If other X tools work, that is [Livestream scopes](#livestream-scopes) — reconnect. - Schedule, update, cancel, or RSVP to an X call unless the owner asked. Do not use the X Chat helper for calls. - Wait for the user to name `xchat_lite`, the helper repo, or a second X Chat skill. Clone it yourself. - Treat a reply as accepting a message request. Accept only with `accept_chat_message_request`, and only when the owner said to accept. From b47f9d87f30a76a40b11d93009348da5934ba21f Mon Sep 17 00:00:00 2001 From: Santiago Medina Rolong Date: Mon, 19 Oct 2026 22:34:35 +0000 Subject: [PATCH 3/3] Bump the X plugin to 2.9.0 for broadcast scopes. --- third_party/x/.cursor-plugin/plugin.json | 2 +- third_party/x/CHANGELOG.md | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/third_party/x/.cursor-plugin/plugin.json b/third_party/x/.cursor-plugin/plugin.json index afeabbbe7..1c362d8f7 100644 --- a/third_party/x/.cursor-plugin/plugin.json +++ b/third_party/x/.cursor-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "x", "displayName": "X", - "version": "2.7.0", + "version": "2.9.0", "minClientVersions": { "cursor": "3.13.0" }, diff --git a/third_party/x/CHANGELOG.md b/third_party/x/CHANGELOG.md index 60b22dd15..a0362da54 100644 --- a/third_party/x/CHANGELOG.md +++ b/third_party/x/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to this plugin will be documented here. +## 2.9.0 — Broadcast scopes + +- Requested `broadcast.read` and `broadcast.write` so agents can manage the owner's livestreams (stream sources, broadcasts, scheduled broadcasts, chat moderators and mutes) on `https://api.x.com/mcp`. +- Missing broadcast or livestream tools while other X tools work means reconnect, not a new Project or App. +- Existing installs need to sign in to X again to pick up the new scopes. + ## 2.7.0 — Scheduled X calls - Requested `calls.read` and `calls.write` so agents can list, schedule, update, cancel, and RSVP to X calls on `https://api.x.com/mcp`.