Skip to main content
Glama
SoftGlaze Browser MCP

SoftGlaze Browser MCP

SoftGlaze Browser MCP

Lets AI apps (Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Cline, Gemini CLI, Codex, n8n and other MCP clients) work with the browser profiles in SoftGlaze Browser, a multi-profile browser for Windows 10 and 11: list and check profiles and proxies, start and stop profiles, run macros and warm-ups, and act inside a running profile's page (open, click, type, scroll, read, screenshot) through that profile's own proxy and fingerprint.

The MCP server runs inside the SoftGlaze Browser desktop app on 127.0.0.1 (default port 8080). This repository holds the small Node.js bridge that connects stdio MCP clients to it, plus Claude plugins with skills. It does not work without the desktop app.

How to use it

  1. Install SoftGlaze Browser (Windows 10 or 11) from https://browser.softglaze.com. It has a 7-day free trial; then Pro is US$5 a month.

  2. Switch on SoftGlaze AI in the app (sidebar > SoftGlaze AI, the switch at the top). It is off by default, and only the workspace Owner and Admins can use it.

  3. Create a token on the SoftGlaze AI page (Tokens tab). Choose its access: read, operate or full.

  4. Connect your AI app with one of the options below, using your token.

  5. Ask your AI app, for example: "List my SoftGlaze profiles and check which proxies are failing."

Connect: apps that support HTTP MCP servers

Point the app at the local endpoint with your token:

URL:    http://127.0.0.1:8080/mcp
Header: Authorization: Bearer <YOUR_TOKEN>

Claude Code: claude mcp add --transport http softglaze http://127.0.0.1:8080/mcp --header "Authorization: Bearer <YOUR_TOKEN>"

Connect: apps that start a local command (stdio), through this bridge

Requires Node.js 18 or newer. Clone this repository, then add to your app's MCP settings (Cursor, VS Code, Windsurf, Cline, Claude Desktop and others use this shape):

{
  "mcpServers": {
    "softglaze": {
      "command": "node",
      "args": ["/path/to/softglaze-claude-plugin/plugins/softglaze-browser-connector/server/softglaze-browser-bridge.js"],
      "env": { "SOFTGLAZE_TOKEN": "<YOUR_TOKEN>", "SOFTGLAZE_PORT": "8080" }
    }
  }
}

The bridge reads only SOFTGLAZE_TOKEN, SOFTGLAZE_PORT or SOFTGLAZE_MCP_URL (and the Claude Code plugin settings below). It reads no files and sends data only to 127.0.0.1.

Connect: Claude Code plugin, Claude Desktop and Cowork

  • Claude Code: install the plugins from this marketplace (see "Claude plugins" below) and set the token in /plugin > Installed > softglaze-browser-connector > Configure.

  • Claude Desktop and Cowork: use the SoftGlaze extension for Claude Desktop (softglaze-browser.mcpb), linked from https://browser.softglaze.com/docs/ai-agents.

  • claude.ai on the web cannot reach a server on your own computer.

Step-by-step guides for each app: https://browser.softglaze.com/docs/ai-agents

Related MCP server: hotlogin-mcp

What the tools do

