Skip to main content

Twitter/X MCP server powered by twikit — no API key needed, free forever

Project description

twikit-mcp

Twitter/X MCP Server — No API Key Required

CI PyPI Python License: MIT

An MCP server that lets Claude (or any MCP-compatible AI agent) interact with Twitter/X using browser cookies. No Twitter API key needed. Free forever.

English | 中文 | 日本語


English

Why twikit-mcp?

twikit-mcp (this project) Other Twitter MCP servers
Auth Browser cookies Twitter API Key
Cost Free $200+/month
Setup 2 steps, 2 minutes Apply for developer account, wait for approval
API twikit (reverse-engineered) X API (official, paid)

Quick Start

1. Create cookies.json

  1. Log in to x.com in your browser
  2. Open DevTools (F12) → ApplicationCookieshttps://x.com
  3. Copy ct0 and auth_token
mkdir -p ~/.config/twitter-mcp
cat > ~/.config/twitter-mcp/cookies.json << 'EOF'
{"ct0": "YOUR_CT0", "auth_token": "YOUR_AUTH_TOKEN"}
EOF
chmod 600 ~/.config/twitter-mcp/cookies.json

What are these? ct0 is the CSRF token (~160 hex chars), auth_token is your session token (40 hex chars). They are found in your browser cookies after logging in to x.com. Cookies expire — auth_token typically lasts several months, ct0 may be shorter. Re-extract from your browser when expired.

2. Install & register

Choose one of the following methods:

Option A: uvx — zero-install, fetches each call (slow first run, fast after; cache shared with other uv tools). Best for quick try-out.

# Claude Code
claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- uvx twikit-mcp

# Or run directly
uvx twikit-mcp

Option B: uv tool install (recommended for daily use) — pinned isolated venv, instant startup, simple upgrade path.

# Install once. Drops a `twikit-mcp` binary on PATH (~/.local/bin).
uv tool install twikit-mcp

# List your installed uv tools (sanity check)
uv tool list

# Upgrade when a new version ships
uv tool upgrade twikit-mcp
# Or upgrade ALL uv-tool-managed binaries at once:
uv tool upgrade --all

# Uninstall (clean removal of the venv + binary)
uv tool uninstall twikit-mcp

Then register with Claude Code (uses the binary on PATH — no uvx prefix):

claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- twikit-mcp

The cookies file is the same as for every other option: ~/.config/twitter-mcp/cookies.json (or wherever TWITTER_COOKIES env var points). uv tool install doesn't change where config lives — only where the binary lives.

uvx vs uv tool install quick rule: use uvx if you'll call it once or twice (e.g. one-off script). Use uv tool install if it's part of your dev workflow (e.g. wired into Claude Code daily) — startup is instant after the one-time install.

Option C: pip

pip install twikit-mcp

# Claude Code
claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- twikit-mcp

# Or run directly
TWITTER_COOKIES=~/.config/twitter-mcp/cookies.json twikit-mcp

Option D: pipx (isolated install — same idea as uv tool install, but with pipx)

pipx install twikit-mcp

# Claude Code
claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- twikit-mcp

Using with other MCP clients

This is a standard MCP server (stdio transport). It works with any MCP-compatible client — not just Claude Code.

Add to your MCP client config (e.g. mcp.json, settings.json):

{
  "mcpServers": {
    "twitter": {
      "command": "twikit-mcp",
      "env": {
        "TWITTER_COOKIES": "/home/YOU/.config/twitter-mcp/cookies.json"
      }
    }
  }
}

Works with: Claude Code, Claude Desktop, Cursor, Windsurf, opencode, Cline, etc.

That's it. Start talking:

> Search tweets about AI
> What did @elonmusk post recently?
> Send a tweet saying: Hello from Claude!

CLI mode (no MCP client needed)

The same twikit-mcp binary doubles as a one-shot CLI. Two modes:

Human-friendly subcommands — pretty-print tweets, profiles, timeline directly:

twikit-mcp tweet 20                     # show tweet 20 (Jack's first one)
twikit-mcp tweet https://x.com/u/status/123    # URL works too
twikit-mcp user elonmusk                # pretty profile
twikit-mcp tl 10                        # last 10 tweets from your home timeline
twikit-mcp search "AI" 5                # 5 top results for "AI"
twikit-mcp trends 20                    # top 20 trending topics

Output is plain text — readable in any terminal, native unicode (no \uXXXX escapes).

Machine-friendly subcommands — raw JSON, key=value args, every one of the 57 MCP tools:

