twscrape Twitter/X (read-only)

io.github.jsilets由 GitHub 帳號 jsilets 發布v0.1.6更新於 Nov 8, 2026

Read-only X/Twitter MCP: posts, threads, replies, search via twscrape. No API key.

概覽

AI 產生的概覽

唯讀的 X/Twitter MCP 伺服器,讓助理用你自己的已登入工作階段讀取貼文、長推文串、回覆、引用、時間軸與搜尋結果。

可以做什麼
  • 以乾淨的 Markdown 讀取單一貼文,含圖片、影片與外部連結
  • 讀取某則貼文的長推文串、回覆與引用推文
  • 列出某位使用者最近的貼文,可選擇包含其回覆
  • 使用 from:、has:media、min_faves: 等運算子搜尋 X
  • 查看使用者個人檔案,包括簡介、地點、追蹤與粉絲數及加入日期
適用情境
適合讓助理研究或摘要公開的 X 討論、追蹤某個帳號的最新貼文,或在不付費使用 X API、不申請開發者帳號的情況下取得某則貼文的回覆與引用。
執行需求
以 Python 套件透過 uv tool install 或 pipx 在本機安裝並以 stdio 執行(也列出 uvx)。需要一次性驗證:啟動專用 Chrome/Brave 設定檔登入 X、附加到具除錯埠的獨立 Chromium 設定檔,或透過隱藏提示輸入 auth_token 與 ct0 cookie。選用環境變數可設定資料目錄、帳號資料庫、代理、CDP 位址、預設結果數量與 HTTP bearer 權杖。
安裝前請注意
它會沿用你自己的 X 工作階段,任何能連上已對外開放 HTTP 端點的人都能藉此使用該工作階段;對外提供 HTTP 前務必設定 TWSCRAPE_TWITTER_MCP_AUTH_TOKEN。工作階段 cookie 會存於磁碟,託管部署時需傳送該檔案。以此方式讀取 X 可能違反 X 的服務條款,帳號可能被限流或停權,建議使用備用小帳。瀏覽器除錯埠會暴露瀏覽器資料。引用推文涵蓋不完整,搜尋結果也隨工作階段而異。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 twscrape Twitter/X (read-only),將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

twscrape-twitter-mcp

[PyPI] [CI] [Python] [License: MIT] [MCP]

An MCP server that reads X (Twitter): posts, threads, replies, quotes, and search. It wraps twscrape and uses your own logged-in session, so there's no paid X API and no developer account. Tools return clean markdown shaped for an agent to read, including image, video, and GIF URLs and any external links in a post.

Works with any MCP client over the two standard transports — local stdio and hosted Streamable HTTP.

Tools

ToolReturns
read_tweet(url_or_id)One post as markdown.
read_thread(url_or_id, max_replies=50)Root post + the author's self-thread + top replies.
read_replies(url_or_id, limit=50)Replies to a post.
read_quotes(url_or_id, limit=30)Quote-tweets (best-effort, search-based).
user_timeline(username, limit=40, include_replies=False)A user's recent posts, newest first. Set include_replies=True to include replies.
search(query, limit=20, product="Latest")Search results. Supports from:, has:media, min_faves:, etc.
user_profile(username)A user's profile as markdown: bio, location, follower/following/tweet counts, join date.

Install

bash
uv tool install twscrape-twitter-mcp     # or: pipx install twscrape-twitter-mcp

Then authenticate once (next section) and verify:

bash
twscrape-twitter-mcp smoke               # reads one public tweet end-to-end

Authenticate

Reads run against your own X session. Pick one path:

1. Launch a dedicated browser (recommended). Opens a separate Chrome/Brave profile with a DevTools port, you sign in to X once, and the session is captured. It does not touch your daily browser or automate X's login flow.

bash
twscrape-twitter-mcp login --launch-browser chrome   # or: brave

2. Attach to a dedicated browser profile. Only use this when you already run an isolated Chromium profile with a debug port. Browser debugging exposes browser data, and recent Chrome versions do not enable it for the default profile.

bash
# macOS"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --remote-debugging-port=9222 --user-data-dir=/tmp/x-mcp-browser# Linux:   google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/x-mcp-browser# Windows: "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir=%TEMP%\x-mcp-browser
twscrape-twitter-mcp login --attach                  # add --cdp-url for a non-default port

3. Headless / CI (raw cookies). A server can't open your desktop browser, so add a session from auth_token + ct0 cookies. Run this without cookie flags to enter values through hidden prompts, rather than leaving secrets in shell history:

bash
twscrape-twitter-mcp init

The captured session is reused across restarts. Run login --launch-browser chrome again when it expires, or to add burner sessions for rate-limit rotation. twscrape-twitter-mcp accounts lists the pool.

Use burner accounts, not your main — see Legal.

Connect your client

The server runs locally over stdio. Most MCP clients take a JSON block like this:

json
{  "mcpServers": {    "x": {      "command": "twscrape-twitter-mcp",      "args": ["serve", "--transport", "stdio"]    }  }}

Client-specific equivalents:

Claude Code
bash
claude mcp add x --scope user -- twscrape-twitter-mcp serve --transport stdio
Claude Desktop

Add the JSON block above to claude_desktop_config.json (Settings → Developer → Edit Config).

