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,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`.
|
||||
Reference in New Issue
Block a user