input_and_type
Automatically click, clear, and type text into form fields, with optional form submission via Enter.
Instructions
One-stop tool for filling form fields. Automatically clicks the input, clears existing text, types your text, and optionally submits with Enter. Use this for search boxes, login forms, registration fields, etc.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | CSS selector or XPath to the input/textarea element | |
| selectorType | No | Selector type: "css" (default) or "xpath" | |
| text | Yes | Text to type into the input field | |
| clearFirst | No | Clear existing text before typing (default: true). Set to false to append. | |
| submit | No | Press Enter automatically after typing to submit forms | |
| tabId | No | Target tab ID (defaults to active tab) | |
| apiKey | No | API key for authentication if enabled |
Implementation Reference
- src/tools/input.ts:5-31 (handler)The registerInputTools function defines the 'input_and_type' MCP tool handler. It accepts parameters: selector, selectorType, text, clearFirst, submit, tabId, apiKey. It sends a bridge command named 'input_and_type' with the params and returns the result.
export function registerInputTools(server: McpServer, bridge: WebSocketBridge) { server.tool( 'input_and_type', 'One-stop tool for filling form fields. Automatically clicks the input, clears existing text, types your text, and optionally submits with Enter. Use this for search boxes, login forms, registration fields, etc.', { selector: z.string().describe('CSS selector or XPath to the input/textarea element'), selectorType: z.enum(['css', 'xpath']).optional().describe('Selector type: "css" (default) or "xpath"'), text: z.string().describe('Text to type into the input field'), clearFirst: z.boolean().optional().describe('Clear existing text before typing (default: true). Set to false to append.'), submit: z.boolean().optional().describe('Press Enter automatically after typing to submit forms'), tabId: z.number().optional().describe('Target tab ID (defaults to active tab)'), apiKey: z.string().optional().describe('API key for authentication if enabled'), }, async ({ selector, selectorType, text, clearFirst, submit, tabId, apiKey }) => { const result = await bridge.sendCommand({ command: 'input_and_type', params: { selector, selectorType, text, clearFirst, submit }, tabId, apiKey, }); if (!result.success) { return { content: [{ type: 'text', text: `Error: ${result.error?.message}` }], isError: true }; } return { content: [{ type: 'text', text: `Typed "${text.substring(0, 50)}${text.length > 50 ? '...' : ''}" into ${selector}` }] }; } ); } - src/tools/index.ts:29-55 (registration)The registerAllTools function in src/tools/index.ts calls registerInputTools, which registers the 'input_and_type' tool on the MCP server.
export function registerAllTools(server: McpServer, bridge: WebSocketBridge) { registerNavigationTools(server, bridge); registerTabManagementTools(server, bridge); registerKeyboardTools(server, bridge); registerScreenshotTools(server, bridge); registerClickTools(server, bridge); registerInputTools(server, bridge); registerDragDropTools(server, bridge); registerHoverTools(server, bridge); registerDevtoolsSourcesTools(server, bridge); registerDevtoolsModifyTools(server, bridge); registerDevtoolsNetworkTools(server, bridge); registerDevtoolsStorageTools(server, bridge); registerDevtoolsConsoleTools(server, bridge); registerAccessibilityTools(server, bridge); registerEmulationTools(server, bridge); registerElementTools(server, bridge); registerAuditTools(server, bridge); registerInteractionTools(server, bridge); registerMonitoringTools(server, bridge); registerQaTools(server, bridge); registerGestureTools(server, bridge); registerMacroTools(server, bridge); registerVisualRegressionTools(server, bridge); }