obsidian-mcp
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
Obsidian muss laufen. Das CLI kommuniziert über IPC mit der laufenden App; es liest den Vault nicht direkt von der Festplatte.
Registrieren Sie das CLI-Binary. In Obsidian: Einstellungen → Allgemein → Befehlszeilenschnittstelle → CLI registrieren. Obsidian fügt
obsidianzu IhremPATHhinzu.Überprüfung:
obsidian versiongibt 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 buildRegistrieren 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 übernpx. Wenn Sie dieses Repo geforkt haben und diesen Ablauf unter Ihrem eigenen Scope wünschen, ändern Sienameinpackage.jsonzu@<ihr-npm-benutzername>/obsidian-mcp, dannnpm publish.
Sobald veröffentlicht, ist kein Klonen oder Bauen erforderlich:
claude mcp add -s user obsidian -- npx -y @yuchichang/obsidian-mcpOder 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Frontmatter-Eigenschaften
Tool | Umschließt |
|
|
|
|
|
|
Suche
Tool | Umschließt |
|
|
|
|
Tags & Links
Tool | Umschließt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tägliche Notizen
Tool | Umschließt |
|
|
|
|
|
|
Plugins
Tool | Umschließt |
|
|
|
|
|
|
|
|
Entwickler / Erweitert
Tool | Umschließt | Hinweise |
|
| ⚠️ Führt beliebiges JS in Obsidian aus. Als destruktiv behandeln. |
|
| Gibt base64 PNG zurück. |
|
| |
|
|
Meta
Tool | Umschließt |
|
|
|
|
Konventionen
Ziel einer Notiz — Tools, die auf Dateien abzielen, akzeptieren entweder:
file— Notizname im Wikilink-Stil (z. B."Meine Notiz"), oderpath— 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 |
| Entfernt Daten (insbesondere mit |
| Benennt um + schreibt Wikilinks im gesamten Vault um. |
| Entfernt Frontmatter-Daten. |
| Schreibt Tags in allen Notizen massenhaft um. |
| Gewährt einem Community-Plugin Code-Ausführung. |
| Führt beliebiges JavaScript in Obsidian aus. |
Wie der Schutz funktioniert:
MCP-Elicitation (bevorzugt). Wenn der verbundene Client die
elicitation-Fähigkeit unterstützt (Claude Code tut dies), sendet der Server eineelicitation/create-Anfrage und der Client zeigt dem Benutzer eine Fortfahren?-Aufforderung mit der Aktion und dem Ziel an. Nuraccept + confirm: truefährt fort.Expliziter
confirm: true-Parameter. Das Eingabeschema jedes sensiblen Tools enthält ein optionalesconfirm: boolean. Das Übergeben vonconfirm: trueüberspringt die Elicitation-Aufforderung – verwenden Sie dies nur, wenn der Aufrufer bereits die Zustimmung des Benutzers eingeholt hat.Ablehnungs-Fallback. Wenn der Client keine Elicitation unterstützt und
confirm: truenicht bereitgestellt wurde, gibt das Tool einisError-Ergebnis zurück, das die Aktion benennt und den Aufrufer anweist, es mitconfirm: trueerneut zu versuchen.
Bypass für Batch / Automatisierung
OBSIDIAN_MCP_AUTO_CONFIRM=1Setzen 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 |
|
Um sicher zu bleiben, stückelt der Server lange Schreibvorgänge automatisch:
Tool | Stückelungsstrategie |
| Erstes Stück über |
| Sequenzielle |
|
|
| Löst den Pfad der täglichen Notiz auf, dann stückweises |
| 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=4000Wenn 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 testFunktionsweise
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
Obsidian CLI: https://obsidian.md/help/cli
MCP-Spezifikation: https://modelcontextprotocol.io
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