An MCP (Model Context Protocol) server for controlling Oculus Browser via WebSocket CDP protocol. This server provides Playwright-like functionality using direct Chrome DevTools Protocol (CDP) commands, making it compatible with Oculus Browser's CDP 1.3 protocol.
- Reliable WebSocket CDP Connection - Bypasses Playwright's initialization issues
- Full Playwright-like API - All common browser automation features
- TypeScript Implementation - Type-safe and maintainable
- MCP Protocol - Standard Model Context Protocol server
- CDP 1.3 Compatible - Works with Oculus Browser's protocol version
- Oculus Quest with browser running
- ADB installed and in system PATH
- Device connected via USB or wireless ADB
Note: The MCP server automatically sets up port forwarding on startup. You don't need to run adb forward manually.
npm install
npm run buildAdd to your MCP client configuration:
{
"mcpServers": {
"quest-browser": {
"command": "node",
"args": ["dist/index.js"],
"env": {
"CDP_ENDPOINT": "http://localhost:9222",
"ADB_PATH": "adb"
}
}
}
}# Development mode
npm run dev
# Production mode
npm run build
npm startadb_check- Check if ADB is available and get versionadb_list_devices- List all ADB devices (connected and disconnected)adb_get_connected_devices- Get only connected ADB devicesadb_forward_port- Set up ADB port forwarding (default: tcp:9222 -> localabstract:chrome_devtools_remote)adb_list_forwardings- List all active ADB port forwardingsadb_remove_forwarding- Remove ADB port forwardingadb_ensure_forwarding- Ensure port forwarding is set up (check first, then set up if needed)
browser_initialize- Initialize browser connection and get available pagesbrowser_connect- Connect to a specific page by indexbrowser_list_pages- List all available pagesbrowser_get_current_page- Get information about the currently connected page
browser_navigate- Navigate to a URLbrowser_wait_for_load- Wait for page to finish loadingbrowser_get_url- Get the current page URLbrowser_get_title- Get the page titlebrowser_go_back- Navigate back in browser historybrowser_go_forward- Navigate forward in browser historybrowser_reload- Reload the current pagebrowser_wait_for_navigation- Wait for navigation to completebrowser_wait_for_url- Wait for URL to match pattern
browser_click- Click an element by CSS selectorbrowser_type- Type text into an input elementbrowser_wait_for_selector- Wait for an element to appearbrowser_fill- Fill form field with value (more robust than type)browser_select_option- Select option(s) in a dropdownbrowser_check- Check a checkbox or radio buttonbrowser_uncheck- Uncheck a checkboxbrowser_hover- Hover over an elementbrowser_double_click- Double click an elementbrowser_right_click- Right click an elementbrowser_press_key- Press a keyboard keybrowser_drag_and_drop- Drag and drop an element
browser_evaluate- Evaluate JavaScript expression in page contextbrowser_get_content- Get the full HTML content of the pagebrowser_screenshot- Take a screenshot of the current pagebrowser_query_selector- Query a single element by CSS selectorbrowser_query_selector_all- Query multiple elements by CSS selectorbrowser_get_text- Get text content of an elementbrowser_get_attribute- Get attribute value of an elementbrowser_get_inner_html- Get inner HTML of an elementbrowser_get_outer_html- Get outer HTML of an element
browser_wait_for_timeout- Wait for specified time
browser_wait_for_response- Wait for network response matching URL patternbrowser_get_network_logs- Get network activity logs
browser_set_viewport_size- Set viewport sizebrowser_set_geolocation- Set geolocationbrowser_set_permissions- Set browser permissionsbrowser_add_init_script- Add initialization script to run on every page load
browser_get_accessibility_tree- Get accessibility tree snapshot (Playwright MCP specific)browser_snapshot- Get accessibility snapshot (alias for browser_get_accessibility_tree)
browser_close- Close the browser connectionbrowser_console_messages- Get console messages from the pagebrowser_file_upload- Upload a file to a file input elementbrowser_fill_form- Fill multiple form fields at oncebrowser_handle_dialog- Handle a JavaScript dialog (alert, confirm, prompt)browser_network_requests- Get list of network requestsbrowser_resize- Resize the browser viewport (alias for browser_set_viewport_size)
The MCP server automatically:
- Checks if ADB is available in system PATH
- Detects connected ADB devices
- Sets up port forwarding:
tcp:9222 -> localabstract:chrome_devtools_remote
This happens on server startup, so you don't need to manually run adb forward.
# Watch mode
npm run watch
# Development mode (with tsx)
npm run dev
# Build
npm run build
# Run
npm startCDP_ENDPOINT- CDP endpoint URL (default:http://localhost:9222)ADB_PATH- Path to ADB executable (default:adbfrom system PATH)