A Model Context Protocol (MCP) server that allows AI assistants to access VPN-protected or authentication-required documentation through a persistent browser session.
Companies have internal documentation (Confluence, wikis, internal sites) behind VPNs and authentication that AI tools cannot access. This prevents AI assistants from leveraging your company's domain knowledge and internal documentation when helping with work tasks.
Traditional approaches fail because:
- VPN connections require network-level access that AI tools don't have
- Authentication flows (SSO, SAML, OAuth) need manual intervention
- Session cookies and tokens must persist across requests
- Many internal sites detect and block headless browsers
This MCP server runs a visible Chrome instance that you authenticate once. The browser session persists, and AI tools can fetch content through it using standard MCP tools. You can intervene in the browser at any time if re-authentication is needed.
- MCP server launches a visible Chrome browser with a persistent profile
- You manually authenticate (VPN, SSO, login forms, etc.)
- AI tools call MCP tools to fetch content through your authenticated session
- Browser session persists across requests and server restarts
- Content is automatically cleaned (removes nav, headers, footers)
Clone or download this repository, then install dependencies:
cd /path/to/this/directory
npm installEdit the Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Add this server configuration:
{
"mcpServers": {
"authenticated-browser": {
"command": "node",
"args": ["/absolute/path/to/this/directory/index.js"]
}
}
}Replace /absolute/path/to/this/directory/ with the actual full path where you cloned this repo.
Example:
{
"mcpServers": {
"authenticated-browser": {
"command": "node",
"args": ["/Users/username/Desktop/Puppeteer/index.js"]
}
}
}After editing the config:
- Save the file
- Restart Claude Desktop completely (quit and reopen)
- The server will be available for Claude to use
In Windsurf, go to Settings and search for "MCP" or "MCP Servers".
Add this configuration:
{
"authenticated-browser": {
"command": "node",
"args": ["/Users/username/Desktop/Puppeteer/index.js"]
}
}Replace with your actual path. After adding, restart Windsurf completely.
Add to Cursor's MCP configuration. Location varies by version:
- Settings > Features > MCP Servers
- Or edit
.cursor/mcp.jsonin your home directory
Configuration format is the same as above.
Any MCP-compatible client can use this server. Add it using the stdio transport with the command:
node /absolute/path/to/index.js
The server provides three tools that AI assistants can call:
Fetches and extracts clean content from a webpage.
Parameters:
url(string, required): URL to fetchformat(string, optional): Output format, either "text" or "markdown". Default is "text"
Behavior:
- Automatically removes navigation, headers, footers, sidebars
- Intelligently finds main content area
- Returns clean text or markdown
Extracts links from a webpage, focused on content area.
Parameters:
url(string, required): URL to extract links fromfilter(string, optional): Filter links containing this text in URL or link text
Behavior:
- Only extracts links from main content area (ignores nav/sidebar)
- Resolves relative URLs to absolute URLs
- Returns array of {text, href, title}
Searches for text within a webpage.
Parameters:
url(string, required): URL to searchquery(string, required): Text to search forcaseSensitive(boolean, optional): Case-sensitive search. Default is false
Behavior:
- Searches page content (excluding nav/headers)
- Returns up to 10 matches with surrounding context
- Each match includes position and 200 characters of context
Once configured, use natural language with your AI assistant:
"Fetch content from https://internal-docs.company.com/api-guide"
"Get all links from https://confluence.company.com/page that contain 'setup'"
"Search for 'authentication' in https://internal-wiki.company.com/security"
The AI assistant will automatically detect internal documentation URLs and use the appropriate tools. You can also explicitly mention "internal docs" or "company documentation" to trigger tool usage.
On the first request to fetch internal documentation:
- You'll see a message: "Launching Chrome browser... Please authenticate in the browser window"
- Chrome will open in a visible window (maximized)
- The browser will navigate to the URL you requested
- Complete any authentication required (VPN, SSO, login forms)
- The session is automatically saved to
chrome-session/directory - Content will be fetched and returned to the AI assistant
On subsequent requests:
- Browser reuses the saved session (no re-authentication needed)
- Session persists even if you restart the MCP server
- You can manually intervene in the browser window anytime
- If session expires, just re-authenticate in the same browser window
Browser data is stored in chrome-session/ directory:
- Cookies
- Local storage
- Authentication tokens
- Cache
To reset the session (force re-authentication):
rm -rf chrome-session/Browser doesn't launch
- Check that the path in your MCP config is correct and absolute
- Ensure Node.js is installed and in your PATH
- Check Claude Desktop logs for errors
Authentication not persisting
- The
chrome-session/directory must be writable - Some sites expire sessions quickly, you may need to re-authenticate
- Check if the site is clearing cookies on logout
Content not extracted properly
- The tool tries common selectors for main content
- Some sites may need custom handling
- You can manually navigate in the browser to verify the page loads
MCP server not showing up
- Restart your AI tool completely after config changes
- Verify the JSON config syntax is valid
- Check that the path uses forward slashes even on Windows
- Built with Puppeteer for browser automation
- Uses Cheerio for HTML parsing and content extraction
- Turndown for HTML to Markdown conversion
- MCP SDK for protocol implementation
- Runs on stdio transport (no network ports)
- Browser must remain open while in use
- Only one browser instance per server
- No concurrent requests (requests are serialized)
- Session expires based on site's session timeout
- Requires manual authentication intervention