57 lines
3.1 KiB
Markdown
57 lines
3.1 KiB
Markdown
# :mcp-bridge
|
|
|
|
Мост между протоколом [MCP](https://modelcontextprotocol.io/) (Model Context Protocol)
|
|
и `MutableAgent` из `:agent-api`. Превращает удалённые MCP-серверы в набор
|
|
тулов, доступных агенту через стандартный install-механизм.
|
|
|
|
## Что это и зачем
|
|
|
|
`McpRegistry` умеет подключаться к N MCP-серверам, опрашивать их
|
|
`tools/list` и держать в памяти именованные тулы (`NamedTool`). Но
|
|
`McpRegistry` сам по себе ничего не знает про агента — это просто реестр
|
|
плюс JSON-RPC-клиент.
|
|
|
|
`McpBridgeComponent` — адаптер: реализует `pw.binom.agentik.agent.Component`
|
|
и при `install(MutableAgent)` добавляет в `toolProviders` провайдер, который
|
|
возвращает текущий снимок тулов из реестра. При `uninstall` — снимает.
|
|
|
|
## Использование
|
|
|
|
```kotlin
|
|
val mcpRegistry = McpRegistry.fromConfig(config.mcp)
|
|
val agent = ChatAgent(...)
|
|
.install(McpBridgeComponent(mcpRegistry))
|
|
```
|
|
|
|
После `install` MCP-тулы доступны агенту через стандартный
|
|
`toolsetDispatch.baseDispatcher` — вызываются точно так же, как и встроенные
|
|
(skill / memory / enable_toolset). Никаких особых путей.
|
|
|
|
На каждом tool-call `collectTools()` (внутри ChatAgent) перебирает все
|
|
`toolProviders` и собирает актуальный список — добавление/удаление компонента
|
|
видно немедленно, без рестарта агента.
|
|
|
|
## Структура
|
|
|
|
- `McpRegistry` — JSON-RPC клиент, поддерживает несколько MCP-серверов,
|
|
параллельный опрос `tools/list` при старте, reconnect.
|
|
- `McpBridgeComponent` — адаптер к `:agent-api`. Реализует `Component`;
|
|
держит ссылку на `McpRegistry`; на `install` пушит `McpToolProvider`
|
|
в `MutableAgent.toolProviders`, на `uninstall` снимает.
|
|
- `McpToolProvider` — внутренний `ToolProvider`, возвращает
|
|
`registry.namedTools`. Пустой по сути адаптер, нужен только чтобы дать
|
|
имя для удаления (removeAll-логика).
|
|
|
|
## Зависимости
|
|
|
|
- `:agent-api` — `MutableAgent`, `Component`, `ToolProvider`.
|
|
- `:agent-toolsets` — `NamedTool`, `LiteTool`.
|
|
- `:outbox-api` — для live-событий (connection-loss / reconnect notifications).
|
|
|
|
## НЕ включено
|
|
|
|
- HTTP/SSE транспорт к MCP-серверам (только stdio/JSON-RPC сейчас; HTTP-вариант
|
|
доделывается).
|
|
- Конвертация `McpResource` → `MemoryNote` (отдельная фича, не реализована).
|
|
- Авторизация OAuth (MCP 2025-06-15 draft) — пока нет.
|