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`. 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", 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.