Provides an authenticated web content fetching tool for GitHub Copilot in VS Code, enabling access to authentication-protected pages by reusing the user's signed-in Chrome session
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCPBrowserfetch my GitHub notifications page"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
✅ MCPBrowser (MCP Browser)
MCPBrowser is an MCP browser server that gives AI assistants the ability to browse web pages using a real Chrome or Edge browser. This browser-based MCP server lets AI assistants (Claude, Copilot) access any website — especially those protected by authentication, CAPTCHAs, anti-bot restrictions, or requiring JavaScript rendering. Uses your real Chrome/Edge browser session for web automation, so you log in once, and your AI can navigate, click buttons, fill forms, and extract content from sites that block automated requests.
Built on the Model Context Protocol (MCP), this web browser MCP server works seamlessly with Claude Desktop, Claude Code (CLI), GitHub Copilot, and any MCP-compatible AI assistant. It handles corporate SSO, CAPTCHAs, Cloudflare protection, SPAs, dashboards, and any site that blocks automated requests. Your AI gets the same browser access you have — no special APIs, no headless browser detection, just your authenticated browser session.
Example workflow for AI assistant to use MCPBrowser
Contents
Requirements
Chrome or Edge browser
Node.js 18+ (includes npm)
Note: Node.js must be installed on your system. The VS Code extension and npm package both require Node.js to run the MCP server. Download from nodejs.org if not already installed.
Installation
Getting started
First, install MCPBrowser with your MCP client.
Standard config works in most tools:
Amp
Add via the Amp VS Code extension settings screen or by updating your settings.json file:
Amp CLI Setup:
Claude Code
Use the Claude Code CLI to add the MCPBrowser MCP server:
Verify it's working:
You should see:
Claude Desktop
Add to your config file:
Windows: %APPDATA%\Claude\claude_desktop_config.json
Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
Restart Claude Desktop after saving.
Cline
Follow the instruction in the section Configuring MCP Servers.
Add the following to your cline_mcp_settings.json file:
Codex
Use the Codex CLI to add the MCPBrowser MCP server:
Alternatively, create or edit the configuration file ~/.codex/config.toml and add:
For more information, see the Codex MCP documentation.
Copilot CLI
Use the Copilot CLI to interactively add the MCPBrowser MCP server:
Alternatively, create or edit the configuration file ~/.copilot/mcp-config.json and add:
For more information, see the Copilot CLI documentation.
Cursor
Or install manually:
Go to Cursor Settings -> MCP -> Add new MCP Server. Name to your liking, use command type with the command npx -y mcpbrowser@latest. You can also verify config or add command like arguments via clicking Edit.
Factory
Use the Factory CLI to add the MCPBrowser MCP server:
Alternatively, type /mcp within Factory droid to open an interactive UI for managing MCP servers.
For more information, see the Factory MCP documentation.
Gemini CLI
Follow the MCP install guide, use the standard config above.
Goose
Or install manually:
Go to Advanced settings -> Extensions -> Add custom extension. Name to your liking, use type STDIO, and set the command to npx -y mcpbrowser@latest. Click "Add Extension".
Kiro
Follow the MCP Servers documentation. For example in .kiro/settings/mcp.json:
LM Studio
Or install manually:
Go to Program in the right sidebar -> Install -> Edit mcp.json. Use the standard config above.
opencode
Follow the MCP Servers documentation. For example in ~/.config/opencode/opencode.json:
Qodo Gen
Open Qodo Gen chat panel in VSCode or IntelliJ → Connect more tools → + Add new MCP → Paste the standard config above.
Click Save.
VS Code (GitHub Copilot)
Or install manually:
Follow the MCP install guide, use the standard config above. You can also install the MCPBrowser MCP server using the VS Code CLI:
After installation, the MCPBrowser MCP server will be available for use with your GitHub Copilot agent in VS Code.
VS Code Extension
Install from VS Code Marketplace or run:
The extension automatically installs and configures everything for GitHub Copilot.
Warp
Go to Settings -> AI -> Manage MCP Servers -> + Add to add an MCP Server. Use the standard config above.
Alternatively, use the slash command /add-mcp in the Warp prompt and paste the standard config from above.
Windsurf
Follow Windsurf MCP documentation. Use the standard config above.
MCP Tools
fetch_webpage
Fetches web pages using your Chrome/Edge browser. Handles authentication, CAPTCHA, SSO, anti-bot protection, and JavaScript-heavy sites. Opens the URL in a browser tab (reuses existing tab for same domain) and waits for the page to fully load before returning content. Automatically detects SPAs (React, Vue, Angular) and waits for JavaScript to render content.
Parameters:
url(string, required) - The URL to fetchremoveUnnecessaryHTML(boolean, optional, default:true) - Remove unnecessary HTML for size reduction by ~90%postLoadWait(number, optional, default:0) - Additional milliseconds to wait after page load before extracting HTML. Use for pages that need extra time to render.
Examples:
click_element
Clicks on any clickable element (buttons, links, divs with onclick handlers, etc.). Can target by CSS selector or visible text content. Automatically scrolls element into view and waits for page stability after clicking.
⚠️ Note: Page must be already loaded via fetch_webpage first.
Parameters:
url(string, required) - The URL of the page (must match a previously fetched page)selector(string, optional) - CSS selector for the element (e.g.,#submit-btn,.login-button)text(string, optional) - Text content to search for if selector not provided (e.g., "Sign In", "Submit")returnHtml(boolean, optional, default:true) - Whether to wait for stability and return HTML after clicking. Set tofalsefor fast form interactions (checkboxes, radio buttons)removeUnnecessaryHTML(boolean, optional, default:true) - Remove unnecessary HTML for size reduction. Only used whenreturnHtmlistruepostClickWait(number, optional, default:1000) - Milliseconds to wait after click for SPAs to render dynamic contentwaitForElementTimeout(number, optional, default:1000) - Maximum time to wait for element in milliseconds
Examples:
type_text
Types text into an input field, textarea, or other editable element. Simulates human-like typing with configurable delay between keystrokes. Automatically clears existing text by default.
⚠️ Note: Page must be already loaded via fetch_webpage first.
Parameters:
url(string, required) - The URL of the page (must match a previously fetched page)selector(string, required) - CSS selector for the input element (e.g.,#username,input[name="email"])text(string, required) - Text to type into the fieldclear(boolean, optional, default:true) - Whether to clear existing text firsttypeDelay(number, optional, default:50) - Delay between keystrokes in milliseconds (simulates human typing)returnHtml(boolean, optional, default:true) - Whether to wait for stability and return HTML after typingremoveUnnecessaryHTML(boolean, optional, default:true) - Remove unnecessary HTML for size reduction. Only used whenreturnHtmlistruepostTypeWait(number, optional, default:1000) - Milliseconds to wait after typing for SPAs to render dynamic contentwaitForElementTimeout(number, optional, default:5000) - Maximum time to wait for element in milliseconds
Examples:
get_current_html
Gets the current HTML from an already-loaded page WITHOUT navigating or reloading. Much faster than fetch_webpage since it only extracts the current DOM state. Use this after interactions (click, type) to get the updated page content efficiently.
⚠️ Note: Page must be already loaded via fetch_webpage first.
Parameters:
url(string, required) - The URL of the page (must match a previously fetched page)removeUnnecessaryHTML(boolean, optional, default:true) - Remove unnecessary HTML for size reduction by ~90%
Examples:
Performance comparison:
fetch_webpage: 2-5 seconds (full page reload)get_current_html: 0.1-0.3 seconds (just extracts HTML) ✅
close_tab
Closes the browser tab for the given URL's hostname. Removes the page from the tab pool and forces a fresh session on the next visit to that hostname. Useful for clearing authentication state, managing memory, or starting fresh with a domain.
⚠️ Note: Uses exact hostname match (www.example.com and example.com are treated as different tabs).
Parameters:
url(string, required) - The URL whose hostname tab should be closed
Examples:
Use cases:
Clear authentication/session state
Free up browser memory
Reset to fresh state before new login
Configuration (Optional)
Environment variables for advanced setup:
Variable | Description | Default |
| Path to Chrome/Edge | Auto-detect |
| Browser profile directory |
|
| DevTools port |
|
Troubleshooting
Browser doesn't open?
Make sure Chrome or Edge is installed
Try setting
CHROME_PATHexplicitly
Can't connect to browser?
Close all Chrome instances and try again
Check if port 9222 is in use
Authentication not preserved?
Keep the browser tab open (default behavior)
Use the same domain for related requests
For Developers
For Developers
Clone and setup:
Run tests:
Links
License
MIT