Files
Maksim Totmin c398045664
ci / test (push) Failing after 5s
ci / lint (push) Failing after 4s
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
2026-09-14 00:23:08 +07:00

81 lines
2.8 KiB
Markdown

# 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).