@eastgold15/everything-mcp
v1.0.1
Published
MCP server for Everything search engine - blazing fast file search for Windows
Maintainers
Readme
Everything MCP Server
Model Context Protocol server for Everything, the
instant file-search engine for Windows. Wraps Everything's es.exe command-line
client and exposes it as two MCP tools.
Written in TypeScript, shipped as a single ESM bundle.
Prerequisites
Windows only. Everything must be installed and running — es.exe is a
client for Everything's index, not a search engine of its own.
- Install Everything and let it index your drives.
es.exeis found automatically in the usual install locations. SetES_PATHto override, or rely on the copy bundled inbin/(see Bundled es.exe).
Installation
No clone, no build, no paths to fill in — point your MCP client at the published package:
{
"mcpServers": {
"everything": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@eastgold15/everything-mcp"]
}
}
}Or with Bun:
{
"mcpServers": {
"everything": {
"type": "stdio",
"command": "bunx",
"args": ["@eastgold15/everything-mcp"]
}
}
}ES_PATH is optional — the server finds es.exe in the usual install locations
and falls back to the copy shipped inside the package. Set it only to force a
specific binary:
"env": { "ES_PATH": "C:\Program Files\Everything\es.exe" }From source
git clone https://github.com/eastgold15/everything-mcp.git
cd everything-mcp
bun install
bun run buildThen use "command": "node" with "args": ["<path>/dist/index.mjs"], or run
bun link and invoke everything-mcp directly.
Tools
search
Searches the Everything index. Returns structured JSON, not raw text:
{
"resultCount": 2,
"truncated": false,
"results": [
{
"path": "G:\api-gen\package.json",
"name": "package.json",
"size": 1136,
"dateModified": "2026-08-01T01:06:03"
}
]
}resultCount: 0 means the query ran and matched nothing. A malformed query or an
unreachable Everything service is reported as an error instead — the two are never
conflated.
| Option | Type | Notes |
|---|---|---|
| query | string | Required. Everything search syntax. |
| maxResults | number | Default 50, max 1000. |
| regex | boolean | Treat the query as a regular expression. |
| caseSensitive | boolean | Match case. |
| wholeWord | boolean | Match whole words only. |
| matchPath | boolean | Match the full path, not just the file name. |
| foldersOnly | boolean | Folders only. Mutually exclusive with filesOnly. |
| filesOnly | boolean | Files only. Mutually exclusive with foldersOnly. |
| sortBy | string | name, path, size, extension, date-created, date-modified, date-accessed. |
| sortDescending | boolean | Reverse the sort. |
| showSize | boolean | Include size in bytes. |
| showDateModified | boolean | Include modification time (ISO-8601). |
| parentPath | string | Restrict to this directory and its subdirectories. Spaces need no escaping. |
get_file_info
Given a path (or bare file name), returns size, all three timestamps, and decoded attribute flags:
{
"path": "G:\api-gen\package.json",
"name": "package.json",
"size": 1136,
"dateCreated": "2026-08-01T01:03:51",
"dateModified": "2026-08-01T01:06:03",
"dateAccessed": "2026-08-02T18:47:34",
"attributes": ["archive"]
}An unindexed path is an error, not an empty result.
Query syntax
Terms are space-separated and combine with AND. The server splits the query into
the separate arguments es.exe expects, so multi-term queries work as written:
name:package.json !path:node_modules exclude a directory
*.md|*.txt either extension
ext:jpg;png;gif extension list
size:>1mb larger than 1 MB
dm:today modified today
path:"Program Files" quoted phrase, space preservedPrefix a term with ! to exclude it. Wrap a term in double quotes to keep spaces
inside it.
Development
bun install
bun test # 62 tests
bun run type-check # tsc --noEmit
bun run build # packem → dist/index.mjs
bun run dev # rebuild on change| Path | Contents |
|---|---|
| src/index.ts | Server setup and tool registration — no business logic. |
| src/es/ | es.exe interaction: path resolution, argv construction, execution, output parsing. |
| src/tools/ | One file per MCP tool: JSON Schema plus handler. |
| src/types/ | Single source of truth for interfaces. |
| src/__tests__/ | Unit tests, plus end-to-end tests that skip when es.exe is absent. |
Bundled es.exe
bin/es.exe is voidtools' ES 1.1.0.27, unmodified:
- Source: https://www.voidtools.com/ES-1.1.0.27.zip
- SHA-256:
5101b3a6d9542de378e077f4b8c66c4e608d3bff088092427749b65fbb18b342
It is probed last, after every system install, so a version you upgrade yourself always wins. Everything must still be running for it to return anything.
Notes on es.exe
Behaviours worth knowing, all verified against ES 1.1.0.37:
- Search terms are separate arguments.
es.exe [options] search textbuilds its query from multiple argv entries; it never re-splits the spaces inside one. Passing a whole query as a single argument matches nothing, silently, with exit code 0. - Errors go to stdout, not stderr. A bad switch prints
Error 6: Unknown switch.followed by the full help text to stdout and leaves stderr empty. The exit code is the only reliable failure signal. - Exit code 0 covers both success and no matches. Documented non-zero codes
run 1–8;
8means the Everything client is not running. -pathrecurses,-parentdoes not.-parent-pathsearches the parent of the given directory, which is rarely what a caller means.
Credits
- voidtools for Everything and
es.exe. - Originally based on danielsimonjr/everything-mcp; rewritten in TypeScript with a test suite.
License
MIT — see LICENSE.
