Server definition
- Hash
- sha256:c338e614876cf113f81a280d1d70d91c17b83ca8ee45bb10f93d771ffdd4b5bf
- What it is
- What a remote MCP server returned when asked what it offers: 12 tools
The blob, as servednamed by its sha256
{
"instructions": "srezai.ru - веб-доступ для агентов: поиск, чтение страниц, скриншоты, извлечение данных по схеме. / srezai.ru - web access for agents: search, page reading, screenshots, schema-based extraction.\n\nКак выбрать инструмент / choosing a tool:\n- Нужны ссылки и факты по теме → web_search. Нужны картинки → image_search. / Links and facts on a topic → web_search. Images → image_search.\n- Нужен текст известной страницы → read_url (1 кредит), несколько страниц сразу → read_urls. / The text of a known page → read_url (1 credit), several pages at once → read_urls.\n- Нужно чтение целого сайта или раздела → map (карта адресов: 1 кредит за каждые 10 возвращённых адресов, минимум 1) и crawl (карта плюс чтение страниц: 1 кредит за страницу). Так собирают содержимое раздела одним-двумя вызовами вместо десятков поисковых запросов; сайт, который нас не пустил, не тарифицируется. / You need to walk a whole site or section → map (URL map: 1 credit per 10 URLs returned, minimum 1) and crawl (map plus page reads: 1 credit per page). This collects a section in one or two calls instead of dozens of searches; a site that blocks us is not charged.\n- Нужны 2-5 конкретных значений со страницы → extract (2 кредита): в контекст придут только они, а не вся страница. / A handful of specific values from a page → extract (2 credits): only those values reach your context, not the whole page.\n- Нужно УВИДЕТЬ вёрстку и дизайн → fetch_page (3 кредита). Для текста он избыточен. / You need to SEE the layout and design → fetch_page (3 credits). It is overkill for text.\n- Нужно проверить конкретный факт → verify_claim (8 кредитов): сам найдёт источники, прочитает их и вернёт вердикт с цитатами. / You need to check a specific fact → verify_claim (8 credits): it finds the sources, reads them and returns a verdict with quotes.\n- Нужен разбор темы по многим источникам с готовым ответом → deep_research (20 кредитов + 3 за 1000 output-токенов; идёт долго - обычно 3-10 минут, бывает до 42, поэтому возвращается талон, а ответ забирается по нему бесплатно). / A researched answer across many sources → deep_research (20 credits + 3 per 1000 output tokens; it takes a long time - usually 3-10 minutes, up to 42 - so it returns a ticket and the answer is collected with it for free).\n- Баланс, квота и цены → get_usage (бесплатно, лимит не расходует). / Balance, quota and prices → get_usage (free, does not consume the limit).\n\nДлинные страницы / long pages: read_url отдаёт страницу окнами по maxChars. Не влезло - в конце ответа указан offset, с которым надо вызвать read_url повторно; берите это число как есть, не считайте сами. Так статья или документация любого объёма читается по частям под ваш контекст, и уже прочитанное второй раз не приходит. / read_url returns a page in windows of maxChars. If it did not fit, the end of the response states the offset to call read_url with again; use that number as given, do not compute it yourself. This way an article or documentation of any size is read in parts sized to your context, and you never receive the same text twice.\n\nНебольшой контекст / small context: если ваше окно 32-64k, не набивайте его сырыми страницами. read_url с offset даёт страницу порциями под ваш размер; extract возвращает только нужные поля вместо всего текста; verify_claim переваривает 4-5 источников на нашей стороне и отдаёт вердикт с цитатами. Во всех трёх случаях черновая работа идёт вне вашего контекста. / If your window is 32-64k, do not stuff it with raw pages. read_url with offset serves a page in portions sized to you; extract returns only the fields you asked for instead of the whole text; verify_claim digests 4-5 sources on our side and returns a verdict with quotes. In all three cases the legwork happens outside your context.\n\nОшибка в цитате дороже её отсутствия / a wrong quote costs more than a missing one: verify_claim сверяет каждую цитату с текстом страницы и отбрасывает не найденную. Вердикты unverified и mixed - честный результат, а не сбой: значит, источники утверждение не подтверждают. / verify_claim checks every quote against the page text and drops the ones it cannot find. The unverified and mixed verdicts are honest results, not failures: they mean the sources do not confirm the claim.\n\nЛимиты и тарификация / limits and billing: до 10 запросов за 10 с и 200 вызовов в сутки на ключ (квота считает ВЫЗОВЫ, а не кредиты и не строки журнала: батч read_urls из пяти ссылок - один вызов квоты, но пять операций в журнале и пять списаний, поэтому остаток квоты сверяйте в get_usage, а не по числу строк); батчи read_urls и extract - до 10 ссылок за вызов на платном тарифе и до 5 на бесплатном, каждая ссылка тарифицируется отдельно. Платите только за результат: ошибка и вызов, не принёсший ничего (пустая выдача, проверка без прочитанных источников), не списываются. Точный расход по услугам за сутки и неделю и прайс-лист - в get_usage. / Limits and billing: up to 10 requests per 10 s and 200 calls per day per key (the quota counts CALLS - not credits and not journal rows: a five-link read_urls batch is one quota call but five journal entries and five charges, so read the remaining quota from get_usage rather than from the row count); read_urls and extract batches take up to 10 links per call on a paid plan (5 on the free tier), each link billed separately. You pay for results only: an error, or a call that returned nothing (empty results, a verification that read no sources), is not charged. Exact spending per service for 24 h and a week, plus the price list, are in get_usage.\n\nОшибки приходят текстом с кодом в квадратных скобках: [rate_limited], [read_failed] и т. д. Повторять имеет смысл на [rate_limited] (через указанное число секунд), [upstream_timeout], [search_unavailable] и [service_unavailable] - это временные сбои, а не отсутствие информации. На [bad_request], [schema_invalid], [ssrf_blocked] и [unauthorized] нужно исправить запрос: повтор тем же вызовом ничего не изменит. / Errors arrive as text with a code in square brackets: [rate_limited], [read_failed] and so on. Retrying makes sense for [rate_limited] (after the stated number of seconds), [upstream_timeout], [search_unavailable] and [service_unavailable] - those are temporary outages, not a lack of information. For [bad_request], [schema_invalid], [ssrf_blocked] and [unauthorized] fix the request instead: repeating the same call changes nothing.",
"tools": [
{
"description": "Полный RAG-цикл: поиск источников, семантическое ранжирование через BGE-reranker-v2-m3, чтение релевантных страниц и синтез финального ответа. Возвращает готовый ответ с указанием релевантности каждого источника (0-1).\n\nКогда: нужен итоговый ответ на вопрос, а не список ссылок. Лучше web_search + read_url, когда требуется интерпретация и синтез по нескольким источникам.\nКонвейер: переформулировка запроса → параллельный поиск → BGE-reranker отбирает топ → чтение страниц → синтез ответа.\nВозвращает: текст ответа + sources (каждый с relevance, chars_read, read_success). Источники всегда отсортированы по убыванию relevance.\nЦена зависит от depth: fast - 3 кредита, balanced - 5 кредитов, deep - 10 кредитов.\n\nFull RAG cycle: search, semantic reranking via BGE-reranker-v2-m3, page reading, answer synthesis. Returns a ready answer with relevance scores (0-1) for each source.\n\nUse when: you need a final answer, not a list of links. Better than web_search + read_url when interpretation and synthesis across sources is required.\nPipeline: query rewriting → parallel search → BGE-reranker picks top results → page reading → answer synthesis.\nReturns: answer text + sources (each with relevance, chars_read, read_success). Sources are always sorted by descending relevance.\nCost depends on depth: fast - 3 credits, balanced - 5 credits, deep - 10 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"depth": {
"default": "balanced",
"description": "Глубина: fast (2 страницы), balanced (5 страниц, по умолчанию), deep (10 страниц). Больше страниц - выше качество, дольше время. / Depth: fast (2 pages), balanced (5 pages, default), deep (10 pages). More pages = higher quality, longer time.",
"enum": [
"fast",
"balanced",
"deep"
],
"type": "string"
},
"language": {
"default": "auto",
"description": "Язык поиска и ответа / Search and answer language: auto, ru, en",
"enum": [
"auto",
"ru",
"en"
],
"type": "string"
},
"query": {
"description": "Вопрос или поисковый запрос / Question or search query",
"maxLength": 2000,
"minLength": 1,
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "answer_search",
"outputSchema": null
},
{
"description": "Читает разделы сайта и читает найденные страницы: сначала карта адресов (как в map), затем текст страниц. Один вызов вместо «нашёл ссылку - прочитал - нашёл следующую»: так собирают всё содержимое раздела, а не отдельные страницы.\n\nКогда: нужно содержимое нескольких страниц одного сайта - «собери все события с этого агрегатора», «прочитай раздел документации», «что в этом каталоге». Когда не: нужен только список адресов - map (дешевле, страницы не читаются); нужна одна страница - read_url.\nФильтр search у crawl сравнивается с ТЕКСТОМ прочитанных страниц (не с адресом), а selectPaths/excludePaths отбирают САМИ адреса. Порядок такой: сначала map (увидеть разделы и адреса), затем crawl с selectPaths по нужному разделу и, если надо, с search по тексту.\nВозвращает: pages (адрес, заголовок, текст до 20 000 символов на страницу) и skipped - адреса, которые не прочитались, с причиной. Недоступные страницы не роняют чтение: остальные отдаются, а причина названа.\nЦена: карта (1 кредит за 10 возвращённых адресов, минимум 1) плюс 1 кредит за каждую прочитанную страницу. Не прочиталась - не считается.\n\nCrawls a site and reads the pages it finds: first the URL map (as in map), then the page text. One call instead of \"found a link - read it - found the next one\": this is how you collect a whole section rather than single pages.\n\nUse when: you need the content of several pages of one site - \"collect every event from this aggregator\", \"read this docs section\". Do not use when: you only need the list of URLs - map (cheaper, no page reads); you need one page - read_url.\nThe search filter here matches the TEXT of the pages read (not the URL): search: \"conference\" keeps pages that mention it. So the order is: map with a URL filter first (to see the structure), then crawl with a text filter.\nReturns: pages (URL, title, up to 20 000 chars of text each) and skipped - URLs that could not be read, with the reason. Unreachable pages do not break the crawl: the rest are returned and the reason is stated.\nCost: the map (1 credit per 10 URLs returned, minimum 1) plus 1 credit per page read. A page that failed to read is not counted.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"excludePaths": {
"description": "Не читать страницы, чей адрес содержит любую из этих подстрок. / Do not read pages whose URL contains any of these substrings.",
"items": {
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"includeSubdomains": {
"description": "Считать своими и поддомены. / Treat subdomains as own.",
"type": "boolean"
},
"intent": {
"description": "Задача клиента словами: «страницы организаторов конференций», «все события», \"только вакансии\". Адреса карты упорядочиваются по смыслу, и читаются первые `limit` - так прицельное чтение работает там, где у нужных страниц нет общего фрагмента пути и `selectPaths` не находит ничего (замер 03.10.2026: 0/4 у подстроки против 4/4 в первых строках у отбора по смыслу). Работает, только если на сервере включён JEV_INTENT. / Plain-language goal for the section. The URL list is ranked by meaning and the first `limit` pages are read - use it when selectPaths finds nothing because the wanted pages share no common path fragment. Ignored unless enabled server-side.",
"maxLength": 300,
"type": "string"
},
"limit": {
"description": "Сколько страниц прочитать (1-20, по умолчанию 5). / How many pages to read (1-20, default 5).",
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"search": {
"description": "Оставить страницы, в тексте или заголовке которых есть эти слова (фильтр по СОДЕРЖИМОМУ прочитанного). / Keep pages whose text or title contains these words (a filter over the CONTENT read).",
"type": "string"
},
"selectPaths": {
"description": "Читать только страницы, адрес которых содержит любую из этих подстрок - это и есть прицельное чтение раздела. Без него crawl читает первые адреса карты, а у агрегаторов это служебные страницы, а не события. / Read only pages whose URL contains any of these substrings - this is how you target a section. Without it crawl reads the first URLs of the map, which on aggregators are service pages, not events.",
"items": {
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"url": {
"description": "Сайт или страница (http/https) / Site or page URL",
"format": "uri",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "crawl",
"outputSchema": null
},
{
"description": "Проводит многошаговое исследование: сам формулирует запросы, ищет, читает источники и возвращает готовый связный ответ со ссылками на использованные страницы.\n\nКогда: вопрос требует сопоставления нескольких источников и вывода - «сравни», «разберись», «что известно о». Когда не: нужен один факт или список ссылок - это web_search, он в 20 раз дешевле и отвечает за секунды.\nКак это работает: исследование идёт долго - по замерам от 13 секунд (простой факт) до 42 минут, обычно 3-10 минут, и это дольше, чем живёт одно соединение. Поэтому инструмент запускает задачу и ждёт 45 секунд. Если за это время ответ готов - возвращает его сразу. Если нет - возвращает строку с пометкой `[research_pending]` и талоном (ticket). Тогда вызовите этот же инструмент ещё раз, передав ticket (query можно не повторять), чтобы дождаться готового результата; опрашивайте с паузой в минуту-две, пока не придёт ответ. Такой дозабор по талону НЕ списывается заново - деньги берутся один раз, за саму задачу. Если незавершённая задача висит больше 90 минут, инструмент честно скажет, что она зависла, - тогда имеет смысл перезапустить вопрос или сузить его.\nВозвращает: текст ответа плюс список источников. Если источники не вернулись, в ответе будет предупреждение - такой вывод не считается проверенным.\nЦена: 20 кредитов плюс 3 за каждую 1000 токенов ответа - самый дорогой вызов. Списывается один раз за задачу; повтор ТЕМЫ (новый query) - новая задача и новое списание, а дозабор по ticket бесплатен.\n\nRuns multi-step research: forms its own queries, searches, reads sources and returns a finished answer with links to the pages it used.\n\nUse when: the question needs several sources reconciled into a conclusion - \"compare\", \"analyse\", \"what is known about\". Do not use when: you need a single fact or a list of links - that is web_search, 20× cheaper and seconds fast.\nHow it works: research takes a long time - measured from 13 seconds (a simple fact) to 42 minutes, usually 3-10 minutes, which is longer than a single connection lives. So the tool starts the job and waits 45 seconds. If the answer is ready by then, it returns it. If not, it returns a string marked `[research_pending]` with a ticket. Call this same tool again passing that ticket (you may omit query) to wait for the finished result; poll with a minute or two between calls until it arrives. Polling by ticket is NOT charged again - you pay once, for the job itself. If an unfinished job has been hanging for more than 90 minutes, the tool says so honestly - then restart the question or narrow it.\nReturns: the answer text plus a source list. If no sources came back the response says so - treat that output as unverified.\nCost: 20 credits plus 3 per 1000 output tokens - the most expensive call. Charged once per job; repeating the TOPIC (a new query) is a new job and a new charge, while polling by ticket is free.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"query": {
"description": "Вопрос или тема исследования. Обязателен для НОВОГО исследования; при дозаборе по ticket не нужен. / The question or research topic. Required to START research; omit it when polling by ticket.",
"maxLength": 2000,
"type": "string"
},
"ticket": {
"description": "Талон незавершённой задачи из прошлого ответа `[research_pending]`. Передайте его, чтобы дождаться готового результата - бесплатно, без нового списания. / Ticket of an unfinished job from a previous `[research_pending]` response. Pass it to wait for the finished result - free, no new charge.",
"type": [
"string",
"number"
]
}
},
"type": "object"
},
"name": "deep_research",
"outputSchema": null
},
{
"description": "Читает страницу и возвращает JSON строго по вашей схеме: только запрошенные поля, без текста страницы. Чего на странице нет - приходит null, значения не домысливаются.\n\nКогда: нужны 2-5 конкретных значений - цена, характеристики, автор и дата, список вакансий. Экономит контекст: вместо всей страницы придут только поля. Когда не: нужен связный текст или вы не знаете заранее, что искать, - read_url (и в 4 раза дешевле).\nСхема: принимается и сокращённая форма - {\"title\":\"string\",\"price\":\"number?\"}, где «?» делает поле необязательным, а «[]» - массивом; полный JSON Schema тоже работает. Описания полей заметно повышают точность разбора.\nВозвращает: объект по схеме на каждую ссылку. Можно передать до 10 ссылок разом (на бесплатном тарифе до 5) - одна схема применится ко всем.\nЦена: 2 кредита за каждую ссылку (чтение плюс разбор моделью).\n\nReads a page and returns JSON strictly following your schema: only the requested fields, no page text. Anything absent from the page comes back as null - values are never invented.\n\nUse when: you need a handful of specific values - price, specs, author and date, a list of job openings. It saves context: you get the fields, not the page. Do not use when: you need prose, or you do not know in advance what to look for - read_url (and 4× cheaper).\nSchema: a shorthand form is accepted - {\"title\":\"string\",\"price\":\"number?\"}, where \"?\" marks a field optional and \"[]\" an array; full JSON Schema works too. Field descriptions noticeably improve extraction accuracy.\nReturns: one object per link, shaped by your schema. Up to 10 links per call (5 on the free tier), one schema applied to all.\nCost: 2 credits per link (page read plus model parsing).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"engine": {
"description": "Как забирать страницу: auto (по умолчанию), fast, dynamic, stealth. / How to fetch the page: auto (default), fast, dynamic, stealth.",
"enum": [
"auto",
"fast",
"dynamic",
"stealth"
],
"type": "string"
},
"instruction": {
"description": "Уточнение для разбора, если из схемы неочевидно: «бери цену со скидкой», «только вакансии удалённо». / A parsing hint when the schema alone is ambiguous: «use the discounted price», «remote positions only».",
"maxLength": 1000,
"type": "string"
},
"schema": {
"description": "Схема результата. Проще всего - сокращённая форма: {\"title\":\"string\",\"price\":\"number?\",\"tags\":\"string[]\"}, где «?» помечает поле необязательным, а «[]» - массивом. Полный JSON Schema тоже принимается: {\"type\":\"object\",\"properties\":{\"price\":{\"type\":\"number\",\"description\":\"цена в рублях\"}},\"required\":[\"price\"]}. Типы: string, number, integer, boolean, array, object. Описания полей заметно повышают точность. / The result schema. The simplest form is shorthand: {\"title\":\"string\",\"price\":\"number?\",\"tags\":\"string[]\"}, where «?» marks the field optional and «[]» marks an array. Full JSON Schema is accepted too. Types: string, number, integer, boolean, array, object. Field descriptions noticeably improve accuracy."
},
"url": {
"description": "URL страницы (http/https) / Page URL (http/https)",
"format": "uri",
"type": "string"
},
"urls": {
"description": "Список URL (1-10) вместо url - одна схема на все страницы. Лишнее отбрасывается по тарифу: на бесплатном берём 5, на платном больше. Каждая страница тарифицируется отдельно. / A list of URLs (1-10) instead of url - one schema for all pages; the rest is cut by plan (5 on the free tier). Each page is billed separately.",
"items": {
"format": "uri",
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
}
},
"type": "object"
},
"name": "extract",
"outputSchema": null
},
{
"description": "Открывает страницу полноценным браузером и возвращает скриншот картинкой прямо в ответе, ссылку на полноразмерный файл и текст страницы в markdown.\n\nКогда: нужно УВИДЕТЬ страницу - раскладку, цвета, типографику, визуальную иерархию: «повтори дизайн как здесь», «что не так с вёрсткой». Когда не: нужен только текст - read_url (1 кредит против 3, и быстрее); нужны отдельные значения - extract.\nВозвращает: изображение плюс текст. Картинка занимает много контекста, поэтому для чтения этот инструмент избыточен.\nЕсли браузер не успел отрендерить страницу, вернём её текст (то же, что даёт read_url), скажем об этом прямо и спишем 1 кредит вместо 3.\nЦена: 3 кредита (1, если скриншот не получился).\n\nOpens the page in a full browser and returns a screenshot as an inline image, a link to the full-size file, and the page text in markdown.\n\nUse when: you need to SEE the page - layout, colours, typography, visual hierarchy: \"match this design\", \"what looks broken here\". Do not use when: you only need text - read_url (1 credit vs 3, and faster); you need specific values - extract.\nReturns: an image plus text. The image consumes a lot of context, which makes this tool overkill for reading.\nIf the browser fails to render the page, its text is returned instead (the same as read_url), the reply says so, and 1 credit is charged instead of 3.\nCost: 3 credits (1 if the screenshot could not be captured).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"maxChars": {
"description": "Сколько символов текста вернуть (200-50000, по умолчанию 4000). Поднимите, если нужен полный текст страницы, а не только начало. / How many characters of text to return (200-50000, default 4000). Raise it if you need the whole page text, not just the beginning.",
"maximum": 50000,
"minimum": 200,
"type": "integer"
},
"url": {
"description": "Полный URL страницы (http/https) / Full page URL (http/https)",
"format": "uri",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "fetch_page",
"outputSchema": null
},
{
"description": "Баланс, остаток суточной квоты, время сброса окна, burst-лимит и расход за последние сутки и неделю - по услугам, в кредитах. Ответ - компактный JSON (машиночитаемые поля первыми). verbose: true - тот же отчёт человеческим текстом вместе с полным прайс-листом.\n\nКогда: вызов упал с [rate_limited] и надо понять, ждать секунды или до следующих суток; пользователь спрашивает про баланс и расходы; надо сверить свой лог вызовов с нашими списаниями; планируется большой батч.\nВозвращает: balance_credits, план, quota (used/limit/remaining/reset_min), burst, last24h (calls/credits/free и разбивка by_service) и week_credits. Без verbose прайс-листа в ответе нет - цены каждой услуги описаны у самой услуги, а здесь только то, что меняется от вызова к вызову.\nТарификация: платите только за результат - ошибка и вызов, не принёсший ничего (пустая выдача, проверка без прочитанных источников), не списываются. Квота считает ВЫЗОВЫ, а не кредиты: 10 за 10 с и 200 в сутки на ключ.\nЦена: бесплатно, квоту и лимит запросов этот вызов не расходует - его можно звать без опасений.\n\nBalance, remaining daily quota, window reset time, burst limit and spending for the last 24 hours and the last week, per service, in credits. The answer is compact JSON (machine-readable fields first). verbose: true gives the same report as human-readable text together with the full price list.\n\nUse when: a call failed with [rate_limited] and you need to know whether to wait seconds or until tomorrow; the user asks about balance or spending; you need to reconcile your own call log with our charges; you are about to run a large batch.\nReturns: balance_credits, plan, quota (used/limit/remaining/reset_min), burst, last24h (calls/credits/free plus a by_service breakdown) and week_credits. Without verbose there is no price list: each service's price is described with that service, and this answer carries only what changes between calls.\nBilling: you pay for results only - an error, or a call that returned nothing (empty search results, a verification that read no sources), is not charged. The quota counts CALLS, not credits: 10 per 10 s and 200 per day per key.\nCost: free - this call consumes neither quota nor rate limit, so call it freely.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"verbose": {
"description": "true - полный человекочитаемый отчёт с прайс-листом всех инструментов. По умолчанию компактный JSON без прайс-листа. / true - the full human-readable report with the price list of every tool. Default is compact JSON without the price list.",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_usage",
"outputSchema": null
},
{
"description": "Ищет изображения по текстовому запросу и возвращает прямые ссылки на файлы, страницу-источник и разрешение.\n\nКогда: нужны картинки, фотографии, логотипы, схемы. Когда не: нужен текст или факты - web_search; нужно увидеть, как выглядит конкретная страница, - fetch_page.\nВозвращает: только ссылки и метаданные - файлы не скачиваются и в ответе не появляются. Ставьте num: 1-3, если картинка нужна одна: по умолчанию 12, максимум 48, и полный список занимает десятки килобайт контекста.\nЦена: 1 кредит за вызов, независимо от num.\n\nSearches for images by a text query and returns direct file links, the source page and resolution.\n\nUse when: you need pictures, photos, logos or diagrams. Do not use when: you need text or facts - web_search; you need to see what a specific page looks like - fetch_page.\nReturns: links and metadata only - files are never downloaded or embedded in the response. Pass num: 1-3 when you need a single image: the default is 12, the maximum 48, and a full list costs tens of kilobytes of context.\nCost: 1 credit per call regardless of num.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"num": {
"description": "Сколько картинок вернуть (1-48, по умолчанию 12). Нужна одна картинка - просите 1-3, не тратьте контекст. / How many images to return (1-48, default 12). Need just one - ask for 1-3 and save context.",
"maximum": 48,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "Что искать / What to search for",
"maxLength": 300,
"minLength": 1,
"type": "string"
},
"safe": {
"description": "Безопасный поиск / Safe search (on by default)",
"type": "boolean"
},
"timeRange": {
"description": "Свежесть / Recency: all, day, week, month, year",
"enum": [
"all",
"day",
"week",
"month",
"year"
],
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "image_search",
"outputSchema": null
},
{
"description": "Собирает адреса страниц сайта: robots.txt → Sitemap:, затем /sitemap.xml и /sitemap_index.xml (включая вложенные карты), а если карт нет - ссылки со стартовой страницы. Возвращает найденные адреса, их общее число и разбивку по разделам: по ней видно, где на сайте что лежит.\n\nКогда: известен сайт, а не страница - «собрать все события с агрегатора», «какие разделы есть на сайте», «дай мне список страниц для чтения». Когда не: нужен текст страниц - crawl (он читает найденное); нужен ответ по теме без привязки к сайту - web_search.\nФильтр search сравнивает подстроку с АДРЕСОМ (страницы мы не читаем), поэтому для русских сайтов указывайте часть латинского пути: search: \"organizers\" вместо «организаторы». Один вызов читает до 8 карт сайта: если сайт отдаёт больше, в ответе это сказано, а разделы показывают, куда идти дальше.\nВозвращает: pages (до limit адресов), total (сколько нашлось всего), sections (разделы с числом адресов), source (sitemap или links) и outcome: ok, blocked (сайт отвечает 403 - это не «страниц нет»), unreachable, empty.\nЦена: 1 кредит за каждые 10 возвращённых адресов, минимум 1 (200 адресов - 20 кредитов). Сайт, который нас не пустил, не тарифицируется: результата нет.\n\nCollects a site's page URLs: robots.txt → Sitemap:, then /sitemap.xml and /sitemap_index.xml (including nested maps), and the start page's links when there are no maps. Returns the URLs, the total count, and a breakdown by section, which shows what lives where.\n\nUse when: you know the site, not the page - \"collect every event from this aggregator\", \"what sections does this site have\", \"give me the URLs to walk\". Do not use when: you need the page text - crawl (it reads what map found); you need an answer about a topic - web_search.\nThe search filter matches against the URL (map does not read pages), so for Russian sites pass part of the Latin path: search: \"organizers\". One call reads up to 8 sitemaps: if the site offers more, the answer says so, and sections show where to go next.\nReturns: pages (up to limit URLs), total (all found), sections (sections with URL counts), source (sitemap or links) and outcome: ok, blocked (the site answers 403 - that is not \"no pages\"), unreachable, empty.\nCost: 1 credit per 10 URLs returned, minimum 1 (200 URLs - 20 credits). A site that blocks us is not charged: there is no result.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"excludePaths": {
"description": "Выбросить адреса, содержащие любую из этих подстрок: архивы, теги, служебные разделы. / Drop URLs containing any of these substrings: archives, tags, service sections.",
"items": {
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"includeSubdomains": {
"description": "Считать своими и поддомены (по умолчанию только тот же хост). / Treat subdomains as own (by default only the same host).",
"type": "boolean"
},
"intent": {
"description": "Задача клиента словами: «страницы организаторов конференций», «все события», \"только вакансии\". Список адресов упорядочивается по смыслу под эту задачу, явный шум отсекается. Нужно там, где `selectPaths` бессилен: если у нужных страниц нет общего фрагмента пути, подстрока не найдёт ничего - на замере 03.10.2026 это 0/4, а упорядочивание по смыслу дало 4 нужных из 4 в первых строках. Работает, только если на сервере включён JEV_INTENT; иначе параметр игнорируется. / Plain-language goal for the section, e.g. \"conference organizer pages\". Ranks the URL list by meaning and drops obvious noise; use it when selectPaths cannot work because the wanted pages share no common path fragment. Ignored unless enabled server-side.",
"maxLength": 300,
"type": "string"
},
"limit": {
"description": "Сколько адресов вернуть (1-200, по умолчанию 50). total показывает, сколько нашлось всего. / How many URLs to return (1-200, default 50). total shows how many were found.",
"maximum": 200,
"minimum": 1,
"type": "integer"
},
"search": {
"description": "Оставить адреса, содержащие эту подстроку (регистр и «ё» не важны; слова через пробел ищутся по отдельности). Фильтр по адресу, не по тексту страницы. / Keep URLs containing this substring (case- and ё-insensitive; space-separated words are matched individually). It filters URLs, not page text.",
"type": "string"
},
"selectPaths": {
"description": "Оставить только адреса, содержащие любую из этих подстрок (по одной на элемент). Так целятся в раздел: selectPaths: [\"organizers\"] на агрегаторе событий оставит 3565 адресов организаторов вместо служебных страниц. / Keep only URLs containing any of these substrings (one per item). This is how you aim at a section.",
"items": {
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"url": {
"description": "Сайт или страница (http/https) / Site or page URL",
"format": "uri",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "map",
"outputSchema": null
},
{
"description": "Открывает одну страницу по известному адресу и возвращает её текст чистым markdown - без навигации, рекламы, скриптов и HTML. JavaScript выполняется на нашей стороне, поэтому SPA тоже читаются.\n\nКогда: адрес известен и нужен текст - статья, документация, карточка товара. Когда не: адреса нет - сначала web_search; страниц несколько - read_urls (один вызов вместо пяти); нужны 2-5 конкретных полей - extract (в контекст придут только они); нужно увидеть вёрстку - fetch_page.\nВозвращает: заголовок и текст, по умолчанию первые 4000 символов. Длинная страница приходит по частям: в конце ответа указано значение offset, с которым надо вызвать тул повторно, чтобы получить продолжение. Так документ любого объёма читается окнами под ваш контекст, без повторной оплаты уже прочитанного.\nЦена: 1 кредит, самый дешёвый способ получить содержимое страницы (fetch_page - 3).\n\nOpens a single page by a known URL and returns its text as clean markdown - no navigation, ads, scripts or HTML. JavaScript is executed on our side, so SPAs read fine too.\n\nUse when: you have the URL and need the text - an article, documentation, a product page. Do not use when: you have no URL - start with web_search; you have several pages - read_urls (one call instead of five); you need a handful of specific fields - extract (only those reach your context); you need to see the layout - fetch_page.\nReturns: title and text, the first 4000 characters by default. A long page arrives in windows: the end of the response states the offset to call the tool with again to get the continuation. That way a document of any size is read in windows sized to your context, without paying twice for what you already read.\nCost: 1 credit - the cheapest way to get page content (fetch_page costs 3).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"engine": {
"description": "Как забирать страницу: auto (по умолчанию - начинает с быстрого способа и сам поднимается, если текста не оказалось), fast (быстро, для статики и документации), dynamic (ждёт отрисовки JS - для SPA), stealth (медленно, максимально браузерное поведение). Указывайте явно только если знаете сайт. / How to fetch the page: auto (default - starts with the fast path and escalates on its own if no text came back), fast (static sites and docs), dynamic (waits for JS rendering - for SPAs), stealth (slow, most browser-like). Set it explicitly only if you know the site.",
"enum": [
"auto",
"fast",
"dynamic",
"stealth"
],
"type": "string"
},
"fresh": {
"description": "Прочитать страницу заново, не беря недавно прочитанный текст. Нужно, когда страница только что изменилась. На цену не влияет: кредит списывается в любом случае. / Read the page anew instead of using recently read text. Use it when the page has just changed. Does not affect the price: the credit is charged either way.",
"type": "boolean"
},
"maxChars": {
"description": "Сколько символов текста вернуть (200-50000, по умолчанию 4000). Поднимите, если нужен полный текст, а не только начало. / How many characters of text to return (200-50000, default 4000). Raise it if you need the whole text, not just the beginning.",
"maximum": 50000,
"minimum": 200,
"type": "integer"
},
"offset": {
"description": "С какого символа продолжить чтение. Берите значение из предыдущего ответа этого тула («продолжить: offset N»), не считайте сами. Пусто - с начала страницы. / Where to resume reading. Take the value from this tool's previous response (\"continue: offset N\"), do not compute it yourself. Empty - from the start of the page.",
"minimum": 0,
"type": "integer"
},
"url": {
"description": "Полный URL страницы (http/https) / Full page URL",
"format": "uri",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "read_url",
"outputSchema": null
},
{
"description": "Читает пачку страниц (до 10 за вызов; на бесплатном тарифе до 5) параллельно и возвращает текст каждой чистым markdown. То же, что read_url, но одним вызовом вместо нескольких - заметно быстрее по общему времени.\n\nКогда: на руках список ссылок, например топ выдачи web_search. Когда не: страница одна - read_url; нужны отдельные поля, а не текст, - extract (он тоже принимает список).\nВозвращает: текст по каждой странице. Частичный успех - норма: упавшие ссылки не рвут вызов, а перечисляются отдельным блоком «Не прочитано» с кодом ошибки. Дубликаты и ссылки сверх лимита отбрасываются, их число указано в ответе. Длинные страницы обрезаются по maxChars; дочитывать их удобнее по одной через read_url с offset - в батче offset один на все ссылки.\nЦена: 1 кредит за каждую ссылку - пять страниц стоят пять кредитов. Не отправляйте ссылки «на всякий случай».\n\nReads a batch of pages (up to 5 per call) in parallel and returns each one's text as clean markdown. Same as read_url but in a single call - markedly faster in total wall-clock.\n\nUse when: you have a list of links, e.g. the top web_search results. Do not use when: there is only one page - read_url; you need specific fields rather than text - extract (it also accepts a list).\nReturns: text per page. Partial success is normal: failed links do not fail the call, they are listed in a separate \"not read\" block with an error code. Duplicates and links beyond the limit are dropped and the count is reported. Long pages are cut at maxChars; finish reading them one at a time via read_url with offset - in a batch the offset applies to every link at once.\nCost: 1 credit per link - five pages cost five credits. Do not pad the list.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"engine": {
"description": "Как забирать страницы: auto (по умолчанию), fast, dynamic, stealth. Применяется ко всем ссылкам батча. / How to fetch the pages: auto (default), fast, dynamic, stealth. Applies to every link in the batch.",
"enum": [
"auto",
"fast",
"dynamic",
"stealth"
],
"type": "string"
},
"fresh": {
"description": "Читать все страницы батча заново, не беря недавно прочитанный текст. На цену не влияет. / Read every page in the batch anew instead of using recently read text. Does not affect the price.",
"type": "boolean"
},
"maxChars": {
"description": "Сколько символов текста вернуть с КАЖДОЙ страницы (200-50000, по умолчанию 4000). На батче ставьте скромнее: пять больших страниц вытеснят из контекста всё остальное. / How many characters to return from EACH page (200-50000, default 4000). Keep it modest on a batch: five large pages will crowd everything else out of your context.",
"maximum": 50000,
"minimum": 200,
"type": "integer"
},
"urls": {
"description": "Список URL (1-10). Дубликаты отбрасываются, лишнее отбрасывается по тарифу: на бесплатном берём 5, на платном 10. / A list of URLs (1-10). Duplicates are dropped; the rest is cut by plan: 5 on the free tier, 10 on paid.",
"items": {
"format": "uri",
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
}
},
"required": [
"urls"
],
"type": "object"
},
"name": "read_urls",
"outputSchema": null
},
{
"description": "Проверяет утверждение: ищет источники, читает несколько независимых страниц и возвращает вердикт с дословными цитатами. Каждая цитата сверена с текстом страницы - не найденная в тексте отбрасывается вместе со своим доводом.\n\nКогда: факт, который нельзя брать на веру - цифра, дата, «X поддерживает Y», утверждение из ответа пользователя или из вашей же памяти. Особенно если ваш контекст не вмещает 4-5 страниц целиком: вся черновая работа делается на нашей стороне, к вам приходят только вердикт и цитаты. Когда не: нужен обзор темы - deep_research; нужен текст конкретной страницы - read_url.\nВердикт: supported - источники подтверждают; refuted - опровергают; mixed - расходятся между собой; unverified - подтверждения не нашлось. Последние два - нормальный результат, а не ошибка: значит, утверждение нельзя считать проверенным.\nСчитает в независимых доменах: три цитаты с одного сайта - один голос. Смотрите agreeing/disagreeing и confidence, а не только вердикт.\nЕсли сайт не открылся, слот не теряется: берём следующего кандидата из выдачи, поэтому прочитанных источников обычно ровно столько, сколько вы заказали. Когда проверка всё же вышла неполной, это сказано в вердикте и в caveats.\nВозвращает: вердикт, уверенность, цитаты со ссылками и оговорки. Источников - 2-5.\nВремя: 15-60 с / 15-60 s. Цена: 8 кредитов (поиск, чтение источников и работа модели).\n\nVerifies a statement: searches for sources, reads several independent pages and returns a verdict with verbatim quotes. Every quote is checked against the page text - one that is not found there is dropped along with its argument.\n\nUse when: a fact you should not take on trust - a number, a date, \"X supports Y\", a claim from the user or from your own memory. Especially when your context cannot hold 4-5 pages at once: the legwork happens on our side, you receive only the verdict and the quotes. Do not use when: you need an overview of a topic - deep_research; you need the text of one specific page - read_url.\nVerdict: supported - the sources confirm it; refuted - they contradict it; mixed - they disagree with each other; unverified - no confirmation was found. The last two are normal outcomes, not errors: they mean the claim cannot be treated as verified.\nCounted in independent domains: three quotes from one site are one voice. Read agreeing/disagreeing and confidence, not just the verdict.\nIf a site does not open, the slot is not lost: the next candidate from the search results is read instead, so you usually get exactly the number of sources you asked for. When the check still came out incomplete, the verdict and the caveats say so.\nReturns: verdict, confidence, quotes with links and caveats. Sources: 2-5.\nTime: 15-60 с / 15-60 s. Cost: 8 credits (search, source reading and model work).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"claim": {
"description": "Утверждение одной фразой, как проверяемый факт: «Node.js 22 - LTS», «ставка НДС для IT-услуг в России 20%». Не вопрос и не тема: чем конкретнее формулировка, тем точнее проверка. / The statement as a single sentence, phrased as a checkable fact: \"Node.js 22 is LTS\". Not a question and not a topic: the more specific the wording, the sharper the check.",
"maxLength": 500,
"minLength": 1,
"type": "string"
},
"language": {
"description": "Язык поиска источников / Source search language: auto, ru, en",
"enum": [
"auto",
"ru",
"en"
],
"type": "string"
},
"maxSources": {
"description": "Сколько независимых источников читать (2-5, по умолчанию 4). Меньше - быстрее, больше - надёжнее. На цену не влияет. / How many independent sources to read (2-5, default 4). Fewer is faster, more is sturdier. Does not affect the price.",
"maximum": 5,
"minimum": 2,
"type": "integer"
},
"query": {
"description": "Свой поисковый запрос, если утверждение плохо ищется как есть (длинное, со сленгом). По умолчанию ищем по тексту утверждения. / A custom search query when the claim searches poorly as written (long, slangy). By default the claim text itself is the query.",
"maxLength": 300,
"type": "string"
},
"timeRange": {
"description": "Свежесть источников - для утверждений, которые могли устареть (цены, версии, должности): all, day, week, month, year. / Source recency - for claims that may have gone stale (prices, versions, job titles): all, day, week, month, year.",
"enum": [
"all",
"day",
"week",
"month",
"year"
],
"type": "string"
}
},
"required": [
"claim"
],
"type": "object"
},
"name": "verify_claim",
"outputSchema": null
},
{
"description": "Ищет страницы в живом вебе по текстовому запросу и возвращает ранжированный список: заголовок, ссылка, фрагмент. Сильное покрытие русскоязычного веба.\n\nКогда: нужны свежие факты, ссылки или данные новее вашей отсечки знаний. Когда не: адрес страницы уже известен - это read_url; нужны 2-5 конкретных значений - extract; нужен готовый разбор темы со сносками - deep_research.\nВозвращает: до 30 результатов текстом, без содержимого страниц. У каждого результата - домен, дата публикации (когда движок её отдаёт) и rel - лексическая релевантность запросу [0..1], по ней список и отсортирован. Дат нет у части выдачи: это ограничение движков, а не признак старой страницы.\nС excerpts: true добавляет реальный текст топ-страниц (+3-10 с), это часто экономит последующий вызов read_url. Если этого мало - chunksPerSource (0-5) читает страницу глубже (600 × N символов против 1200 у excerpt) и отдаёт несколько кусков на результат, а includeRawContent - полный текст страницы (до 20 000 символов, берите 1-3 результата). Всё читается в том же вызове и цены не меняет: дешевле, чем идти за текстом по одной ссылке.\nСвежесть: timeRange (day/week/month/year) или точные границы publishedAfter / publishedBefore - фильтр по дате публикации на нашей стороне; страницы без даты в окно не проходят, и в ответе сказано, сколько таких отброшено.\nЦена: 1 кредит за вызов, независимо от num. Выдача живая, поэтому повтор того же запроса даёт другой результат и списывается снова.\n\nSearches the live web by a text query and returns ranked results: title, link, snippet. Strong coverage of the Russian-language web.\n\nUse when: you need fresh facts, links or data past your knowledge cutoff. Do not use when: you already know the page URL - that is read_url; you need a handful of specific values - extract; you need a written answer across many sources - deep_research.\nReturns: up to 30 results as text, without page content. Each result carries its domain, its publication date when the engine provides one, and rel - lexical relevance to the query [0..1], which is what the list is sorted by. Part of the results have no date: that is an engine limitation, not a sign of an old page.\nWith excerpts: true it also pulls the actual text of the top pages (+3-10 s), which often saves a follow-up read_url. If that is not enough, chunksPerSource (0-5) reads the page deeper (600 × N chars versus 1200 for excerpt) and returns several chunks per result, and includeRawContent returns the full page text (up to 20 000 chars - ask for 1-3 results). Everything is read inside the same call and does not change the price: cheaper than fetching each link.\nFreshness: timeRange (day/week/month/year) or exact bounds publishedAfter / publishedBefore - a publication-date filter on our side; pages without a date do not pass, and the answer states how many were dropped.\nCost: 1 credit per call regardless of num. Results are live, so repeating the same query returns different results and is billed again.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"category": {
"description": "Категория / Category: general, news, it, science",
"enum": [
"general",
"news",
"it",
"science"
],
"type": "string"
},
"chunksPerSource": {
"description": "Сколько кусков текста вернуть на каждый из топ-4 результатов (0-5, по умолчанию 0). Куски вырезаны из страницы по релевантности запросу и ранжированы: один вызов даёт контекст, за которым иначе пришлось бы идти read_url. Цена вызова не меняется. / How many text chunks to return per top-4 result (0-5, default 0). Chunks are cut from the page by query relevance and ranked, so one call carries the context you would otherwise fetch with read_url. The call price does not change.",
"maximum": 5,
"minimum": 0,
"type": "integer"
},
"depth": {
"description": "Глубина: auto (по умолчанию, больше движков и результатов) или flash (быстрее, узкая выдача - для одного факта). / Depth: auto (default, more engines and results) or flash (faster, narrow - for a single fact).",
"enum": [
"flash",
"auto"
],
"type": "string"
},
"excerpts": {
"description": "Забрать реальный текст топ-страниц под запрос (+3-10 с: страницы читаются параллельно, потолок - таймаут страницы). По умолчанию выкл. / Pull the actual text of the top pages for this query (+3-10 s: pages are read in parallel, per-page timeout caps it). Off by default.",
"type": "boolean"
},
"excludeDomains": {
"description": "Исключить эти сайты и их поддомены: [\"pinterest.com\"]. До 10 доменов. / Exclude these sites and their subdomains. Up to 10 domains.",
"items": {
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"includeDomains": {
"description": "Искать только на этих сайтах, вместе с поддоменами: [\"habr.com\", \"vc.ru\"]. До 10 доменов. / Search only these sites, including subdomains. Up to 10 domains.",
"items": {
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"includeRawContent": {
"description": "Вернуть полный текст страницы для топ-4 результатов (до 20 000 символов на каждый) - замена отдельному чтению. По умолчанию выкл. Осторожно с num: это десятки тысяч токенов, берите 1-3 результата. / Return the full page text for the top-4 results (up to 20 000 chars each) instead of fetching pages separately. Off by default. Mind num: this is tens of thousands of tokens, ask for 1-3 results.",
"type": "boolean"
},
"language": {
"description": "Язык / Language: auto, ru, en",
"enum": [
"auto",
"ru",
"en"
],
"type": "string"
},
"num": {
"description": "Сколько результатов (1-30) / How many results (1-30)",
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"publishedAfter": {
"description": "Нижняя граница даты публикации, YYYY-MM-DD включительно. Сильнее timeRange, если заданы обе. / Publication date lower bound, YYYY-MM-DD inclusive. Overrides timeRange when both are given.",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"publishedBefore": {
"description": "Верхняя граница даты публикации, YYYY-MM-DD включительно. / Publication date upper bound, YYYY-MM-DD inclusive.",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"query": {
"description": "Поисковый запрос / Search query",
"maxLength": 300,
"minLength": 1,
"type": "string"
},
"timeRange": {
"description": "Свежесть по дате публикации: day, week, month, year - окно от сегодняшнего дня (1/7/30/365 дней), all (по умолчанию) - без ограничения. Фильтр применяем мы, а не движок: страницы без даты публикации в окно не проходят, и в ответе написано, сколько таких отброшено. / Freshness by publication date: day, week, month, year - a window from today (1/7/30/365 days), all (default) means no limit. The filter is applied by us, not by the engine: pages without a publication date do not pass, and the answer states how many were dropped.",
"enum": [
"all",
"day",
"week",
"month",
"year"
],
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "web_search",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:c338e614876cf113f81a280d1d70d91c17b83ca8ee45bb10f93d771ffdd4b5bf | sha256sum