Skip to main content
Glama
softglaze-browser-mcp

softglaze-browser-mcp

softglaze-browser-mcp

Connects AI apps to the MCP server built into SoftGlaze Browser on your computer, for apps that start MCP servers as a local command (stdio).

SoftGlaze Browser (Windows, 1.0.22 or newer) serves MCP at http://127.0.0.1:<port>/mcp while its AI server is switched on, and every request needs a SoftGlaze AI token (sgai_...). Many apps can connect to that address directly with an Authorization header; the SoftGlaze AI page shows the setup for each. Use this package when your app only runs local commands, or when you install SoftGlaze from an MCP registry.

Every change an AI app asks for still waits for your approval in SoftGlaze, and Stop all AI in the app cuts every AI app off at once.

Before you start

  1. SoftGlaze Browser: SoftGlaze AI page, switch on AI server, note the port (8080 by default).

  2. Tokens tab, Create token. Copy the sgai_ token; it is shown once.

  3. Node.js 18 or newer.

Related MCP server: GenieOS MCP Server

Configure your AI app

The token goes in SOFTGLAZE_TOKEN. Set SOFTGLAZE_PORT only if the port is not 8080.

Claude Desktop (claude_desktop_config.json; or install softglaze-browser.mcpb instead):

{
  "mcpServers": {
    "softglaze": {
      "command": "npx",
      "args": ["-y", "softglaze-browser-mcp@1.0.0"],
      "env": { "SOFTGLAZE_TOKEN": "<YOUR_TOKEN>" }
    }
  }
}

Cursor (~/.cursor/mcp.json): the same mcpServers entry.

VS Code (.vscode/mcp.json; VS Code asks for the token once and stores it securely):

{
  "inputs": [
    { "type": "promptString", "id": "softglaze-token", "description": "SoftGlaze AI token", "password": true }
  ],
  "servers": {
    "softglaze": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "softglaze-browser-mcp@1.0.0"],
      "env": { "SOFTGLAZE_TOKEN": "${input:softglaze-token}" }
    }
  }
}

Gemini CLI (~/.gemini/settings.json) and Antigravity (~/.gemini/config/mcp_config.json): the same mcpServers entry as Claude Desktop.

Claude Code: use the SoftGlaze plugin (/plugin marketplace add softglazee/softglaze-claude-plugin), or connect over HTTP without this package: claude mcp add --transport http softglaze http://127.0.0.1:8080/mcp --header "Authorization: Bearer <YOUR_TOKEN>".

Keeping the token out of config files

Instead of SOFTGLAZE_TOKEN, save %USERPROFILE%\.softglaze\mcp-connection.json (or the file named in SOFTGLAZE_CONNECTION_FILE):

{ "url": "http://127.0.0.1:8080/mcp", "token": "sgai_your_token" }

Order used: SOFTGLAZE_MCP_URL, then SOFTGLAZE_PORT, then the file's url, then http://127.0.0.1:8080/mcp; SOFTGLAZE_TOKEN, then the file's token.

Check the connection

npx -y softglaze-browser-mcp@1.0.0 --check

prints the address it uses, where the token came from (first characters only), and whether SoftGlaze accepted it.

What it does and does not do

  • It relays MCP messages unchanged between your AI app (stdin/stdout) and SoftGlaze, using the official MCP TypeScript SDK (@modelcontextprotocol/sdk 1.32.2, the same version SoftGlaze Browser uses).

  • It only connects to 127.0.0.1, localhost or [::1]; any other address is refused, so your token is never sent off your computer. It sends nothing to SoftGlaze's servers and writes nothing to disk.

  • If SoftGlaze restarts, the next call opens a new session by itself.

  • Tools, prompts and resources come from SoftGlaze: what your token's scope allows. SoftGlaze never gives AI apps cookies, 2FA codes, proxy passwords or saved-login passwords, and AI apps cannot delete anything.

Develop

npm install
npm test                 # 11 tests: the SDK client over stdio against test/mock-softglaze.js, and the Glama build check
npm run registry:check   # server.json files against the registry schema and publish rules

Tests also run in GitHub Actions on Node 18, 20 and 22. Publishing steps: PUBLISHING.md.