Codex — ~/.codex/config.toml
toml
[mcp_servers.x]command = "twscrape-twitter-mcp"args = ["serve", "--transport", "stdio"]
Cursor — ~/.cursor/mcp.json
json
{  "mcpServers": {    "x": {      "command": "twscrape-twitter-mcp",      "args": ["serve", "--transport", "stdio"]    }  }}
VS Code — .vscode/mcp.json
json
{  "servers": {    "x": {      "command": "twscrape-twitter-mcp",      "args": ["serve", "--transport", "stdio"]    }  }}
Remote (Streamable HTTP)

For a hosted private instance (see Deploy), point a preconfigured client at the HTTP endpoint with a bearer token. This is static bearer auth, not an OAuth sign-in flow.

json
{  "mcpServers": {    "x": {      "url": "https://YOUR-APP.example.com/mcp",      "headers": { "Authorization": "Bearer YOUR_TOKEN" }    }  }}

Then ask, e.g. "read this thread: <url>".

Deploy

Run the server always-on and reachable over HTTP (POST /mcp). It ships as a container; Cloudflare Workers won't work because twscrape is Python with native deps.

A headless container can't open your desktop browser, so authenticate locally first (login --attach writes storage_state.json under TWSCRAPE_TWITTER_MCP_HOME), then ship that session to the host — copy the file to the mounted volume, or run the cookie-based init over SSH. The server reloads a persisted session on boot.

Always set a token when exposing HTTP — anyone who can reach the endpoint can use your X session:

bash
export TWSCRAPE_TWITTER_MCP_AUTH_TOKEN=$(openssl rand -hex 32)
Fly.io
bash
fly launch --no-deployfly volumes create twscrape_twitter_mcp_data --size 1fly secrets set TWSCRAPE_TWITTER_MCP_AUTH_TOKEN=$(openssl rand -hex 32)fly deploy# seed a session onto the volume through hidden prompts:fly ssh console -C "twscrape-twitter-mcp init"
Railway

Point Railway at this repo (it reads railway.json + Dockerfile), add a volume mounted at /data, set TWSCRAPE_TWITTER_MCP_AUTH_TOKEN, and seed a session via the Railway shell with twscrape-twitter-mcp init.

Clients send Authorization: Bearer <token>.

Configuration

Env varDefaultPurpose
TWSCRAPE_TWITTER_MCP_HOME~/.config/twscrape-twitter-mcpWhere the sqlite account pool lives. Point at a volume in prod.
TWSCRAPE_TWITTER_MCP_DB$TWSCRAPE_TWITTER_MCP_HOME/accounts.dbOverride the pool path directly.
TWSCRAPE_TWITTER_MCP_AUTH_TOKEN(unset)Required bearer token for HTTP transport.
TWSCRAPE_TWITTER_MCP_PROXY(unset)Global proxy for every account.
TWSCRAPE_TWITTER_MCP_CDP_URLhttp://127.0.0.1:9222Browser DevTools endpoint for login --attach.
TWSCRAPE_TWITTER_MCP_DEFAULT_LIMIT40Default timeline and search result count (1–100).
PORT8080HTTP port (Railway injects this).

How it works

The hard part of reading X — GraphQL signing, the x-client-transaction-id header, TLS fingerprinting — lives entirely in twscrape, which is pinned. This package is a read-only MCP layer on top and never touches that machinery. When X changes something and reads break, the fix is a version bump, not reverse-engineering.

Limits

  • X can expire, rate-limit, or suspend the account behind your session.
  • Protected, deleted, geo-blocked, or otherwise restricted posts may not be readable.
  • Quote-tweet coverage is search-based and incomplete.
  • Search results depend on X's current search behavior and can vary by session.
  • It does not decrypt browser cookie stores — use browser attach or cookie init.

Legal

Reading X with your own logged-in session may violate X's Terms of Service, and accounts used for scraping can be rate-limited or suspended. Use burner accounts, not your main. Provided as-is for research and personal use; you are responsible for how you use it.

License

MIT.

Credits

The hard scraping work is twscrape by vladkens. This is a read-only MCP layer on top — go star it.

來源:README.md,提交 dabefb8

工具

8

auth_status

Auth Status

Check whether this server has an active X session, without exposing cookies.

無需輸入參數。

read_tweet

Read Tweet

Read a single X post by URL or numeric id. Returns clean markdown.

輸入參數url_or_id必填

user_profile

User Profile

Read an X user's profile by handle. Returns clean markdown. Pass the handle with or without a leading @.

輸入參數username必填

read_thread

Read Thread

Read a full X thread as markdown: the root post, the author's self-thread, and top replies. Pass any tweet in the thread.

輸入參數url_or_id必填max_repliesinclude_replies

read_replies

Read Replies

Read the replies to an X post as markdown.

輸入參數limiturl_or_id必填

read_quotes

Read Quotes

Read quote-tweets of an X post (best-effort, via search:quoted_tweet_id). Coverage is partial, X does not expose a complete quotes endpoint.

輸入參數limiturl_or_id必填

user_timeline

User Timeline

Read a user's recent posts as markdown, newest first. Pass the handle with or without a leading @. Set include_replies=True to include the user's replies alongside their standalone posts.

輸入參數limitusername必填include_replies

版本歷史

1
  1. v0.1.2Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分