chore: initial release v0.1.0
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
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
# forge-toolkit
|
||||
|
||||
Хелперы для разработки **MCP-серверов на Go**: разбор аргументов, JSON-Schema,
|
||||
результаты, stdio-lifecycle, `${VAR}`-экспансия, live-reload конфигов и
|
||||
протокол эмитированных permission-паттернов (probe).
|
||||
|
||||
Подходит для написания своих MCP-инструментов (файлы, БД, HTTP, DevOps и
|
||||
т.д.) и совместим с любым MCP-клиентом.
|
||||
|
||||
## Состав
|
||||
|
||||
| Пакет | Назначение |
|
||||
|---|---|
|
||||
| `git.totmin.ru/en2zmax/forge-toolkit` | args / schema / result / env / probe / server |
|
||||
| `git.totmin.ru/en2zmax/forge-toolkit/validate` | валидаторы синтаксиса (JSON/YAML/TOML/XML/INI/ENV/Dockerfile) |
|
||||
| `git.totmin.ru/en2zmax/forge-toolkit/configreload` | live-reload конфига по контент-хэшу |
|
||||
|
||||
Зависимости тулкита намеренно минимальны: stdlib + официальный
|
||||
[`modelcontextprotocol/go-sdk`](https://github.com/modelcontextprotocol/go-sdk)
|
||||
(+ `yaml.v3`/`toml` в подпакете `validate`). Это фиксируется в CI
|
||||
(`make toolkit-deps`).
|
||||
|
||||
## Установка
|
||||
|
||||
Модуль размещён на self-hosted Gitea, поэтому `go get` идёт напрямую, мимо
|
||||
`proxy.golang.org`:
|
||||
|
||||
```bash
|
||||
export GOPRIVATE=git.totmin.ru
|
||||
go get git.totmin.ru/en2zmax/forge-toolkit@latest
|
||||
```
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/modelcontextprotocol/go-sdk/mcp"
|
||||
"git.totmin.ru/en2zmax/forge-toolkit"
|
||||
)
|
||||
|
||||
func main() {
|
||||
if toolkit.Health() {
|
||||
return
|
||||
}
|
||||
_ = toolkit.Run("my-server", func(s *mcp.Server) {
|
||||
mcp.AddTool(s, &mcp.Tool{
|
||||
Name: "get_time",
|
||||
Description: "Текущее время сервера (UTC). Read-only.",
|
||||
InputSchema: toolkit.Schema(nil, nil),
|
||||
}, func(context.Context, *mcp.CallToolRequest, struct{}) (*mcp.CallToolResult, any, error) {
|
||||
return toolkit.Text(time.Now().UTC().Format(time.RFC3339)), nil, nil
|
||||
})
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
## Документация
|
||||
|
||||
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — контракт и правила сервера.
|
||||
- [`docs/quickstart.md`](docs/quickstart.md) — первый инструмент за 10 минут.
|
||||
- [`docs/mcp-contract.md`](docs/mcp-contract.md) — формат результата и probe на проводе.
|
||||
- [`template/`](template/) — готовый каркас сервера.
|
||||
- [`examples/hello-tool/`](examples/hello-tool/) — минимальный рабочий пример.
|
||||
|
||||
## Разработка
|
||||
|
||||
```bash
|
||||
make test # go test -race ./...
|
||||
make lint # golangci-lint + gofmt
|
||||
make tidy # go mod tidy
|
||||
```
|
||||
|
||||
## Лицензия
|
||||
|
||||
Apache-2.0 — см. [`LICENSE`](LICENSE).
|
||||
Reference in New Issue
Block a user