calmposts

Постинг в 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

Агент читает запись, пишет пост и выбирает инструмент.

  1. Создайте ключ в calmposts в разделе «API и MCP». В n8n создайте учётные данные Bearer Auth и вставьте ключ в поле Bearer Token без «Bearer » — n8n добавит его сам.

  2. В сценарии откройте инструменты узла AI Agent и добавьте MCP Client Tool.

  3. Заполните поля:

    Endpoint:          https://calmposts.com/mcp
    Server Transport:  HTTP Streamable
    Authentication:    Bearer Auth
    Bearer Token:      cp_live_…
    Tools to Include:  All
  4. В промпте агента скажите, что делать, например «Напиши один пост для X про эту статью и сохрани его в calmposts с when=queue», запустите сценарий один раз и посмотрите вывод узла.

Способ 2: Обычный шаг с узлом MCP Client

Без модели: каждый запуск вызывает create_post с полями, которые вы сопоставили.

  1. Добавьте узел MCP Client после триггера и заполните поля:

    MCP Endpoint URL:  https://calmposts.com/mcp
    Server Transport:  HTTP Streamable
    Authentication:    Bearer Auth
    Tool:              create_post
    Input Mode:        JSON
  2. Передайте аргументы в 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), чтобы отозвать его, не трогая других агентов.

Как проверить, что всё работает

Что попросить

Просите своими словами — агент сам выберет инструменты. Хорошо работают такие просьбы:

Соцсети, треды и одобрение

Посты уходят в X и Bluesky. В X и Bluesky тред выходит цепочкой ответов. Скоро: Threads и LinkedIn.

Пишете один раз — выходит везде: агент передаёт один текст для всех выбранных аккаунтов. Если текст длиннее, чем разрешает соцсеть, calmposts публикует его там тредом из постов, каждый из которых помещается: делит по абзацу, затем по предложению, затем по пробелу, ничего не нумерует и не добавляет. Правила каждой соцсети и квоты тарифа проверяются до сохранения поста, а ошибка возвращается с указанием поля, так что агент может поправить текст и повторить.

По умолчанию посты агента ждут вас: они возвращаются со статусом pending_approval, и вы одобряете или отклоняете каждый в приложении, в Telegram или из письма calmposts. Владелец рабочего пространства может разрешить агентам публиковать самим; для этого и пространство, и API-ключ должны быть переключены на публикацию. X ждёт, что у аккаунта, который постит автоматически, стоит метка Automated (Settings → Your account → Account information → Automation).

Какие соцсети уже работают

Лимиты и стоимость

Тарифы

Что важно знать про n8n

Без 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"}}'

Документация REST API

Если что-то не работает

Узел падает с 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, по которой написана страница

calmposts — независимый сервис, он не связан с создателями n8n и не одобрен ими. Названия продуктов принадлежат их владельцам.

Пусть n8n спокойно постит за вас

Начните пробный период, подключите аккаунты, создайте ключ и дайте n8n адрес сервера.

Попробовать бесплатно