atodeyomu-mcp
A read-only MCP server that detects quote retweets on X/Twitter for 'read later' purposes, enabling fetching quote posts with their quoted content and cursor-based progress tracking.
README
atodeyomu-mcp
X (Twitter) で「あとで読む」目的の 引用リツイート(引用ポスト) を検出する、読み取り専用の MCP サーバーです。引用ポストとその引用元(本文・メディア・著者)をまとめて取得し、Claude Code → Notion の知識管理パイプラインから利用することを想定しています。
提供するツールは get_quoted_posts(前回以降の引用ポストを取得)と commit_cursor(取得位置を確定)の 2 つです。X への投稿・いいね・RT などの書き込みは一切行いません。前回どこまで取得したかはローカル(~/.atodeyomu-mcp/cursor.json)に記録し、since_id で差分だけを取得するため、Notion 照合のコストを抑えられます。
動作確認の詳細手順は docs/VERIFICATION.md、Cowork スケジュールタスクで Notion に記録するまでの手順は docs/COWORK_PIPELINE.md を参照してください。設計の詳細は docs/DESIGN.md、フロー図つきの仕様は docs/SPEC.md にあります。
必要なもの
- Node.js 20 以上(
npxが使えること) - X Developer アカウント(無料プランで可)
- Claude Code
npx で実行するため、リポジトリの clone やビルドは不要です。
セットアップ
1. X Developer Portal でアプリを作成
- developer.x.com でプロジェクトとアプリを作成します。
- アプリの User authentication settings を開き、次のように設定します。
- App permissions:
Read - Type of App:
Web App, Automated App or Bot(Confidential client) - Callback URI / Redirect URL:
http://127.0.0.1:8787/callback - Website URL: 任意の URL(例: GitHub リポジトリ URL)
- App permissions:
- Keys and tokens から OAuth 2.0 Client ID と Client Secret を控えます。
スコープは
tweet.readusers.readoffline.accessの 3 つだけを使います。
2. 認可(初回のみ)
トークンを取得する認可を一度だけ実行します。控えた Client ID / Secret をフラグで渡します。
npx -y atodeyomu-mcp auth --client-id 控えたClientID --client-secret 控えたClientSecret
- ターミナルに表示された認可 URL をブラウザで開きます。
- X で承認すると
http://127.0.0.1:8787/callbackにリダイレクトされ、access / refresh token を取得します。 - トークンは
~/.atodeyomu-mcp/tokens.jsonにchmod 600で保存されます。
以降、トークンは MCP サーバーが自動でリフレッシュします。再認可が必要になるのは refresh token が失効したときだけです(その場合は同じコマンドを再実行)。
3. Claude Code への登録
~/.mcp.json に次のように登録します。CLIENT_ID / CLIENT_SECRET は env で渡します(サーバーがトークンを自動リフレッシュする際に必要です)。
{
"mcpServers": {
"atodeyomu": {
"command": "npx",
"args": ["-y", "atodeyomu-mcp"],
"env": {
"CLIENT_ID": "控えたClientID",
"CLIENT_SECRET": "控えたClientSecret"
}
}
}
}
登録後、Claude Code を再起動すると atodeyomu が接続されます。
~/.mcp.jsonには秘密情報(Client ID / Secret)が平文で入ります。このファイルを共有・コミットしないでください。
使い方
登録後、Claude Code から 2 つのツールを呼び出せます。基本の流れは「get_quoted_posts で差分を取得 → 要約して Notion に保存 → 成功したら commit_cursor で取得位置を確定」です。
get_quoted_posts
前回確定した位置以降の引用ポストを返します。この時点では取得位置を進めません。
入力
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
max_results |
number | 任意 | 20 | 1〜100 |
since_id |
string | 任意 | カーソル値 | 取りこぼし時に取得開始位置を手動で巻き戻すための上書き |
出力(例)
{
"posts": [
{
"id": "1899...",
"text": "これあとで読む",
"created_at": "2026-06-20T09:12:00.000Z",
"url": "https://x.com/your_name/status/1899...",
"quoted_post": {
"id": "1898...",
"text": "引用元の本文 ...",
"created_at": "2026-06-19T22:00:00.000Z",
"author_username": "someone",
"url": "https://x.com/someone/status/1898...",
"media": [{ "url": "https://pbs.twimg.com/media/xxx.jpg", "type": "photo" }]
}
}
],
"newest_seen_id": "1899..."
}
前回以降の直近 max_results 件のうち、引用ポストだけが posts に返ります。「あとで読む」というキーワードでの絞り込みや要約は、呼び出し側(Claude Code のスキル)で行う設計です。
commit_cursor
Notion への保存が成功したあとに呼び、取得位置を進めます。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
post_id |
string | 必須 | ここまで安全に保存できた最後の post id |
全件成功なら get_quoted_posts が返した newest_seen_id を、一部だけ保存できた場合はその最後の id を渡します。次回の get_quoted_posts はその id 以降から再開します。途中で失敗して commit_cursor を呼ばなければ取得位置は据え置かれ、次回また同じ差分を取り直せるので取りこぼしが起きません。
動作確認
- X 上で、適当な投稿に「あとで読む」とコメントを付けて 引用ポスト します。
~/.mcp.jsonに登録した状態で Claude Code を起動します。- Claude Code に
get_quoted_postsを呼ぶよう指示します(例:「直近の引用ポストを取得して」)。 - 手順 1 の引用ポストが、引用元の本文・メディアまで含めて返ってくれば成功です。
- 続けて、返ってきた
newest_seen_idでcommit_cursorを呼び、~/.atodeyomu-mcp/cursor.jsonが更新されることを確認します。次回get_quoted_postsを呼ぶと、その位置以降の差分だけが返ります。
トラブルシューティング
| 症状 | 対処 |
|---|---|
認可を再実行してください と出る |
refresh token が失効しています。npx -y atodeyomu-mcp auth --client-id <ID> --client-secret <SECRET> をやり直してください。 |
| トークン期限切れ後にリフレッシュで失敗する | ~/.mcp.json の env に CLIENT_ID / CLIENT_SECRET が設定されているか確認してください。 |
| レート制限のエラー | メッセージ中の Retry-After(秒)だけ待ってから再試行してください。 |
| コールバックが届かない | Developer Portal の Callback URI が http://127.0.0.1:8787/callback と完全一致しているか確認してください。 |
セキュリティ
- Client ID / Secret は
~/.mcp.jsonのenvに平文で入ります。~/.mcp.jsonとトークン(~/.atodeyomu-mcp/tokens.json)は秘密情報です。コミット・共有しないでください。 - 資格情報(Client ID / Secret)は、サーバー起動時は
~/.mcp.jsonのenv、認可時は--client-id/--client-secretフラグで渡します。 - トークンファイルは
chmod 600で保存されます。 - カーソル(
~/.atodeyomu-mcp/cursor.json)は秘密情報ではありませんが、トークンと同じディレクトリで管理されます。取得位置をリセットしたい場合はこのファイルを削除してください。ただし次回呼び出しはsince_idなしになるため、タイムラインの直近max_results件(既定20・最大100)の中から引用ポストを探すだけで、それより古い投稿は一度の呼び出しでは取得されません。古い投稿まで遡りたい場合はmax_resultsを増やすか、since_idを指定して複数回呼び出してください。 - 本サーバーは X に対して読み取り専用で、書き込み権限は要求しません(ローカルのカーソルファイルのみ書き込みます)。
免責
This project is unofficial, community-maintained, and not affiliated with X Corp. Use at your own risk. "X" and "Twitter" are trademarks of their respective owners.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。