53 lines
2.0 KiB
Go
53 lines
2.0 KiB
Go
package tools
|
||
|
||
import (
|
||
"forge-tools-lexicomai/internal/lexicomai"
|
||
|
||
"git.totmin.ru/en2zmax/forge-toolkit"
|
||
"github.com/modelcontextprotocol/go-sdk/mcp"
|
||
)
|
||
|
||
// registrar — тонкая обёртка регистрации: держит сервер и Manager и даёт
|
||
// доменам лаконичный API. Все схемы — ручные (объявлены явно).
|
||
type registrar struct {
|
||
s *mcp.Server
|
||
m *lexicomai.Manager
|
||
}
|
||
|
||
// add регистрирует read-only/безопасный инструмент (probe не требуется).
|
||
// inputSchema — уже собранная схема (см. schema(...) с required).
|
||
func (r *registrar) add(name, desc string, inputSchema map[string]any, h mcp.ToolHandler) {
|
||
r.s.AddTool(&mcp.Tool{
|
||
Name: name,
|
||
Description: desc,
|
||
InputSchema: inputSchema,
|
||
}, h)
|
||
}
|
||
|
||
// addAction регистрирует side-effecting инструмент через permission-паттерны:
|
||
// хост узнаёт паттерн ДО выполнения и применяет политику одобрения. Пока не
|
||
// используется (M1 — только чтение), но готово для установки/конфига/лицензии
|
||
// в следующих итерациях.
|
||
func (r *registrar) addAction(name, desc string, inputSchema map[string]any,
|
||
patterns toolkit.PatternsFn, h mcp.ToolHandler) {
|
||
toolkit.RegisterPatternTool(r.s, &mcp.Tool{
|
||
Name: name,
|
||
Description: desc,
|
||
InputSchema: inputSchema,
|
||
}, patterns, h)
|
||
}
|
||
|
||
// RegisterAll — единая точка регистрации инструментов модуля.
|
||
//
|
||
// Каждый следующий функциональный блок добавляется сюда одной строкой,
|
||
// поэтому каркас разрастается предсказуемо.
|
||
func RegisterAll(s *mcp.Server, m *lexicomai.Manager) {
|
||
r := ®istrar{s: s, m: m}
|
||
|
||
registerInventory(r)
|
||
registerConfig(r)
|
||
registerLicense(r)
|
||
registerHealth(r)
|
||
registerInstall(r)
|
||
}
|