Постинг в 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 можно хранить в репозитории проекта.
Создайте ключ в calmposts в разделе «API и MCP», затем сделайте его доступным Cursor, например в ~/.zshrc, и перезапустите Cursor, чтобы он увидел переменную:
export CALMPOSTS_API_KEY=cp_live_…Добавьте calmposts в ~/.cursor/mcp.json для всех проектов или в .cursor/mcp.json одного проекта:
{ "mcpServers": { "calmposts": { "url": "https://calmposts.com/mcp", "headers": {"Authorization": "Bearer ${env:CALMPOSTS_API_KEY}"} } } }Сохраните файл и перезапустите Cursor. В Customize → MCPs calmposts включён, с его 11 инструментами.
Способ 2: mcp.json с OAuth, без ключа
Cursor сам входит в calmposts: читает OAuth-метаданные calmposts, регистрируется как публичный клиент и использует PKCE.
Добавьте calmposts без заголовков:
{ "mcpServers": { "calmposts": {"url": "https://calmposts.com/mcp"} } }Когда 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 и туда, если облачные агенты должны постить.
Как проверить, что всё работает
- В Customize → MCPs calmposts включён, а его инструменты видны в списке инструментов вверху панели чата.
- Попросите «Покажи через calmposts мои аккаунты» — агент спросит разрешение на list_accounts и покажет ваши каналы.
- Если что-то не так, откройте панель Output (Cmd+Shift+U; Ctrl+Shift+U в Windows и Linux) и выберите MCP Logs: там ошибки подключения и входа.
Что попросить
Просите своими словами — агент сам выберет инструменты. Хорошо работают такие просьбы:
- «Мы только что смёржили экспорт. Напиши по описанию PR пост для X и пост для Bluesky и сохрани их в calmposts черновиками».
- «Сделай тред из docs/releases/2.4.md и поставь его в очередь calmposts для моих аккаунтов X и Bluesky».
- «Прежде чем что-то планировать, проверь get_limits: сколько у меня осталось постов и постов со ссылкой?»
- «Покажи, что calmposts опубликует завтра, и исправь опечатку во втором посте».
- «Напиши по короткому посту на каждый тег релиза за прошлый месяц и разложи их по свободным слотам следующей недели».
Соцсети, треды и одобрение
Посты уходят в 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.
Что важно знать про Cursor
- Файлы проекта и глобальный объединяются; если в обоих есть calmposts, побеждает .cursor/mcp.json проекта.
- В Cursor 3.6 и новее по умолчанию стоит Auto-review: MCP-инструменты из списка разрешённых выполняются сразу, остальные проходят через классификатор безопасности (Cursor Settings → Agents → Approvals & Execution). Не вносите create_post, update_post и delete_post в этот список, если хотите видеть каждую запись.
- Отдельный инструмент, например delete_post, можно выключить, нажав на его имя в списке инструментов чата.
- Если у команды есть список разрешённых MCP-серверов, администратор одобряет удалённые серверы по URL: попросите разрешить https://calmposts.com/mcp.
Без 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"}}'Если что-то не работает
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 адрес сервера.
Попробовать бесплатно