
Si su producto funciona con Next.js o React, WebMCP encaja muy bien: una herramienta es una función pequeña, y sus rutas de API ya hacen el trabajo real. Esta guía muestra un patrón limpio. ¿Es nuevo en el tema? Empiece por qué es WebMCP.
Registre las herramientas en un componente de cliente
document.modelContext solo existe en el navegador, así que el registro debe ir en useEffect. No renderice nada y pase un AbortSignal para que las herramientas desaparezcan cuando el visitante salga de la página:
'use client';
import { useEffect } from 'react';
export default function SearchTool() {
useEffect(() => {
const mc = document.modelContext || navigator.modelContext;
if (!mc?.registerTool) return undefined; // browsers without WebMCP skip this
const controller = new AbortController();
mc.registerTool({
name: 'search_products',
description: 'Search the catalog. Returns up to 5 products with price and link.',
inputSchema: {
type: 'object',
properties: { query: { type: 'string' } },
required: ['query'],
},
annotations: { readOnlyHint: true },
execute: async ({ query }, { signal }) => {
const res = await fetch('/api/search?q=' + encodeURIComponent(query), { signal });
return JSON.stringify(await res.json());
},
}, { signal: controller.signal });
return () => controller.abort();
}, []);
return null;
}Añada <SearchTool /> al layout o a la página donde la herramienta tenga sentido. El Strict Mode de React ejecuta los efectos dos veces en desarrollo, y la limpieza anterior se ocupa de ello.
Mantenga la lógica en una ruta de API
La herramienta es solo una capa fina. La validación, los límites y los permisos van en el servidor, donde un visitante no puede cambiarlos:
// app/api/search/route.js
import { NextResponse } from 'next/server';
export async function GET(request) {
const q = (request.nextUrl.searchParams.get('q') || '').slice(0, 80);
if (!q) return NextResponse.json({ error: 'missing_query' }, { status: 400 });
const items = await searchCatalog(q, { limit: 5 }); // your own function
return NextResponse.json(items.map(({ name, price, url }) => ({ name, price, url })));
}Formularios como herramientas
En un formulario sencillo, añada toolname y tooldescription al elemento <form>. React pasa a la página estos atributos desconocidos en minúsculas. El navegador rellena el formulario y, por defecto, el visitante sigue pulsando el botón.
Reglas de seguridad
- Empiece con solo lectura. Primero búsqueda y detalles; márquelos con
readOnlyHint. - Pregunte antes de actuar. Marque las acciones de carrito, reserva y formularios con
consequentialHintpara que el visitante confirme. - Compruebe en el servidor. El navegador no es una barrera de seguridad, así que valide cada entrada y cada permiso en su backend.
- Devuelva lo mínimo. Envíe solo lo que un cliente puede ver, nunca datos de administración ni registros de otros clientes.
Pruébelo
- Use una versión reciente de Chrome con WebMCP activado, mediante la prueba de origen o la opción de pruebas.
- Llame a cada herramienta con entradas correctas e incorrectas.
- Compruebe que los visitantes normales no notan ningún cambio.
- Ejecute el comprobador WebMCP gratuito en la página exacta donde están sus herramientas.
¿Prefiere que lo hagamos por usted?
Añadimos WebMCP a productos con Next.js y React, desde una auditoría de preparación gratuita hasta herramientas probadas. Conozca nuestros servicios de integración de WebMCP y de desarrollo con Next.js.
Preguntas frecuentes
¿Puedo registrar herramientas WebMCP en un React Server Component?
No. WebMCP se ejecuta en el navegador, así que las herramientas deben registrarse en un componente de cliente. Un componente de servidor puede pasar datos a ese componente de cliente como props.
¿Las herramientas WebMCP funcionan con renderizado en el servidor?
Sí. La página se renderiza en el servidor como siempre y las herramientas se registran tras la hidratación. Compruebe que document.modelContext existe antes de usarlo.
¿Por qué mis herramientas se registran dos veces en desarrollo?
El Strict Mode de React ejecuta los efectos dos veces en desarrollo. Si pasa un AbortSignal y lo aborta en la limpieza del efecto, se elimina el primer registro.
¿Existe un tipo de TypeScript para WebMCP?
Sí. La documentación de Chrome remite al paquete npm webmcp-types para los tipos de la API imperativa.
Cómo podemos ayudarle
- Servicios de integración WebMCPWebMCP development for any stack, from WordPress and Shopify to Next.js, Laravel and Django: search, FAQs and forms offered as secure tools for AI browser agents, with a free audit.
- Desarrollo con Next.jsAplicaciones Next.js 14 / 15 en producción con App Router, Server Components, implementación en edge y entrega con TypeScript como prioridad en Vercel o AWS.
- Desarrollo de aplicaciones web a medidaDesarrollo full-stack de aplicaciones web a medida para SaaS, herramientas internas, paneles y portales empresariales con React, Next.js, Node, Laravel y Django.
Hable con un ingeniero sobre su proyecto
Cuéntenos qué está construyendo. Respondemos en un día hábil con una opinión franca sobre alcance, enfoque y esfuerzo.
Reserve una llamada estratégica gratuitaEscrito por el equipo de ingeniería de UnlockLive IT. UnlockLive IT Limited trabaja con sus clientes a través de su sede central en Los Ángeles y su oficina de Toronto, y entrega ingeniería desde su centro de desarrollo en Dhaka. Acerca de nosotros