jev-ultrafast-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| JEVMCP_MODE | No | Mode for browser: 'launch' or 'attach'. Default: launch. | |
| JEVMCP_CHROME | No | Chrome/Chromium/Edge/Brave executable. Default: auto-detected. | |
| JEVMCP_CDP_URL | No | CDP endpoint URL when JEVMCP_MODE=attach. Default: http://127.0.0.1:9222. | |
| JEVMCP_SANDBOX | No | 'auto' retries with --no-sandbox if the browser aborts on startup. Default: auto. | |
| JEVMCP_ALLOW_JS | No | Set to '1' to enable eval and js assertions. Default: 0. | |
| JEVMCP_HEADLESS | No | Set to '0' for a visible window. Default: 1. | |
| JEVMCP_MAX_TEXT | No | Visible-text cap per observation. Default: 6000. | |
| JEVMCP_STATE_DIR | No | Directory for profile, macros and screenshots. Default: ~/.jev-ultrafast-mcp. | |
| TYPESAFE_API_KEY | No | Optional; enables the browser_goal tool using TypeSafe. | |
| JEVMCP_FOREGROUND | No | Set to '1' to activate the owned tab. Default: 0. | |
| JEVMCP_MAX_ACTIONS | No | Element-table cap applied by usefulness. Default: 250. | |
| JEVMCP_PROFILE_DIR | No | Persistent profile directory for staying logged in. Default: ~/.jev-ultrafast-mcp/chrome-profile. | |
| TEXT_MODEL_API_KEY | No | Optional; only used for typing in browser_goal mode. | |
| JEVMCP_DENY_DOMAINS | No | Comma-separated blocklist of domains. Default: none. | |
| JEVMCP_ALLOW_DOMAINS | No | Comma-separated list of allowed domains; navigation elsewhere is refused. Default: all. | |
| JEVMCP_ALLOW_UPLOADS | No | Set to '0' to disable the upload op. Default: 1. | |
| JEVMCP_SETTLE_POLL_MS | No | How often to re-read while waiting (milliseconds). Default: 120. | |
| JEVMCP_SETTLE_TIMEOUT | No | How long to wait for a late-rendering page to show controls (seconds). Default: 4.0. | |
| JEVMCP_CONFIRM_PATTERNS | No | Comma-separated patterns (e.g., pay, delete, unsubscribe) that require confirmation. Default: pay / delete / unsubscribe etc. |
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 |
|---|---|
| browser_openA | Open a URL in a new owned tab and return the element table. Use |
| browser_observeA | Re-read the page: new element table, or a delta if little changed.
|
| browser_actA | Execute one or more ops in order, then return a delta observation. Batch ops into a single call — each call is a round trip. op fields click ref (ref may be "e12", or "e12" of a combobox to open it) type ref, text, [clear=true], [submit=false] select ref, value (option value or label) toggle ref, [state] (checkbox/radio/switch; no state = flip) hover ref upload ref, path | paths[] keys key ("Enter", "Meta+A", "ArrowDown") | keys[] scroll [dir=down|up|left|right], [amount=600], [ref] nav url back | forward | reload wait [ms=500] wait_for_ref ref, [timeout_ms=8000] wait_for_text text, [timeout_ms=8000] wait_for_load [timeout_ms=20000] screenshot [path], [full=false], [format=jpeg] tab action=list|new|switch|close, [index], [url] eval js (only when JEVMCP_ALLOW_JS=1) Actions matching the confirmation rules (pay, delete account, …) return needs_confirmation; re-send that op with "confirm": true to proceed. |
| browser_assertA | Verify the current page against deterministic checks. Returns pass/fail. checks {"type": "url_matches", "pattern": "/checkout"} {"type": "url_contains", "text": "/orders/"} {"type": "title_matches", "pattern": "Order"} {"type": "text_contains", "text": "Thanks", "regex": false} {"type": "text_absent", "text": "Error"} {"type": "element_exists", "role": "button", "name": "Continue"} {"type": "element_gone", "ref": "e12"} {"type": "value_equals", "ref": "e7", "value": "Zurich"} {"type": "checked", "ref": "e9", "state": true} {"type": "count_at_least", "role": "link", "min": 3} {"type": "js", "expr": "document.title.length > 3"} |
| browser_macroA | Record, replay, list, or delete a macro — a discovered path with no model calls. action="record_start" begin capturing ops (needs the session to be driving the task)
action="record_stop" finish and save under Replay re-resolves each step by role + name against a fresh observation and refuses to act when the best match is weak or ambiguous. |
| browser_goalA | Hand a whole browser task over. Needs a decision-model key. This is the entry point for browser work, not an optimisation on top of the
manual loop. Pass Leave Each step costs one request (operation + every target head in a single
speculative fan-out). The key is TYPESAFE_API_KEY, or OPENROUTER_API_KEY when TYPESAFE_BASE_URL points at https://openrouter.ai/api/alpha/decisions -- same model, same contract, no TypeSafe account needed. Reading a page needs no key at all, so when no key is set the handoff is unavailable while browser_open, browser_observe and browser_act keep working. |
| browser_tabsA | List, open, switch to, or close tabs. Tabs opened by the page show up in observations on their own. To act on one,
prefer |
| browser_sessionsA | List open sessions (independent owned tabs). |
| browser_closeA | Close a session's tab. Set shutdown_browser=True to stop the browser too. Only a browser this server launched is stopped. In attach mode the browser is yours: shutdown detaches and leaves it, and every other window, running. |
| browser_doctorA | Report environment: browser binary, connection, keys, and policy envelope. Call this when anything behaves unexpectedly — it separates "no browser" from "blocked by policy" from "no key". |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 10 tools
Most tools have clearly distinct responsibilities, but browser_sessions and browser_tabs overlap in listing managed tabs, and browser_tabs also handles opening/closing which overlaps with browser_open and browser_close. The descriptions help disambiguate, so this is only a minor concern.
All tools share the browser_ prefix and snake_case style, but the second word mixes verbs (open, observe, act, assert, close) with nouns (sessions, macro, goal, tabs, doctor). The naming is readable and predictable enough, though not a consistent verb_noun pattern.
Ten tools is a reasonable, well-scoped count for a browser automation server. There is slight redundancy between session/tab management tools, but the overall count is neither bloated nor too thin.
The tool set covers the full browser automation lifecycle: opening pages, observing, acting, asserting, tab management, macros, autonomous goal completion, cleanup, and diagnostics. No obvious dead ends or missing core operations are apparent.