Довідник Bridge

Технічний довідник по графу Bridge: вузли, порти, конвеєри та ендпоінт. Покрокову інструкцію дивіться на сторінці Огляд Bridge.

Ендпоінт

https://mcp.fainflow.com/mcp/<bridgeId>
ШляхЩо віддає
/mcpВашу повну федерацію — усі інструменти з усіх підключень.
/mcp/<bridgeId>Один Bridge — його федеровані інструменти плюс його конвеєри.

Обидва говорять MCP через Streamable HTTP. Автентифікація — OAuth на краю (ваш логін Fainflow); Bridge автоматично визначає ваш акаунт і обмежує кожен виклик вашими підключеннями та конвеєрами.

Аудит

Кожен tools/call, що доходить до обробника, записується в append-only журнал аудиту (перелік — initialize, tools/list — ні). Кожен запис містить:

ПолеЗначення
actionmcp.tool_call або mcp.pipeline_call
actorавтентифікований користувач Fainflow (id + email)
resourceназва інструмента / конвеєра
scopefederation або bridge:<id>
mutatingtrue для пишучих інструментів (create/update/delete/merge/push/…)
argsлише ідентифікатори (owner, repo, path, query, cloudId, …); інші значення зводяться до типу/довжини, секрети відкидаються — вільний текст не зберігається
statussuccess / failure + тривалість

Журнал append-only (без update/delete), видно в розділі Audit Logs у кабінеті. Логування fire-and-forget — не додає затримки й не ламає виклик.

Типи вузлів

ТипРольПорти
inputТочка входу конвеєра.Вихідні порти = іменовані аргументи, які передає викликач.
toolОдин виклик інструмента підключення.Входи = аргументи інструмента, вихід = результат. Фіксовані схемою.
mergeFan-in — об'єднати входи в один об'єкт.Входи, які ви додаєте; один спільний вихід.
outputТочка виходу конвеєра.Вхідні порти = те, що отримує викликач.
transformЗарезервовано для перетворення значень між вузлами.

Правила портів

  • Порти додаються/видаляються на вузлах input (аргументи) та output / merge (результати) в інспекторі.
  • Порти вузла tool фіксовані — вони беруться зі вхідної схеми інструмента.
  • Зв'язок з'єднує вихідний порт одного вузла → вхідний порт іншого. Граф має бути ациклічним; цикл відхиляється під час малювання й під час збереження.

Конвеєри

Конвеєр — це іменований підграф: inputNode, outputNode і всі вузли між ними, від яких залежить вихід.

{
  "id": "p1",
  "name": "get_repo_context",   // що викликає агент
  "description": "…",
  "inputNode": "in1",            // його вихідні порти стають аргументами виклику
  "outputNode": "out1"           // його вхідні порти стають результатом
}

Під час виклику Bridge обмежує виконання вузлами, від яких насправді залежить outputNode, і запускає їх.

Виконання

  • Порядок виводиться з графа. Вузли запускаються хвилями залежностей (топологічні рівні); вузли однієї хвилі виконуються паралельно.
  • Кожен виклик інструмента відкриває нову сесію, викликає інструмент і закриває її.
  • Входи, що дають undefined, відкидаються; аргументи виклику вузла — { ...config, ...inputs }.
  • Fail-fast. Якщо будь-який вузол падає, виконання зупиняється з node <id> (<tool>) failed.
  • Тайм-аут на виклик: 30с. Максимум вузлів на запуск: 50.

Форма графа

Bridge зберігає один об'єкт graph:

{
  "version": 1,
  "nodes": [
    {
      "id": "in1",
      "kind": "input",
      "outputs": ["query"],
      "position": { "x": 280, "y": 40 },
      "label": "Input"
    },
    {
      "id": "t1",
      "kind": "tool",
      "connectionId": "<connId>",
      "tool": "search_repositories",
      "inputs": ["query"],
      "outputs": ["result"]
    },
    { "id": "out1", "kind": "output", "inputs": ["ctx"] }
  ],
  "edges": [
    { "id": "e1", "from": { "node": "in1", "port": "query" },
                  "to":   { "node": "t1",  "port": "query" } },
    { "id": "e2", "from": { "node": "t1",  "port": "result" },
                  "to":   { "node": "out1","port": "ctx" } }
  ],
  "pipelines": [
    { "id": "p1", "name": "find", "inputNode": "in1", "outputNode": "out1" }
  ]
}

Валідація

Збережений граф відхиляється, якщо в ньому є:

  • неправильна форма або дублікати id вузлів/зв'язків;
  • зв'язок чи конвеєр, що посилається на відсутній вузол;
  • ім'я інструмента, що не відповідає ^[a-zA-Z][a-zA-Z0-9_-]{0,63}$;
  • конвеєр, межі якого не є коректними вузлами input/output;
  • цикл.

Ліміти

ЛімітЗначення
Вузлів на запуск50
Тайм-аут на виклик інструмента30с
Шаблон імені інструмента^[a-zA-Z][a-zA-Z0-9_-]{0,63}$
Графмає бути ациклічним