Atlas / MCP servers / ellismorrow / OmniClip RAG

OmniClip RAGCAUTION

mcp/ellismorrow/omniclip-rag-1

Caelune (凯露恩) — Local-first retrieval for private Markdown, PDF, and Tika documents, with a Windows desktop app and read-only MCP server.|本地优先的私人知识检索工具。

Verdict
CAUTION
Grade
C
Trust score
75 /100
Exposed tools
—
Transport
stdio
License
MIT
Stars
45
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

A local-first Windows desktop app and read-only MCP server for searching private Markdown, PDF, and Tika-backed knowledge bases.

[](https://github.com/EllisMorrow/Caelune/releases/latest) [](https://github.com/EllisMorrow/Caelune/releases/latest) [](#privacy-boundary) [](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.EllisMorrow/caelune-mcp) [](https://github.com/EllisMorrow/Caelune/releases) [](LICENSE)

Download Windows app · 中文说明 · Website · User Wiki · MCP Setup

What Caelune does

Caelune builds searchable indexes from knowledge you already keep on your own computer. It combines exact-text retrieval, structural signals, semantic vector search, optional reranking, and source-aware context assembly.

The desktop app manages data roots, Runtime components, models, knowledge-base builds, live watch, queries, and result review. The optional MCP server exposes the same retrieval core to MCP-capable AI clients through two read-only tools.

Read from source at commit 86e1b38b7924OBSERVED · 2026-10-08
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add caelune -- uvx caelune
claude-desktop
{
  "mcpServers": {
    "caelune": {
      "command": "uvx",
      "args": [
        "caelune"
      ]
    }
  }
}
03

Trust audit

CAUTIONgrade C · trust 75/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (7 observation(s))
Shell
declared (3 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (17)

MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
omniclip_rag/vector_index.py:2301
importlib.import_module(module_name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
runtime_support/install_runtime_driver.py:683
module = importlib.import_module(str(probe['import_name']))
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
runtime_support/install_runtime_driver.py:693
submodule = importlib.import_module(str(submodule_name))
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
omniclip_rag/extensions/runtimes/tika_runtime.py:169
url = f'http://127.0.0.1:{port}{HEALTHCHECK_PATH}'
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
omniclip_rag/extensions/runtimes/tika_runtime.py:374
url = f'http://127.0.0.1:{port}{request_path}'
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
omniclip_rag/config.py:267
digest = hashlib.sha1(normalized.lower().encode("utf-8")).hexdigest()[:10]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
omniclip_rag/extensions/parsers/pdf.py:93
content_hash=hashlib.sha1(raw_bytes).hexdigest(),
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
omniclip_rag/extensions/parsers/pdf.py:100
digest = hashlib.sha1(f'{source_path}|{page_no}|{position}|{text}'.encode('utf-8', errors='ignore')).hexdigest()[:20]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
omniclip_rag/extensions/parsers/tika.py:97
content_hash = hashlib.sha1(hash_payload.encode('utf-8', errors='ignore')).hexdigest()
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
omniclip_rag/parser.py:36
file_hash = hashlib.sha1(text.encode("utf-8")).hexdigest()
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_tika_extension.py:193
url='http://127.0.0.1:9998/tika',
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_tika_runtime.py:131
with patch('omniclip_rag.extensions.runtimes.tika_runtime.urllib.request.urlopen', side_effect=urllib.error.HTTPError('http://127.0.0.1:9998/tika', 405, 'Method Not Allowed', {}, None)):
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
requirements.txt
lancedb, onnxruntime, sentence-transformers, transformers, huggingface-hub, modelscope, pyinstaller, pypdf
Why it matters. 9 requirement(s) not pinned with ==
Fix. pin exact versions
LOWInventory / provenance · mcp.no_tools_extracted · CWE-1104
server.json
Why it matters. the tool list is enumerated at runtime by tools/list, not declared in source
Fix. the page says so rather than showing an empty table
INFOInventory / provenance · inv.oversize · CWE-1104
docs/assets/caelune-local-search-flow.png
docs/assets/caelune-local-search-flow.png
Why it matters. 1169115 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
docs/assets/social-preview.png
docs/assets/social-preview.png
Why it matters. 1201622 bytes not read

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha 86e1b38b7924full audit observations/trust-audit/mcp-server/ellismorrow__omniclip-rag-1.json · Report an issue / request a re-scan
04

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-0886e1b38b7924CAUTIONC75first audit
05

Questions

What is the OmniClip RAG MCP server?

Caelune (凯露恩) — Local-first retrieval for private Markdown, PDF, and Tika documents, with a Windows desktop app and read-only MCP server.|本地优先的私人知识检索工具。

Is OmniClip RAG safe to connect to an agent?

With care. The audit graded it C (75/100) and found 17 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does OmniClip RAG need?

No credential environment variables were found in its source, so it appears to need none.

How does OmniClip RAG run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as caelune.

How current is this page?

The grade is for one exact copy of the source (86e1b38b7924), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement