Skip to content
Agentmart
Submit a tool

Docsonar

Local document search over your folders: hybrid keyword+semantic, fully offline, read-only

Connector by ribhav-jain · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/ribhav-jain-docsonar

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Local document search over your folders: hybrid keyword+semantic, fully offline, read-only

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
5 read · 1 write · 1 delete · 1 not yet classified
Secrets
None asked for
Install scripts
Not scanned yet
Runs as
Python package

Tools by what they do 8

Read from the source code; the running server may list different tools.

Read 5 · Look things up without changing anything.

  • find_similar
  • index_status
  • list_folders
  • read_file
  • search

Write 1 · Create, change, send or run things.

  • add_folder

Delete 1 · Delete, drop, revoke or wipe things.

  • remove_folder

Not yet classified 1 · We could not tell from the name and description.

  • reindex

Files it touches

  • Any path the agent passes to its tools

Tools (8)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_folder

    Register a local folder so its documents become searchable. Use this once per folder before searching it. Indexing runs in the background — this returns immediately with the file count found; call index_status to track progress (the first ever index also downloads the embedding model, ~130 MB). `path` must be an absolute path to an existing directory. Optional globs match paths relative to the folder using forward slashes (e.g. include_globs=["docs/**/*.md"], exclude_globs=["drafts/*"]); omit both to index every supported file. Supported types: txt, md, pdf, docx, html. Returns {ok, folder, …

  • find_similar

    Find indexed documents most similar in meaning to a given file. Use for "more like this" — e.g. finding related notes, duplicate content, or other documents on the same topic. `path` must be a file inside a registered folder that has already been indexed. Similarity uses stored embeddings (whole-file centroid vs. best-matching chunks), so it works even if the embedding model is not currently loaded. Returns {ok, source, similar: [{path, file_type, score, preview}, ...]}. `score` is cosine similarity (0-1, higher is more similar); `preview` is the best-matching section's heading or opening te…

  • index_status

    Report index health and background indexing progress. Use after add_folder or reindex to check whether indexing has finished, or to diagnose why search results look incomplete (failed files, embeddings unavailable). Cheap to call. Returns {ok, db_path, db_size_bytes, embedding: {model, status}, totals: {folders, files_indexed, files_failed, chunks, chunks_embedded}, indexing: {active, current: {folder, files_done, files_total} | null, queued_folders, recent_jobs}, failed_files: [{path, error}, ...] (up to 10)}. embedding.status is "ready", "not loaded yet ...", or "error: ..." — errors mean …

  • list_folders

    List registered folders with file/chunk counts and last index time. Use this to check what is searchable before calling search, or to find the exact registered path for remove_folder. Returns {ok, folders: [{path, files, failed_files, chunks, added_at, last_indexed_at}, ...]}.

  • read_file

    Read the text of one indexed document, optionally a line range. Use after search to pull full context around a hit. `path` must lie inside a registered folder — anything else is refused (this server never reads outside registered folders). Plain-text formats (txt, md) return the raw file; binary formats (pdf, docx, html) return the extracted text, paragraphs separated by blank lines. `start_line`/`end_line` are 1-based and inclusive; omit both for the whole file. Output is capped at ~100k characters; `truncated` is true if the cap hit, in which case request a narrower line range. Returns {ok…

  • reindex

    Refresh the index: pick up new, changed, and deleted files. Use when documents changed on disk since they were indexed. Runs in the background; track with index_status. Incremental by default — unchanged files (by mtime, then content hash) are skipped, files deleted from disk are purged from the index. `folder` limits the refresh to one registered folder (path as shown by list_folders); omit it to refresh all. `force=true` rebuilds every file from scratch regardless of change detection (use after changing chunking or embedding settings). Returns {ok, queued: [folder paths], force}.

  • remove_folder

    Unregister a folder and purge all its index data (files, chunks, search index). The documents on disk are untouched — this only forgets them. Any in-progress background indexing of this folder is cancelled. Use list_folders to see what is registered. Returns {ok, folder, files_purged}.

  • search

    Search all indexed documents and return the most relevant passages. Use this first whenever the user asks about the content of their local documents. `query` is free text; full questions work well in hybrid/ semantic mode, plain keywords in keyword mode. `top_k` (1-50) caps results. `folder` restricts to one registered folder (pass its path as shown by list_folders); `file_type` restricts by extension (e.g. "md"). `mode`: "hybrid" (default — keyword + semantic fused with reciprocal- rank fusion, best for most queries), "keyword" (exact-term BM25, best for identifiers or rare exact words), or …

Signals

Stars
0
Forks
0
Open issues
0
Weekly downloads
20
Last commit
Jul 20, 2026 (3 months ago)
Last release
Jul 20, 2026 (3 months ago)
Last package publish
Jul 20, 2026 (3 months ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.ribhav-jain/docsonar
Version
0.1.1
Auth
No auth
Packages
pypi docsonar
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026
Cite this page

Docsonar MCP server. Agent Mart. https://agentmart.dev/connectors/ribhav-jain-docsonar (last updated 2026-10-24)