Skip to main content
Glama
yuchi-chang

obsidian-mcp

by yuchi-chang

obsidian-mcp

MCP-Server, der das offizielle Obsidian-CLI umschließt, sodass ein LLM-Agent eine laufende Obsidian-Instanz steuern kann – Notizen lesen/schreiben, suchen, Frontmatter verwalten, Links navigieren, Plugins ausführen und mehr.

Dieser Server ist ein schlanker, umfassender Wrapper. Jedes Tool entspricht 1:1 einem obsidian-CLI-Befehl.

Voraussetzungen

  1. Obsidian muss laufen. Das CLI kommuniziert über IPC mit der laufenden App; es liest den Vault nicht direkt von der Festplatte.

  2. Registrieren Sie das CLI-Binary. In Obsidian: Einstellungen → Allgemein → Befehlszeilenschnittstelle → CLI registrieren. Obsidian fügt obsidian zu Ihrem PATH hinzu.

  3. Überprüfung: obsidian version gibt die CLI-Version aus.

Installation

Zwei Wege, je nachdem, ob Sie es selbst bauen oder eine vorveröffentlichte Version von npm beziehen möchten.

Option A — Klonen & bauen (funktioniert sofort)

Klonen Sie das Repo und bauen Sie es lokal, dann verweisen Sie Claude Code auf die gebaute Datei:

git clone https://github.com/yuchichang/obsidian-mcp.git
cd obsidian-mcp
npm install
npm run build

Registrieren Sie es bei Claude Code (ein Befehl):

# Add (user scope — available across all projects)
claude mcp add -s user obsidian -- node /absolute/path/to/obsidian-mcp/dist/index.js

# Remove
claude mcp remove obsidian

# List configured servers
claude mcp list

-s user registriert es für Ihr gesamtes Benutzerkonto. Verwenden Sie -s project, um es stattdessen in die .mcp.json des Repos zu committen, oder -s local nur für das aktuelle Projekt (Standard).

Oder schreiben Sie es manuell in die .mcp.json:

{
  "mcpServers": {
    "obsidian": {
      "command": "node",
      "args": ["/absolute/path/to/obsidian-mcp/dist/index.js"]
    }
  }
}

Option B — Installation von npm (kein Build erforderlich)

Voraussetzung: Das Paket muss bereits auf npm veröffentlicht sein. Der Maintainer veröffentlicht einmal über npm publish; alle nachfolgenden Benutzer erhalten es automatisch über npx. Wenn Sie dieses Repo geforkt haben und diesen Ablauf unter Ihrem eigenen Scope wünschen, ändern Sie name in package.json zu @<ihr-npm-benutzername>/obsidian-mcp, dann npm publish.

Sobald veröffentlicht, ist kein Klonen oder Bauen erforderlich:

claude mcp add -s user obsidian -- npx -y @yuchichang/obsidian-mcp

Oder in .mcp.json / claude_desktop_config.json von Claude Desktop:

{
  "mcpServers": {
    "obsidian": {
      "command": "npx",
      "args": ["-y", "@yuchichang/obsidian-mcp"]
    }
  }
}

Überschreiben des CLI-Pfads

Wenn obsidian nicht im PATH ist, setzen Sie die Umgebungsvariable OBSIDIAN_CLI. Funktioniert mit beiden Installationspfaden:

{
  "mcpServers": {
    "obsidian": {
      "command": "node",
      "args": ["/absolute/path/to/obsidian-mcp/dist/index.js"],
      "env": {
        "OBSIDIAN_CLI": "C:/Users/you/AppData/Local/Obsidian/obsidian.cmd"
      }
    }
  }
}

Tools

Vault & Dateien

Tool

Umschließt

obsidian_list_files

obsidian files

obsidian_list_folders

obsidian folders

obsidian_read_note

obsidian read

obsidian_get_metadata

obsidian file

obsidian_create_note

obsidian create

obsidian_append_note

obsidian append

obsidian_prepend_note

obsidian prepend

obsidian_move_note

obsidian move

obsidian_delete_note

obsidian delete (permanent-Flag unterstützt)

Frontmatter-Eigenschaften

Tool

Umschließt

obsidian_get_properties

obsidian properties

obsidian_set_property

obsidian property:set

obsidian_remove_property

obsidian property:remove

Suche

Tool

Umschließt

obsidian_search

obsidian search

obsidian_search_context

obsidian search:context

Tool

Umschließt

obsidian_list_tags

obsidian tags

obsidian_files_with_tag

obsidian tag

obsidian_rename_tag

obsidian tags:rename

obsidian_get_links

obsidian links

obsidian_get_backlinks

obsidian backlinks

obsidian_list_unresolved

obsidian unresolved

obsidian_list_orphans

obsidian orphans

Tägliche Notizen

Tool

Umschließt

obsidian_daily_read

obsidian daily:read

obsidian_daily_append

obsidian daily:append

obsidian_daily_path

obsidian daily:path

Plugins

Tool

Umschließt

obsidian_list_plugins

obsidian plugins

obsidian_enable_plugin

obsidian plugin:enable

obsidian_disable_plugin

obsidian plugin:disable

obsidian_reload_plugin

obsidian plugin:reload

Entwickler / Erweitert

Tool

Umschließt

Hinweise

obsidian_eval

obsidian eval

⚠️ Führt beliebiges JS in Obsidian aus. Als destruktiv behandeln.

obsidian_dev_screenshot

obsidian dev:screenshot

Gibt base64 PNG zurück.

obsidian_dev_errors

obsidian dev:errors

obsidian_dev_console

