[{"data":1,"prerenderedAt":700},["ShallowReactive",2],{"tool-webmcp-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":21,"sources":29,"cover":53,"og":54,"expertise":55,"locales":56,"lang":59,"title":60,"description":61,"coverAlt":62,"url":63,"pricing":64,"kind":65,"metaTitle":66,"takeaways":67,"faq":73,"toc":86,"blocks":111,"others":476},"webmcp","2026-09-30",11,"web",[9,10,11,12,13],"WebMCP","Agent tools","JSON Schema","Chrome","MCP",[4,15,16,17,18,19,20],"webmcp vs mcp","document.modelContext registerTool","webmcp declarative api","browser agent tools","webmcp origin trial","webmcp chrome 149",[22,24,27],{"name":9,"url":23},"https:\u002F\u002Fgithub.com\u002Fwebmachinelearning\u002Fwebmcp",{"name":25,"url":26},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",{"name":11,"url":28},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Schema",[30,33,36,39,42,45,48,50],{"title":31,"url":32},"Chrome for Developers: WebMCP (get started)","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp",{"title":34,"url":35},"Chrome for Developers: Imperative API","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fimperative-api",{"title":37,"url":38},"Chrome for Developers: Declarative API","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fdeclarative-api",{"title":40,"url":41},"Chrome for Developers: WebMCP versus MCP","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fcompare-mcp",{"title":43,"url":44},"Chrome for Developers: WebMCP tool security","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fsecure-tools",{"title":46,"url":47},"Chrome for Developers: Build effective tools","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fbuild-tools",{"title":49,"url":23},"WebMCP explainer and specification draft",{"title":51,"url":52},"WebMCP implementation status","https:\u002F\u002Fgithub.com\u002Fwebmachinelearning\u002Fwebmcp\u002Fblob\u002Fmain\u002Fimplementation-status.md","\u002Fimages\u002Fblog\u002Fwebmcp\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fwebmcp\u002Fog.jpg","ai-engineer",[57,58,59],"en","de","hu","WebMCP: eszközöket publikálni pixelek helyett","A WebMCP lehetővé teszi, hogy egy oldal tipizált, hívható eszközöket adjon át a böngészőben futó ügynöknek. Mit tesz a szabvány, mennyi érhető el belőle ma, és mikor marad jobb egy MCP-szerver.","Egy oldal tipizált eszközöket regisztrál a böngészőben, egy böngészőügynök meghívja az egyiket, és az eszköz az oldalon belül futva frissíti a felületét.","https:\u002F\u002Fgithub.com\u002Fwebmcp","Emerging standard, open","Browser protocol","WebMCP: eszközök helyett pixelek · Balázs Csorba",[68,69,70,71,72],"A WebMCP böngészős API-javaslat, nem könyvtár: a Chrome 149 és az Edge 150 origin trialként szállítja, a Firefox és a Safari csak a standards-position szakaszban tart.","Az eszközök a tabhoz kötöttek, az oldal saját kódjában futnak, és a tools Permissions Policy szabályozza őket, nem az ügynök DOM-ból való tippelése.","A Chrome útmutatója 500 karakterre korlátozza az eszköz leírását és 1,5 KB-ra a kimenetét, tehát az eszközkatalógus kontextusablak-büdzsé.","Mind a négy annotáció alapértelmezés szerint hamis, így egy eszköz biztonsági tulajdonságai annyira őszinték, amennyire az őket regisztráló oldal.","Nincs felfedezési mechanizmus: a kliensnek meg kell látogatnia az oldalt, hogy tudja, vannak-e eszközei. Ez megváltoztatja a szabvány üzleti értékét.",[74,77,80,83],{"q":75,"a":76},"Mi a WebMCP?","A WebMCP javasolt webes szabvány, amely lehetővé teszi, hogy egy oldal tipizált, hívható eszközöket adjon át a böngészőben futó KI-ügynöknek. Az oldal regisztrál egy nevet, egy természetes nyelvű leírást, egy JSON sémát a bemenetre és egy execute függvényt, a böngésző pedig közvetíti az ügynök és a függvény közötti hívásokat. Az eszközök csak addig élnek, amíg a nyitott lap megvan.",{"q":78,"a":79},"A WebMCP az MCP helyettesítője?","Nem. A Chrome saját összehasonlító oldala mindkettőt partnernek tekinti, nem riválisnak: az MCP tartósan, bármely kliensnek ad backend képességeket, a WebMCP pedig efemeren adja egy oldal élő állapotát a böngészőbe integrált ügynöknek. A legtöbb éles rendszernél mindkettő megjelenik: MCP az üzleti logikára, WebMCP a felhasználó előtti felületre.",{"q":81,"a":82},"Kell a Chrome origin trial a helyi WebMCP-használathoz?","Nem. Helyi fejlesztéshez a chrome:\u002F\u002Fflags\u002F#enable-webmcp-testing jelzőkapcsoló token nélkül is bekapcsolja. Valódi felhasználóknak Chrome 149-től felfelé regisztrálni kell az origin trialba, az Edge 150 pedig külön trialt futtat, saját regisztrációval.",{"q":84,"a":85},"Mi a legnagyobb korlát ma?","A böngészőtámogatás, majd a felfedezhetőség. A specifikáció repository implementációs állapotfájlja Chrome- és Edge-origin trialokat, kísérleti támogatást a Brave Leo chatben és támogatást a ChatGPT Desktopban sorol fel, Firefoxban vagy Safariban viszont nincs szállított implementáció. Ehhez hozzájárul, hogy az API nem headless böngészős munkára készült, és a kliens csak egy látogatással tudja meg, hogy egy oldalnak vannak eszközei.",[87,90,93,96,99,102,105,108],{"id":88,"title":89},"what-it-is","Mi ez",{"id":91,"title":92},"how-it-works","Hogyan működik",{"id":94,"title":95},"getting-started","Első lépések",{"id":97,"title":98},"tool-design","Eszközök, amelyeket az ügynök kiválaszt",{"id":100,"title":101},"security","Biztonság és annotációk",{"id":103,"title":104},"where-it-shingles","Hol marad el",{"id":106,"title":107},"verdict","Ítélet",{"id":109,"title":110},"sources","Források",[112,116,119,122,134,194,195,198,207,210,211,214,216,223,227,230,232,250,257,258,261,289,292,324,325,328,350,353,363,364,367,413,416,417,426,439,448,449],{"type":113,"content":114},"paragraph",[115],"A WebMCP javasolt webes szabvány, amely lehetővé teszi, hogy egy oldal tipizált, hívható eszközöket publikáljon egy KI-ügynöknek, ahelyett hogy az ügynök a DOM-ból találgatná a szándékot. A javaslat kicsi, a böngészőtámogatás vékony, a tervezési döntés viszont helyes. Kezeld specifikációként, amit figyelni kell, és progresszív enhancementként feature detection mögött, nem pedig függőségként erre a negyedévre.",{"type":113,"content":117},[118],"A Model Context Protocol mellett áll, nem ellene. Egy MCP-szerver bármely kliensnek, bárhol ad backend képességeket; a WebMCP egy bejelentkezett oldal élő, tabon belüli állapotát adja át egy böngészőbe integrált ügynöknek, és eltűnik, ha a tab bezáródik. Az érdekes mérnöki kérdés nem az, melyik protokoll nyer. Az, melyik teszi elérhetővé a meglévő frontend-logikát anélkül, hogy hozzá kellene írni egy szervert.",{"type":120,"level":121,"id":88,"text":89},"heading",2,{"type":113,"content":123},[124,125,129,130,133],"A specifikáció a W3C Web Machine Learning Community Groupban él, és a WebMCP explainer dokumentálja a GitHubon, ahol a Chrome és az Edge csapatai a látható implementálók. A Chrome 149-től origin trial mögött szállítja, helyi fejlesztési kapcsolóval a ",{"tag":126,"children":127},"code",[128],"chrome:\u002F\u002Fflags\u002F#enable-webmcp-testing"," címen. Az API egy objektum a ",{"tag":126,"children":131},[132],"Document"," interfészen, és két formában létezik.",{"type":135,"ordered":136,"items":137},"list",false,[138,158,160,176,178,192],[139,142,143,146,147,146,150,153,154,157],{"tag":126,"children":140},[141],"document.modelContext"," biztosítja a ",{"tag":126,"children":144},[145],"registerTool()",", ",{"tag":126,"children":148},[149],"getTools()",{"tag":126,"children":151},[152],"executeTool()"," függvényeket és egy ",{"tag":126,"children":155},[156],"toolchange"," eseményt.",[159],"Egy eszköz egy névből, természetes nyelvű leírásból, a bemenetre szóló JSON sémából és az oldalon belül futó execute függvényből áll.",[161,162,146,165,146,168,171,172,175],"A deklaratív API egy annotált űrlapot alakít eszközzé a ",{"tag":126,"children":163},[164],"toolname",{"tag":126,"children":166},[167],"tooldescription",{"tag":126,"children":169},[170],"toolparamdescription"," és ",{"tag":126,"children":173},[174],"toolautosubmit"," attribútumokkal.",[177],"Az eszközök efemerek. Csak addig léteznek, amíg az oldal nyitva van, és az oldal saját sütijeivel és sessionjével futnak.",[179,180,183,184,187,188,191],"Mindkét API a ",{"tag":126,"children":181},[182],"tools"," Permissions Policy alá esik, amely alapértelmezés szerint ",{"tag":126,"children":185},[186],"self",", így a cross-origin iframe-ek kikapcsolnak, amíg a hoszt be nem állítja az ",{"tag":126,"children":189},[190],"allow=\"tools\""," attribútumot.",[193],"Az eszközök metaadatai a modell kontextusablakában vannak, ezért a regisztrált eszközök száma oldalankénti büdzsé, nem csak kódkérdés.",{"type":120,"level":121,"id":91,"text":92},{"type":113,"content":196},[197],"A regisztrálás egy hívás az oldalszkriptből; a meghívást a böngésző közvetíti az ügynök és az oldal között. A böngésző soha nem ad DOM-kezelőt az ügynöknek. Parszolja az argumentumokat, meghívja az execute függvényt, és a visszatérési értéket tool eredményként adja vissza. Ez az egész ergonómiai történet egy mondatban: az oldal dönti el, mi hívható, a böngésző pedig azt, ki hívhatja.",{"type":199,"attrs":200,"inner":204,"caption":205},"diagram",{"viewBox":201,"role":202,"aria-labelledby":203},"0 0 720 320","img","wm-t wm-d","\u003Ctitle id=\"wm-t\">WebMCP tool lifecycle\u003C\u002Ftitle>\u003Cdesc id=\"wm-d\">A page registers a tool on document.modelContext. The browser mediates: it lists the tools to the agent, the agent invokes one, the execute function runs in the page, the page updates its own DOM and state, and the result travels back through the browser to the agent.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"ah-wm\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"20\" y=\"120\" width=\"160\" height=\"72\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"100\" y=\"150\" text-anchor=\"middle\" class=\"d-text\">your page\u003C\u002Ftext>\u003Ctext x=\"100\" y=\"172\" text-anchor=\"middle\" class=\"d-small\">registerTool()\u003C\u002Ftext>\u003Crect x=\"280\" y=\"120\" width=\"160\" height=\"72\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"360\" y=\"150\" text-anchor=\"middle\" class=\"d-text\">model context\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"172\" text-anchor=\"middle\" class=\"d-small\">browser-mediated\u003C\u002Ftext>\u003Crect x=\"540\" y=\"40\" width=\"160\" height=\"72\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"620\" y=\"70\" text-anchor=\"middle\" class=\"d-text\">agent\u003C\u002Ftext>\u003Ctext x=\"620\" y=\"92\" text-anchor=\"middle\" class=\"d-small\">getTools()\u003C\u002Ftext>\u003Crect x=\"540\" y=\"200\" width=\"160\" height=\"72\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"620\" y=\"230\" text-anchor=\"middle\" class=\"d-text\">execute()\u003C\u002Ftext>\u003Ctext x=\"620\" y=\"252\" text-anchor=\"middle\" class=\"d-small\">your app logic\u003C\u002Ftext>\u003Crect x=\"280\" y=\"230\" width=\"160\" height=\"72\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"360\" y=\"260\" text-anchor=\"middle\" class=\"d-text\">DOM and state\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"282\" text-anchor=\"middle\" class=\"d-small\">same session\u003C\u002Ftext>\u003Cpath d=\"M180 156H278\" class=\"d-line\" marker-end=\"url(#ah-wm)\" \u002F>\u003Cpath d=\"M360 120V76H538\" class=\"d-line\" marker-end=\"url(#ah-wm)\" \u002F>\u003Ctext x=\"450\" y=\"66\" text-anchor=\"middle\" class=\"d-label\">2 discover\u003C\u002Ftext>\u003Ctext x=\"228\" y=\"146\" text-anchor=\"middle\" class=\"d-label\">1 register\u003C\u002Ftext>\u003Cpath d=\"M620 112V198\" class=\"d-line-accent\" marker-end=\"url(#ah-wm)\" \u002F>\u003Ctext x=\"640\" y=\"160\" class=\"d-label\">3 invoke\u003C\u002Ftext>\u003Cpath d=\"M540 236H442\" class=\"d-line\" marker-end=\"url(#ah-wm)\" \u002F>\u003Ctext x=\"490\" y=\"226\" text-anchor=\"middle\" class=\"d-label\">4 update\u003C\u002Ftext>\u003Cpath d=\"M360 230V196\" class=\"d-line\" marker-end=\"url(#ah-wm)\" \u002F>\u003Ctext x=\"374\" y=\"218\" class=\"d-label\">5 result\u003C\u002Ftext>",[206],"A böngésző az ügynök és az oldal között ül. A hurokban semmi más nem bővítheti ezt a határt.",{"type":113,"content":208},[209],"A gyakorlati különbség az aktuáláshoz képest a hibakezelési ágon látszik. Egy kattintás egy rosszul renderelt elemen csendben elbukik, vagy a rossz handlert hívja meg. Egy rossz argumentummal érkező eszközhívás a saját validációnkba ütközik, és olyan üzenetet ad vissza, amit a modell el tud olvasni és használni. A Chrome útmutatója ezt kimondja, és azt javasolja, hogy a kódban szigorúan validáljunk, a séma viszont legyen laza, mert a séma elutasítása zsákutca az ügynök számára.",{"type":120,"level":121,"id":94,"text":95},{"type":113,"content":212},[213],"Az imperatív API az, amivel érdemes dolgozni, mert csak ez tud alkalmazásállapothoz nyúlni. Egy minimális read-only eszköz így néz ki.",{"type":126,"code":215},"\u002F\u002F Feature-detect: the API is behind a flag or an origin trial.\nif (typeof document.modelContext?.registerTool !== 'function') return;\n\nconst controller = new AbortController();\n\nawait document.modelContext.registerTool({\n  name: 'get_order_status',\n  description: 'Return the shipping status of one order for the signed-in customer.',\n  inputSchema: {\n    type: 'object',\n    properties: {\n      orderNumber: { type: 'string', description: 'Order number as shown in the order list.' },\n    },\n    required: ['orderNumber'],\n    additionalProperties: false,\n  },\n  annotations: { readOnlyHint: true },\n  execute: async ({ orderNumber }) => {\n    const order = await orders.findForCustomer(orderNumber);\n    \u002F\u002F A message the model can act on beats a thrown Error.\n    if (!order) return `No order ${orderNumber} is visible to this account.`;\n    return `Order ${orderNumber}: ${order.status}, arriving ${order.eta}.`;\n  },\n}, { signal: controller.signal });\n\n\u002F\u002F Unregister on route change. From Chrome 153 aborting no longer breaks a\n\u002F\u002F call that is already running.\ncontroller.abort();",{"type":113,"content":217},[218,219,222],"Három részlet fontosabb a többinél. A leírás az, amit a modell olvas el annak eldöntésére, hogy meghívja-e az eszközt, és a Chrome útmutatója 500 karakterre korlátozza. Az execute függvénynek azt a függvényt kellene újrahasznosítania, amit a látható gomb már meghív, hogy egyetlen kódút legyen, és a felület meg az eszköz ne mondjon ellent egymásnak. Az ",{"tag":126,"children":220},[221],"AbortSignal"," a leiratkozás útja, nem időzítő.",{"type":120,"level":224,"id":225,"text":226},3,"declarative-forms","Deklaratív űrlapok",{"type":113,"content":228},[229],"A deklaratív API egyszerű űrlapokra való, semmi másra. Annotáld az űrlapelemet, és a böngésző levezeti az eszköz definícióját a markupból és a mezőnevekből.",{"type":126,"code":231},"\u003Cform toolname=\"create_support_request\"\n      tooldescription=\"Submits a support request for the signed-in customer.\"\n      action=\"\u002Fsupport\"\n      toolautosubmit>\n  \u003Clabel for=\"subject\">Subject\u003C\u002Flabel>\n  \u003Cinput id=\"subject\" name=\"subject\" type=\"text\">\n\n  \u003Clabel for=\"reason\">Reason\u003C\u002Flabel>\n  \u003Cselect id=\"reason\" name=\"reason\" required\n          toolparamdescription=\"Determines which team handles the request.\">\n    \u003Coption value=\"returns\">Return a purchase\u003C\u002Foption>\n    \u003Coption value=\"delivery\">Where is my parcel\u003C\u002Foption>\n    \u003Coption value=\"site\">The website is broken\u003C\u002Foption>\n  \u003C\u002Fselect>\n\n  \u003Cbutton type=\"submit\">Submit\u003C\u002Fbutton>\n\u003C\u002Fform>",{"type":113,"content":233},[234,235,237,238,241,242,245,246,249],"A ",{"tag":126,"children":236},[174]," nélkül az ügynök kitölti az űrlapot, és az ember megnyomja a küldést. Ez a helyes alapértelmezés mindenki számára, akinek költsége van a műveletnek. A attribútummal a böngésző küld és navigál, a ",{"tag":126,"children":239},[240],"respondWith()"," pedig a ",{"tag":126,"children":243},[244],"SubmitEvent"," eseményen lehetővé teszi, hogy az oldal eredményt adjon vissza a modellnek. Az ",{"tag":126,"children":247},[248],"agentInvoked"," jelzőflag megmondja az oldalnak, hogy melyik úton fut a folyamat.",{"type":251,"variant":252,"title":253,"body":254},"callout","note","A szabvány olcsóbb fele",[255],[256],"A deklaratív API nem ér el JavaScript-only funkciót, mert az eszközdefinícióban nincs JavaScript. Az OpenAI site-tools dokumentációja kimondja, hogy a beépített böngésző egyáltalán nem implementálja a deklaratív API-t, így egy kizárólag űrlapokra épülő integráció ma láthatatlan a ChatGPT Work és a Codex számára.",{"type":120,"level":121,"id":97,"text":98},{"type":113,"content":259},[260],"A közzétett best practice útmutató szokatlanul előíró, és érdemes szó szerint követni. A gondolatmenet: az eszköz leírása olyan kód, amelyet egy valószínűségi olvasó minden munkamenetben egyszer értelmez. A karakterbüdzsék azért léteznek, hogy a teljes katalógus ezen olvasó figyelmén belül maradjon.",{"type":262,"head":263,"rows":268},"table",[264,266],[265],"Büdzsé",[267],"Ajánlott határ",[269,274,279,284],[270,272],[271],"Eszköz leírása",[273],"500 karakter",[275,277],[276],"Paraméter leírása",[278],"150 karakter",[280,282],[281],"Eszköznév és paraméternév",[283],"30 karakterenként",[285,287],[286],"Egy eszköz kimenete",[288],"1,5 KB karakter",{"type":113,"content":290},[291],"A táblázat feletti tanács a nehezebbik fel: egy funkció eszközönként, ne legyenek átfedő eszközök, és a regisztrálás kötődjön az oldal állapotához egy minden oldalon betöltött statikus katalógus helyett. Az átfedő eszközök a leggyakoribb okai annak, hogy az ügynök a rosszat választja.",{"type":135,"ordered":136,"items":293},[294,300,305,310,319],[295,299],{"tag":296,"children":297},"strong",[298],"Egy felelősség."," Egy funkció eszközönként, és ne legyen második eszköz, ami szinte ugyanezt teszi.",[301,304],{"tag":296,"children":302},[303],"Regisztrálás az aktuális állapothoz."," Szakítsd meg a controllert, amikor az útvonal vagy a dialógus változik, hogy az ügynök ne lásson már érvénytelen eszközöket.",[306,309],{"tag":296,"children":307},[308],"Fogadj nyers bemenetet."," Ha valaki azt mondja 11:00 és 15:00 között, vedd a stringet, és normalizáld kódban. Ne a modell számoljon.",[311,314,315,318],{"tag":296,"children":312},[313],"Olvasható enum értékek."," Az \"express\" jobb, mint a ",{"tag":126,"children":316},[317],"shipping_id = 1",", mert a modell az értéket olvassa, nem az adatbázisodat.",[320,323],{"tag":296,"children":321},[322],"Használható hibát adj vissza."," Írd le, mit kell tenni, nem azt, mi történt bent. Egy elbukó eszköznek is használhatónak kell maradnia.",{"type":120,"level":121,"id":100,"text":101},{"type":113,"content":326},[327],"Az annotációk a fő határvonal, amivel egy oldal szabályozhatja, hogyan bánnak a hosztok az eszközeivel, és mind a négy alapértelmezés szerint hamis. Ez a biztonságos alapértelmezés, de azt is jelenti, hogy egy eszköz biztonsági tulajdonságai annyira őszinték, amennyire az őket regisztráló oldal.",{"type":135,"ordered":136,"items":329},[330,335,340,345],[331,334],{"tag":126,"children":332},[333],"readOnlyHint"," az eszköz csak olvas, nem változtat semmit. Tedd rá minden kereső funkcióra.",[336,339],{"tag":126,"children":337},[338],"untrustedContentHint"," a visszatérési érték felhasználó által generált vagy külső adatot tartalmaz, és korlátozni kell, mielőtt eléri a modellt.",[341,344],{"tag":126,"children":342},[343],"consequentialHint"," a hívás foglal, fizet, küld vagy töröl. A kliensek megerősítést kényszeríthetnek ki vele.",[346,349],{"tag":126,"children":347},[348],"debugging"," Chrome 156-tól jelöli fejlesztői eszköznek, hogy az általános ügynökök kiszűrhessék.",{"type":113,"content":351},[352],"A Chrome biztonsági útmutatója a közvetett prompt injekciót megoldatlannak tekinti. A modellek valószínűségiek, dokumentáltak az agentikus rendszerek elleni ismételhető támadások, és egy eszköz visszatérési értéke olyan csatorna, amelyet egy támadó írhat. Az ajánlott mitigációk az annotációk, a karakterbüdzsék és az origin izoláció, vagyis kárcsökkentés, nem megoldás. Ugyanez az oldal megjegyzi, hogy egy host engedélyekkel rendelkező extension az oldalt WebMCP nélkül is tetszőleges JavaScripttel irányíthatja.",{"type":251,"variant":354,"title":355,"body":356},"warn","Az exposedTo az éles él",[357],[358,359,362],"Az ",{"tag":126,"children":360},[361],"exposedTo"," opció azokat a biztonságos origineket sorolja fel, amelyek felfedezhetik és futtathatják az eszközt, és az útmutató egyértelmű: egy read-only eszköz is kiszivárogtathat felhasználói adatot, az író eszköz pedig a felhasználó nevében jár el. Csak olyan origineket tegyél szabaddá, amelyeknek a hitelesítő adatokat is átadnád.",{"type":120,"level":121,"id":103,"text":104},{"type":113,"content":365},[366],"A gyengeségek jönnek először, mert ezek miatt ez figyelendő tétel, nem függőség. A támogatás gyakorlatilag egyetlen motorkészülékcsaládra korlátozódik. A specifikáció saját állapotfájlja origin trialt sorol fel a Chrome 149-ben és az Edge 150-ben, kísérleti támogatást a Brave Leo chatben, támogatást a ChatGPT Desktopban, valamint standards-position bejegyzéseket a Firefoxban és a WebKitben, implementáció nélkül. Emellett a Chrome dokumentációja a headless böngészős munkát a hatókörön kívül helyezi, figyelmeztet, hogy az összetett felületeket át kell alakítani az alkalmazás- és felületállapot szinkronban tartásához, és megjegyzi, hogy a klienseknek meg kell látogatniuk egy oldalt, hogy felfedezzék az eszközeit. Nincs nyilvántartás, nincs manifest, nincs index.",{"type":262,"head":368,"rows":376},[369,371,372,374],[370],"",[9],[373],"MCP-szerver",[375],"DOM-aktuálás",[377,386,395,404],[378,380,382,384],[379],"Életciklus",[381],"Tabhoz kötött, navigáláskor megszűnik",[383],"Folyamatos daemon",[385],"Egy kérés",[387,389,391,393],[388],"Lát",[390],"Élő DOM, sütik, session",[392],"Csak amit te kitálsz",[394],"Amit az ügynök lekapar",[396,398,400,402],[397],"Futtatja a kódodat",[399],"Igen, az oldalon belül",[401],"Nem, csak szerveroldalon",[403],"Nem",[405,407,409,411],[406],"Elérhető",[408],"Ma egy motorcsaládtól",[410],"Bármely MCP-kliensről",[412],"Bármely böngészőből",{"type":113,"content":414},[415],"A felfedezhetőségi pont megérdemli a kiemelést, mert lerombolja a szokásos üzleti érvelést. Egy backend MCP-szervert megtalálhat egy olyan ügynök is, amely soha nem látja az oldalt. Egy WebMCP eszközt nem. Az egyetlen reális felfedezési út ma egy felhasználó, aki megnyitja az oldalt. A WebMCP tehát egy már elkezdődött munkamenet minőségéért verseng, nem a hatókörért.",{"type":120,"level":121,"id":106,"text":107},{"type":113,"content":418},[419,420,425],"A WebMCP egy jól rajzolt API egy valós problémára, és jobban rajzolva, mint ahogy a legtöbb csapat maga megépítené. Még nem függőség. Építsd az eszközréteget feature check mögé, tartsd a emberi felületet elsődleges útként, és térj vissza, ha megjelenik a második motor, vagy ha a deklaratív fele már nem csak Chromium-egyedüli. A részletekhez az oldal ",{"tag":421,"to":422,"children":423},"link","\u002Fblog\u002Fwebmcp-agent-ready-website-guide",[424],"ügynékkészített weboldal deklarált eszközökkel"," című útmutatója ad részletes betekintést.",{"type":135,"ordered":427,"items":428},true,[429,431,433,435,437],[430],"Vedd fel termékfelületeken, ahol egy bejelentkezett felhasználó és egy ügynök ugyanazt az oldalt látja: foglalás, checkout, támogatási kérelmek, beállítások.",[432],"Hagyd ki az egyszerű olvasási feladatoknál. Az oldal Markdown-másolata olcsóbb, és nem is kell böngésző.",[434],"Hagyd ki, ha a folyamatid túlnyomórészt olyan űrlapok, amelyeket nem tudsz annotálni, vagy ha nem tudod szinkronban tartani a felületet az eszközúttal.",[436],"Ne építs MCP-szervert arra az elvárásra, hogy a WebMCP lecseréli. Különböző rétegek, és a hasznos architektúra mindkettőt használja.",[438],"A karakterbüdzséket és az egy-funkció-egy-eszköz szabályt kemény korlátnak kezeld a katalógusra, nem javaslatnak.",{"type":251,"variant":440,"title":441,"body":442},"tip","A legolcsóbb első kísérlet",[443],[444,445,447],"Vegyél egy meglévő gombkezelőt, csomagold be őszintén beállított annotációkkal a ",{"tag":126,"children":446},[145]," hívásba, és mérd meg, hogy az ügynök az eszközútat választja-e a kattintási út helyett. Ez az egyetlen mérés gyorsabban megválaszolja az adaptációs kérdést, mint a specifikáció olvasása.",{"type":120,"level":121,"id":109,"text":110},{"type":135,"ordered":427,"items":450},[451,455,458,461,464,467,470,473],[452],{"tag":453,"href":32,"children":454},"a",[31],[456],{"tag":453,"href":35,"children":457},[34],[459],{"tag":453,"href":38,"children":460},[37],[462],{"tag":453,"href":41,"children":463},[40],[465],{"tag":453,"href":44,"children":466},[43],[468],{"tag":453,"href":47,"children":469},[46],[471],{"tag":453,"href":23,"children":472},[49],[474],{"tag":453,"href":52,"children":475},[51],[477,534,581,635],{"slug":478,"published":5,"minutes":479,"category":7,"tags":480,"keywords":485,"about":493,"sources":497,"cover":527,"og":528,"expertise":55,"locales":529,"lang":59,"title":530,"description":531,"coverAlt":532,"url":496,"pricing":533,"kind":481},"browserbase-stagehand",10,[481,482,483,484,13],"Browser automation","Web agents","Headless browsers","Playwright",[486,487,488,489,490,491,492],"browserbase","stagehand","stagehand vs playwright","browserbase pricing","ai web agent framework","headless browser api","browserbase alternatives",[494],{"name":495,"url":496},"Browserbase","https:\u002F\u002Fwww.browserbase.com",[498,501,504,507,510,513,516,519,522,525],{"title":499,"url":500},"Browserbase pricing","https:\u002F\u002Fwww.browserbase.com\u002Fpricing",{"title":502,"url":503},"Browserbase plans and pricing docs","https:\u002F\u002Fdocs.browserbase.com\u002Fguides\u002Fplans-and-pricing",{"title":505,"url":506},"Stagehand documentation","https:\u002F\u002Fdocs.stagehand.dev\u002F",{"title":508,"url":509},"Stagehand quickstart","https:\u002F\u002Fdocs.stagehand.dev\u002Fv4\u002Ffirst-steps\u002Fquickstart",{"title":511,"url":512},"Stagehand v4 announcement","https:\u002F\u002Fwww.browserbase.com\u002Fblog\u002Fstagehand-v4",{"title":514,"url":515},"Stagehand repository","https:\u002F\u002Fgithub.com\u002Fbrowserbase\u002Fstagehand",{"title":517,"url":518},"Browser Use comparison of the two vendors","https:\u002F\u002Fbrowser-use.com\u002Fposts\u002Fbrowser-use-vs-browserbase",{"title":520,"url":521},"Browser Use pricing","https:\u002F\u002Fwww.browser-use.com\u002Fpricing",{"title":523,"url":524},"Skyvern pricing","https:\u002F\u002Fskyvern.com\u002Fpricing",{"title":484,"url":526},"https:\u002F\u002Fplaywright.dev\u002F","\u002Fimages\u002Fblog\u002Fbrowserbase-stagehand\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fbrowserbase-stagehand\u002Fog.jpg",[57,58,59],"A Browserbase és a Stagehand értékelése: bérelt Chrome AI-agentekhez","A Browserbase percenként ad kezelt Chromot, a Stagehand pedig természetes nyelvű lépésekkel épül rá. Mennyibe kerül, hol futnak a méterek, és mikor nyer a sima Playwright.","Absztrakt pipeline-grafika a Browserbase és a Stagehand értékeléséhez","From $20 per month · OSS library free",{"slug":535,"published":536,"minutes":479,"category":7,"tags":537,"keywords":540,"about":548,"sources":552,"cover":574,"og":575,"expertise":55,"locales":576,"lang":59,"title":577,"description":578,"coverAlt":579,"url":550,"pricing":580,"kind":481},"playwright","2026-05-27",[538,481,13,539],"End-to-end testing","Cross-browser",[535,541,542,543,544,545,546,547],"playwright vs selenium","playwright mcp","browser automation testing","playwright test runner","playwright for ai agents","playwright vs cypress","playwright cloud pricing",[549,551],{"name":484,"url":550},"https:\u002F\u002Fplaywright.dev",{"name":25,"url":26},[553,556,559,562,565,568,571],{"title":554,"url":555},"Playwright documentation: installation","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Fintro",{"title":557,"url":558},"Playwright MCP introduction","https:\u002F\u002Fplaywright.dev\u002Fmcp\u002Fintroduction",{"title":560,"url":561},"Playwright CLI introduction","https:\u002F\u002Fplaywright.dev\u002Fagent-cli\u002Fintroduction",{"title":563,"url":564},"Playwright Test agents","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Ftest-agents",{"title":566,"url":567},"npm package metadata for @playwright\u002Ftest","https:\u002F\u002Fregistry.npmjs.org\u002F@playwright\u002Ftest\u002Flatest",{"title":569,"url":570},"Microsoft Learn: Playwright Workspaces free trial","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fapp-testing\u002Fplaywright-workspaces\u002Fhow-to-try-playwright-workspaces-free",{"title":572,"url":573},"Azure App Testing pricing","https:\u002F\u002Fazure.microsoft.com\u002Fen-us\u002Fpricing\u002Fdetails\u002Fapp-testing\u002F","\u002Fimages\u002Fblog\u002Fplaywright\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fplaywright\u002Fog.jpg",[57,58,59],"Playwright: egy böngésző-API tesztekhez, szkriptekhez és agentekhez","A Playwright a Chromiumot, a Firefoxot és a WebKitet vezéreli egyetlen Apache-2.0-API-ról: tesztfuttató, agentekhez való CLI és MCP-szerver. Mibe kerül, és hol akad el.","Playwright-tesztfutás: spec fájl, három böngészőmotorra bontó futtató és accessibility snapshotokat olvasó agent.","Apache-2.0 · cloud paid",{"slug":582,"published":536,"minutes":479,"category":7,"tags":583,"keywords":588,"about":595,"sources":602,"cover":626,"og":627,"expertise":55,"locales":628,"lang":59,"title":629,"description":630,"coverAlt":631,"url":632,"pricing":633,"kind":634},"elevenlabs",[584,585,586,587],"Text to speech","Voice API","Speech to text","Voice cloning",[582,589,590,591,592,593,594],"elevenlabs api pricing","elevenlabs vs openai tts","text to speech api comparison","elevenlabs flash latency","voice cloning api","eleven v4 model",[596,599],{"name":597,"url":598},"ElevenLabs","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElevenLabs",{"name":600,"url":601},"Speech synthesis","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSpeech_synthesis",[603,606,609,612,615,617,620,623],{"title":604,"url":605},"ElevenLabs pricing: plans and credits","https:\u002F\u002Felevenlabs.io\u002Fpricing",{"title":607,"url":608},"ElevenAPI pricing: per-product rates","https:\u002F\u002Felevenlabs.io\u002Fpricing\u002Fapi",{"title":610,"url":611},"ElevenLabs documentation: models","https:\u002F\u002Felevenlabs.io\u002Fdocs\u002Fmodels",{"title":613,"url":614},"API reference: create speech","https:\u002F\u002Felevenlabs.io\u002Fdocs\u002Fapi-reference\u002Ftext-to-speech\u002Fconvert",{"title":616,"url":598},"Wikipedia: ElevenLabs",{"title":618,"url":619},"Amazon Polly pricing","https:\u002F\u002Faws.amazon.com\u002Fpolly\u002Fpricing\u002F",{"title":621,"url":622},"OpenAI API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":624,"url":625},"SILMA AI: text to speech price comparison, August 2026","https:\u002F\u002Fsilma.ai\u002Fblog\u002Ftext-to-speech-price-comparison-august-2026","\u002Fimages\u002Fblog\u002Felevenlabs\u002Fcover.webp","\u002Fimages\u002Fblog\u002Felevenlabs\u002Fog.jpg",[57,58,59],"ElevenLabs: beszédszintézis API-ként","Az ElevenLabs audió-API értékelése: modellpaletta, késleltetési adatok, kredit- és karakteralapú árazás, tarifához kötött formátumok, és hol nyer az OpenAI és az Amazon Polly.","ElevenLabs borítógrafika beszéd-API pipeline feliratokkal","https:\u002F\u002Felevenlabs.io","Free tier · from $5 per month","Voice and audio API",{"slug":636,"published":637,"minutes":479,"category":7,"tags":638,"keywords":644,"about":653,"sources":660,"cover":691,"og":692,"expertise":55,"locales":693,"lang":59,"title":694,"description":695,"coverAlt":696,"url":697,"pricing":698,"kind":699},"replicate","2026-05-22",[639,640,641,642,643],"Model hosting","Serverless GPU","Diffusion","Async jobs","Webhooks",[645,646,647,648,649,650,651,652],"replicate api","replicate vs fal.ai","serverless gpu inference pricing","replicate webhooks","replicate cold start","replicate vs baseten","how to run an open source model in production","replicate prediction api",[654,657],{"name":655,"url":656},"Replicate","https:\u002F\u002Freplicate.com\u002Fdocs",{"name":658,"url":659},"Serverless computing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServerless_computing",[661,664,667,670,673,676,679,682,685,688],{"title":662,"url":663},"Replicate pricing","https:\u002F\u002Freplicate.com\u002Fpricing",{"title":665,"url":666},"Replicate docs: About predictions","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions",{"title":668,"url":669},"Replicate docs: Create a prediction","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Fcreate-a-prediction",{"title":671,"url":672},"Replicate docs: Prediction lifecycle","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Flifecycle",{"title":674,"url":675},"Replicate docs: Rate limits","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Frate-limits",{"title":677,"url":678},"Replicate docs: Data retention","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Fdata-retention",{"title":680,"url":681},"Replicate docs: Verify webhooks","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fwebhooks\u002Fverify-webhook",{"title":683,"url":684},"Replicate docs: Official models","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fmodels\u002Fofficial-models",{"title":686,"url":687},"fal.ai pricing","https:\u002F\u002Ffal.ai\u002Fpricing",{"title":689,"url":690},"Baseten pricing","https:\u002F\u002Fwww.baseten.co\u002Fpricing\u002F","\u002Fimages\u002Fblog\u002Freplicate\u002Fcover.webp","\u002Fimages\u002Fblog\u002Freplicate\u002Fog.jpg",[57,58,59],"Replicate teszt: modell-API másodpercenkénti árazással, az élekkel együtt","A Replicate több ezer nyílt modellt tesz egyetlen predikciós API mögé, és a számítási idő másodpercével számol. Teszt a cold bootokról, verziódriftről és az egy órás törlésről.","A kérés a starting és a processing állapoton át négy végállapot egyikébe vezet: succeeded, failed, canceled vagy aborted.","https:\u002F\u002Freplicate.com","Pay per second of compute","Model hosting API",1791383549980]