48 lines
2.6 KiB
PowerShell
48 lines
2.6 KiB
PowerShell
#requires -Version 5.1
|
|
# Точка входа MCP-сервера КОМПАС-3D.
|
|
# ИНВАРИАНТ: до запуска сервера в stdout не уходит ни байта — stdout занят JSON-RPC.
|
|
Set-StrictMode -Version Latest
|
|
$ErrorActionPreference = 'Stop'
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
$exe = $null
|
|
try {
|
|
if (-not [string]::IsNullOrWhiteSpace($env:KOMPAS_MCP_EXE)) {
|
|
# Режим разработки: сервер собран локально, дерево плагина не трогаем.
|
|
$exe = $env:KOMPAS_MCP_EXE
|
|
}
|
|
else {
|
|
# Сервер едет в самом плагине (framework-dependent, ~6,6 МБ на диске): скачивать
|
|
# и сверять контрольные суммы нечего — git уже доставил файл вместе с навыками.
|
|
$exe = Join-Path (Split-Path -Parent $PSScriptRoot) 'bin\kompas-mcp.exe'
|
|
}
|
|
|
|
# -PathType Leaf: без него путь к существующему каталогу молча проходит проверку,
|
|
# а падает уже голый вызов "& $exe" сырым CommandNotFoundException в обход catch ниже.
|
|
if (-not (Test-Path -LiteralPath $exe -PathType Leaf)) {
|
|
throw "не найден сервер: $exe"
|
|
}
|
|
}
|
|
catch {
|
|
[Console]::Error.WriteLine("kompas-mcp launcher: $($_.Exception.Message)")
|
|
exit 1
|
|
}
|
|
|
|
try {
|
|
# Сплаттинг @args во внешний процесс: пустые строки-аргументы теряются (особенность
|
|
# PowerShell) — для MCP-клиента безвредно, он серверу аргументов не передаёт.
|
|
& $exe @args
|
|
$serverExit = $LASTEXITCODE
|
|
}
|
|
catch {
|
|
# Сбой самого запуска (битый бинарь, недостающая зависимость, отказ в доступе) —
|
|
# не путать с ненулевым кодом возврата уже запущенного сервера, это не exception.
|
|
# Самая частая причина здесь — отсутствующий .NET Runtime: сервер поставляется
|
|
# framework-dependent, и без рантайма apphost падает именно тут.
|
|
[Console]::Error.WriteLine("kompas-mcp launcher: не удалось запустить сервер: $($_.Exception.Message)")
|
|
[Console]::Error.WriteLine("kompas-mcp launcher: если .NET Runtime не установлен — https://dotnet.microsoft.com/download/dotnet (нужен .NET 8 или новее, x64)")
|
|
exit 1
|
|
}
|
|
|
|
exit $serverExit
|