
Margins
io.github.cflorczyk9Published by GitHub account cflorczyk9v0.15.3Updated Oct 24, 2026
Use your Claude Pro/Max subscription on your Obsidian vault. Reads markdown, proposes writes.
Overview
A local MCP server that lets Claude read an Obsidian vault or markdown folder and stage proposed page writes for your review.
- What you can do
- Search the vault by full text and filename, read pages by path, list recently modified pages and find backlinks to a page, plus a search/fetch pair for deep-research clients. Stage new pages, string-replacement edits, appends and compiled source pages from raw documents such as PDFs, Word files, spreadsheets, email exports and EPUBs. List pending proposals with overwrite-risk flags and accept or reject them. Suggest wikilinks between pages that share a slug. Record and recall durable filing and naming preferences kept in a markdown file inside the vault.
- When to use it
- Useful if you keep notes in Obsidian or a markdown folder and want an assistant to answer questions over them and draft edits without touching the live files. Fits vaults that need scaffolding, cleanup or more internal links, and users who want to reuse an existing Claude subscription rather than an API key.
- Requirements
- Runs locally over stdio as a Node.js package (Node.js 18 or newer), installed globally or via npx. Needs an absolute vault path in MARGINS_VAULT, or the installer's vault prompt. A Claude Pro, Max or Claude Code subscription is expected for inference. Optional MARGINS_INDEX_ROOTS limits which subfolders are indexed.
Installation
In SourceWeft
- Open Margins 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
margins-mcp
Use your Claude Pro/Max subscription on your Obsidian vault. No API key. No per-token costs. No embedding pipelines. Claude reads your notes and proposes updates; your subscription pays for inference; your files stay on your disk.
margins-mcp is a small Node program that sits between Claude (Desktop or Code) and your Obsidian vault. When you chat with Claude, it reads your notes through margins-mcp. Your files stay local, Claude does the thinking, your existing subscription pays for it.
Which Margins are you?
Margins works for six common starting points. margins_start auto-detects your state on the first call, so you don't have to classify yourself — but knowing which row you're on helps set expectations.
Requirements
- Node.js 18 or newer
- An Obsidian vault, or any folder with notes, PDFs, Office/OpenDocument files, email exports, EPUBs, or plain text
- A Claude subscription: Pro ($20/mo), Max, or Claude Code
Install
Two commands:
The installer prompts for your vault path, detects Claude Desktop and Claude Code, writes the right config files, scaffolds raw/ + proposed/ + .margins/ inside your vault if missing, and runs a verification probe. Restart Claude Desktop (Cmd-Q on macOS, not just close the window), or in Claude Code run /mcp to see Margins listed.
Don't have a vault yet?
Scaffold a Margins-shaped one:
Finding your Obsidian vault path
If you already use Obsidian and don't know your vault's absolute path:
- In Obsidian: right-click the vault name in the file tree → "Reveal in Finder" (macOS) or "Show in Explorer" (Windows). The path is in the title bar.
- macOS common paths:
~/Documents/<VaultName>, or~/Library/CloudStorage/iCloudDrive/Obsidian/<VaultName>if iCloud-synced. - Linux common paths:
~/Documents/<VaultName>, or~/.local/share/Obsidian/<VaultName>. - Windows common paths:
%USERPROFILE%\Documents\<VaultName>.
Pass it to the installer via --vault /absolute/path or answer the prompt.
Try-without-installing
You'll see a warning that npm may garbage-collect the npx cache and your configs would break weeks later. For real use, prefer npm install -g above. The npx path is fine for kicking the tires.
Manual install
If you'd rather edit config yourself, add this to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS; see Anthropic docs for Windows/Linux paths):
Try it
In a new Claude conversation, ask:
Use margins to give me a summary of my recent notes.
Or:
What pages support the claim that my project deadline is May 30th? Use margins to find them.
Or:
I just dropped a spreadsheet into
raw/. Compile it into a structured source page in my wiki.
The model can read your vault, propose new pages, propose edits to existing ones, and pull raw sources into structured wiki pages. propose_compile_from_raw accepts Markdown/plain text, PDFs, Word docs, spreadsheets, decks, email exports, EPUBs, OpenDocument files, RTF, HTML, CSV/TSV, JSON, YAML, and common text-ish formats. Every write stages to proposed/ first; nothing lands without you accepting.
Tools
Context (call once per conversation)
Read
Propose writes (staged — nothing lands until accepted)
Suggest (for A3 / B3 — vaults with many files but few links)
Learn
How the proposal flow works
Every write tool stages to proposed/<path> inside your vault. Nothing touches the live tree until you (or an MCP client acting on your behalf) call resolve_proposal with action: "accept". You can also inspect staged content (ls proposed/) and accept by moving files yourself.
Sequential edits stack: a second propose_edit on the same path reads from the pending proposal, not the vault.
Configuration
What Margins is NOT
To keep scope crisp:
- Not an inference layer. Your Claude subscription pays for that. Margins makes zero LLM calls.
- Not a web app. The chat surface lives in Claude Desktop / Claude Code / claude.ai. Margins is plumbing.
- Not a cloud sync. Local-first. Your files stay on your disk.
- Not a CRM integration. Different product.
- Not API-key-based. Subscription-passthrough is the whole point.
Privacy
- Vault content never leaves your machine. Margins is a Node process that reads/writes files locally and exposes structured tools over stdio.
- Anonymous telemetry (opt-in at install time) reports tool-call counts to help me prioritize what to build next. Sample event payload:
GET https://margins.goatcounter.com/count?p=/tool/search_vault. No vault content, no file paths, no user identifier beyond the standard 24-hour rolling session token GoatCounter assigns. Disable per-session withMARGINS_TELEMETRY=off. Decision stored at~/.margins/consent.json.
Develop
The compiler (src/compiler/) was originally vendored from an earlier Margins web app. The web app and its landing page live on the legacy-webapp branch in this repo. Re-vendor with scripts/vendor-compiler.sh if you ever need to pull updates back from there.
How Margins gets smarter over time
Two things compound:
- Your vault's
CLAUDE.mdis auto-loaded bymargins_start. Drop vault-specific rules in there — filing conventions, voice, naming patterns — and Claude obeys them in every conversation. No copy-paste. .margins/preferences.mdis a Margins-maintained file inside your vault. When you correct Claude ("no, that should be in projects, not personal"), Claude callsrecord_preferenceto remember the rule. Next conversation it reads them viarecall_preferencesbefore proposing writes. The file is plain Markdown — you can audit it, hand-edit it, delete sections that no longer apply.
Both files live in the vault, so they travel with it. Switch machines, switch hosts (Claude Desktop → Claude Code → ChatGPT once that lands), and your conventions follow.
Roadmap
- v0.6: web onboarding at marginsmcp.com — pick a folder via File System Access, scaffold a vault, get the install command. Closes B2/B3 personas without requiring CLI fluency.
- v0.6:
get_citations(semantic embedding search, opt-in dep). - v0.6: OCR/image, legacy Office binary, and audio/video ingestion for
propose_compile_from_raw. - v0.7: HTTP / Streamable transport for claude.ai web and ChatGPT custom connectors.
- v0.7+: Obsidian community plugin alongside MCP, if signal supports it.
- v0.8+: file watcher / auto-scaffold on drop into
raw/.
License
MIT
Source: README.md at commit 69b6af2
Tools
0Version history
1- v0.15.3LatestSep 16, 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