Skip to main content
Glama

The Problem with Every Other Obsidian MCP

I checked them all — mcp-obsidian, mcpvault, obsidian-mcp-server, obsidian-mcp-tools, obsidian-mcp-plugin. They read files. They write files. Some search. That's it.

None of them can create a visual diagram. None of them rank search results by relevance. None of them can tell an agent "here are the 12 themes in this vault and which files belong to which."

VaultForge does all three.

Feature

VaultForge

mcp-obsidian

mcpvault

obsidian-mcp-server

Read / Write / Delete notes

Full-text search

Edit in-place

Batch operations

Daily notes

Vault stats

Canvas — create with auto-layout

Canvas — semantic read

Canvas — patch (add/remove/update)

Canvas — re-layout (dagre)

BM25 smart search (Orama)

Vault theme mapping (TF-IDF)

Vault reorganization engine

Regex find-and-replace (grep-sub)

Batch rename / move with link updates

Backlink analysis

Frontmatter as structured data

Directory management (delete, prune)

No Obsidian plugin required


Fewer Tokens. Same Intelligence.

The other Obsidian MCPs weren't designed for AI agents — they were designed for humans who happen to use AI. Every tool returns raw, verbose data that burns through context windows. VaultForge is AI-infrastructure: every response is shaped to minimize token consumption while maximizing semantic density.

Operation

Traditional MCP

VaultForge

Savings

Read a canvas

Raw JSON — coordinates, hex IDs, pixel dimensions

Semantic graph: labels + connections only

~70-80% fewer tokens

Search vault

Unranked grep dump — agent reads 50 results to find 3

BM25-ranked top results with relevance scores

~90% fewer tokens

Understand vault structure

Agent reads files one by one (N calls × M tokens each)

One vault_themes() call returns clustered map

~95% fewer tokens

Tokens = API cost, context window space, and latency. Fewer tokens means faster, cheaper, smarter agents.


Three Things No Other MCP Can Do

🎨 Canvas Tools

The agent thinks in graphs. The tool thinks in pixels.

AI agents create, read, modify, and re-layout JSON Canvas files without touching a single coordinate. The agent describes a semantic graph. VaultForge calculates all geometry using dagre — the same Sugiyama layout engine behind Mermaid and React Flow.

canvas_create — describe nodes and edges, get a fully laid-out .canvas file:

Agent sends:                              Obsidian renders:
                                          
  nodes:                                  ┌───────────┐
    - API Gateway                         │    API    │───┐
    - Auth Service                        │  Gateway  │   │
    - Database                            └───────────┘   │
    - Cache                               ┌───────────┐   │   ┌───────────┐
  edges:                                  │   Auth    │───┼──▶│ Database  │
    - API Gateway → Auth Service          │  Service  │   │   └───────────┘
    - API Gateway → Cache                 └───────────┘   │
    - Auth Service → Database                             │   ┌───────────┐
    - Cache → Database                                    └──▶│   Cache   │
  layout: { direction: "LR" }                                 └───────────┘

canvas_read — semantic graph, not raw JSON:

Instead of:  {"id":"231bf38f","x":-635,"y":-420,"width":250,"height":70,...}
Agent gets:  { label: "AXON", connections: ["Strategy", "AWS", "Resistance"] }

A typical canvas with 15 nodes returns ~200 tokens as a semantic graph vs ~2,000+ tokens as raw JSON Canvas. The agent gets the same information at 10% of the cost.

canvas_patch — modify with relative positioning:

add_nodes: [{ label: "New Module", near: "API Gateway", position: "below" }]
remove_nodes: ["Deprecated Service"]  →  cascade-removes all connected edges

canvas_relayout — fix a messy canvas with one call. Preview before committing.


Not grep. Elasticsearch-grade.

Orama BM25-ranked search with typo tolerance, stemming (26 languages), and field boosting. No ML, no API keys, no internet.

