Papera ещё в разработке. Что-то может измениться или перестать работать, пока мы её строим.
MCPСборка процесса через MCP

Сборка процесса через MCP

Читайте граф процесса, добавляйте узлы, связывайте их, прикрепляйте рендереры и трансформеры и составляйте посты для соцсетей из своего клиента ИИ.

Проект содержит один или несколько процессов, а процесс это граф узлов: узлы контента, выводы рендерера (презентация, документ, статья блога, пост в соцсети), трансформеры, подключённые аккаунты, темы и триггеры. Это тот же граф, который вы видите на холсте процесса в приложении.

Инструменты на этой странице и есть этот холст, доступный из вашего клиента. Каждый из них называет процесс, с которым работает, по идентификатору проекта и идентификатору процесса. Оба вы получаете из save_project, create_workflow или из адреса проекта.

Чтение графа

  • get_workflow возвращает форму графа: все узлы и все связи. Содержимое узлов не включается, поэтому вызывать его между шагами дёшево. Начинайте отсюда, если процесс собирали не в этом разговоре.
  • get_node_output возвращает содержимое одного узла: то, что создал рендерер, или разрешённый текст узла контента. Для поста в соцсети передайте platform, чтобы увидеть версию для этой площадки вместо общей версии по умолчанию. То, что слишком велико, чтобы вернуть целиком, приходит с пометкой, а не молча обрезанным.

Добавление и связывание узлов

  • create_workflow добавляет в проект новый пустой процесс и возвращает его идентификатор. С него вы начинаете, когда собираете процесс с нуля.

  • add_node размещает один узел и возвращает его идентификатор. Виды такие:

    ВидПримечания
    contentУзел контента. Передайте title, а markdown чтобы заполнить его текстом.
    outputВывод рендерера. Передайте renderer_id: slides, document, blog или social-post.
    transformerОтбирает и переупорядочивает разделы из того, что в него входит.
    accountСсылается на аккаунт, подключённый в приложении. Передайте его connection_id.
    triggerЗапускает публикацию для постов, до которых дотягивается.
    cacheДержит значение между шагом, который его создаёт, и шагом, который его использует.
    themeОбщее оформление, с которым выводятся результаты. Передайте theme.

    Можно также передать position, чтобы узел встал в разумном месте, когда вы откроете холст.

  • connect_nodes проводит связь между двумя узлами. Papera понимает смысл связи по её концам: контент к выводу прикрепляет источник, пост к аккаунту отправляет пост туда, триггер к узлу заставляет триггер его запускать. Недопустимая связь отклоняется с причиной, например «у этого вывода уже есть источник контента».

Сокращённые пути

Они экономят обращения. Они не делают ничего, чего нельзя сделать через add_node и connect_nodes, и возвращают то, что создал новый узел, чтобы вы сразу могли это проверить.

  • attach_renderer создаёт вывод над узлом контента или трансформером и связывает его одним вызовом. Так контент становится презентацией, документом, статьёй блога или постом в соцсети.
  • attach_transformer создаёт трансформер над источником и подключает его. Трансформер отбирает и переупорядочивает разделы, которые берёт сверху по графу. Без section_ids он пропускает всё насквозь. Используйте его, когда вывод должен показывать часть узла контента, а не весь.
  • target_accounts отправляет один пост сразу в несколько аккаунтов. Каждый аккаунт обрабатывается отдельно, поэтому те, что не могут принять пост, сообщают причину, а остальные всё равно подключаются.
  • edit_post задаёт содержимое поста.

Составление поста для соцсети

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

edit_post принимает:

  • default_blocks: общее содержимое как упорядоченный список блоков контента.
  • variants: перекрытия по идентификатору площадки (instagram, bluesky, telegram, linkedin), каждое из которых может задавать caption, hashtags или media.
{
  "default_blocks": [
    {
      "id": "b1",
      "type": "paragraph",
      "content": [{ "type": "text", "text": "Our Q3 numbers are in." }]
    }
  ],
  "variants": {
    "bluesky": { "caption": "Q3 is in. Three charts, one takeaway.", "hashtags": ["q3"] },
    "instagram": { "media": [{ "blockId": "b2", "src": "https://example.com/chart.png" }] }
  }
}

Хэштеги пишутся без ведущего #. Медиа должны быть адресами http(s), потому что пути загрузки файлов через MCP нет: загружайте изображения в приложении или указывайте на уже публичный адрес.

Подключённые аккаунты

Подключение аккаунта соцсети всегда происходит в приложении и никогда через MCP. Узел account ссылается на подключение, которое вы там уже сделали, поэтому сначала подключите аккаунт (см. Подключение аккаунта Bluesky или Подключение канала Telegram), а затем добавьте для него узел с его connection_id.

Что дальше

Процесс с постом и аккаунтами готов к выходу наружу. См. Публикация и планирование или пройдите весь сценарий по статье Пример: один пост во все аккаунты.