PilotMCP
Health Warn
- License — License: Apache-2.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Warn
- Code scan incomplete — No supported source files were scanned during light audit
Permissions Pass
- Permissions — No dangerous permissions requested
This is an MCP server written in C# that acts as a bridge between AI agents and a "Pilot" server. It enables LLMs to search, create, modify, and manage documents, access rights, and chats via the Pilot Server API.
Security Assessment
Overall risk: Medium. The tool inherently makes network requests to the Pilot Server URL specified by the user. The most significant security concern is that it requires plaintext credentials (username and password) to be passed directly via environment variables in the MCP client configuration. While there are no hardcoded secrets in the code, storing plain text passwords in configuration files poses a local security risk. On a positive note, the code does not appear to execute arbitrary shell commands or request dangerous system-level permissions. The tool thoughtfully includes a `PILOT_READONLY` mode that strictly blocks all write and modification operations, which is highly recommended for standard use.
Quality Assessment
The project is actively maintained, with its last code push occurring today. It uses the well-established Apache-2.0 license and includes clear, detailed documentation. However, it suffers from low community visibility, having only 5 GitHub stars. Additionally, the automated code scan could not analyze the C# source files for vulnerabilities, meaning a standard deep-code verification is missing.
Verdict
Use with caution due to the requirement of exposing plaintext login credentials in your local configuration and the current low community visibility.
MCP-сервер для работы с Pilot
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-справкой) |
Автоматизации
Модель может читать, анализировать автоматизации. В т.ч. их С# код.
| Инструмент | Описание |
|---|---|
GetAutomationConfigs |
Все автоматизации, включая их основную часть и C# код → JSONL-файл |
Задачи
| Инструмент | Описание |
|---|---|
CreateTask |
Создать задачу (тип начинается с 'task_', из GetTypes) |
CreateWorkflow |
Создать workflow (процесс) со стадиями и задачами |
Подписи
| Инструмент | Описание |
|---|---|
AddSignatureRequest |
Добавить запрос на подпись к файлу в объекте |
Прочее
| Инструмент | Описание |
|---|---|
InvokeCommand |
Вызвать серверную команду по имени |
Тесты
Сервер тестировался в Pilot 26.1.
Для тестирования использовалась локальная LLM Qwen3.5 27B (Контекст 200к токенов)
Лицензия
Проект распространяется по лицензии Apache 2.0. Подробности см. в LICENSE.txt.
Обратная связь и вклад
Issues и PR приветствуются. Перед отправкой PR убедитесь, что проект собирается.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found