Yayınlanma tarihi: 18 Mayıs 2026
| Açıklayıcı | Web | Uzantılar | Chrome Durumu | Amaç |
|---|---|---|---|---|
| GitHub | Görünüm | Deneme Yapma Amacı (Intent to Experiment) |
Standart JavaScript ile birçok araç türünü tanımlamak için WebMCP Imperative API'yi kullanabilirsiniz. Araçlarınız, form girişi, site gezinme ve durum yönetimi gibi farklı işlevleri yerine getirebilir.
Bu API'yi kullanmadan önce kullanım alanları örnekleri hakkında bilgi edinin.
Model bağlamı sağlama
Araçları kaydetmek için modelContext arayüzünü kullanın. Araç kaydı için ad, açıklama ve alakalı özelliklere sahip giriş şeması gerekir.
Model bağlamına tek bir araç eklemek için registertool simgesini kullanın.
WebMCPza Maker
navigator.modelContext.registerTool({
name: 'toggle_layer',
description: 'Control pizza layers (sauce, cheese). Use "add", "remove", or "toggle".',
inputSchema: {
type: 'object',
properties: {
layer: { type: 'string', enum: ['sauce-layer', 'cheese-layer'] },
action: { type: 'string', enum: ['add', 'remove', 'toggle'] },
},
required: ['layer'],
},
execute: ({ layer, action }) => {
toggleLayer(layer, action);
return `Performed ${action || 'toggle'} on layer: ${layer}`;
},
});
Sipariş durumunu alma
navigator.modelContext.registerTool({
name: 'get_order_status',
description: 'Search orders in a given timeframe. Returns order number, shipping status and location',
inputSchema: {
"type": "object",
"properties": {
"timeframe": { "type": "string", "oneOf": [
{ "type": "string", "const": "today", "title": "Today" },
{ "type": "string", "const": "yesterday", "title": "Yesterday" },
{ "type": "string", "const": "last_7_days", "title": "Last 7 Days" },
{ "type": "string", "const": "last_30_days", "title": "Last 30 Days" },
{ "type": "string", "const": "last_6_months", "title": "Last 6 Months" }],
"enum": [ "today", "yesterday", "last_7_days", "last_30_days", "last_6_months" ],
"description": "Timeframe for the order lookup." }
},
"required": [ "timeframe" ]
},
execute: ({ timeframe }) => {
// Add your API or database logic here to fetch and return the order data as a string.
},
});
İsteğe bağlı parametre olarak iletildiğinde AbortSignal ile bir aracı kaldırabilirsiniz.
const addTodoTool = {
name: "addTodo",
description: "Add a new item to the to-do list",
inputSchema: {
type: "object",
properties: { text: { type: "string" } },
},
execute: ({ text }) => {
// You should handle the persistence logic here (omitted for demo)
return `Added to-do: ${text}`;
},
annotations: {
readOnlyHint: false,
untrustedContentHint: true
},
};
const controller = new AbortController();
navigator.modelContext.registerTool(addTodoTool, { signal: controller.signal });
// Unregister the tool later...
controller.abort();
Araçları keşfedin
Kullanılabilir araçları görmek için navigator.modelContext.getTools() simgesini kullanın. Bu eşzamansız yöntem, çağıran dokümanın kaynağına göre erişmeye yetkili olduğu araçların listesini döndürür.
const [tool] = await navigator.modelContext.getTools();
console.log(tool);
// {
// annotations: { readOnlyHint: false, untrustedContentHint: true },
// description: "Add a new item to the to-do list",
// inputSchema: '{"type":"object","properties":{"text":{"type":"string"}}}',
// name: "addTodo",
// origin: "https://example.com",
// window: Window {window: Window, self: Window, ...},
// }
Aracı yürüt
getTools() içinde keşfedilen bir aracı manuel olarak yürütmek için giriş bağımsız değişkenleriyle birlikte navigator.modelContext.executeTool() işlevini geçerli bir JSON dizesi olarak çağırın. Bu eşzamansız yöntem, araç yürütme sonucunu veya gezinme tetiklendiğinde boş değeri döndürür.
const result = await navigator.modelContext.executeTool(tool, '{"text": "Buy milk"}');
console.log(result);
// 'Added to-do: Buy milk'
İsteğe bağlı bir parametre olarak iletildiğinde AbortSignal ile bekleyen bir araç yürütmesini iptal edebilirsiniz.
const controller = new AbortController();
navigator.modelContext.executeTool(tool, '{"text": "Buy milk"}', {
signal: controller.signal,
});
// Cancel tool execution later...
controller.abort();
Etkinlikler
Kullanılabilir araçların listesi değiştiğinde bildirim almak için çerçeveler, navigator.modelContext üzerinde toolchange etkinliğini dinleyebilir.
navigator.modelContext.addEventListener("toolchange", (event) => {
// Tools have changed.
});
Kaynaklar arası iframe'ler
WebMCP, hem izin politikalarını hem de açık kaynak sınırlamayı kullanan çapraz kaynak iframe'leri destekler.
İzin politikası
Araç kaydı, kaynaklar arası iFrame'lerde varsayılan olarak devre dışıdır. Bir sayfa, tools
izin politikası kullanılarak erişimi temsilciye devretmelidir:
<iframe src="https://example.com" allow="tools"></iframe>
Kaynak görünürlüğü
Araçlar, varsayılan olarak çapraz kaynaklı dokümanlarda kullanılamaz. Bir aracı görüntülemesine ve yürütmesine izin verilen belirli kaynakları listelemek için registerTool içinde exposedTo dizisini kullanabilirsiniz. Bu dizi yalnızca HTTPS protokolüne sahip kaynakları destekler.
navigator.modelContext.registerTool({
name: 'my_shared_tool',
description: 'Shared across origins',
// ...
}, {
exposedTo: ['https://trusted.com', 'https://partner.org']
});
Etkileşim kurma ve geri bildirim paylaşma
WebMCP aktif olarak tartışılmaktadır ve gelecekte değişebilir. Bu API'yi denerseniz ve geri bildiriminiz olursa lütfen bizimle paylaşın.
- WebMCP açıklayıcısını okuyun, soru sorun ve tartışmaya katılın.
- WebMCP en iyi uygulamalarını okuyun.
- Chrome'daki uygulamayı Chrome Status'ta inceleyin.
- Yeni API'leri erken incelemek ve posta listemize erişmek için erken önizleme programına katılın.
- Chrome'un uygulamasıyla ilgili geri bildiriminiz varsa Chromium hata bildiriminde bulunun.