docs: refresh translations, and translate pages in parallel (#3458)

This commit is contained in:
Max 2026-09-07 13:35:53 +01:00 • committed by GitHub
commit fd66270926
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 4821 additions and 2277 deletions

View file

@ -1,6 +1,6 @@
---
translation:
sections: [74011e683045eea9, 9b64cc175c18b6a9, 4b41be4824030397, e3b1502da786ec33, 71e41161f143c6a9, 9ec2c1eeb8c36378, 8dd027377d46448b, f81491125dcbfe8b]
sections: [74011e683045eea9, 9b64cc175c18b6a9, 4b41be4824030397, e3b1502da786ec33, 71e41161f143c6a9, 9ec2c1eeb8c36378, b47667184ca5b516, f81491125dcbfe8b]
tool: 1
---
# Багатораундові запити {#multi-round-trip-requests}
@ -164,7 +164,7 @@ TTL, прив'язка до принципала й прив'язка до за
## Результат версії 2026-07-28 {#a-2026-07-28-result}
`InputRequiredResult` існує лише у версії протоколу **2026-07-28**. `Client(server)` у пам'яті узгоджує її за вас; мережею її виявляє `mode="auto"`. Після під'єднання `client.protocol_version` покаже, що саме ви отримали.
`InputRequiredResult` існує лише у версії протоколу **2026-07-28**. Режим `mode="auto"`, типовий для `Client`, виявляє її на будь-якому з'єднанні. Після під'єднання `client.protocol_version` покаже, що саме ви отримали.
!!! warning
У сесії, старшій за 2026, `InputRequiredResult` просто нікуди покласти. Поверніть його з обробника на

View file

@ -1,6 +1,6 @@
---
translation:
sections: [5315262fe26b33e1, 9d8e98840f1b78f0, 0284b215e85366c4, 8534d8dbb4053a70, 2966fac6fe697007]
sections: [5315262fe26b33e1, 9d8e98840f1b78f0, 52d6009a07e770ea, 8534d8dbb4053a70, 2966fac6fe697007]
tool: 1
---
# Перебіг виконання {#progress}
@ -29,19 +29,17 @@ translation:
Клієнт підписується **окремо для кожного виклику**, передаючи `progress_callback=` у `call_tool`:
```python title="client.py" hl_lines="7 16"
```python title="client.py" hl_lines="5 14"
import anyio
from mcp import Client
from server import mcp
async def show(progress: float, total: float | None, message: str | None) -> None:
print(f"{message} ({progress}/{total})")
async def main() -> None:
async with Client(mcp) as client:
async with Client("http://localhost:8000/mcp") as client:
result = await client.call_tool(
"import_catalog",
{"urls": ["https://example.com/a.json", "https://example.com/b.json"]},
@ -56,28 +54,31 @@ anyio.run(main)
Колбек — це `async`-функція, яка приймає рівно те, що повідомив сервер: `progress`, `total`, `message`.
!!! info
`Client(mcp)` під'єднується безпосередньо до об'єкта сервера, у пам'яті, — це той самий клієнт, на якому
побудована сторінка **[Тестування](../get-started/testing.md)**. Параметр `progress_callback` однаковий
незалежно від транспорту, який використовує `Client`; а от *хронометраж*, який ви зараз побачите,
властивий саме з'єднанню в пам'яті. Воно запускає колбек одразу на місці, тож кожен звіт надходить до
того, як `call_tool` поверне результат. На справжньому транспорті сповіщення змагаються з результатом,
і повільний колбек може ще виконуватися після того, як `call_tool` уже повернув результат.
Параметр `progress_callback` однаковий незалежно від того, що ви передали в `Client`: URL, як тут,
`StdioServerParameters` чи об'єкт сервера в тесті. Проте зважайте на хронометраж на справжньому
транспорті. Кожне сповіщення доставляється окремо, поруч із відповіддю, тож повільний колбек може
ще виконуватися після того, як `call_tool` уже повернув результат. Лише тестове з'єднання в межах
процесу запускає колбек одразу на місці й гарантує, що кожен звіт надійде раніше.
### Спробуйте самі {#try-it}
Покладіть `client.py` поруч із `server.py` і запустіть:
Запустіть `server.py` через HTTP, а потім запустіть клієнт у другому терміналі:
```console
uv run mcp run server.py --transport streamable-http
```
```console
python client.py
```
```text
Imported https://example.com/a.json (1/2)
Imported https://example.com/b.json (2/2)
Imported https://example.com/a.json (1.0/2.0)
Imported https://example.com/b.json (2.0/2.0)
{'result': 'Imported 2 records.'}
```
Кожен `await ctx.report_progress(...)` на сервері перетворився на один виклик `show` на клієнті, у тому самому порядку, і обидва рядки надрукувалися **до** того, як `call_tool` повернув результат. Перебіг не пакується в результат — він надходить потоком, поки інструмент іще працює.
Кожен `await ctx.report_progress(...)` на сервері перетворився на один виклик `show` на клієнті, у тому самому порядку. Перебіг не пакується в результат. Він надходить потоком, поки інструмент іще працює.
!!! warning
`progress_callback` належить **виклику**, а не `Client`. Аргументу конструктора для нього немає,