@elanotes/mcp-local is a stdio MCP server. It indexes a markdown
vault into a disposable SQLite FTS5 cache on the device. It indexes
private/ notes. Without ELANOTES_API_URL it is offline — no Postgres,
no OpenAI, no network.
The tool registry is read-only:
search_notes, grep_notes, read_note, list_notes, list_tags,
query_notes, get_attachment, plus vault/index tools. It does not
register write_note or edit_note.
search_notes / grep_notes / list_notes / list_tags accept the
same AIP-160 filter string as GET /v1/notes.
Run
Cursor / Claude Code
dist/cli.js so the client does not need
your pnpm PATH.
Optional replica hydrate
SetELANOTES_API_URL (API origin; /v1 is on each path) and
ELANOTES_API_TOKEN to hydrate from /v1/sync. Sync mutations need
notes.write on a suitable session credential. Personal access tokens cannot mutate replicas. ELANOTES_E2EE_PASSPHRASE is not sent to the server.
Cloud MCP
Cloud MCP serves the same read tools over authenticated HTTP, and addswrite_note and edit_note with notes.write and connected write storage (or open local mode):
MCP cloud. Arguments: MCP tools.
Failures
Tool failures returnisError: true and a JSON object in content[].text
containing reason, message, and a hint naming the next tool call.
For example, a missing note returns NOTE_NOT_FOUND and points to list_notes.
This server remains read-only: unsupported write_note or edit_note calls
return UNKNOWN_TOOL and point to tools/list.