calmposts

Постинг в X из Gemini CLI

Gemini CLI — агент Google для терминала. Добавьте MCP-сервер X (Twitter) от calmposts, и он превратит ваши заметки, документацию или историю релизов в посты и треды для X и Bluesky — черновиками или в очередь на ваше одобрение.

Подключение
Удалённый MCP-сервер по Streamable HTTP: ничего не нужно устанавливать
Вход
API-ключ в заголовке Authorization
Адрес сервера
https://calmposts.com/mcp
Где настраивается
~/.gemini/settings.json или .gemini/settings.json

Что Gemini CLI умеет с calmposts

Gemini CLI читает файлы, запускает команды и ищет в интернете прямо из терминала. С calmposts как MCP-сервером он может набросать тред о запуске по README, посты на неделю по плану или продолжение того, что вы запланировали вчера, и сохранить каждый пост в calmposts.

Gemini спрашивает разрешение перед запуском MCP-инструмента, если сервер не помечен как доверенный, так что вы видите каждый вызов create_post и его текст заранее. Команда /mcp показывает состояние подключения calmposts и его инструменты.

MCP-сервер для X (Twitter) даёт Gemini CLI 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 в Gemini CLI

Сначала проверьте ключ

Создайте ключ в 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: Одна команда для всех проектов

gemini mcp add пишет в .gemini/settings.json текущего проекта, если не передать -s user — тогда calmposts попадёт в ~/.gemini/settings.json.

  1. Создайте ключ в calmposts в разделе «API и MCP» и экспортируйте его, например в ~/.zshrc:

    export CALMPOSTS_API_KEY=cp_live_…
  2. Добавьте сервер. Одинарные кавычки сохраняют в settings.json имя переменной, а Gemini подставит её значение из окружения при загрузке настроек:

    gemini mcp add -s user --transport http \
      --header 'Authorization: Bearer ${CALMPOSTS_API_KEY}' calmposts https://calmposts.com/mcp
  3. Проверьте: в списке calmposts в состоянии Connected.

    gemini mcp list

Способ 2: settings.json вручную

Используйте httpUrl: в Gemini CLI url означает старый транспорт SSE, а calmposts говорит только на Streamable HTTP.

  1. Добавьте calmposts в mcpServers в ~/.gemini/settings.json или в .gemini/settings.json проекта:

    {
      "mcpServers": {
        "calmposts": {
          "httpUrl": "https://calmposts.com/mcp",
          "headers": {"Authorization": "Bearer ${CALMPOSTS_API_KEY}"}
        }
      }
    }
  2. Запустите gemini и выполните /mcp: calmposts в состоянии CONNECTED, с 11 инструментами.

Вход: ключ или OAuth

Gemini CLI отправляет заданные заголовки в каждом запросе. Любая строка в settings.json может ссылаться на переменную окружения ($VAR_NAME или ${VAR_NAME}, в том числе из файлов .env), так что ключ в файле хранить не нужно.

Gemini CLI умеет входить и сам: когда сервер отвечает 401, он находит OAuth-адреса, регистрируется и открывает браузер, а токены хранит в ~/.gemini/mcp-oauth-tokens.json. Для этого нужны локальный браузер и возврат на localhost, поэтому по обычному SSH это не работает. С calmposts эта страница проверена с ключом.

Не помечайте calmposts как доверенный (trust): это отключает все подтверждения для инструментов сервера, включая delete_post.

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

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

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

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

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

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

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

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

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

Тарифы

Что важно знать про Gemini CLI

Без 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

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

calmposts в состоянии DISCONNECTED

Выполните gemini mcp list. 401 значит, что заголовка нет или CALMPOSTS_API_KEY не задана в окружении Gemini; заодно проверьте, что адрес указан в httpUrl, а не в url.

Ошибка SSE или 405 от calmposts

Адрес указан в url, поэтому Gemini CLI говорит по SSE, а на GET-поток SSE calmposts отвечает 405. Перенесите адрес в httpUrl.

Gemini открывает браузер для входа

До calmposts не дошёл действующий ключ, и ответ 401 запустил поиск OAuth в Gemini. Исправьте заголовок или переменную и перезапустите Gemini.

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. Подключите аккаунт заново в разделе «Аккаунты» приложения.

Вопросы

Помечать ли сервер calmposts как доверенный?

Только если вы согласны, чтобы любой инструмент calmposts, включая delete_post, работал без вопросов. Посты агентов всё равно ждут в очереди одобрения calmposts.

Настройки проекта или пользователя?

.gemini/settings.json проекта получит каждый, кто его склонирует; ~/.gemini/settings.json — только ваш. В обоих случаях держите ключ в переменной окружения.

Нужна ли программа calmposts-mcp?

Нет. Gemini CLI подключается к хостинговому серверу по Streamable HTTP; ничего устанавливать не нужно.

Может ли Gemini опубликовать сразу?

Только если вы попросите опубликовать сейчас и и пространство, и ключ разрешают агентам публиковать. Иначе пост ждёт вашего одобрения.

Агент может отвечать, подписываться или писать в личку?

Нет. Таких инструментов нет: X запрещает это автоматизировать, а calmposts только пишет и планирует ваши собственные посты.

Нужны ли мне свои ключи X API?

Нет. calmposts публикует через своё одобренное приложение X, а плата X за посты входит в цену тарифа.

Документация Gemini CLI, по которой написана страница

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

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

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

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