Skip to main content
Glama

ocular

CI npm License: MIT Node.js TypeScript MCP

Vision for coding agents.

ocular is an MCP server that lets text-first coding agents analyze screenshots, UI mockups, terminal errors, documents, tables, and charts through OpenAI-compatible vision models.

It is designed for both local stdio use and remote HTTP deployments. For remote agents, image bytes can travel through a binary upload side channel while MCP tool calls carry only a lightweight file_id, avoiding large inline base64 payloads.

Project status: early-stage and actively evolving. Feedback, bug reports, integrations, and real-world usage reports are welcome.

Why ocular?

Coding agents are good at reading source code but often lose context when the important evidence is visual: a broken layout, a terminal screenshot, an error dialog, a chart, or a design reference.

ocular turns those visual inputs into structured data an agent can reason about.

  • Agent-oriented output — tools return structured JSON instead of prose-only descriptions.

  • 8 focused vision tools — general analysis, OCR, UI inspection, error diagnosis, UI comparison, table extraction, chart analysis, and upload orchestration.

  • OpenAI-compatible provider interface — point ocular at a compatible multimodal endpoint and model; reproducibly tested configurations are tracked in Provider compatibility.

  • Remote-friendly uploads — binary PUT /upload flow for large images with content-addressed file_id references.

  • Local or remote MCP — stdio for local clients, HTTP for hosted/private deployments.

  • Caching and persistence — deduplicated uploads plus result caching for repeated agent workflows.

Related MCP server: image-vision-mcp

How it works

flowchart LR
    A[Coding agent] -->|MCP tool call| B[ocular]
    C[Image / screenshot] -->|binary upload or base64| B
    B -->|OpenAI-compatible request| D[Vision model]
    D -->|multimodal response| B
    B -->|structured JSON| A

For remote HTTP deployments, the recommended path is:

image bytes -> PUT /upload -> file_id -> MCP vision tool -> structured result

See Architecture for the upload and caching model.

Demo

Want to see the full handoff from screenshot to coding-agent evidence? Read the end-to-end demo.

It walks through a remote image upload, a diagnose_error_screenshot call, the structured fields returned to the agent, and how that evidence is combined with repository context. Example model output is explicitly marked representative rather than presented as a benchmark.

Quick start

1. Install

The published npm package is ocular-mcp. It installs the CLI command ocular.

Global install:

npm install -g ocular-mcp

Or run it without a global install:

npx -y ocular-mcp

To build from source instead:

git clone https://github.com/xyun1996/ocular.git
cd ocular
npm install
npm run build

2. Configure a vision provider

ocular requires an OpenAI-compatible multimodal endpoint, API key, and model name:

OCULAR_BASE_URL=https://your-openai-compatible-endpoint.example/v1
OCULAR_API_KEY=your_api_key
OCULAR_MODEL=your_vision_model

For a local compatible endpoint, use that server's base URL and vision-capable model name. Compatibility depends on the endpoint/model combination; see Provider compatibility for the reproducible smoke-test procedure and verified configurations.

3. Run in stdio mode

With a global install:

ocular

Or:

npx -y ocular-mcp

The server communicates over stdio, so it may appear idle when started directly. In normal use an MCP client launches it and exchanges protocol messages over stdin/stdout.

4. Connect an MCP client

Claude Code example:

claude mcp add ocular \
  -e OCULAR_BASE_URL=https://your-openai-compatible-endpoint.example/v1 \
  -e OCULAR_MODEL=your_vision_model \
  -e OCULAR_API_KEY=your_api_key \
  -- npx -y ocular-mcp

Avoid putting long-lived API keys directly in shell history on shared machines. Use your client's environment/secret-management mechanism when available.

For a generic MCP client:

{
  "mcpServers": {
    "ocular": {
      "command": "npx",
      "args": ["-y", "ocular-mcp"],
      "env": {
        "OCULAR_BASE_URL": "https://your-openai-compatible-endpoint.example/v1",
        "OCULAR_MODEL": "your_vision_model",
        "OCULAR_API_KEY": "your_api_key"
      }
    }
  }
}

See Claude Code setup for a fuller walkthrough.

Example workflows

Diagnose a screenshot

Ask your coding agent to inspect an error screenshot and extract the exact message, likely cause, and next checks.

{
  "file_id": "e21ba723...",
  "task": "Extract the exact error and suggest the next debugging checks",
  "project_context": "Node.js TypeScript project"
}

Review a UI implementation

Use analyze_ui_screenshot to turn a screenshot into implementation-oriented observations about hierarchy, alignment, spacing, typography, contrast, and likely visual defects.

Compare expected vs actual UI

Use compare_ui_screenshots with a reference screenshot and an implementation screenshot to identify regressions and layout differences.

See Screenshot debugging example.

Tools

Tool

Purpose

analyze_image

General structured image analysis

extract_text_from_image

OCR with reading-order/layout awareness

analyze_ui_screenshot

UI hierarchy, spacing, typography and accessibility review

diagnose_error_screenshot

Extract and diagnose terminal/browser/build errors

compare_ui_screenshots

Compare reference and implementation screenshots

extract_table_from_image

Extract table data into structured output

analyze_chart_image

Analyze chart labels, values, trends and uncertainty

create_upload_session

Return upload endpoint and instructions for remote clients

Every vision tool accepts file_id; local workflows can also use inline image_base64 where appropriate.

Remote deployment

Set HTTP transport and authentication:

MCP_TRANSPORT=http
MCP_HTTP_HOST=127.0.0.1
MCP_HTTP_PORT=3000
MCP_HTTP_PATH=/mcp
MCP_AUTH_TOKEN=replace_with_a_long_random_token
MCP_AUTH_HEADER=authorization
MCP_AUTH_SCHEME=Bearer

Upload raw bytes:

curl --request PUT \
  --data-binary @/path/to/image.png \
  "https://your.host/upload" \
  -H "Content-Type: image/png" \
  -H "Authorization: Bearer your_mcp_auth_token"

The server returns a content-addressed file_id; pass that id to a vision tool instead of sending a large base64 string through MCP.

For reverse proxy and systemd examples, see Deployment.

Configuration

Common variables:

Variable

Purpose

OCULAR_BASE_URL

OpenAI-compatible API base URL

OCULAR_API_KEY

Provider API key

OCULAR_MODEL

Vision-capable model name

OCULAR_HEADERS

Optional custom provider headers as JSON

OCULAR_TEMPERATURE

Generation temperature

OCULAR_MAX_TOKENS

Maximum generated tokens

OCULAR_TIMEOUT_MS

Provider timeout

OCULAR_MAX_IMAGE_MB

Maximum image size

OCULAR_CACHE_ENABLED

Enable result cache

OCULAR_CACHE_DIR

Cache directory

OCULAR_UPLOADS_DIR

Persistent upload directory

OCULAR_UPLOAD_URL_BASE

Public base URL used in upload instructions

See .env.example for the full configuration surface.

Verification and benchmarks

Provider compatibility claims are based on real endpoint/model smoke tests, not on API naming alone. See Provider compatibility.

The repository also includes synthetic, redistributable visual fixtures for repeatable project-level measurements. See Benchmark fixtures. The benchmark measures execution, structural JSON output, and timing; it is not presented as a broad model-quality ranking.

Development

npm install
npm run build
npm test
npm run check
npm run dev

The repository includes tests for authentication, caching, image handling, MCP server behavior, provider payloads, tool execution, npm packaging, Registry metadata consistency, and release smoke checks.

Security and privacy

Do not commit provider API keys or MCP authentication tokens. Public HTTP deployments should sit behind HTTPS and a reverse proxy; the Node process should generally bind to a private interface.

See SECURITY.md for vulnerability reporting guidance.

Roadmap

Near-term areas where contributions are useful:

  • Real-world MCP client integration and usage reports

  • Provider/model compatibility verification

  • Published fixture-based benchmark results from real endpoints

  • Community-driven tool and prompt improvements

If you are using ocular in a real workflow, open a Usage report issue describing the client, provider/model, and use case. Public reports are useful even when nothing is broken and help keep compatibility/adoption claims grounded in real usage.

Contributing

Contributions are welcome. Start with CONTRIBUTING.md, run npm run check before opening a PR, and include reproduction details for behavior changes.

Release and registry

The npm package is ocular-mcp; the installed CLI is ocular. Release automation uses npm Trusted Publishing rather than a long-lived repository token. See Publishing.

ocular is published in the official MCP Registry as io.github.xyun1996/ocular. See MCP Registry for the live identity and release flow.

License

MIT — see LICENSE.

If ocular is useful in your agent workflow, a GitHub star helps other developers discover the project.

Available Tools

8 tools
analyze_chart_imageB

