Files
forge-toolkit/docs/mcp-contract.md
T
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

2.5 KiB
Raw Permalink Blame History

Контракт на проводе

Сервер — стандартный MCP-сервер (JSON-RPC 2.0 через stdio). Здесь зафиксировано то, что важно для корректной работы с хостом: формат результата и forge-специфичный probe.

CallToolResult

Успех:

{ "content": [ { "type": "text", "text": "..." } ] }

Доменная ошибка (модель должна увидеть и исправить):

{ "content": [ { "type": "text", "text": "не найдено: ..." } ], "isError": true }
  • isError: true — ошибка инструмента, а не транспорта: цикл агента продолжается.
  • Инфраструктурный сбой возвращается как Go-error (JSON-RPC error), а не как isError.

Хелперы: toolkit.Text, toolkit.Error.

Probe: эмитированные permission-паттерны

Инструменты с побочными эффектами могут сообщать хосту канонические паттерны доступа. Хост вызывает инструмент в режиме probe, получает паттерны и применяет политику одобрения, не выполняя действие.

Запрос probe — стандартное поле _meta вызова:

{
  "method": "tools/call",
  "params": {
    "name": "write_file",
    "arguments": { "path": "a.txt", "content": "hi" },
    "_meta": { "forge.permission_patterns": true }
  }
}

Ответ probe — паттерны в _meta, без побочного эффекта:

{
  "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.