twikit-mcp list                         # all 57 tool names
twikit-mcp call get_user_info screen_name=elonmusk
twikit-mcp call search_tweets query=AI count=5 product=Top
twikit-mcp call get_user_info screen_name=elonmusk | jq .followers_count

MCP server mode — the default when no subcommand is given:

twikit-mcp                              # stdio JSON-RPC for MCP clients
twikit-mcp serve                        # explicit, same behavior

All three modes share the same ~/.config/twitter-mcp/cookies.json — no separate config.

Available Tools

Tool Description
send_tweet Post a tweet or reply
get_tweet Fetch a tweet by ID or URL
get_timeline Get home timeline
search_tweets Search tweets (Latest/Top)
like_tweet Like a tweet
retweet Retweet a tweet
get_user_info Get a user's profile metadata by screen_name OR user_id
get_user_tweets Get tweets from a specific user
get_user_followers List a user's followers (paginated via cursor, max 100/call)
get_user_following List who a user follows (paginated via cursor, max 100/call)
follow_user Follow a user by screen name
unfollow_user Unfollow a user by screen name
delete_tweet Delete a tweet by ID
unfavorite_tweet Unlike a tweet by ID
delete_retweet Un-retweet a tweet by ID
bookmark_tweet Bookmark a tweet (optional folder_id)
delete_bookmark Remove a tweet from bookmarks
get_bookmarks List bookmarked tweets (paginated via cursor, max 100/call)
get_favoriters List users who liked a tweet (paginated via cursor, max 100/call)
get_retweeters List users who retweeted a tweet (paginated via cursor, max 100/call)
search_user Search for users by query (paginated via cursor, max 100/call)
get_trends Get trending topics by category (trending/for-you/news/sports/entertainment)
get_article_preview Get title / preview / cover of an X Article embedded in a tweet (no auth)
get_article Fetch an X Article's body — format="preview" | "plain" | "full" (default "plain")
block_user Block a user by screen name (rate-limited — avoid bulk)
unblock_user Unblock a user by screen name
mute_user Mute a user by screen name (rate-limited — avoid bulk)
unmute_user Unmute a user by screen name
get_notifications Fetch notifications — type="All"|"Verified"|"Mentions" (paginated via cursor, max 100/call)
send_dm ⚠️ Send a PRIVATE DM to a user — do not bulk-call
send_dm_to_group ⚠️ Send a PRIVATE DM to a group conversation — do not bulk-call
get_dm_history ⚠️ Get DM conversation history with a user (private — paginate via max_id)
delete_dm ⚠️ Delete a DM by message ID (private)
get_list Get a Twitter List by ID
get_lists Get authenticated user's Lists (paginated via cursor, max 100/call)
get_list_tweets Get tweets from a List (paginated via cursor, max 100/call)
get_list_members Get members of a List (paginated via cursor, max 100/call)
get_list_subscribers Get subscribers of a List (paginated via cursor, max 100/call)
create_list Create a new Twitter List (name required; optional description, is_private)
edit_list Edit a List's metadata — at least one of name/description/is_private required
add_list_member Add a user to a List by screen_name OR user_id
remove_list_member Remove a user from a List by screen_name OR user_id
create_scheduled_tweet Schedule a tweet at a future Unix timestamp (scheduled_at required; at least text or media_ids required)
get_scheduled_tweets Get all scheduled tweets for the authenticated user
delete_scheduled_tweet Delete a scheduled tweet by its scheduled_tweet_id
create_poll Create an X poll card (2-4 choices, duration_minutes > 0); returns card_uri for use with send_tweet
vote Vote on a poll — requires selected_choice, card_uri, tweet_id, card_name
get_community Get a Twitter Community by ID
search_community Search for Communities by query (paginated via cursor)
get_community_tweets Get tweets from a Community — tweet_type one of Top/Latest/Media (paginated, max 100/call)
get_communities_timeline Get the joined-communities feed (paginated via cursor, max 100/call)
get_community_members Get members of a Community (paginated via cursor, max 100/call)
get_community_moderators Get moderators of a Community (paginated via cursor, max 100/call)
search_community_tweet Search tweets within a Community by query (paginated via cursor, max 100/call)
join_community Join a Community by ID
leave_community Leave a Community by ID
request_to_join_community Request to join a Community — optional answer for moderated communities

