Pilot
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PILOT_PROFILE | No | Determines which tools are loaded to avoid overwhelming the LLM. 'core' (9 tools), 'standard' (25 tools), or 'full' (51 tools). | full |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pilot_navigateA | Navigate the browser to a URL and wait for DOM content to load. Use when the user wants to go to a specific webpage, URL, or link. For read tasks ("go to X and tell me Y"), prefer pilot_get — it returns full readable content + interactive elements in one call, eliminating a follow-up snapshot call. Parameters:
Returns: Confirmation message with the HTTP status code, content preview, and interactive elements. Errors:
|
| pilot_backA | Navigate back to the previous page in browser history. Use when the user wants to go back to the prior page they visited. Parameters: (none) Returns: The URL of the page after navigating back. Errors:
|
| pilot_forwardA | Navigate forward to the next page in browser history. Use when the user wants to go forward after using pilot_back. Parameters: (none) Returns: The URL of the page after navigating forward. Errors:
|
| pilot_reloadA | Reload the current page, waiting for DOM content to load. Use when the user wants to refresh the page, clear dynamic state, or retry a failed load. Parameters: (none) Returns: The URL of the reloaded page. Errors:
|
| pilot_getA | Navigate to a URL and return its full readable content + interactive elements in one call. Use this as the primary tool for "go to X and find Y" read tasks. It combines navigation and content extraction, eliminating the need for a separate snapshot call. Parameters:
Returns: Page title, readable body text (up to 1500 chars), and interactive elements. Enough context to answer most read questions without additional tool calls. Errors:
|
| pilot_snapshotA | Capture an accessibility tree snapshot of the page with @eN refs for element selection. Use when the user wants to see the page structure, find elements to interact with, or get refs for click/fill/hover. This is the primary way to understand what is on the page. Refs from this snapshot are used by pilot_click, pilot_fill, pilot_hover, pilot_select_option, and most other interaction tools. Parameters:
Returns: Text representation of the accessibility tree with @eN refs (and @cN refs if include_cursor_interactive is true). If output_file=true: returns only the file path (e.g. /tmp/pilot-snap-abc123.txt). Errors:
|
| pilot_snapshot_diffA | Compare the current page state against the previously captured snapshot, showing a unified diff of what changed. Use when the user wants to verify the effect of an action (click, fill, navigation), check if dynamic content loaded, or see what changed on the page without re-reading the entire snapshot. The first call stores a baseline; subsequent calls diff against it. Parameters:
Returns: Unified diff text showing added (+) and removed (-) lines between snapshots. Errors:
|
| pilot_findA | Find an element by visible text, label, placeholder, or role — without running a full snapshot. Use when you know what you want to click or fill but don't need to see the entire page tree. Returns a @eN ref immediately usable by pilot_click, pilot_fill, pilot_hover, and other interaction tools. Saves tokens compared to pilot_snapshot when you only need one element. Parameters:
Returns: A @eN ref for the found element and a description of what was found. Errors:
|
| pilot_annotated_screenshotA | Take a PNG screenshot with red overlay boxes and ref labels at each @eN/@cN element position. Use when the user wants a visual debug overlay showing where each snapshot ref is located on the page, or needs to verify element positions visually. Requires a prior pilot_snapshot call to populate the ref positions. For a clean visual capture without debug overlays, use pilot_screenshot instead. Parameters:
Returns: The annotated screenshot as a base64 PNG image and the file path where it was saved. Errors:
|
| pilot_clickA | Click an element on the page using a ref from pilot_snapshot or a CSS selector. Use when the user wants to press a button, follow a link, check a checkbox, or interact with any clickable element. Auto-routes clicks on elements to pilot_select_option. Parameters:
Returns: Confirmation with the clicked ref and the current URL after navigation (if any). Errors:
|
| pilot_hoverA | Hover the mouse over an element, triggering hover states, tooltips, and dropdown menus. Use when the user wants to reveal hidden content, trigger a CSS :hover effect, or inspect tooltip text. Parameters:
Returns: Confirmation with the hovered element ref. Errors:
|
| pilot_fillA | Fill an input or textarea with new text, replacing any existing content. Use when the user wants to enter text into a form field, search box, or editable element. Prefer pilot_fill over pilot_type for inputs because it is faster and clears existing content automatically. Parameters:
Returns: Confirmation with the filled element ref. Errors:
|
| pilot_select_optionA | Select an option from a dropdown element by value, label, or visible text. Use when the user wants to choose a dropdown option, select from a combobox, or pick from a list. Note: clicking an in pilot_snapshot is auto-routed here. Parameters:
Returns: Confirmation with the selected value and element ref. Errors:
|
| pilot_typeA | Type text character-by-character into the currently focused element, simulating real keyboard input. Use when the user wants to type into a contenteditable div, rich text editor, or a field that reacts to individual keystrokes (e.g., autocomplete, keypress events). For standard / elements, prefer pilot_fill which is faster. Parameters:
Returns: Character count typed and whether Enter was pressed. Errors:
|
| pilot_press_keyA | Press a keyboard key or key combination on the page. Use when the user wants to press Enter to submit a form, Tab to move between fields, Escape to close a modal, ArrowDown to navigate a list, or use any keyboard shortcut. Parameters:
Returns: Confirmation of the key pressed. Errors:
|
| pilot_dragA | Drag one element and drop it onto another element on the page. Use when the user wants to move an element, reorder items in a drag-and-drop list, or interact with a drag-and-drop UI. Parameters:
Returns: Confirmation with source and target refs. Errors:
|
| pilot_scrollA | Scroll the page or a specific element into view. Use when the user wants to scroll down a long page, scroll to the bottom, scroll to the top, or scroll a specific element into the viewport. With a ref, scrolls the element into view. Without a ref, scrolls the page by one viewport height or to a specific position. Parameters:
Returns: Confirmation of what was scrolled and in which direction. Errors:
|
| pilot_waitA | Wait for a specific condition before proceeding — an element to appear, the network to become idle, or the page to finish loading. Use when the user wants to wait for a dynamic element to load, wait for AJAX/fetch requests to complete, or wait for a modal/spinner to appear or disappear. Parameters:
Returns: Confirmation of what was waited for and its state. Errors:
|
| pilot_file_uploadA | Upload one or more files to a file input element on the page. Use when the user wants to attach files, upload images, or submit documents through a file input field. Parameters:
Returns: Confirmation with file names and sizes uploaded. Errors:
|
| pilot_page_textA | Extract clean text from the page (strips script/style/noscript/svg). |
| pilot_page_htmlA | Get innerHTML of a selector/ref, or full page HTML if none provided. |
| pilot_page_linksB | Get all links on the page as text + href pairs. |
| pilot_page_formsA | Extract all form elements on the page as structured JSON with their types, names, IDs, and current values. Use when the user wants to understand form structure, see all input fields with their current values, check form methods and actions, or plan form filling automation. Password field values are redacted for security. Parameters: (none) Returns: JSON array of form objects, each containing the form's index, action URL, method, id, and an array of field objects with tag, type, name, id, placeholder, required, and value. Errors: None — returns empty array "[]" if no forms exist on the page. |
| pilot_page_attrsA | Get all HTML attributes of a specific element as a JSON object. Use when the user wants to inspect an element's attributes (data-, aria-, class, id, href, src, etc.), check custom data attributes, or debug attribute-related issues. Parameters:
Returns: JSON object mapping attribute names to their values. Errors:
|
| pilot_page_cssA | Get the computed CSS property value for a specific element. Use when the user wants to check styling details (colors, fonts, dimensions, spacing), debug CSS issues, or verify that styles are applied correctly. Returns the final computed value after all CSS rules and inheritance are resolved. Parameters:
Returns: The computed CSS property value as a string (e.g., "rgb(255, 0, 0)", "16px", "flex"). Errors:
|
| pilot_element_stateA | Check the current state of an element — whether it is visible, hidden, enabled, disabled, checked, editable, or focused. Use when the user wants to verify an element's condition before interacting with it, check if a button is disabled, confirm a checkbox is checked, or debug why an interaction is failing. Parameters:
Returns: Boolean string "true" or "false" indicating the element's state for the requested property. Errors:
|
| pilot_consoleA | Retrieve browser console messages (console.log, console.warn, console.error) from a circular buffer. Use when the user wants to debug JavaScript errors, check application logs, inspect warnings, or see what the page is printing to the console. Parameters:
Returns: Timestamped list of console messages with their log level, or "(no console messages)" if the buffer is empty. Errors: None — returns empty message if no entries match the filter. |
| pilot_networkA | Retrieve network requests (XHR, fetch, navigation, static assets) from a circular buffer. Use when the user wants to debug API calls, check request/response status codes, monitor network activity, or verify that a request was made after an action. Parameters:
Returns: List of requests showing method, URL, status code, duration in ms, and response size in bytes. Or "(no network requests)" if the buffer is empty. Errors: None — returns empty message if no entries exist. |
| pilot_dialogA | Retrieve captured browser dialog messages (alert, confirm, prompt) from a circular buffer. Use when the user wants to see what native dialogs appeared on the page, check prompt text, or verify that a dialog was triggered after an action. Note: configure auto-handling with pilot_handle_dialog to prevent dialogs from blocking page interaction. Parameters:
Returns: Timestamped list of dialogs showing type (alert/confirm/prompt), message text, and the action taken (accepted/dismissed) with any response text. Or "(no dialogs captured)" if empty. Errors: None — returns empty message if no dialogs were captured. |
| pilot_evaluateA | Execute a JavaScript expression or function in the browser page context and return the result. Use when the user wants to run custom JavaScript on the page, read or modify DOM elements, extract data, or perform calculations. Supports async/await — use "await" to wait for promises. Multi-line code with await is automatically wrapped in an async IIFE. Parameters:
Returns: The expression result as a string, or pretty-printed JSON for objects/arrays. Errors:
|
| pilot_cookiesA | Retrieve all cookies for the current page context as a JSON array. Use when the user wants to inspect cookies, debug authentication state, check session tokens, or verify that cookies were set correctly. For setting individual cookies, use pilot_set_cookie; for bulk import from a real browser, use pilot_import_cookies. Parameters: (none) Returns: JSON array of cookie objects with name, value, domain, path, expires, httpOnly, secure, and sameSite attributes. Errors: None — returns empty array "[]" if no cookies exist. |
| pilot_storageA | Read or write browser web storage (localStorage and sessionStorage). Use when the user wants to inspect stored application data, check feature flags, debug session state, or set a specific localStorage value. Sensitive values (tokens, secrets, API keys) are automatically redacted for security. Parameters:
Returns: When reading: JSON object with localStorage and sessionStorage contents (sensitive values redacted as "[REDACTED — N chars]"). When writing: Confirmation of the key set. Errors: None — returns empty storage objects if no data exists. Security: Values matching patterns like "eyJ..." (JWTs), "sk-..." (API keys), or keys containing "token", "secret", "password" are auto-redacted. |
| pilot_perfA | Measure page load performance metrics from the Navigation Timing API. Use when the user wants to diagnose slow page loads, benchmark performance, or identify bottlenecks in DNS lookup, connection, server response, or DOM parsing. Parameters: (none) Returns: Table of timing metrics in milliseconds — dns, tcp, ssl, ttfb (time to first byte), download, domParse, domReady, and load. Errors:
|
| pilot_screenshotA | Take a PNG screenshot of the current page or a specific element. Use when the user wants to capture what the page looks like visually, save a screenshot to disk, or capture a specific element's appearance. For a visual debug overlay with ref labels, use pilot_annotated_screenshot instead. Parameters:
Returns: The screenshot as a base64 PNG image and the file path where it was saved. Errors:
|
| pilot_pdfA | Save the current page as a PDF document in A4 format. Use when the user wants to export the page as a downloadable PDF, save a receipt, or archive a page for offline reading. Parameters:
Returns: Confirmation with the file path where the PDF was saved. Errors:
|
| pilot_responsiveA | Capture full-page screenshots at three standard responsive breakpoints — mobile (375x812), tablet (768x1024), and desktop (1280x720). Use when the user wants to preview how a page looks across different screen sizes, test responsive design, or generate viewport comparison screenshots. The browser viewport is restored to its original size after capture. Parameters:
Returns: List of viewport names, dimensions, and file paths for each screenshot. Errors:
|
| pilot_page_diffA | Generate a text diff comparing the visible content of two URLs — useful for comparing staging vs production, before vs after deployments, or detecting content differences between pages. Use when the user wants to see what text differs between two pages, verify a deployment did not break content, or compare two versions of the same site. Strips scripts, styles, and SVG before comparing. Parameters:
Returns: Unified diff text showing lines removed from url1 and added in url2. Errors:
|
| pilot_tabsA | List all open browser tabs with their IDs, URLs, titles, and which tab is currently active. Use when the user wants to see what tabs are open, find a specific tab by title or URL, or check which tab is active before switching. Parameters: (none) Returns: Numbered list of tabs showing [id], title, URL, and an arrow (→) marking the active tab. Errors: None — returns empty list if no tabs exist (unlikely in normal operation). |
| pilot_tab_newA | Open a new browser tab, optionally navigating to a URL. Use when the user wants to open a link in a new tab, create a blank tab, or work with multiple pages simultaneously. Parameters:
Returns: The new tab's ID and URL (if provided). Errors:
|
| pilot_tab_closeA | Close a browser tab by its ID, or close the currently active tab if no ID is specified. Use when the user wants to close a popup, remove an unwanted tab, or clean up after finishing work in a tab. Parameters:
Returns: Confirmation that the tab was closed. Errors:
|
| pilot_tab_selectA | Switch the active browser context to a specific tab by its ID. Use when the user wants to work in a different tab, bring a background tab to the foreground, or continue automation in a previously opened tab. Use pilot_tabs to find tab IDs. Parameters:
Returns: Confirmation with the tab ID that is now active. Errors:
|
| pilot_resizeA | Set the browser viewport size in pixels to simulate different screen resolutions. Use when the user wants to test responsive layouts, simulate a mobile or tablet screen, or change the visible area of the page. For multi-viewport screenshots, use pilot_responsive instead. Parameters:
Returns: Confirmation with the new viewport dimensions. Errors: None — any valid pixel dimensions are accepted. |
| pilot_set_cookieA | Set a cookie on the current page's domain with a given name and value. Use when the user wants to manually set a cookie for authentication, testing, or session management. The cookie is set on the domain of the currently active page. For bulk cookie import from a real browser, use pilot_import_cookies. Parameters:
Returns: Confirmation with the cookie name (value is redacted for security). Errors:
|
| pilot_import_cookiesA | Import cookies from a real Chromium browser (Chrome, Arc, Brave, Edge, Comet) by decrypting the browser's cookie database and adding them to the headless session. Use when the user wants to transfer authentication state from their real browser, avoid re-login, access authenticated pages, or work with session cookies from an existing browser profile. Parameters:
Returns:
Errors:
|
| pilot_set_headerA | Set a custom HTTP request header that will be sent with all subsequent requests from the browser. Use when the user wants to add an authorization header, set a custom API key, override the Accept-Language header, or inject any custom header for testing. Sensitive header values (Authorization, Cookie, X-API-Key, etc.) are auto-redacted in the response for security. Parameters:
Returns: Confirmation with the header name and value (sensitive values shown as "****"). Errors: None — any valid header name and value are accepted. |
| pilot_set_useragentA | Set a custom browser User-Agent string, which recreates the browser context to apply the change while preserving cookies and page state. Use when the user wants to simulate a different browser or device, bypass bot detection, test mobile user agents, or debug User-Agent-dependent behavior. Note: this recreates the browser context, which may briefly interrupt in-progress requests. Parameters:
Returns: Confirmation with the new User-Agent string. Errors:
|
| pilot_handle_dialogA | Configure automatic handling of native browser dialogs (alert, confirm, prompt) that would otherwise block page interaction. Use when the user wants to pre-configure dialog behavior so alerts/confirms do not pause automation, or provide a default text for prompt dialogs. Dialog messages are still captured in the dialog buffer (see pilot_dialog). Parameters:
Returns: Confirmation of the configured dialog behavior. Errors: None — this is a configuration-only call that always succeeds. |
| pilot_extension_statusA | Check if the Pilot Chrome extension is connected and routing commands through the user's real browser. When connected, all navigation, snapshot, click, fill, type, scroll, screenshot, and tab commands route through Chrome — bypassing Cloudflare and bot detection. Parameters: (none) Returns: Connection status, port, and instructions for installing the extension if not connected. |
| pilot_cdpA | Connect Pilot to a real Chrome browser already running on the user's machine via Chrome DevTools Protocol (CDP). Use when Cloudflare or other bot detection blocks even headed mode. A real Chrome with the user's real profile bypasses fingerprinting entirely. Parameters:
How to start Chrome with CDP enabled: macOS: /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 Windows: "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 Linux: google-chrome --remote-debugging-port=9222 Returns: Confirmation of connection with tab count and active URL. Errors:
|
| pilot_handoffA | Open a visible (headed) browser window preserving all current state — cookies, tabs, and localStorage. Use when the user is blocked by CAPTCHAs, bot detection, or complex auth flows that require manual intervention in a headed browser. After the user solves the challenge, call pilot_resume to reclaim automated control. Parameters: (none) Returns: Confirmation that the browser is now in headed mode with instructions to call pilot_resume when done. Errors:
|
| pilot_resumeA | Resume automated control after a pilot_handoff session. Use when the user has finished manual interaction in the headed browser (e.g., solved a CAPTCHA, completed auth) and wants to return to automated control. Parameters: (none) Returns: A fresh accessibility snapshot of the current page state, ready for continued interaction. Errors:
|
| pilot_closeA | Close the browser instance and release all associated resources. Use when the user wants to end the browsing session, clean up after completing a task, or start fresh with a new browser session. Parameters: (none) Returns: Confirmation that the browser was closed. Errors:
|
| pilot_authA | Save, load, or clear browser session state (cookies + localStorage + sessionStorage) to/from a JSON file. Use when the user wants to authenticate once and reuse credentials across sessions, skip re-login flows, or transfer session state between runs. Complement to pilot_import_cookies — use pilot_auth for Pilot-managed state, pilot_import_cookies for one-time import from a real browser. Parameters:
Returns:
Errors:
|
| pilot_blockA | Block network requests matching URL patterns to speed up page loads and reduce token noise from ad/tracker content. Use when the user wants to block ads, trackers, analytics scripts, or any noisy domain. Blocked requests are aborted before they hit the network — faster loads, smaller snapshots. Use the built-in "ads" preset to block ~20 major ad networks with one call. Parameters:
Returns:
Errors: None — invalid patterns are silently ignored by the browser. |
| pilot_geolocationA | Set or clear the browser's reported GPS coordinates to simulate a specific geographic location. Use when the user wants to test location-aware apps, see location-specific content, or simulate a user in a different country/city. Parameters:
Returns: Confirmation of the geolocation set or cleared. Errors:
|
| pilot_framesA | List all frames (iframes) on the current page with their indices, names, and URLs. Use when the user wants to see what iframes exist on the page, find an iframe to interact with, or verify the page structure before switching frame context. The main frame is always index 0. Use pilot_frame_select to switch into an iframe. Parameters: (none) Returns: Numbered list of frames showing index, type ([main] or [iframe name="..."]), URL, and an arrow (→) marking the currently active frame. Returns "(no iframes — only the main frame)" if no iframes exist. Errors: None. |
| pilot_frame_selectA | Switch the browser context into an iframe so that pilot_snapshot, pilot_click, pilot_fill, and other tools operate inside that frame instead of the main page. Use when the user wants to interact with elements inside an embedded iframe, read iframe content, or fill forms within an iframe. After switching, all refs are cleared — run pilot_snapshot to get fresh refs for the iframe contents. Use pilot_frames to list available frames first. Parameters:
Returns: Confirmation with the frame index/name and its URL, plus a reminder to run pilot_snapshot for fresh refs. Errors:
|
| pilot_frame_resetA | Switch the browser context back to the main page frame after working inside an iframe. Use when the user wants to return to the main page after interacting with an iframe. All refs are cleared — run pilot_snapshot to get fresh refs for the main page content. Parameters: (none) Returns: Confirmation of switching to the main frame, with a reminder to run pilot_snapshot. Errors: None — always succeeds. |
| pilot_interceptA | Intercept network requests matching a URL pattern and respond with custom status, headers, and body. Use when the user wants to mock API responses, simulate error states (401, 500), test loading states, or run frontend tests without a real backend. All requests matching the pattern are fulfilled with the given response until cleared. Parameters:
Returns:
Errors:
|
| pilot_assertA | Assert a condition about the current page state and fail with a structured error if the assertion is not met. Use when the user wants to verify the outcome of an action — that a URL was reached, text is present or absent, an element is visible/hidden/enabled, or an input has a specific value. Returns a clear pass/fail signal for agent-driven test flows. Parameters:
Returns: "✓ N assertion(s) passed" if all checks pass. Errors:
|
| pilot_clipboardA | Read from or write to the browser clipboard. Use when the user wants to read content that an app copied to clipboard (share links, API keys, generated tokens), or pre-populate clipboard with text for paste operations. Parameters:
Returns:
Errors:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/TacosyHorchata/Pilot'
If you have feedback or need assistance with the MCP directory API, please join our Discord server