Skip to content

mahach666/PilotMCP

Repository files navigation

PilotMCP

MCP-сервер для работы с Pilot через Server API. Позволяет LLM-агентам подключаться к серверу Pilot, выполнять поиск, создавать и изменять объекты, работать с документами, историей изменений, правами доступа и чатами.

Требования

  • .NET 8.0
  • Доступ к серверу Pilot

Подключение к MCP-клиенту

Параметры подключения задаются через переменные окружения в конфигурации MCP-клиента:

Переменная Описание Обязательная
PILOT_SERVER_URL URL сервера, например http://localhost:5545/u_db_name да
PILOT_LOGIN Логин пользователя да
PILOT_PASSWORD Пароль пользователя да
PILOT_DATABASE Имя базы данных (если пусто — берётся из URL) нет
PILOT_LICENSE_TYPE Код лицензии: по умолчанию 100 нет
PILOT_READONLY Режим только чтения: true или 1. Блокирует все операции записи. нет

Пример конфигурации (LM Studio, Ollama, Claude Code, Cursor и т.д.)

{
  "mcpServers": {
    "pilot": {
      "command": "C:\\path\\to\\PilotMCP.exe",
      "env": {
        "PILOT_SERVER_URL": "http://localhost:5545/u_db_name",
        "PILOT_LOGIN": "username",
        "PILOT_PASSWORD": "password",
        "PILOT_DATABASE": "",
        "PILOT_LICENSE_TYPE": "103",
        "PILOT_READONLY": "false"
      }
    }
  }
}

Режим только чтения

При PILOT_READONLY=true сервер сообщает модели об ограничениях через системный промпт при инициализации. Модель не будет пытаться выполнять операции записи и сразу сообщит пользователю об ограничении.

Заблокированы: CreateObject, SetAttribute, DeleteObject, RestoreObject, MoveObject, LockObject, UnlockObject, FreezeObject, UnfreezeObject, MakeSecret, MakePublic, DeleteFile, SetUserState, Subscribe, Unsubscribe, AnnotateText, CreateAnnotation, SendMessage, EditMessage, ReplyMessage, CreateChat, UploadFile, InvokeCommand, CreateLink, DeleteRelation, AddAccessRecord, RemoveAllAccessRecords, UpdatePerson, ChangeSettings, CreateReport, UpdateReport, CreateTask, CreateWorkflow, AddSignatureRequest.


Архитектура

Bulk-инструменты (поиск, дочерние объекты и т.п.) записывают результаты во временные JSONL-файлы, а не возвращают данные напрямую в контекст. Это позволяет работать с тысячами объектов без перегрузки контекста модели.

Search("проект") → {resultFile: "tmp/search_x.jsonl", count: 8543}
     ↓
FilterObjects("tmp/search_x.jsonl", "typeName", "document") → tmp/filter_x.jsonl (85 записей)
     ↓
ExportCsv("tmp/filter_x.jsonl", "C:/result/docs.csv", "name,typeName,created")

Формат промежуточных файлов — JSONL (JSON Lines): один JSON-объект на строку.


Инструменты

Подключение

Инструмент Описание
GetDatabaseInfo Информация о текущей базе данных и подключённом пользователе

Объекты

Инструмент Описание
GetObject Получить объект по GUID: все атрибуты, файлы, связи, права, состояние
GetAttribute Прочитать полное значение одного атрибута без обрезки (когда GetObject обрезал значение)
GetType Информация о типе объекта по системному имени
GetTypes Все типы объектов базы → JSONL-файл
CreateObject Создать объект (родитель, тип, атрибут)
SetAttribute Установить значение атрибута объекта
DeleteObject Удалить объект (в корзину)
RestoreObject Восстановить объект из корзины
MoveObject Переместить объект в другую папку
LockObject Заблокировать объект (эксклюзивное редактирование)
UnlockObject Разблокировать объект
FreezeObject Заморозить объект (запретить редактирование)
UnfreezeObject Разморозить объект (разрешить редактирование)
MakeSecret Сделать объект секретным (ограниченный доступ)
MakePublic Снять секретность с объекта
SetUserState Установить пользовательское состояние (UserState) на объекте
Subscribe Подписаться на уведомления об изменениях объекта
Unsubscribe Отписаться от уведомлений об изменениях объекта
DownloadFile Скачать файл из Pilot на диск
UploadFile Загрузить файл с диска и прикрепить к объекту
DeleteFile Удалить файл из объекта по его Body.Id
GetFileSize Проверить размер файла в архиве Pilot (без скачивания)

Навигация и поиск

Инструмент Описание
Search Поиск объектов по атрибутам → JSONL-файл
SearchByText Полнотекстовый поиск по всем атрибутам и содержимому
SearchInContext Поиск объектов внутри папки (рекурсивно по всем вложенным)
SearchByType Поиск объектов по типу (typeId из GetTypes)
SearchByAttribute Поиск объектов по значению атрибута
SearchByState Поиск объектов по пользовательскому состоянию (UserState)
SearchByCreator Поиск объектов по создателю (personId)
SearchByDate Поиск объектов по дате создания (диапазон)
GetAllObjects Получить все объекты базы (поиск в контексте корня)
GetChildren Дочерние объекты по GUID → JSONL-файл
GetRootObjects Корневые объекты базы → JSONL-файл
GetObjectsToFile Несколько объектов по списку GUID → JSONL-файл
GetUserStates Список пользовательских состояний (UserStates) — для задач и workflow
GetStateMachines Машины состояний (StateMachines) — workflow и переходы между состояниями