X Articles note: long-form posts at https://x.com/i/article/<id> live in a different ID namespace than tweets. get_tweet refuses them with a clear error pointing to get_article. get_article_preview works without auth via the public syndication endpoint. get_article runs a two-hop reader flow internally: ArticleRedirectScreenQuery resolves the article rest_id to the underlying tweet rest_id, then TweetResultByRestId fetches the tweet's article body. The format arg controls how much of the response makes it through to the LLM:

  • "preview" (~1 KB) — rest_id, title, preview_text, cover_image. Card-display use case.
  • "plain" (~20 KB, default) — adds plain_text, flat media URL list, lifecycle_state. The 80% LLM-reading-an-article case; fits inside Claude Code's MAX_MCP_OUTPUT_TOKENS.
  • "full" (~150 KB+) — raw GraphQL payload including the heavy content_state block tree. Only ask for this if you actually need rich-content rendering / archiving / structure analysis.

Both queryIds are hardcoded like the 80+ other twikit endpoints; if X rotates them, refresh from the public bundle.Articles.*.js / bundle.TwitterArticles.*.js chunks on abs.twimg.com (no auth needed for discovery).

Check version

twikit-mcp --version
# or: twikit-mcp -v
# or: python -m twitter_mcp.server --version

How It Works

You: "Search tweets about AI"
 → Claude Code (understands intent)
 → MCP Protocol (JSON-RPC over stdio)
 → twikit-mcp (this server)
 → twikit (browser-like requests)
 → Twitter GraphQL API

Claude Code automatically manages the server process — it starts when Claude Code launches and stops when it exits. No background services, no manual setup.

Windows

mkdir %APPDATA%\twitter-mcp
# Create cookies.json with your ct0 and auth_token

# uvx
claude mcp add twitter -s user ^
  -e "TWITTER_COOKIES=%APPDATA%\twitter-mcp\cookies.json" ^
  -- uvx twikit-mcp

# Or with pip
pip install twikit-mcp
claude mcp add twitter -s user ^
  -e "TWITTER_COOKIES=%APPDATA%\twitter-mcp\cookies.json" ^
  -- twikit-mcp

Documentation


中文

为什么选 twikit-mcp?

twikit-mcp(本项目) 其他 Twitter MCP
认证 浏览器 Cookies Twitter API Key
费用 免费 $200+/月
配置 2 步,2 分钟 申请开发者账号,等审批
API twikit(逆向工程) X API(官方,付费)

快速开始

1. 创建 cookies.json

  1. 用浏览器登录 x.com
  2. F12 打开 DevTools → ApplicationCookieshttps://x.com
  3. 复制 ct0auth_token
mkdir -p ~/.config/twitter-mcp
cat > ~/.config/twitter-mcp/cookies.json << 'EOF'
{"ct0": "你的ct0", "auth_token": "你的auth_token"}
EOF
chmod 600 ~/.config/twitter-mcp/cookies.json

这两个值是什么? ct0 是 CSRF token(约160位十六进制),auth_token 是会话 token(40位十六进制),都在浏览器 Cookies 中。Cookies 会过期——auth_token 通常有效数月,ct0 可能更短。过期后从浏览器重新提取即可。

2. 安装 & 注册

选择以下 任一 方式:

方式 A: uvx — 零安装,每次调用拉一份。第一次慢,之后用 cache,跟其他 uv 工具共享。适合临时试用。

# Claude Code
claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- uvx twikit-mcp

# 或直接运行
uvx twikit-mcp

方式 B: uv tool install (日常使用推荐) — 隔离 venv,启动瞬间,升级简单。

# 一次性安装,在 PATH 上注册一个 `twikit-mcp` 二进制(默认路径 ~/.local/bin)
uv tool install twikit-mcp

# 列出当前 uv 管理的工具(确认装上了)
uv tool list

# 有新版本时升级
uv tool upgrade twikit-mcp
# 或一键升级所有 uv 装的工具:
uv tool upgrade --all

# 卸载(连 venv 一起清掉)
uv tool uninstall twikit-mcp

然后用 PATH 上的二进制注册到 Claude Code(不要再加 uvx 前缀):

claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- twikit-mcp

cookies 文件位置不变 — 仍然是 ~/.config/twitter-mcp/cookies.json(或者 TWITTER_COOKIES 环境变量指的地方)。uv tool install 只改变二进制的安装位置,不改 config 路径。

uvx vs uv tool install 的简单选择: 一次性 / 偶尔用 → uvx;天天接到 Claude Code 里用 → uv tool install(启动快很多)。

方式 C: pip