obsidian dev:console

Meta

Tool

Umschließt

obsidian_version

obsidian version

obsidian_help

obsidian help

Konventionen

  • Ziel einer Notiz — Tools, die auf Dateien abzielen, akzeptieren entweder:

    • file — Notizname im Wikilink-Stil (z. B. "Meine Notiz"), oder

    • path — Vault-relativer Dateipfad (z. B. "Ordner/Meine Notiz.md").

  • Multi-Vault-Setups — Jedes Tool akzeptiert einen optionalen vault-Parameter. Wenn weggelassen, wird der zuletzt fokussierte Vault verwendet.

  • Ausgabeformat — Listen-/Such-/Metadaten-Tools verwenden standardmäßig JSON für einfaches maschinelles Parsen.

Sensible Operationen & Benutzerbestätigung

Die folgenden Tools sind durch einen Benutzerbestätigungsschritt geschützt:

Tool

Grund

obsidian_delete_note

Entfernt Daten (insbesondere mit permanent: true).

obsidian_move_note

Benennt um + schreibt Wikilinks im gesamten Vault um.

obsidian_remove_property

Entfernt Frontmatter-Daten.

obsidian_rename_tag

Schreibt Tags in allen Notizen massenhaft um.

obsidian_enable_plugin

Gewährt einem Community-Plugin Code-Ausführung.

obsidian_eval

Führt beliebiges JavaScript in Obsidian aus.

Wie der Schutz funktioniert:

  1. MCP-Elicitation (bevorzugt). Wenn der verbundene Client die elicitation-Fähigkeit unterstützt (Claude Code tut dies), sendet der Server eine elicitation/create-Anfrage und der Client zeigt dem Benutzer eine Fortfahren?-Aufforderung mit der Aktion und dem Ziel an. Nur accept + confirm: true fährt fort.

  2. Expliziter confirm: true-Parameter. Das Eingabeschema jedes sensiblen Tools enthält ein optionales confirm: boolean. Das Übergeben von confirm: true überspringt die Elicitation-Aufforderung – verwenden Sie dies nur, wenn der Aufrufer bereits die Zustimmung des Benutzers eingeholt hat.

  3. Ablehnungs-Fallback. Wenn der Client keine Elicitation unterstützt und confirm: true nicht bereitgestellt wurde, gibt das Tool ein isError-Ergebnis zurück, das die Aktion benennt und den Aufrufer anweist, es mit confirm: true erneut zu versuchen.

Bypass für Batch / Automatisierung

OBSIDIAN_MCP_AUTO_CONFIRM=1

Setzen Sie diese Umgebungsvariable (im env-Block Ihres MCP-Clients), um jede Bestätigungsaufforderung zu überspringen. Nur in vollständig vertrauenswürdigen Automatisierungskontexten verwenden.

Lange Inhalte & argv-Limits

Das Obsidian-CLI unterstützt (noch) nicht das Lesen von Parameterwerten von stdin oder aus Dateien – jeder Wert wird über die Befehlszeile übertragen. Das kollidiert mit Plattform-Limits:

Plattform

Praktisches Befehlszeilen-Limit

Windows (cmd.exe)

~8.191 Zeichen insgesamt

macOS / Linux

ARG_MAX (typischerweise 128 KB – 2 MB)

Um sicher zu bleiben, stückelt der Server lange Schreibvorgänge automatisch:

Tool

Stückelungsstrategie

obsidian_create_note

Erstes Stück über create, verbleibende Stücke über append.

obsidian_append_note

Sequenzielle append-Aufrufe.

obsidian_prepend_note

prepend-Aufrufe in umgekehrter Reihenfolge, damit die endgültige Reihenfolge erhalten bleibt.

obsidian_daily_append

Löst den Pfad der täglichen Notiz auf, dann stückweises append.

obsidian_eval

Nicht gestückelt — JS kann nicht geteilt werden. Gibt einen Fehler zurück, der den Workaround über Skript-in-Notiz vorschlägt.

Splits erfolgen nach Möglichkeit an Zeilengrenzen; zu lange einzelne Zeilen fallen auf UTF-8-sichere Zeichengrenzen zurück. Der wieder zusammengesetzte Inhalt ist byte-identisch mit dem Original.

Konfigurieren Sie den Byte-Schwellenwert pro Aufruf (Standard: 6.000 unter Windows, 100.000 anderswo):

OBSIDIAN_MCP_MAX_ARG_BYTES=4000

Wenn ein Stück in der Mitte eines mehrteiligen Schreibvorgangs fehlschlägt, gibt der Server isError mit einer klaren Meldung zurück, die angibt, welche Stücke auf der Festplatte gelandet sind, damit der Aufrufer wiederherstellen kann.

Entwicklung

npm run dev      # tsc --watch
npm run inspect  # launch MCP Inspector against the built server
node scripts/smoke-test.mjs   # initialize + tools/list smoke test

Funktionsweise

runObsidian() (src/exec.ts) maskiert Argumente für die Shell, ruft das obsidian-Binary über child_process.exec auf und parst stdout. Die meisten Lese-Tools fordern format=json an; Ergebnisse werden für Clients, die strukturierte Tool-Ausgaben konsumieren, in structuredContent geparst, während sie weiterhin eine Textdarstellung in content zurückgeben.

Die Tool-Registrierung befindet sich in src/tools.ts — das Hinzufügen eines neuen umschlossenen Befehls ist dort ein einzelner Eintrag.

Referenz

Install Server
A
license - permissive license
B
quality
C
maintenance

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/yuchi-chang/obsidian-mcp'

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