Llama a MyTools directamente con WebMCP

WebMCP es un estándar web emergente que permite a una página entregar a un agente de IA una lista de funciones invocables en lugar de una pantalla que interpretar. La página registra herramientas en document.modelContext —cada una con un nombre, una descripción y un esquema JSON— y un agente que se ejecute en ese navegador puede listarlas y llamarlas.

MyTools registra tres herramientas para todo el sitio en cada página, y tres más en cada una de sus 55 páginas de herramienta: lee el estado, ejecuta la operación, guarda el resultado. El trabajo sigue ocurriendo en el navegador, en la máquina del propio usuario. WebMCP cambia quién pulsa el botón, no adónde va el archivo.

Dónde funciona esto y hasta qué punto está asentado

El navegador de ChatGPT ya llama a estas herramientas. OpenAI ha añadido soporte de WebMCP al navegador integrado en la aplicación de escritorio de ChatGPT, así que allí se puede llamar a las herramientas de abajo sin activar ninguna opción, sin token de prueba y sin que tengas que configurar nada por tu parte. MyTools ya se ha manejado así fuera del laboratorio: alguien cuyo agente ya estaba usando estas herramientas informó de un fallo propio de ese navegador, y se corrigió en agosto de 2026.

En Chrome es una prueba de origen. La prueba va de Chrome 149 a Chrome 156, aproximadamente hasta finales de 2026. MyTools lleva un token para su origen de producción, así que en un Chrome compatible las herramientas están ahí sin activar ninguna opción. Si la prueba termina sin que la API llegue a publicarse, document.modelContext desaparecerá de Chrome y estas herramientas con él; por eso el punto de entrada por URL de más abajo se queda donde está.

La especificación es un borrador, no un estándar ratificado. WebMCP es un Draft Community Group Report del W3C Web Machine Learning Community Group, editado por ingenieros de Google y de Microsoft, y explícitamente fuera del proceso de estandarización del W3C. Su forma ya ha cambiado una vez: las herramientas se registraban en navigator.modelContext antes de que la API pasara a document.modelContext. Si partes de material más antiguo, comprueba eso primero.

Detecta la función, no la des por hecha. document.modelContext está o no está, y con más de una implementación llegando cada una a su ritmo esa es la única comprobación que merece la pena hacer. Nunca lo deduzcas del user agent. Donde falta, en este sitio no se rompe nada: las herramientas simplemente no existen y cada página sigue funcionando como página.

Hay una alternativa que funciona en todas partes. Donde WebMCP no está disponible, maneja el sitio desde su punto de entrada por URL: 50 de las 55 herramientas se abren con el archivo ya cargado desde una URL que construyes tú. Los dos mecanismos cubren las mismas operaciones; solo cambia la ergonomía.

Si pruebas en local, en un Chrome sin el token de la prueba, activa chrome://flags/#enable-webmcp-testing.

Más información El borrador de la especificación · La documentación de WebMCP de Chrome

Tres herramientas en cada página

Están registradas en todo el sitio, incluso en páginas que no son herramientas: la portada, un artículo, esta misma página. Son la forma que tiene un agente de llegar a la herramienta adecuada.

find_mytools_tools Busca en el catálogo. Acepta query, category, inputType y limit, todos opcionales, y devuelve las herramientas que coinciden con su slug, la ruta de su página y si aceptan una URL de archivo. Es de solo lectura. La salida está limitada, así que afina la búsqueda en vez de pedirlo todo.

open_mytools_tool Abre una herramienta lista para usar. Acepta slug —obligatorio, tal como lo devuelve find_mytools_tools— más urls opcional para cargar archivos remotos directamente, y carryResult, que entrega a la herramienta que se abre los archivos que acaba de producir la actual, en lugar de llegar a una pantalla de subida vacía.

suggest_mytools_pipeline A partir del slug de una herramienta y los nombres de los archivos que ha producido, enumera las herramientas a las que pueden pasar esos archivos. Solo devuelve destinos compatibles: nunca ofrece un lote a una herramienta de un solo archivo, ni ofrece a una herramienta un formato que no puede abrir.

Tres más en cada página de herramienta

