Skip to main content
Glama
lewisvoncken

Playwright MCP

by lewisvoncken

browser_drag

Drag elements between two specified locations on web pages for browser automation testing and interaction.

Instructions

Perform drag and drop between two elements

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
startElementYesHuman-readable source element description used to obtain the permission to interact with the element
startRefYesExact source element reference from the page snapshot
endElementYesHuman-readable target element description used to obtain the permission to interact with the element
endRefYesExact target element reference from the page snapshot

Implementation Reference

  • The handle function executes the drag and drop operation by resolving locators from the page snapshot and performing dragTo action on them, while also generating equivalent Playwright code.
    handle: async (context, params) => {
      const snapshot = context.currentTabOrDie().snapshotOrDie();
      const startLocator = snapshot.refLocator({ ref: params.startRef, element: params.startElement });
      const endLocator = snapshot.refLocator({ ref: params.endRef, element: params.endElement });
    
      const code = [
        `// Drag ${params.startElement} to ${params.endElement}`,
        `await page.${await generateLocator(startLocator)}.dragTo(page.${await generateLocator(endLocator)});`
      ];
    
      return {
        code,
        action: () => startLocator.dragTo(endLocator),
        captureSnapshot: true,
        waitForNetwork: true,
      };
    },
  • Zod schema defining the input for the browser_drag tool, requiring start/end element descriptions and refs.
    schema: {
      name: 'browser_drag',
      title: 'Drag mouse',
      description: 'Perform drag and drop between two elements',
      inputSchema: z.object({
        startElement: z.string().describe('Human-readable source element description used to obtain the permission to interact with the element'),
        startRef: z.string().describe('Exact source element reference from the page snapshot'),
        endElement: z.string().describe('Human-readable target element description used to obtain the permission to interact with the element'),
        endRef: z.string().describe('Exact target element reference from the page snapshot'),
      }),
      type: 'destructive',
    },
  • The defineTool call that defines and registers the browser_drag tool, including its schema and handler.
    const drag = defineTool({
      capability: 'core',
      schema: {
        name: 'browser_drag',
        title: 'Drag mouse',
        description: 'Perform drag and drop between two elements',
        inputSchema: z.object({
          startElement: z.string().describe('Human-readable source element description used to obtain the permission to interact with the element'),
          startRef: z.string().describe('Exact source element reference from the page snapshot'),
          endElement: z.string().describe('Human-readable target element description used to obtain the permission to interact with the element'),
          endRef: z.string().describe('Exact target element reference from the page snapshot'),
        }),
        type: 'destructive',
      },
    
      handle: async (context, params) => {
        const snapshot = context.currentTabOrDie().snapshotOrDie();
        const startLocator = snapshot.refLocator({ ref: params.startRef, element: params.startElement });
        const endLocator = snapshot.refLocator({ ref: params.endRef, element: params.endElement });
    
        const code = [
          `// Drag ${params.startElement} to ${params.endElement}`,
          `await page.${await generateLocator(startLocator)}.dragTo(page.${await generateLocator(endLocator)});`
        ];
    
        return {
          code,
          action: () => startLocator.dragTo(endLocator),
          captureSnapshot: true,
          waitForNetwork: true,
        };
      },
    });
  • Module exports an array of tools including the drag tool for overall registration.
    export default [
      snapshot,
      click,
      drag,
      hover,
      type,
      selectOption,
    ];

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lewisvoncken/playwright-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server