Пользователи и организация

Инструмент Описание
GetPeople Все пользователи (email, phone, accountState и т.д.) → JSONL-файл
GetOrganisationUnits Все оргединицы (kind, person, иерархия) → JSONL-файл
GetPeopleByIds Подробная информация о пользователях по списку ID
GetOrgUnitsByIds Подробная информация об оргединицах по списку ID
GetPersonOnPosition Узнать кто занимает указанную позицию (по positionId)
UpdatePerson Обновить email, phone, comment, isInactive пользователя

Работа с файлами результатов (pipe-инструменты)

Инструмент Описание
ExtractFields Извлечь выбранные поля из JSONL → новый JSONL
FilterObjects Отфильтровать записи по значению поля → новый JSONL
ExtractFieldToText Извлечь одно поле построчно в текстовый файл
PreviewFile Просмотреть N записей из файла (до 20)
ReadFile Прочитать текстовый файл (или его часть) с пагинацией через offset/limit
CountFile Количество записей в файле
ExportCsv Экспортировать JSONL в CSV
SaveResult Скопировать файл результатов в указанное место

Документы и аннотации

Инструмент Описание
GetDocumentText Извлечь текст документа (XPS или PDF) для анализа
FindTextOnPage Найти текст на страницах и получить его координаты
ExtractPageText Извлечь все текстовые блоки со страницы с координатами → JSONL
GetDocumentPageImage Получить изображение страницы документа (PDF или XPS) для визуального анализа
AnnotateText Создать текстовое замечание к слову/фразе в документе (XPS или PDF)
CreateAnnotation Создать графическое замечание (прямоугольник, эллипс, стрелка и т.п.)
BuildAnnotationXml Сгенерировать XML-разметку аннотации без создания объекта

История и версии

Инструмент Описание
GetHistory История изменений объектов по списку GUID
GetChangesets Changesets в диапазоне ID

Права доступа

Инструмент Описание
CheckAccess Проверить уровень доступа пользователя к объекту
CheckAccessByUnit Проверить уровень доступа организационной единицы к объекту
GetAccessRecords Записи прав доступа для объекта (кому и какие)
AddAccessRecord Добавить запись прав доступа к объекту
RemoveAllAccessRecords Удалить все ограничения доступа (сделать объект публичным)
GetObjectsWithRights Объекты с информацией о правах текущего пользователя
GetSubscribers Подписчики объекта (personIds пользователей)

Связи между объектами

Инструмент Описание
CreateLink Создать двустороннюю связь между двумя объектами
DeleteRelation Удалить связь между объектами

Чаты

Инструмент Описание
GetChats Список чатов текущего пользователя
GetChat Информация о конкретном чате (тип, описание, связи, непрочитанные)
GetPersonalChat Найти личный чат с пользователем по personId
GetChatMembers Участники чата (роли, статусы уведомлений)
CreateChat Создать групповой чат
GetMessages Сообщения в чате
GetMessage Одно сообщение по GUID (автор, дата, тип, текст)
SearchMessages Поиск сообщений по тексту во всех или указанных чатах
GetRelatedChats Чаты, связанные с объектом (обсуждение задачи/документа)
SendMessage Отправить сообщение в чат
EditMessage Редактировать ранее отправленное сообщение
ReplyMessage Ответить на конкретное сообщение в чате
CheckOnline Проверить онлайн-статус пользователя

Настройки

Инструмент Описание
GetPersonalSettings Персональные настройки пользователя по разделу
GetCommonSettings Общие настройки базы
ChangeSettings Изменить персональную или общую настройку

Отчёты (.repx)

Модель может читать, анализировать, редактировать и создавать отчёты в формате DevExpress XtraReports. Скрипты в отчётах используют C# 4 и Pilot Report API (ReportContext, QueryBuilder, RObject).

Инструмент Описание
FindReports Найти папку отчётов и показать все отчёты (рекурсивно) с GUID
GetReport Прочитать .repx из объекта Pilot (для анализа или правки)
UpdateReport Обновить .repx в существующем объекте
CreateReport Создать новый отчёт с .repx в указанной папке
ListReportSamples Список доступных примеров отчётов
GetReportSample Прочитать конкретный пример (с API-справкой)

Задачи

Инструмент Описание
CreateTask Создать задачу (тип начинается с 'task_', из GetTypes)
CreateWorkflow Создать workflow (процесс) со стадиями и задачами

Подписи

Инструмент Описание
AddSignatureRequest Добавить запрос на подпись к файлу в объекте

Прочее

Инструмент Описание
InvokeCommand Вызвать серверную команду по имени

Тесты

Сервер тестировался в Pilot 26.1. Для тестирования использовалась локальная LLM Qwen3.5 27B (Контекст 200к токенов)

Лицензия

Проект распространяется по лицензии Apache 2.0. Подробности см. в LICENSE.txt.

Обратная связь и вклад

Issues и PR приветствуются. Перед отправкой PR убедитесь, что проект собирается.

About

MCP-сервер для работы с Pilot

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages