Twitter Bridge MCP
Подключай Claude.ai к Twitter/X без ежемесячной платы за официальный API.
Этот сервер использует bb-browser (открытое ПО для автоматизации браузера) для управления сессией Chrome, в которой уже выполнен вход в Twitter. Всё работает как MCP-сервер, с которым может общаться Claude.ai.
Архитектура:
Claude.ai ──MCP──> ваш сервер:8080 ──bb-browser──> Chrome (авторизован) ──> Twitter/X
Стоимость: ~$5/год (нужен только домен для Cloudflare Tunnel).
Возможности
Сервер предоставляет 19 инструментов, разделённых на три группы:
| Инструмент |
Метод |
Статус |
| twitter_post |
Автоматизация браузера |
✅ |
| twitter_reply |
Автоматизация браузера |
✅ |
| twitter_like |
GraphQL API |
✅ |
| twitter_retweet |
GraphQL API |
✅ |
| twitter_quote |
Автоматизация браузера |
✅ |
| twitter_follow |
Автоматизация браузера |
✅ |
| twitter_unfollow |
Автоматизация браузера |
✅ |
| twitter_undo |
GraphQL API |
✅ |
| twitter_search |
Парсинг DOM |
✅ |
| twitter_timeline |
Парсинг DOM |
✅ |
| twitter_bookmarks |
Парсинг DOM |
✅ |
| twitter_tweets |
Парсинг DOM |
✅ |
| twitter_notifications |
Адаптер bb-sites |
✅ |
| twitter_user |
Адаптер bb-sites |
✅ |
| twitter_view_tweet |
Парсинг DOM |
✅ |
| twitter_dm_read |
Автоматизация браузера |
⚠️ частично |
| twitter_screenshot |
bb-browser |
✅ |
| browser_open |
bb-browser |
✅ |
| browser_snapshot |
bb-browser |
✅ |
Чтение DM работает, но E2E-шифрование Twitter может ограничивать видимость через автоматизацию.
Почему не официальный API?
- Twitter/X API Basic стоит $100/месяц. Этот проект делает то же самое за $5/год, автоматизируя реальный браузер.
- Внутренний GraphQL API Twitter требует заголовок
x-client-transaction-id, который генерируется функцией из webpack-бандлов. Номер модуля меняется при каждом деплое Twitter, что вызывает случайные 404. Поэтому GraphQL используется только для простых действий (лайк, ретвит, удаление). Всё остальное — через парсинг DOM.
Архитектура
Сервер состоит из трёх слоёв:
- MCP + OAuth — Claude.ai подключается через Streamable HTTP с авто-одобрением OAuth 2.0 (PKCE).
- Реализация инструментов — 19 инструментов, разделённых на автоматизацию браузера и вызовы GraphQL.
- bb-browser — управляет Chrome через CDP (Chrome DevTools Protocol), используя текущую сессию.
Предварительные требования
- Node.js ≥ 18
- Chrome или Chromium с включённой удалённой отладкой
- bb-browser — установить с GitHub
- Аккаунт Twitter/X, авторизованный в профиле Chrome
- Cloudflare Tunnel (или любой reverse proxy) для HTTPS
Установка и запуск
1. Запустите Chrome с CDP
# Создайте отдельный профиль
mkdir -p ~/chrome-mcp-profile
# Запустите Chrome с удалённой отладкой
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir=$HOME/chrome-mcp-profile
Войдите в Twitter/X в этом окне Chrome.
2. Установите сервер
git clone https://github.com/replica882/twitter-bridge-mcp.git
cd twitter-bridge-mcp
npm install
cp .env.example .env
# Отредактируйте .env под свои параметры
3. Запустите сервер
node server.mjs
# Twitter MCP Bridge v0.6.0: http://0.0.0.0:8080/mcp
4. Опубликуйте через Cloudflare Tunnel
cloudflared tunnel --url http://localhost:8080
Или настройте именованный туннель для постоянного URL (см. документацию Cloudflare).
5. Подключите Claude.ai
В Claude.ai → Settings → Connected Tools → Add Custom Connector:
- URL:
https://ваш-домен-туннеля.com/mcp
Claude автоматически обнаружит OAuth-эндпоинты и подключится.
Конфигурация
Все настройки задаются через переменные окружения (или .env файл):
| Переменная |
По умолчанию |
Описание |
PORT |
8080 |
Порт сервера |
CDP_PORT |
9222 |
Порт Chrome DevTools Protocol |
BASE_URL |
http://localhost:8080 |
Публичный URL (для OAuth) |
BB_BROWSER_PATH |
~/local/bin/bb-browser |
Путь к бинарнику bb-browser |
DM_PIN |
(пусто) |
PIN для DM (если настроено E2E) |
OAUTH_CLIENT_ID |
twitter-mcp-client |
ID клиента OAuth |
OAUTH_CLIENT_SECRET |
(авто-генерация) |
Секрет клиента OAuth |
Важные предупреждения
- Шифрование профиля Chrome: Cookie привязаны к ключу профиля. Нельзя скопировать директорию профиля для переноса. Всегда используйте
--user-data-dir и входите вручную.
- React contenteditable: Поле ввода Twitter — это
contenteditable div. Обычное манипулирование DOM не вызывает обновление состояния React. Сервер использует ClipboardEvent для цитат и команду type от bb-browser для обычных постов.
- Поиск иногда пуст: Если выполнять поиск сразу после загрузки страницы, DOM может быть не готов. Сервер ждёт 4 секунды — этого достаточно.
- systemd/launchd и dotenv: При запуске как системная служба убедитесь, что
WorkingDirectory указывает на каталог проекта. Иначе .env не загрузится, BASE_URL упадёт в localhost, и OAuth не сработает. Для macOS launchd добавьте <key>WorkingDirectory</key><string>/путь/к/twitter-bridge-mcp</string> в plist. Для systemd — WorkingDirectory=/путь/к/twitter-bridge-mcp в unit-файл.
- Перезапуск сервера сбрасывает OAuth-токены: Токены хранятся в памяти. При каждом рестарте нужно переподключать инструмент в Claude.ai (Settings → Connected Tools → reconnect).
Управление вкладками
Каждая операция открывает новую вкладку. Без очистки Chrome накапливает 40+ вкладок и падает. Сервер автоматически закрывает лишние, оставляя не более 10.
Автоввод PIN для DM
Twitter требует PIN при каждом открытии страницы DM (E2E-шифрование). Если установлена переменная DM_PIN, сервер автоматически вводит его, используя имитацию ввода, совместимую с React (нативный установщик свойств + события клавиатуры).
Благодарности
Лицензия
MIT
Комментарии
Комментариев пока нет. Будьте первым.