Analyze a chart image and return labels, trends, approximate values, and limitations.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
file_idNofile_id returned by PUT /upload. Preferred over image_base64 to avoid corruption of large base64 in the tool-call path. Persistent across restarts, content-deduplicated.
mime_typeNoMIME type. Required with image_base64; ignored (uses stored value) with file_id.image/png
chart_hintNo
image_base64NoRaw base64-encoded image bytes, without a data: URL prefix. Prefer file_id for large images.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, and description does not state that the operation is read-only, nor any side effects or limitations beyond noting approximate values; the burden is on the description and it falls short.

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?

Single sentence, front-loaded with the action, no filler words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite a 5-parameter tool with no output schema or annotations, the description is just one vague sentence; it fails to explain the role of the task parameter, the two image input modes, or the relationship to sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers file_id, mime_type, and image_base64 with descriptions, but the task and chart_hint parameters are undocumented; description adds no parameter semantics beyond what schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'analyze' with the resource 'chart image' and enumerates concrete outputs (labels, trends, approximate values, limitations), making it clearly distinct from generic image analysis or text extraction siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to choose this tool over siblings like analyze_image or extract_text_from_image; missing when-to-use or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_imageB

Analyze a general image and return structured JSON for a coding agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNoOptional analysis task.
file_idNofile_id returned by PUT /upload. Preferred over image_base64 to avoid corruption of large base64 in the tool-call path. Persistent across restarts, content-deduplicated.
mime_typeNoMIME type. Required with image_base64; ignored (uses stored value) with file_id.image/png
image_base64NoRaw base64-encoded image bytes, without a data: URL prefix. Prefer file_id for large images.
output_formatNojson

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only promises 'structured JSON', which conflicts with the output_format parameter allowing markdown or text, and it does not mention whether the operation is read-only, any auth needs, or how the image is supplied.

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?

One sentence, front-loaded with the core purpose, and no filler. It is an appropriate size for the limited information provided.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With five optional parameters, no output schema, no annotations, and a family of specialized sibling tools, the description is too thin. It leaves unclear when to prefer this tool over analyze_ui_screenshot or analyze_chart_image, what the JSON structure looks like, and how output_format changes returned data.

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 description coverage is 80%, and the parameter descriptions already explain file_id advantages, MIME handling, and output_format choices. The tool description adds no extra parameter semantics, so the baseline score of 3 is appropriate.

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?

States 'Analyze a general image' with a specific verb and resource, and the word 'general' sets it apart from specialized siblings like extract_text_from_image or analyze_chart_image. However, it does not specify what kinds of analysis are performed or what the returned structured JSON contains.

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 phrase 'general image' implies broad use compared to specialized alternatives, providing implicit guidance. But there is no explicit when-to-use/when-not-to-use, no named alternative tools, and no mention of trade-offs like file_id versus image_base64 beyond the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_ui_screenshotB

Analyze a webpage, app, UI, or design mockup screenshot for frontend implementation work.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
file_idNofile_id returned by PUT /upload. Preferred over image_base64 to avoid corruption of large base64 in the tool-call path. Persistent across restarts, content-deduplicated.
mime_typeNoMIME type. Required with image_base64; ignored (uses stored value) with file_id.image/png
page_hintNo
image_base64NoRaw base64-encoded image bytes, without a data: URL prefix. Prefer file_id for large images.
framework_hintNo

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only restates the purpose and gives no information about output format, return values, or side effects. Even though 'analyze' implies a read-only operation, the absence of any safety or behavior details leaves the agent uninformed.

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 a single sentence, front-loaded with the key action and object. Every word earns its place with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema and annotations, the description should provide more context about what the tool returns and how to invoke it. It offers only a one-line purpose and is far from complete for a tool with six parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter information beyond the schema. Schema coverage is 50%, leaving 'task', 'page_hint', and 'framework_hint' entirely undocumented. The description fails to compensate for these gaps, especially the critical 'task' parameter.

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 analyzes UI/design mockup screenshots for frontend implementation work, using a specific verb and resource. It distinguishes from sibling tools by focusing on frontend implementation, though it could more explicitly contrast with generic 'analyze_image'.

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 implies usage for frontend implementation but does not provide explicit when-to-use or when-not-to-use guidance. No alternatives are mentioned, even though siblings like 'analyze_image' exist and could overlap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_ui_screenshotsB

Compare two UI screenshots and return implementation-useful visual differences.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
imagesYesTwo base64 UI screenshots. First is reference, second is actual.
page_hintNo
framework_hintNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must fully disclose behavior; however, it only states that visual differences are returned without addressing side effects, limitations, output structure, or error conditions, leaving significant behavioral ambiguity.

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?

