browser-ocr-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., "@browser-ocr-mcpOCR the image at /home/user/page.png"
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.
browser-ocr-mcp
MCP server for local OCR via Tesseract.js. Extract text from images and browser screenshots without sending image data to the LLM.
Why
When browsing with Playwright MCP, you often encounter pages where text is embedded in images. Normally you'd send the screenshot to the LLM — slow, bandwidth-heavy. This server runs Tesseract.js locally so the image never leaves your machine.
Related MCP server: OCR MCP Server
Tools
ocr_image
Extract text from an image file or URL. Zero browser setup required.
Input:
path(string, optional) — Absolute path to a local image fileurl(string, optional) — HTTP URL to download the image from
Output:
{
"text": "The quick brown fox jumps over the lazy dog",
"confidence": 85,
"wordCount": 9
}Typical workflow with Playwright MCP:
1. browser_take_screenshot({ filename: "page.png" })
2. ocr_image({ path: "/home/user/page.png" })
3. → text returned, zero image data sent to LLMbrowser_ocr
Take a screenshot of the current browser page via CDP and OCR it — all in one call. Requires a shared Chromium instance.
Input:
fullPage(boolean, optional) — Capture full scrollable page. Default:false
Setup (one-time):
# Terminal 1: Launch Chromium with debugging port
chromium --remote-debugging-port=9222
# Terminal 2: Start Playwright MCP connected to it
npx @playwright/mcp --cdp-endpoint http://localhost:9222
# Terminal 3: Start OCR MCP server
node server.js --cdp-endpoint http://localhost:9222Install
git clone https://github.com/Ismapik/browser-ocr-mcp.git
cd browser-ocr-mcp
npm installThe first time you run OCR, Tesseract.js downloads English language data (~12 MB). Subsequent runs use the cached data.
MCP Client Config
Add to your MCP client configuration (e.g., mcp.json or Claude Desktop config):
{
"mcpServers": {
"browser-ocr": {
"command": "node",
"args": ["/path/to/browser-ocr-mcp/server.js"],
"env": {
"CDP_ENDPOINT": "http://localhost:9222"
}
}
}
}The CDP_ENDPOINT env var is only needed if you use the browser_ocr tool. The ocr_image tool works without it.
Test
npm testRuns a test suite that:
Starts the MCP server
Calls
ocr_imageon a sample imageVerifies text extraction, confidence, and word count
Tests error handling for missing/invalid inputs
Requirements
Node.js ≥ 18
Chromium (only for
browser_ocrtool)playwright-core(optional, only forbrowser_ocr)
License
MIT
Available Tools
2 toolsbrowser_ocrA
Take a screenshot of the current browser page (via CDP connection to a shared Chromium instance) and extract all visible text using local OCR. Requires Chromium to be running with --remote-debugging-port=9222.
| Name | Required | Description | Default |
|---|---|---|---|
| fullPage | No | Capture the full scrollable page instead of just the viewport. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It explains the screenshot and OCR process, and notes the dependency on Chromium. However, it does not specify return format, performance considerations, or error conditions. This is adequate but could be more thorough.
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 two sentences, highly concise. The first sentence states the action and method, the second states a prerequisite. No wasted words; each 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 complexity (screenshot + OCR) and absence of output schema, the description should explain what is returned. It says 'extract all visible text' but not how that text is provided (e.g., as a string, file, or list). It also lacks error cases or performance notes. This is incomplete for a tool with no output schema.
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% for the single parameter 'fullPage', so the baseline is 3. The description adds no additional meaning beyond what the schema already provides ('Capture the full scrollable page instead of just the viewport. Default: false.').
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 takes a screenshot and extracts text using OCR. However, it does not explicitly differentiate from the sibling tool 'ocr_image', which likely operates on an existing image. The verb 'take' and resource 'browser page' are specific, but sibling distinction is implicit.
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 prerequisite (Chromium with debugging port) but provides no guidance on when to use this tool versus alternatives like 'ocr_image'. Usage context is implied (when needing text from a browser page) but lacks explicit when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ocr_imageA
Extract text from an image file or URL using local Tesseract.js OCR. No data leaves your machine. Accepts a file path (absolute) or an HTTP URL to the image.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Absolute path to a local image file (PNG, JPEG, etc.). Use this after taking a screenshot with Playwright MCP's browser_take_screenshot. | |
| url | No | HTTP/HTTPS URL to download the image from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It discloses local processing and privacy, but omits important behavioral details such as output format, supported image formats beyond mention, error handling, and synchronous vs asynchronous execution.
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 concise with three sentences, front-loading the main purpose. No extraneous information; every sentence adds value.
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?
While the description covers input types and key traits (local, private), it lacks information about the output (e.g., no mention of return value or structure). Given no output schema, this gap reduces 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?
Both parameters have schema descriptions, and the tool description adds value by providing usage context (e.g., 'Use this after taking a screenshot...') for the 'path' parameter, going 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 tool extracts text from an image using local Tesseract.js OCR, specifying both input types (file path or URL). However, it does not explicitly differentiate from the sibling tool 'browser_ocr'.
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 a specific usage hint ('Use this after taking a screenshot...') but lacks explicit guidance on when not to use, prerequisites, or alternatives beyond one example.
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.
2 tool updates
v1.0.0- First observed
browser_ocr - First observed
ocr_image
TDQS
Both tools perform OCR but on clearly distinct inputs: one captures the current browser page via screenshot, the other processes an image file or URL. No ambiguity in their purposes.
Both tools use a consistent snake_case naming pattern with a source prefix (browser_, ocr_) followed by the action (ocr, image). The pattern is straightforward and predictable.
With only 2 tools, the server is lean but covers the core OCR use cases. While slightly below the typical 3-15 range, it feels appropriately scoped for a focused OCR utility.
The two tools cover the primary OCR scenarios: extracting text from the live browser page and from external images. Minor gaps like language configuration or PDF support exist but are not essential for basic usage.
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
OCR and document understanding: extract text from images, then summarize or translate it.
Screenshot any URL/HTML as PNG/JPEG/WebP, or read it as clean Markdown/text for LLMs.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Read PDFs and images as markdown or text, with exact costs and hard spend caps. $0.75/1k pages.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceExtracts text from images using Tesseract OCR with support for local files, URLs, and raw image bytes. It provides production-grade OCR capabilities and multi-language support through the Model Context Protocol.39MIT
- FlicenseAqualityDmaintenanceA Tesseract.js-based server that enables image-to-text recognition within MCP-compatible environments like Cursor. It supports multiple languages and common image formats, allowing users to extract text from local files using natural language commands.2-
- AlicenseAqualityDmaintenanceHelps non-vision models extract and understand images and screenshots via OpenRouter multimodal models.2163MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to process files locally — OCR images, extract text from PDFs and DOCX, and describe images using local vision models, all without sending data to external services.-
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/Ismapik/browser-ocr-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server