chore: initial release v0.1.0
ci / test (push) Failing after 5s
ci / lint (push) Failing after 4s

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:
Maksim Totmin
2026-09-14 00:23:08 +07:00
commit c398045664
43 changed files with 2581 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
# Контракт на проводе
Сервер — стандартный MCP-сервер (JSON-RPC 2.0 через stdio). Здесь зафиксировано
то, что важно для корректной работы с хостом: формат результата и
forge-специфичный probe.
## `CallToolResult`
Успех:
```json
{ "content": [ { "type": "text", "text": "..." } ] }
```
Доменная ошибка (модель должна увидеть и исправить):
```json
{ "content": [ { "type": "text", "text": "не найдено: ..." } ], "isError": true }
```
- `isError: true` — ошибка **инструмента**, а не транспорта: цикл агента
продолжается.
- Инфраструктурный сбой возвращается как Go-`error` (JSON-RPC error), а не
как `isError`.
Хелперы: `toolkit.Text`, `toolkit.Error`.
## Probe: эмитированные permission-паттерны
Инструменты с побочными эффектами могут сообщать хосту **канонические
паттерны** доступа. Хост вызывает инструмент в режиме probe, получает
паттерны и применяет политику одобрения, **не выполняя действие**.
Запрос probe — стандартное поле `_meta` вызова:
```json
{
"method": "tools/call",
"params": {
"name": "write_file",
"arguments": { "path": "a.txt", "content": "hi" },
"_meta": { "forge.permission_patterns": true }
}
}
```
Ответ probe — паттерны в `_meta`, без побочного эффекта:
```json
{
"content": [],
"_meta": {
"forge.patterns": ["write:a.txt"],
"forge.always": []
}
}
```
Ключи (константы в `toolkit/probe.go`):
| Ключ | Смысл |
|---|---|
| `forge.permission_patterns` | флаг запроса probe |
| `forge.patterns` | паттерны, зависящие от аргументов |
| `forge.always` | паттерны, действующие всегда |
| `forge.supports_permission_patterns` | флаг в `Tool.Meta`: сервер поддерживает probe |
Инструменты без побочных эффектов probe не поддерживают — хост не шлёт им
probe-вызов.
Хелперы: `toolkit.RegisterPatternTool`, `toolkit.WrapProbe`, `toolkit.IsProbe`.