<!-- generated by build_articles.py — edit content/compare/xerj-vs-localsynapse.md instead -->
---
title: "XERJ vs LocalSynapse for MCP local file search"
canonical: "https://xerj.org/compare/xerj-vs-localsynapse"
updated: "2026-08-23"
source: "content/compare/xerj-vs-localsynapse.md"
---

# What's a local MCP search engine for Claude?

**TL;DR** — LocalSynapse wins the desktop experience: a search window you double-click, whole-drive indexing, and mail and spreadsheet formats XERJ has no extractor for. XERJ wins data files and the Elasticsearch query surface. No head-to-head was run for this page.

## Agent prompt

```text
Act as a coding agent. Read https://xerj.org/llms.txt, start a local node with `xerj --insecure --data-dir ./xerj-data`, run `xerj autoindex ./work --prefix work --state-dir ./state-work` on one chosen folder rather than a whole drive, attach it with `xerj mcp --url http://127.0.0.1:9200`, then answer the user question with an Elasticsearch DSL query and report every file the run refused together with the reason it gave.
```

## Commands

### Command 1

Note: Start one node. There is no desktop window and no installer step.

```sh
xerj --insecure --data-dir ./xerj-data
```

### Command 2

Note: One folder at a time, chosen by you, rather than a whole drive.

```sh
xerj autoindex ./work --prefix work --state-dir ./state-work
```

### Command 3

Note: Attach the running node over stdio MCP. Same binary, 10 tools, no desktop window.

```sh
xerj mcp --url http://127.0.0.1:9200
```

## Concede the desktop

LocalSynapse is a product a person installs and opens. The same binary is a search window and an MCP server, and its site states that it runs on Windows and macOS.

It indexes whole drives automatically and skips cloud placeholder files from OneDrive and Dropbox, so nothing has to be added folder by folder. That is the Windows habit of an instant file finder, carried into a tool an agent can also call.

XERJ has none of that. There is no window, no installer with a tray icon, and no drive-wide default. You name a folder and run a command.

## Concede the formats we do not have

LocalSynapse reads PDF, Word, PowerPoint, Hangul, CSV, Markdown and plain text. It also reads mail files as `.eml`, `.msg` and `.mbox`, and it reads Excel workbooks with cell coordinates and merged ranges up to 25 MB.

Two of those are real gaps on the XERJ side, and neither has a workaround worth publishing. XERJ has no mail extractor, so an mbox archive is not a family it recognizes. XERJ has no XLSX or PPTX extractor either, so a spreadsheet has to become CSV first.

If your corpus is mail and spreadsheets, stop here and use LocalSynapse. No measurement on this page would change that answer.

## What XERJ reads instead

Thirteen families are covered. The list holds JSON and JSONL, CSV with dialect detection, structured logs, SQL exports and SQLite. It also holds PDF, DOCX, HTML, XML, YAML, plain text, code and gzip variants.

The data end of that list is where the two products part company. A SQLite database, a semicolon CSV with a decimal comma, and a multi-gigabyte SQL export are shapes a document-first indexer usually skips.

Code is the other one. Each code document carries a `defs` field and a `symbols` list with names, kinds and line numbers, across 34 languages.

## Two different answers to "how does the agent ask?"

LocalSynapse documents an MCP server over stdio that opens no network port, with four tools: `search_files`, `get_file_content`, `list_indexed_files` and `get_pipeline_status`. That is a clean, small surface, and for many agents it is enough.

XERJ answers over the Elasticsearch REST API. An agent writes the query DSL it already knows: `match_phrase`, `terms`, `range`, aggregations and `_source` narrowing.

`xerj mcp` serves 10 tools over stdio on top of that, and `/_memory/{ns}` gives an agent namespaced memory in the engine.

Pick the surface that matches your caller. A small tool list is easier for a simple agent, and a query language is more useful for one that asks precise questions.

## Retrieval, stated honestly on both sides

LocalSynapse combines full-text BM25 with a local embedder, BGE-M3 running through ONNX Runtime on the CPU. It stores its index in a local SQLite database.

XERJ ranks with BM25 and can fuse a vector clause with Reciprocal Rank Fusion or a weighted linear sum. The difference is the default: the XERJ default embedder is lexical feature hashing rather than neural, so the shipped default carries no meaning-based signal. Neural embeddings are opt-in through `--embed-mode neural`, and they are CPU-only.

On a paraphrased question, a product that ships a neural embedder by default has the advantage. That was not measured here, and the mechanism is enough to say it.

## Licenses and what you can read

XERJ is Apache-2.0 and its source is published. LocalSynapse is also Apache-2.0, but its repository states that it hosts release artifacts only, and that the source tree is no longer published from version 2.15.0 onward.

If reading the code matters to you, that difference is the whole decision. If it does not, it changes nothing.

## The limits you inherit with XERJ

XERJ is single-node only. There is no data-plane replication and no failover, so one host is the whole deployment.

The server retains heap for every document it indexes, which is an open tracked defect. Whole-drive indexing is exactly the shape that grows it, which is one reason XERJ asks for a folder instead.

XERJ does no optical character recognition. A page image with no text layer stays junk until a separate tool gives it a text layer.

## When to choose LocalSynapse instead

Choose LocalSynapse when a person wants a search window on Windows or macOS. That is its job.

Choose LocalSynapse when the corpus is mail or Excel workbooks. XERJ has no extractor for either one.

Choose LocalSynapse when you want whole-drive coverage with no folder list to maintain. Its neural embedder is on by default.

## When to choose XERJ instead

Choose XERJ when the corpus holds data rather than documents. SQLite, CSV dialects, SQL exports and source code are the reason.

Choose XERJ when the caller writes Elasticsearch query DSL, or needs aggregations rather than a ranked file list.

Choose XERJ when agent memory belongs in the same process as the index. Choose it when you want to read the source of what you run.

## What was not measured

No head-to-head was run for this page. No LocalSynapse build was installed here, so there is no shared corpus, no timing, no recall figure and no tool-by-tool score.

Every LocalSynapse fact above comes from its own site or repository. Read those before you decide, because a product that ships binaries moves faster than a page about it.

## FAQ

### What does LocalSynapse do better?

The desktop experience. It ships a search window, indexes whole drives automatically, and reads mail files and Excel workbooks that XERJ has no extractor for.

### LocalSynapse vs something that also indexes CSV and SQLite?

That is the split. XERJ takes the data files and the query surface: SQLite databases, hostile CSV dialects, SQL exports and code, answered over the Elasticsearch REST API.

### Can XERJ read my mail archive?

No. There is no mail extractor. Formats such as mbox and PST are not families XERJ recognizes, and LocalSynapse reads them.

### Can XERJ read a spreadsheet?

Not an Excel workbook. A CSV export is read with dialect detection, but there is no XLSX or PPTX extractor at all.

### How many MCP tools does each side expose?

LocalSynapse documents four. XERJ serves 10 through xerj mcp, including memory tools.

### Is either one open source?

XERJ is Apache-2.0 with published source. LocalSynapse is Apache-2.0 but its repository says the source tree is no longer published from version 2.15.0.

### Is there a measured comparison on this page?

No head-to-head was run. No LocalSynapse build was installed, so there is no shared corpus, no timing and no recall figure here.

### How do I let an agent search files on my machine offline?

Give it a local MCP server over an index of those files. Both sides here run on your machine, they index different things, and an agent can hold a tool list from each.

## Evidence

- LocalSynapse is a local search product for files and mail on Windows that combines full-text BM25 with a local embedder, and the same binary is both a desktop search window and an MCP server. — [https://github.com/LocalSynapse/LocalSynapse](https://github.com/LocalSynapse/LocalSynapse)
- LocalSynapse runs on Windows and macOS, indexes whole drives automatically and skips cloud placeholder files from OneDrive and Dropbox. — [https://localsynapse.com/en](https://localsynapse.com/en)
- The LocalSynapse embedder is BGE-M3 running through ONNX Runtime on the CPU, and its search index is stored in a local SQLite database. — [https://localsynapse.com/en/blog/mcp-local-file-search](https://localsynapse.com/en/blog/mcp-local-file-search)
- The LocalSynapse MCP server communicates over stdio, opens no network port, and exposes search_files, get_file_content, list_indexed_files and get_pipeline_status. — [https://localsynapse.com/en/mcp](https://localsynapse.com/en/mcp)
- LocalSynapse reads PDF, Word, PowerPoint, Hangul, CSV, Markdown and plain text, plus .eml, .msg and .mbox mail, and reads Excel workbooks with cell coordinates and merged ranges up to 25 MB. — [https://github.com/LocalSynapse/LocalSynapse](https://github.com/LocalSynapse/LocalSynapse)
- LocalSynapse is licensed Apache-2.0, but its repository states that it hosts release artifacts only and that the source tree is no longer published from version 2.15.0 onward. — [https://github.com/LocalSynapse/LocalSynapse](https://github.com/LocalSynapse/LocalSynapse)

## Related

- [Can ChatGPT search a folder on my laptop, or do I need something else?](/answers/give-chatgpt-claude-local-file-access)
- [I need my agent to find a passage and cite the file, not dump the whole tree. How?](/answers/code-search-mcp-for-claude-code)
- [How do I set the MCP memory storage path?](/answers/set-mcp-memory-storage-path)
- [I have a folder of PDFs, Word docs, and markdown. How do I search all of them at once?](/answers/search-file-contents-in-a-folder)
