AutomateLab-tech/content-distribution-mcp

AutomateLab-tech/content-distribution-mcp

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

content-distribution-mcp

Publish your content everywhere—without rewriting for every platform.

A MCP server that distributes a single piece of content across 8+ channels (DEV.to, Hashnode, GitHub Discussions, Reddit, Bluesky, LinkedIn, Medium, Twitter) with automatic platform-specific adaptation, idempotent publishing, per-community anti-spam rules, and centralized state management.

The Problem It Solves

Creating and publishing content at scale is friction-heavy:

  • Different formats: Reddit strips formatting, Twitter has character limits, DEV.to supports embeds and rich media. Each needs customized copy.
  • Platform rules: Subreddits enforce cooldowns and flair requirements. Communities have posting patterns and automoderator gates. LinkedIn suppresses external links.
  • State chaos: Which posts went live where? What if a publish fails halfway? Did that Reddit post get auto-removed by spam filters?

This MCP handles distribution complexity. Write your core message once, generate platform-specific variants, publish everywhere safely.

channel_hintsтолько чтениеидемпотентный

Возвращает статические метаданные для каждого канала: ограничения на количество символов, флаги поддержки Markdown, словарь тегов и правила размещения CTA. Побочные эффекты: только чтение; никаких внешних HTTP-вызовов; аутентификация не требуется. Полностью детерминировано — возвращает константы адаптера на этапе компиляции. Используйте channel_hints до составления тела варианта, чтобы понять ограничения канала; используйте post_publish или post_schedule, как только у вас есть корректный вариант.

Static per-channel metadata

Возвращает статические метаданные для каждого канала: ограничения на количество символов, флаги поддержки Markdown, словарь тегов и правила размещения CTA. Побочные эффекты: только чтение; никаких внешних HTTP-вызовов; аутентификация не требуется. Полностью детерминировано — возвращает константы адаптера на этапе компиляции. Используйте channel_hints до составления тела варианта, чтобы понять ограничения канала; используйте post_publish или post_schedule, как только у вас есть корректный вариант.

Параметры

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

    Channel platform name, e.g. 'devto', 'reddit', 'hashnode', 'bluesky'. Use the platform prefix only, not the full 'platform:account' form.

post_drainидемпотентныйвнешний мир

Запускает все запланированные публикации, срок которых наступил или уже прошёл. Побочные эффекты: выполняет внешние HTTP-запросы для каждого подлежащего публикации элемента; записывает результаты в YAML backend. Идемпотентность: уже опубликованные пары (content.id, channel) пропускаются; если нет подлежащих публикации элементов, ничего не делает. Безопасно вызывать из cron. Используйте post_drain по расписанию для очистки очереди; используйте post_publish или post_schedule для добавления нового контента; используйте post_status для просмотра результатов после выполнения drain.

Fire all scheduled posts due now

Запускает все запланированные публикации, срок которых наступил или уже прошёл. Побочные эффекты: выполняет внешние HTTP-запросы для каждого подлежащего публикации элемента; записывает результаты в YAML backend. Идемпотентность: уже опубликованные пары (content.id, channel) пропускаются; если нет подлежащих публикации элементов, ничего не делает. Безопасно вызывать из cron. Используйте post_drain по расписанию для очистки очереди; используйте post_publish или post_schedule для добавления нового контента; используйте post_status для просмотра результатов после выполнения drain.

Параметры

  • nowstring

    ISO-8601 datetime boundary, e.g. '2026-05-21T09:00:00Z'; defaults to current UTC time when omitted.

post_publishидемпотентныйвнешний мир

Опубликовать один или несколько вариантов каналов немедленно. Побочные эффекты: выполняет внешние HTTP-запросы к каждой платформе канала; записывает состояние публикации в локальный бэкенд YAML; требует действительных учётных данных в указанном профиле. Идемпотентно по (content.id, channel) - повторный запуск с теми же идентификаторами возвращает кэшированное состояние без повторной публикации. Используйте post_publish для немедленной доставки; используйте post_schedule, когда любому варианту требуется будущий schedule_at; используйте post_drain для очистки ранее созданной очереди.

Publish variants to one or more channels immediately

Опубликовать один или несколько вариантов каналов немедленно. Побочные эффекты: выполняет внешние HTTP-запросы к каждой платформе канала; записывает состояние публикации в локальный бэкенд YAML; требует действительных учётных данных в указанном профиле. Идемпотентно по (content.id, channel) - повторный запуск с теми же идентификаторами возвращает кэшированное состояние без повторной публикации. Используйте post_publish для немедленной доставки; используйте post_schedule, когда любому варианту требуется будущий schedule_at; используйте post_drain для очистки ранее созданной очереди.

Параметры

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

    Content piece to publish: stable id (idempotency key), title, body_md, tags, and optional cover_image / canonical_url / cta_block / author fields. The id + channel pair is the deduplication key — the same id will not be re-posted.

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

    One or more channel-specific publish targets. Each entry specifies the channel slug (e.g. 'devto:main', 'reddit:ClaudeAI'), the adapted title and body, optional schedule_at for future delivery, and channel extras such as flair. Use channel_hints to check per-channel constraints before composing.

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

    Name of the distribution profile (credentials store). Use profile_list to discover available names.

post_scheduleидемпотентныйвнешний мир

Ставит в очередь варианты каналов с schedule_at для будущей публикации; варианты без schedule_at публикуются сразу. Побочные эффекты: записывает записи в локальное YAML-хранилище расписаний; делает внешние HTTP-запросы для любых немедленно опубликованных вариантов; требует учётные данные в указанном профиле. Идемпотентен на (content.id, channel). Используйте post_schedule, когда любому варианту нужно время будущей публикации; используйте post_publish для немедленной доставки всего; используйте post_drain, чтобы обработать запланированную очередь позже.

Schedule variants for future publishing

Ставит в очередь варианты каналов с schedule_at для будущей публикации; варианты без schedule_at публикуются сразу. Побочные эффекты: записывает записи в локальное YAML-хранилище расписаний; делает внешние HTTP-запросы для любых немедленно опубликованных вариантов; требует учётные данные в указанном профиле. Идемпотентен на (content.id, channel). Используйте post_schedule, когда любому варианту нужно время будущей публикации; используйте post_publish для немедленной доставки всего; используйте post_drain, чтобы обработать запланированную очередь позже.

Параметры

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

    Content piece to publish: stable id (idempotency key), title, body_md, tags, and optional cover_image / canonical_url / cta_block / author fields. The id + channel pair is the deduplication key — the same id will not be re-posted.

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

    One or more channel-specific publish targets. Each entry specifies the channel slug, the adapted title and body, and optionally schedule_at (ISO-8601 with timezone) for future delivery. Variants without schedule_at are published immediately; variants with schedule_at are queued for post_drain. Use channel_hints to check per-channel constraints.

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

    Name of the distribution profile (credentials store). Use profile_list to discover available names.

post_statusтолько чтениеидемпотентный

Возвращает статус публикации для материалов. Фильтрует по content_id, channel или обоим; если ничего не указано, возвращает все записи. Побочные эффекты: только чтение, без внешних HTTP-вызовов, без авторизации. Детерминирован при неизменном состоянии бэкенда. Используйте post_status, чтобы проверить, что опубликовано, поставлено в очередь или произошла ошибка; используйте post_publish, post_schedule или post_drain, чтобы изменить состояние.

Read publish state for content pieces

Возвращает статус публикации для материалов. Фильтрует по content_id, channel или обоим; если ничего не указано, возвращает все записи. Побочные эффекты: только чтение, без внешних HTTP-вызовов, без авторизации. Детерминирован при неизменном состоянии бэкенда. Используйте post_status, чтобы проверить, что опубликовано, поставлено в очередь или произошла ошибка; используйте post_publish, post_schedule или post_drain, чтобы изменить состояние.

Параметры

  • content_idstring

    Filter to a specific content piece by its stable ID; omit to return state for all content.

  • channelstring

    Filter to a specific channel slug, e.g. 'devto', 'reddit:ClaudeAI'; omit to return state for all channels.

post_unpublishвнешний мир

Удаляет опубликованный пост на целевой платформе в режиме best-effort. Побочные эффекты: выполняет внешний HTTP DELETE или запрос на обновление; DEV.to устанавливает published=false (мягкое удаление); платформы без API удаления возвращают success=false без ошибки. Неидемпотентный: вызов уже удалённого URL может вернуть ошибку 404 платформы. Используйте post_unpublish, чтобы отозвать опубликованный пост; сначала используйте post_status для получения live_url; используйте post_publish, чтобы опубликовать заново после отзыва.

Retract a published post (best-effort)

