Skip to main content
Glama
xpajonx
by xpajonx

Arc Browser MCP for OpenCode

CI MIT License

A local stdio MCP server that lets OpenCode navigate the Arc Browser already running on Windows from WSL2. It targets Arc directly, even when another browser is the Windows default.

Tools: arc_browser_status checks for an open Arc window. arc_navigate opens an absolute HTTP(S) URL in Arc.

Requirements

  • Windows 10 or 11 with the packaged Arc Browser installed for the signed-in user

  • WSL2 with Windows interop enabled

  • Node.js 20 or newer and npm

  • OpenCode V2

  • Arc open with a visible window when the tools are called

This project does not use CDP, an extension, browser debugging ports, hosted APIs, or third-party browser services. It is not an npm-published package. Install it from this repository.

Related MCP server: Integrated Browser MCP

Install

git clone https://github.com/xpajonx/arc-browser-mcp.git
cd arc-browser-mcp
npm ci
npm run build
npm test
npm run eval
git config core.hooksPath .githooks

OpenCode reads the project-local opencode.json when you start it from this checkout. Confirm the MCP server is connected:

opencode mcp list

To make the server available in every OpenCode project instead, register the absolute path from the checkout root:

opencode mcp add arc-browser --global -- node "$(pwd)/dist/src/index.js"
opencode mcp list

The global command writes to your OpenCode user config. The project-local config does not change global settings.

Use

  1. Open Arc in Windows and keep a window visible.

  2. In OpenCode, call arc_browser_status. It should return available: true.

  3. Call arc_navigate with a URL, for example https://example.com.

The tool reports the hostname and action: "navigated". Windows may use the current tab or open another tab. The tool does not promise tab placement or confirm page rendering.

See the step-by-step user guide for setup details and troubleshooting. See architecture notes for design and verification details.

Security and privacy

  • Only absolute HTTP and HTTPS URLs are accepted.

  • URLs with credentials, control characters, or more than 2,048 characters are rejected.

  • The MCP server does not read tab URLs, titles, page contents, cookies, browser history, or profile files.

  • Navigation uses your existing Arc profile. The destination receives requests and cookies as it would during normal browsing.

  • The structured audit line records only the hostname, action, result, and timestamp. It omits the URL path and query.

  • A navigation can change the active browser page. Review the destination before calling the tool.

Tests

npm test       # TypeScript build and local gate tests
npm run eval   # Offline URL-safety eval

The live smoke test makes Arc load a temporary local page and can change its current tab. Run it only when that is acceptable:

npm run test:live

The live test starts an HTTP server on loopback, calls the MCP tool, and passes only if Arc requests that local page. It makes no external network request. CI runs only the offline gate and eval.

License

MIT. See LICENSE.

Available Tools

2 tools
arc_browser_statusCheck Arc BrowserA
Read-onlyIdempotent

Check whether a visible Windows Arc Browser window is available. Does not read tab titles, URLs, or page contents.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
availableYes
visibleWindowsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds useful context beyond annotations: it targets a visible Windows window and explicitly excludes reading page content, which clarifies what the operation will and will not do.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The core purpose is front-loaded)Skip leading sentence; the exclusion of content reading is a valuable clarifying detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, read-only status check with an output schema and strong annotations, the description is complete. It tells the agent exactly what is checked and what is not inspected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema is empty, so there is nothing for the description to add. The baseline of 4 for no-parameter tools applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states a specific verb ('Check') and resource ('visible Windows Arc Browser window'), and explicitly delimits scope by saying it does not read tab titles, URLs, or page contents. This makes its purpose distinct from the sibling arc_navigate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context obvious: call this to verify Arc Browser availability without inspecting content. It does not explicitly name arc_navigate as an alternative or state 'use before navigating,' but the status-vs-navigation distinction is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

arc_navigateNavigate ArcA

Navigate the running Windows Arc Browser to an absolute HTTP(S) URL using Windows packaged-app URI activation. This may change Arc's current tab and uses the user's existing Arc profile. The tool does not read tabs, page content, cookies, or history.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute HTTP(S) URL, for example https://example.com

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
actionYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds valuable context: it may change Arc's current tab, uses the user's existing profile, and explicitly states it does not read tabs, page content, cookies, or history. This goes beyond annotation defaults.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences that front-load the core action and mechanism, with no wasted words. The non-reads statement is included efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with an output schema, the description covers purpose, mechanism, side effects, and non-reads. It doesn't mention prerequisites like Arc being running, but the sibling status tool indirectly covers that gap. Complete enough for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the url parameter already has a clear description in the schema. The tool description reinforces the 'absolute HTTP(S)' constraint but adds little beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: navigate the running Windows Arc Browser to an absolute HTTP(S) URL. It clearly distinguishes itself from the sibling arc_browser_status by describing an action, not a status check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly mention when to use this tool versus arc_browser_status or any alternatives. It provides useful context (may change current tab, uses existing profile) but no explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 2 tool updatesv0.1.0
    • First observedarc_browser_status
    • First observedarc_navigate

TDQS

A4.1/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one checks browser availability, and the other performs navigation. There is no overlap or ambiguity between them.

Naming Consistency4/5

Both tools use the arc_ prefix and snake_case style. arc_navigate is an action verb while arc_browser_status is noun-style, so the pattern is mostly consistent but not perfectly uniform.

Tool Count3/5

Two tools is minimal and only covers availability checking plus navigation. For a browser-related MCP this feels slightly thin, though the narrow scope keeps it from being unreasonable.

Completeness3/5

The core status-then-navigate workflow is present, but the server lacks any way to read tabs, URLs, or page content. This leaves notable gaps for agent workflows that need to inspect browser state.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI coding agents like Claude to read Windows clipboard contents (text and images) from within WSL environments, providing seamless cross-platform clipboard access through the Model Context Protocol.
    5
    -
  • A
    license
    A
    quality
    D
    maintenance
    A bridge to launch Chrome on Windows from WSL2 and proxy Chrome DevTools MCP tools. It enables browser automation via Claude Code in WSL2 by managing Chrome's lifecycle and exposing debugging capabilities.
    2
    4 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables Claude Code to control the Arc browser over CDP, including navigation, clicking, form filling, screenshots, and reading console and network traffic.
    11
    MIT