devloop
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DEVLOOP_HOME | No | Registry location | ~/.devloop |
| DEVLOOP_DEV_CMD | No | Optional dev-server auto-start command on boot | (none) |
| DEVLOOP_DEV_CWD | No | Optional dev-server auto-start working directory on boot | (none) |
| DEVLOOP_HEADLESS | No | Set to 'true' to run Chrome headless; default headful | false |
| DEVLOOP_HTTP_PORT | No | Port for HTTP/SSE server (daemon and cockpit) | 7333 |
| DEVLOOP_CHROME_PATH | No | Explicit Chrome executable path | (bundled) |
| DEVLOOP_NAV_TIMEOUT | No | Cap (ms) on navigations | 30000 |
| DEVLOOP_LOG_CAPACITY | No | Max buffered events | 5000 |
| DEVLOOP_NET_THRESHOLD | No | Log network responses with status >= this (failures always logged) | 400 |
| DEVLOOP_ACTION_TIMEOUT | No | Cap (ms) on interactions | 10000 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| browser_navigateA | Navigate the active pane to a URL (full page load). Returns the resolved URL and HTTP status. Use browser_back / browser_forward to move through history, browser_reload to refresh the same URL. |
| browser_backA | Go back one entry in the active pane's history (no-op if there's nothing to go back to). Pairs with browser_forward; use browser_navigate to go to a new URL. |
| browser_forwardA | Go forward one entry in the active pane's history (no-op if there's nothing to go forward to). Pairs with browser_back; use browser_navigate to go to a new URL. |
| browser_reloadA | Reload the active pane's current page. Use browser_navigate to change URL instead. |
| browser_screenshotA | Capture a PNG screenshot of the active page. To find/target elements, prefer browser_snapshot (returns selectors). |
| browser_clickA | Click the element matching a CSS selector (real mouse click). For keyboard keys use browser_press; to only hover use browser_hover. |
| browser_typeA | Type text into the element matching a CSS selector (focuses, then types). For single keys use browser_press; for use browser_select. |
| browser_evalA | Evaluate a JavaScript expression in the active page (via CDP) and return its value. Runs in the page's main world and can mutate page state. Prefer browser_snapshot for reading structure and browser_click/type for interactions. |
| browser_hoverA | Hover the pointer over an element to trigger hover menus/tooltips. Does not click — use browser_click for that. |
| browser_scrollA | Scroll an element into view (pass selector), or scroll the window to coordinates (pass x and y). Provide a selector OR x+y, not both. |
| browser_selectA | Set the value of a (or input) and fire input/change events. For typing free text use browser_type. |
| browser_pressA | Press a single key (e.g. Enter, Escape, Tab, ArrowDown) on the page. For typing text use browser_type. |
| browser_emulateA | Emulate a device/viewport on the active page. Pass a |
| browser_throttleA | Throttle the active page's network conditions to a named profile. Use |
| browser_clear_storageA | Clear the active page's storage — cookies, localStorage, IndexedDB, cache, service workers — for the current origin. Set allOrigins to wipe the whole browser session. Use to log out or test a fresh-user flow; reload afterward. |
| browser_wait_for_idleA | Wait until network activity settles (no requests for idleMs). Returns { ok }. To wait for a specific element/text use browser_wait_for. |
| browser_snapshotA | Capture a structured snapshot of the active page: url, title, and the interactive + landmark elements (role, accessible name, value/state, heading level), each with a CSS selector |
| browser_wait_forA | Wait until a CSS selector appears or text is present on the page (e.g. after a navigation or async render). Returns { ok, waitedMs } — ok=false on timeout. To wait for the network to go quiet instead, use browser_wait_for_idle. |
| get_logsA | Return recent events from the unified buffer (server stdout/stderr + browser console/network/pageerror), newest last. Filter by source, stream, grep, and tail incrementally with sinceSeq. Scope to one project's logs with |
| get_logs_aroundA | Return ALL events (server + browser) within +/- windowMs of a timestamp, time-ordered — the correlation tool. E.g. the browser console error and the backend stack trace from the same moment. Timestamps come from the |
| clear_logsA | Clear the event buffer (irreversible). Call before reproducing an issue for a clean window. Note: repro clears for you unless clear=false. |
| export_bundleA | Export a shareable bug-report bundle as one JSON object: the diagnose summary, the timeline (logs), captured screenshots, a HAR of network, and repro steps if provided. For just the network log use export_har; for a quick triage use diagnose. |
| diagnoseA | Triage what's broken right now: group repeated errors (browser console/page errors + server errors) with counts, list failed/4xx-5xx network requests, and return a one-line summary. Start here before digging through get_logs. |
| export_harA | Export captured network requests as a HAR 1.2 document (importable into Chrome DevTools / Charles). Covers ALL requests (the full network ring, independent of DEVLOOP_NET_THRESHOLD — bodies kept for the curated subset: failures + status ≥ threshold). To browse requests in JSON use get_network. |
| get_networkA | List captured network requests (the full ring — every request, independent of DEVLOOP_NET_THRESHOLD). Each row has method/url/status/timing/headers (bodies for the curated subset). Unlike get_logs (curated timeline only); for an importable HAR file use export_har. |
| dev_startA | Start a dev server and tee its logs into the buffer. Three ways to specify it: (1) |
| dev_stopA | Stop the running dev server (SIGTERM). Returns whether one was running. Start one with dev_start. |
| project_listA | List saved projects (name, cwd, cmd, url) from the registry. Add with project_add, remove with project_remove. |
| project_addA | Save (or replace) a project in the registry so you can dev_start it by name. Replaces any existing project with the same name. |
| project_removeA | Remove a saved project from the registry by name (irreversible; doesn't stop a running server). List names with project_list. |
| pane_listA | List browser panes (multi-target): each has id, url, active. The active pane is what browser_*/repro act on. Switch with pane_select. (Cockpit only.) |
| pane_newA | Open a new browser pane and make it active. Optionally navigate it to a URL. To switch panes use pane_select; to close use pane_close. (Cockpit only.) |
| pane_selectA | Make a pane active so subsequent browser_*/repro calls target it. Find ids with pane_list. (Cockpit only.) |
| pane_closeA | Close a browser pane by id (irreversible). To detach a pane into its own window instead, use pane_pop. (Cockpit only.) |
| pane_popA | Detach a pane into its own standalone window (to view targets side-by-side). Closing that window re-docks the pane. pane_close removes it. (Cockpit only.) |
| pane_set_labelA | Set a pane's display label (the tab name). Also what |
| dev_statusA | Report whether the dev server is running, plus its cmd/cwd/pid. Start/stop with dev_start/dev_stop. |
| native_openA | Open a native target for the active pane (Expo/React Native): the iOS simulator or the Android device mirror. browser_* (snapshot/click/type/scroll/press/screenshot) then drive the native app via idb/adb, and JS + native logs stream to the timeline. Cockpit-only (needs the Electron app + a booted simulator/emulator). Returns ok:false with a reason if the device/tooling isn't ready. Build the app first with native_build; close with native_close. |
| native_closeA | Close the active native target; browser_* route back to the pane's web content. (Cockpit only.) Open one with native_open. |
| native_buildA | Build + launch the native dev build for the active pane ( |
| ext_listA | List Chrome extensions (loaded + disabled): id, name, version, enabled. (Cockpit only.) Install with ext_install, toggle with ext_set_enabled. |
| ext_installA | Install a Chrome extension from a Web Store id or URL (downloads from the Web Store). Returns the updated list. (Cockpit only.) Remove with ext_remove. |
| ext_removeA | Remove (uninstall/unload) a Chrome extension by id (irreversible for store extensions). (Cockpit only.) To keep it but turn it off, use ext_set_enabled. |
| ext_set_enabledA | Enable or disable a Chrome extension by id without uninstalling. Returns the updated list. (Cockpit only.) To uninstall entirely, use ext_remove. |
| reproA | One-shot reproduce-and-correlate: clear the buffer (unless clear=false), perform one action OR a sequence in order, wait for async console/network/server events to land, then return EVERYTHING that happened on both sides plus per-step results and an errors summary. Use a sequence for flows like navigate → click → type → click submit. |
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/vincentvella/devloop'
If you have feedback or need assistance with the MCP directory API, please join our Discord server