В Anthropic Messages обоих режимов доступны ровно две серверные функции. Их исполняет Claude API: вашему коду не нужно возвращать обычный клиентский tool_result.
| Функция | Точный type | Обязательные лимиты |
|---|---|---|
| Web search | web_search_20250305 | max_uses: 1–5 |
| Web fetch | web_fetch_20250910 | max_uses: 1–3; max_content_tokens: 1–25 000 (приблизительно, только текст) |
json
{
"model": "claude-opus-5",
"max_tokens": 2048,
"tools": [
{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 3,
"allowed_domains": ["docs.python.org"]
},
{
"type": "web_fetch_20250910",
"name": "web_fetch",
"max_uses": 2,
"max_content_tokens": 12000,
"allowed_domains": ["docs.python.org"],
"citations": {"enabled": true}
}
],
"messages": [{
"role": "user",
"content": "Найди актуальную документацию asyncio и открой лучший результат"
}]
}| Объект | Разрешённые поля |
|---|---|
| Web search | type, name, max_uses; опционально allowed_domains или blocked_domains, allowed_callers |
| Web fetch | Поля Web search + обязательный max_content_tokens; опционально citations |
nameдолжен быть ровноweb_searchилиweb_fetch; в одном запросе допускается не больше одного server tool каждого типа. Guard принимает только перечисленные поля: неизвестные поля (включая официальный search-параметрuser_location) и другие typed tool variants отклоняются с400.- Если передан
allowed_callers, допустимо только точное значение["direct"]. allowed_domainsиblocked_domainsвзаимоисключающие. Каждый список содержит не больше 100 ASCII-доменов: без схемы, IP-адресов, query/fragment, обратного слеша и wildcard в hostname.- Для Web search после домена разрешён опциональный path, например
docs.python.org/3/*; для Web fetch разрешён только голый домен без path. citationsу Web fetch, если передан, имеет точную форму{"enabled": true}или{"enabled": false}без дополнительных полей. Client tools должны не иметьtypeлибо использоватьtype: "custom".
- Клиент обязан явно передать указанные лимиты. Превышение или неизвестная версия server tool отклоняются с
400до запуска функции. - Обе функции сначала возвращают
server_tool_use, затем соответствующийweb_search_tool_resultилиweb_fetch_tool_result; search citations обязательны, fetch citations опциональны. - Ошибка самой функции может прийти внутри успешного HTTP
200: ищите tool-result block, у которогоcontent.typeзаканчивается на_tool_result_error, и читайтеcontent.error_code. - Web fetch принимает URL не длиннее 250 символов, который уже встречался в user message, client tool result либо предыдущем search/fetch result. Поддерживаются текст, HTML и PDF; сайты с обязательным JavaScript-rendering не поддерживаются, а неудачные fetch-попытки расходуют
max_uses. - Успешный Web search без совпадений возвращает
content: []— это не tool error.
| Что | Списание |
|---|---|
| Web search | $0.01 за каждый provider-reported billed request + обычные input tokens результата |
| Неоплачиваемая provider-ошибка Web search | Плата $0.01 не списывается |
| Web fetch | Без отдельной платы; содержимое страницы считается input tokens |
- Kimi. Поиск и загрузка страницы вынесены в два отдельных endpoint'а,
POST /v1/kimi/searchиPOST /v1/kimi/fetch. Модель они не вызывают: возвращают текст, который вы сами кладёте в следующий чат-запрос. Отдельной платы за них нет, вы платите только за токены этого запроса. Тела запросов, лимиты и коды ошибок на странице Kimi · Chat Completions. - Composer и Grok. Встроенный веб-поиск доступен во время ответа. Отдельного публичного вызова для управления этим поиском нет; типизированные Anthropic server tools не принимаются. Клиентские функции подключаются отдельно полем
toolsи исполняются вашим клиентом.