peturgeorgievv-factory/postfast-mcp

peturgeorgievv-factory/postfast-mcp

от peturgeorgievv-factory
MCP-сервер для API PostFast: планируйте и публикуйте посты в соцсетях, загружайте медиа, смотрите аналитику. Работает с AI-ассистентами — полезно маркетологам и SMM-специалистам для автоматизации.

PostFast MCP Server

MCP server for the PostFast API — schedule and manage social media posts via AI tools like Claude, Cursor, VS Code, and more.

Hosted connector (no install)

Prefer not to run anything locally? Connect to the hosted endpoint and authenticate with OAuth — no npx, no API key to manage:

https://mcp.postfa.st/mcp

Add it as a remote/streamable-HTTP MCP server in any client that supports OAuth (e.g. ChatGPT, Claude). You'll be prompted to sign in to PostFast and authorize access on first use.

Want to run the server yourself instead? Use the npx + API-key setup in Quick Start below.

Quick Start

1. Get your API key

Log in to PostFast, go to API in the sidebar, and generate a key.

2. Install

Choose your preferred method:

Claude Desktop (recommended)

Download the extension from the Claude Desktop extension directory or install manually:

  1. Add to claude_desktop_config.json:
{
  "mcpServers": {
    "postfast": {
      "command": "npx",
      "args": ["-y", "postfast-mcp"],
      "env": {
        "POSTFAST_API_KEY": "your-api-key-here"
      }
    }
  }
}
Инструменты были проиндексированы:
assign_inbox_conversation

Назначает разговор участнику рабочего пространства для последующей работы или опускает assigneeUserId, чтобы снять назначение. Назначаемый должен быть участником рабочего пространства (иначе inbox.assigneeNotMember). Внутреннее для PostFast — ничего не меняется на платформе.

Назначает входящий разговор

Параметры
  • assigneeUserIdstring

    Workspace member user id to assign. Omit to unassign.

  • conversationIdstringобязательный

    Conversation id (from list_inbox_conversations)

create_postsвнешний мир

Создаёт и планирует посты в соцсетях (пакетно до 15). Каждый пост привязан к одному аккаунту (socialMediaId из list_accounts). Для статуса SCHEDULED в каждом посте обязательно указывать scheduledAt; для DRAFT scheduledAt опускается. Планирование поста в отключённый аккаунт (connectionStatus DISABLED в list_accounts) отклоняется с HTTP 400 "socialMediaDisconnected" — проверяйте connectionStatus перед вызовом. Сохранение черновика (DRAFT) в отключённый аккаунт разрешено. TikTok, Instagram, YouTube, Pinterest и Google Business Profile требуют хотя бы один медиафайл ДАЖЕ ДЛЯ ЧЕРНОВИКОВ — сначала прикрепите медиа (попросите у пользователя изображение/видео, или сгенерируйте и загрузите свой, если ничего не предоставлено). Прикрепляйте медиа через ключ, возвращаемый upload_media / get_upload_urls.

Создаёт посты

Параметры
  • approvalStatusenum

    Approval workflow status

  • controlsobject

    Platform-specific controls (shared across all posts in the batch)

  • postsobject[]обязательный

    Array of posts to create (1-15)

  • statusenum

    Post status. SCHEDULED requires scheduledAt on every post.

delete_postидемпотентный

Удаляет пост в социальной сети по идентификатору.

Удаляет пост.

Параметры
  • idstringобязательный

    Post id to delete

generate_connect_linkвнешний мир

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

Генерирует ссылку Connect.

Параметры
  • emailstring

    Recipient email (required when sendEmail is true)

  • expiryDaysinteger

    Link expiry in days (1-30, default 7)

  • externalIdstring

    Your own reference for this link, echoed back unchanged on the return URL. Letters, digits and - . _ ~ : @ only.

  • platformsenum[]

    Restrict the link to these platforms, e.g. ["INSTAGRAM"]. Omit to offer all of them. Enforced server-side, so a scoped link cannot connect any other platform.

  • redirectUrlstring

    Where the connect page offers to send the user once connecting finishes, with status, platform, accountId and externalId on the query string. Must be https (http is accepted only on localhost).

  • sendEmailboolean

    Send the link via email

get_follower_historyтолько чтение

Ежедневные снимки количества подписчиков для одной подключенной учетной записи (передайте её socialMediaId из list_accounts). Возвращает currentFollowerCount, delta (текущее значение минус первый снимок в диапазоне), trackingStartedAt (когда PostFast начал запись этой учетной записи) и серию точек { capturedAt, followerCount }. Все значения - строки (bigint); currentFollowerCount, delta и trackingStartedAt могут отсутствовать, пока у учетной записи не появится первый снимок. Необязательные from/to ограничивают диапазон (ISO 8601; по умолчанию последние 90 дней, максимум 365). Снимки только прямые, данные до trackingStartedAt отсутствуют. Охват: страницы Facebook, Instagram, YouTube, Pinterest, Threads, Bluesky, Telegram, страницы компаний LinkedIn и TikTok. Недоступно: X, личный Facebook.

Получает историю подписчиков

Параметры
  • fromstring

    Range start (ISO 8601, e.g. 2026-03-01T00:00:00.000Z). Defaults to 90 days ago.

  • socialMediaIdstringобязательный

    Account id (from list_accounts)

  • tostring

    Range end (ISO 8601). Defaults to now; range is capped at 365 days.

get_inbox_conversationтолько чтение

Получает один диалог из входящих по идентификатору, включая вычисленную сервером возможность ответа (canReply, maxReplyLength, windowState, disabledReason) - возможность ответа выводится из этих полей, а не из жёстко заданных правил платформы. Возвращает null, если диалог не существует в рабочей области.

Получает диалог из входящих

Параметры
  • idstringобязательный

    Conversation id (from list_inbox_conversations)

get_inbox_unread_countтолько чтение

Общее количество непрочитанных комментариев во всех беседах входящих рабочего пространства (сумма unreadCount для каждой беседы). Используйте mark_inbox_conversation_read после показа беседы пользователю.

Возвращает количество непрочитанных сообщений во входящих.

Параметры

Без параметров.

get_post_analyticsтолько чтение

Получает опубликованные посты с их последними показателями эффективности (показы, охват, лайки, комментарии, репосты). Возвращает только опубликованные посты, у которых есть идентификатор поста на платформе. Личные аккаунты LinkedIn исключены. Поддерживаются: Instagram, Facebook, TikTok, Threads, YouTube, LinkedIn (страницы компаний), Pinterest (бизнес-аккаунты). Значения метрик возвращаются в виде строк. Дополнительные метрики Pinterest включают pin_clicks, outbound_clicks, saves_90d, save_rate_90d (сохранения за 90 дней скользящие, так как API Pinterest не предоставляет общие данные за всё время); видео-пины дополнительно показывают mrc_views, views_10s, avg_watch_time, v50_watch_time, video_starts, quartile_95_views. Видеопосты также включают нормированное время просмотра в latestMetric: avgWatchTimeSeconds, totalWatchTimeSeconds, videoViews (Facebook, Instagram Reels, YouTube, Pinterest, страницы компаний LinkedIn, TikTok). Посты Instagram также включают в latestMetric: saveRate (сохранения / охват в процентах, округлённый до 2 знаков — для ленты IG, Reels и каруселей с метриками) и reelsSkipRate (только для Instagram Reels — процент зрителей, которые пропустили Reels в первые 3 секунды, согласно данным Instagram, округлённый до 2 знаков; может отсутствовать для Reels с малым числом просмотров или до обновления метрик). TikTok также предоставляет total_time_watched, average_time_watched и full_video_watched_rate в metric.extras.

Получает аналитику постов

Параметры
  • endDatestringобязательный

    End of date range (ISO 8601, e.g. 2026-01-31T23:59:59.999Z)

  • platformsenum[]

    Filter by platforms

  • socialMediaIdsstring[]

    Filter by specific social media account ids

  • startDatestringобязательный

    Start of date range (ISO 8601, e.g. 2026-01-01T00:00:00.000Z)

get_upload_urlsвнешний мир

Получает подписанные URL для загрузки медиафайлов. Загрузите ваш файл по полученному URL через PUT, затем используйте ключ в create_posts mediaItems.

Получает URL-адреса загрузки

Параметры
  • contentTypestringобязательный

    MIME type of the file. Supported: image/jpeg, image/png, image/gif, image/webp, video/mp4, video/webm, video/quicktime

  • countinteger

    Number of upload URLs (1-8 for images, 1 for videos)

list_accountsтолько чтение

Перечисляет все аккаунты в социальных сетях, подключённые к рабочому пространству. Каждый аккаунт включает connectionStatus (CONNECTED или DISABLED) и disabledReason (null, если не DISABLED), а также followerCount (последний сохранённый снимок, строка; отсутствует для платформ без данных о подписчиках), followerCountUpdatedAt и inboxCapable (может ли аккаунт отображаться в папке входящих социальной сети, т.е. поддерживается ли приём комментариев). Аккаунт со статусом DISABLED не будет публиковать посты, пока пользователь не переподключит его — проверяйте перед планированием. Для отслеживания динамики подписчиков с течением времени используйте get_follower_history.

Выводит список учётных записей.

Параметры

Без параметров.

list_gbp_locationsтолько чтение

Выводит список мест Google Business Profile для подключенной учётной записи GBP (передайте её socialMediaId). Используйте поле locationId возвращённого места как controls.gbpLocationId в create_posts.

Выводит список местоположений Google Business Profile.

Параметры
  • socialMediaIdstringобязательный

    GBP account id (from list_accounts)

list_inbox_conversationsтолько чтение

Перечисляет обсуждения комментариев из социального входящего — комментарии к постам ваших подключённых аккаунтов, сгруппированные по постам, сначала самые новые. Охватывает TikTok (Business connections), Instagram, Facebook Pages и Threads; комментарии приходят в течение нескольких секунд после публикации и только начиная с момента подключения/запуска (без обратного заполнения истории). Каждое обсуждение содержит вычисляемую сервером возможность ответа — canReply, maxReplyLength, windowState, disabledReason — плюс unreadCount, status (OPEN | SNOOZED | CLOSED) и assignedToUserId. ВСЕГДА определяйте, можете ли вы ответить и как долго, по этим полям; никогда не угадывайте.

List Inbox Conversations

Параметры
  • assignedToUserIdstring

    Only conversations assigned to this workspace member

  • limitinteger

    Conversations per page (max 50)

  • pageinteger

    Page number (0-based)

  • platformsenum[]

    Filter by platforms

  • socialMediaIdsstring[]

    Filter by specific social media account ids (from list_accounts)

  • statusesenum[]

    Filter by conversation statuses

  • unreadOnlyboolean

    Only conversations with unread comments

list_inbox_itemsтолько чтение

Перечисляет элементы одного разговора в папке входящих — комментарии и ответы на них — сначала самые старые по умолчанию (order=DESC для самых новых). Элементы содержат направление (INBOUND | OUTBOUND), состояние (VISIBLE | HIDDEN | DELETED), информацию об авторе, а для комментариев Instagram — canPrivateReply (возможность отправки send_inbox_private_reply). Ответы, отправленные из PostFast, отображаются ровно один раз — без дубликатов, когда платформа сообщает о них.

Перечисляет элементы входящих сообщений.

Параметры
  • conversationIdstringобязательный

    Conversation id (from list_inbox_conversations)

  • limitinteger

    Items per page (max 50)

  • orderenum

    Sort by comment time. Default ASC (oldest first); DESC for newest first.

  • pageinteger

    Page number (0-based)

list_pinterest_boardsтолько чтение

Перечисляет доски Pinterest для подключённой учётной записи Pinterest (передайте её socialMediaId). Используйте поле boardId возвращённой доски как controls.pinterestBoardId в create_posts.

Выводит список Pinterest Boards.

Параметры
  • socialMediaIdstringобязательный

    Pinterest account id (from list_accounts)

list_postsтолько чтение

Перечисляет посты в социальных сетях с опциональными фильтрами по конкретным ID, платформе, статусу и диапазону дат. Неудачные или пропущенные посты содержат lastError { message, code }; коды включают MISSED_DISCONNECTED (аккаунт был отключён, когда пост должен был быть опубликован: переподключитесь и повторите попытку) и MISSED_NOT_PUBLISHED (пост прошёл запланированное время плюс 2-часовой льготный период без публикации).

Выводит список записей

Параметры
  • fromstring

    Start date filter (ISO 8601, e.g. 2026-01-01T00:00:00.000Z)

  • idsstring[]

    Fetch only these post ids (workspace-scoped; max 100; AND-ed with other filters)

  • limitinteger

    Posts per page (max 50)

  • pageinteger

    Page number (0-based)

  • platformsenum[]

    Filter by platforms

  • statusesenum[]

    Filter by post statuses

  • tostring

    End date filter (ISO 8601, e.g. 2026-01-31T23:59:59.999Z)

list_tiktok_soundsтолько чтениевнешний мир

Выводит список трендовых предварительно одобренных треков из Commercial Music Library для подключенной учетной записи TikTok. Возвращает до 100 трендовых звуков с musicSoundId, названием, исполнителем, длительностью и URL предпросмотра/миниатюры. Передайте musicSoundId в create_posts как tiktokMusicSoundId, чтобы прикрепить этот звук к посту с фото или каруселью в TikTok. Параметр genre принимает необработанные значения TikTok, например 'POP', 'HIP_HOP/RAP', 'R&B/SOUL', 'K-POP' (недопустимые значения возвращают полный список допустимых значений в ошибке). Список обновляется ежедневно - получайте свежие данные, а не переиспользуйте старые id для отображения. Неизвестный countryCode возвращает пустой список. Если API возвращает tiktokMusic.requiresBusinessApi, аккаунту TikTok требуется однократное переподключение.

Перечисляет звуки TikTok

Параметры
  • countryCodestring

    2-letter uppercase country code (default US). Unknown codes return an empty list.

  • dateRangeenum

    Trending window (default 7DAY)

  • genrestring

    Raw TikTok genre value, e.g. 'POP', 'HIP_HOP/RAP', 'R&B/SOUL', 'K-POP'. Omit for all genres; an invalid value returns the full valid list in the error.

  • socialMediaIdstringобязательный

    TikTok account id (from list_accounts)

list_youtube_playlistsтолько чтение

Выводит список плейлистов YouTube для подключенной учетной записи YouTube (передайте её socialMediaId). Используйте поле playlistId возвращенного плейлиста как controls.youtubePlaylistId в create_posts.

Выводит список плейлистов YouTube.

Параметры
  • socialMediaIdstringобязательный

    YouTube account id (from list_accounts)

mark_inbox_conversation_read

Помечает один разговор как прочитанный (обнуляет его unreadCount). Делает это после показа комментариев к разговору пользователю. Внутренняя функция PostFast — на платформе ничего не меняется.

Отмечает входящий разговор прочитанным.

Параметры
  • conversationIdstringобязательный

    Conversation id (from list_inbox_conversations)

reply_to_inbox_itemвнешний мир

Отвечай публично ПОД конкретным комментарием — передавай идентификатор элемента комментария (из list_inbox_items), а не идентификатор беседы. ПЕРЕД ответом проверяй canReply и maxReplyLength беседы и соблюдай их; ограничения зависят от платформы (TikTok 150, Instagram 2 200, Facebook 8 000, Threads 500 символов), но авторитетны поля, вычисленные сервером — никогда не предполагай. Ошибки возвращают коды inbox.* (например, replyTooLong, replyNotSupported).

Ответить на входящий комментарий

Параметры
  • itemIdstringобязательный

    The comment item id to reply under (from list_inbox_items)

  • textstringобязательный

    Reply text. Must fit the conversation's maxReplyLength.

search_placesтолько чтениевнешний мир

Ищет место для геотега поста. Принимает произвольный текст (минимум 2 символа, например, название заведения или адрес); возвращает соответствующие места, каждое с идентификатором, который работает КАК controls.facebookPlaceId (посты в ленте Facebook), ТАК И controls.instagramLocationId (одиночные медиа-посты Instagram). Возвращает только страницы Facebook, содержащие данные о местоположении.

Search Places

Параметры
  • querystringобязательный

    Place search text, min 2 characters (e.g. "eiffel tower")

send_inbox_private_replyвнешний мир

