Mmcp.market

x-use MCP server

by ihuzaifashoukat·io.github.ihuzaifashoukat/x-use·v2.4.1

Browser-native AI agents for X (Twitter): multi-account, MCP-ready, no X API key required.

B78/100grade B
What users say
No reviews yet
Be the first
Safety scan
B78/100

full report

Adoption
Growing

168 stars48 downloads/wk

Reviews

Write one

Nobody has reviewed x-use yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

x-use tools (33, 11 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • add_account

    Add an account to config/accounts.json (validated, backed up, atomic). `cookie_file` is a path ON THIS MACHINE to an exported x.com cookies JSON; it is validated and copied to config/<account_id>_cookies.json. Cookie values never pass through the tool call. `persona` is freeform markdown describing the account's voice/engagement style (max 4000 chars).

  • add_proxy

    Add a proxy URL to a named pool (created if new) in settings.json — validated, deduped, backed up, atomic. Credentials are masked in the response. Assign it to accounts via update_account(proxy="pool:<name>") or a direct URL.

  • approve_draftwrite action

    Execute a pending draft created by a write tool. Runs the exact same execution path as direct mode (pacing, dedup, metrics). A draft can be approved exactly once; unknown or consumed ids return an error.

  • cancel_queued_actionwrite action

    Cancel a pending or failed queued action. Done, processing, and already-cancelled items cannot transition.

  • draft_post_variationswrite action

    Generate `count` distinct takes on a topic with the server-side LLM (persona-aware) and stage each as a post DRAFT. Nothing is posted — approve one, reject the rest. Requires the 'llm' block in settings.

  • engage

    Engage with tweets found via keyword search. `actions` is a subset of ["like", "retweet"] (default ["like"]); every candidate passes the analyzer relevance gate; `max_actions` is hard-capped by the account's per-run config caps. In draft mode (default) each planned action becomes an individually approvable draft and nothing executes.

  • generate_and_postwrite action

    Generate a post about `topic` with the configured LLM and post it. In draft mode (default) the generated text is stored in the draft's payload/preview so a human reviews the actual content before anything is posted.

  • get_account

    Show one account's masked config (no cookies, no password, proxy credentials masked) plus cookie-file status. Read-only — never starts a browser.

  • get_account_health

    Read-only health snapshot for one account: config presence, cookie-file validity, metrics counters, warm-session state, queue depth, pending drafts. Never starts a browser. A config that fails validation is REPORTED (config.valid=false with the error), not raised — surfacing that is the point of a health check.

  • get_draft

    Show one draft by id. Read-only.

  • get_metrics

    Read recorded metrics for an account (counters + recent events). Read-only — never starts a browser.

  • get_run_statuswrite action

    Poll run_cycle handles. With `run_id` omitted, lists every run started since this server booted. Read-only.

  • get_tweet

    Read-only fetch of one tweet: text, author, public counts, typed media (photos + video posters) and the account's persona. With include_images=true (default) photos also attach as image content so a vision-capable client sees them; the envelope always carries URLs + alt text as the fallback. Nothing is posted; draft mode N/A.

  • list_accounts

    List configured accounts with secrets stripped (no cookies, no passwords, proxy credentials masked). Read-only — never starts a browser.

  • list_drafts

    List drafts, newest first. `status` filters to one of pending/approved/executed/failed/rejected; `account` filters by account id; `limit` caps the response (max 100). Read-only.

  • list_proxies

    List proxy pools (size, masked members, rotation cursor), the global pool strategy, each account's assignment, and the global fallback proxy. Read-only — never starts a browser.

  • list_queue

    List queued actions with their full payloads (exactly what will fire), plus per-status counts. Read-only — never starts a browser.

  • post_tweetwrite action

    Post a tweet from an account. `media` = local file paths; `community` = target community id. In draft mode (default) returns a draft for review and posts nothing; approve_draft(draft_id) executes it.

  • prepare_reply

    Read-only reply context: the tweet's text AND media (photos attach as image content so your model can see them), plus the account's keywords and persona — YOUR model writes the reply itself, no server-side LLM, nothing posted. Then pass your text to reply_to_tweet(text=...) or queue_engagement(action="reply", text=...).

  • process_queue

    Drain queued actions with jittered pacing and daily caps. THIS CALL IS THE APPROVAL GATE for queued work: items execute through the same pacing/dedup/metrics path as every other write action. With `account` omitted, every account with due items drains (each bounded by max_actions and its own daily caps).

  • queue_engagement

    Queue a like, retweet, or reply for paced execution. `action` is one of like/retweet/reply. reply requires `text` ("auto" scrapes the tweet and generates the reply NOW, so the stored payload is final). Nothing executes until process_queue is called.

  • queue_postwrite action

    Schedule a post for paced execution. Pass `text` verbatim, or a `topic` to generate the text NOW with the configured LLM (the stored payload is final — list_queue shows exactly what will be posted). `not_before` is an optional ISO 8601 timestamp. Nothing executes until process_queue is called (or auto_drain, if enabled).

  • reject_draft

    Reject a pending draft so it can never be approved. Local status change only — nothing touches X.

  • remove_accountwrite action

    Remove an account from config/accounts.json. Requires confirm=true. Closes the account's warm session. The backup written during the mutation (config/backups/) is the recovery path; the cookie file is left on disk.

  • remove_proxywrite action

    Remove a proxy URL from a pool. Requires confirm=true. The response lists accounts still assigned pool:<name> — emptying a referenced pool is allowed but reported (those accounts fall back to no proxy).

  • reply_to_tweet

    Reply to a tweet. Pass explicit `text`, or "auto" to generate the reply with the LLM from the tweet's actual content (a read-only fetch is performed so the draft shows the real reply text). In draft mode (default) nothing is posted until approve_draft(draft_id).

  • research_and_stage

    Search each keyword, keep relevant tweets (keyless heuristic), write a reply per tweet with the server-side LLM (persona-aware), and stage one reply DRAFT per tweet. Nothing is posted — review with list_drafts and approve selectively. Requires the 'llm' block in settings.

  • run_cyclewrite action

    Run the legacy batch automation cycle in the background and return a run handle immediately (progress goes to the logs — this never silent-blocks). `account` limits the run to one account; `pipelines` is a comma-separated subset of: competitor_reposts, keyword_replies, keyword_retweets, likes, content_curation, community_engagement (mapped onto the account's ActionConfig enable flags for this run

  • search_profile

    Read recent posts from ONE X profile. `profile` takes a handle ("@nasa" or "nasa"), a profile URL, or a tweet URL (which resolves to its author). Read-only (draft mode does not apply — nothing is posted), but it reuses the account's browser session. `account` defaults to the first active configured account. Use this to watch specific people and competitors, and to re-read one of your own published

  • search_tweets

    Search recent X posts for a query string. Read-only (draft mode does not apply). Reuses the account's warm browser session. `account` defaults to the first active configured account. `include_images=true` additionally attaches the first photo of up to 5 tweets as image content (bounded); the per-tweet `media` URLs + alt text are always present.

  • set_account_active

    Enable or pause an account without deleting it. Pausing closes its warm browser session.

  • test_proxy

    Probe a proxy with a throwaway browser: resolves the effective proxy (explicit proxy_url wins; otherwise the account's direct URL or pool:<name> assignment), opens an IP-echo page, and reports the egress IP + latency. The probe browser is throwaway and cookieless — never account cookies or the warm session pool — but startup performs an anonymous x.com/home load before the IP-echo fetch, so latenc

  • update_accountwrite action

    Partially update an account. Only provided fields change (None = leave unchanged); pass an empty string to clear `proxy`. `persona` sets the freeform persona text; pass an empty string to clear it. `cookie_file` re-imports cookies like add_account. The account's warm browser session is closed, so the next action cold-starts on the new config.

Public scan report

scanner v0.1.9 · 2026-09-24 · same rubric, same numbers if you re-run it

no findings
  • Code scan82 source files scanned25/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitystatic API keys via environment variables6/15
  • Maintenancelast push 37 days ago12/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
Overall 78/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

What the publisher says

From the x-use repository's README, as published. We do not edit it. Read it on GitHub

x-use

<!-- mcp-name: io.github.ihuzaifashoukat/x-use -->

Browser-native AI agents for X (Twitter). Multi-account, MCP-ready, no X API key required.

x-use drives a real, stealth-hardened browser instead of the paid X API. It posts, replies, searches, and engages across as many accounts as you configure, writes content with your own LLM, and exposes everything as MCP tools, so Claude Desktop, Claude Code, Cursor, and other MCP clients can run your X presence directly.

The X API's pricing tiers put write access out of reach for exactly the people who want to automate a couple of accounts. x-use sidesteps the API entirely: if a logged-in browser can do it, an MCP client can ask for it. And because write actions go through a draft-approval step by default, an agent can prepare work all day while nothing reaches X until a human says yes.

x-use is the v2 relaunch of twitter-automation-ai. The repository was renamed; old URLs keep redirecting, and stars, forks, and issues came along intact.

Install

From PyPI (CLI and MCP server):

pip install x-use-mcp

For the full repo setup (presets, example configs, docs), the one-line installer clones the repo, installs x-use into its own virtual environment, and finishes with x-use doctor so you can see what is left to configure.

Windows (PowerShell):

iex "& { $(irm https://raw.githubusercontent.com/ihuzaifashoukat/x-use/main/install.ps1) }"

macOS / Linux / Git Bash:

curl -fsSL https://raw.githubusercontent.com/ihuzaifashoukat/x-use/main/install.sh | bash

Or the manual way:

git clone https://github.com/ihuzaifashoukat/x-use.git
cd x-use
pip install -e .

Requires Python 3.10+ and Chrome. Any of these gives you the x-use command.

Automatic setup

Point any capable agent at this repository and it can install and configure x-use itself. SKILL.md at the root is the install-and-configure skill: it covers prerequisites, pip install, MCP client registration for Claude Desktop, Claude Code, Codex, Cursor, and Windsurf, the client restart, cookie-based account setup, keywords, and persona.

npx skills add ihuzaifashoukat/x-use

Or paste the one-shot prompt in docs/SETUP_PROMPT.md into your client. Prefer to drive it yourself? Keep reading.

Set up

x-use init     # interactive wizard: presets, account + cookie import, LLM keys
x-use doctor   # verify browser/driver, cookies, LLM keys, proxies

Then connect your AI client. Paste this into claudedesktopconfig.json (Claude Desktop > Settings > Developer > Edit Config); the same command/args pair works for any MCP client that runs stdio servers:

{
  "mcpServers": {
    "x-use": {
      "command": "x-use",
      "args": ["mcp"]
    }
  }
}

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Install directly

claude mcp add x-use -- uvx x-use-mcp
Add to Cursor

x-use: common questions

Is x-use MCP server safe?
Mostly: it is graded B (78/100). Read the x-use safety report
How do I install x-use?
It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
Does x-use need an API key?
Yes. The registry entry asks for OPENAI_API_KEY.
Is x-use maintained?
The last commit was 38 days ago (2026-08-18). The latest release is v2.4.1.
What can I use instead of x-use?
Servers from other publishers that do the same job: Safari MCP server, mac-control-mcp server and Browser Gateway MCP server. Compare all x-use alternatives.

Alternatives to x-use

Same job from other publishers: the closest match first, then the best rated.

All x-use alternatives →
  • Safari
    Native Safari browser automation for AI agents — 98 tools, zero Chrome overhead.
    C
  • mac-control-mcp
    Native Swift macOS automation — 153 tools: AX, EventKit, voice, browser DOM, undo.
    B
  • Browser Gateway
    AI browser tools with Chrome CDP. Navigate, screenshot, interact. Multi-provider failover.
    B
  • Novada
    Search, extract, crawl, map, research, scrape 16 platforms, browser automation, proxy — one API key.
    A
  • Personae
    Control specific, already-open account-isolated Personae browser identities with MCP.
    A

More from ihuzaifashoukat →