Hybrid search over your Obsidian vault – CLI and MCP server
Drift inferred · capture-to-capture
- HIGH code analysis flagged dynamic code execution in flowing-abyss/obsidian-hybrid-search
- HIGH code analysis flagged dynamic code execution in flowing-abyss/obsidian-hybrid-search
transport stdio · streamable-http · http counts 4 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
read
Fetch one or more notes by vault-relative path. Returns full content, title, aliases, tags, links, and backlinks. On path miss: returns found: false with top-3 fuzzy suggestions. Accepts a single path
-
reindex
Reindex the vault or a specific file
-
search
Search the vault. Use query for text search (mode: hybrid/semantic/fulltext/title) or path for semantic similarity. Combine path with related: true for graph traversal. Pass queries[] for multi-query
-
status
Show total notes, indexed count, last indexed time
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 8dee1a2 · analyzer v17 · 2d ago
skills & prompt files 1
evidence-backed
findings quoted directly from the published source artifact — not inferred
filesystem 17
- fs flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/compare.ts :8
import fs from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/evaluate-qmd.ts :18
import fs from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/evaluate.ts :11
import fs from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/prepare-evergreen-notes.ts :1
import fs from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/prepare-longmemeval.ts :1
import fs, { createWriteStream } from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/prepare-obsidian-help.ts :2
import fs from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/quality.ts :1
import { readFileSync } from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/speed-profile.ts :10
import fs from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/src/auto-heal.ts :11
} from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/src/cli.ts :8
import { existsSync, readFileSync } from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/src/db.ts :2
import { statSync, unlinkSync } from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/src/indexer.ts :3
import { readdirSync, statSync } from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/src/mcp-runtime.ts :3
import { existsSync, readFileSync } from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/src/mcp-supervisor.ts :10
} from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/src/native-preflight.ts :1
import { appendFileSync, mkdirSync, writeFileSync } from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/src/preflight.ts :1
import { writeSync } from 'node:fs'; - fs flowing-abyss-obsidian-hybrid-search-8dee1a2/src/reranker.ts :1
import fs from 'node:fs';
shell / exec 5
- shell flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/evaluate-qmd.ts :17
import { spawnSync } from 'node:child_process'; - shell flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/prepare-obsidian-help.ts :1
import { spawnSync } from 'node:child_process'; - shell flowing-abyss-obsidian-hybrid-search-8dee1a2/src/auto-heal.ts :1
import { spawn } from 'node:child_process'; - shell flowing-abyss-obsidian-hybrid-search-8dee1a2/src/cli.ts :7
import { exec } from 'node:child_process'; - shell flowing-abyss-obsidian-hybrid-search-8dee1a2/src/mcp-supervisor.ts :1
import { spawn } from 'node:child_process';
network 7
- net flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/prepare-evergreen-notes.ts :349
const response = await fetch(`${BASE_URL}/${encodeURIComponent(slug)}`, { - net flowing-abyss-obsidian-hybrid-search-8dee1a2/eval/prepare-longmemeval.ts :2
import { get as httpsGet } from 'node:https'; - net flowing-abyss-obsidian-hybrid-search-8dee1a2/src/cli.ts :411
const res = await fetch('https://registry.npmjs.org/obsidian-hybrid-search/latest', { signal }); - net flowing-abyss-obsidian-hybrid-search-8dee1a2/src/embedder.ts :143
const res = await fetch(`${config.apiBaseUrl}/models/${config.apiModel}`, { headers }); - net flowing-abyss-obsidian-hybrid-search-8dee1a2/src/mcp-http-server.ts :8
} from 'node:http'; - net flowing-abyss-obsidian-hybrid-search-8dee1a2/src/mcp-runtime.ts :68
const res = await fetch('https://registry.npmjs.org/obsidian-hybrid-search/latest', { signal }); - net flowing-abyss-obsidian-hybrid-search-8dee1a2/src/mcp-supervisor.ts :11
import net from 'node:net';
secrets 1
- secrets flowing-abyss-obsidian-hybrid-search-8dee1a2/src/config.ts :19
return process.env.OPENAI_API_KEY;
database 2
- db flowing-abyss-obsidian-hybrid-search-8dee1a2/src/cli.ts :4
import Database from 'better-sqlite3'; - db flowing-abyss-obsidian-hybrid-search-8dee1a2/src/db.ts :1
import Database from 'better-sqlite3';
declared dependencies 29
- @modelcontextprotocol/sdk@^1.29.0
- better-sqlite3@^12.10.0
- chokidar@^5.0.0
- cli-table3@^0.6.5
- commander@^14.0.3
- gray-matter@^4.0.3
- onnxruntime-node@^1.26.0
- picocolors@^1.1.1
- sqlite-vec@^0.1.9
- yaml@^2.9.0
- zod@^4.4.3
- @commitlint/cli@^20.5.3
- @commitlint/config-conventional@^20.5.3
- @types/better-sqlite3@^7.6.13
- @types/node@^25.9.2
- @vitest/coverage-v8@^4.1.5
- eslint@^9.39.4
- eslint-plugin-import@^2.32.0
- eslint-plugin-sonarjs@^4.0.3
- husky@^9.1.7
- knip@^6.16.1
- lint-staged@^16.4.0
- prettier@^3.8.3
- prettier-plugin-organize-imports@^4.3.0
- tsx@^4.22.4
- typescript@^6.0.3
- typescript-eslint@^8.60.1
- vitest@^4.1.5
- @huggingface/transformers@^4.2.0