X IntegrationSAFE
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
A Model Context Protocol (MCP) server for X (Twitter) integration. Provides 26 tools for reading timelines, posting, searching, engagement (likes, retweets, bookmarks), user lookup, follower export, mentions, likes, articles, and lists. Designed for use with Claude desktop and other MCP-compatible clients.
Features
- Timeline & Search - Home timeline, search recent posts (7-day window)
- Post Management - Create, reply, quote, delete posts with optional media
- Engagement - Like/unlike, retweet/undo, bookmark/unbookmark
- User Data - Mentions, liked posts, followers, following, blocks, mutes, owned lists, followed lists, and list memberships
- User Lookup - Get user profiles and their recent posts
- Media Upload - Images (PNG, JPEG, GIF, WEBP) and videos (MP4, MOV, AVI, WEBM, M4V) via v2 upload API
- Dual Auth - OAuth 1.0a for post operations, OAuth 2.0 for media upload (v1.1 upload was sunset June 2025)
- Rate Limiting - Automatic per-endpoint rate limit tracking with clear error messages
- TypeScript - Full type safety, modular file structure
Prerequisites
- Node.js >= 18.0.0
- X (Twitter) Developer Account
- Claude desktop app (or any MCP-compatible client)
X API Access & Pricing
Like and Follow endpoints were removed from the Free tier in August 2025. Follows/Blocks end
1df1051dd7d0OBSERVED · 2026-10-07Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add x-mcp-server --env TWITTER_ACCESS_SECRET=${TWITTER_ACCESS_SECRET} --env TWITTER_ACCESS_TOKEN=${TWITTER_ACCESS_TOKEN} --env TWITTER_API_KEY=${TWITTER_API_KEY} --env TWITTER_API_SECRET=${TWITTER_API_SECRET} -- npx -y [email protected]{
"mcpServers": {
"x-mcp-server": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"TWITTER_ACCESS_SECRET": "${TWITTER_ACCESS_SECRET}",
"TWITTER_ACCESS_TOKEN": "${TWITTER_ACCESS_TOKEN}",
"TWITTER_API_KEY": "${TWITTER_API_KEY}",
"TWITTER_API_SECRET": "${TWITTER_API_SECRET}"
}
}
}
}Exposed tools (17)
5 read · 8 write · 4 destructive. Blast radius: 4 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
bookmark_tweet | write | Bookmark a post for later |
create_tweet | write | Create a new post with optional media attachment. Media upload requires OAuth 2.0 credentials. |
delete_tweet | destructive | Delete one of your posts |
get_article | write | Fetch the full body content of an X Article post by its tweet ID |
get_bookmarks | read | Get your bookmarked posts |
get_home_timeline | read | Get recent posts from your home timeline |
get_tweet | write | Look up a specific post by its ID |
get_user | read | Look up a user by their username |
get_user_tweets | read | Get a user |
like_tweet | write | Like a post. Not available on Free tier (removed Aug 2025). Requires Basic tier or above. |
quote_tweet | write | Quote a post with your own commentary |
reply_to_tweet | write | Reply to a post with optional media attachment |
retweet | write | Repost a post to your timeline |
search_tweets | read | Search recent posts from the last 7 days. Requires Basic tier or above. |
unbookmark_tweet | destructive | Remove a bookmarked post |
undo_retweet | destructive | Remove a repost from your timeline |
unlike_tweet | destructive | Remove a like from a post |
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (5 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (2)
delete_tweet, unbookmark_tweet, undo_retweet, unlike_tweet
@modelcontextprotocol/sdk, twitter-api-v2, @types/node, typescript
Gates applied: no_behavioural_pass.
1df1051dd7d0full audit observations/trust-audit/mcp-server/datawhisker__x-integration.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-07 | 1df1051dd7d0 | SAFE | B | 89 | first audit |
Questions
What tools does X Integration expose?
17 in total: 5 read-only, 8 that write, and 4 that can delete or overwrite (delete_tweet, unbookmark_tweet, undo_retweet, unlike_tweet). Every one is listed on this page with its risk.
Is X Integration safe to connect to an agent?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B. Separately from the audit: 4 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does X Integration need?
It reads TWITTER_ACCESS_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_API_KEY, TWITTER_API_SECRET, TWITTER_CLIENT_SECRET, TWITTER_OAUTH2_ACCESS_TOKEN, TWITTER_OAUTH2_REFRESH_TOKEN and XQUIK_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does X Integration run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as x-mcp-server at 2.0.0.
How current is this page?
The grade is for one exact copy of the source (1df1051dd7d0), read on 2026-10-07. The repository is watched and re-audited when it changes.