forge-toolkit: хелперы для разработки MCP-серверов на Go. - toolkit: args/schema/result/env/probe/server - toolkit/validate: валидаторы синтаксиса - configreload: live-reload конфига по контент-хэшу - docs: ARCHITECTURE, quickstart, mcp-contract - template/ и examples/hello-tool/ - CI (Gitea Actions), лицензия Apache-2.0
43 lines
1.3 KiB
Go
43 lines
1.3 KiB
Go
package toolkit
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"github.com/modelcontextprotocol/go-sdk/mcp"
|
|
)
|
|
|
|
// version — версия MCP-сервера в handshake. Модули не версионируются
|
|
// отдельно (образ общий), поэтому фиксирована.
|
|
const version = "1.0.0"
|
|
|
|
// Health сообщает, запрошен ли `--health`, и, если да, печатает "ok".
|
|
// Вызывается в начале main ДО построения Manager: health должен быть дешёвым
|
|
// (без чтения конфига и подключений).
|
|
func Health() bool {
|
|
if len(os.Args) > 1 && os.Args[1] == "--health" {
|
|
fmt.Println("ok")
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Run поднимает stdio-цикл MCP-сервера: graceful shutdown по SIGINT/SIGTERM,
|
|
// NewServer(name), register, StdioTransport. Возвращает ошибку запуска —
|
|
// main решает, как её залогировать и выйти.
|
|
func Run(name string, register func(*mcp.Server)) error {
|
|
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGTERM, syscall.SIGINT)
|
|
defer stop()
|
|
|
|
s := mcp.NewServer(&mcp.Implementation{
|
|
Name: name,
|
|
Version: version,
|
|
}, &mcp.ServerOptions{})
|
|
|
|
register(s)
|
|
return s.Run(ctx, &mcp.StdioTransport{})
|
|
}
|