smart_search("stripe webhook")

  → Stripe-Webhooks.md             score: 0.92
    "...webhook endpoint configuration for handling Stripe events..."
  
  → Refactor-Prompts.md            score: 0.61
    "...refactor the Stripe integration to use webhook signatures..."

vs search_content("stripe webhook")
  → Returns EVERY file containing "stripe", unranked, no scoring

Unranked grep forces the agent to consume every result to find relevance. BM25 puts the answer at the top. Fewer results read = fewer tokens burned = faster, cheaper responses.

Field boosting: title (3×) > tags (2.5×) > headings (2×) > content (1×).

Persistent index at .vaultforge/search-index.json — survives restarts.


🧠 Vault Intelligence

Your vault has folders. Now it has a map.

Files land where the energy of the moment puts them. Themes bleed across folders — "SpecForge" ends up in Projetos/, AI/prompts/, Content/, and Empresas/. Nobody maintains a perfect taxonomy.

vault_themes — scans every file, extracts distinctive terms via TF-IDF, clusters by similarity:

{
  "themes": [
    {
      "label": "SpecForge Frontend",
      "key_terms": ["impl", "dashboard", "widget"],
      "files": 12,
      "folders": ["32-AI/prompts/specforge"],
      "coherence": 0.89
    },
    {
      "label": "Content Strategy",
      "files": 6,
      "folders": ["80-Content", "70-Empresas"],
      "cross_folder": true
    }
  ],
  "orphans": 5,
  "cross_folder_warnings": 3
}

Without this, an agent needs to read_note on every file individually to understand vault structure — hundreds of tool calls, thousands of tokens. One vault_themes() call replaces all of them.

vault_suggest — actionable reorganization from the atlas:

{
  "suggestions": [
    { "type": "consolidate", "action": "Move Launch-Strategy.md → 80-Content/" },
    { "type": "create_moc", "action": "Create MOC-SpecForge-Frontend.md linking 12 files" },
    { "type": "archive", "action": "Move 8 stale files to 90-Archive/" }
  ]
}

The full workflow:

"Organize my vault"
  → vault_themes()      maps 179 files into 15 themes
  → vault_suggest()     generates 20 reorganization actions  
  → human approves      "do it, skip the archive stuff"
  → batch execution     moves files, creates MOCs
  → canvas_create()     visual theme map in Obsidian

The vault maps itself.


All Tools

Notes (6)

Tool

What it does

read_note

Read content + metadata. Fuzzy path resolution.

write_note

Create or overwrite.

edit_note

In-place find and replace. Exact match, must be unique.

edit_regex

Regex find-and-replace. Single file or grep-sub across vault. Capture groups, dry run.

append_note

Append to existing, or create if missing.

delete_note

Move to .trash (safe) or permanent. Optional cleanup_empty_parents removes empty parent dirs.

Search & Discovery (8)

Tool

What it does

smart_search

BM25-ranked. Typo tolerance, field boosting, snippets.

search_reindex

Force re-index after bulk operations.

search_vault

Fast filename/path search from in-memory index.

search_content

Full-text grep. For exact/literal matches.

list_dir

Directory listing with created/modified timestamps. Sort by name, date, or size.

recent_notes

Recently modified files. Instant from index.

daily_note

Today's daily note (or any date).

vault_status

File counts, types, index health.

Files (3)

Tool

What it does

batch_rename

Rename/move files. Explicit pairs or regex patterns. Auto-updates wikilinks. Dry run default.

delete_folder

Delete empty or non-empty directories. Moves to .trash by default. Safety guards for .obsidian, .git, .trash.

prune_empty_dirs

Find and remove all empty directories. Dry run default. Bottom-up pruning handles cascading empty dirs.

Tool

What it does

update_links

Update all wikilinks across vault after moving/renaming a file. Dry run default.

backlinks

Find all files that link to a given file. Line numbers, context, embed detection.

Metadata (1)

Tool

What it does

frontmatter

Read/write/merge YAML frontmatter as structured data. No string parsing needed.

