@codeinklingon/browser-mcp
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., "@@codeinklingon/browser-mcpgo to google.com and take a screenshot"
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.
@codeinklingon/browser-mcp
vibecoded port of oh-my-pi's browser tool as an mcp server
MCP server for headless browser automation via Puppeteer. Drop-in replacement for @playwright/mcp with enhanced stealth anti-detection and Playwright-format ARIA snapshots.
Usage
Add to your opencode.json:
{
"mcp": {
"browser-mcp": {
"type": "local",
"command": ["npx", "-y", "@codeinklingon/browser-mcp"],
"enabled": true
}
}
}Or install the skill (registers the MCP server + loads AI guidance):
npx skills install @codeinklingon/browser-mcpOr run directly:
npx @codeinklingon/browser-mcpRelated MCP server: Chrome MCP Stealth
Tools
Tool | Description |
| Open a tab, optionally navigate to a URL |
| Execute JS in the tab — has full |
| Close the tab and release resources |
The tab API
Every browser_tab_run call has tab, display, wait, assert in scope.
Navigation & Info
Method | Notes |
| Current URL (sync) |
| Page title |
|
|
| Wait for next page load |
Click & Input
Method | Notes |
| CSS, |
| Type into input |
| Clear then type |
|
|
| |
|
|
| Selector or |
| File input |
Scrolling & Visibility
Method | Notes |
| Scroll by pixels |
| Center element in viewport |
Page State
Method | Notes |
| Accessibility tree: |
| Playwright-format YAML with |
| Raw JS in page context |
|
|
| Base64 PNG |
Element Refs
Method | Notes |
| ElementHandleActions from |
| ElementHandleActions from |
| CSS, text, xpath, aria-ref |
| String substring or RegExp |
| String, RegExp, or function |
ElementHandleActions: { click, type, fill, hover, focus, screenshot, evaluate, scrollIntoView }
Important
display,wait,assertare bare globals — NOTtab.*methodsdisplay(x)✓ —tab.display(x)✗wait(2000)✓ —tab.wait(2000)✗
Navigation invalidates refs — re-run
ariaSnapshot()orobserve()aftergoto()Single-expression code auto-returns its value (no explicit
returnneeded)
Selector Syntax
Prefix | Example | Notes |
(none) |
| CSS selector |
|
| Visible text (retries 10x) |
|
| XPath |
|
| Ref from |
Example
await tab.goto('https://example.com/login')
const snap = await tab.ariaSnapshot()
display(snap)
await tab.fill('aria-ref=e5', 'admin')
await tab.fill('aria-ref=e8', 'password')
await tab.click('aria-ref=e12')
await tab.waitForNavigation()
display(tab.url())
const screenshot = await tab.screenshot()
display(screenshot)Install
# Quick start — installs the skill and registers the MCP server
npx skills install codeinklingon/browser-mcp
# Or manually add to opencode.json (see Usage above)Build from source
npm install
npm run buildPublish:
npm publishLicense
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/CodeInKlingon/browser-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server