Разработка

Сборка

Нужен .NET 8 SDK.

dotnet build PilotMCP.slnx

Решение включает три проекта: сервер PilotMCP.csproj, тесты PilotMCP.Tests и генератор документации DocGen.

Релизная сборка dotnet build -c Release дополнительно кладёт в artifacts/ два архива под win-x64: с .NET внутри (-selfcontained.zip) и без него. Версия берётся из <Version> в PilotMCP.csproj. Отключить упаковку: -p:SkipReleasePackaging=true. Собрать только архивы: dotnet build PilotMCP.csproj -c Release.

Тесты

Тесты написаны на xUnit и делятся на два вида:

  • Unit-тесты не требуют сервера Pilot: построение Markup, разбор XPS, вспомогательные функции, переподключающий прокси.
  • Интеграционные тесты помечены [Trait("Category", "Integration")] и работают с живым сервером Pilot: запускают сервер как MCP-процесс и вызывают инструменты.

Запуск unit-тестов:

dotnet test PilotMCP.slnx --filter "Category!=Integration"

Запуск всех тестов, включая интеграционные:

dotnet test PilotMCP.slnx

Параметры подключения интеграционные тесты берут из файла PilotMCP.Tests/test.runsettings: в нём задаются те же переменные PILOT_* (адрес сервера, логин, пароль, база, код лицензии, учётная запись администратора). Значения подставьте свои, не публикуйте их в репозитории.

CI

На каждый push и pull request workflow ci.yml собирает решение (Debug) на windows-latest и прогоняет unit-тесты. Интеграционные тесты в CI не запускаются.

Релиз

Релиз собирается по тегу вида vX.Y.Z (допускается суффикс, например -beta.1):

git tag v0.1.0
git push origin v0.1.0

Workflow release.yml прогоняет unit-тесты, собирает zip-архивы и .mcpb, создаёт GitHub Release и публикует server.json в MCP Registry (вход по OIDC). Версия берётся из тега. Манифест бандла находится в mcpb/manifest.json.

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

Сайт собирается docfx из папки docs/ и публикуется на GitHub Pages workflow docs.yml: сборка проверяется на каждом pull request, публикация идёт при push в master.

Справочник инструментов (docs/tools/) не хранится в репозитории: его генерирует проект DocGen по коду сервера. Он обходит классы с [McpServerToolType], методы с [McpServerTool], берёт описания и параметры из [Description], а признак «запись» определяет по вызову ToolRunner.RunWrite/RunWriteAsync в исходниках Tools/*.cs. Результат сверяется со списком заблокированных инструментов режима PILOT_READONLY в README.md; при расхождении DocGen завершается с ошибкой, так что добавляя или переименовывая инструмент записи, обновите README.

DocGen не подключается к Pilot и не запускает MCP-сервер.

Локальная сборка и просмотр:

dotnet run --project DocGen
dotnet tool restore
dotnet docfx docfx.json --serve

Сайт откроется на http://localhost:8080. Каталоги docs/tools/ и _site/ игнорируются git.