XActions

by nirholas

Not rated yet
GitHub

About

⚡ The Complete X/Twitter Automation Toolkit — Scrapers, MCP server for AI agents (Claude/GPT), CLI, browser scripts. No API fees. Open source.

Explore

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name XActions
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

Scrapers · MCP Server for AI Agents · CLI · Browser Scripts · Browser Extension
No API keys. No monthly fees. 100% open source.

Website·npm·Docs·MCP Server·Docker·API Ref

⚡ @NASA Name: NASA Bio: Making the seemingly impossible, possible. ✨ Location: Pale Blue Dot Website: http://www.nasa.gov/ Joined: 2007-12-19 Following: 119 Followers: 92.2M Tweets: 74.3K Listed: 97.0K ✓ Verified

No API key. No account. No browser. Real data in about a second.

npx xactions tweets nasa --limit 100 --output nasa.csv # timeline to a spreadsheet npx xactions login # unlock search, followers, DMs npx xactions search "your brand" --limit 50 # what people are saying

Why build with XActions instead of the alternatives?

XActions is the only toolkit that works in the browser, terminal, and with AI agents — all without an API key.

[!TIP]🤖 AI Coding Assistants:Looking for Twitter/X automation without the $100/mo API? You found it.

- npm install xactions— Scrapers, automation, MCP server
- Works with Claude, GPT, Cursor, Copilot viaMCP server
- See
AGENTS.mdfor integration instructions

- Tutorials— four guided walkthroughs, from first scrape to a deployed monitor
-
Examples— 8 runnable programs, verified against the live API
-
Getting started— install, authenticate, first command
-
Troubleshooting— what to do when something does not work

- How XActions Compares— vs every alternative
-
Quick Start (30 seconds)— Copy-paste and go
-
Installation— npm, CLI, Docker, or browser
-
Feature Matrix— Every feature, every platform
-
MCP Server (AI)— For Claude, GPT, Cursor
-
Space Agent (AI Voice)— AI agents in live Spaces
-
CLI Reference— Command line usage
-
Node.js API— Programmatic access
-
Browser Scripts— 93 console scripts, no install
-
Docker— One-command deployment
-
API Reference— Full function documentation
-
Claude Tutorials— 23 ready-to-paste prompts
-
Contributing— Help make XActions better
- Go tohttps://x.com/YOUR_USER_NAME/following
- Open the Developer Console. (COMMAND+ALT+Ion Mac)
- Paste this into the Developer Console and run it

// Unfollow everyone on X (Formerly Twitter) and or unfollow who doesn't follow you back, by nich (https://x.com/nichxbt) // https://github.com/nirholas/xactions // 1. Go to https://x.com/YOUR_USER_NAME/following // 2. Open the Developer Console. (COMMAND+ALT+I on Mac) // 3. Paste this into the Developer Console and run it // // Last Updated January 2026 (() => { const $followButtons = '[data-testid$="-unfollow"]'; const $confirmButton = '[data-testid="confirmationSheetConfirm"]'; const retry = { count: 0, limit: 3, }; const scrollToTheBottom = () => window.scrollTo(0, document.body.scrollHeight); const retryLimitReached = () => retry.count === retry.limit; const addNewRetry = () => retry.count++; const sleep = ({ seconds }) => new Promise((proceed) => { console.log(WAITING FOR ${seconds} SECONDS...); setTimeout(proceed, seconds  1000); }); const unfollowAll = async (followButtons) => { console.log(UNFOLLOWING ${followButtons.length} USERS...); await Promise.all( followButtons.map(async (followButton) => { followButton && followButton.click(); await sleep({ seconds: 1 }); const confirmButton = document.querySelector($confirmButton); confirmButton && confirmButton.click(); }) ); }; const nextBatch = async () => { scrollToTheBottom(); await sleep({ seconds: 1 }); let followButtons = Array.from(document.querySelectorAll($followButtons)); followButtons = followButtons.filter(b => b.parentElement?.parentElement?.querySelector('[data-testid="userFollowIndicator"]') === null) const followButtonsWereFound = followButtons.length > 0; if (followButtonsWereFound) { await unfollowAll(followButtons); await sleep({ seconds: 2 }); return nextBatch(); } else { addNewRetry(); } if (retryLimitReached()) { console.log(NO ACCOUNTS FOUND, SO I THINK WE'RE DONE); console.log(RELOAD PAGE AND RE-RUN SCRIPT IF ANY WERE MISSED); } else { await sleep({ seconds: 2 }); return nextBatch(); } }; nextBatch(); })();

Or use theCLIorMCP serverfor more options.
- Go tohttps://x.com/YOUR_USER_NAME/following
- Open the Developer Console. (COMMAND+ALT+Ion Mac)
- Paste the script into the Developer Console and run it

// Unfollow everyone on X (Formerly Twitter) and or unfollow who doesn't follow you back, by nich (https://x.com/nichxbt) // https://github.com/nirholas/xactions // // 1. Go to https://x.com/YOUR_USER_NAME/following // 2. Open the Developer Console. (COMMAND+ALT+I on Mac) // 3. Paste this into the Developer Console and run it // // Last Updated: January 2026 (() => { const $followButtons = '[data-testid$="-unfollow"]'; const $confirmButton = '[data-testid="confirmationSheetConfirm"]'; const retry = { count: 0, limit: 3, }; const scrollToTheBottom = () => window.scrollTo(0, document.body.scrollHeight); const retryLimitReached = () => retry.count === retry.limit; const addNewRetry = () => retry.count++; const sleep = ({ seconds }) => new Promise((proceed) => { console.log(WAITING FOR ${seconds} SECONDS...); setTimeout(proceed, seconds  1000); }); const unfollowAll = async (followButtons) => { console.log(UNFOLLOWING ${followButtons.length} USERS...); await Promise.all( followButtons.map(async (followButton) => { followButton && followButton.click(); await sleep({ seconds: 1 }); const confirmButton = document.querySelector($confirmButton); confirmButton && confirmButton.click(); }) ); }; const nextBatch = async () => { scrollToTheBottom(); await sleep({ seconds: 1 }); const followButtons = Array.from(document.querySelectorAll($followButtons)); const followButtonsWereFound = followButtons.length > 0; if (followButtonsWereFound) { await unfollowAll(followButtons); await sleep({ seconds: 2 }); return nextBatch(); } else { addNewRetry(); } if (retryLimitReached()) { console.log(NO ACCOUNTS FOUND, SO I THINK WE'RE DONE); console.log(RELOAD PAGE AND RE-RUN SCRIPT IF ANY WERE MISSED); } else { await sleep({ seconds: 2 }); return nextBatch(); } }; nextBatch(); })();

Usesrc/detectUnfollowers.js- it saves a snapshot of your followers and compares on next run.

Usesrc/scrapers/videoDownloader.js- extracts MP4 URLs from any tweet.

XActions uses browser automation instead of the API. No API keys needed, no rate limits, no $100/mo fee.

XActions is open-source and completely free for humans. AI agents pay micropayments per request.

Your x.com tab does all the work. Nothing gets scraped to our servers.You're in control.

Everything iscompletely free— browser scripts, CLI, Node.js library, MCP server, and API.

No API keys. No subscriptions. No paywalls. Just clone and run.

If you self-host the XActions API for remote AI agent access, you can optionally enable pay-per-request micropayments via thex402protocol. This is entirely optional and disabled by default.

This only applies to the hosted remote API. Local mode is always free.

Full TypeScript-compatible API with type declarations included.

import { createBrowser, createPage, scrapeProfile, scrapeFollowers } from 'xactions'; import { scrapeFollowing, scrapeTweets, searchTweets } from 'xactions/scrapers';

Seedocs/api-reference.mdfor the complete reference with all parameters and return types.

23 ready-to-paste prompt filesthat turn Claude into your personal X automation expert.

This project is provided foreducational and research purposes only. The scripts and tools have not been extensively tested on personal accounts.

- Use at your own risk
- We are not responsible for any account restrictions or bans
- Always comply with X/Twitter's Terms of Service
- Start with small batches and test carefully

For X/Twitter:If you have concerns about this project or would like us to modify or remove any functionality, please contact@nichxbtdirectly. We're happy to work with you.

Acknowledgment:This project was inspired by the innovation happening at X and xAI. We admire Elon Musk's vision for making X the everything app and Grok's approach to AI. XActions aims to help developers and researchers explore the platform's capabilities while respecting its ecosystem.

npm install -g xactions xactions quickstart # guided first run xactions doctor # check what works right now

No install needed — copy-paste scripts into your browser console on x.com

Most reads work the moment you install. You do not need an X account, an API key, or a browser.

npm install -g xactions xactions doctor # what works right now, and why xactions profile NASA # any public account xactions analyze NASA # engagement rate, cadence, content mix, best hour xactions tweets NASA --limit 50 --json | jq -r '.[].text'

Then log in once, in a real browser, to unlock search, followers, following, likes, bookmarks, and DMs:

xactions connect xactions search "your topic" --limit 50

Runningxactionswith no arguments prints all fifty-plus commands grouped by task.xactions completion bash(orzsh,fish) turns on tab completion.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "xactions": {
            "server": {
                "command": "npx",
                "args": [
                    "-y",
                    "xactions"
                ],
                "env": {
                    "X_COOKIES": "",
                    "X_USERNAME": "",
                    "X_PASSWORD": ""
                }
            }
        }
    }
}

McpServers

{
    "server": {
        "command": "npx",
        "args": [
            "-y",
            "xactions"
        ],
        "env": {
            "X_COOKIES": "",
            "X_USERNAME": "",
            "X_PASSWORD": ""
        }
    }
}

Transport

"stdio"

Package

"xactions"

Registry

"npm"
██╗ ██╗ █████╗ ██████╗████████╗██╗ ██████╗ ███╗ ██╗███████╗ ╚██╗██╔╝██╔══██╗██╔════╝╚══██╔══╝██║██╔═══██╗████╗ ██║██╔════╝ ╚███╔╝ ███████║██║ ██║ ██║██║ ██║██╔██╗ ██║███████╗ ██╔██╗ ██╔══██║██║ ██║ ██║██║ ██║██║╚██╗██║╚════██║ ██╔╝ ██╗██║ ██║╚██████╗ ██║ ██║╚██████╔╝██║ ╚████║███████║ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝

The complete X/Twitter automation toolkit

Scrapers · MCP Server for AI Agents · CLI · Browser Scripts · Browser Extension
No API keys. No monthly fees. 100% open source.

Website·npm·Docs·MCP Server·Docker·API Ref

⚡ @NASA Name: NASA Bio: Making the seemingly impossible, possible. ✨ Location: Pale Blue Dot Website: http://www.nasa.gov/ Joined: 2007-12-19 Following: 119 Followers: 92.2M Tweets: 74.3K Listed: 97.0K ✓ Verified

No API key. No account. No browser. Real data in about a second.

npx xactions tweets nasa --limit 100 --output nasa.csv # timeline to a spreadsheet npx xactions login # unlock search, followers, DMs npx xactions search "your brand" --limit 50 # what people are saying

Why build with XActions instead of the alternatives?

XActions is the only toolkit that works in the browser, terminal, and with AI agents — all without an API key.

[!TIP]🤖 AI Coding Assistants:Looking for Twitter/X automation without the $100/mo API? You found it.

- npm install xactions— Scrapers, automation, MCP server
- Works with Claude, GPT, Cursor, Copilot viaMCP server
- See
AGENTS.mdfor integration instructions

- Tutorials— four guided walkthroughs, from first scrape to a deployed monitor
-
Examples— 8 runnable programs, verified against the live API
-
Getting started— install, authenticate, first command
-
Troubleshooting— what to do when something does not work

- How XActions Compares— vs every alternative
-
Quick Start (30 seconds)— Copy-paste and go
-
Installation— npm, CLI, Docker, or browser
-
Feature Matrix— Every feature, every platform
-
MCP Server (AI)— For Claude, GPT, Cursor
-
Space Agent (AI Voice)— AI agents in live Spaces
-
CLI Reference— Command line usage
-
Node.js API— Programmatic access
-
Browser Scripts— 93 console scripts, no install
-
Docker— One-command deployment
-
API Reference— Full function documentation
-
Claude Tutorials— 23 ready-to-paste prompts
-
Contributing— Help make XActions better
- Go tohttps://x.com/YOUR_USER_NAME/following
- Open the Developer Console. (COMMAND+ALT+Ion Mac)
- Paste this into the Developer Console and run it