Las 55 herramientas llevan el mismo trío, con el nombre formado a partir del slug de la herramienta cambiando los guiones por guiones bajos. En /pdf/rotate-pdf son get_rotate_pdf_state, run_rotate_pdf y download_rotate_pdf.

get_<tool>_state Qué hay cargado, cómo están los ajustes y una pista que nombra la siguiente llamada. Léelo antes de ejecutar nada: de ahí salen el número de páginas, las duraciones y las dimensiones en píxeles, y eso es lo que da sentido a los argumentos.

run_<tool> Hace el trabajo. Los argumentos cambian según la herramienta y están descritos en su esquema; lo que omitas conserva lo que haya en pantalla. La llamada no devuelve nada hasta que la operación termina, así que no hay nada que consultar en bucle: en una codificación de vídeo larga tarda simplemente lo que tarde la codificación.

download_<tool> Guarda el resultado en el dispositivo del usuario. Solo se registra cuando ya hay un resultado, así que su presencia en la lista de herramientas es la señal de que el trabajo está hecho. Las herramientas que producen varios archivos aceptan index para guardar uno, o zip para guardarlos todos en un mismo archivo comprimido.

Tres herramientas terminan en una URL publicada y no en un archivo —las dos que publican en Facebook y la que sube a YouTube—, así que no registran herramienta de descarga. Además se niegan a actuar si no hay nadie con la sesión iniciada: el inicio de sesión abre una ventana emergente que solo puede abrir un clic real.

Un ejemplo completo

Rotar un PDF alojado en una URL, de principio a fin. Todas las respuestas de abajo son la salida real de estas herramientas, no un esbozo.

1. Encuentra la herramienta.

find_mytools_tools({ query: "rotate pdf", inputType: "application/pdf", limit: 3 })

→ { "total": 55, "matched": 1, "tools": [
      { "slug": "rotate-pdf", "title": "Rotate PDF",
        "description": "Rotate PDF pages in one click",
        "multiple": true, "byUrl": true } ] }

2. Ábrela con el archivo ya cargado. Las herramientas propias de cada página cambian con la página, así que vuelve a leer la lista de herramientas después.

open_mytools_tool({ slug: "rotate-pdf",
                    urls: ["https://example.com/rental-application.pdf"] })

→ "Opened Rotate PDF with 1 file(s) loading from URL. Everything is processed
   locally in the browser. The page-specific tools available to you have changed."

3. Lee el estado. El número de páginas viene del propio PDF, y es lo que hace que merezca la pena enviar un rango de páginas.

get_rotate_pdf_state({})

