
Lupa — local file search for your Mac
io.github.under71Published by GitHub account under71v0.3.1Updated Oct 25, 2026
Search your Mac's files by name and by text inside documents. Local index, Korean-aware.
Overview
A macOS-only MCP server that lets an assistant search the files indexed by the Lupa app by name and by text inside documents, and read extracted document text.
- What you can do
- Search indexed Mac files by file name, document content, folder path, extension, kind, size or date, with ranked paths and matching snippets, and limit results or return names only for speed. Read the text Lupa already extracted from a file, without opening the original, including formats the assistant cannot parse. Use query prefixes for name-only, content-only, folder, exclusion, exact phrase, wildcard, kind, size and date filters, with Korean and Chinese prefix variants.
- When to use it
- Useful when an assistant needs to find documents on a Mac by what is written inside them, such as PDFs, Word, Excel, PowerPoint, Hangul HWP/HWPX or scanned PDFs read with OCR, without being granted direct disk access. Also handy for Korean-language partial-word and particle matching that Spotlight handles poorly.
- Requirements
- macOS only. The Lupa app must be installed from the Mac App Store, with folders added and indexing finished; the server reads Lupa's index and does not index itself. Runs locally via npx (Node.js). No API key or account. Lupa 2.0 or later is needed for reading document text. Optional environment variables LUPA_SEARCH_PATH, LUPA_MCP_AUDIT and LUPA_MCP_AUDIT_PATH.
Installation
In SourceWeft
- Open Lupa — local file search for your Mac in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
lupa-mcp
Let your AI agent search the documents on your Mac — by what's written inside them.
An MCP server for Lupa, a macOS file search app with its own index. Your agent asks Lupa; Lupa answers from a local index in ~30 ms. Nothing touches the network.
Searches file names and document contents: PDF, Word, Excel, PowerPoint, plain text, Hangul HWP/HWPX, and scanned PDFs read with OCR.
Why this instead of find/grep
That last row is the point. Your agent gets document contents without you granting it access to your disk.
Requirements
The Lupa app must be installed — this server reads the index that Lupa builds; it does not index anything itself.
- Install Lupa (free) from the Mac App Store: https://lupa.kr
- Open it, add the folders you want searchable, and let indexing finish.
macOS only.
Install
Claude Code
Claude Desktop / Cursor / any MCP client — add to the client's MCP config:
That's it. No API key, no account, no configuration.
Why
/bin/zsh -lc? GUI apps don't inherit your shell's PATH, so a bare"command": "npx"fails to start withenv: npx: No such file or directory(measured on Claude Desktop and Aside). A login shell findsnpxwherever it lives — Homebrew, nvm, or a system install. In a terminal-based client (Claude Code, Codex) plainnpx -y lupa-mcpis fine.
Agents: don't run
lupa-searchthrough your shell. Sandboxed agent shells (Aside, Codex) kill the App Store-signed CLI at launch — exit code 133 or 134. Register this MCP server instead; it starts outside that sandbox. Full guide: https://lupa.kr/agents.html
Tools
lupa_search
lupa_read
Returns the text Lupa already extracted from a file — cheaper than reading the original, and it works for formats your agent cannot parse. Requires Lupa 2.0 or later.
Query syntax
Korean and Chinese prefixes work too (종류: 크기: 날짜: / 种类: 大小: 日期:).
Korean is handled properly — partial words inside compounds and attached particles both match, which is what Spotlight gets wrong.
Audit log
Every tool call is recorded on your Mac so you can see what an agent searched for and which files it was shown:
Each line has the time, the calling client (e.g. Claude Code, Cursor), the tool, the query or path, the paths returned, and whether it succeeded. Snippets and document text are not logged. The file is readable only by you (0600) and never leaves the Mac.
Lines are hash-chained: each entry includes the hash of the previous one, so editing or removing a line is detected. This makes the log tamper-evident, not tamper-proof — deleting the whole file and starting over is still possible.
Turn it off with LUPA_MCP_AUDIT=off, or move it with LUPA_MCP_AUDIT_PATH=/path/to/file.jsonl.
Privacy
Everything runs on your Mac. Lupa has no network code at all, and this server only launches Lupa's bundled command-line tool and passes the results to your agent. Nothing is uploaded, and there is no telemetry.
Notes
- Lupa's free index covers up to 50,000 files. This server inherits whatever the app indexed — there is no separate limit or paywall here.
- Only the beginning of each document is indexed, so
lupa_readtruncates long files. - If Lupa is installed somewhere unusual, set
LUPA_SEARCH_PATHto thelupa-searchbinary inside the app bundle.
Troubleshooting
License
MIT
Source: README.md at commit 6e3d8db
Tools
0Version history
1- v0.3.1LatestOct 25, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts