Skip to main content
Glama
0xnurrabby

mcp-omni-context

by 0xnurrabby

mcp-omni-context

Give any AI chat real vision.

Read images, files, and zip archives in any language, for any AI model. Works everywhere MCP works. No Python, no servers. OCR runs locally by default.

npm License Node stars


โœจ Features

Feature

What it does

๐Ÿ–ผ๏ธ

Screenshot reading

Reads any screenshot, at any angle, in any language

๐Ÿค–

Optional AI vision

Add a key in .env โ†’ images read by GPT-4o-mini or Gemini (โ‰ˆ $0.001/image)

๐Ÿ”

Auto fallback

If the AI API fails (or no key set), it silently uses local OCR instead

๐Ÿงฒ

Auto-detection

Pasted/dropped screenshots are found automatically in the temp/clipboard folders โ€” no copying files anywhere

๐Ÿ“„

File & log reader

Code files and error traces, line by line

๐Ÿ“ฆ

Zip explorer

Visual file tree plus every code file inside

๐ŸŒ

Any language

English, Bengali, Hindi, Arabic, Chinese and more

๐Ÿช„

Zero setup for users

One command installs it for any AI tool

๐Ÿ”’

Privacy first

With no API key, OCR runs 100% locally


Related MCP server: mcp-vision

๐Ÿš€ Download & Run

Everything lives behind two tools: read_context_data and find_images.

Step 1 ยท Check you have Node.js (20.17+)

node -v

Step 2 ยท No command? Just ask your AI assistant

"please setup mcp-omni-context"

Step 3 ยท Or run it yourself

npx -y mcp-omni-context setup

Then restart your AI tool. Done. That's the whole setup.

It configures opencode, Codex, Claude Desktop, Cursor, Windsurf, Cline, Roo, and VS Code, backs up your existing configs, and creates an uploads folder at ~/.mcp-omni-context/uploads.

๐Ÿ’ก Pasting a screenshot? Send it straight to your assistant. If the path is not obvious, the assistant calls find_images to locate the freshest images in your temp, clipboard, Downloads, Desktop, Pictures, and uploads folders. You never have to save or copy a file manually.


โš™๏ธ Optional: better accuracy with AI vision (~$0.001 / image)

By default every image is read by local OCR (tesseract.js) โ€” free and private.

For noticeably better UI/error-screen reading, add one API key to a file named .env in your project folder (the same folder you run the AI tool from).

  1. Create an API key at https://platform.openai.com/api-keys

  2. Create a .env file in your project and paste:

OPENAI_API_KEY=sk-your-key-here

That's it. Images are resized to max 1024px with sharp, compressed to JPEG, and sent with detail: "low" โ€” keeping the cost at roughly $0.001 per image with GPT-4o-mini.

  1. Get a free key at https://aistudio.google.com/app/apikey

  2. Create a .env file in your project and paste:

GEMINI_API_KEY=your-gemini-key

Keys are read from (first match wins):

  1. Your environment variables (e.g. set OPENAI_API_KEY=... on Windows, export OPENAI_API_KEY=... on macOS/Linux), or

  2. a .env file in the current project folder, or

  3. a .env file at ~/.mcp-omni-context/.env.

Existing environment variables are always respected over .env values. New keys take effect immediately; you only need to restart the AI tool.

๐Ÿ›ก๏ธ Fail-safe: if the vision API is down, returns an error, or the key is missing, the tool automatically falls back to local OCR โ€” you always get a result, never a crash.


๐Ÿ› ๏ธ Tools

read_context_data

Reads images, files, logs, and zip archives and returns a strictly-ordered, LLM-ready text dump. Accepts:

  • a path: {"items": ["C:/Users/you/Desktop/shot.png"]}

  • many paths in one call: {"items": ["a.png", "b.png", "error.log", "src/"]}

  • a bare file name (auto-resolved from the system temp/clipboard folders)

  • an in-memory buffer: {"items": [{"name": "a.png", "base64": "..."}]}

Each image is processed sequentially and wrapped in a clear delimiter:

--- [Image Index 1] Visual Analysis ---
[Source: C:/Users/you/Desktop/shot.png]
[Vision AI ยท gpt-4o-mini ยท detail=low ยท jpeg 181.2 KB ยท raster 2560x1440]
<the analysis / transcribed text>

--- [Image Index 2] Visual Analysis ---
...

find_images

Locates the freshest screenshots across your temp, clipboard, Downloads, Desktop, Pictures, Telegram Desktop, and uploads folders โ€” newest first.

find_images                 โ†’ 10 newest images
find_images maxResults: 50  โ†’ up to 50
find_images query: "bug"    โ†’ only files whose name contains "bug"
find_images sinceMinutes: 10โ†’ only images from the last 10 minutes

๐Ÿ“ฆ Updating

Updates are automatic. Every client runs this via npx -y, so the newest version loads on the next start. Zero clicks, zero reinstall.

Just tell your assistant:

"update mcp-omni-context"

Or run the one-command update yourself:

npx -y mcp-omni-context update

It fetches the latest version and refreshes your configs and rules.


โš™๏ธ Setup (manual)

The installer writes all of this for you. For the curious, here is how each client is configured.

{
  "mcp": {
    "omni-context": {
      "type": "local",
      "command": ["npx", "-y", "mcp-omni-context"],
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "omni-context": {
      "command": "npx",
      "args": ["-y", "mcp-omni-context"]
    }
  }
}
{
  "mcpServers": {
    "omni-context": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-omni-context"]
    }
  }
}
[mcp_servers.omni-context]
command = "npx"
args = ["-y", "mcp-omni-context"]

โš™๏ธ Environment variables

All of these can go in a .env file or your real environment.

Variable

Default

What it does

OPENAI_API_KEY

โ€”

Enables GPT-4o-mini vision (resized to 1024px, detail: "low", ~$0.001/img)

OPENAI_MODEL

gpt-4o-mini

Override the OpenAI vision model

OPENAI_BASE_URL

https://api.openai.com/v1

Use any OpenAI-compatible endpoint

GEMINI_API_KEY

โ€”

Enables Google Gemini vision instead

GEMINI_MODEL

gemini-2.0-flash

Override the Gemini model

MCP_OMNI_VISION

auto

auto ยท openai ยท gemini ยท tesseract (force local OCR)

MCP_OMNI_ENV_FILE

โ€”

Path to a specific .env file to read

MCP_OMNI_VERBOSE

off

1 to log OCR/vision progress to stderr

MCP_OMNI_PSM

3

tesseract page-segmentation mode (0โ€“13)


๐Ÿ” How it reads

Your assistant reads context through read_context_data. It accepts any number of images, files, logs, or zip archives in order, and returns a strictly ordered, LLM-ready text dump.

OCR defaults to English + Bengali. For other languages, just tell your assistant the language (Hindi, Arabic, Chinese, Spanish, French, German, Russian, Japanese, Korean, Urdu, and many more). The language data downloads itself, or pre-download once:

npx -y mcp-omni-context --warmup eng,ben,hin,spa,fra,urd
src/
โ””โ”€โ”€ index.ts          # the entire server (tool + vision + zip tree + setup + update)
dist/                 # compiled output (published)
README.md
package.json

๐Ÿ” Safety

Guard

What it means

๐Ÿšซ

Sensitive files

.env, id_rsa, *.pem, secrets.*, tokens are skipped

๐Ÿ“ฆ

Binary & heavy

ignore node_modules, media, and oversized blobs

๐Ÿ›ก๏ธ

Zip-slip

blocks .. and absolute paths inside archives

๐Ÿงผ

Auto-cleanup

temp files are purged after every run

๐Ÿ’ธ

Low cost

AI vision resizes to 1024px and sends detail: "low" (~$0.001/img)


๐Ÿ› ๏ธ CLI reference

mcp-omni-context                      start the MCP server (stdio)
mcp-omni-context setup                configure all supported clients
mcp-omni-context update               fetch latest + refresh configs and rules
mcp-omni-context --check-update       check the latest published version
mcp-omni-context --warmup [langs]     pre-download OCR language data
mcp-omni-context --selftest           check OCR works on your machine
mcp-omni-context --help               show help
mcp-omni-context --version            show version

MIT License ยท built by @0xnurrabby

Available Tools

2 tools
find_imagesfind_images - locate recent screenshots & attachmentsA
Read-onlyIdempotent

Scans the system temp, clipboard, Downloads, Desktop, Pictures, Telegram Desktop and the ~/.mcp-omni-context/uploads folders for the most recent image files and returns their paths, newest first. Use this when the user pastes or drops a screenshot with no obvious file path, then pass the returned path(s) to read_context_data. maxResults limits how many are returned (default 10). query filters by file name (e.g. a fragment). sinceMinutes narrows the search to the last N minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
maxResultsNo
sinceMinutesNo

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnly and idempotent. The description adds behavioral context beyond annotations: the specific folders searched (temp, clipboard, Downloads, etc.), newest-first ordering, and how parameters affect results. It doesn't describe return format beyond 'paths', but annotations cover safety profile.

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?

Three sentences: first states purpose and scope, second gives usage context and sibling link, third explains all parameters. No filler, well-structured, front-loaded.

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 read-only search tool with 3 optional params and no output schema, the description covers purpose, usage, parameter behavior, and the relationship to read_context_data. 'Returns their paths, newest first' sufficiently indicates the return value.

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

Parameters5/5

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

Schema coverage is 0% (no property descriptions), so the description carries the full burden. It explains maxResults with default, query as filename filter, and sinceMinutes as time window. This fully compensates for the sparse schema and gives each parameter meaningful semantics.

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 scans multiple specific folders for recent image files and returns their paths newest first. It names the sibling read_context_data and positions this tool as the finder, distinguishing it well.

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?

Explicitly says to use this when the user pastes/drops a screenshot without a file path, and instructs passing returned paths to read_context_data. This provides a clear when-to-use context and points to the next step/alternative.

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

read_context_dataread_context_data - vision & file context dumperA
Read-onlyIdempotent

Extracts readable code/text from images, single files, or zip archives and returns a strictly-ordered, LLM-ready text dump with a file tree for archives. Images are analyzed sequentially; each one is wrapped in --- [Image Index X] Visual Analysis ---. When OPENAI_API_KEY (GPT-4o-mini) or GEMINI_API_KEY is set, images are resized with sharp to max 1024px and sent with detail: "low" (costs ~$0.001/image); on any API failure it silently falls back to local tesseract.js OCR. Pass an ordered items array; each entry is a local path string (file, directory, or .zip), a bare image name/filename, or an in-memory { name, base64 } object. If a referenced image path does not exist on disk, the freshest images from the system temp/clipboard/upload folders are auto-detected, so chat-attached screenshots work out of the box. Single files are line-truncated with a notice; archives get a directory Tree plus every code/text entry. Non-code folders (node_modules, .git, dist, build, .next, coverage, vendor, bin, obj), binary/media files, oversized entries, and sensitive files (.env, id_rsa, .pem, secrets., tokens) are skipped automatically. Output is capped at maxOutputChars characters; a summary footer reports truncation, errors, skipped counts, and estimated token usage. items ordering is always preserved.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
skipBinaryNo
concurrencyNo
ocrLanguagesNoeng+ben
fileLineLimitNo
skipSensitiveNo
maxOutputCharsNo
includeFileTreeNo
ocrArchiveImagesNo
preProcessImagesNo

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses critical behaviors: fallback from API to local OCR, image resizing with sharp, truncation with a notice, automatic skipping of sensitive files, and a summary footer with error counts. This is rich behavioral context that annotations alone do not provide.

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 dense paragraph but every sentence adds value: input types, fallback behavior, filtering rules, output format, and limits. It is appropriately sized for the tool's complexity, though a more structured layout would improve scannability; still, it is not bloated.

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?

Given the tool's complexity (10 params, no output schema), the description provides a complete operational picture: input handling, ordering preservation, automated exclusions, truncation, error reporting, and token usage estimation. It even includes example formatting for image analyses, making it sufficient for an agent to invoke correctly.

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?

With schema description coverage at 0%, the description compensates by explaining the primary `items` parameter (accepts paths, bare names, or in-memory objects), and indirectly addresses others like `maxOutputChars` and `includeFileTree` ('archives get a directory Tree', 'Output is capped at maxOutputChars'). It does not cover all 10 parameters in detail, but enough for effective use.

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 starts with a specific verb and resource: 'Extracts readable code/text from images, single files, or zip archives' and clearly defines the output as 'a strictly-ordered, LLM-ready text dump with a file tree for archives.' This distinguishes it from the sibling tool find_images by focusing on content extraction and reading rather than just locating images.

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 usage context, such as 'Pass an ordered items array' and mentions auto-detection of images from temp/clipboard folders for chat-attached screenshots. However, it does not explicitly state when to avoid this tool or compare it to alternatives like find_images, so it earns a 4 rather than 5.

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.

  1. 2 tool updatesv1.12.0
    • First observedfind_images
    • First observedread_context_data

TDQS

A4.7/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: read_context_data extracts content from files/images/archives, while find_images locates image paths. They complement each other without overlapping, so an agent can easily choose the right tool.

Naming Consistency5/5

Both tool names follow a consistent verb_noun snake_case pattern: read_context_data and find_images. This predictability makes the tool set easy to navigate.

Tool Count4/5

With only 2 tools, the count is slightly below the typical 3-15 range, but it is appropriate for the narrowly scoped purpose of context extraction. Each tool is essential and earns its place.

Completeness5/5

The tool surface covers the core workflow: reading content from images, files, and archives, plus finding images when no path is provided. There are no significant gaps for the stated domain; minor omissions like other archive formats are acceptable.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers