Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Crawler Summary
XActions - The Complete X/Twitter Automation Toolkit. Scrapers, MCP server for AI agents, CLI, and browser scripts. No API required. Open source by @nichxbt. Don't Panic. <div align="center"> ⚡ XActions $1 $1 $1 $1 $1 $1 $1 $1 $1 $1 $1 $1 **The complete X/Twitter automation toolkit.** Scrapers, MCP server for AI agents, CLI, browser scripts. No API keys. No monthly fees. 100% open source. Your browser does the work. $1 · $1 · $1 · $1 · $1 · $1 </div> --- 🏆 How XActions Compares Why build with XActions instead of the alternat Capability contract not published. No trust telemetry is available yet. 76 GitHub stars reported by the source. Last updated 2/25/2026.
Freshness
Last checked 2/25/2026
Best For
xactions is best for xactions, twitter, x workflows where MCP compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
editorial-content, GITHUB MCP, runtime-metrics, public facts pack
XActions - The Complete X/Twitter Automation Toolkit. Scrapers, MCP server for AI agents, CLI, and browser scripts. No API required. Open source by @nichxbt. Don't Panic. <div align="center"> ⚡ XActions $1 $1 $1 $1 $1 $1 $1 $1 $1 $1 $1 $1 **The complete X/Twitter automation toolkit.** Scrapers, MCP server for AI agents, CLI, browser scripts. No API keys. No monthly fees. 100% open source. Your browser does the work. $1 · $1 · $1 · $1 · $1 · $1 </div> --- 🏆 How XActions Compares Why build with XActions instead of the alternat
Public facts
4
Change events
0
Artifacts
0
Freshness
Feb 25, 2026
Capability contract not published. No trust telemetry is available yet. 76 GitHub stars reported by the source. Last updated 2/25/2026.
Trust score
Unknown
Compatibility
MCP
Freshness
Feb 25, 2026
Vendor
Xactions
Artifacts
0
Benchmarks
0
Last release
3.1.0
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Capability contract not published. No trust telemetry is available yet. 76 GitHub stars reported by the source. Last updated 2/25/2026.
Setup snapshot
git clone https://github.com/nirholas/XActions.gitSetup complexity is MEDIUM. Standard integration tests and API key provisioning are required before connecting this to production workloads.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Xactions
Protocol compatibility
MCP
Adoption signal
76 GitHub stars
Handshake status
UNKNOWN
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
js
// 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-RUNjs
// 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();
})()bash
# Quick start docker build -t xactions . docker run -it xactions xactions profile elonmusk # Run the MCP server docker run -p 3000:3000 xactions npm run mcp # Run the dashboard docker run -p 3000:3000 xactions npm start # With environment variables docker run -e XACTIONS_SESSION_COOKIE=your_cookie xactions xactions followers elonmusk
bash
docker compose up
typescript
import { createBrowser, createPage, scrapeProfile, scrapeFollowers } from 'xactions';
import { scrapeFollowing, scrapeTweets, searchTweets } from 'xactions/scrapers';bash
npm install xactions
Full documentation captured from public sources, including the complete README when available.
Docs source
GITHUB MCP
Editorial quality
ready
XActions - The Complete X/Twitter Automation Toolkit. Scrapers, MCP server for AI agents, CLI, and browser scripts. No API required. Open source by @nichxbt. Don't Panic. <div align="center"> ⚡ XActions $1 $1 $1 $1 $1 $1 $1 $1 $1 $1 $1 $1 **The complete X/Twitter automation toolkit.** Scrapers, MCP server for AI agents, CLI, browser scripts. No API keys. No monthly fees. 100% open source. Your browser does the work. $1 · $1 · $1 · $1 · $1 · $1 </div> --- 🏆 How XActions Compares Why build with XActions instead of the alternat
The complete X/Twitter automation toolkit. Scrapers, MCP server for AI agents, CLI, browser scripts.
No API keys. No monthly fees. 100% open source. Your browser does the work.
Dashboard · npm · Docs · MCP Server · Docker · API Reference
</div>Why build with XActions instead of the alternatives?
| Feature | XActions | twikit | twitter-mcp | agent-twitter-client | twit | twitter-scraper | |---------|:---:|:---:|:---:|:---:|:---:|:---:| | No API Key Required | ✅ | ✅ | ❌ Needs keys | ✅ | ❌ Needs keys | ✅ | | MCP Server (AI agents) | ✅ 140+ tools | ❌ | ✅ 2 tools | ❌ | ❌ | ❌ | | Browser Console Scripts | ✅ 50+ | ❌ | ❌ | ❌ | ❌ | ❌ | | CLI | ✅ 12 commands | ❌ | ❌ | ❌ | ❌ | ❌ | | Node.js Library | ✅ | ❌ Python | ✅ | ✅ | ✅ | ❌ Python | | Workflow Engine | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | Sentiment Analysis | ✅ Built-in | ❌ | ❌ | ❌ | ❌ | ❌ | | Real-Time Streaming | ✅ | ❌ | ❌ | ❌ | ✅ API only | ❌ | | Account Export/Migration | ✅ JSON/CSV/HTML | ❌ | ❌ | ❌ | ❌ | ❌ | | Dashboard (No-Code) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | Grok AI Integration | ✅ | ✅ Separate pkg | ❌ | ❌ | ❌ | ❌ | | Docker Support | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | TypeScript Types | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | | Claude Tutorials | ✅ 22 prompts | ❌ | ❌ | ❌ | ❌ | ❌ | | Language | JavaScript | Python | TypeScript | TypeScript | JavaScript | Python | | Cost | Free | Free | Free + API keys | Free | Free + API keys | Free |
XActions is the only toolkit that works in the browser, terminal, and with AI agents — all without an API key.
The biggest update since launch. 58,000+ lines of new code across 115 files.
| Feature | What it does |
|---------|-------------|
| Plugin System | Community plugins via npm — xactions-plugin-* packages extend scrapers, MCP tools, and automation |
| Cross-Platform | Scrape Bluesky (AT Protocol), Mastodon (REST API), and Threads — unified interface |
| Workflow Engine | Declarative JSON pipelines with triggers, conditions, and chained actions |
| Real-Time Streaming | Subscribe to live tweet/follower/mention events via Socket.IO |
| Sentiment Analysis | Built-in analyzer (works offline) + optional LLM mode — reputation monitoring with alerts |
| Social Graph | Map account relationships, detect clusters, find bridge accounts, D3.js visualization |
| Account Portability | Export your entire Twitter life to JSON/CSV/HTML — migration stubs for Bluesky & Mastodon |
| Browser Extension | Chrome/Firefox Manifest V3 — run automations from a popup, no console needed |
| Dashboard Upgrade | Live automation controls, real-time monitoring, visual workflow builder, analytics page |
| 15+ New Scripts | Engagement booster, shadowban checker, viral detector, thread composer, content calendar, and more |
See CHANGELOG.md for full details.
🤖 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 via MCP server
- See AGENTS.md for integration instructions
https://x.com/YOUR_USER_NAME/following
// 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 the dashboard for a visual interface.
</details> <details> <summary><strong>How do I mass unfollow on Twitter/X?</strong></summary>https://x.com/YOUR_USER_NAME/following// 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();
})();
This script:
Use src/detectUnfollowers.js - it saves a snapshot of your followers and compares on next run.
Use src/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.
</details> <details> <summary><strong>Hypefury / Tweethunter alternative?</strong></summary>XActions is open-source and completely free for humans. AI agents pay micropayments per request.
</details>Your x.com tab does all the work. Nothing gets scraped to our servers. You're in control.
Everything is completely free — browser scripts, CLI, Node.js library, MCP server, dashboard, and API.
No API keys. No subscriptions. No paywalls. Just clone and run.
<details> <summary>🤖 Optional: Remote API for AI Agents</summary>If you self-host the XActions API for remote AI agent access, you can optionally enable pay-per-request micropayments via the x402 protocol. This is entirely optional and disabled by default.
| Operation | Price | |-----------|-------| | Profile scrape | $0.001 | | Followers/Following | $0.01 | | Tweet scrape | $0.005 | | Search tweets | $0.01 | | Unfollow non-followers | $0.05 | | Detect unfollowers | $0.02 | | Auto-like | $0.02 | | Video download | $0.005 |
This only applies to the hosted remote API. Local mode is always free.
</details>| | XActions | Others | |-|---------|--------| | Scope | Browser scripts + CLI + Node.js + MCP + Dashboard + Workflows | Usually 1 thing | | API Key | Not needed | Most require Twitter API keys ($100/mo) | | MCP Tools | 140+ tools for Claude, GPT, Cursor | 0-2 tools | | AI Features | Sentiment analysis, Grok, reputation monitoring | None | | Export | JSON, CSV, Markdown, HTML archive | JSON only (if any) | | Migration | Export to Bluesky & Mastodon | None | | Tutorials | 22 Claude prompt files | None |
Run XActions anywhere with one command:
# Quick start
docker build -t xactions .
docker run -it xactions xactions profile elonmusk
# Run the MCP server
docker run -p 3000:3000 xactions npm run mcp
# Run the dashboard
docker run -p 3000:3000 xactions npm start
# With environment variables
docker run -e XACTIONS_SESSION_COOKIE=your_cookie xactions xactions followers elonmusk
Or use Docker Compose:
docker compose up
See Dockerfile for details.
Full TypeScript-compatible API with type declarations included.
import { createBrowser, createPage, scrapeProfile, scrapeFollowers } from 'xactions';
import { scrapeFollowing, scrapeTweets, searchTweets } from 'xactions/scrapers';
Core Functions:
| Function | Description | Returns |
|----------|-------------|---------|
| createBrowser(options?) | Launch Puppeteer browser | Browser |
| createPage(browser) | Create stealth page | Page |
| scrapeProfile(page, username) | Get user profile data | Profile |
| scrapeFollowers(page, username, options?) | List followers | User[] |
| scrapeFollowing(page, username, options?) | List following | User[] |
| scrapeTweets(page, username, options?) | Get user tweets | Tweet[] |
| searchTweets(page, query, options?) | Search tweets | Tweet[] |
| downloadVideo(page, tweetUrl) | Extract video URLs | VideoResult |
| exportBookmarks(page, options?) | Export bookmarks | Bookmark[] |
| unrollThread(page, tweetUrl) | Unroll a thread | Thread |
See docs/api-reference.md for the complete reference with all parameters and return types.
22 ready-to-paste prompt files that turn Claude into your personal X automation expert.
| Tutorial | What You'll Learn | |----------|------------------| | MCP Setup | Install and connect XActions to Claude Desktop | | Unfollow Cleanup | Remove non-followers, detect unfollowers | | Growth Suite | Auto-follow, auto-like, keyword targeting | | Scraping | Extract profiles, tweets, hashtags | | Content Posting | Tweets, threads, polls, scheduling | | Analytics | Performance tracking, competitor analysis | | Power User Playbook | 10 advanced multi-feature strategies |
Educational Material Only
This project is provided for educational 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 @nichxbt directly. 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 xactions
npm install -g xactions
xactions --help
Just copy-paste scripts directly into your browser console on x.com!
Browser Console — No install required!
// Go to: x.com/YOUR_USERNAME/following
// Press F12 → Console → Paste this:
(() => {
const sleep = (s) => new Promise(r => setTimeout(r, s * 1000));
const run = async () => {
const buttons = [...document.querySelectorAll('[data-testid$="-unfollow"]')]
.filter(b => !b.closest('[data-testid="UserCell"]')
?.querySelector('[data-testid="userFollowIndicator"]'));
for (const btn of buttons) {
btn.click();
await sleep(1);
document.querySelector('[data-testid="confirmationSheetConfirm"]')?.click();
await sleep(2);
}
window.scrollTo(0, document.body.scrollHeight);
await sleep(2);
if (document.querySelectorAll('[data-testid$="-unfollow"]').length) run();
else console.log('✅ Done! Reload page to continue.');
};
run();
})();
CLI:
xactions login
xactions non-followers YOUR_USERNAME --output non-followers.json
Node.js:
import { createBrowser, createPage, scrapeFollowing } from 'xactions';
const browser = await createBrowser();
const page = await createPage(browser);
const following = await scrapeFollowing(page, 'your_username', { limit: 500 });
const nonFollowers = following.filter(u => !u.followsBack);
console.log(`Found ${nonFollowers.length} non-followers`);
await browser.close();
💡 Don't want to code? Use xactions.app — just login and click!
Browser Console:
// Go to any profile on x.com, then run:
(() => {
const profile = {
name: document.querySelector('[data-testid="UserName"]')?.textContent?.split('@')[0]?.trim(),
username: location.pathname.slice(1),
bio: document.querySelector('[data-testid="UserDescription"]')?.textContent,
followers: document.querySelector('a[href$="/followers"] span')?.textContent,
following: document.querySelector('a[href$="/following"] span')?.textContent,
};
console.log(profile);
copy(JSON.stringify(profile, null, 2)); // Copies to clipboard!
})();
CLI:
xactions profile elonmusk --json
Node.js:
import { createBrowser, createPage, scrapeProfile } from 'xactions';
const browser = await createBrowser();
const page = await createPage(browser);
const profile = await scrapeProfile(page, 'elonmusk');
console.log(profile);
// { name: 'Elon Musk', followers: '200M', bio: '...', ... }
await browser.close();
Browser Console:
// Go to: x.com/search?q=YOUR_KEYWORD&f=live
(() => {
const tweets = [...document.querySelectorAll('article[data-testid="tweet"]')]
.map(article => ({
text: article.querySelector('[data-testid="tweetText"]')?.textContent,
author: article.querySelector('[data-testid="User-Name"] a')?.href?.split('/')[3],
time: article.querySelector('time')?.getAttribute('datetime'),
}));
console.table(tweets);
copy(JSON.stringify(tweets, null, 2));
})();
CLI:
xactions search "AI startup" --limit 100 --output ai-tweets.json
Node.js:
import { createBrowser, createPage, searchTweets } from 'xactions';
const browser = await createBrowser();
const page = await createPage(browser);
const tweets = await searchTweets(page, 'AI startup', { limit: 100 });
console.log(`Found ${tweets.length} tweets`);
await browser.close();
Browser Console:
// Go to: x.com/YOUR_USERNAME/followers
(() => {
const KEY = 'xactions_followers';
const sleep = (ms) => new Promise(r => setTimeout(r, ms));
const scrape = async () => {
const users = new Set();
let retries = 0;
while (retries < 5) {
document.querySelectorAll('[data-testid="UserCell"] a')
.forEach(a => users.add(a.href.split('/')[3]?.toLowerCase()));
window.scrollTo(0, document.body.scrollHeight);
await sleep(1500);
retries++;
}
return [...users].filter(Boolean);
};
scrape().then(current => {
const saved = localStorage.getItem(KEY);
if (saved) {
const old = JSON.parse(saved);
const gone = old.filter(u => !current.includes(u));
console.log('🚨 Unfollowed you:', gone);
}
localStorage.setItem(KEY, JSON.stringify(current));
console.log(`💾 Saved ${current.length} followers`);
});
})();
CLI:
# First run saves snapshot
xactions followers YOUR_USERNAME --output snapshot1.json
# Later, compare
xactions followers YOUR_USERNAME --output snapshot2.json
# Use diff tools to compare
Browser Console:
// Go to: x.com/search?q=YOUR_KEYWORD&f=live
(async () => {
const sleep = (s) => new Promise(r => setTimeout(r, s * 1000));
const liked = new Set();
while (liked.size < 20) { // Like 20 posts
const buttons = [...document.querySelectorAll('[data-testid="like"]')]
.filter(b => !liked.has(b));
for (const btn of buttons.slice(0, 3)) {
btn.click();
liked.add(btn);
console.log(`❤️ Liked ${liked.size} posts`);
await sleep(3 + Math.random() * 2); // Random delay
}
window.scrollTo(0, document.body.scrollHeight);
await sleep(2);
}
console.log('✅ Done!');
})();
⚠️ Go slow! Twitter may rate-limit you. The website version handles this automatically.
Browser Console:
// Go to: x.com/YOUR_USERNAME/communities
(() => {
const $communityLinks = 'a[href^="/i/communities/"]';
const $joinedButton = 'button[aria-label^="Joined"]';
const $confirmButton = '[data-testid="confirmationSheetConfirm"]';
const $communitiesNav = 'a[aria-label="Communities"]';
const getLeftCommunities = () => {
try { return JSON.parse(sessionStorage.getItem('xactions_left_ids') || '[]'); }
catch { return []; }
};
const markAsLeft = (id) => {
const left = getLeftCommunities();
if (!left.includes(id)) {
left.push(id);
sessionStorage.setItem('xactions_left_ids', JSON.stringify(left));
}
};
const sleep = (ms) => new Promise(r => setTimeout(r, ms));
const getCommunityId = () => {
const leftAlready = getLeftCommunities();
for (const link of document.querySelectorAll($communityLinks)) {
const match = link.href.match(/\/i\/communities\/(\d+)/);
if (match && !leftAlready.includes(match[1])) return { id: match[1], element: link };
}
return null;
};
const run = async () => {
console.log(`🚀 Left so far: ${getLeftCommunities().length}`);
await sleep(1500);
const joinedBtn = document.querySelector($joinedButton);
if (joinedBtn) {
const urlMatch = window.location.href.match(/\/i\/communities\/(\d+)/);
const currentId = urlMatch ? urlMatch[1] : null;
joinedBtn.click();
await sleep(1000);
const confirmBtn = document.querySelector($confirmButton);
if (confirmBtn) { confirmBtn.click(); if (currentId) markAsLeft(currentId); await sleep(1500); }
const communitiesLink = document.querySelector($communitiesNav);
if (communitiesLink) { communitiesLink.click(); await sleep(2500); return run(); }
}
const community = getCommunityId();
if (community) { community.element.click(); await sleep(2500); return run(); }
else { console.log(`🎉 DONE! Left ${getLeftCommunities().length} communities`); sessionStorage.removeItem('xactions_left_ids'); }
};
run();
})();
📖 Full documentation: docs/examples/leave-all-communities.md
| Feature | Console Script | CLI | Node.js | Website | |---------|:-------------:|:---:|:-------:|:-------:| | SCRAPING | | Scrape Profile | ✅ | ✅ | ✅ | ✅ | | Scrape Followers | ✅ | ✅ | ✅ | ✅ | | Scrape Following | ✅ | ✅ | ✅ | ✅ | | Scrape Tweets | ✅ | ✅ | ✅ | ✅ | | Search Tweets | ✅ | ✅ | ✅ | ✅ | | Scrape Thread | ✅ | ✅ | ✅ | ✅ | | Scrape Hashtag | ✅ | ✅ | ✅ | ✅ | | Scrape Media | ✅ | ✅ | ✅ | ✅ | | Scrape List Members | ✅ | ✅ | ✅ | ✅ | | Scrape Likes | ✅ | ✅ | ✅ | ✅ | | UNFOLLOW | | Unfollow Non-Followers | ✅ | ✅ | ✅ | ✅ | | Unfollow Everyone | ✅ | ✅ | ✅ | ✅ | | Smart Unfollow (after X days) | ⚠️ | ✅ | ✅ | ✅ | | Unfollow with Logging | ✅ | ✅ | ✅ | ✅ | | FOLLOW | | Follow User | ✅ | ✅ | ✅ | ✅ | | Keyword Follow | ⚠️ | ✅ | ✅ | ✅ | | Follow Engagers | ⚠️ | ✅ | ✅ | ✅ | | Follow Target's Followers | ⚠️ | ✅ | ✅ | ✅ | | ENGAGEMENT | | Like Tweet | ✅ | ✅ | ✅ | ✅ | | Retweet | ✅ | ✅ | ✅ | ✅ | | Auto-Liker | ⚠️ | ✅ | ✅ | ✅ | | Auto-Commenter | ⚠️ | ✅ | ✅ | ✅ | | Post Tweet | ✅ | ✅ | ✅ | ✅ | | MONITORING | | Detect Unfollowers | ✅ | ✅ | ✅ | ✅ | | New Follower Alerts | ✅ | ✅ | ✅ | ✅ | | Monitor Any Account | ✅ | ✅ | ✅ | ✅ | | Continuous Monitoring | ⚠️ | ✅ | ✅ | ✅ | | COMMUNITIES | | Leave All Communities | ✅ | ⚠️ | ⚠️ | ⚠️ | | ADVANCED | | Multi-Account | ❌ | ✅ | ✅ | ✅ Pro | | Link Scraper | ✅ | ✅ | ✅ | ✅ | | Growth Suite | ❌ | ✅ | ✅ | ✅ Pro | | Customer Service Bot | ❌ | ✅ | ✅ | ✅ Pro | | MCP Server (AI Agents) | ❌ | ✅ | ✅ | ❌ | | Export to CSV/JSON | ✅ | ✅ | ✅ | ✅ |
Legend: ✅ Full Support | ⚠️ Basic/Manual | ❌ Not Available
XActions includes the most comprehensive free MCP server for X/Twitter. Works with Claude, Cursor, Windsurf, VS Code, and any MCP client.
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"xactions": {
"command": "npx",
"args": ["-y", "xactions-mcp"],
"env": {
"XACTIONS_SESSION_COOKIE": "your_auth_token_here"
}
}
}
}
Get your auth_token: x.com → DevTools (F12) → Application → Cookies → copy
auth_tokenvalue
Or auto-generate the config:
npx xactions mcp-config --client claude
npx xactions mcp-config --client cursor
npx xactions mcp-config --client windsurf
| Category | Tools |
|----------|-------|
| Scraping | x_get_profile, x_get_followers, x_get_following, x_get_tweets, x_search_tweets, x_get_thread, x_download_video, x_get_replies, x_get_hashtag, x_get_likers, x_get_retweeters, x_get_media, x_get_mentions, x_get_quote_tweets, x_get_likes, x_get_recommendations |
| Analysis | x_detect_unfollowers, x_analyze_sentiment, x_best_time_to_post, x_competitor_analysis, x_brand_monitor, x_audience_insights, x_engagement_report, x_crypto_analyze |
| Actions | x_follow, x_unfollow, x_like, x_post_tweet, x_post_thread, x_reply, x_retweet, x_quote_tweet, x_bookmark, x_send_dm, x_create_poll, x_delete_tweet |
| Automation | x_auto_follow, x_follow_engagers, x_unfollow_all, x_smart_unfollow, x_auto_comment, x_auto_retweet, x_auto_like, x_unfollow_non_followers |
| AI | x_analyze_voice, x_generate_tweet, x_summarize_thread, x_rewrite_tweet, x_detect_bots, x_find_influencers, x_smart_target, x_grok_analyze_image |
| Monitoring | x_monitor_account, x_monitor_keyword, x_follower_alerts, x_track_engagement, x_monitor_reputation, x_stream_start |
| Workflows | x_workflow_create, x_workflow_run, x_workflow_list, x_workflow_actions |
| Persona | x_persona_create, x_persona_run, x_persona_edit, x_persona_list, x_persona_presets |
| Portability | x_export_account, x_migrate_account, x_diff_exports, x_import_data, x_convert_format |
| Graph | x_graph_build, x_graph_analyze, x_graph_recommendations, x_graph_list |
"Analyze @paulg's writing style and generate 3 tweet ideas about startups in his voice" → Scrapes tweets → analyzes voice → generates content with AI
"Find everyone I follow who doesn't follow me back, sorted by follower count" → Uses x_get_following + x_get_followers → computes diff → formats results
"Compare the engagement metrics of @openai, @anthropic, and @google" → Scrapes profiles + recent tweets → computes avg engagement → presents comparison
📖 Full setup guide: docs/mcp-setup.md
# Authentication
xactions login # Set up session cookie
xactions logout # Remove saved auth
# Profile
xactions profile <user> # Get profile info
xactions profile elonmusk --json
# Scraping
xactions followers <user> [--limit 100] [--output file.json]
xactions following <user> [--limit 100] [--output file.csv]
xactions tweets <user> [--limit 50] [--replies]
xactions search <query> [--filter latest|top] [--limit 50]
xactions hashtag <tag> [--limit 50]
xactions thread <url>
xactions media <user> [--limit 50]
# Analysis
xactions non-followers <user> [--limit 500]
# MCP
xactions mcp-config # Generate MCP config for Claude Desktop
xactions mcp-config --client cursor --write # Write config for Cursor
# Info
xactions info # Show version and links
xactions --help # Full help
import {
createBrowser,
createPage,
loginWithCookie,
scrapeProfile,
scrapeFollowers,
scrapeFollowing,
scrapeTweets,
searchTweets,
exportToJSON,
exportToCSV
} from 'xactions';
// Initialize
const browser = await createBrowser({ headless: true });
const page = await createPage(browser);
// Optional: Login for private data
await loginWithCookie(page, 'your_auth_token_cookie');
// Scrape profile
const profile = await scrapeProfile(page, 'elonmusk');
// Scrape followers with progress
const followers = await scrapeFollowers(page, 'elonmusk', {
limit: 1000,
onProgress: ({ scraped, limit }) => console.log(`${scraped}/${limit}`)
});
// Export data
await exportToJSON(followers, 'followers.json');
await exportToCSV(followers, 'followers.csv');
await browser.close();
// Profile
scrapeProfile(page, username)
// Followers & Following
scrapeFollowers(page, username, { limit, onProgress })
scrapeFollowing(page, username, { limit, onProgress })
// Tweets
scrapeTweets(page, username, { limit, includeReplies, onProgress })
searchTweets(page, query, { limit, filter: 'latest'|'top' })
scrapeThread(page, tweetUrl)
scrapeHashtag(page, hashtag, { limit, filter })
// Media
scrapeMedia(page, username, { limit })
scrapeLikes(page, tweetUrl, { limit })
// Lists
scrapeListMembers(page, listUrl, { limit })
// Export
exportToJSON(data, filename)
exportToCSV(data, filename)
Visit xactions.app for a no-code solution:
100% Free. No API keys, no payments, no limits.
XActions includes built-in delays to avoid rate limits:
auth_token and copy the valuexactions/
├── src/
│ ├── index.js # Main entry point
│ ├── scrapers/ # Multi-platform scrapers
│ │ ├── index.js # Unified interface: scrape(platform, type, opts)
│ │ ├── twitter/ # X/Twitter scrapers (Puppeteer)
│ │ ├── bluesky/ # Bluesky scrapers (AT Protocol)
│ │ ├── mastodon/ # Mastodon scrapers (REST API)
│ │ └── threads/ # Threads scrapers (Puppeteer)
│ ├── cli/ # Command-line interface
│ ├── mcp/ # MCP server (140+ tools for AI agents)
│ ├── automation/ # Browser console automation scripts
│ ├── plugins/ # Plugin system (loader, manager, template)
│ ├── streaming/ # Real-time event streams (Socket.IO)
│ ├── workflows/ # Declarative automation pipelines
│ ├── analytics/ # Sentiment analysis & reputation monitoring
│ ├── portability/ # Account export, migration, archive viewer
│ └── graph/ # Social graph analysis & visualization
├── api/ # Express REST API
│ ├── routes/ # 29 route modules
│ ├── services/ # Business logic + Bull job queue
│ ├── middleware/ # Auth, x402, AI detection
│ └── realtime/ # Socket.IO handler
├── dashboard/ # Web UI (static HTML + Chart.js)
├── extension/ # Chrome/Firefox browser extension (Manifest V3)
├── docs/ # Documentation
├── skills/ # 26 Agent Skills (skills/*/SKILL.md)
├── tests/ # Vitest test suite
└── prisma/ # Database schema
Contributions welcome! See CONTRIBUTING.md.
# Clone
git clone https://github.com/nirholas/xactions.git
cd xactions
# Install
npm install
# Run CLI locally
npm run cli -- profile elonmusk
# Run MCP server
npm run mcp
MIT License - see LICENSE
Commercial use allowed. Attribution appreciated but not required.
nich (@nichxbt)
This software is provided "as is" for educational purposes. Not affiliated with X Corp. Use responsibly and in compliance with X/Twitter Terms of Service. Contact @nichxbt for any concerns.
If XActions saved you from paying $100/mo for Twitter's API, smash that star button. It's how open source grows.
<div align="center">XActions is 100% free and open source. Visit xactions.app for interactive tutorials.
NEW! Run scripts without any coding knowledge:
No console, no code, no setup!
| Category | Scripts | Tutorial | |----------|---------|----------| | Unfollow | Unfollow Everyone, Non-Followers, Smart Unfollow | Tutorial | | Automation | Auto-Liker, Auto-Commenter, Follow Engagers | Tutorial | | Scraping | Video Download, Followers, Tweets, Hashtags | Tutorial | | Monitoring | Detect Unfollowers, Track Accounts, Alerts | Tutorial | | Communities | Leave All Communities | Tutorial | | AI/MCP | Claude Desktop, GPT Integration | Tutorial |
| Feature | Documentation | |---------|---------------| | Unfollow Everyone | unfollow-everyone.md | | Unfollow Non-Followers | unfollow-non-followers.md | | Detect Unfollowers | detect-unfollowers.md | | Auto-Liker | auto-liker.md | | Auto-Commenter | auto-commenter.md | | Follow Engagers | follow-engagers.md | | Video Downloader | video-downloader.md | | Followers Scraping | followers-scraping.md | | Tweet Scraping | tweet-scraping.md | | Leave Communities | leave-all-communities.md | | MCP Server | mcp-server.md | | Monitor Account | monitor-account.md | | New Follower Alerts | new-follower-alerts.md |
XActions is deployed and accessible over HTTP via MCP Streamable HTTP transport — no local installation required.
Endpoint:
https://modelcontextprotocol.name/mcp/xactions
Add to your MCP client configuration (Claude Desktop, Cursor, SperaxOS, etc.):
{
"mcpServers": {
"xactions": {
"type": "http",
"url": "https://modelcontextprotocol.name/mcp/xactions"
}
}
}
| Tool | Description |
|------|-------------|
| search_twitter_users | Search X/Twitter profiles |
| get_twitter_trends | Trending topics |
| analyze_social_sentiment | Social sentiment analysis |
Search X/Twitter profiles:
curl -X POST https://modelcontextprotocol.name/mcp/xactions \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_twitter_users","arguments":{"query":"crypto"}}}'
Trending topics:
curl -X POST https://modelcontextprotocol.name/mcp/xactions \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_twitter_trends","arguments":{"query":"bitcoin"}}}'
Social sentiment analysis:
curl -X POST https://modelcontextprotocol.name/mcp/xactions \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"analyze_social_sentiment","arguments":{"topic":"ethereum"}}}'
curl -X POST https://modelcontextprotocol.name/mcp/xactions \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Powered by modelcontextprotocol.name — the open MCP HTTP gateway
If you find this useful, please consider giving it a ⭐ — it helps others discover the project!
Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/snapshot"
curl -s "https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/contract"
curl -s "https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
80
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
74
Expose OpenAPI definition endpoints as MCP tools using the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Rank
72
An actix_web backend for the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"MCP"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_MCP",
"generatedAt": "2026-04-16T23:54:18.523Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "MCP",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
},
{
"key": "xactions",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "x",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-automation",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-bot",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-scraper",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-unfollow",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-growth",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "mass-unfollow",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "unfollow-tool",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-tools",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "social-media-automation",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-api-alternative",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "puppeteer",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-manager",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "follower-management",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-cleanup",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "auto-follow",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "auto-like",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-analytics",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "mcp",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "model-context-protocol",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "ai-agent",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "claude",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "gpt",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "chatgpt",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "saas",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "hypefury-alternative",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "tweethunter-alternative",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "free-twitter-api",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-without-api",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "bulk-unfollow",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "who-unfollowed-me",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-followers-tracker",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "download-twitter-video",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-thread-saver",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "twitter-bookmark-export",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "vibe-coding",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "no-code-twitter",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "thought-leader",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "algorithm-training",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "x-algorithm",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "cli",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
}
],
"flattenedTokens": "protocol:MCP|unknown|profile capability:xactions|supported|profile capability:twitter|supported|profile capability:x|supported|profile capability:twitter-automation|supported|profile capability:twitter-bot|supported|profile capability:twitter-scraper|supported|profile capability:twitter-unfollow|supported|profile capability:twitter-growth|supported|profile capability:mass-unfollow|supported|profile capability:unfollow-tool|supported|profile capability:twitter-tools|supported|profile capability:social-media-automation|supported|profile capability:twitter-api-alternative|supported|profile capability:puppeteer|supported|profile capability:twitter-manager|supported|profile capability:follower-management|supported|profile capability:twitter-cleanup|supported|profile capability:auto-follow|supported|profile capability:auto-like|supported|profile capability:twitter-analytics|supported|profile capability:mcp|supported|profile capability:model-context-protocol|supported|profile capability:ai-agent|supported|profile capability:claude|supported|profile capability:gpt|supported|profile capability:chatgpt|supported|profile capability:saas|supported|profile capability:hypefury-alternative|supported|profile capability:tweethunter-alternative|supported|profile capability:free-twitter-api|supported|profile capability:twitter-without-api|supported|profile capability:bulk-unfollow|supported|profile capability:who-unfollowed-me|supported|profile capability:twitter-followers-tracker|supported|profile capability:download-twitter-video|supported|profile capability:twitter-thread-saver|supported|profile capability:twitter-bookmark-export|supported|profile capability:vibe-coding|supported|profile capability:no-code-twitter|supported|profile capability:thought-leader|supported|profile capability:algorithm-training|supported|profile capability:x-algorithm|supported|profile capability:cli|supported|profile"
}Facts JSON
[
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Xactions",
"href": "https://xactions.app",
"sourceUrl": "https://xactions.app",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-02-25T02:31:21.659Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "MCP",
"href": "https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-02-25T02:31:21.659Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "76 GitHub stars",
"href": "https://github.com/nirholas/XActions",
"sourceUrl": "https://github.com/nirholas/XActions",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-02-25T02:31:21.659Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-nirholas-xactions/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[]
Sponsored
Ads related to xactions and adjacent AI workflows.