Instagram: отправляет один частный ответ на комментарий, он приходит как личное сообщение автору комментария и может попасть в папку Message Requests. Разрешён один раз на комментарий, в течение 7 дней после комментария, до 1000 байт (эмодзи и нелатинский текст занимают несколько байт, примерно 1000 символов, меньше с эмодзи). Сначала проверьте canPrivateReply элемента (из list_inbox_items). Повторная попытка на том же комментарии завершается ошибкой inbox.privateReplyAlreadySent; другие ошибки: privateReplyWindowExpired и privateReplyNotSupported.

Отправляет приватный ответ в Instagram.

Параметры
  • itemIdstringобязательный

    The Instagram comment item id to reply privately to (canPrivateReply must be true)

  • textstringобязательный

    Private reply text (max 1,000 bytes)

set_inbox_conversation_status

Триаджирует разговор: устанавливает его статус OPEN, SNOOZED или CLOSED. Внутреннее для PostFast — на платформе ничего не меняется.

Устанавливает статус беседы во входящих

Параметры
  • conversationIdstringобязательный

    Conversation id (from list_inbox_conversations)

  • statusenumобязательный

    New conversation status

set_inbox_item_stateвнешний мир

Модерирует комментарий на платформе: HIDE скрывает его от публики, UNHIDE восстанавливает, DELETE удаляет комментарий на платформе - отмена невозможна. Hide/unhide работают на TikTok, Instagram, Facebook и Threads; DELETE не поддерживается на Threads (inbox.deleteNotSupported). Изменения состояния, сделанные на самой платформе, автоматически синхронизируются обратно с папкой входящих.

Модерация входящего комментария

Параметры
  • actionenumобязательный

    HIDE, UNHIDE, or DELETE (DELETE is irreversible)

  • itemIdstringобязательный

    The comment item id (from list_inbox_items)

upload_mediaвнешний мир

Загружает локальный файл в PostFast и возвращает медиа-ключ для использования в create_posts. Выполняет полный цикл: определяет тип контента, получает подписанный URL, загружает файл и возвращает ключ и тип.

Загружает медиа.

Параметры
  • filePathstringобязательный

    Absolute path to the local file (e.g. /Users/me/photo.jpg)

Похожие MCP-сервера

MendleM/Pipepost

MendleM/Pipepost

Pipepost — MCP сервер для публикации контента из Claude Code. Выполняет SEO-аудит и кросс-публикует статьи на популярные CMS. Генерирует посты для соцсетей и собирает аналитику. Работает локально, ...

TypeScript5
posteverywhere/mcp

posteverywhere/mcp

Планируйте посты в соцсетях (Instagram, TikTok, YouTube, LinkedIn, Facebook, X, Threads, Pinterest) через AI-агенты. Работает с Claude, ChatGPT, Cursor. Для маркетологов и разработчиков.

TypeScript3
shensi8312/blogburst-mcp-server

shensi8312/blogburst-mcp-server

MCP сервер для AI маркетинга в соцсетях. Через чат генерируйте контент, управляйте автопостингом и публикуйте на 9 платформах. Полезен маркетологам и контент-менеджерам.

JavaScript7
AutomateLab-tech/content-distribution-mcp

AutomateLab-tech/content-distribution-mcp

MCP сервер content-distribution-mcp публикует один контент на 8+ платформах (Reddit, LinkedIn, Bluesky и др.) с адаптацией под каждую. Учитывает лимиты, идемпотентность, правила сообществ. Полезен для контент-мейкеров и AI-агентов.

TypeScript5
Citedy/citedy-seo-agent

Citedy/citedy-seo-agent

Citedy SEO Agent превращает AI-агента в SEO-команду: от трендов до статей, иллюстраций, озвучивания и вирусных видео. Полезен разработчикам и маркетологам для автоматизации контент-маркетинга.

JavaScript19
ysalitrynskyi/opn-mcp

ysalitrynskyi/opn-mcp

MCP сервер для opn.onl — open-source сокращатель ссылок с самозапуском. AI-ассистенты (Claude, Cursor) через него сокращают ссылки, смотрят аналитику, создают QR-коды и управляют ссылками на естественном языке. Полезен для self-hosted сервиса коротких ссылок.

TypeScript2
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин