Аутентификация
Каждый запрос к 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}}}
get_channel_analytics
Сводная статистика одного подключённого канала или сразу всех. Возвращает показы, охват, лайки, комментарии и вовлечённость за период, изменение к предыдущему периоду такой же длины и динамику подписчиков. Без platform приходит итог по всей команде. Для одной публикации используйте get_post_metrics, для планирования — get_best_time_to_post.
Аргументы
platform Социальная платформа: twitter, instagram, linkedin, threads или tiktok.
channelName Какой подключённый аккаунт, если на площадке их несколько.
period Период отчёта: 7d, 30d, 90d или all (по умолчанию 30d).
Возвращает
Объект с scope, period, totals, vsPrevious, coverage, dataThrough и followers, где есть trackingSince, current, change и сам ряд.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":34,
"params":{"name":"get_channel_analytics",
"arguments":{"platform":"linkedin","period":"30d"}}}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"}}}
get_plan
Тариф и даты оплаты: уровень, дата продления, окончание пробного периода и признак отмены подписки в конце периода. За лимитами и расходом обращайтесь к get_plan_limits.
Аргументы
Без аргументов.
Возвращает
Объект с полями tier, tierDisplayName, isPaid, isTrial, gated, subscriptionStatus, renewsAt, trialEndsAt, cancelAtPeriodEnd, currency и upgradeUrl.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":21,
"params":{"name":"get_plan",
"arguments":{}}}
upload_asset
Загрузка изображения или видео в медиатеку прямо в base64. Надёжно работает только для очень маленьких файлов, примерно до 8 КБ: всё, что больше, молча обрезается в аргументах инструмента и сохраняется повреждённым. Для файлов побольше используйте request_asset_upload.
Аргументы
filename Имя файла вместе с расширением, до 255 символов.
contentType MIME-тип файла из разрешённого списка изображений и видео.
base64 Содержимое файла в кодировке base64. Держите его очень маленьким и сначала прочитайте предупреждение выше.
Возвращает
Объект с assetId, url, sizeBytes и mimeType. Передайте url в create_post_draft как mediaUrls.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":22,
"params":{"name":"upload_asset",
"arguments":{"filename":"logo.png","contentType":"image/png","base64":"iVBORw0KGgo..."}}}
request_asset_upload
Рекомендуемый способ загрузки, для изображений и видео любого размера. Два шага: вызываете инструмент и получаете подписанную ссылку и готовую команду curl, затем отправляете файл методом PUT по этой ссылке. В ответе на PUT приходит итоговый адрес файла.
Аргументы
filename Имя файла вместе с расширением, до 255 символов.
contentType MIME-тип файла из разрешённого списка изображений и видео.
sizeBytes Точный размер файла в байтах, нужен для подписи загрузки.
Возвращает
Объект с uploadId, uploadUrl, uploadToken, expiresInSeconds и instructions, где лежит точная команда PUT.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":23,
"params":{"name":"request_asset_upload",
"arguments":{"filename":"clip.mp4","contentType":"video/mp4","sizeBytes":4194304}}}
get_latest_blog_post
Подключён ли у команды блог на WordPress, плюс фрагмент самой свежей записи. Только чтение, кредиты не расходуются. Вызывайте перед create_blog_plan или test_blog_connection, чтобы увидеть, что уже настроено.
Аргументы
Без аргументов.
Возвращает
Объект с blogConnected, сводкой по интеграции без учётных данных и latestPost с заголовком, фрагментом, статусом и адресом публикации.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":24,
"params":{"name":"get_latest_blog_post",
"arguments":{}}}
list_blog_plans
Список планов для блога, начиная с самых новых, со статусом, числом тем по статусам, зарезервированными кредитами и ссылкой в панель. Только чтение, кредиты не расходуются.
Аргументы
limit Максимум планов в ответе (1-50, по умолчанию 20).
status Фильтр по статусу: generating, active, paused, completed, cancelled или failed.
Возвращает
Объект с plans и total. У каждого плана есть id, статус, число тем и ссылка в панель.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":25,
"params":{"name":"list_blog_plans",
"arguments":{"status":"active","limit":10}}}
create_blog_plan Платный план
Создаёт контент-план для блога по профилю бренда. Темы генерируются асинхронно, поэтому план возвращается сразу со статусом generating: следите за ходом через list_blog_plans. На тарифах Business и Teams записи ещё и создаются и публикуются в подключённом блоге WordPress.
Аргументы
startDate Первый день, который охватывает план, в формате YYYY-MM-DD.
planDays Сколько дней охватывает план (1-30, по умолчанию 7).
brandProfileId Профиль бренда, для которого строится план. По умолчанию активный профиль команды.
integrationId Какой подключённый блог использовать, если у команды их несколько.
autoPublish Автоматически публиковать созданные записи в подключённом блоге (Business и Teams).
Возвращает
Объект с planId, status, startDate, planDays, brandProfileId, integrationId, topicCount и dashboardUrl.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":26,
"params":{"name":"create_blog_plan",
"arguments":{"startDate":"2026-10-01","planDays":14,"autoPublish":true}}}
test_blog_connection Платный план
Проверяет, отвечает ли подключённый блог на WordPress и действителен ли его токен, и записывает результат в интеграцию. Возвращает версию плагина и его возможности.
Аргументы
integrationId Какой подключённый блог использовать, если у команды их несколько.
Возвращает
Объект с success, message, version, capabilities, integrationId и обновлённым status.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":27,
"params":{"name":"test_blog_connection",
"arguments":{}}}
list_mini_sites
Список био-страниц выбранной команды с публичным адресом, статусом публикации и прогрессом настройки. Начните отсюда: все остальные инструменты для био-страницы принимают siteId из этого ответа и могут обойтись без него, когда у команды одна страница.
Аргументы
Без аргументов.
Возвращает
Объект с sites, у каждого есть id, slug, name, published, url, views и прогресс настройки.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":28,
"params":{"name":"list_mini_sites",
"arguments":{}}}
get_mini_site
Читает био-страницу целиком: шапку профиля, иконки соцсетей, все блоки контента, SEO-метаданные, тему и настройки авто-пина. Длинные тексты обрезаются до превью в 300 символов, учётные данные не возвращаются никогда.
Аргументы
siteId С какой био-страницей работать. Можно не указывать, если у команды она одна.
Возвращает
Объект с id, slug, published, url, header, socials, meta, theme, autoPin, campaign и массивом blocks.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":29,
"params":{"name":"get_mini_site",
"arguments":{}}}
get_mini_site_analytics
Как работает био-страница: просмотры, клики, лучшие ссылки, источник, устройство и страна посетителей, обращения ИИ-краулеров, а также какие опубликованные посты дали клики. Все цифры, кроме строк атрибуции, считаются за всё время, а не за период: скажите об этом, когда сообщаете результаты.
Аргументы
siteId С какой био-страницей работать. Можно не указывать, если у команды она одна.
attributionDays Окно в днях для атрибуции от поста к клику (1-90, по умолчанию 30).
Возвращает
Объект с viewsAllTime, clicksAllTime, topLinks, bySource, byDevice, byCountry, ai, attribution и attributionWindowDays.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":30,
"params":{"name":"get_mini_site_analytics",
"arguments":{"attributionDays":30}}}
add_mini_site_block
Добавляет блок на био-страницу: link, featured, product, event, presave, эпизод подкаста, booking, часы работы, header, text, image или gallery. Обязательные поля зависят от типа. Публичная страница меняется сразу.
Аргументы
siteId С какой био-страницей работать. Можно не указывать, если у команды она одна.
type Тип добавляемого блока, например link, product, event, hours или gallery.
... Плюс поля, свойственные этому типу блока, например url, title, price или startDate.
Возвращает
Объект с сохранённым block, новым blockCount и alreadyExisted, если такой блок уже был.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":31,
"params":{"name":"add_mini_site_block",
"arguments":{"type":"link","url":"https://example.com","title":"New single"}}}
update_mini_site_block
Правит существующий блок: заголовок или адрес ссылки, цену товара, дату события, часы работы или порядок вывода. Меняются только переданные поля, тип блока изменить нельзя. В ответе блок приходит в том виде, в каком сохранён, поэтому отклонённое значение видно сразу.
Аргументы
siteId С какой био-страницей работать. Можно не указывать, если у команды она одна.
blockId Id блока, как его возвращает get_mini_site.
... Плюс поля, свойственные этому типу блока, например url, title, price или startDate.
Возвращает
Объект с блоком в сохранённом виде, списком изменённых полей и списком проигнорированных.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":32,
"params":{"name":"update_mini_site_block",
"arguments":{"blockId":"blk_7f3a","title":"Updated title"}}}
remove_mini_site_block
Удаляет блок с био-страницы по blockId, например прошедшую дату тура или снятую с продажи ссылку на товар. Сначала вызовите get_mini_site, чтобы найти id. Публичная страница меняется сразу.
Аргументы
siteId С какой био-страницей работать. Можно не указывать, если у команды она одна.
blockId Id блока, как его возвращает get_mini_site.
Возвращает
Объект с removed, blockId и числом оставшихся блоков.
Пример
{"jsonrpc":"2.0","method":"tools/call","id":33,
"params":{"name":"remove_mini_site_block",
"arguments":{"blockId":"blk_7f3a"}}}
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-ассистента
Планируйте, создавайте, расписывайте и проверяйте публикации на 7 платформах через диалог с Claude, ChatGPT или Cursor. Одно безопасное подключение, все возможности PostNext.