calmposts

Постинг в X из Cursor

Агент Cursor и так знает ваш код. Дайте ему MCP-сервер X (Twitter) от calmposts, и он напишет пост о запуске, тред по списку изменений или анонс документации для X и Bluesky и оставит его в вашей очереди calmposts.

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

Что Cursor умеет с calmposts

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

Cursor показывает инструменты calmposts в Available Tools и вызывает их, когда они подходят к просьбе, в том числе в Plan Mode; можно и назвать инструмент прямо, например get_limits или create_post. По умолчанию он спрашивает перед каждым вызовом MCP-инструмента и показывает аргументы, так что вы читаете точный текст до того, как он попадёт в calmposts.

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

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

Создайте ключ в 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.json с ключом из окружения

Ключа в файле нет, поэтому тот же mcp.json можно хранить в репозитории проекта.

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

    export CALMPOSTS_API_KEY=cp_live_…
  2. Добавьте calmposts в ~/.cursor/mcp.json для всех проектов или в .cursor/mcp.json одного проекта:

    {
      "mcpServers": {
        "calmposts": {
          "url": "https://calmposts.com/mcp",
          "headers": {"Authorization": "Bearer ${env:CALMPOSTS_API_KEY}"}
        }
      }
    }
  3. Сохраните файл и перезапустите Cursor. В Customize → MCPs calmposts включён, с его 11 инструментами.

Способ 2: mcp.json с OAuth, без ключа

Cursor сам входит в calmposts: читает OAuth-метаданные calmposts, регистрируется как публичный клиент и использует PKCE.

  1. Добавьте calmposts без заголовков:

    {
      "mcpServers": {
        "calmposts": {"url": "https://calmposts.com/mcp"}
      }
    }
  2. Когда Cursor попросит войти в calmposts, следуйте подсказке. Откроется страница согласия calmposts: войдите как владелец рабочего пространства и нажмите «Разрешить».

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

Ключ в заголовках — самое простое: он уходит в каждом запросе и ничего не истекает. Держите его в переменной окружения и ссылайтесь на неё как ${env:CALMPOSTS_API_KEY}; Cursor подставляет переменные в url и headers, а envFile удалённому серверу недоступен.

С OAuth десктопное приложение Cursor регистрирует оба своих адреса возврата — http://localhost:8787/callback и веб-адрес на cursor.com, — и calmposts принимает оба. Токен доступа живёт час, Cursor обновляет его токеном обновления от calmposts, а подключение видно в «API и MCP» → «Подключённые приложения».

Облачные агенты Cursor (Cloud Agents) держат свои входы в MCP на серверах Cursor и используют серверы из панели Cloud Agents: добавьте calmposts и туда, если облачные агенты должны постить.

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

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

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

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

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

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

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

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

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

Тарифы

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

Без 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 показывает ошибку в Customize → MCPs

Откройте MCP Logs в панели Output. 401 с missing_api_key значит, что заголовок ушёл без ключа: переменная пуста в окружении Cursor. Задайте её в профиле оболочки и перезапустите Cursor.

Агент не пользуется calmposts

Проверьте, что calmposts включён в Customize, а его инструменты включены в списке инструментов чата, и назовите инструмент в просьбе.

Вход заканчивается сообщением «Подключать приложения может только владелец рабочего пространства»

Войдите в calmposts как владелец рабочего пространства или используйте ключ, который создал владелец.

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

Вопросы

Нужна ли Cursor локальная MCP-программа?

Нет. Cursor подключается к хостинговому серверу по URL; удалённой записи нужен только url, а с ключом — ещё headers.

Коммитить ли .cursor/mcp.json?

Да, если в нём ${env:CALMPOSTS_API_KEY}, а не сам ключ: тогда каждый в команде использует свой ключ из своего окружения.

Ключ или OAuth в Cursor?

Ключ — для настройки, которая больше никогда ничего не спросит; OAuth — если не хотите возиться с ключом. Оба работают в вашем пространстве с теми же инструментами.

Cloud Agents используют мой mcp.json?

Нет. Облачные агенты берут серверы из панели Cloud Agents и входят сами; добавьте calmposts туда.

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

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

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

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

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

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

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

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

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