mcp-textbrowser
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., "@mcp-textbrowseropen bytesbrains.io and summarize the page content"
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.
@bytesbrains/mcp-textbrowser
MCP server — text-first headless browser for Claude Code and any MCP host. DOM + OCR text maps. Zero image tokens by default. 5-15x cheaper than screenshot-based browser MCPs.
browser_navigate(url) → DOM elements + OCR text (~200 tokens)
browser_navigate(url, visual=true) → text + PNG (use for layout/color only)Why
Every screenshot-based browser MCP sends a PNG to the AI on every action. At 1280×800 that's ~1,300 image tokens per page — 5-15x more expensive than reading the same content as text.
mcp-textbrowser captures a screenshot for OCR, extracts the text, then discards the image. Only structured DOM elements and OCR text reach the model. Switch to visual=true only when you genuinely need pixels (layout checks, color, design review).
Mode | Tokens per action | When to use |
text-only (default) | ~150–400 | Everything: navigation, forms, data extraction, workflows |
| ~1,500–3,000 | Layout, colors, CSS, design review |
Related MCP server: MCP Master Puppeteer
Install
Step 1 — install Chromium (one-time, ~130MB):
npx playwright install chromiumStep 2 — add the MCP server:
Claude Code (CLI) — one command
claude mcp add textbrowser -- npx -y @bytesbrains/mcp-textbrowserThat's it. Restart Claude Code and the tools are ready.
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"textbrowser": {
"command": "npx",
"args": ["-y", "@bytesbrains/mcp-textbrowser"]
}
}
}Restart Claude Desktop.
Manual (any MCP host)
Use command: npx, args: ["-y", "@bytesbrains/mcp-textbrowser"] in your host's MCP server config.
Tools
Tool | What it does |
| Open a URL, return page context |
| Click by CSS selector / XPath / visible text |
| Fill an input field |
| Scroll page or element into view |
| Capture current page context |
| Read current page without navigating |
| Run JS in the page (safe DOM ops only) |
All tools default to text-only — pass visual: true to any tool to also receive the PNG.
Example output
Page: https://example.com/
Title: Example Domain
Viewport: 1280x800
Elements (3 interactive of 14 total):
[1] <a> href="https://iana.org/domains/example" bbox=(133,175,254,195)
text: "More information..."
OCR (full page screenshot):
Example Domain
This domain is for use in illustrative examples in documents.
You may use this domain in literature without prior coordination or asking for permission.Requirements
Node.js 18+
Chromium:
npx playwright install chromium(one-time, ~130MB)
License
MIT © BytesBrains
Built by Agent, for Agents 🤖
Built and maintained by BytesBrains — AI automation & agents, engineered to production standards. The model proposes, code guarantees.
Available Tools
7 toolsbrowser_clickA
Click an element on the current page. Identify the target by CSS selector, XPath, or visible text. Returns updated page context after the click.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Visible text content to match (partial, case-insensitive) | |
| xpath | No | XPath expression | |
| visual | No | Return base64 PNG alongside text (default false) | |
| selector | No | CSS selector |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavior. It mentions returning updated page context but omits details about side effects, failure modes, or element matching behavior when multiple elements match.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, no extraneous text. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and full schema descriptions, the description adequately covers the purpose and return value. It does not need to explain output since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described. The description reinforces the identification methods (CSS, XPath, text) but adds no new information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Click an element') and the resource ('on the current page'), and distinguishes itself from siblings by specifying the core interaction type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to click elements) but does not provide explicit exclusions or comparisons with siblings like browser_type or browser_scroll.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_evaluateA
Execute JavaScript in the current page context and return the result. Restricted to safe DOM read operations — eval, Function, fetch, WebSocket, and document.write are blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes | JavaScript expression to evaluate (must not use eval, Function, import, fetch, WebSocket, or document.write) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explicitly states the tool executes JavaScript and returns the result, and lists blocked functions. It does not mention error handling or return type details, but the restrictions clarify safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, followed by restrictions. Every sentence adds essential information with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose and constraints but lacks details on return value format, error behavior, or potential side effects. Given no output schema, some additional context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing a baseline of 3. The description adds value by explaining the execution context and restrictions beyond the schema's parameter description, which only says 'JavaScript expression to evaluate'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'execute' and the resource 'JavaScript in the current page context' with the outcome 'return the result'. It distinguishes from sibling tools like browser_click by emphasizing execution of code rather than UI interactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use (safe DOM read operations) and restrictions (blocked functions like eval, fetch). However, it does not explicitly suggest alternative tools for non-read operations, though the restrictions implicitly guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_readA
Read the current page context (DOM elements + OCR text) without navigating or clicking anything.
| Name | Required | Description | Default |
|---|---|---|---|
| visual | No | Return base64 PNG alongside text (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It states it's read-only (no navigation/clicking) and returns DOM+OCR, but lacks details on side effects, performance, or limits. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that covers purpose and constraints without any wasted words. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one simple parameter and no output schema, the description is nearly complete. It could mention the optional return of base64 PNG, but overall it sufficiently informs an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single boolean parameter (visual). The description adds no extra meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the current page context (DOM elements + OCR text) and explicitly distinguishes it from navigation or clicking, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for read-only context capture, contrasting with interactive tools. It could be more explicit about when to use this over browser_screenshot, but the distinction is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_screenshotA
Capture the current page and return an OCR-based text map. The screenshot itself is discarded unless visual=true.
| Name | Required | Description | Default |
|---|---|---|---|
| visual | No | Return base64 PNG alongside text (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description clearly discloses that the screenshot is discarded unless visual=true, and that it returns an OCR-based text map. Covers key behavior, though could mention that a page must be loaded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, immediate purpose and parameter explanation. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool (1 optional param, no output schema), the description covers purpose, parameter, and a nuance (screenshot discarding). Lacks explicit mention of prerequisite (page must be navigated).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one boolean parameter (visual) with 100% schema coverage. Description mentions the parameter's effect (base64 PNG) and default, adding minimal value beyond the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Capture the current page and return an OCR-based text map' – specific verb and resource, and distinguishes from sibling tools like browser_read (DOM reading) and browser_scroll (scrolling).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for extracting text from rendered page (e.g., images), but no explicit guidance on when to use versus alternatives like browser_read or browser_evaluate for script-controlled content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_scrollA
Scroll the current page. Use direction (up/down/left/right) with an optional pixel amount, or provide a selector to scroll that element into view.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | Pixels to scroll (default 800) | |
| visual | No | Return base64 PNG alongside text (default false) | |
| selector | No | CSS selector — scroll this element into view instead | |
| direction | No | Scroll direction (default: down) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behaviors. It mentions scrolling and the visual parameter, but does not clarify if scrolling is smooth, if it handles dynamic content, or what happens when both selector and direction are specified. Lacks full behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the purpose and quickly cover the two usage modes. No redundant or unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the main usage scenarios. However, it could mention what happens with conflicting inputs (e.g., both direction and selector) or edge cases. Without output schema or annotations, a bit more detail on return behavior would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all four parameters with descriptions. The description repeats the parameter usage but adds no new meaning beyond stating the default pixel value (800) and that visual returns base64 PNG. With 100% schema coverage, the description adds minimal additional value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool scrolls the current page and specifies two modes: direction with optional pixel amount, or a selector to scroll element into view. This distinguishes it from sibling tools like browser_navigate or browser_click.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to use each scrolling mode (direction/amount vs. selector), but does not explicitly warn against using this tool when alternatives like browser_navigate or browser_read are more appropriate. The sibling list provides context but the description itself lacks direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_typeA
Type text into an input field on the current page. By default clears the field first. Returns updated page context.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type | |
| clear | No | Clear existing value before typing (default true) | |
| visual | No | Return base64 PNG alongside text (default false) | |
| selector | Yes | CSS selector for the input element |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It notes that the tool types text, clears by default, and returns updated page context. This is adequate but does not cover potential error conditions, waiting behavior, or what happens if the element is not found. More detail would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences that immediately convey the purpose and key behavior. Every sentence earns its place, and there is no unnecessary information. It is well-structured with the primary action stated first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (four parameters, no output schema), the description covers essential aspects: what the tool does, default clearing, and return type. It could mention prerequisites like page load or element existence, but overall it provides sufficient context for an AI agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal additional meaning beyond the schema, only clarifying that the clear parameter defaults to true. It does not elaborate on the 'text', 'selector', or 'visual' parameters, so it provides only marginal added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: typing text into an input field on the current page. The specific verb 'Type' and resource 'input field' make the purpose unambiguous. It also distinguishes from sibling tools like browser_click and browser_read, which have different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a key default behavior (clearing the field first), which is helpful. However, it does not explicitly state when to use this tool over alternatives or provide exclusions. The context implied by sibling names offers some guidance, but the description itself lacks explicit usage direction.
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. Dates show when Glama detected each change.
7 tool updates
v1.1.3- First observed
browser_click - First observed
browser_evaluate - First observed
browser_navigate - First observed
browser_read - First observed
browser_screenshot - First observed
browser_scroll - First observed
browser_type
TDQS
Each tool targets a distinct browser action (navigate, click, type, scroll, read, screenshot, evaluate) with no overlap in purpose.
All tool names follow the consistent 'browser_verb' pattern, making the set predictable and easy to understand.
7 tools is well-scoped for a browser automation server, covering essential interactions without being excessive or insufficient.
Covers core browsing actions well, but lacks explicit back/forward navigation or page refresh, which are minor gaps for typical workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
61Headless-browser-as-JSON with memorymarket cache economics. Real Chromium, crypto settlement.
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
Zenrows MCP server — Fetch, Extract, Batch, and Browser Sessions for AI coding assistants
Related MCP Servers
- AlicenseBqualityFmaintenanceA headless browser MCP server that allows AI agents to fetch web content and perform Google searches without API keys, supporting various output formats like Markdown, JSON, HTML, and text.224MIT
- FlicenseNot gradedqualityDmaintenanceAn advanced MCP server for browser automation using Puppeteer, specifically optimized for token efficiency through minimal data returns and progressive enhancement. It enables agents to navigate pages, capture LLM-optimized screenshots, extract structured content, and perform batch interactions.3-

Plasmateofficial
AlicenseNot gradedqualityBmaintenanceAgent-native headless browser for AI agents. Converts web pages to a Semantic Object Model (SOM) instead of raw HTML — 17x average token reduction across real-world sites (up to 117x on complex pages). Native MCP server with fetch_page, extract_text, extract_links, and full browser automation. No API key required.54Apache 2.0- AlicenseAqualityAmaintenanceA token-efficient MCP server that gives AI agents structured access to the web, returning compact page summaries and targeted queries instead of full accessibility dumps.23463178MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- 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/bytesbrains/mcp-textbrowser'
If you have feedback or need assistance with the MCP directory API, please join our Discord server