39 tools with a normal token (one more, get_cdp_endpoint, only in the app's Expert mode):

Area

Tools

Workspace and profiles

workspace_summary, list_profiles, get_profile, profile_health, create_profile, update_profile, batch_generate_profiles

Running profiles

list_sessions, start_profile, stop_profile, stop_all_profiles

Proxies

list_proxies, check_proxy, get_proxy_health, assign_proxy, rotate_proxy_ip, find_free_proxies

Groups

list_groups, create_group, move_profiles_to_group

Automation

list_macros, get_macro, save_macro, run_macro, get_run_status, stop_run, start_warmer

Activity and memory

get_activity, read_memory, update_memory

Inside a running profile's page

page_navigate, page_snapshot, page_click, page_type, page_press_key, page_scroll, page_screenshot, page_extract_text, page_wait_for

Safety

  • The server listens on 127.0.0.1 only and needs a token. It is off until you switch it on.

  • You choose how often changes need your approval in the app. Defaults: read tools never ask, operate tools ask once an hour, full-access tools ask every time. A request nobody answers within 2 minutes is denied. "Stop all AI" switches everything off at once.

  • AI apps never get cookies, 2FA codes, proxy usernames or passwords, saved or vault passwords, billing, member changes, or delete/trash actions. Every call is logged in the app.

Claude plugins

This repository is also a Claude plugin marketplace with three plugins:

Plugin

Folder

What it does

softglaze-browser

plugins/softglaze-browser

Skills only: how to use SoftGlaze Browser's MCP tools, and the twelve SoftGlaze workflows as skills. This is the folder listed in Claude's directory.

softglaze-browser-connector

plugins/softglaze-browser-connector

The local MCP bridge to the app on 127.0.0.1, for Claude Code. Only in this marketplace.

softglaze-proxy

plugins/softglaze-proxy

Skills for the SoftGlaze Proxy Switcher extension's tools and for setting up the SoftGlaze Proxy Bridge (no server of its own).

Each plugin folder has its own README (what it does, what it runs, what data it sends) and LICENSE, because the Claude directory lists each folder as a separate submission.

Install in Claude Code

/plugin marketplace add softglazee/softglaze-claude-plugin
/plugin install softglaze-browser@softglaze
/plugin install softglaze-browser-connector@softglaze
/plugin install softglaze-proxy@softglaze

From a shell: claude plugin marketplace add softglazee/softglaze-claude-plugin, then claude plugin install softglaze-browser@softglaze and claude plugin install softglaze-browser-connector@softglaze. The shell command does not ask for the token; set it afterwards with /plugin (Installed, softglaze-browser-connector, Configure). To try a local copy without installing: claude --plugin-dir ./plugins/softglaze-browser --plugin-dir ./plugins/softglaze-browser-connector.

Cowork and claude.ai (Customize > Plugins): Add > Add marketplace > softglazee/softglaze-claude-plugin, then install the plugins. Skills load everywhere; the tools need the local app (see above).

Why the skills and the bridge are separate plugins: Claude's directory accepts plugins that run a local MCP server, or that contain scripts, only from organizations Anthropic has verified. So the directory lists softglaze-browser (Markdown skills only), and the bridge lives in softglaze-browser-connector, installed from this marketplace. The connector's token setting is sensitive (Claude Code keeps it in the system keychain). No token is in this repository.

Glama build check

Glama's automated checks run glama/run.js: it starts glama/stand-in.js, a stand-in for the desktop app's endpoint that answers with the app's real tool definitions (glama/tools.json, exported from the app's tool registry) and answers every tool call with "install SoftGlaze Browser", then runs the real bridge against it. Real users never run these files; they are not part of any plugin.

Develop

  • npm test: tests of the bridge against test/mock-softglaze.js (made-up data) and of the Glama build check (Node.js 18+, no packages). Runs on every push in GitHub Actions.

  • npm run validate: claude plugin validate on the marketplace and each plugin. Add --profile directory to a plugin path to run the directory's local checks.

  • test/, glama/ and package.json at the repository root are not part of any plugin; the directory and installs read only the plugin folders.

Submission steps for Anthropic's directory: SUBMISSION-CHECKLIST.md.

License

MIT (LICENSE). SoftGlaze Browser and the SoftGlaze Proxy extension and bridge are 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 have clearly distinct resource+action targets (page_click vs page_type vs page_scroll, create_profile vs update_profile vs assign_proxy). A few boundaries blur: list_sessions overlaps with list_profiles filtered by status=running, batch_generate_profiles overlaps with create_profile, and page_snapshot/page_extract_text/page_screenshot all read the same page in different formats. Descriptions generally resolve these, but an agent must read carefully to choose correctly.

    Naming Consistency4/5

    Nearly everything is snake_case verb_noun (list_profiles, create_group, stop_run, assign_proxy), with a consistent page_ namespace for browser actions. Minor deviations exist: page_snapshot, page_screenshot, profile_health and workspace_summary are noun-first rather than verb-first, and check_proxy vs get_proxy_health use different verbs for related checks.

    Tool Count2/5

    At 39 tools this is well above the typical well-scoped range, and the surface spans many sub-domains (page control, profiles, proxies, groups, macros, runs, memory). Several tools could be consolidated or are redundant (list_sessions vs list_profiles, batch_generate_profiles vs create_profile), making the set feel heavy rather than tight.

    Completeness3/5

    Coverage is broad — browser control, profile lifecycle, proxy assignment/rotation/health, groups, macros, runs, memory and warming are all present. However, there are notable gaps: no tool to add a user-supplied proxy (only find_free_proxies and list_proxies), and no delete operations for profiles, groups, macros or proxies, plus no page back/forward or tab management. Agents will hit dead ends for these common lifecycle operations.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      C
      quality
      C
      maintenance
      Manage your GoLogin browser profiles and automation directly through AI conversations. This MCP server connects to the GoLogin API, letting you create, configure, and control browser profiles using natural language.
      59
      142 npm
      24
      MIT
    • F
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to control Multilogin X anti-detect browser profiles via a streamable HTTP MCP interface. Supports profile management, session handling, and a broad catalog of browser actions such as navigation, clicking, typing, screenshots, and more.
      -
    • A
      license
      Not graded
      quality
      B
      maintenance
      Connects AI agents to an existing Chromium browser profile through a local background service and extension, exposing browser control over MCP stdio. It lets agents navigate tabs, capture accessibility snapshots and screenshots, click, fill forms, type, scroll, drag, and run raw CDP commands, with multiple browser profiles selectable by ID.
      5 npm
      Do What The F*ck You Want To Public