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
---
# Solicitudes de varias idas y vueltas {#multi-round-trip-requests}
@ -164,7 +164,7 @@ El `Server` de bajo nivel es el nivel sin pilas incluidas: a diferencia de `MCPS
## Un resultado de 2026-07-28 {#a-2026-07-28-result}
`InputRequiredResult` solo existe en la versión del protocolo **2026-07-28**. El `Client(server)` en memoria la negocia por ti; a través del canal, `mode="auto"` la descubre. Tras conectar, `client.protocol_version` te dice qué obtuviste.
`InputRequiredResult` solo existe en la versión del protocolo **2026-07-28**. El `mode="auto"` por defecto de `Client` la descubre en cualquier conexión. Tras conectar, `client.protocol_version` te dice qué obtuviste.
!!! warning
Una sesión anterior a 2026 no tiene dónde poner un `InputRequiredResult`. Devuelve uno desde tu

View file

@ -1,6 +1,6 @@
---
translation:
sections: [5315262fe26b33e1, 9d8e98840f1b78f0, 0284b215e85366c4, 8534d8dbb4053a70, 2966fac6fe697007]
sections: [5315262fe26b33e1, 9d8e98840f1b78f0, 52d6009a07e770ea, 8534d8dbb4053a70, 2966fac6fe697007]
tool: 1
---
# Progreso {#progress}
@ -29,19 +29,17 @@ Tres argumentos, y tú decides qué significan:
El cliente lo activa **por llamada**, pasando `progress_callback=` a `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)
El callback es una función `async` que recibe exactamente lo que reportó el servidor: `progress`, `total`, `message`.
!!! info
`Client(mcp)` se conecta directamente al objeto servidor, en memoria; es el mismo cliente sobre el que se construye la página **[Pruebas](../get-started/testing.md)**.
`progress_callback` es el mismo parámetro sea cual sea el transporte que use el `Client`;
los *tiempos* que vas a ver son los de la conexión en memoria. Ejecuta tu callback
de forma directa, así que cada reporte llega antes de que `call_tool` devuelva. Con un transporte real,
las notificaciones compiten con el resultado, y un callback lento puede seguir ejecutándose después de que `call_tool`
haya devuelto.
`progress_callback` es el mismo parámetro le pases lo que le pases a `Client`: una URL como aquí, un
`StdioServerParameters` o el objeto servidor en una prueba. Eso sí, ten en cuenta los tiempos con un
transporte real. Cada notificación se entrega por su cuenta, al margen de la respuesta, así que un callback
lento puede seguir ejecutándose después de que `call_tool` haya devuelto. Solo la conexión de prueba en el
mismo proceso ejecuta el callback de forma directa y garantiza que cada reporte llegue antes.
### Pruébalo {#try-it}
Pon `client.py` junto a `server.py` y ejecútalo:
Sirve `server.py` por HTTP y luego ejecuta el cliente desde una segunda terminal:
```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.'}
```
Cada `await ctx.report_progress(...)` en el servidor se convirtió en una llamada a `show` en el cliente, en orden, y ambas líneas se imprimieron **antes** de que `call_tool` devolviera. El progreso no va empaquetado en el resultado; se transmite mientras la herramienta sigue trabajando.
Cada `await ctx.report_progress(...)` en el servidor se convirtió en una llamada a `show` en el cliente, en orden. El progreso no va empaquetado en el resultado. Se transmite mientras la herramienta sigue trabajando.
!!! warning
`progress_callback` pertenece a la **llamada**, no al `Client`. No hay un argumento del constructor