Удаляет опубликованный пост на целевой платформе в режиме best-effort. Побочные эффекты: выполняет внешний HTTP DELETE или запрос на обновление; DEV.to устанавливает published=false (мягкое удаление); платформы без API удаления возвращают success=false без ошибки. Неидемпотентный: вызов уже удалённого URL может вернуть ошибку 404 платформы. Используйте post_unpublish, чтобы отозвать опубликованный пост; сначала используйте post_status для получения live_url; используйте post_publish, чтобы опубликовать заново после отзыва.

Параметры

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

    URL of the live published post to retract, e.g. 'https://dev.to/user/post-slug'.

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

    Channel slug the post was published to, e.g. 'devto', 'hashnode', 'reddit:ClaudeAI'.

profile_listтолько чтениеидемпотентный

Возвращает все имена профилей распространения, настроенных в YAML backend. Побочные эффекты: только чтение; без внешних HTTP-вызовов. Детерминировано при заданном состоянии backend. Используйте profile_list, чтобы узнать доступные профили перед вызовом post_publish, post_schedule или subreddit_list; затем передайте выбранное имя как profile_name.

List configured distribution profiles

Возвращает все имена профилей распространения, настроенных в YAML backend. Побочные эффекты: только чтение; без внешних HTTP-вызовов. Детерминировано при заданном состоянии backend. Используйте profile_list, чтобы узнать доступные профили перед вызовом post_publish, post_schedule или subreddit_list; затем передайте выбранное имя как profile_name.

Параметры

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

subreddit_listтолько чтениеидемпотентный

Возвращает все subreddits из Subreddit Catalog с окнами ожидания (cooldown windows), словарём flair (flair vocabulary) и метаданными последнего поста. Опционально фильтрует по subreddits, разрешённым указанным профилем. Побочные эффекты: только чтение; без внешних HTTP-вызовов. Детерминировано при данном состоянии бэкенда. Используй subreddit_list, чтобы выбрать subreddit и получить ID flair перед составлением варианта канала reddit:; передавай flair в variant.extras.flair.

List Subreddit Catalog entries

Возвращает все subreddits из Subreddit Catalog с окнами ожидания (cooldown windows), словарём flair (flair vocabulary) и метаданными последнего поста. Опционально фильтрует по subreddits, разрешённым указанным профилем. Побочные эффекты: только чтение; без внешних HTTP-вызовов. Детерминировано при данном состоянии бэкенда. Используй subreddit_list, чтобы выбрать subreddit и получить ID flair перед составлением варианта канала reddit:; передавай flair в variant.extras.flair.

Параметры

  • profile_namestring

    Optional profile name to filter subreddits to those allowed by that profile; omit to return the full catalog.

Другие проверенные MCP-сервера

Aiven-Open/mcp-aiven

Aiven-Open/mcp-aiven

официальный

MCP сервер для облачной платформы Aiven: управляйте PostgreSQL, Apache Kafka, приложениями и другими сервисами прямо из AI-ассистентов. Полезен разработчикам и DevOps для автоматизации облачной инфраструктуры.

TypeScript26
vercel/next-devtools-mcp

vercel/next-devtools-mcp

официальный

MCP сервер для разработки Next.js: предоставляет AI-ассистентам доступ к runtime диагностике живого сервера (ошибки, маршруты, логи), автоматизации (апгрейд до 16, Cache Components) и документации....

TypeScript789
LaurieWired/GhidraMCP

LaurieWired/GhidraMCP

GhidraMCP — MCP-сервер для Ghidra, подключающий LLM к реверс-инжинирингу. Декомпилирует код, переименовывает методы, анализирует бинарники через MCP-клиенты. Ускоряет анализ вредоносного ПО.

Java9533
lharries/whatsapp-mcp

lharries/whatsapp-mcp

MCP-сервер для личного WhatsApp: читает сообщения (текст, медиа), ищет контакты, отправляет сообщения и файлы через Claude или Cursor. Подключается к вашему аккаунту через WhatsApp Web, всё хранится локально.

Go5914
PSPDFKit/nutrient-dws-mcp-server

PSPDFKit/nutrient-dws-mcp-server

официальный

MCP-сервер для подключения AI-ассистентов к Nutrient DWS API: создавайте, редактируйте, конвертируйте и подписывайте документы через естественный язык. Полезен разработчикам, внедряющим документооб...

TypeScript68
dagger/container-use

dagger/container-use

официальный

MCP сервер container-use даёт агентам (Claude Code, Cursor) работать параллельно в изолированных контейнерах - безопасно и без конфликтов. Полезен разработчикам: видит лог действий и даёт доступ к ...

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

Лука Никитин