Аутентификация
Каждый запрос к https://mcp.postnext.io/api требует заголовок Authorization с Bearer-токеном. Получить токен можно двумя способами.
OAuth (рекомендуется для ИИ-клиентов)
ИИ-клиенты при первом подключении выполняют Dynamic Client Registration и проводят пользователя через экран согласия OAuth. Страница /mcp/connect делает это автоматически, и клиент получает токен доступа на 30 дней.
API-ключ
Для скриптов и CI создайте персональный API-ключ в приложении PostNext в разделе Аккаунт → API-ключи. Ключ начинается с apikey_ и передаётся как обычный Bearer-токен.
Endpoint
Все вызовы инструментов идут на один JSON-RPC 2.0 endpoint по HTTPS POST.
Инструменты
list_scheduled_posts
Список ваших запланированных публикаций (поставленных в очередь на публикацию, но ещё не отправленных).
Аргументы
limitfromВозвращает
Объект с posts: [{id, platform, content, scheduledAt, status}]. До limit результатов.
Пример
curl -X POST https://mcp.postnext.io/api \
-H "Authorization: Bearer apikey_xxx" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","id":1,
"params":{"name":"list_scheduled_posts",
"arguments":{"limit":5}}}'
list_drafts
Список ваших черновиков (ещё не запланированных).
Аргументы
limitВозвращает
Объект с drafts: [{id, platform, content, updatedAt}]. До limit результатов.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":2,
"params":{"name":"list_drafts","arguments":{"limit":10}}}
list_connected_accounts
Список социальных аккаунтов, подключённых к вашей команде.
Аргументы
Без аргументов.
Возвращает
Объект с accounts: [{platform, handle, connected, lastSyncAt}].
Пример
{"jsonrpc":"2.0","method":"tools/call","id":3,
"params":{"name":"list_connected_accounts","arguments":{}}}
get_account_healthПлатный план
Сводка состояния по всем подключённым платформам.
Аргументы
platformwindowDaysВозвращает
Объект с windowDays, postsScheduled, postsPublished, postsFailed, разбивкой byPlatform и topErrors[].
Пример
{"jsonrpc":"2.0","method":"tools/call","id":4,
"params":{"name":"get_account_health",
"arguments":{"windowDays":30}}}
create_post_draft
Создание нового черновика публикации. Черновики не публикуются автоматически.
Аргументы
platformcontentmediaUrlsclientRequestIdВозвращает
Объект с новым черновиком: {id, platform, content, status: "DRAFT", createdAt}.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":5,
"params":{"name":"create_post_draft",
"arguments":{"platform":"twitter",
"content":"Hello from MCP"}}}
update_post_draft
Обновление существующего черновика. Необходимо указать хотя бы одно из полей: content или mediaUrls.
Аргументы
postIdcontentmediaUrlsclientRequestIdВозвращает
Объект с обновлённым черновиком: {id, platform, content, mediaUrls, status, updatedAt}.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":6,
"params":{"name":"update_post_draft",
"arguments":{"postId":"",
"content":"Updated copy"}}}
connect_channel
Генерация одноразового URL, который пользователь может открыть для авторизации подключения новой платформы.
Аргументы
platformВозвращает
Объект с authUrl (одноразовая ссылка, которую пользователь открывает для авторизации), expiresAt и platform.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":7,
"params":{"name":"connect_channel",
"arguments":{"platform":"linkedin"}}}
schedule_post
Перемещает черновик (статус DRAFT) в очередь публикации BullMQ на будущий timestamp. Идемпотентен в пределах дрейфа ±60 секунд; отклоняет попытки перепланирования на другое время без явной отмены.
Аргументы
postIdscheduledAtВозвращает
Объект с postId, scheduledAt (ISO), status: SCHEDULED.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":8,
"params":{"name":"schedule_post",
"arguments":{"postId":"",
"scheduledAt":"2026-05-10T09:00:00Z"}}}
cancel_scheduled_post
Отменяет запланированный пост и удаляет его из очереди публикации. Базовый черновик сохраняется.
Аргументы
postIdВозвращает
Объект с postId и status: CANCELLED.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":9,
"params":{"name":"cancel_scheduled_post",
"arguments":{"postId":""}}}
delete_draft
Окончательно удаляет черновик. Отклоняет посты не в статусе DRAFT (используйте cancel_scheduled_post для SCHEDULED).
Аргументы
postIdВозвращает
Объект с postId и deleted: true.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":10,
"params":{"name":"delete_draft",
"arguments":{"postId":""}}}
get_post
Возвращает полный PostGroup для postId с контентом по платформам + статус + timestamps.
Аргументы
postIdВозвращает
Объект с postId, status, scheduledAt, createdAt, updatedAt и providers (карта платформа → контент).
Пример
{"jsonrpc":"2.0","method":"tools/call","id":11,
"params":{"name":"get_post",
"arguments":{"postId":""}}}
search_posts
Подстрочный поиск (без учёта регистра) по контенту постов активной команды. Фильтры: status, platform, limit (1-100, по умолчанию 20).
Аргументы
querystatusplatformlimitВозвращает
Объект с posts: [{postId, status, platforms, snippet, scheduledAt, updatedAt}]. Snippet содержит совпадающий контекст с многоточием с обеих сторон.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":12,
"params":{"name":"search_posts",
"arguments":{"query":"launch","limit":10}}}
list_teams
Возвращает команды, которыми владеет или администрирует аутентифицированный пользователь, с пометкой активной команды.
Аргументы
Без аргументов.
Возвращает
Объект с currentTeamId и teams: [{teamId, teamName, isCurrent}].
Пример
{"jsonrpc":"2.0","method":"tools/call","id":13,
"params":{"name":"list_teams","arguments":{}}}
set_current_team
Переключает активную команду для этого Bearer-токена. Пользователь должен быть участником. Сохраняется в OAuth-токене; in-session-мутация делает эффект немедленным для последующих инструментов в той же беседе.
Аргументы
teamIdВозвращает
Объект с teamId, teamName, persisted (true для OAuth, false для API-ключа) и опциональным note.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":14,
"params":{"name":"set_current_team",
"arguments":{"teamId":"team_xxxxx"}}}
get_plan_limits
Возвращает текущий тариф пользователя и квоты по тарифу (каналы, хранилище, AI-кредиты, публикация). Доступен на любом плане. Полезен перед изменяющими инструментами, чтобы предсказать, будет ли вызов заблокирован.
Аргументы
Без аргументов.
Возвращает
Объект с tier, tierDisplayName, isPaid, isTrial, upgradeUrl, limits (channels/storage/aiCalls/posts каждое как {limit, current, exceeded} или {limit, allowed}) и creditsAvailable ({total, subscriptionRemaining, purchasedBalance} или null).
Пример
{"jsonrpc":"2.0","method":"tools/call","id":15,
"params":{"name":"get_plan_limits","arguments":{}}}
get_post_metrics
Получает метрики вовлечённости для опубликованного поста по каждой платформе, на которую он был отправлен. Twitter и Instagram возвращают заполненные метрики (лайки, ретвиты/репосты, комментарии/ответы, показы); LinkedIn, Threads и TikTok возвращают только статус публикации и URL (сбор метрик вовлечённости отложен на более поздний релиз). Нормализованный сводный totals суммирует лайки/комментарии/репосты/показы по тем платформам, которые сообщили данные.
Аргументы
postId Идентификатор публикации PostNext из результатов запроса списка.
Возвращает
Объект с postId, status, providers: [{platform, publishedPostId, publishedUrl, publishedAt, status, metrics}] и totals: {likes, comments, shares, impressions}. metrics представляет собой объект числовых счётчиков по платформе или null, если платформа пока не собирает данные вовлечённости.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":16,
"params":{"name":"get_post_metrics",
"arguments":{"postId":""}}}
get_publish_status
Диагностирует запланированную публикацию: статус очереди, успех/ошибка по платформам, время обработки и jobId воркера. Возвращает isScheduled=false для публикаций, которые существуют как черновики, но не были перемещены в очередь публикации, с подсказкой на schedule_post.
Аргументы
postId Идентификатор публикации PostNext из результатов запроса списка.
Возвращает
Объект с postId, isScheduled, status, scheduledAt, publishedAt, platforms, processingTimeMs, jobId, topLevelError и results: [{platform, success, publishedPostId, publishedAt, error}]. Содержит hint, когда isScheduled равно false.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":17,
"params":{"name":"get_publish_status",
"arguments":{"postId":""}}}
update_brand_profile
Обновляет активный профиль бренда пользователя. Разрешённые поля: bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize. Всё остальное молча отбрасывается. Разрешает "активный" сначала как дефолт команды, затем как первый активный профиль пользователя.
Аргументы
brandVoice Массив дескрипторов голоса бренда (например, ["профессиональный", "краткий"]).
Other patchable fields: bio, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize.
Возвращает
Объект с profileId, name, updated: [имена полей, которые были изменены] и текущими значениями bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize после изменения.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":18,
"params":{"name":"update_brand_profile",
"arguments":{"brandVoice":["professional","concise"]}}}
get_best_time_to_post Платный план
Рекомендует лучшие N слотов (деньНедели, час) для следующей публикации на платформе, отсортированные по вовлечённости на пост за последние 90 дней. Twitter и Instagram возвращают взвешенные по вовлечённости оценки; LinkedIn, Threads, TikTok сортируют только по частоте. Время в указанной IANA-таймзоне (по умолчанию UTC). Требуется платный план.
Аргументы
platform Социальная платформа: twitter, instagram, linkedin, threads или tiktok.
timezone Название IANA-таймзоны (например, Europe/Moscow, America/New_York). По умолчанию UTC.
topN Количество рекомендаций слотов (1-24, по умолчанию 5).
Возвращает
Объект с platform, timezone, sampleWindowDays, sampleSize, metricsAvailable и recommendations: [{dayOfWeek (1-7, Пн=1), dayLabel, hour (0-23), score, basedOn: {posts, avgEngagement}}]. Содержит hint для случаев cold-start или недоступных метрик.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":19,
"params":{"name":"get_best_time_to_post",
"arguments":{"platform":"twitter","timezone":"Europe/Berlin","topN":5}}}
search_tools
Ищет в каталоге инструментов MCP по тексту, категории или намерению. Возвращает категории, requiresScope, однострочные описания и теги вариантов использования, которые совпали. Доступно на любом плане (поверхность обнаружения).
Аргументы
All optional. Call with no arguments to list every available tool.
query Свободный поиск по именам, описаниям и тегам использования инструментов.
category Фильтр по одной категории: posts, accounts, analytics, brand, teams, discovery, other.
Возвращает
Объект с totalTools, matchCount, categories: [string[]] и tools: [{name, category, requiresScope, description, useCases, matchedOn: [name|category|description|use_case]}]. Содержит hint, когда нет совпадений или нет фильтра.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":20,
"params":{"name":"search_tools",
"arguments":{"query":"why did my post fail"}}}
MCP-ресурсы
Ресурсы представляют собой контекст только для чтения, который клиент может получить через MCP-метод resources/read. Claude загружает их в начале каждой беседы, поэтому имеет контекст аккаунта/команды/бренда без необходимости каждый раз объяснять заново.
postnext://account/summary
E-mail и имя пользователя аккаунта (чтобы Claude мог подтвердить, с каким аккаунтом он работает), план, использованные AI-кредиты / лимит, количество черновиков, количество запланированных, подключённые каналы. Подсчёты ограничены 100 каждый для быстрой загрузки.
postnext://channels/connected
Та же форма, что и результат list_connected_accounts; экспонировано как ресурс, чтобы Claude загрузил его один раз в начале беседы (без round-trip вызова инструмента).
postnext://brand-profiles/active
Активный профиль бренда пользователя (default команды, с fallback на первый собственный профиль). Возвращает только LLM-релевантные поля: bio, expertiseAreas, personalityTraits, brandVoice, mainThemes, audienceSize, preferredHashtags.
postnext://teams/current
Метаданные текущей команды (teamId, teamName) плюс totalTeamsAvailable. Используйте вместе с list_teams + set_current_team для переключения.
Именованные рабочие сценарии
Команды слэш-меню, которые объединяют несколько инструментов. Выберите сценарий, и ИИ-ассистент проведёт вас через многошаговую задачу, запрашивая подтверждение перед каждым изменением.
/weekly-plan
Анализирует профиль бренда, подключённые каналы и очередь публикаций, затем предлагает 5-10 черновиков, распределённых с понедельника по пятницу.
/draft-thread
Создаёт тред из 5-10 постов для Twitter или Threads по заданной теме или ссылке в голосе вашего бренда.
/audit-queue
Проверяет запланированные публикации на ближайшие 7 дней и отмечает дубликаты, перегруз платформ и пробелы в расписании.
/channel-sweep
Сравнивает подключённые каналы с поддерживаемым набором и предлагает, какие из них стоит подключить или обновить.
Endpoint-ы discovery и OAuth
Метаданные по стандартам, чтобы любой MCP-клиент мог настроиться автоматически.
GET /.well-known/oauth-protected-resource/api— RFC 9728GET /.well-known/oauth-authorization-server— RFC 8414GET /oauth/.well-known/openid-configuration— OIDCPOST /oauth/reg— Dynamic Client Registration (RFC 7591)GET /oauth/auth— Authorize (PKCE-S256 required)POST /oauth/token— Token exchange
Открытый исходный код
Готовые рецепты и справочник для разработчиков размещены в нашем публичном репозитории документации. Лицензия MIT; pull-запросы приветствуются. github.com/postnextio/postnext-mcp
Управляйте соцканалами из любого AI-ассистента
Планируйте, создавайте, расписывайте и проверяйте публикации на 6 платформах через диалог с Claude, ChatGPT или Cursor. Одно безопасное подключение, все возможности PostNext.