Постинг в X из n8n
n8n запускает ваши сценарии по событию. Добавьте MCP-сервер X (Twitter) от calmposts, и каждая новая статья, релиз или строка таблицы станет постом для X и Bluesky, подогнанным под каждую соцсеть и ждущим вашего «да» в очереди.
- Подключение
- Удалённый MCP-сервер по Streamable HTTP: ничего не нужно устанавливать
- Вход
- API-ключ в заголовке Authorization
- Адрес сервера
https://calmposts.com/mcp- Где настраивается
- узел MCP Client Tool или MCP Client
Что n8n умеет с calmposts
n8n запускает сценарии по расписанию, по вебхуку, по новой записи в RSS-ленте или новой строке в таблице. С calmposts за ИИ-агентом n8n сценарий превращает каждую новую запись в пост для X (Twitter) или тред и ставит его в очередь calmposts, где он ждёт вашего одобрения.
Есть два пути. MCP Client Tool даёт ИИ-агенту инструменты calmposts, и модель сама их выбирает; узел MCP Client вызывает один инструмент обычным шагом, с аргументами из предыдущих узлов и без модели. Оба берут ключ из учётных данных n8n: его сохраняют один раз, и им пользуются все сценарии.
MCP-сервер для X (Twitter) даёт n8n 11 инструментов — тех же, что и любому другому клиенту:
| Инструмент | Что делает |
|---|---|
list_accounts | ваши каналы и правила каждой соцсети; customer_id — каналы одного клиента |
list_customers | клиенты агентства с id их каналов |
get_limits | расход тарифа, часовой пояс рабочего пространства, лимиты соцсетей |
create_post | пост или тред для выбранных аккаунтов, свой текст для каждого, картинки по URL; when: draft, queue, at или now |
list_posts | посты по статусу, аккаунту, клиенту и периоду |
get_post | один пост с его каналами, статусом и версией |
update_post | изменить или перенести; что не указано, остаётся |
delete_post | отменить и удалить |
get_next_slot | куда when=queue поставит пост |
retry_post | снова отправить невышедшие каналы |
get_post_metrics | цифры вышедшего поста по каждому каналу через 1 ч, 24 ч и 7 дней (тарифы с аналитикой); только чтение |
Настройка calmposts в n8n
Сначала проверьте ключ
Создайте ключ в calmposts в разделе «API и MCP» (он показывается один раз) и запросите у сервера список инструментов. Список из 11 инструментов значит, что адрес и ключ верны; 401 — ключ неверный или отправлен без «Bearer ».
curl -s https://calmposts.com/mcp \
-H "Authorization: Bearer cp_live_…" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# 200 {"jsonrpc":"2.0","id":1,"result":{"tools":[…]}}Способ 1: ИИ-агент с MCP Client Tool
Агент читает запись, пишет пост и выбирает инструмент.
Создайте ключ в calmposts в разделе «API и MCP». В n8n создайте учётные данные Bearer Auth и вставьте ключ в поле Bearer Token без «Bearer » — n8n добавит его сам.
В сценарии откройте инструменты узла AI Agent и добавьте MCP Client Tool.
Заполните поля:
Endpoint: https://calmposts.com/mcp Server Transport: HTTP Streamable Authentication: Bearer Auth Bearer Token: cp_live_… Tools to Include: AllВ промпте агента скажите, что делать, например «Напиши один пост для X про эту статью и сохрани его в calmposts с when=queue», запустите сценарий один раз и посмотрите вывод узла.
Способ 2: Обычный шаг с узлом MCP Client
Без модели: каждый запуск вызывает create_post с полями, которые вы сопоставили.
Добавьте узел MCP Client после триггера и заполните поля:
MCP Endpoint URL: https://calmposts.com/mcp Server Transport: HTTP Streamable Authentication: Bearer Auth Tool: create_post Input Mode: JSONПередайте аргументы в JSON, подставив поля предыдущих узлов. ACCOUNT_ID берётся из list_accounts: один раз вызовите этот инструмент в отдельном узле MCP Client и посмотрите id.
{ "text": "{{ $json.title }} {{ $json.link }}", "account_ids": ["ACCOUNT_ID"], "when": "queue" }
Вход: ключ или OAuth
Учётные данные Bearer Auth отправляют Authorization: Bearer с вашим ключом в каждом запросе — ровно то, что ждёт calmposts. Ключ не истекает, поэтому подходит для сценариев, которые работают по ночам.
Если выберете Header Auth, укажите имя Authorization и значение Bearer cp_live_… — с пробелом.
В n8n есть и учётные данные MCP OAuth2, которые регистрируются сами (Dynamic Client Registration включён по умолчанию). calmposts принимает их адрес возврата, если ваш n8n открыт по https или с localhost; для сценария, который работает без присмотра, ключ проще.
Заведите для n8n отдельный ключ только с нужными правами (accounts:read, posts:read, posts:write), чтобы отозвать его, не трогая других агентов.
Как проверить, что всё работает
- В узле MCP Client список Tool заполняется 11 инструментами calmposts: адрес и ключ работают.
- Запустите ИИ-агента на тестовой записи: в его журнале видны вызовы list_accounts и create_post.
- Новый пост появился в разделе «Посты» calmposts — черновиком или в очереди, с источником mcp.
Что попросить
Просите своими словами — агент сам выберет инструменты. Хорошо работают такие просьбы:
- «Для каждой новой записи RSS напиши один пост для X короче 280 символов со ссылкой и сохрани его в calmposts с when=queue для моего аккаунта X».
- «Сделай из этой заметки к релизу короткий тред для X и Bluesky и сохрани черновиком».
- «Сначала вызови get_limits; если на сегодня осталось меньше 3 постов, сохрани пост черновиком, а не в очередь».
- «Никогда не используй when=now. Если calmposts ответит duplicate_recent, перепиши пост один раз и попробуй снова».
Соцсети, треды и одобрение
Посты уходят в X и Bluesky. В X и Bluesky тред выходит цепочкой ответов. Скоро: Threads и LinkedIn.
Пишете один раз — выходит везде: агент передаёт один текст для всех выбранных аккаунтов. Если текст длиннее, чем разрешает соцсеть, calmposts публикует его там тредом из постов, каждый из которых помещается: делит по абзацу, затем по предложению, затем по пробелу, ничего не нумерует и не добавляет. Правила каждой соцсети и квоты тарифа проверяются до сохранения поста, а ошибка возвращается с указанием поля, так что агент может поправить текст и повторить.
По умолчанию посты агента ждут вас: они возвращаются со статусом pending_approval, и вы одобряете или отклоняете каждый в приложении, в Telegram или из письма calmposts. Владелец рабочего пространства может разрешить агентам публиковать самим; для этого и пространство, и API-ключ должны быть переключены на публикацию. X ждёт, что у аккаунта, который постит автоматически, стоит метка Automated (Settings → Your account → Account information → Automation).
Лимиты и стоимость
- Агентам нужен платный тариф: на Free нет API-ключей и нельзя одобрить подключение приложения. API-ключей по тарифам: Pro 3 · Advanced 10 · Agency 25.
- Посты агента считаются так же, как ваши. Постов в день: Pro 20 · Advanced 100 · Agency 300. Постов со ссылкой в месяц: Pro 30 · Advanced 300 · Agency 600. Каждый пост треда считается отдельно.
- Ссылки считаются отдельно, потому что X берёт с каждого приложения $0,015 за пост и $0,20 за пост со ссылкой. Плата X входит в тариф: свой аккаунт разработчика X и свой счёт за X API не нужны.
- Попробовать: 7 дней бесплатно. Нужна карта. 5 постов со ссылкой за пробный период.
- Каждый ключ может сделать 60 запросов в минуту, MCP и REST вместе; дальше сервер отвечает 429 с Retry-After.
Что важно знать про n8n
- На странице документации n8n про MCP Client Tool поле по-прежнему называется SSE Endpoint — это первая версия узла. В нынешних версиях есть Endpoint и выбор Server Transport: выберите HTTP Streamable. SSE-адреса у calmposts нет.
- Сценарий по RSS ставит ссылку в каждый пост, а у постов со ссылкой в каждом тарифе свой месячный лимит, потому что X берёт за них больше. Проверьте этот лимит, прежде чем включать сценарий.
- Опция Timeout у узлов по умолчанию 60 секунд — намного больше, чем нужно calmposts; дольше всего идёт create_post с картинками, пока calmposts их скачивает.
- Сценарий, который постит для нескольких клиентов, может передавать customer_id в list_accounts и list_posts, чтобы не выходить за каналы одного клиента.
Без MCP: REST API
Всё, что делают инструменты, доступно и обычными REST-запросами к /api/v1 с тем же ключом. Это удобно для скрипта или шага, который умеет только HTTP. calmposts публикует через своё одобренное приложение X, поэтому ключи X API для запроса не нужны.
export CALMPOSTS_API_KEY=cp_live_…
curl -H "Authorization: Bearer $CALMPOSTS_API_KEY" https://calmposts.com/api/v1/accounts
curl -X POST https://calmposts.com/api/v1/posts \
-H "Authorization: Bearer $CALMPOSTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"parts":[{"text":"Calm posts, scheduled."}],"targets":[{"account_id":"ACCOUNT_ID"}],"schedule":{"mode":"queue"}}'Если что-то не работает
Узел падает с 401 missing_api_key
Учётные данные пусты или в Header Auth нет «Bearer ». Используйте Bearer Auth и вставьте только ключ.
Узел падает с ошибкой SSE
В Server Transport стоит Server Sent Events (Deprecated) или это старая версия узла с полем SSE Endpoint. Выберите HTTP Streamable, при необходимости добавив узел заново.
Агент закончил, а поста нет
Прочитайте ответ инструмента в журнале агента: calmposts называет проблему — no_targets (не выбран аккаунт), too_long или quota_exceeded. Дайте промпту id аккаунта или скажите сначала вызвать list_accounts.
MCP OAuth2 останавливается на неверном адресе возврата
calmposts принимает адреса возврата по https, а по http — только localhost. Откройте n8n по https или используйте ключ.
401 missing_api_key
Запрос пришёл без ключа или без «Bearer » перед ним. Отправляйте Authorization: Bearer cp_live_… — с пробелом.
401 invalid_api_key, api_key_revoked или api_key_inactive
Ключ набран с ошибкой, отозван или его создатель больше не состоит в рабочем пространстве. Создайте новый ключ в «API и MCP» и замените старый.
401 invalid_token
Токен доступа OAuth-подключения истёк или подключение отключили. Клиенты обновляют токен сами; если не вышло, войдите заново.
402 quota_exceeded
Исчерпан лимит тарифа, поле field называет какой: api_keys — на тарифе нет агентов (Free); posts_per_day и link_posts_per_month освобождаются на следующий день или в следующем месяце либо с тарифом побольше.
403 insufficient_scope
У ключа нет права, нужного инструменту; field называет его (posts:write для создания постов). Создайте ключ с этим правом.
429 rate_limited
С этого ключа пришло больше 60 запросов в минуту. Подождите столько секунд, сколько указано в Retry-After.
Инструмент отвечает duplicate_recent
Тот же текст уже уходил в тот же аккаунт за последние 7 дней. Попросите другую формулировку.
Пост в статусе pending_approval
Это не ошибка: пост ждёт вашего «да» в calmposts. Одобрите его там или разрешите агентам публиковать (владелец включает это в пространстве и в ключе).
Аккаунт в статусе needs_reconnect
Соцсеть отозвала доступ calmposts. Подключите аккаунт заново в разделе «Аккаунты» приложения.
Вопросы
Это работает в n8n Cloud и в своём n8n?
Да: узлы обращаются к calmposts через интернет. Для OAuth ваш n8n должен быть на https или localhost; ключ работает везде.
MCP Client Tool или MCP Client?
Узел-инструмент — когда модель должна решать, что писать; обычный узел — когда текст в сценарии уже есть и его нужно только поставить в очередь.
Есть ли отдельный узел calmposts для n8n?
Отдельного узла нет: хватает MCP-узлов, а узел HTTP Request может вызывать REST API ниже с теми же учётными данными.
Может ли сценарий опубликовать сразу?
Только с when=now и если и пространство, и ключ переключены на публикацию. Иначе пост ждёт одобрения — для автоматического сценария это как раз удобно.
Агент может отвечать, подписываться или писать в личку?
Нет. Таких инструментов нет: X запрещает это автоматизировать, а calmposts только пишет и планирует ваши собственные посты.
Нужны ли мне свои ключи X API?
Нет. calmposts публикует через своё одобренное приложение X, а плата X за посты входит в цену тарифа.
Документация n8n, по которой написана страница
- n8n docs: MCP Client Tool node
- n8n docs: MCP Client node
- n8n docs: MCP credentials
- n8n docs: HTTP Request credentials (bearer auth)
- n8n source: the MCP Client Tool node
calmposts — независимый сервис, он не связан с создателями n8n и не одобрен ими. Названия продуктов принадлежат их владельцам.
Пусть n8n спокойно постит за вас
Начните пробный период, подключите аккаунты, создайте ключ и дайте n8n адрес сервера.
Попробовать бесплатно