navigator.modelContext.registerTool() je metoda rozhraní WebMCP, kterou web registruje jednotlivý nástroj (tool) dostupný pro AI agenty. Web tím říká prohlížeči: „tohle umím udělat a takhle to zavolej.“ Agent – ať už asistent zabudovaný v prohlížeči, nebo napojená aplikace – pak může nástroj zavolat přímo, místo aby web ovládal naslepo přes klikání a screenshoty.
K čemu to slouží
WebMCP zavádí na objektu window.navigator nové rozhraní modelContext. Přes něj web deklaruje funkce, které smí používat AI agent. Přístup k těmto nástrojům zprostředkovává prohlížeč – ten může vyžádat souhlas uživatele, řídit oprávnění a volat nástroje jeden po druhém. Rozhraní je dostupné pouze na HTTPS stránkách.
Klíčová výhoda: nástroj implementujete v běžném JavaScriptu. Pokud už váš web má funkci, která něco dělá (přidá položku, odešle formulář, vyhledá produkt), často stačí ji jen „obalit“ jako tool a zpřístupnit agentům. Žádný samostatný server, žádná druhá codebase.
Co metoda přijímá
registerTool() dostane objekt popisující jeden nástroj se čtyřmi částmi:
- name – unikátní jméno nástroje (např.
add-todo). - description – popis v přirozeném jazyce, podle kterého agent pozná, k čemu nástroj je.
- inputSchema – JSON schéma vstupních parametrů (typy, popisy, povinná pole).
- execute – callback funkce, která nástroj skutečně provede. Může být asynchronní a vrátit Promise.
Příklad
Registrace nástroje, který přidá položku do seznamu úkolů:
if ("modelContext" in window.navigator) {
window.navigator.modelContext.registerTool({
name: "add-todo",
description: "Přidá novou položku do seznamu úkolů",
inputSchema: {
type: "object",
properties: {
text: { type: "string", description: "Text položky" }
},
required: ["text"]
},
execute: ({ text }, agent) => {
addTodoItem(text); // vaše stávající funkce, která přidá úkol a překreslí UI
return {
content: [
{ type: "text", text: `Úkol "${text}" byl přidán.` }
]
};
}
});
}
Funkce execute dostane rozbalené parametry (zde { text }) a druhý argument agent. Vrací strukturovanou odpověď s polem content, kterou agent dostane jako výsledek volání.
Vyžádání souhlasu uživatele
U citlivých akcí (nákup, platba, smazání) lze přes objekt agent vyžádat potvrzení uživatele uprostřed běhu nástroje pomocí agent.requestUserInteraction():
async function buyProduct({ product_id }, agent) {
const confirmed = await agent.requestUserInteraction(async () => {
return confirm(`Koupit produkt ${product_id}?`);
});
if (!confirmed) {
throw new Error("Nákup zrušen uživatelem.");
}
executePurchase(product_id);
return `Produkt ${product_id} byl zakoupen.`;
}
window.navigator.modelContext.registerTool({
name: "buyProduct",
description: "Zakoupí produkt podle jeho product_id.",
inputSchema: {
type: "object",
properties: {
product_id: { type: "string", description: "Identifikátor produktu" }
},
required: ["product_id"]
},
execute: buyProduct
});
registerTool vs. provideContext
WebMCP nabízí dva způsoby registrace nástrojů. provideContext({ tools: [...] }) nastaví celou sadu nástrojů najednou – každé další volání předchozí sadu smaže a nahradí. To se hodí pro single-page aplikace, které podle stavu UI nabízejí různé nástroje. Naproti tomu registerTool() a unregisterTool(name) přidávají a odebírají jednotlivé nástroje, aniž by resetovaly celý stav.
Na co si dát pozor
registerTool()vyhodíInvalidStateError, pokud nástroj se stejným jménem už existuje, je neplatnéinputSchema, nebo jenamečidescriptionprázdný řetězec.- Rozhraní funguje jen na HTTPS a jen v top-level kontextu (záložka prohlížeče), ne „headless“ bez viditelného okna.
- Vždy ohlídejte synchronizaci UI – stav stránky se má aktualizovat bez ohledu na to, zda akci vyvolal člověk, nebo agent.
- Pro velké množství nebo výpočetně náročné volání je vhodné práci přesunout do workeru, aby se neblokovalo hlavní vlákno.
Vztah k MCP
WebMCP záměrně kopíruje primitiva protokolu MCP (tools, resources, prompts), takže nástroje deklarované přes WebMCP umí použít libovolný MCP-kompatibilní agent s minimální překladovou vrstvou. Rozdíl je v tom, že WebMCP běží přímo v prohlížeči v relaci návštěvníka – nepotřebuje samostatný server ani autentizaci a tok volání zprostředkovává prohlížeč, který tak může vynucovat bezpečnostní pravidla webové platformy.