A single 11-word sentence with no filler. It is front-loaded and every word adds meaning, though it could be more explanatory without violating conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, no output schema, and no annotations, the description is too sparse. It does not explain the return structure, expected input formats (beyond schema), or use cases, making it under-specified for an agent to use reliably.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25% with task, page_hint, and framework_hint undescribed. The description itself adds no parameter semantics, and while the images property has a schema description, the tool description fails to explain the other three parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Compare' with the resource 'two UI screenshots' and specifies the output as 'implementation-useful visual differences,' clearly distinguishing it from sibling single-image analysis tools like analyze_ui_screenshot.

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 implies usage when comparing two screenshots but provides no explicit guidance on when to prefer this over analyze_ui_screenshot or diagnose_error_screenshot, and no exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_upload_sessionA

Returns upload instructions for the binary side channel (use this to analyze LOCAL image files without base64 corruption). Before uploading, verify the local file exists and is non-empty with Bash (e.g. ls -la <path> or test -f <path> && stat -c %s <path>). Then PUT the raw bytes to the returned upload_url with curl --data-binary (NOT base64); the response gives a file_id to pass to any vision tool. Stateless -- call once to learn the endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
mime_typeNoMIME type of the image you will upload. Used in the curl Content-Type header.image/png

TDQS

A4.7/5.0
Behavior5/5

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 discloses the stateless nature ('Stateless -- call once'), the expected HTTP interaction, and the requirement to verify the local file before upload. It also clarifies the return payload includes an upload_url and that the response yields a file_id.

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 under six sentences and front-loaded with the purpose. Each sentence adds distinct value: purpose, prerequisite verification, upload method, and statelessness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema tool, the description fully explains the workflow and what the caller will receive (upload_url, then file_id). It is self-contained for the intended local-file upload scenario.

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%; the single mime_type parameter already has a description and enum. The tool description adds no additional parameter semantics but also doesn't need to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'returns upload instructions for the binary side channel' and explicitly positions it for analyzing local image files while avoiding base64 corruption. This distinguishes it from sibling vision-analysis tools, which analyze already-uploaded images.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit when-to-use guidance ('use this to analyze LOCAL image files') and detailed prerequisites and steps: verify the file with Bash, then PUT raw bytes with curl --data-binary (NOT base64), and pass the resulting file_id to any vision tool. It also mentions the tool is stateless and can be called once.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diagnose_error_screenshotA

Analyze error, terminal, console, browser, or build failure screenshots.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
file_idNofile_id returned by PUT /upload. Preferred over image_base64 to avoid corruption of large base64 in the tool-call path. Persistent across restarts, content-deduplicated.
mime_typeNoMIME type. Required with image_base64; ignored (uses stored value) with file_id.image/png
image_base64NoRaw base64-encoded image bytes, without a data: URL prefix. Prefer file_id for large images.
project_contextNo

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Analyze,' which implies a read-only operation, but it does not describe return format, side effects, permissions, or limitations. This is minimal disclosure for a tool with no annotation support.

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 a single, direct sentence that states the tool's purpose without any filler or repetition. It is front-loaded with the verb and resource, making it highly efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters and no output schema, the one-sentence description is insufficient. It does not explain what analysis is performed, how file_id relates to image_base64, or what the response contains. The description is complete for a simple tool but inadequate for this multi-parameter, no-output-schema tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no meaning beyond the input schema. The schema documents 3 of 5 parameters (60%), leaving 'task' and 'project_context' entirely undocumented in both the description and schema. The description does not compensate for these gaps or clarify how the parameters relate to the analysis task.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Analyze' with a specific resource: 'error, terminal, console, browser, or build failure screenshots.' This clearly scopes the tool and differentiates it from sibling tools like analyze_ui_screenshot or analyze_chart_image, which target different screenshot categories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by enumerating the screenshot types this tool handles (error, terminal, console, browser, build failure), which effectively tells the agent when to use it. However, it does not explicitly state exclusions or name alternatives, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_table_from_imageC

