Switch X plugin to OAuth user sign-in with write scopes - #214
Merged
Conversation
Co-authored-by: Alex Vandak Maloney <maloney.a12@gmail.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
Bugbot Autofix prepared a fix for the issue found in the latest run.
- ✅ Fixed: Invalid billing.write OAuth scope
- Removed the nonexistent billing.write scope from the OAuth scopes list in mcp.json and from the matching documentation in README.md and CHANGELOG.md, since X's OAuth 2.0 scope catalog has no such scope and it matched no documented plugin capability.
Or push these changes by commenting:
@cursor push 7f21913e48
Preview (7f21913e48)
diff --git a/third_party/x/CHANGELOG.md b/third_party/x/CHANGELOG.md
--- a/third_party/x/CHANGELOG.md
+++ b/third_party/x/CHANGELOG.md
@@ -5,7 +5,7 @@
## 2.0.0 — OAuth user sign-in, no longer read-only
- Replaced the `X_BEARER_TOKEN` app-only route with OAuth user sign-in using X's client ID `NGdZYmo4VVp2T1BnRG55NlExOGQ6MTpjaQ`.
-- Requested scopes: `tweet.read`, `users.read`, `follows.read`, `space.read`, `mute.read`, `like.read`, `list.read`, `list.write`, `block.read`, `block.write`, `bookmark.read`, `bookmark.write`, `billing.write`, `offline.access`.
+- Requested scopes: `tweet.read`, `users.read`, `follows.read`, `space.read`, `mute.read`, `like.read`, `list.read`, `list.write`, `block.read`, `block.write`, `bookmark.read`, `bookmark.write`, `offline.access`.
- Agents can now manage lists, bookmarks, blocks, and mutes in your user context. Posting is still not possible (`tweet.write` is not requested).
- Removed the `X_BEARER_TOKEN` plugin variable — no credential to paste anymore.
diff --git a/third_party/x/README.md b/third_party/x/README.md
--- a/third_party/x/README.md
+++ b/third_party/x/README.md
@@ -35,7 +35,6 @@
"block.write",
"bookmark.read",
"bookmark.write",
- "billing.write",
"offline.access"
]
}
@@ -67,7 +66,7 @@
## 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`, `billing.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`, `offline.access`
## X documentation search
diff --git a/third_party/x/mcp.json b/third_party/x/mcp.json
--- a/third_party/x/mcp.json
+++ b/third_party/x/mcp.json
@@ -18,7 +18,6 @@
"block.write",
"bookmark.read",
"bookmark.write",
- "billing.write",
"offline.access"
]
}You can send follow-ups to the cloud agent here.
Reviewed by Cursor Bugbot for commit 6a39659. Configure here.
| "block.write", | ||
| "bookmark.read", | ||
| "bookmark.write", | ||
| "billing.write", |
There was a problem hiding this comment.
Invalid billing.write OAuth scope
High Severity · Logic Bug
billing.write is not a documented X OAuth 2.0 scope. Requesting it on sign-in can cause X to reject the consent request, so the new user OAuth flow fails before any MCP tools run. It also does not match any capability this plugin documents.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 6a39659. Configure here.
github-actions Bot
added a commit
to SmailG/claude-cursor-plugins
that referenced
this pull request
Aug 14, 2026
…cursor/cursor/x-plugin-oauth-write-3404 chore: sync with cursor/plugins — Merge pull request cursor#214 from cursor/cursor/x-plugin-oauth-write-3404
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Summary
The X plugin is no longer read-only. It now signs users in with OAuth instead of asking for an app-only Bearer token.
mcp.jsonnow uses anauthblock (same shape as the Salesforce plugin) with the shipped client IDNGdZYmo4VVp2T1BnRG55NlExOGQ6MTpjaQand these scopes:tweet.read,users.read,follows.read,space.read,mute.read,like.read,list.read,list.write,block.read,block.write,bookmark.read,bookmark.write,billing.write,offline.access.X_BEARER_TOKENvariable fromplugin.json— there is no credential to paste anymore.tweet.writeis not requested.Testing
node scripts/validate-plugins.mjspasses ("All plugins validated successfully").