tweetkit-x について
tweetkit-xは、ログイン済みブラウザーのセッションCookieを使ってXを読み取り、操作するPythonライブラリ、コマンドラインツール、MCPサーバーです。投稿、削除、検索、タイムライン閲覧に対応しますが、ウェブセッションの自動化はXの利用規約に反し、アカウントにリスクがあります。
主な機能
- 01投稿、予約投稿、削除
- 02フィード、プロフィール、会話の閲覧
- 03Xと自分の投稿の検索
- 04取り消し可能な交流・アカウント操作
- 05セッションCookieのインポートと保存
- 06Python API、コマンドライン、MCPサーバー
活用シーン
- 01投稿やスレッドの自動公開
- 02古い投稿の検索と整理
- 03AIクライアントからタイムラインや会話を閲覧
- 04有料API呼び出しを使わないXの操作
MCP 対応
MCPサーバーは、Xでの投稿、削除、検索、フィードやプロフィールの閲覧、交流操作のツールを公開します。Cookie設定を案内し、貼り付けたヘッダーやファイルからセッション情報を取り込めます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx tweetkit-xTWEETKIT_COOKIE_KEYCHAINシークレットmacOS Keychain service name holding your X session cookie string (must contain auth_token + ct0). Alternatively set TWEETKIT_COOKIE (the raw cookie string) or TWEETKIT_COOKIE_FILE (a file path).TWEETKIT_COOKIEシークレットYour X (Twitter) session cookie string — the Cookie header from a logged-in x.com request. Must contain auth_token and ct0.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
tweetkit-x
ログイン済みのブラウザーセッションを使って、Python および MCP サーバーから X(Twitter)に投稿、削除、閲覧できます。
有料 API も、開発者アプリも、OAuth の面倒な手続きも不要です。必要なのはセッション Cookie だけです。
クイックスタート · Cookie の取得 · Python · CLI · MCP サーバー · 仕組み · 免責事項
理由
2026 年 2 月 6 日以降、X の公式 API には新しい開発者向けの無料プランがありません。従量課金制で、投稿 1 件あたり約 0.015 ドル、リンク付きの投稿は 1 件あたり約 0.20 ドルに加え、読み取りごとの料金もかかります。自分のツイートを公開する用途(コンテンツを投稿するボット、予約投稿するスレッド、古い投稿を削除する整理スクリプトなど)では、ブラウザーなら無料でできることに継続的な費用が発生します。
tweetkit-x は API を完全に回避します。ブラウザーで投稿、削除をクリックしたり、プロフィールをスクロールしたりするときに使われる内部 HTTP 呼び出しを、そのまま再現します。すでにお持ちのセッション Cookie で認証します。API 費用ゼロで、投稿、削除、タイムライン全体の閲覧ができます。
⚠️ ウェブセッションの自動化は、X の利用規約に違反します。これは個人での自動化を目的としたグレーゾーンのツールです。アカウントに関するリスクはすべてご自身の責任となります。 免責事項をご覧ください。
機能
- ✅ 投稿 — テキスト、最大 4 枚の画像、GIF と動画(代替テキスト付き)、返信、スレッド、引用ツイート、長文ノートのツイート、予約投稿
- 🗑️ 削除 — 単一の ID、ID のリスト、または条件に一致する投稿を検索して削除する整理ループ
- ❤️ 交流 — いいね、リツイート、ブックマーク、フォロー、ブロック、ミュート、固定。それぞれ取り消し可能
- 🌐 X 全体を検索 — 本物の
SearchTimeline(from:、min_faves:、filter:mediaなどの演算子に対応)、さらに自分のツイートを対象にしたローカル正規表現検索 - 📖 閲覧 — ホームフィード、任意のタイムライン、ツイートの返信・会話、フォロワー・フォロー中のアカウント、いいねした人・リツイートした人、ブックマーク、ユーザーのいいね、通知、全項目を含むプロフィール
- 🔌 MCP サーバー — 40 個のツール。Claude Desktop/Claude Code/Cursor に追加できます。Cookie の説明と、貼り付け 1 回での設定に対応したツールを用意
- 🔑 手間のかからない認証 —
Cookie:ヘッダーを貼り付けるか、HAR ファイルまたはストレージダンプの zip を読み込んで、ファイルまたは macOS のキーチェーンに保存 - 🐍 Python API と CLI(
tweetkit …) - 🪶 軽量 — ヘッドレスブラウザーも Selenium も不要
クイックスタート
pip install "tweetkit-x[mcp]" # or: pip install tweetkit-x (library + CLI only)
# 1. Import your session cookie (three ways — see the next section)
tweetkit import --paste # paste the Cookie: header, Ctrl-D
# or: tweetkit import --file x.com.har
# or: tweetkit import --file storagedump_x.com.zip --keychain tweetkit
# 2. Verify (no network call)
tweetkit whoami
# {"ready": true, "user_id": "1986...", "ct0_len": 160}
# 3. Use it
tweetkit post "hello world 👋"
tweetkit search "xmr|monero" --regex # your tweets that match
tweetkit delete 2063240404980445603
セッション Cookie の取得
tweetkit が必要とする秘密情報は、X の セッション Cookie だけです。これは、ログイン済みのブラウザーが送信する Cookie: ヘッダーと同じものです。少なくとも 2 つの値が含まれている必要があります。
| Cookie | 内容 | 必須 | HttpOnly? |
|---|---|---|---|
auth_token | ログイン/セッション トークン | はい | はい(document.cookie からは見えません) |
ct0 | CSRF トークン(x-csrf-token として返送されます) | はい | いいえ |
twid | ユーザー ID(u=<id>) — 余分な照会なしで tweetkit があなたのタイムラインを読み取れるようになります | 推奨 | いいえ |
guest_id、kdt、att、personalization_id | その他のセッション状態 | 任意 | 混在 |
❗
auth_tokenは HttpOnly なので、JS コンソールでdocument.cookieをコピーしても、含まれません。以下の信頼できる方法のいずれかを使用してください。
方法 A — Cookie: ヘッダーをコピーする(最も確実、1 回貼り付けるだけ)
- ログインした状態で x.com を開きます。
- DevTools(F12) → Network タブを開きます。
x.comへのリクエスト(例:HomeTimeline)をクリックします。- Request Headers の下にある
cookie:を見つけ、値全体をコピーします。 - それを渡します:
tweetkit import --paste
# paste the cookie header, then press Ctrl-D
方法 B — F12 の「Preserve log」で HAR ファイルを作成する
- ログインした状態で x.com を開き、DevTools(F12) → Network を開きます。
- 「Preserve log」 にチェックを入れてから、リクエストが記録されるようにページを再読み込みするか、ページ内を操作します。
- リクエストを右クリック → 「Save all as HAR」(または ⬇ エクスポートアイコンを使用)を選択します。
- インポートします:
tweetkit import --file ~/Downloads/x.com.har
最近の Chrome では、エクスポートした HAR から Cookie が削除されることがあります。tweetkit が
auth_tokenがないと報告する場合は、Network の設定で 「Allow to generate HAR with sensitive data」 を有効にするか、方法 A または 方法 C を使用してください。
方法 C — storagedump ブラウザー拡張機能(zip)
DevTools を使わない最も簡単な方法です。storagedump(このプロジェクトの作者が作成した Chrome 拡張機能)は、タブのブラウザーストレージをエクスポートします。これには、document.cookie からアクセスできない HttpOnly の auth_token も含まれ、cookies.json を含む .zip として出力されます。ログインした状態で x.com を開き、拡張機能をクリックしてエクスポートし、次のコマンドを実行します:
tweetkit import --file storagedump_x.com_2026-07-05.zip
tweetkit は拡張機能のネイティブ形式 { "data": [ { "key": "...", "value": "..." }, ... ] } を読み取ります。また、通常のリストや {name: value} マップも受け付けます。Cookie-Editor / EditThisCookie の JSON エクスポート(--file export.json)も使用できます。
インストール:Chrome ウェブストアの storagedump。
Cookie の保存場所
既定では、tweetkit import は ~/.config/tweetkit/cookie.txt に書き込みます(chmod 600。また、Git の追跡対象外です)。macOS Keychain を使いたい場合は、--keychain <slug> を追加します:
tweetkit import --paste --keychain tweetkit
export TWEETKIT_COOKIE_KEYCHAIN=tweetkit
実行時の解決順序(最初に見つかったものを使用):明示的な引数 → TWEETKIT_COOKIE → TWEETKIT_COOKIE_FILE → ./cookie.txt → ~/.config/tweetkit/cookie.txt → Keychain(TWEETKIT_COOKIE_KEYCHAIN)。
Python の使用方法
from tweetkit_x import TweetKit
tk = TweetKit(keychain_slug="tweetkit") # or cookie="auth_token=...; ct0=..."
tk.whoami() # {'ready': True, 'user_id': '...', 'ct0_len': 160}
# post
tk.post("hello world")
tk.post("with a picture", image_path="chart.png")
tk.post("a reply", reply_to="1800000000000000000")
# thread — strings or (text, image_path) tuples; each replies to the previous
tk.post_thread(["1/ intro", ("2/ chart", "chart.png"), "3/ outro"])
# read
mine = tk.get_tweets(limit=100) # your tweets, newest first
theirs = tk.get_tweets(username="jack", limit=50) # anyone's
# search (local filter over the timeline — no paid search API)
hits = tk.search("monero") # substring
hits = tk.search(r"xmr|monero", regex=True) # regex
# delete
tk.delete("1800000000000000000")
tk.delete_many([t["id"] for t in hits])
# quote-tweet
tk.quote("this is great", quote_tweet_id="1800000000000000000")
# engage (each has an undo)
tk.like("1800000000000000000"); tk.unlike("1800000000000000000")
tk.retweet("1800000000000000000"); tk.unretweet("1800000000000000000")
tk.bookmark("1800000000000000000"); tk.unbookmark("1800000000000000000")
# read a single tweet, and search ALL of X (real search + operators)
tk.get_tweet("1800000000000000000")
tk.search_x("mcp server", latest=True, limit=40)
tk.search_x("from:jack min_faves:1000") # X search operators work
書き込みはすべて、成功時に {'ok': True, 'id': '...', 'url': '...'} を返し、失敗時には {'ok': False, 'status': ..., 'error': '...'} を返します。ログ記録や再試行も簡単です。
「自分の $XMR ツイートを見つけて削除する」クリーンアップループの完全な例については、examples/ を参照してください。
CLI の使用方法
tweetkit whoami
tweetkit post "just some text"
tweetkit post "text + media" --image pic.png
tweetkit post "a reply" --reply-to 1800000000000000000
tweetkit thread thread.txt # tweets separated by blank lines
tweetkit delete 1800000000000000000 1800000000000000001
tweetkit tweets --limit 100 # your tweets
tweetkit tweets @jack --limit 50 # someone else's
tweetkit search monero # your tweets containing "monero"
tweetkit search "xmr|monero" --regex
tweetkit searchx "mcp server" --latest # search ALL of X (real search + operators)
tweetkit get 1800000000000000000 # one tweet by id
tweetkit quote "great thread" 1800000000000000000
tweetkit like 1800000000000000000 # also: unlike / retweet / unretweet / bookmark / unbookmark
thread.txt は、空行で区切られたツイートだけのファイルです。
MCP サーバー
tweetkit には、AI クライアントがユーザーに代わって投稿、削除、読み取りを行える、正式な MCP サーバー が付属しています。また、認証の手順をユーザーに案内し、Cookie とは何かを説明したうえで、1 回貼り付けるだけで設定できるようにします。
クライアントの設定
Claude Desktop / Claude Code / Cursor — MCP 設定(claude_desktop_config.json、.mcp.json など)に追加します:
{
"mcpServers": {
"tweetkit": {
"command": "uvx",
"args": ["--from", "tweetkit-x[mcp]", "tweetkit-mcp"],
"env": { "TWEETKIT_COOKIE_KEYCHAIN": "tweetkit" }
}
}
}
すでに pip install 済みの場合は、コンソールスクリプトを直接使用します:
{ "mcpServers": { "tweetkit": { "command": "tweetkit-mcp",
"env": { "TWEETKIT_COOKIE_KEYCHAIN": "tweetkit" } } } }
Cookie の環境変数を設定していなくても問題ありません。サーバーは未認証の状態で起動し、チャット内でユーザーに Cookie の設定を求めます(以下を参照)。
チャット内で完結する、手間のかからない認証
サーバーは各値について説明し、最も手間の少ない方法を提示します。一般的な初回実行の流れは次のとおりです。
- クライアントが
auth_statusを呼び出します → 未認証。 - サーバーの指示により、アシスタントがCookieを尋ね、
auth_tokenとct0が何を示すのか、およびコピー方法を説明します。 Cookie:ヘッダーを一度貼り付けます →set_session_cookie("<paste>")→ 保存(Keychainまたはファイル)され、有効化されます。または、HAR/ストレージダンプのzipファイルを指定してimport_cookie_from_file("~/Downloads/x.com.har")を呼び出します。
生のCookieがそのまま返されることはありません。
ツール
| ツール | 機能 |
|---|---|
auth_status | 有効なセッションが読み込まれているか確認します(最初に呼び出します) |
set_session_cookie(cookie_header) | 貼り付けた Cookie: ヘッダーから認証を設定します — コピーする内容を正確に説明します |
import_cookie_from_file(path) | HAR/ストレージダンプの .zip/Cookie JSONから認証を設定します |
post_tweet(text, image_path?, reply_to?) | ツイートを投稿します(画像/返信は任意) |
post_thread(tweets[]) | スレッドを投稿します |
quote_tweet(text, quote_tweet_id, image_path?) | 既存のツイートを引用します |
delete_tweet(tweet_id) / delete_tweets(ids[]) | ツイートを削除します |
like_tweet / unlike_tweet / retweet / unretweet / bookmark_tweet / unbookmark_tweet | アクションを実行します(いずれも取り消し可能) |
get_my_tweets(limit?) / get_user_tweets(username, limit?) | タイムラインを読み込みます |
get_tweet(tweet_id) | IDで指定したツイートを取得します |
search_my_tweets(query, regex?, limit?) | 自分のツイートを検索します(ローカルフィルター — 整理に便利です) |
search_x(query, latest?, limit?) | X全体を検索します(実際の検索で、演算子にも対応) |
post_note / schedule_tweet / unschedule_tweet | 長文のノートツイートを投稿/予約/キャンセルします |
follow_user / unfollow_user / block_user / unblock_user / mute_user / unmute_user | ソーシャルグラフに対するアクション |
pin_tweet / unpin_tweet | プロフィールに固定/固定を解除します |
get_home_timeline / get_replies / get_notifications / get_bookmarks | フィードと会話を取得します |
get_user_profile / get_followers / get_following / get_likers / get_retweeters / get_user_likes | ユーザーとプロフィールに関する情報を取得します |
未対応の機能: DM、投票(作成/投票)、リスト、プロフィール編集、スペース、返信を非表示にする機能。エンドポイントを特定するには、その操作を記録したHARが必要です。ご要望があれば簡単に追加できます。
仕組み
ブラウザーで操作すると、x.comはいくつかの内部エンドポイントを呼び出します。tweetkitはそれらを1対1で再現します。
x-client-transaction-id— Xでは、ページのondemand.sJSとホームのフェッチから導出されるボット対策ヘッダーが必要です。スタンドアロンのx-client-transaction-idパッケージを使って生成します。- メディアのアップロード(画像)—
POST upload.x.com/i/media/upload.jsonをINIT→APPEND→FINALIZEの順に呼び出し、media_idを取得します。 - 書き込み/削除 —
POST /i/api/graphql/<queryId>/CreateTweetおよび.../DeleteTweet。 - 読み込み —
GET /i/api/graphql/<queryId>/UserTweets(カーソルによるページネーション)と、@handlesを解決するためのUserByScreenName。
認証に必要なのは、Cookie、公開ウェブ用のbearerトークン(x.comにすべての訪問者向けに埋め込まれている、同一の非シークレットなbearer)、およびx-csrf-tokenとして返される**ct0** CSRF値だけです。
your cookie ──► x-client-transaction-id ──► CreateTweet / DeleteTweet / UserTweets ──► result
GraphQLのクエリIDは
tweetkit_x/constants.pyにあります。Xは数週間ごとにこれらをローテーションします。呼び出しが失敗し始めた場合は、新しいHARから更新してください(ファイルに手順が記載されています)。
セキュリティ
- Cookieだけがシークレットです。
~/.config/tweetkit/cookie.txtまたはmacOSのKeychainにchmod 600で保存され、.gitignoreによってcookie.txt、.env、*.har、*.zipが除外されます。 - tweetkitがCookieの値を出力することはありません — インポーターが報告するのは、見つかったCookieの種類と長さだけです。
- 同梱されているbearerはXの公開ウェブ用bearerで、すべての訪問者で同一です — シークレットではありません。
免責事項
このプロジェクトは、個人利用を目的として、ご自身の X のウェブセッションを自動化します。ウェブセッションの自動化はX の利用規約に違反しており、使用すると、アカウントがレート制限、一時停止、または永久停止の対象となるおそれがあります。使用方法については、すべてご自身の責任となります。本ソフトウェアは無保証の「現状有姿」で提供されます。X Corp. とは提携していません。
ライセンス
MIT © 2026 ns0bj
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。