50 lines
2.1 KiB
Go
50 lines
2.1 KiB
Go
// Command forge-tools-lexicomai — MCP-сервер (stdio) для управления
|
|
// жизненным циклом продуктов Lexicom AI на выделенных машинах: инвентарь,
|
|
// статус, конфигурация, лицензии, health и диагностика.
|
|
//
|
|
// Архитектура такая же, как у остальных встроенных MCP-серверов: stdio-only,
|
|
// одиночный потокобезопасный Manager, ручные JSON-схемы, --health, graceful
|
|
// shutdown и live-reload конфига. Модуль намеренно НЕ дублирует удалённый
|
|
// exec/файлы/гипервизор/HTTP (это зоны других серверов): здесь только
|
|
// доменная семантика продукта, а SSH-транспорт к машинам — внутренняя
|
|
// «сантехника».
|
|
//
|
|
// Каноническое имя аддона: module forge-tools-lexicomai, сервер «lexicomai».
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"forge-tools-lexicomai/internal/lexicomai"
|
|
"forge-tools-lexicomai/internal/tools"
|
|
|
|
"git.totmin.ru/en2zmax/forge-toolkit"
|
|
"github.com/modelcontextprotocol/go-sdk/mcp"
|
|
)
|
|
|
|
func main() {
|
|
// --health: дешёвая проверка живости без чтения конфига и подключений.
|
|
if toolkit.Health() {
|
|
return
|
|
}
|
|
|
|
configPath := flag.String("config", "",
|
|
"путь к config.json (фолбэк, если нет per-agent <FORGE_TENANT_CONFIG>/lexicomai.json)")
|
|
flag.Parse()
|
|
|
|
// Конфиг: per-agent файл (live-reload) → статический -config. Источник,
|
|
// приоритет и фолбэк инкапсулированы в lexicomai.Loader.
|
|
loader := lexicomai.NewLoader(os.Getenv("FORGE_TENANT_CONFIG"), *configPath)
|
|
mgr := lexicomai.NewManager(loader)
|
|
defer mgr.Close()
|
|
|
|
if err := toolkit.Run("lexicomai", func(s *mcp.Server) {
|
|
tools.RegisterAll(s, mgr)
|
|
}); err != nil {
|
|
fmt.Fprintf(os.Stderr, "forge-tools-lexicomai: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|