livesync-workersCAUTION
Self-hosted LiveSync-compatible backend for Obsidian with search and MCP, on Cloudflare Workers
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
A Self-hosted LiveSync-compatible backend for Obsidian, with full-text and semantic search and an MCP server, running entirely on Cloudflare Workers.
Sync your vault from Obsidian the way you would to CouchDB, then let AI assistants (Claude, Cursor, Claude Code, ...) read and search your notes through MCP.
[](https://deploy.workers.cloudflare.com/?url=https://github.com/odiak/livesync-workers)
This is an independent project. It is not affiliated with the Self-hosted LiveSync plugin or its author. It implements the subset of the CouchDB API that the plugin uses, not CouchDB in general.
Built for Kuro. Available to everyone.
What you get
- LiveSync endpoint (
/livesync): the CouchDB-compatible API the plugin talks to. Your vault lives in a SQLite-backed Durable Object; no CouchDB server to run. - Search indexes, kept up to date as notes sync:
- full-text (exact match; character bigrams for Japanese/CJK, words for ASCII) stored in R2,
- semantic (Workers AI embeddings + Vectorize).
- MCP endpoint (
/mcp) with OAuth, exposing 11 tools:
listDirectory, listNotes, listRecentNotes, readNote, readDailyNote, searchNotes, grepNotes, vaultStatus (read), appendToDailyNote, appendToNote (append), writeNote (write, with conflict detection).
- A small status page at
/with your connection details.
Notes written through MCP are regular LiveSync revisions, so they show up in Obsidian on the next sync.
Search coverage and limits
- Japanese, Chinese and Korean are fully supported: full-text search matches substrings (character bigrams, no dictionary), so a query like
会議室finds it inside any word; ASCII text is matched by whole words, case- and width-insensitively. - Vault size: vaults of around 100 MB of Markdown are
7b51da5e7c85OBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add livesync-workers -- npx -y [email protected]
{
"mcpServers": {
"livesync-workers": {
"command": "npx",
"args": [
"-y",
"[email protected]"
]
}
}
}Exposed tools (11)
10 read · 0 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
appendToDailyNote | read | Append a Markdown block to the end of a daily note (created if missing). Requires the vault:append scope. |
appendToNote | read | Append a Markdown block to the end of an existing note. Fails with NOT_FOUND when the note does not exist. Requires the vault:append scope. |
grepNotes | read | Exact-match full-text search over ${label} notes (substring for Japanese/CJK, whole-word for ASCII). Whitespace-separated phrases are ANDed. Keep queries short (a few words, up to about 60 CJK characters in total). Use searchNotes for semantic queries instead. |
listDirectory | read | List Markdown files and subdirectories directly under a vault-relative directory. |
listNotes | read | List vault-relative Markdown note paths. Response includes the total count so you can tell when results are truncated. |
listRecentNotes | read | List Markdown notes sorted by modification time (newest first), with mtime and size. |
readDailyNote | read | Read a daily note by date using Obsidian daily-notes settings when available. |
readNote | read | Read a Markdown note by vault-relative path. |
searchNotes | read | Search indexed ${label} notes semantically. |
vaultStatus | read | Show vault connection state and search index progress. Useful when other tools fail or search returns nothing. |
writeNote | destructive | Create or overwrite a vault note. Overwriting an existing note requires expectedContentHash (the contentHash returned by readNote), which detects concurrent edits. Prefer appendToDailyNote/appendToNote when appending is enough. Requires the vault:write scope. |
Trust audit
CAUTIONgrade B · trust 87/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (2 observation(s))
- Network
- declared (7 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (11)
writeNote
streamable-http
.dev.vars.example
exec(query: string, ...args: unknown[]) {const cursor = exec(query, ...bindings);
new Function("window", SETUP_URI_CLIENT_SCRIPT)(window);const readme = readFileSync(resolve(pkgDir, "../../README.md"), "utf8").replace(
const decoded = atob(header.slice("Basic ".length));binary = atob(piece);
const bytes = Uint8Array.from(atob(encrypted.slice(2)), (c) => c.charCodeAt(0));
Point the client at `https://<your-worker>.workers.dev/mcp` (Streamable HTTP). It will open a browser window; sign in with `ADMIN_PASSWORD` and choose which scopes to grant:
Gates applied: no_behavioural_pass.
7b51da5e7c85full audit observations/trust-audit/mcp-server/odiak__livesync-workers.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 7b51da5e7c85 | CAUTION | B | 87 | first audit |
Questions
What is the livesync-workers MCP server?
Self-hosted LiveSync-compatible backend for Obsidian with search and MCP, on Cloudflare Workers
What tools does livesync-workers expose?
11 in total: 10 read-only, 0 that write, and 1 that can delete or overwrite (writeNote). Every one is listed on this page with its risk.
Is livesync-workers safe to connect to an agent?
With care. The audit graded it B (87/100) and found 11 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does livesync-workers need?
No credential environment variables were found in its source, so it appears to need none.
How does livesync-workers run?
It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as livesync-workers at 0.7.0.
How current is this page?
The grade is for one exact copy of the source (7b51da5e7c85), read on 2026-10-11. The repository is watched and re-audited when it changes.