Imperative API

Alexandra Klepper
Alexandra Klepper
François Beaufort
François Beaufort

पब्लिश होने की तारीख: 18 मई, 2026, पिछली बार अपडेट होने की तारीख: 1 जुलाई, 2026

ज़्यादा जानकारी देने वाला वीडियो वेब एक्सटेंशन Chrome स्टेटस मकसद
GitHub ऑरिजिन ट्रायल ऑरिजिन ट्रायल देखें प्रयोग करने का मकसद

WebMCP Imperative API का इस्तेमाल करके, स्टैंडर्ड JavaScript की मदद से कई तरह के टूल तय किए जा सकते हैं. आपके टूल, अलग-अलग फ़ंक्शन को एक्ज़ीक्यूट कर सकते हैं. जैसे, फ़ॉर्म में इनपुट देना, साइट पर नेविगेट करना, और स्टेट मैनेजमेंट.

इस एपीआई का इस्तेमाल करने से पहले, इस्तेमाल के उदाहरणों के बारे में पढ़ें.

मॉडल का कॉन्टेक्स्ट देना

टूल रजिस्टर करने के लिए, modelContext इंटरफ़ेस का इस्तेमाल करें. टूल रजिस्टर करने के लिए, नाम, जानकारी, और काम की प्रॉपर्टी के साथ इनपुट स्कीमा की ज़रूरत होती है.

मॉडल के कॉन्टेक्स्ट में कोई टूल जोड़ने के लिए, registertool का इस्तेमाल करें.

WebMCPza Maker

await document.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: async ({ layer, action }) => {
    await toggleLayer(layer, action);
    return `Performed ${action || 'toggle'} on layer: ${layer}`;
  },
});

ऑर्डर का स्टेटस पाना

await document.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: async ({ timeframe }) => {
    // Add your API or database logic here to fetch and return the order data as a string.
  },
});

ज़रूरी नहीं वाले पैरामीटर के तौर पर पास किए जाने पर, AbortSignal की मदद से किसी टूल को हटाया जा सकता है.

