Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
DEVLOOP_HOMENoRegistry location~/.devloop
DEVLOOP_DEV_CMDNoOptional dev-server auto-start command on boot(none)
DEVLOOP_DEV_CWDNoOptional dev-server auto-start working directory on boot(none)
DEVLOOP_HEADLESSNoSet to 'true' to run Chrome headless; default headfulfalse
DEVLOOP_HTTP_PORTNoPort for HTTP/SSE server (daemon and cockpit)7333
DEVLOOP_CHROME_PATHNoExplicit Chrome executable path(bundled)
DEVLOOP_NAV_TIMEOUTNoCap (ms) on navigations30000
DEVLOOP_LOG_CAPACITYNoMax buffered events5000
DEVLOOP_NET_THRESHOLDNoLog network responses with status >= this (failures always logged)400
DEVLOOP_ACTION_TIMEOUTNoCap (ms) on interactions10000

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 device preset, or custom width+height. reset: true restores a desktop viewport. For network conditions use browser_throttle instead.

browser_throttleA

Throttle the active page's network conditions to a named profile. Use none to clear. For viewport/device emulation use browser_emulate.

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 ref. Pass a returned ref to browser_click / browser_type. Prefer this over browser_screenshot to find and target elements reliably.

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 app. For events around a specific moment use get_logs_around; to triage errors first use diagnose.

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 ts field on any event.

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) project — a saved registry project (resolves cmd/cwd); (2) explicit cmd+cwd; (3) neither — cwd defaults to the server's directory and cmd is auto-detected from package.json. Explicit cmd/cwd override the project's. Stop it with dev_stop; check it with dev_status.

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 app filters match in get_logs/diagnose. (Cockpit only.)

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 (expo run:ios / expo run:android); output streams to the timeline. Cockpit-only (needs the native toolchain). After it boots, use native_open to drive it.

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

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