⚡ XActions
📖 Guides & Reference

The hosted MCP server

Give any AI agent live access to public X/Twitter with one URL. No API key, no account, no install.

https://xactions.app/mcp

That is the whole setup. Paste it into Claude Code, Claude Desktop, Cursor, VS Code or Windsurf and your agent can read profiles, posts, threads and videos from X, and search the entire XActions documentation while it writes automation code.

There is nothing to sign up for. X's own API costs $200 a month for the tier that reads a timeline. This reads the same public data through the rails x.com serves to logged-out browsers, from a Cloudflare edge worker, and gives it away.

Add it to your client

Claude Code

claude mcp add --transport http xactions https://xactions.app/mcp

Then ask it something: "what has @nasa been posting about this week?"

Claude Desktop

Settings, then Connectors, then Add custom connector, and paste the URL. Or edit claude_desktop_config.json:

{
  "mcpServers": {
    "xactions": {
      "type": "http",
      "url": "https://xactions.app/mcp"
    }
  }
}

Cursor

.cursor/mcp.json in your project, or the global one in ~/.cursor/:

{
  "mcpServers": {
    "xactions": {
      "url": "https://xactions.app/mcp"
    }
  }
}

VS Code (GitHub Copilot agent mode)

.vscode/mcp.json:

{
  "servers": {
    "xactions": {
      "type": "http",
      "url": "https://xactions.app/mcp"
    }
  }
}

Windsurf

~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "xactions": {
      "serverUrl": "https://xactions.app/mcp"
    }
  }
}

Anything else

The server speaks Streamable HTTP (MCP 2025-06-18, back-compatible with 2025-03-26 and 2024-11-05). Any client that supports remote MCP servers works. It is stateless, so there is no session to keep alive and no reconnect logic to get wrong.

curl -s https://xactions.app/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Discovery lives at /.well-known/mcp.json, and GET /mcp with Accept: application/json returns the same descriptor.

Tools

Tool What it does
x_profile Public profile for an account: bio, counts, links, join date, verification, pinned post
x_posts Recent posts for an account, newest first, with text, timestamps, metrics and media
x_post One post in full, including long-form text, every public metric, media URLs, entities and the quoted post
x_thread The conversation around a post: up to the root, and down through the author's continuation
x_video Every downloadable MP4 for a post, best quality first, with a ready download link
xactions_docs Search the XActions guides, tutorials, CLI and API reference, 50 skills and every browser script

Every tool is read-only. Nothing in this server can post, follow, like, delete, or touch an account.

x_post returns views and bookmarks from the richer rail. When x.com throttles it, the server falls back to the public embed endpoint, source reads syndication instead of graphql, and those two fields read 0. Everything else is identical.

Resources

The server publishes the whole XActions corpus as MCP resources, roughly 700 of them: one per documentation page, agent skill, and browser script.

xactions://doc/docs/video-downloader.md
xactions://skill/skills/algorithm-cultivation/SKILL.md
xactions://script/src/unfollowEveryone.js

xactions_docs finds the right passage; a resource read pulls the whole file. Agents that support resource attachment can pin one into context.

Prompts

Five prompt templates ship with the server. In Claude Code they show up as slash commands.

Prompt Arguments Result
audit_account handle, goal Profile plus 50 posts, what beats the median by 3x, three changes to make
read_thread post The thread's claim, its supporting points in order, what it asserts without evidence
competitor_scan handles, angle Accounts side by side on cadence, format and engagement per follower
save_video post Every quality available, with the best download link
automate_this task The XActions surface that already does it, with real flags from the docs

From JavaScript instead of an agent

The same server, as an ordinary SDK:

npm install xactions-edge
import { createClient } from 'xactions-edge';
const x = createClient();

const nasa = await x.profile('nasa');
const thread = await x.thread('https://x.com/SpaceX/status/2092648130856571283');
const mp4 = await x.videoUrl(thread.focal.url);

Zero dependencies, and it runs in Node, browsers, Cloudflare Workers, Deno and Bun. Full reference: packages/xactions-edge.

One-line reads from a terminal, with nothing installed:

npx xactions-edge posts nasa --limit 5

How it works

your agent
    |  MCP over Streamable HTTP
    v
xactions.app/mcp            Cloudflare Pages Function, runs at the edge
    |
    +-- guest-token GraphQL      x.com's own logged-out API, full metrics
    +-- cdn.syndication.twimg    the endpoint the embed widget calls, no token
    +-- /data/ask-index.json     the docs corpus, shipped as a static asset

No database. No browser. No origin server. No credential anywhere in the request path, which is why there is nothing to sign up for and nothing that can leak.

Each rail covers the other's failure mode: the guest lane carries every public metric but x.com rate-limits it, and the syndication endpoint has fewer fields but almost never refuses. A read only fails when both do.

Successful reads are cached at the Cloudflare edge, so the second person to ask about a post gets it without another round trip to x.com.

Limits

  • Public data only. Protected accounts, DMs, and anything behind a login are not readable, by design.
  • Reads only. Writing to X needs your own session. That is what the local MCP server is for, with 152 tools including posting, following and scheduling.
  • x_thread continues downward only as far as the author's recent timeline reaches. It always walks up to the root, at any age. When the tail is out of reach it returns truncated: true rather than implying the thread ended.
  • Anonymous rate limits are x.com's, not ours. When they bite, calls fail with a message saying to wait about a minute. They recover on their own.
  • Do not point a bulk crawler at a shared free endpoint. The whole server is Apache-2.0. Deploy your own copy and point your client at it: functions/mcp.js plus src/mcp/ is the entire thing.

Run your own

git clone https://github.com/nirholas/XActions
cd XActions && npm install
npx wrangler pages dev dashboard

http://127.0.0.1:8788/mcp is now the same server. Deploy it to your own Cloudflare Pages project and it costs nothing to run: the free tier covers 100,000 requests a day.


by nichxbt

⚡ Free and open source

No API keys, no monthly fees, no signup. Star the repo if it saved you a subscription.

View on GitHub