const addTodoTool = {
  name: "addTodo",
  description: "Add a new item to the to-do list",
  inputSchema: {
    type: "object",
    properties: { text: { type: "string" } },
  },
  execute: async ({ 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();
await document.modelContext.registerTool(addTodoTool, { signal: controller.signal });

// Unregister the tool later...
controller.abort();

टूल के बारे में जानना

उपलब्ध टूल पाने के लिए, document.modelContext.getTools() का इस्तेमाल करें. यह एसिंक्रोनस तरीका, उन टूल की वर्णमाला के क्रम में लगाई गई सूची दिखाता है जिन्हें कॉल करने वाले दस्तावेज़ को ऐक्सेस करने की अनुमति है.

const [tool] = await document.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, ...},
// }

डिफ़ॉल्ट रूप से, getTools() सिर्फ़ एक ही ऑरिजिन वाले उन टूल को दिखाता है जिन्हें कॉल करने वाले दस्तावेज़ या फ़्रेम ट्री में मौजूद एक ही ऑरिजिन वाले अन्य दस्तावेज़ों ने रजिस्टर किया है. क्रॉस-ऑरिजिन टूल पाने के लिए, आपको fromOrigins विकल्प में उनके ऑरिजिन साफ़ तौर पर बताने होंगे. इस कलेक्शन में सिर्फ़ सुरक्षित ऑरिजिन शामिल किए जा सकते हैं.

क्रॉस-ऑरिजिन दस्तावेज़ों के टूल सिर्फ़ तब शामिल किए जाते हैं, जब:

  1. होस्ट करने वाले ऑरिजिन को fromOrigins विकल्प में शामिल किया गया हो.
  2. आपके ऑरिजिन के लिए, टूल को साफ़ तौर पर दिखाया गया हो.
// https://example.com

// Get same-origin tools only
const sameOriginTools = await document.modelContext.getTools();

// Get same-origin tools plus tools from specific cross-origin documents
const allTools = await document.modelContext.getTools({
  fromOrigins: ['https://partner.org']
});

iframe से टूल पाने और उन्हें वेब पर आधारित चैट इंटरफ़ेस में एक्ज़ीक्यूट करने के तरीके का उदाहरण देखने के लिए, WebMCP Page Agent का डेमो देखें.

टूल एक्ज़ीक्यूट करना

getTools() में खोजे गए किसी टूल को मैन्युअल तरीके से एक्ज़ीक्यूट करने के लिए, मान्य JSON स्ट्रिंग के तौर पर इनपुट आर्ग्युमेंट के साथ document.modelContext.executeTool() को कॉल करें. यह एसिंक्रोनस तरीका, टूल के एक्ज़ीक्यूशन का नतीजा दिखाता है. साथ ही, नेविगेशन ट्रिगर होने पर, यह शून्य दिखाता है.

const result = await document.modelContext.executeTool(tool, '{"text": "Buy milk"}');
console.log(result);

// 'Added to-do: Buy milk'

ज़रूरी नहीं वाले पैरामीटर के तौर पर पास किए जाने पर, AbortSignal की मदद से, टूल के पेंडिंग एक्ज़ीक्यूशन को रद्द किया जा सकता है.

const controller = new AbortController();
document.modelContext.executeTool(tool, '{"text": "Buy milk"}', {
  signal: controller.signal,
});

// Cancel tool execution later...
controller.abort();

इवेंट

उपलब्ध टूल की सूची में बदलाव होने पर, फ़्रेम को सूचना मिल सकती है. इसके लिए, वे document.modelContext पर toolchange इवेंट को सुन सकते हैं.

document.modelContext.addEventListener("toolchange", (event) => {
  // Tools have changed.
});

क्रॉस-ऑरिजिन iframe

WebMCP, क्रॉस-ऑरिजिन iframe के साथ काम करता है. ये iframe, अनुमति से जुड़ी नीतियों और ऑरिजिन गेटिंग, दोनों का इस्तेमाल करते हैं.

अनुमतियों की नीति

क्रॉस-ऑरिजिन iframe में, टूल रजिस्टर करने की सुविधा डिफ़ॉल्ट रूप से बंद होती है. किसी पेज को, अनुमतियों की नीति का इस्तेमाल करके, ऐक्सेस की अनुमति देनी होगी:tools

<iframe src="https://example.com" allow="tools"></iframe>

ऑरिजिन एक्सपोज़र

डिफ़ॉल्ट रूप से, क्रॉस-ऑरिजिन दस्तावेज़ों के लिए टूल उपलब्ध नहीं होते. किसी टूल को देखने और उसे एक्ज़ीक्यूट करने की अनुमति वाले खास ऑरिजिन की सूची बनाने के लिए, registerTool में exposedTo कलेक्शन का इस्तेमाल किया जा सकता है. इस कलेक्शन में सिर्फ़ सुरक्षित ऑरिजिन शामिल किए जा सकते हैं.

// https://partner.org

await document.modelContext.registerTool({
  name: 'my_shared_tool',
  description: 'Shared across origins',
  // ...
}, {
  exposedTo: ['https://example.com']
});

Angular के साथ काम करने की सुविधा

Angular में, WebMCP के साथ काम करने की सुविधा, फ़िलहाल एक्सपेरिमेंटल है. अगर आपका ऐप्लिकेशन पहले से ही Angular में लिखा गया है, तो ऐप्लिकेशन के डिपेंडेंसी इंजेक्शन लाइफ़साइकल से जुड़े टूल रजिस्टर किए जा सकते हैं. साथ ही, Signal Forms को WebMCP टूल में बदला जा सकता है.

सुझाव, शिकायत या राय शेयर करना

WebMCP पर फ़िलहाल चर्चा चल रही है. आने वाले समय में, इसमें बदलाव हो सकता है. अगर आपने इस एपीआई को आज़माया है और आपके पास कोई सुझाव, शिकायत या राय है, तो हमें इसके बारे में बताएं.