pip install twikit-mcp

# Claude Code
claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- twikit-mcp

# 或直接运行
TWITTER_COOKIES=~/.config/twitter-mcp/cookies.json twikit-mcp

方式 D: pipx(隔离安装,跟 uv tool install 思路一样,但换工具)

pipx install twikit-mcp

# Claude Code
claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- twikit-mcp

在其他 MCP 客户端中使用

这是标准的 MCP server(stdio 传输),不限于 Claude Code,任何支持 MCP 的客户端都能用。

在你的 MCP 客户端配置中添加(如 mcp.jsonsettings.json):

{
  "mcpServers": {
    "twitter": {
      "command": "twikit-mcp",
      "env": {
        "TWITTER_COOKIES": "/home/你的用户名/.config/twitter-mcp/cookies.json"
      }
    }
  }
}

兼容:Claude Code、Claude Desktop、Cursor、Windsurf、opencode、Cline 等。

搞定。直接说人话:

> 搜一下关于 AI 的推文
> 看看 @elonmusk 最近发了什么
> 发一条推说:Hello from Claude!

可用工具

工具 功能 怎么用
send_tweet 发推/回复 "发一条推说..."
get_tweet 获取推文 "看看这条推文 [链接]"
get_timeline 刷时间线 "看看我的时间线"
search_tweets 搜索推文 "搜一下关于 XX 的推文"
like_tweet 点赞 "点赞这条推"
retweet 转推 "转推这个"
get_user_info 查看用户资料(screen_nameuser_id 二选一,id/简介/粉丝/头像等) "查一下 @xxx 的资料"
get_user_tweets 看某人的推 "看看 @xxx 最近发了什么"
get_user_followers 拉某人的粉丝列表(cursor 分页,单次最多 100) "看看 @xxx 的粉丝"
get_user_following 拉某人关注的人(cursor 分页,单次最多 100) "@xxx 都关注谁?"
follow_user 关注用户 "关注 @xxx"
unfollow_user 取消关注 "取关 @xxx"
delete_tweet 删除推文 "删除这条推文"
unfavorite_tweet 取消点赞 "取消对这条推的点赞"
delete_retweet 取消转推 "取消转推这条"
bookmark_tweet 收藏推文(可选 folder_id "收藏这条推文"
delete_bookmark 取消收藏推文 "取消收藏这条推文"
get_bookmarks 获取收藏列表(cursor 分页,单次最多 100) "看看我的收藏"
get_favoriters 获取点赞某推文的用户(cursor 分页,单次最多 100) "谁点赞了这条推?"
get_retweeters 获取转推某推文的用户(cursor 分页,单次最多 100) "谁转推了这条?"
search_user 搜索用户(cursor 分页,单次最多 100) "搜一下叫 xxx 的用户"
get_trends 获取热门话题(分类:trending/for-you/news/sports/entertainment "现在有哪些热门话题?"
get_article_preview 拿 X Article 的标题/摘要/封面(无需登录) "这篇文章在讲什么 [链接]"
get_article 拿 X Article 的正文,format="preview" | "plain" | "full"(默认 "plain") "把这篇文章读给我听 [链接]"
block_user 屏蔽用户(受频率限制,避免批量操作) "屏蔽 @xxx"
unblock_user 取消屏蔽用户 "取消屏蔽 @xxx"
mute_user 静音用户(受频率限制,避免批量操作) "静音 @xxx"
unmute_user 取消静音用户 "取消静音 @xxx"
get_notifications 获取通知(type="All"|"Verified"|"Mentions"cursor 分页,单次最多 100) "看看我的通知"
send_dm ⚠️ 发送私信给用户,勿批量调用 "私信 @xxx:..."
send_dm_to_group ⚠️ 发送私信到群组,勿批量调用 "发消息到群组..."
get_dm_history ⚠️ 获取与某用户的私信记录(私密,通过 max_id 分页) "看看和 @xxx 的私信记录"
delete_dm ⚠️ 删除某条私信(私密) "删除这条私信"
get_list 通过 ID 获取 Twitter 列表 "查看列表 xxx"
get_lists 获取当前用户的所有列表(cursor 分页,单次最多 100) "我有哪些列表?"
get_list_tweets 获取列表中的推文(cursor 分页,单次最多 100) "查看列表推文"
get_list_members 获取列表成员(cursor 分页,单次最多 100) "列表成员有哪些?"
get_list_subscribers 获取列表订阅者(cursor 分页,单次最多 100) "谁订阅了这个列表?"
create_list 创建新列表(name 必填,可选 descriptionis_private "新建列表 xxx"
edit_list 编辑列表信息(name/description/is_private 至少提供一个) "重命名列表"
add_list_member 将用户加入列表(screen_nameuser_id 二选一) "把 @xxx 加入列表"
remove_list_member 将用户从列表移除(screen_nameuser_id 二选一) "从列表移除 @xxx"
create_scheduled_tweet 定时发推(scheduled_at 为未来 Unix 时间戳,textmedia_ids 至少提供一个) "明天发推"
get_scheduled_tweets 获取当前用户的所有定时推文 "有哪些定时推?"
delete_scheduled_tweet 删除定时推文(需提供 scheduled_tweet_id "取消定时推"
create_poll 创建投票(2-4 个选项,duration_minutes > 0),返回 card_uri "发起投票"
vote 对投票投票(需提供 selected_choicecard_uritweet_idcard_name "给这个选项投票"
get_community 通过 ID 获取 Twitter 社区 "查看社区 xxx"
search_community 搜索社区(cursor 分页) "搜索 Python 社区"
get_community_tweets 获取社区推文(tweet_typeTop/Latest/Media,分页,单次最多 100) "看看社区最新推文"
get_communities_timeline 获取已加入社区的时间线(cursor 分页,单次最多 100) "看看社区动态"
get_community_members 获取社区成员(cursor 分页,单次最多 100) "社区有哪些成员?"
get_community_moderators 获取社区版主(cursor 分页,单次最多 100) "社区版主是谁?"
search_community_tweet 在社区内搜索推文(cursor 分页,单次最多 100) "在社区里搜 xxx"
join_community 加入社区 "加入这个社区"
leave_community 退出社区 "退出这个社区"
request_to_join_community 申请加入社区(受限社区可选 answer "申请加入这个社区"

X Articles 说明:https://x.com/i/article/<id> 这种长文与普通推文是两个 ID 命名空间。get_tweet 遇到 article URL 会直接拒绝并提示用 get_articleget_article_preview 走公共 syndication 端点,不需要登录。get_article 内部是两跳 reader 流程,通过 format 参数控制返回大小:

  • "preview" (~1 KB) — rest_id / title / preview_text / cover_image,卡片场景
  • "plain" (~20 KB,默认) — 上面 + plain_text + 扁平化 media URL 列表 + lifecycle_state,LLM 读全文的 80% 场景,刚好放得下 Claude Code 的 MAX_MCP_OUTPUT_TOKENS
  • "full" (~150 KB+) — 原始 GraphQL 响应,含庞大的 content_state 富文本块树,只在做富文本渲染/归档/结构分析时才需要

两个 queryId 都跟其他 80+ 端点一样硬编码 — 如果 X 改了 hash,从公开的 bundle.Articles.*.js / bundle.TwitterArticles.*.js chunk 里 grep 出新值即可,无需登录态。

查看版本

twikit-mcp --version
# 或:twikit-mcp -v
# 或:python -m twitter_mcp.server --version

工作原理

你:"搜一下关于 AI 的推文"
 → Claude Code(理解意图)
 → MCP 协议(JSON-RPC,stdio 通信)
 → twikit-mcp(本 server)
 → twikit(模拟浏览器请求)
 → Twitter GraphQL API

Claude Code 自动管理 server 进程——启动时拉起,退出时关闭。不需要手动运行任何东西,不占后台资源。

Windows

mkdir %APPDATA%\twitter-mcp
# 创建 cookies.json,写入 ct0 和 auth_token

# uvx
claude mcp add twitter -s user ^
  -e "TWITTER_COOKIES=%APPDATA%\twitter-mcp\cookies.json" ^
  -- uvx twikit-mcp

# 或使用 pip
pip install twikit-mcp
claude mcp add twitter -s user ^
  -e "TWITTER_COOKIES=%APPDATA%\twitter-mcp\cookies.json" ^
  -- twikit-mcp

文档

  • 技术文档 — 架构、MCP 原理、配置详解、跨机器部署
  • 贡献指南 — 测试、CI/CD、如何添加新工具

日本語

なぜ twikit-mcp?

twikit-mcp(本プロジェクト) 他の Twitter MCP
認証 ブラウザ Cookie Twitter API Key
料金 無料 $200+/月
セットアップ 2ステップ、2分 開発者アカウント申請、承認待ち
API twikit(リバースエンジニアリング) X API(公式、有料)

クイックスタート

1. cookies.json の作成

  1. ブラウザで x.com にログイン
  2. F12 で DevTools を開く → ApplicationCookieshttps://x.com
  3. ct0auth_token をコピー
mkdir -p ~/.config/twitter-mcp
cat > ~/.config/twitter-mcp/cookies.json << 'EOF'
{"ct0": "あなたのct0", "auth_token": "あなたのauth_token"}
EOF
chmod 600 ~/.config/twitter-mcp/cookies.json

これは何? ct0 は CSRF トークン(約160桁の16進数)、auth_token はセッショントークン(40桁の16進数)で、ブラウザの Cookie から取得します。Cookie は有効期限があります — auth_token は通常数ヶ月、ct0 はより短い場合があります。期限切れの際はブラウザから再取得してください。

2. インストール & 登録

以下の いずれか の方法を選んでください:

方法 A: uvx — ゼロインストール、毎回フェッチ。初回のみ遅い、以降はキャッシュで高速。お試し向け。

# Claude Code
claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- uvx twikit-mcp

# または直接実行
uvx twikit-mcp

方法 B: uv tool install(日常利用に推奨)— 専用 venv で隔離インストール、起動が瞬時、アップグレードも簡単。

# 一度だけインストール。PATH (~/.local/bin) に `twikit-mcp` バイナリを配置
uv tool install twikit-mcp

# uv tool 管理下のツール一覧(確認用)
uv tool list

# 新バージョンが出たらアップグレード
uv tool upgrade twikit-mcp
# uv で入れた全ツールを一括アップグレード:
uv tool upgrade --all

# アンインストール(venv ごと削除)
uv tool uninstall twikit-mcp

PATH 上のバイナリで Claude Code に登録(uvx プレフィックス不要):

claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- twikit-mcp

cookies ファイルの場所は他のオプションと同じ~/.config/twitter-mcp/cookies.json (もしくは TWITTER_COOKIES 環境変数)。uv tool install が変えるのはバイナリの場所だけで、設定ファイルの場所は変わりません。

uvx と uv tool install の使い分け: 一回だけ / たまに → uvx;Claude Code に組み込んで毎日使う → uv tool install(起動が圧倒的に速い)。

方法 C: pip

pip install twikit-mcp

# Claude Code
claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- twikit-mcp

# または直接実行
TWITTER_COOKIES=~/.config/twitter-mcp/cookies.json twikit-mcp

方法 D: pipx(隔離インストール — uv tool install と同じ思想、ツール違い)

pipx install twikit-mcp

# Claude Code
claude mcp add twitter -s user \
  -e "TWITTER_COOKIES=$HOME/.config/twitter-mcp/cookies.json" \
  -- twikit-mcp

他の MCP クライアントでの使用

これは標準的な MCP サーバー(stdio トランスポート)です。Claude Code 専用ではなく、MCP 対応のすべてのクライアントで使用できます。

MCP クライアントの設定ファイル(mcp.jsonsettings.json など)に追加:

{
  "mcpServers": {
    "twitter": {
      "command": "twikit-mcp",
      "env": {
        "TWITTER_COOKIES": "/home/ユーザー名/.config/twitter-mcp/cookies.json"
      }
    }
  }
}

対応クライアント:Claude Code、Claude Desktop、Cursor、Windsurf、opencode、Cline など。

以上です。自然言語で話しかけてください:

> AIに関するツイートを検索して
> @elonmusk の最近の投稿を見せて
> 「Hello from Claude!」とツイートして

利用可能なツール

ツール 機能 使い方
send_tweet ツイート投稿・返信 「〜とツイートして」
get_tweet ツイート取得 「このツイートを見て [URL]」
get_timeline タイムライン取得 「タイムラインを見せて」
search_tweets ツイート検索 「〜について検索して」
like_tweet いいね 「このツイートにいいねして」
retweet リツイート 「これをリツイートして」
get_user_info ユーザープロフィール取得(screen_nameuser_id のどちらか、id/bio/フォロワー数/アイコンなど) 「@xxx のプロフィールを見せて」
get_user_tweets ユーザーのツイート取得 「@xxx の最近の投稿を見せて」
get_user_followers フォロワー一覧取得(cursor でページング、1 回最大 100) 「@xxx のフォロワーを見せて」
get_user_following フォロー中の一覧取得(cursor でページング、1 回最大 100) 「@xxx は誰をフォローしてる?」
follow_user ユーザーをフォロー 「@xxx をフォロー」
unfollow_user フォロー解除 「@xxx をフォロー解除」
delete_tweet ツイート削除 「このツイートを削除して」
unfavorite_tweet いいね取り消し 「このツイートのいいねを取り消して」
delete_retweet リツイート取り消し 「このリツイートを取り消して」
bookmark_tweet ブックマーク追加(folder_id オプション) 「このツイートをブックマークして」
delete_bookmark ブックマーク削除 「このブックマークを削除して」
get_bookmarks ブックマーク一覧取得(cursor でページング、1 回最大 100) 「ブックマークを見せて」
get_favoriters ツイートにいいねしたユーザー一覧(cursor でページング、1 回最大 100) 「このツイートにいいねした人は?」
get_retweeters ツイートをリツイートしたユーザー一覧(cursor でページング、1 回最大 100) 「誰がリツイートした?」
search_user ユーザー検索(cursor でページング、1 回最大 100) 「〜というユーザーを検索して」
get_trends トレンド取得(カテゴリ:trending/for-you/news/sports/entertainment 「今のトレンドを見せて」
get_article_preview X Article のタイトル/プレビュー/カバー画像取得(認証不要) 「この記事の概要を教えて [URL]」
get_article X Article の本文取得、format="preview" | "plain" | "full"(デフォルト "plain") 「この記事を読んで [URL]」
block_user ユーザーをブロック(レート制限あり — 一括使用禁止) 「@xxx をブロック」
unblock_user ユーザーのブロックを解除 「@xxx のブロックを解除」
mute_user ユーザーをミュート(レート制限あり — 一括使用禁止) 「@xxx をミュート」
unmute_user ユーザーのミュートを解除 「@xxx のミュートを解除」
get_notifications 通知取得(type="All"|"Verified"|"Mentions"cursor でページング、1 回最大 100) 「通知を見せて」
send_dm ⚠️ ユーザーにダイレクトメッセージを送信 — 一括送信禁止 「@xxx にDMして:...」
send_dm_to_group ⚠️ グループにダイレクトメッセージを送信 — 一括送信禁止 「グループにメッセージ送信...」
get_dm_history ⚠️ ユーザーとの DM 履歴取得(プライベート、max_id でページング) 「@xxx との DM 履歴を見せて」
delete_dm ⚠️ DM を削除(プライベート) 「この DM を削除して」
get_list ID でリストを取得 「リスト xxx を見せて」
get_lists 自分のリスト一覧取得(cursor でページング、1 回最大 100) 「自分のリストは?」
get_list_tweets リストのツイート取得(cursor でページング、1 回最大 100) 「リストのツイートを見せて」
get_list_members リストのメンバー取得(cursor でページング、1 回最大 100) 「リストのメンバーは?」
get_list_subscribers リストの購読者取得(cursor でページング、1 回最大 100) 「誰がリストを購読している?」
create_list リストを作成(name 必須、descriptionis_private は任意) 「リスト xxx を作成して」
edit_list リスト情報を編集(name/description/is_private のいずれか必須) 「リスト名を変更して」
add_list_member リストにユーザーを追加(screen_nameuser_id どちらか一方) 「@xxx をリストに追加して」
remove_list_member リストからユーザーを削除(screen_nameuser_id どちらか一方) 「@xxx をリストから削除して」
create_scheduled_tweet 予約投稿(scheduled_at は未来の Unix タイムスタンプ、text または media_ids のどちらかが必須) 「明日ツイートして」
get_scheduled_tweets 予約中のツイート一覧を取得 「予約ツイートは?」
delete_scheduled_tweet 予約ツイートを削除(scheduled_tweet_id 必須) 「予約を取り消して」
create_poll 投票を作成(選択肢 2-4 個、duration_minutes > 0)、card_uri を返す 「投票を作って」
vote 投票する(selected_choicecard_uritweet_idcard_name すべて必須) 「この選択肢に投票して」
get_community ID でコミュニティを取得 「コミュニティ xxx を見せて」
search_community クエリでコミュニティを検索(cursor でページング) 「Python コミュニティを探して」
get_community_tweets コミュニティのツイートを取得(tweet_typeTop/Latest/Media、最大 100 件) 「コミュニティの最新投稿を見せて」
get_communities_timeline 参加済みコミュニティのタイムラインを取得(cursor でページング、最大 100 件) 「コミュニティのフィードを見せて」
get_community_members コミュニティのメンバー一覧を取得(cursor でページング、最大 100 件) 「コミュニティのメンバーは?」
get_community_moderators コミュニティのモデレーター一覧を取得(cursor でページング、最大 100 件) 「モデレーターは誰?」
search_community_tweet コミュニティ内のツイートを検索(cursor でページング、最大 100 件) 「このコミュニティで xxx を検索して」
join_community コミュニティに参加 「このコミュニティに参加して」
leave_community コミュニティを退出 「このコミュニティを退出して」
request_to_join_community コミュニティへの参加申請(審査制コミュニティは answer も任意) 「このコミュニティへの参加を申請して」

X Articles について:https://x.com/i/article/<id> の長文記事はツイートとは別の ID 名前空間に属します。get_tweet は article URL を渡されると拒否し、get_article を案内します。get_article_preview は公開 syndication エンドポイント経由で認証不要。get_article は内部で 2 ホップ reader フローを走り、format 引数で出力サイズを制御:

  • "preview" (~1 KB) — rest_id / title / preview_text / cover_image、カード表示用途
  • "plain" (~20 KB、デフォルト) — 上記 + plain_text + フラットな media URL リスト + lifecycle_state、LLM が記事を読む 80% のケース、Claude Code の MAX_MCP_OUTPUT_TOKENS に収まる
  • "full" (~150 KB+) — 重い content_state ブロックツリーを含む生 GraphQL レスポンス、リッチコンテンツのレンダリング・アーカイブ・構造解析が必要な場合のみ

どちらの queryId も他の 80+ エンドポイント同様ハードコードされており、X がハッシュをローテートした場合は公開されている bundle.Articles.*.js / bundle.TwitterArticles.*.js チャンクから新しいハッシュを取得できます(認証不要)。

バージョン確認

twikit-mcp --version
# または: twikit-mcp -v
# または: python -m twitter_mcp.server --version

仕組み

あなた:「AIに関するツイートを検索して」
 → Claude Code(意図を理解)
 → MCP プロトコル(JSON-RPC、stdio 通信)
 → twikit-mcp(本サーバー)
 → twikit(ブラウザリクエストをシミュレート)
 → Twitter GraphQL API

Claude Code がサーバープロセスを自動管理します。起動時にプロセスを立ち上げ、終了時に自動停止。手動操作やバックグラウンドサービスは不要です。

Windows

mkdir %APPDATA%\twitter-mcp
# cookies.json を作成し、ct0 と auth_token を記入

# uvx
claude mcp add twitter -s user ^
  -e "TWITTER_COOKIES=%APPDATA%\twitter-mcp\cookies.json" ^
  -- uvx twikit-mcp

# または pip
pip install twikit-mcp
claude mcp add twitter -s user ^
  -e "TWITTER_COOKIES=%APPDATA%\twitter-mcp\cookies.json" ^
  -- twikit-mcp

ドキュメント


License

MIT

Built with twikit and MCP

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

twikit_mcp-0.1.33.tar.gz (373.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

twikit_mcp-0.1.33-py3-none-any.whl (118.1 kB view details)

Uploaded Python 3

File details

Details for the file twikit_mcp-0.1.33.tar.gz.

File metadata

  • Download URL: twikit_mcp-0.1.33.tar.gz
  • Upload date:
  • Size: 373.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for twikit_mcp-0.1.33.tar.gz
Algorithm Hash digest
SHA256 db27e498e03356b94e0aa630e7c3339aa0eeed6184ca01658dc3496bf723d0b2
MD5 073d31a9d9794e3e4b6cc02103371af1
BLAKE2b-256 b74fd6587446ee47c0d533feec9c05b56931878dae103c65193b4ced2a435e5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for twikit_mcp-0.1.33.tar.gz:

Publisher: publish.yml on tangivis/twitter-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file twikit_mcp-0.1.33-py3-none-any.whl.

File metadata

  • Download URL: twikit_mcp-0.1.33-py3-none-any.whl
  • Upload date:
  • Size: 118.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for twikit_mcp-0.1.33-py3-none-any.whl
Algorithm Hash digest
SHA256 f013d8ad7b20ef59e42452a746560d040ab11e53aa6ba4b094f7aa1b10e969e2
MD5 5e1de3ec30f081640da33e38bf7843f0
BLAKE2b-256 4a6d12ecf37a2293ae28e1f9f2c2072c422eb6b87d5067c57c9cab54abd980f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for twikit_mcp-0.1.33-py3-none-any.whl:

Publisher: publish.yml on tangivis/twitter-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page