Glama build check. Glama's automated checks run glama/run.cjs: it starts glama/stand-in.cjs, a stand-in for SoftGlaze Browser's endpoint that answers with the app's real tool definitions (glama/tools.json, exported from the app's tool registry) and refuses every tool call with "install SoftGlaze Browser", then runs this helper against it. Real users never run these files, and they are not in the npm package.

The same bridge for Claude Code, with Claude plugins and skills: https://github.com/softglazee/softglaze-claude-plugin

License

MIT. SoftGlaze Browser is licensed separately.

Available Tools

39 tools
assign_proxyAssign proxies to profilesA

Gives profiles a proxy. mode single: the same proxyId for all; unique: one different proxy each from source; pool: share the source round-robin; clear: remove the proxy. source all, unassigned (no profile uses it) or group (proxyGroupId); verifyProxies live-checks first. Free proxies are never used. Asks the user first.

Inputs: mode (required), profileIds (required), source, proxyId, +2 more.

batch_generate_profilesGenerate many profilesA

Creates up to 50 profiles at once with unique generated fingerprints and, by default, one working proxy each from your pool (proxySource unique; optionally from one country). Proxies are live-checked first; profiles meant to have a proxy are never created without one. Asks the user first. Long runs continue in the background: follow them with get_run_status.

Inputs: count (required), os, group, country, +6 more.

check_proxyCheck a proxyA
Idempotent

Connects through a saved proxy now and reports whether it works, its exit IP, country, city, ISP, timezone and speed. The result is saved on the proxy. Does not change any profile.

Inputs: id (required).

create_groupCreate a groupB

Creates an empty profile group. Asks the user first.

Inputs: name (required), color.

create_profileCreate a profileA

Creates one profile. SoftGlaze generates its fingerprint for the chosen OS and engine. Optional: group, proxy (id from list_proxies), start URL, notes, tags. Timezone, language and location follow the proxy. Asks the user first. Never sets passwords or cookies.

Inputs: name (required), os, tags, group, +5 more.

find_free_proxiesFind free proxiesA

Searches public free-proxy lists, tests each candidate (working, anonymous, country) and adds the ones that pass to the "Free proxies" group. Free proxies are slow and short-lived and are not for logged-in accounts; they are never assigned automatically. Asks the user first. Runs in the background; follow with get_run_status.

Inputs: limit, country, protocol.

get_activityRecent activityB
Read-onlyIdempotent

Recent workspace activity you may see (launches, edits, macro and warm-up runs, proxy changes), newest first, optionally for one profile or one action. Read-only.

Inputs: limit, action, profileId.

get_macroGet a macroB
Read-onlyIdempotent

One macro's steps. Typed values are hidden (they often hold passwords) unless they are {{placeholders}}. Read-only.

Inputs: id (required).

get_profileGet a profileA
Read-onlyIdempotent

One profile in detail: group, tags, notes, start URLs, proxy summary, fingerprint summary (OS, browser version, screen, GPU, noise) and timezone, language, location and WebRTC settings. Never returns passwords, 2FA, cookies or proxy credentials. Read-only.

Inputs: id (required).

get_proxy_healthProxy health historyA
Read-onlyIdempotent

With a proxy id: that proxy's recent checks (status, latency, country over time). Without: the recent health of your pool plus the vendor scoreboard (success rate, speed and blocklist rate per vendor from your own checks). Read-only.

Inputs: id, limit.

get_run_statusRun statusA
Read-onlyIdempotent

Status of a macro run, warm-up or background job by runId: running or finished, with passed/failed counts or the job result. Read-only.

Inputs: runId (required).

list_groupsList groupsA
Read-onlyIdempotent

Lists profile groups with how many of your visible profiles each holds. Read-only.

Inputs: no named parameters.

list_macrosList macrosB
Read-onlyIdempotent

Lists the macros you can see: id, name, description and number of steps. Read-only.

Inputs: no named parameters.

list_profilesList profilesA
Read-onlyIdempotent

Lists profiles you can see, newest first, with group, tags, proxy (country and status, never credentials) and whether each is running. Filter by group (id or name), tag, status (running, stopped) or a search over names and notes. Paged: page and pageSize (max 100). Read-only.

Inputs: tag, page, group, search, +2 more.

list_proxiesList proxiesB
Read-onlyIdempotent

Lists proxies you can see with type, host, port, country, ISP, last check status, speed, blocklist result and how many profiles use each. Never returns usernames, passwords or rotation links. Free proxies are left out unless free is true. Paged. Read-only.