Extract visible table data from an image as structured JSON, Markdown, or CSV-oriented output.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
file_idNofile_id returned by PUT /upload. Preferred over image_base64 to avoid corruption of large base64 in the tool-call path. Persistent across restarts, content-deduplicated.
mime_typeNoMIME type. Required with image_base64; ignored (uses stored value) with file_id.image/png
image_base64NoRaw base64-encoded image bytes, without a data: URL prefix. Prefer file_id for large images.
output_formatNojson

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses only that the tool extracts visible table data into structured formats, but it omits important behavioral traits such as limitations on table complexity, return value structure, or how the tool handles corrupt/malformed images. The qualifier 'visible' hints at a constraint (ignoring hidden data), which is useful, but overall transparency is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no fluff, which is syntactically concise. However, given the tool's five parameters and the need to disambiguate from siblings, the brevity leaves important gaps. Still, it earns a solid score for being clear and direct.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With five parameters, no annotations, and no output schema, the description needs to carry substantial context. It only states the core extraction behavior and output formats, failing to cover the meaning of the 'task' parameter, the file upload workflow, return data shape, or any limitations. The tool is simple enough that minimal context might suffice, but the missing task semantics and lack of alternative guidance make it incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 60%, so the description must compensate for undocumented parameters. The description mentions output formats, matching the output_format enum, but it does not explain the critical 'task' parameter at all, nor does it clarify the trade-offs between file_id and image_base64 beyond what is already in the schema. The free-form 'task' parameter remains entirely ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Extract') and resource ('visible table data from an image'), clearly distinguishing this tool from siblings like extract_text_from_image (which extracts raw text) and analyze_chart_image (which analyzes chart data). It also names the three output formats, making the tool's purpose concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as extract_text_from_image or analyze_chart_image. It does not state prerequisites (e.g., uploading the image first via create_upload_session) or explicitly exclude non-table images, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_text_from_imageB

Extract OCR text from screenshots, documents, tables, terminal output, or code images.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idNofile_id returned by PUT /upload. Preferred over image_base64 to avoid corruption of large base64 in the tool-call path. Persistent across restarts, content-deduplicated.
mime_typeNoMIME type. Required with image_base64; ignored (uses stored value) with file_id.image/png
image_base64NoRaw base64-encoded image bytes, without a data: URL prefix. Prefer file_id for large images.
language_hintNo
output_formatNojson
preserve_layoutNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action and omits important context like output format, layout preservation behavior, input method preferences, or limitations. This is insufficient for a tool with no annotation support.

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 a single front-loaded sentence with no fluff. It efficiently communicates the core purpose and supported input types.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should explain expected outputs and behavioral nuances. It does not, leaving significant gaps for a tool with six parameters and two distinct input methods.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, and the description adds no parameter guidance. It doesn't explain language_hint, output_format, preserve_layout, or the decision between file_id and image_base64, which are key to correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Extract OCR text') and lists concrete input types (screenshots, documents, tables, terminal output, code images). It distinguishes itself from siblings like extract_table_from_image, which targets tabular data specifically, and analyze_image, which implies broader analysis.

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 implies use cases by enumerating various image types, but it does not explicitly state when to use this tool over alternatives. No mention of exclusions or sibling tools, such as directing table extraction to extract_table_from_image.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.7/5.0
Disambiguation4/5

Most tools have clear, distinct purposes (OCR, UI analysis, chart analysis, etc.), but analyze_image serves as a general fallback and could overlap with specialized tools like analyze_ui_screenshot or analyze_chart_image if an agent picks poorly. The descriptions are specific enough to guide selection in most cases.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case: analyze_image, extract_text_from_image, compare_ui_screenshots, etc. This consistency makes it easy to predict what a tool does based on its name.

Tool Count5/5

With 8 tools, the set is well-scoped for an image analysis server. Each tool serves a distinct purpose, and the count is neither too sparse nor overwhelming.

Completeness5/5

The tool set covers a broad range of image analysis needs for coding agents: general analysis, OCR, UI analysis, error screenshots, table extraction, chart analysis, and image comparison. The inclusion of an upload session tool addresses local file handling, filling the only potential gap.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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

  • A
    license
    Not graded
    quality
    A
    maintenance
    Local vision-capable MCP server that lets AI agents describe screenshots, UI, charts, and photos via vision and OCR tools, with support for multiple providers and automatic fallback.
    6
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides vision understanding capabilities such as image analysis, OCR, object localization, and video frame analysis, plus optional image generation and editing, to coding agents via OpenAI-compatible multimodal models. Runs as a local MCP server with HTTP and stdio transports, configurable for clients like Codex, Claude Code, Kimi, and Cursor.
    3
    187
    MIT

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/xyun1996/ocular'

If you have feedback or need assistance with the MCP directory API, please join our Discord server