web-speed-agent
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WEBSPEED_API_KEY | Yes | Your Web Speed API key | |
| WEBSPEED_SERVER_URL | No | Override API server URL (must be https://) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| store_credentialA | Save login credentials to the system keychain (macOS/Windows/Linux). Credentials are stored locally and NEVER sent to any server. Use site as a short identifier, e.g. "indiehackers", "twitter", "gmail". |
| setup_browserA | Set up Chrome or Edge for agent use (macOS and Windows). Run this ONCE (with your browser closed). It:
After setup:
Re-run setup_browser() any time you want to sync fresh cookies from your main Chrome profile into the agent profile (close Chrome first). Args: browser: "chrome" (default) or "edge". |
| open_browserA | Open a browser for automation. browser — which browser to use: "chrome" (default), "firefox", or "edge". ── Chrome default behaviour ────────────────────────────────────────────────── For Chrome, CDP is tried automatically first. If the user has run 'chrome-agent' (which opens Chrome with --remote-debugging-port=9222), the agent connects to that existing window and opens a new tab — the user's real Chrome with all their logins, cookies, and extensions. If Chrome is not running with the debug port, a helpful message is returned explaining how to start it. ── Firefox ─────────────────────────────────────────────────────────────────── Imports cookies from the user's Firefox profile (read-only) into a fresh Playwright session. Pass profile_path="auto" to detect the profile. ── Manual overrides ────────────────────────────────────────────────────────── cdp_url: connect to a specific debug URL (e.g. non-default port). profile_path: use an explicit profile directory (Chrome/Firefox/Edge). session_name: persist cookies across fresh Playwright sessions. Args: browser: "chrome" (default), "firefox", or "edge". session_name: Cookie-persist name for standard/fresh mode. headless: Hide the window in standard/profile mode (default False). cdp_url: Override the CDP URL (default for Chrome: http://localhost:9222). profile_path: Launch with an existing browser profile ("auto" or full path). |
| navigateA | Navigate to a URL and return the page title and final URL. Always call this before interacting with a new page. Args: url: The URL to navigate to. expect_url_contains: Optional substring the final URL should contain. If the page redirected elsewhere (common on SPAs), a 'spa_redirect' warning is included in the result so the agent knows to adjust its approach. |
| loginA | Fill a login form and submit it. Credentials: provide either Selectors: if omitted, common patterns are tried automatically (input[type=email], input[name=username], etc.). Use navigate() to go to the login page first. |
| read_pageA | Extract structured data from the current page via the Web Speed API. Returns type-aware structured JSON: article → title, author, sections, links product → name, price, availability, specs listing → items with title, url, price, snippet other → headings, navigation, forms, text_blocks Costs 1 Web Speed credit. Requires WEBSPEED_API_KEY. |
| clickA | Click an element by CSS selector. Args: selector: CSS selector for the element to click. wait_for_navigation: Wait for a page load after clicking (default True). Set to False for clicks that trigger in-page UI changes like modals, dropdowns, or expanding sections. wait_for: CSS selector to wait for AFTER clicking — use this when the click opens a modal or triggers async UI rendering. The tool waits up to 5 s for the element to appear before returning. wait_ms: Extra milliseconds to wait after the click before reading the page. Useful for SPAs where JS hydration takes a moment (e.g. 500–2000). |
| fill_fieldA | Type a value into a form field. Standard mode ( Keyboard mode (
For X (Twitter): click the "What's happening?" box first, then call
Args: selector: CSS selector for the input or contenteditable element. value: Text to type. Never include \n — it will be stripped. A trailing \n is treated as Tab (advance to next field). press_tab: Press Tab after filling to move focus to the next field. use_keyboard: Simulate real keystrokes instead of direct fill. delay_ms: Milliseconds between keystrokes in keyboard mode. 0 = fast (default). Use 30–80 for sites that check typing cadence. |
| workspace_writeA | Type text into a Google Workspace editor (Docs or Slides) reliably. Google Docs/Slides render on , so Docs: types at the current cursor (auto-removes the Gemini overlay and focuses the hidden input iframe). Slides: pass placeholder=N to pick the text box (0 = first, usually the title). Removes the onboarding modal, double-clicks the placeholder to enter edit mode, then types. Use workspace_new_slide() to add slides. Newlines in Args: text: Text to type. target: 'auto' (detect from URL), or force 'docs' / 'slides'. verify: Read the text back to confirm it landed (Docs only, best-effort). placeholder: Slides only — which text placeholder to edit (0-based, in document order; 0 is typically the title). |
| workspace_new_slideA | Add a new slide in Google Slides (equivalent to Ctrl+M). Drops the pointer-events lock first so the toolbar is clickable, clicks the 'New slide' button, and settles. Then call workspace_write(target='slides', placeholder=N) to fill the new slide. |
| submit_formA | Submit a form by clicking a submit button or pressing Enter. Args: selector: CSS selector of the submit button or form. If omitted, presses Enter on the focused element. |
| get_page_infoA | Return the current page URL, title, and visible text snippet. Useful for orientation — call this to confirm where the browser is. |
| wait_for_elementA | Wait for an element to reach a given state on the page. Useful after an action that triggers async loading, modal opening, or element removal. Returns ok once the condition is met. Args: selector: CSS selector for the element to watch. timeout_ms: Maximum time to wait in milliseconds (default 10 000). state: One of: 'visible' — element exists and is visible (default) 'hidden' — element exists but is hidden, or does not exist 'attached' — element is in the DOM (may be hidden) 'detached' — element has been removed from the DOM |
| wait_for_urlA | Wait for the page URL to contain a given substring. Use this after clicking a SPA navigation link where the URL changes client-side without a full page reload. Returns once the URL matches or the timeout expires. Args: url_contains: Substring the URL must contain (e.g. '/dashboard', '?tab=posts'). timeout_ms: Maximum time to wait in milliseconds (default 10 000). |
| evaluateA | Run JavaScript in the page context and return the result. Use this to handle situations standard selectors can't reach:
Args: js: JavaScript expression to evaluate. The return value is JSON-serialised and included in the response. Keep expressions simple — complex logic is better split across multiple calls. |
| close_browserA | Close the tab and disconnect from the browser. In CDP mode (connected to your existing Chrome): closes the tab the agent opened and disconnects. Chrome itself stays running with all your other tabs. In standard mode: saves the session (if named) and closes the browser. |
| account_infoA | Check your Web Speed API credit balance and account status. |
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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Dominic-Pi-Sunyer/web-speed-agent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server