# ocular

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/xyun1996/ocular  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/ocular

## Description
Vision tools for coding agents: screenshots, OCR, UI diffs, errors, tables, and charts.

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "ocular": {
    "command": "npx",
    "args": ["-y","ocular"]
  }
}
```

## Documentation & README

# ocular

[![CI](https://github.com/xyun1996/ocular/actions/workflows/ci.yml/badge.svg)](https://github.com/xyun1996/ocular/actions/workflows/ci.yml)
[![npm](https://img.shields.io/npm/v/ocular-mcp.svg)](https://www.npmjs.com/package/ocular-mcp)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Node.js](https://img.shields.io/badge/Node.js-%3E%3D20-green.svg)](https://nodejs.org/)
[![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue.svg)](https://www.typescriptlang.org/)
[![MCP](https://img.shields.io/badge/MCP-server-purple.svg)](https://modelcontextprotocol.io/)

**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](https://github.com/xyun1996/ocular/blob/HEAD/docs/provider-compatibility.md).
- **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.

## How it works

```mermaid
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:

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

See [Architecture](https://github.com/xyun1996/ocular/blob/HEAD/docs/architecture.md) 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](https://github.com/xyun1996/ocular/blob/HEAD/docs/demo.md).

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`](https://www.npmjs.com/package/ocular-mcp). It installs the CLI command `ocular`.

Global install:

```bash
npm install -g ocular-mcp
```

Or run it without a global install:

```bash
npx -y ocular-mcp
```

To build from source instead:

```bash
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:

```env
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](https://github.com/xyun1996/ocular/blob/HEAD/docs/provider-compatibility.md) for the reproducible smoke-test procedure and verified configurations.

### 3. Run in stdio mode

With a global install:

```bash
ocular
```

Or:

```bash
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:

```bash
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:

```json
{
  "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](https://github.com/xyun1996/ocular/blob/HEAD/examples/claude-code.md) 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.

```json
{
  "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](https://github.com/xyun1996/ocular/blob/HEAD/examples/screenshot-debugging.md).

## 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:

```env
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:

```bash
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](https://github.com/xyun1996/ocular/blob/HEAD/docs/deployment.md).

## 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](https://github.com/xyun1996/ocular/blob/HEAD/.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](https://github.com/xyun1996/ocular/blob/HEAD/docs/provider-compatibility.md).

The repository also includes synthetic, redistributable visual fixtures for repeatable project-level measurements. See [Benchmark fixtures](https://github.com/xyun1996/ocular/blob/HEAD/bench/README.md). The benchmark measures execution, structural JSON output, and timing; it is not presented as a broad model-quality ranking.

## Development

```bash
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](https://github.com/xyun1996/ocular/blob/HEAD/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](https://github.com/xyun1996/ocular/blob/HEAD/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](https://github.com/xyun1996/ocular/blob/HEAD/docs/publishing.md).

`ocular` is published in the official MCP Registry as [`io.github.xyun1996/ocular`](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.xyun1996%2Focular). See [MCP Registry](https://github.com/xyun1996/ocular/blob/HEAD/docs/mcp-registry.md) for the live identity and release flow.

## License

MIT — see [LICENSE](https://github.com/xyun1996/ocular/blob/HEAD/LICENSE).

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