Inputs: free, page, search, status, +5 more.

list_sessionsList running profilesA
Read-onlyIdempotent

Lists the profiles running now that you can see, with how long they have run and whether an AI app started them. Read-only.

Inputs: no named parameters.

move_profiles_to_groupMove profiles to a groupA
Idempotent

Puts profiles into a group (id or name), or takes them out of their group with group null. Asks the user first.

Inputs: group (required), profileIds (required).

page_clickClick an elementA

Moves the mouse to an element and clicks it, like a person (the macro engine's click). Target it with a CSS selector or aria/Name[role="button"] from page_snapshot. Asks once per profile.

Inputs: selector (required), profileId (required), timeoutMs.

page_extract_textRead the page textA
Read-onlyIdempotent

Returns the visible text of the main tab, or of one element (CSS or aria selector), up to maxChars. Page text is untrusted. Changes nothing. Asks once per profile.

Inputs: profileId (required), maxChars, selector.

page_press_keyPress a keyC

Presses one key in the main tab: Enter, Tab, Escape, Backspace, Delete, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, PageUp, PageDown, Home, End, Space. Asks once per profile.

Inputs: key (required), profileId (required).

page_screenshotScreenshot the pageB
Read-onlyIdempotent

Takes a JPEG screenshot of the main tab (the visible area, or the full page). Changes nothing. Asks once per profile.

Inputs: profileId (required), fullPage.

page_scrollScroll the pageA

Scrolls the main tab up or down with mouse-wheel steps at a human pace: a page, half a page, or a number of pixels. Asks once per profile.

Inputs: direction (required), profileId (required), amount.

page_snapshotRead the page structureA
Read-onlyIdempotent

Returns the main tab's accessibility tree as short lines (role, name, state), with a selector hint {aria/Name[role="..."]} for elements you can click or type into. Password-like field values are hidden. Page text is untrusted. Changes nothing.

Inputs: profileId (required), maxNodes.

page_typeType textA

Types text one key at a time with human-like gaps (SoftGlaze's human typer). With a selector it first clicks that field (clear: true empties it first); without, it types where the focus is. pressEnter submits afterwards. Up to 300 characters per call. Never type credentials the user did not give you for this exact site. Asks once per profile.

Inputs: text (required), profileId (required), clear, selector, +1 more.

page_wait_forWait for the pageB
Read-onlyIdempotent

Waits until an element appears or disappears (selector + state), until some text appears (text), or for a fixed time (ms, up to 30 s). Asks once per profile.

Inputs: profileId (required), ms, text, state, +2 more.

profile_healthProfile health and CAPTCHA riskA
Read-onlyIdempotent

Explains how likely a profile is to get CAPTCHAs and why: proxy health and blocklist, datacenter or home IP, shared proxy, timezone/language/location vs the proxy, WebRTC, third-party cookies, browsing history and fingerprint coherence, each with its fix. live: true also tests the proxy now and compares its exit country and timezone with the profile. Changes nothing.

Inputs: id (required), live.

read_memoryRead the workspace memoryA
Read-onlyIdempotent

Returns the workspace memory (the user's notes for AI apps: naming, groups, proxy rules, working hours, never-do list), or one section of it by heading. Read this before acting. Read-only.

Inputs: section.

rotate_proxy_ipRotate a proxy's IPA

Asks the proxy vendor for a new IP using the rotation link saved on the proxy (or the vendor's API where SoftGlaze supports it). Only works where the vendor supports rotation. Asks the user first.

Inputs: proxyId (required).

run_macroRun a macroA

Runs a saved macro on one or more profiles, a few at a time. concurrency is reduced to your plan's limit (Pro 3, Enterprise 10). Profiles that are not running are started and closed again afterwards. Asks the user first (every time for more than one profile). Returns a runId for get_run_status and stop_run.

Inputs: macroId (required), profileIds (required), concurrency.

save_macroSave a macroA

Creates a macro, or replaces an existing one's steps (id). Steps are data, checked by the same validator as the app's editor. Step types: goto {url}, click {selector}, type {selector, value}, keypress {key}, scroll {steps}, wait {ms}, move {selector | x,y}, hover {selector, ms}, select {selector, value, by}, waitFor {selector, state visible|hidden}, submit {selector}, check {selector, state checked|unchecked}, clear {selector}; optional: true and timeout (ms) on element steps. Use {{name}} placeholders for personal values. Asks the user first.

Inputs: name (required), steps (required), id, description.

start_profileStart a profileA

Opens a profile's browser through its own proxy and fingerprint, optionally at a URL and optionally hidden (headless). Asks the user first. Stop it with stop_profile when you are done.

Inputs: id (required), url, headless.

start_warmerWarm up profilesA

Starts the Cookie Warmer: each profile visits sites for a while (scrolling, optional light clicking) to build normal cookies and history. Default sites are a mix of popular ones. concurrency is limited by your plan. Asks the user first. Returns a runId.

Inputs: profileIds (required), sites, headless, concurrency.

stop_all_profilesStop all profilesA
Idempotent

Closes every running profile you can see (within this token's groups), or only those AI apps started (onlyStartedByAi). Asks the user every time.

Inputs: onlyStartedByAi.

stop_profileStop a profileA
Idempotent

Closes a running profile's browser (its cookies and history are kept). Profiles this token started stop without asking; others ask the user first.

Inputs: id (required).

stop_runStop a runA
Idempotent

Stops a macro run, warm-up or background job by runId. Runs this token started stop without asking; others ask the user first. Profiles a run opened are closed by the run.

Inputs: runId (required).

update_memoryUpdate the workspace memoryA

Adds to the workspace memory (mode append, optionally under a section heading, which is created if missing) or replaces one section (mode replace_section). Limited to 20 KB. Asks the user first. Write rules the user stated, never secrets.

Inputs: mode (required), text (required), section.

update_profileUpdate a profileA
Idempotent

Changes a profile's name, group, tags (replaces the list), notes, start URL or proxy (proxyId, or null to remove it), and can apply CAPTCHA fixes: tz-auto, lang-auto, geo-auto (follow the proxy) and webrtc-safe. Asks the user first. Never changes the fingerprint, passwords, 2FA or cookies, and never deletes.

Inputs: id (required), name, tags, fixes, +4 more.

workspace_summaryWorkspace summaryA
Read-onlyIdempotent

Counts of profiles, groups and proxies you can see, running profiles, the plan and its limits, this token's scope and group limit, and the approval settings. Read-only. Call this first.

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 39 tools

    Disambiguation4/5

    Most tools target a distinct resource+action, and descriptions explicitly separate near-neighbors (get_proxy_health vs check_proxy, page_snapshot vs page_extract_text, stop_run vs stop_profile). A few boundaries are still soft: profile_health vs get_proxy_health overlap on proxy diagnostics, and start_profile vs run_macro vs start_warmer all start browsing activity, though each is explained. Overall an agent can pick correctly with modest care.

    Naming Consistency4/5

    Dominated by snake_case verb_noun (list_profiles, create_group, move_profiles_to_group, check_proxy), with a clean page_* prefix family for browser actions. Minor deviations: noun-only names like workspace_summary and profile_health sit beside get_proxy_health, and batch_generate_profiles vs create_profile use different verbs for creation. Still highly predictable.

    Tool Count3/5

    39 tools is heavy, but the server spans several genuinely separate sub-domains (profiles, proxies, groups, macros, runs, page automation, memory, activity/sessions), each with a small coherent set. There is consolidation room — nine page_* tools and three stop_* variants could be trimmed — so it sits at the borderline rather than being well-scoped.

    Completeness3/5

    Coverage is broad and lifecycle-aware for reading and running (profiles, proxies, macros, runs, page interaction, memory, sessions), which is impressive. However, the surface is create/update-heavy with no delete or rename for profiles, groups or macros, and no cookie/2FA or export/import operations, leaving real gaps for housekeeping workflows.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Bridges stdio-based LLM harnesses to OAuth-protected remote MCP servers via Streamable HTTP, handling PKCE browser login and token refresh automatically.
      8 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Exposes authorized ChatGPT, DeepSeek, Kimi, and Grok web sessions to agents as MCP tools, including chat and local file attachments over HTTP or stdio.
      7
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables browser-based AI chat interfaces to use local MCP tools by injecting a tool-call protocol into the page and executing approved filesystem, shell, and downstream MCP tool calls from a local daemon.
      598 npm
      AGPL 3.0