Canvas (4)

Tool

What it does

canvas_create

Semantic graph → auto-laid-out .canvas via dagre.

canvas_read

Canvas → semantic graph (labels + connections, not coordinates).

canvas_patch

Add/remove/update with relative positioning + fuzzy matching.

canvas_relayout

Re-layout existing canvas. Preview before committing.

Intelligence (2)

Tool

What it does

vault_themes

TF-IDF theme extraction + clustering. Vault atlas with cross-folder warnings.

vault_suggest

Reorganization engine: consolidate, create MOCs, archive stale, triage orphans.

Batch (1)

Tool

What it does

batch

Execute multiple operations — read, write, edit, regex, rename, frontmatter, delete. Delete ops support cleanup_empty_parents.


Install

Prerequisites

Obsidian app is not required. VaultForge operates directly on the filesystem. If Obsidian is open, it picks up changes in real time.

Claude Desktop (one-click)

Windows⬇ Download vaultforge.mcpb — open the file, enter your vault path, done.

macOS:

curl -fsSL https://github.com/blacksmithers/vaultforge/releases/latest/download/vaultforge.mcpb -o /tmp/vaultforge.mcpb && open /tmp/vaultforge.mcpb

Linux:

curl -fsSL https://github.com/blacksmithers/vaultforge/releases/latest/download/vaultforge.mcpb -o /tmp/vaultforge.mcpb && xdg-open /tmp/vaultforge.mcpb

Claude Code

claude mcp add vaultforge -- npx -y @blacksmithers/vaultforge /path/to/your/vault

VS Code / Cursor / Windsurf

Add to your MCP settings JSON (.vscode/mcp.json, .cursor/mcp.json, or equivalent):

{
  "servers": {
    "vaultforge": {
      "command": "npx",
      "args": ["-y", "@blacksmithers/vaultforge", "/path/to/your/vault"]
    }
  }
}

Any MCP client

Use this universal pattern — any client that supports MCP stdio transport will work:

  • Command: npx

  • Args: ["-y", "@blacksmithers/vaultforge", "/path/to/your/vault"]

npm install -g @blacksmithers/vaultforge

Edit claude_desktop_config.json:

OS

Config file location

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

Linux

~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "vaultforge": {
      "command": "vaultforge",
      "args": ["/path/to/your/vault"]
    }
  }
}

Verify

Ask your AI assistant: "List the files in my vault" — if it responds with your vault contents, you're connected.


Under the Hood

Three Engines, One Index

@orama/orama (BM25 index — single source of truth)
  ├── smart_search      query-driven    "find files about X"
  ├── vault_themes      corpus-driven   "what themes exist?"
  └── vault_suggest     action-driven   "how should I reorganize?"

@dagrejs/dagre (Sugiyama graph layout)
  ├── canvas_create     semantic graph → positioned canvas
  ├── canvas_patch      relative edits → absolute coordinates
  └── canvas_relayout   messy canvas → optimized layout

Wikilink engine (zero dependencies)
  ├── update_links      safe moves with automatic link repair
  ├── backlinks         impact analysis before moves/deletes
  └── batch_rename      rename + link update in one operation

Dependencies

Two packages. Both MIT, TypeScript-native, zero sub-dependencies:

Package

Purpose

Size

@dagrejs/dagre

Sugiyama graph layout

~15KB

@orama/orama

BM25 search engine

~2KB core

Architecture

