Skip to main content
Glama

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 file

  • url (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 LLM

browser_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:9222

Install

git clone https://github.com/Ismapik/browser-ocr-mcp.git
cd browser-ocr-mcp
npm install

The 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 test

Runs a test suite that:

  1. Starts the MCP server

  2. Calls ocr_image on a sample image

  3. Verifies text extraction, confidence, and word count

  4. Tests error handling for missing/invalid inputs

Requirements

  • Node.js ≥ 18

  • Chromium (only for browser_ocr tool)

  • playwright-core (optional, only for browser_ocr)

License

MIT

Available Tools

2 tools
browser_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullPageNoCapture the full scrollable page instead of just the viewport. Default: false.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAbsolute path to a local image file (PNG, JPEG, etc.). Use this after taking a screenshot with Playwright MCP's browser_take_screenshot.
urlNoHTTP/HTTPS URL to download the image from.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 2 tool updatesv1.0.0
    • First observedbrowser_ocr
    • First observedocr_image

TDQS

A3.9/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityStale
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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