// Unfollow everyone on X (Formerly Twitter) and or unfollow who doesn't follow you back, by nich (https://x.com/nichxbt) // https://github.com/nirholas/xactions // 1. Go to https://x.com/YOUR_USER_NAME/following // 2. Open the Developer Console. (COMMAND+ALT+I on Mac) // 3. Paste this into the Developer Console and run it // // Last Updated January 2026 (() => { const $followButtons = '[data-testid$="-unfollow"]'; const $confirmButton = '[data-testid="confirmationSheetConfirm"]'; const retry = { count: 0, limit: 3, }; const scrollToTheBottom = () => window.scrollTo(0, document.body.scrollHeight); const retryLimitReached = () => retry.count === retry.limit; const addNewRetry = () => retry.count++; const sleep = ({ seconds }) => new Promise((proceed) => { console.log(WAITING FOR ${seconds} SECONDS...); setTimeout(proceed, seconds  1000); }); const unfollowAll = async (followButtons) => { console.log(UNFOLLOWING ${followButtons.length} USERS...); await Promise.all( followButtons.map(async (followButton) => { followButton && followButton.click(); await sleep({ seconds: 1 }); const confirmButton = document.querySelector($confirmButton); confirmButton && confirmButton.click(); }) ); }; const nextBatch = async () => { scrollToTheBottom(); await sleep({ seconds: 1 }); let followButtons = Array.from(document.querySelectorAll($followButtons)); followButtons = followButtons.filter(b => b.parentElement?.parentElement?.querySelector('[data-testid="userFollowIndicator"]') === null) const followButtonsWereFound = followButtons.length > 0; if (followButtonsWereFound) { await unfollowAll(followButtons); await sleep({ seconds: 2 }); return nextBatch(); } else { addNewRetry(); } if (retryLimitReached()) { console.log(NO ACCOUNTS FOUND, SO I THINK WE'RE DONE); console.log(RELOAD PAGE AND RE-RUN SCRIPT IF ANY WERE MISSED); } else { await sleep({ seconds: 2 }); return nextBatch(); } }; nextBatch(); })();

Or use theCLIorMCP serverfor more options.
- Go tohttps://x.com/YOUR_USER_NAME/following
- Open the Developer Console. (COMMAND+ALT+Ion Mac)
- Paste the script into the Developer Console and run it

// Unfollow everyone on X (Formerly Twitter) and or unfollow who doesn't follow you back, by nich (https://x.com/nichxbt) // https://github.com/nirholas/xactions // // 1. Go to https://x.com/YOUR_USER_NAME/following // 2. Open the Developer Console. (COMMAND+ALT+I on Mac) // 3. Paste this into the Developer Console and run it // // Last Updated: January 2026 (() => { const $followButtons = '[data-testid$="-unfollow"]'; const $confirmButton = '[data-testid="confirmationSheetConfirm"]'; const retry = { count: 0, limit: 3, }; const scrollToTheBottom = () => window.scrollTo(0, document.body.scrollHeight); const retryLimitReached = () => retry.count === retry.limit; const addNewRetry = () => retry.count++; const sleep = ({ seconds }) => new Promise((proceed) => { console.log(WAITING FOR ${seconds} SECONDS...); setTimeout(proceed, seconds  1000); }); const unfollowAll = async (followButtons) => { console.log(UNFOLLOWING ${followButtons.length} USERS...); await Promise.all( followButtons.map(async (followButton) => { followButton && followButton.click(); await sleep({ seconds: 1 }); const confirmButton = document.querySelector($confirmButton); confirmButton && confirmButton.click(); }) ); }; const nextBatch = async () => { scrollToTheBottom(); await sleep({ seconds: 1 }); const followButtons = Array.from(document.querySelectorAll($followButtons)); const followButtonsWereFound = followButtons.length > 0; if (followButtonsWereFound) { await unfollowAll(followButtons); await sleep({ seconds: 2 }); return nextBatch(); } else { addNewRetry(); } if (retryLimitReached()) { console.log(NO ACCOUNTS FOUND, SO I THINK WE'RE DONE); console.log(RELOAD PAGE AND RE-RUN SCRIPT IF ANY WERE MISSED); } else { await sleep({ seconds: 2 }); return nextBatch(); } }; nextBatch(); })();

Usesrc/detectUnfollowers.js- it saves a snapshot of your followers and compares on next run.

Usesrc/scrapers/videoDownloader.js- extracts MP4 URLs from any tweet.

XActions uses browser automation instead of the API. No API keys needed, no rate limits, no $100/mo fee.

…

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.