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

72 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Контракт на проводе
Сервер — стандартный 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`.