search_notes
Search notes
Search the vault with hybrid keyword + semantic search. Returns note paths, headings, and snippets. Use read_note for full content.
modelimitquery必填
io.github.vortex-303由 GitHub 账号 vortex-303 发布v0.1.11更新于 Oct 30, 2026
E2E-encrypted markdown notes as shared memory for you and your agents, with local semantic search.
本地 MCP 服务器,把加密的 Markdown 笔记库变成 AI 助手的共享记忆,并支持在设备本地进行关键词与语义混合搜索。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
End-to-end-encrypted notes that double as memory for your AI agents.
▶ Open the app · Live demo · npm · Self-host
[Vortex Notes web app: a live-preview markdown editor with an encrypted vault]
Your notes are plain .md files you own — greppable, git-able, Obsidian-compatible.
Vortex Notes adds the two things a notes app and an agent-memory store each do
separately, in one place:
That combination — agents can fully use it and the server can't read it — is the empty quadrant this fills.
A real app, not a viewer: installable on iPhone / Android / Mac (works offline), sub-second cross-device sync over WebSocket, and an Obsidian-style live-preview markdown editor that's as good on a phone as on a desktop.
[Vortex Notes on a phone] [Agents and devices: each has its own scoped, revocable key]
A first-party MCP server gives Claude Code, OpenClaw, Cursor, or any MCP client task-shaped tools — not a CRUD mirror — and it works headless:
search_notes · read_note · write_note · edit_note (surgical)append_daily — timestamped journal entriesremember(fact, supersedes) — facts with a lifecycle: a superseded fact stays
visible, struck through, pointing at what replaced it. Auditable, not a black box.build_context(topic) — the top notes in full plus one hop of [[wikilinks]],
so an agent starts a task with the right context in one call.Search is on-device. Hybrid BM25 + multilingual embeddings (SQLite FTS5 + sqlite-vec + a small local model). No API key, nothing leaves your machine, and an English query finds your Spanish notes across ~100 languages.
Open vortex-notes.pages.dev/app, create an account (save the 12 words), and start writing. Add it to your home screen to install it. That's the whole onboarding — no email, no password.
On the agent's machine:
It prints a 6-letter code; approve it in the app (user menu → Agents & devices →
Pair an agent). The agent gets its own scoped, revocable key and never sees your
recovery phrase. pair then wires every harness it finds on that machine, pinned
to the paired vault:
/reload-mcp afterwards~/.config/opencode/opencode.jsonNo MCP in your agent? The same tools work as shell commands, see
Agents without MCP.
Works over SSH too (you approve from your phone). Any other stdio MCP client:
{ "command": "npx", "args": ["-y", "vortex-notes", "mcp"], "env": { "VORTEX_NOTES_VAULT": "<path pair printed>" } }.
Add --read-only to make it read-only.
Chat apps in the browser or on your phone can only reach an MCP server by URL. In the app: user menu → Agents & devices → Connect a chat app creates a cloud agent and gives you a secret connector URL:
This is the one opt-in exception to zero-knowledge: the relay holds that agent's key (encrypted at rest) so it can serve the notes that agent may access. It's scoped, can be read-only, and revoking it kills the URL. Everything else stays end-to-end encrypted.
Every MCP tool is also a command, so any agent that can run a shell (OpenClaw-style
harnesses, scripts, cron, git hooks) gets the same behavior. After pair, commands
find the paired vault by themselves; each one syncs before reading and after writing.
write/edit/daily/remember read stdin when the text is -. Errors exit 1
({"error": …} with --json). Full list: vortex-notes --help. There's a ready
OpenClaw skill built on these.
The index in .vortex/index.db is disposable — the markdown files are always the
source of truth. VORTEX_NOTES_NO_SEMANTIC=1 skips embeddings (keyword only, no
model download).
The hosted relay at vortex-notes.pages.dev is convenience, not lock-in. Run your own:
Open http://<host>:7300/app to create an account in the browser.
--db file (default ~/.vortex-notes/relay.db). Back it up.
--db :memory: is for throwaway tests.RELAY_CONNECTOR_KEK to 64 hex characters (openssl rand -hex 32) before creating connectors,
so their keys are encrypted at rest.localhost.Host / X-Forwarded-Host headers, so a reverse proxy just works.RELAY_QUOTA_MB caps each account's storage.RELAY_ADMIN_ACCOUNT (your Account ID) turns on admin stats in the web app.A 12-word BIP39 phrase derives your account's signing + encryption keys. Each
device and agent has its own random keypair, certified by your account key — an
account → device → agent chain. A space's content key is sealed to each
principal that may read it; the relay enforces scope and read-only on every signed
request but only ever holds sealed blobs.
What a malicious or subpoenaed relay can do: serve stale or withheld ciphertext (detectable via sequence gaps). What it can't do: read a note, a title, or a key; forge an edit; or silently alter one. The WebSocket sync channel carries only content-free "a space changed" pokes — the doorbell, never the data.
For a broad usage view, the relay derives a coarse country (two-letter code) from your IP in memory and stores only that code — the IP itself is never written to disk or logged.
TypeScript, all-MIT: @noble /
@scure crypto, CodeMirror 6,
better-sqlite3, sqlite-vec, transformers.js,
marked. The relay is a small Node service; the web app is a single esbuild bundle
with all crypto client-side. 48 unit tests plus ten Playwright browser suites.
MIT © Vortex303
来源:README.md,提交 3b4d724
Search notes
Search the vault with hybrid keyword + semantic search. Returns note paths, headings, and snippets. Use read_note for full content.
modelimitquery必填Read note
Read a note's full markdown content by vault-relative path.
path必填Create note
Create a new markdown note. Fails if the path already exists — use edit_note to modify existing notes.
tagstitle必填foldercontent必填Edit note
Edit an existing note surgically: append, prepend, or find_replace (exact string). Prefer this over rewriting whole notes.
findpath必填content必填operation必填Append to daily note
Append a timestamped entry to today's daily note (or a given date). The right place for observations, decisions, and things to remember.
datecontent必填Build context
Load working context for a topic in one call: full content of the top-matching notes plus one hop of [[wikilinked]] notes as pointers. Prefer this over multiple search+read rounds when starting work on a topic.
topic必填max_notesRemember a fact
Record a durable fact in the shared memory (memory/*.md) as a dated bullet with a stable ^id. If it replaces an earlier fact, pass supersedes (the old fact's ^id, or a distinctive substring of it) — the old fact stays visible with strikethrough and a pointer to the new one. Use search_notes to find existing facts first.
fact必填topicsupersedesRecent activity
List notes modified in the last N days, newest first.
dayslimitList notes
List note paths, optionally under a folder.
limitfolder已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
npx -y vortex-notes@latest pairnpm install -g vortex-notesvortex-notes init # create a vaultvortex-notes search "that idea about pricing" # hybrid semantic + keywordvortex-notes serve # local web viewer at 127.0.0.1:7303npm install -g vortex-notes@latest # once, so `vortex-notes` is on PATHvortex-notes context "kiln" # top notes in full + linked notesvortex-notes read projects/kiln.mdvortex-notes daily "fired the test tiles"vortex-notes remember "Kiln max is cone 8" --topic kiln --supersedes "cone 10"vortex-notes write "Glaze tests" "Three recipes…" --folder studio --tags glazevortex-notes edit clay.md --append "Order more in May."vortex-notes recent --days 3 --json # --json on any commandvortex-notes relay --port 7300 --db ~/relay.db # the ciphertext store, web app and chat connectorsvortex-notes setup --relay http://<host>:7300 # on each computer: your 12 words, then syncnpx -y vortex-notes@latest pair --relay http://<host>:7300 # an agent machine