Skip to Content

Операции MCP Server

В этом разделе описано, как AI-агент взаимодействует с RPA-проектами Primo RPA Orchestrator через MCP Server. Операции приведены в последовательности типового сценария: подключить агента → получить доступные проекты → вызвать проект → получить результат.

Перед началом. MCP Server должен быть установлен и доступен по HTTPS. Администратор должен настроить API-ключ, учётную запись Оркестратора и разрешить доступ к нужным проектам. См. «Установка и настройка MCP Server».

1. Подключение AI-агента

MCP Server принимает запросы по одному адресу:

POST https://orchestrator.example.local:44392/mcp Authorization: Bearer <API-ключ> Content-Type: application/json

orchestrator.example.local:44392 – пример адреса Nginx Оркестратора. Подставьте фактический адрес своего сервера. Ключ берётся из параметра mcp.apiKeys в настройках MCP Server.

Клиент должен поддерживать транспорт Streamable HTTP. При ручной проверке можно отправить JSON-RPC-запрос через Swagger или HTTP-клиент.

Проверка подключения

Отправьте запрос:

{ "jsonrpc": "2.0", "id": 1, "method": "ping" }

Ожидаемый ответ:

{ "jsonrpc": "2.0", "id": 1, "result": {} }

Что означает id: это идентификатор конкретного JSON-RPC-запроса, который клиент назначает самостоятельно для сопоставления запроса с ответом. Это не идентификатор проекта, робота или инструмента. При вызове проекта его имя указывается отдельно в params.name.

Для проверки через Swagger откройте https://orchestrator.example.local:44392/mcp/swagger/index.html, нажмите Authorize и введите API-ключ без слова Bearer. Затем выберите McpEndpoint → POST /mcp → Try it out и отправьте приведённый запрос.

2. Получение списка доступных проектов

Задача: определить, какие RPA-проекты AI-агент может запускать.

Метод MCP: tools/list.

Адрес HTTP-запроса: POST /mcp (отдельного HTTP-адреса /tools/list нет).

Тело запроса:

{ "jsonrpc": "2.0", "id": 2, "method": "tools/list" }

Ответ содержит массив result.tools. Каждый элемент описывает один доступный RPA-проект:

ПолеНазначение
nameИмя инструмента. Используется в params.name при вызове tools/call. Не обязательно совпадает с названием проекта буквально.
descriptionОписание проекта или автоматически сформированный текст.
inputSchemaСхема входных параметров проекта и служебных параметров запуска.
inputSchema.propertiesДопустимые параметры и их типы.
inputSchema.requiredОбязательные параметры.

Почему видны не все проекты

По умолчанию MCP Server выбирает активные версии проектов с тегом MCP. Значение тега задаётся параметром catalog.orchestratorSource.projectTag в конфигурации сервера.

Чтобы добавить проект в список доступных агенту, назначьте проекту в Оркестраторе тег MCP (либо другой тег, указанный в конфигурации). Чтобы скрыть проект, снимите тег. Если параметр projectTag пуст, отображаются все активные проекты. Список обновляется при каждом новом вызове tools/list, перезапуск службы не требуется.

Если настроено catalog.orchestratorSource.requireAssetNameParam: true, проекты без переменной для возврата результата дополнительно исключаются из списка инструментов.

Как формируется имя инструмента

Имя создаётся из названия проекта: приводится к нижнему регистру, кириллица транслитерируется, недопустимые символы заменяются подчёркиванием. Максимальная длина – 64 символа. При совпадениях добавляются числовые суффиксы.

Для вызова используйте точное значение name из ответа tools/list, а не предполагаемое имя проекта.

3. Подготовка RPA-проекта к запуску через MCP

Чтобы агент мог получить результат выполнения, подготовьте проект:

  1. В Оркестраторе откройте нужный RPA-проект и назначьте ему тег MCP.
  2. Добавьте входную переменную In с именем assetResultName (если администратор не изменил параметр catalog.orchestratorSource.assetNameParam).
  3. Убедитесь, что в Main.ltw включён приём аргументов: <UseArgs>true</UseArgs>.
  4. В конце проекта добавьте активность Set asset. Она должна записывать строковый результат в глобальный ассет, имя которого робот получает через переменную assetResultName.
  5. При необходимости задайте входные аргументы проекта, их описания, значения по умолчанию и ограничения в Оркестраторе.

Имя ассета создаёт MCP Server отдельно для каждого вызова. Передавать assetResultName вручную в tools/call не требуется.

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

В Оркестраторе откройте RPA-проекты → Все RPA-проекты → Аргументы (In, Out, InOut), задайте ограничения для аргументов In и InOut, затем нажмите Применить и Сохранить.

Поддерживаются обязательность, допустимые значения, числовые минимумы и максимумы, ограничения длины строки и регулярные выражения. Ограничения дат в inputSchema не переносятся; множественный выбор для аргументов агента не поддерживается.

4. Запуск RPA-проекта

Задача: инициировать выполнение проекта роботом и получить результат.

Метод MCP: tools/call.

Адрес HTTP-запроса: POST /mcp.

Тело запроса (пример):

{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "calc_input_5", "arguments": { "in_Number": "\"7\"" } } }