src/
├── tools/
│   ├── notes/                  read, write, edit, edit_regex, append, delete
│   │   └── edit-regex.ts             regex find-and-replace
│   ├── files/                  rename, move, directory management
│   │   ├── batch-rename.ts           rename/move with link updates
│   │   ├── delete-folder.ts          delete directories with safety guards
│   │   └── prune-empty-dirs.ts       find and remove empty directories
│   ├── links/                  wikilink management
│   │   ├── link-utils.ts             shared wikilink regex engine
│   │   ├── update-links.ts           fix links after moves
│   │   └── backlinks.ts              impact analysis
│   ├── metadata/               frontmatter operations
│   │   └── frontmatter.ts            read/write/merge YAML frontmatter
│   ├── search/                 search_vault, search_content, list_dir, recent, daily, status
│   │   ├── smart-search.ts           BM25 search via Orama
│   │   ├── search-reindex.ts         full/incremental re-index
│   │   ├── orama-engine.ts           Orama wrapper + persistence
│   │   └── markdown-parser.ts        strip md, extract frontmatter/headings
│   ├── intelligence/           vault analysis + reorganization
│   │   ├── vault-themes.ts           TF-IDF extraction + clustering
│   │   └── vault-suggest.ts          suggestions + batch execution
│   ├── canvas/                 JSON Canvas (jsoncanvas.org spec v1.0)
│   │   ├── canvas-create.ts
│   │   ├── canvas-read.ts
│   │   ├── canvas-patch.ts
│   │   ├── canvas-relayout.ts
│   │   ├── layout-engine.ts          dagre wrapper + edge side calc
│   │   ├── canvas-utils.ts           ID gen, text height, fuzzy match
│   │   └── types.ts
│   └── batch/                  multi-operation execution

Roadmap

What's coming next. Ordered by priority — community input shapes the sequence.

v0.6.0 — Vault Graph & Tags

  • vault_graph — Export the vault's link graph as a JSON adjacency list. Nodes = files, edges = wikilinks. Enables agents to reason about knowledge structure, find clusters, detect orphans, and identify bridge notes. Output compatible with D3, Cytoscape, or canvas_create for visual rendering.

  • tag_search — Search by YAML frontmatter tags, separate from content search. Filter by tag combinations (tag:draft AND tag:specforge). Returns files with matching tags plus their frontmatter metadata.

  • diff_note — Compare two notes (or two versions of the same note) and return a structured diff. Useful for agents reviewing changes, merging edits, or auditing vault history.

v0.7.0 — Template Engine & Smart Create

  • template_create — Create notes from templates with variable substitution ({{date}}, {{title}}, {{tags}}). Supports custom template folders. The agent describes intent, the tool handles boilerplate.

  • smart_create — AI-aware note creation. Analyzes vault themes and suggests optimal location, tags, and links for new notes. "Write about X" → creates the note in the right folder with relevant backlinks.

v0.8.0 — Performance at Scale

  • Large vault optimization (10k+ files) — incremental indexing, lazy loading, memory-mapped file access

  • Parallel batch operations where order independence allows

  • Index compression for faster startup on large vaults

  • Benchmark suite with reproducible performance targets

v1.0.0 — Stability & Ecosystem

  • Comprehensive test suite with >90% coverage

  • Stable API — no breaking changes without major version bump

  • Plugin ecosystem hooks — allow community extensions

  • Published to MCP registry

  • Obsidian community plugin (optional companion for enhanced integration)

Community-Driven

Open an issue tagged roadmap to propose features. The most-requested items move up the queue. This is an open forge — the community shapes the steel.


The Forge is Open

VaultForge is the first open-source tool from the Blacksmithers — a community of builders who forge tools that build things.

We don't wrap APIs and call it innovation. We build real engines — BM25 search, graph layout, TF-IDF clustering — because the tools AI agents use should be as rigorous as the agents themselves.

If that resonates, you're already one of us.

Contributing

Open an issue first to discuss changes. PRs welcome — especially for:

  • Semantic similarity search (embedding-based, complementing BM25)

  • Canvas layout algorithms beyond Sugiyama (force-directed, circular)

  • Performance improvements for large vaults (10k+ files)

  • Windows-specific edge cases and path handling

  • New language stemmers for smart search

Community

License

MITSolutions Forge LTDA


A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
13Releases (12mo)

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/blacksmithers/vaultforge'

If you have feedback or need assistance with the MCP directory API, please join our Discord server