→ { "phase": "configure",
    "pdfs": [ { "name": "rental-application.pdf", "pages": 2, "rotations": [0, 0] } ],
    "saving": false, "result": null,
    "hint": "Call run_rotate_pdf with a rotation, optionally narrowed with pages,
             to turn the loaded PDFs." }

4. Ejecútala. La llamada devuelve cuando la rotación ha terminado, y ahora existe download_rotate_pdf.

run_rotate_pdf({ rotation: 90 })

→ "Rotated 1 PDF(s) by 90°. Call download_rotate_pdf to save it."

5. Guárdalo. El archivo va al dispositivo del usuario; tú nunca recibes los bytes.

download_rotate_pdf({})

→ "Saving rental-application-rotated.pdf to the user's device."

Devolver una decisión al usuario

No todos los argumentos deberían decidirlos tú. Qué parte de una foto conservar, qué páginas de un escaneo importan, cuánto volumen es suficiente: eso hay que verlo sobre el archivo. Esta superficie está pensada para que puedas detenerte, dejar que decida el usuario y seguir adelante. get_<tool>_state informa de lo que hay en pantalla en ese mismo momento, incluido un cambio que el usuario acabe de hacer con el ratón, y cada argumento que omitas en run_<tool> conserva su valor en pantalla. Omítelos todos y la ejecución usará exactamente lo que haya dejado puesto el usuario.

La herramienta para recortar imágenes, con un arrastre real en mitad del proceso:

get_crop_image_state({})

→ … "source": { "width": 6240, "height": 4160 },
    "selection": { "x": 1459, "y": 420, "width": 3330, "height": 3328 }

    ← the user drags the box over what they want to keep

get_crop_image_state({})

→ … "selection": { "x": 2910, "y": 831, "width": 3330, "height": 3329 }

run_crop_image({})

→ "Cropped to 3330×3329 pixels out of 6240×4160 (5507 KB, image/jpeg).
   Call download_crop_image to save it."

Di lo que necesitas en el mismo turno en que abres la herramienta —«arrastra el recuadro sobre la parte que quieras conservar y luego dime que siga»— y vuelve a leer el estado cuando te contesten. Mientras esperas no se bloquea nada de la página: el usuario está trabajando en una pestaña normal del navegador.

Aquí está la línea que separa una página de herramienta de una API. El trabajo que nadie necesita mirar pertenece detrás de una llamada de API, y poner un navegador delante sería puro lastre. Una página se gana su sitio cuando una persona tiene que ver el archivo para decidir algo, y WebMCP es lo que mantiene útil al agente en ese momento: cargar, medir, convertir y guardar a un lado y a otro de un criterio que no le toca poner a él.

Cuatro cosas que condicionan su comportamiento

La salida está limitada a unos 1500 caracteres. Por eso una respuesta de estado es un resumen, no un volcado. Las listas largas se recortan por el final y se marcan como recortadas, y el contenido de los archivos nunca aparece en ellas. Si necesitas el catálogo completo en vez de un resultado de búsqueda, descarga capabilities.json.

Ningún byte cruza la frontera. No puedes entregar un archivo a una herramienta ni recibes ninguno. Los archivos entran por una URL que descarga el navegador y salen por download_<tool>, que lanza una descarga normal del navegador a la máquina del usuario. Todo lo que intercambias con estas herramientas es texto.

Las llamadas se pueden cancelar. Cada ejecución recibe un AbortSignal. Cancelar una ejecución detiene el trabajo en vez de dejarlo huérfano —una codificación de vídeo se termina, no se queda corriendo en un worker— y vuelve como cancelación, no como error.

La lista de herramientas cambia al navegar. Solo están registradas las herramientas de la página actual. Abrir otra herramienta da de baja el trío de la página anterior y registra el nuevo, así que vuelve a leer la lista después de cada open_mytools_tool en vez de dar por hecho que sigue estando lo que viste antes.

Preguntas que conviene tener resueltas

¿A qué herramientas de MyTools puede llamar un agente directamente?

faq.coverage.answer

¿Esto solo funciona en Chrome?

No. El navegador integrado en la aplicación de escritorio de ChatGPT es compatible con WebMCP, y Chrome lo expone hasta Chrome 156 a quienes participan en la prueba de origen, como MyTools. La especificación es un borrador de un community group del W3C que puede implementar cualquier navegador con capacidades de agente, así que trata la disponibilidad como algo que se comprueba en tiempo de ejecución y no como una lista fija.

¿Hace falta una clave de API o una cuenta?

No. No hay registro, ni inicio de sesión, ni clave, ni cuota. Si el navegador expone WebMCP, las herramientas están ahí en la primera visita.

¿Llamar a run_<tool> sube el archivo a un servidor?

No. El trabajo ocurre en el navegador y MyTools no tiene almacenamiento de archivos en servidor. La única excepción es cargar un archivo desde una URL: nuestro servidor descarga la URL que indicas para que el navegador pueda trabajar con los bytes, y no la conserva.

¿Qué pasa si el navegador no es compatible con WebMCP?

No se rompe nada. document.modelContext simplemente no está y no se registra ninguna herramienta; las páginas funcionan como páginas normales. Recurre al punto de entrada por URL, que no necesita ningún soporte del navegador.

¿Se pueden encadenar varias herramientas sin descargar por el camino?

Sí. Llama a suggest_mytools_pipeline con el slug y los nombres de los archivos recién producidos para ver qué los acepta, y luego a open_mytools_tool con carryResult: la siguiente herramienta se abre con esos archivos ya cargados.

¿Pueden un agente y una persona trabajar a la vez en la misma herramienta?

faq.together.answer

Volver a MyTools para agentes de IA