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 |
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 | {} |
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 and/or scope it to a project. Pass a saved |
| 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 ( |
| native_doctorA | Report native readiness without building or opening anything: iOS simulator interactions, Android device interactions, and the Android local build toolchain — each a ✓/✗ checklist with the fix for anything missing. Cockpit-only, read-only. Re-probes live each call — run it after installing a missing tool to confirm it's resolved before native_build / native_open, or proactively before a long build. Returns { ios, androidInteractions, androidBuild }, each { ready, checks, summary }. native_build to build; native_open to drive a device. |
| 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
- 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/vincentvella/devloop'
If you have feedback or need assistance with the MCP directory API, please join our Discord server