Здесь id: 3 – идентификатор JSON-RPC-запроса, calc_input_5 – имя инструмента из tools/list, а in_Number – входной параметр проекта.

Важно о строковых значениях: в текущей реализации аргументы робота вычисляются как выражения C#. Поэтому строку требуется передавать как строковый литерал C#, помещённый в JSON-строку: "\"7\"". Например, для строки hello world укажите "\"hello world\"". Числовое выражение можно передать строкой "100". Логическое значение передавайте строкой "true", а не JSON-значением true.

Аргументы проверяются по inputSchema до запуска робота. Необязательные аргументы, не указанные в запросе, получают значения по умолчанию из Оркестратора.

4.1. Запуск через очередь проектов

Это режим по умолчанию. Вызовите инструмент без параметра machineIp. Оркестратор поставит проект в очередь в соответствии с её стратегией. Когда проект будет выбран роботом, робот выполнит его, после чего MCP Server вернёт результат.

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

4.2. Запуск на конкретной машине

Чтобы выполнить проект на определённой машине, передайте machineIp:

{ "jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": { "name": "calc_input_5", "arguments": { "in_Number": "\"7\"", "machineIp": "10.0.0.15" } } }

Оркестратор выберет свободного робота на указанной машине. Если подходящего робота нет, запуск может быть отклонён.

4.3. Скачивание проекта без запуска

Чтобы скачать проект на машину робота, передайте machineIp и downloadOnly: true. Дополнительно можно указать projectPath – целевую папку.

{ "jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": { "name": "calc_input_5", "arguments": { "machineIp": "10.0.0.15", "downloadOnly": true, "projectPath": "C:\\RPA\\Projects" } } }

Проект будет скачан, но робот не запустится. Ответ подтверждает передачу команды на скачивание, а не результат выполнения робота. Если не указать projectPath, используется папка проектов робота.

Без machineIp параметр downloadOnly не применяется: проект будет отправлен в очередь запуска. projectPath имеет значение только при скачивании.

5. Получение результата выполнения

При обычном запуске MCP Server:

  1. Проверяет аргументы инструмента.
  2. Создаёт глобальный ассет с уникальным именем вида mcp-<GUID>.
  3. Передаёт имя ассета роботу через входную переменную assetResultName.
  4. Ожидает, пока робот запишет результат в ассет активностью Set asset.
  5. Возвращает значение ассета агенту и удаляет временный ассет.

Ответ tools/call передаётся в формате SSE (text/event-stream). Например, если робот записал строку {"digit":"7"}, событие будет выглядеть так:

data: {"jsonrpc":"2.0","id":3,"result":{"content":[{"type":"text","text":"{\"digit\":\"7\"}"}],"isError":false}}

Поле result.content[0].text содержит результат робота; isError: false означает успешное выполнение вызова.

Время ожидания задаёт dispatcher.timeoutSeconds (по умолчанию 120 секунд). При превышении времени ожидания робот автоматически не останавливается: он может продолжить выполнение, но временный ассет уже будет удалён, поэтому результат не вернётся агенту.

6. Диагностика ошибок

Ошибка или признакВозможная причина и действие
HTTP 401 UnauthorizedНе передан заголовок Authorization или указан неверный API-ключ.
Tool '…' not found in catalogНеправильно указано имя инструмента, нет активной версии проекта или отсутствует требуемый тег. Повторите tools/list.
Argument validation failedАргументы не соответствуют inputSchema. Проверьте типы и ограничения, включая кавычки для строковых литералов C#.
Project … has no 'assetResultName' variableВ проекте отсутствует входная переменная для имени ассета. Добавьте её.
Orchestrator error: Failed to enqueue project …Проект не принят в очередь. Проверьте правила очереди и запрет повторного добавления.
Robot execution failedОшибка выполнения робота. Просмотрите журнал робота в Оркестраторе по operationKey, указанному в сообщении.
Robot execution failed: no_outputРобот завершился, но не записал результат в ассет. Проверьте Set asset, assetResultName и UseArgs.
Robot execution timed outПревышено время ожидания результата. Проверьте очередь, робота и настройку таймаутов.
Connection failedMCP Server не может подключиться к Оркестратору. Проверьте адрес, порт и сертификат.

Ошибки вызова инструмента передаются в ответе с isError: true. Ошибки JSON-RPC-протокола используют поле error (например, -32601 для неподдерживаемого метода).

7. Справочник MCP-методов

Все перечисленные ниже методы передаются в поле method тела POST /mcp. Они не являются отдельными HTTP-маршрутами.

МетодНазначениеФормат ответа
initializeИнициализация взаимодействия клиента и сервера.JSON
pingПроверка ответа MCP Server.JSON
tools/listПолучение инструментов, доступных агенту.JSON
tools/callВызов инструмента и получение результата.SSE

Различие между MCP и техническим API: в Swagger также могут отображаться /mcp/catalog/tools, /mcp/catalog/orchestrator/projects и другие служебные маршруты. Они используются внутренними компонентами сервера и не являются эквивалентами методов tools/list и tools/call для AI-агентов. Для работы по MCP используйте POST /mcp.

См. также