vault-mcp
vault-mcp
Englisch | Português
Langzeitgedächtnis für einen Coding-Agenten: Er durchsucht deinen Obsidian-Vault, bevor er antwortet, zitiert path:line und zeichnet auf, was er gelernt hat, ohne zu fragen, wo er es speichern soll.
MCP-Server zum Suchen, Lesen und Schreiben eines Obsidian-Wissensvaults. Abruf per lexikalischem BM25 plus einem Wiki-Link-Hop; intelligente Erfassung von Erkenntnissen, die zwischen dem Anlegen einer neuen Notiz und dem Anhängen an eine bestehende entscheidet; automatische Weitergabe an die Domain-MOC und die Tagesnotiz sowie an den Wissensindex, wenn die Domain neu ist. Verschieben, Umbenennen, Promoten, Archivieren und Löschen einer Notiz laufen ebenfalls über den Server, sodass die Links und die MOC-Einträge korrekt bleiben, statt still zu verrotten.
Beispiel
Echte Ausgabe der beiden Tools, die das Projekt definieren, ausgeführt gegen den Test-Vault dieses Repositorys.
Der Server antwortet auf Portugiesisch: Der Vault, den er bedient, ist auf Portugiesisch geschrieben, und das gilt auch für seine Tool-Antworten. Die Ausgabe unten ist wörtlich, nicht übersetzt.
vault_search liefert Snippets, die bereits adressiert sind — caminho:linha (path:line) ist das, was der Agent zitieren soll:
2 resultado(s) para "retry backoff". Cite `caminho:linha` ao usar qualquer trecho abaixo. Cada trecho da nota vem prefixado com `> `; linhas sem esse prefixo são deste servidor, nunca conteúdo do vault.
02-wiki/nestjs/bullmq-worker.md:13 — Contexto > Retry e backoff (score 7.94)
> ### Retry e backoff
>
> Quando um job falha, o BullMQ aplica a política de retry configurada em `queueOptions`. Para revisar o fluxo de autenticação usado antes de cada retry, veja [[auth-guard]];
> a mesma referência [[auth-guard]] documenta como o token é revalidado a cada nova tentativa de processamento.
02-wiki/nestjs/auth-guard.md:11 — Contexto (score 3.18, via grafo)
> ## Contexto
>
> A API precisava de um mecanismo central de autenticação e autorização, aplicado de forma consistente em todos os módulos, sem repetir lógica de validação de JWT em cada controller.auth-guard passt auf keinen Begriff in der Abfrage. Es wird durch einen Wiki-Link-Hop von der Notiz hereingezogen, die gepasst hat, mit gedämpftem Score — das markiert via grafo (über den Graphen).
vault_learn entscheidet selbst, ob eine Notiz erstellt oder an eine bestehende angehängt wird, schreibt bis zu vier Dateien und committet einmal:
Aprendizado registrado em nota NOVA: 02-wiki/concorrencia/timeout-de-fila-libera-a-fila-nao-o-chamador.md
Motivo: sem overlap de tag nem de domínio
Propagado para: 02-wiki/concorrencia/concorrencia-moc.md, 00-index/index-knowledge.md, 04-daily/2026-08-26.md
Commit: sim
Diff (mostre ao usuário):
--- /dev/null
+++ b/02-wiki/concorrencia/timeout-de-fila-libera-a-fila-nao-o-chamador.md
@@ -0,0 +1,15 @@
+---
+tipo: wiki
+tags: [fila]
+criado: 2026-08-26
+---
+
+# Timeout de fila libera a fila, não o chamador
+
+Um slot que expira solta a PRÓXIMA escrita; a chamada original continua esperando o resultado real dela. Resolver a promessa do chamador no timeout reportaria um desfecho que ninguém observou.
+
+**Contexto:** Serializando as tools de escrita do vault-mcp contra si mesmas.
+
+## Solução
+
+## Exemplo
--- /dev/null
+++ b/02-wiki/concorrencia/concorrencia-moc.md
@@ -0,0 +1,16 @@
+---
+tipo: moc
+tags: [concorrencia]
+criado: 2026-08-26
+atualizado: 2026-08-26
+---
+
+# Concorrencia — Mapa de Conteúdo
+
+## Notas
+
+- [[timeout-de-fila-libera-a-fila-nao-o-chamador]] — Um slot que expira solta a PRÓXIMA escrita; a chamada original continua esperando o resultado real dela.
+
+## Relacionados
+
+- [[../../00-index/index-knowledge|índice de conhecimento]]
--- a/00-index/index-knowledge.md
+++ b/00-index/index-knowledge.md
@@ -1,6 +1,6 @@
---
tipo: moc
-atualizado: 2026-02-01
+atualizado: 2026-08-26
---
# Índice de Conhecimento
@@ -9,6 +9,7 @@
- [[../02-wiki/nestjs/nestjs-moc|nestjs]] — NestJS, providers, guards, filas
- [[../02-wiki/docker/docker-moc|docker]] — Dockerfiles, multi-stage, compose
+- [[../02-wiki/concorrencia/concorrencia-moc|concorrencia]] — Um slot que expira solta a PRÓXIMA escrita; a chamada original continua esperando o resultado real dela.
## Convenções
--- /dev/null
+++ b/04-daily/2026-08-26.md
@@ -0,0 +1,10 @@
+---
+tipo: daily
+criado: 2026-08-26
+---
+
+# 2026-08-26
+
+## Capturas
+
+- 11:12 [[timeout-de-fila-libera-a-fila-nao-o-chamador]] (aprendizado)Vier Dateien, ein docs(vault): {titulo}-Commit — das Rückgängigmachen des gesamten Lernens ist git revert darauf. Die Domain concorrencia existierte nicht, weshalb der Aufruf confirm_novo_dominio: true trug, die MOC von Grund auf neu erstellt wurde und der Wissensindex eine Zeile dazugewann, die darauf zeigt.
Related MCP server: mcp-obsidian-vault
Installation
Veröffentlicht als @andreymudri/vault-mcp, sodass nichts geklont werden muss, um es auszuführen:
npx @andreymudri/vault-mcp # no install; npm fetches and runs it
npm i -g @andreymudri/vault-mcp # or install once, then `vault-mcp`Der Scope ist keine Dekoration: Das nackte vault-mcp auf npm ist ein 443-Byte-Namespace-Platzhalter eines anderen Autors, also führt npx vault-mcp deren Paket aus, nicht dieses. Der Befehl innerhalb des Scopes behält den kurzen Namen — npx @andreymudri/vault-mcp löst das bin aus dem Paket heraus auf.
Aus einem Klon, um es zu entwickeln:
npm install
npm run build
npm testNode >= 20, um den Server AUSZUFÜHREN (
dist/ist reines JavaScript), bei jedem Push durch dencompat-CI-Job verifiziert, der auf 20 baut und einen Smoke-Start machtDie Suite zu starten braucht mehr:
test/frontmatter.test.tsführt das echteparseFilein einem Kindprozess aus, der auf eine Zeitzone gepinnt ist, und dieses Kind istnode <file>.ts— es hängt von Nodes eigenem Type-Stripping ab. CI pinnt 26, die Version, auf der entwickelt wirdDie Suite hat 19 Dateien mit 1.155 Tests und dauert ~10 s.
npm testführt zuerst den Typecheck (pretest) aus und begrenzt die Suite über die Uhr: Eine hängende Suite beendet sich mit 124, nie ohne Exit-Code
Konfiguration
Der Vault wird über eine Umgebungsvariable übergeben:
VAULT_PATH="/absolute/path/to/vault" npx @andreymudri/vault-mcpAus einem Klon dasselbe ohne die Registry:
VAULT_PATH="/absolute/path/to/vault" node /absolute/path/to/vault-mcp/dist/server/index.jsErsetze /absolute/path/to/vault durch das Wurzelverzeichnis deines Vaults. VAULT_PATH ist Pflicht. Wenn es nicht gesetzt ist oder kein Verzeichnis ist, beendet sich der Server mit Code 1 und schreibt den Grund nach stderr.
Registrieren mit Claude Code
Füge den MCP hinzu mit:
claude mcp add vault --scope user \
-e "VAULT_PATH=/absolute/path/to/vault" \
-e "VAULT_AUTO_PUSH=1" -- \
npx -y @andreymudri/vault-mcpAus einem Klon setze stattdessen node /absolute/path/to/vault-mcp/dist/server/index.js nach dem --.
Der Pfad des Vaults ist absolut und geht in -e als einzelnes KEY=value-Paar — mit Anführungszeichen um das gesamte Paar, was einen Vault mit Leerzeichen im Pfad funktionieren lässt. Es gibt keine Variablenexpansion in JSON, also wird ein relativer Pfad hier zu einem Server, der nicht startet. Das -y bei npx ist für einen stdio-Server wichtig: Ohne es kann der erste Lauf an einem Installationsprompt auf einem Terminal stoppen, das niemand beobachtet.
--scope user registriert in ~/.claude.json und macht die Tools in jedem Projekt verfügbar, was der Punkt ist: Der Vault antwortet über Entscheidungen und Muster, während du in einem anderen Repository arbeitest. Ohne das Flag ist der Standard local (nur das aktuelle Verzeichnis). Prüfe mit claude mcp get vault; zum Entfernen claude mcp remove vault -s user.
VAULT_AUTO_PUSH
Jeder Schreibvorgang (vault_write_note, vault_edit_note, vault_learn, vault_move, vault_delete) committet bereits in das Git des Vaults. VAULT_AUTO_PUSH=1 fügt nach dem Commit ein git push hinzu — ohne es bleibt der Commit nur auf der Maschine, und ein Vault mit einem Remote, der an mehreren Orten gepflegt wird, divergiert still.
Standardmäßig aus, weil es das Einzige ist, was dieser Server tut, das die Maschine verlässt. Wenn eingeschaltet:
git pushohne Refspec, dem Upstream des Branches folgend: Ein Repository, das nicht konfiguriert wurde, sagt das, statt dass ihm ein Remote und ein Branch geraten werdenes schlägt immer als Warnung fehl, nie als Rollback. Die Notiz ist bereits auf der Platte und committet; das rückgängig zu machen, weil das Netzwerk ausfiel, wäre der schlechteste verfügbare Tausch. Die Tool-Antwort erhält eine Zeile
Push: sim|não, die nur erscheint, wenn ein Push tatsächlich VERSUCHT wurdeein Remote, der vorausgezogen ist, wird nicht von selbst aufgelöst. Pull, Rebase und Merge schreiben die Wissensbasis des Benutzers um, und das ist seine Entscheidung — kein Nebeneffekt des Speicherns einer Notiz. Die Warnung benennt die Situation und stoppt
auf 30 s begrenzt, mit
GIT_TERMINAL_PROMPT=0: Ein stdio-Server hat kein Terminal, auf dem er eine Credential-Abfrage beantworten könnte, also wäre ein Prompt ein Hängenbleiben. Credentials müssen von einem Helper kommen (zum Beispielgh auth git-credential) oder von einem SSH-Key
Die neun Tools
Tool | Input | Wann aufrufen |
|
| Vor der Beantwortung von Fragen zu Entscheidungen, Mustern, Stolperfallen oder Verlauf des Benutzers. Standardergebnis: 6 Ausschnitte. Notizen in |
|
| Nach |
|
| Inventar von Notizen nach Metadaten (z. B. „welche Projekte sind aktiv?“, „welche Notizen tragen das jwt-Tag?“). Durchsucht keinen Inhalt – verwenden Sie dafür |
|
| Misst, wie vernetzt ein Thema ist, findet die MOC, die eine Notiz indexiert, bewertet die Auswirkungen einer Änderung. Entfernt doppelte Links: Eine Notiz, die das Ziel zweimal verlinkt, zählt als ein Backlink. |
|
| Erstellt oder ersetzt eine ganze Notiz. Frontmatter ist garantiert. Committet automatisch. Um eine Passage zu ändern, verwenden Sie |
|
| Ersetzt eine exakte Passage einer Notiz. Schlägt fehl, wenn die Passage nicht existiert oder mehr als einmal vorkommt – in diesem Fall mehr Kontext in |
|
| Hält eine Erkenntnis während der Sitzung fest (Architekturentscheidung, Muster, Stolperfalle, Falle). Fragen Sie nicht, wo gespeichert werden soll – der Server entscheidet. Zeigt dem Benutzer den Diff. Wenn die Domäne nicht in |
|
| Verschieben, umbenennen, aus |
|
| Löscht eine Notiz und entfernt ihre Zeile aus der MOC. Verweigert ohne Löschen, wenn die Notiz keine committete Version in |
Wie vault_learn entscheidet
vault_learn durchsucht das Thema, indem Titel und Erkenntnis kombiniert werden. Nur Notizen, die bereits in 02-wiki/ sind und über direktes BM25 erreicht werden (nicht durch Graphen-Erweiterung), kommen als Empfänger der Erkenntnis in Frage. Wenn ein solcher Kandidat gefunden wird:
1,8×-Verhältnis: Der beste Treffer muss sich um mindestens den Faktor 1,8 vom Zweitplatzierten abheben. Ohne das besteht Zweifel, und es wird eine neue Notiz erstellt.
Konjunktive Überlappung: Der beste Treffer muss ein Tag MIT DER EINGABE teilen ODER in derselben Domäne liegen (
02-wiki/<dominio>/). Ohne Überlappung wird eine neue Notiz erstellt, selbst wenn der Score hoch ist.
Wenn beide Bedingungen erfüllt sind, hängt es an die bestehende Notiz unter einem Abschnitt ## YYYY-MM-DD — Titel an. Andernfalls erstellt es eine neue Notiz in 02-wiki/<dominio>/.
Die Voreingenommenheit ist beabsichtigt: Im Zweifel eine neue Notiz erstellen, statt eine Erkenntnis am falschen Ort zu vergraben. Notizen später zusammenzuführen ist immer möglich; eine verlorene Erkenntnis wiederzufinden nicht.
Notausgänge
Drei Ausnahmen können das endgültige Ziel ändern:
Titelkollision: Die Duplikatregel sagt nein, aber eine Datei mit diesem Namen existiert bereits (eine ältere Notiz mit demselben Slug). Der Server hängt trotzdem daran an und warnt
anexado em <path> por coincidência de título; a checagem de duplicata não indicou essa nota. Dies bringt eine verlorene Notiz zurück in den Akkumulationsfluss.Das Duplikat-Ziel kann den Text nicht aufnehmen: Der Server entscheidet, an die Kandidatennotiz anzuhängen, aber sie kann nicht bearbeitet werden. Der Server erstellt eine neue Notiz unter einem vom Slug abgeleiteten Namen (z. B.
multi-stage-cache-de-camadas.mdstattmulti-stage.md) und warntnão foi possível anexar em <path>; aprendizado gravado em <outro-path>. Die Warnung nennt den genauen Pfad, in den die Erkenntnis geschrieben wurde.Der Pfad der Notiz ist durch eine Nicht-Notiz blockiert: Der Pfad, in dem die Notiz erstellt würde (z. B.
02-wiki/docker/titulo.md), ist durch eine FIFO, einen Symlink, ein Verzeichnis oder einen Hardlink belegt (etwas, das nicht überschrieben werden kann). Der Server erstellt eine neue Notiz mit Datumssuffix (z. B.titulo-2026-08-25.md) und warnt<path> não é uma nota (link, diretório ou dispositivo); aprendizado gravado em <outro-path>. Die Warnung nennt den genauen Pfad, in den die Erkenntnis geschrieben wurde.
In jedem Fall geht keine Erkenntnis verloren – die Antwort sagt genau, wo die Erkenntnis gelandet ist.
Was vault_learn schreibt
Ein Aufruf von vault_learn kann bis zu 4 Dateien berühren, alle in einem einzigen Commit mit der Nachricht docs(vault): {titulo}:
Die Notiz (
02-wiki/<dominio>/<slug>.md): erstellt oder mit angehängter Erkenntnis. Wird immer geschrieben.Die Domänen-MOC (
02-wiki/<dominio>/<dominio>-moc.md): wird erstellt, wenn sie nicht existiert. Wird bei jedem Aufruf mitatualizado:aktualisiert; mit einer Zeile- [[<slug>]] — <resumo>nur, wenn die Notiz neu ist. Wird nur geschrieben, wenn sich der Inhalt ändert.Wissensindex (
00-index/index-knowledge.md): wird NUR aktualisiert, wenn die Domäne vorher nicht existierte. Wird nur geschrieben, wenn sich der Inhalt ändert.Tagesnotiz (
04-daily/YYYY-MM-DD.md): wird erstellt, wenn sie nicht existiert. Wird mit der Erfassung- HH:MM [[<slug>]] (<tipo>, <projeto>)nur aktualisiert, wenn die Zeile nicht bereits vorhanden ist. Wird nur geschrieben, wenn sich der Inhalt ändert.
Jede Datei wird atomar geschrieben. Wenn die Weitergabe fehlschlägt (z. B. kein Speicherplatz), bleiben die Dateien auf der Festplatte und die Antwort enthält eine Warnung, die das nicht aktualisierte Ziel nennt. Wenn der Git-Commit fehlschlägt (z. B. das Repository existiert nicht), bleiben die Dateien auf der Festplatte geschrieben und die Antwort enthält eine Warnung.
Eine ganze Erkenntnis rückgängig zu machen ist:
git revert <commit-hash>Feinabstimmung des Rankings
Jede Änderung an den folgenden Parametern muss die vollständige Testsuite bestehen: npm test. Jede Konstante ist an einer bestimmten Stelle festgelegt:
FIELD_WEIGHTS(src/index/inverted-index.ts):heading: 3.0, tags: 2.0, prose: 1.0, code: 0.5. Gewichtung der Häufigkeit in jedem Feld. Intest/bm25.test.tsfestgelegt.NOTE_TYPE_WEIGHTS(src/index/inverted-index.ts):moc: 0.3, daily: 0.3. Multipliziert die Endpunktzahl von MOC- oder Tagesnotizen. Sie existiert, weil diese Notizen die Abfrage über kurze Abschnitte wiederholen – ohne den Faktor schlägt der MOC die Notiz, auf die er verweist. Durch eine wörtliche Assertion intest/bm25.test.ts:370-374festgelegt;test/golden-queries.test.tsundtest/retrieval.test.tsschlagen nur fehl, wenn sie entfernt wird, nicht wenn sie neu abgestimmt wird.GRAPH_DAMPING(src/retrieval/budget.ts):0.4. Multipliziert die Punktzahl von Graph-Nachbarn – verknüpfte Notizen. Ein Hop, nicht mehrere. Intest/retrieval.test.ts:522festgelegt.K1undB(src/index/bm25.ts):1.2und0.75. BM25-Parameter. Intest/bm25.test.ts:232-233festgelegt.DUPLICATE_SCORE_RATIO(src/write/learn.ts):1.8. Mindestverhältnis zwischen Top-Treffer und Zweitplatziertem für einen Anhang. Intest/learn.test.ts:336festgelegt.
Ausführen der vollständigen Testsuite:
npm testSicherheitsgarantien
Schreibvorgänge werden verweigert für:
Pfade außerhalb des Vaults
Pfade in
.git/,.obsidian/,node_modules/,_templates/und99-archive/Symlinks (vor dem Schreiben aufgelöst)
Harte Links
Innerhalb einer einzelnen Serverinstanz verschränken sich zwei gleichzeitige vault_learn- oder vault_write_note-Aufrufe nicht von vornherein: Jeder Schreibvorgang wartet, bis der vorherige abgeschlossen ist. Wenn ein Schreibvorgang hängt (z. B. durch blockiertes Git), gibt das 60-Sekunden-Timeout die Warteschlange für den nächsten Schreibvorgang frei, nicht für den Aufrufer – der frühere Aufruf wartet weiterhin auf sein tatsächliches Ergebnis. Sobald der nächste Schreibvorgang beginnt, können beide laufen – der Aufruf erhält eine Warnung, dass die Exklusivität nicht garantiert wurde. Dies schützt NICHT vor gleichzeitigen Schreibvorgängen aus Obsidian, von einer zweiten Serverinstanz oder durch einen git checkout im Vault.
Suche und Abruf
Die Suche führt BM25 über Abschnitte von 2–3 Überschriftsebenen aus und deckt Prosa, Tags und Überschriften mit unterschiedlichen Gewichten ab. Wenn kein Begriff der Abfrage eine Notiz trifft, versucht sie, ähnliche Begriffe vorzuschlagen (Levenshtein-Distanz ≤ 2).
Nach der reinen BM25-Suche erweitert sie um einen Wiki-Link-Hop: Nachbarn der Notizen, die getroffen haben, erben GRAPH_DAMPING mal die Punktzahl der Quelle.
Jedes Ergebnis zitiert caminho:linha (Pfad:Zeile) – das ist die tatsächliche Adresse der Notiz. Notizausschnitte werden in vault_search mit > präfixiert, um Vault-Inhalte von Serverzeilen zu unterscheiden.
Vault-Struktur
Verzeichniskonvention:
00-index/: Wissensindex und Root-MOCs01-raw/: Roherfassungen und Ausschnitte (standardmäßig von der Suche ausgeschlossen)02-wiki/: nach Domäne organisiertes Wissen (nestjs/,docker/usw.)03-projects/: Projektnotizen04-daily/: Tagesnotizen (YYYY-MM-DD.md)_templates/: Obsidian-Vorlagen (bei der Indizierung ignoriert)99-archive/: Archivierte Notizen (lesbar, nicht beschreibbar)
Bekannte Einschränkungen
Drei Dinge, die dieser Server nicht tut, jeweils bewusst gewählt und nicht übersehen:
Das Archivieren in
99-archive/verliert die— Zusammenfassungim Eintrag der Notiz in ihrem Quell-MOC.vault_moveentfernt die Zeile aus dem Ursprungs-MOC und hat kein Ziel-MOC, in das sie wieder eingefügt werden könnte, und das Archiv ist ein schreibfreier Bereich, sodass es keinen Ort gibt, um den Text abzulegen. Das Wiederherstellen erstellt einen nackten- [[slug]], nicht den Eintrag wie er war. Die Alternativen – die Zusammenfassung im Frontmatter der verschobenen Notiz zu speichern oder in einem Nebenindex – kosten beide mehr als der Verlust. Was die Operation niemals tut, ist eine Zusammenfassung zu erfinden: Ohne Ursprungszeile kommt der Eintrag kurz und wahr heraus.Ein Wiki-Link, der nur im Frontmatter existiert, wird von
vault_movenicht umgeschrieben. Kandidaten notizen werden aus dem Textkörper ausgewählt, aus dem auch der Linkgraph aufgebaut wird, sodass eine Notiz, die dieser Filter überspringt, eine Notiz ist, deren Kantenvault_backlinksebenfalls nicht hat. Die Umschreibung zu erweitern, ohne den Scanner zu erweitern, würde die schlimmere Asymmetrie erzeugen: einen korrigierten Link, den kein Lesewerkzeug sehen kann.vault_get_notegibt den Notiztext roh zurück. Das Escapen würde das Lesen-dann-Bearbeiten für genau die Notizen stillschweigend brechen, die ein Steuerzeichen enthalten, davault_edit_noteold_textals exakte Teilzeichenkette der Datei abgleicht. Die Oberflächen, die zeilenweise Angaben machen – dervault_search-Ausschnitt und der Diff – sind bereinigt.
Die sechzehn bisher aufgeworfenen Folgepunkte wurden behoben – einschließlich des aliased Frontmatters, das die
Event-Schleife für ~5 s blockierte, des harten Links, der auf dem Lesepfad indiziert wurde, und der prozessübergreifenden Schreibwettlaufsituation.
docs/followups.md führt das Protokoll: jedes Element mit der Messung, die es charakterisierte, der angewendeten
Korrektur und dem Test, der es festhält, plus die vollständige Begründung hinter jeder obigen Annahme.
Entwicklung
Nach einer Änderung am Code:
npm run build # Compiles TypeScript (src/ only, emits dist/)
npm run typecheck # tsc over src/ AND test/, without emitting
npm test # Runs the typecheck (pretest) and then the vitest suite
npm run smoke # Starts the built dist/ and demands the nine tools over stdio
npm run dev # Watch mode (if needed)Das Build-tsconfig.json deckt nur src/ ab – was emittiert wird, kompiliert keine Tests. tsconfig.test.json
deckt beide mit noEmit ab, und npm's pretest führt es vor der Suite aus: Ein Test-Fake, das nicht mehr
die Schnittstelle erfüllt, die es als implements deklariert, schlägt beim Typprüfen fehl, nicht zur Laufzeit.
Die vollständige Suite dauert ~10 s. Einige Tests verwenden FIFOs, um langlaufende Operationen zu simulieren; alle
öffnen das Schreibende selbst (withFifoWatch), sodass sie in Sekunden fehlschlagen, anstatt sich auf das Timeout des
Runners zu verlassen. npm test läuft über scripts/test.mjs, das die Suite durch die Uhr begrenzt
(15 min, VAULT_MCP_TEST_TIMEOUT_MS) und die Prozessgruppe beendet: Eine hängende Suite wird zu Exit 124,
nicht zu einem unbestimmten Stillstand ohne Exit-Code.
npm run smoke ist die Prüfung, die die Suite nicht sein kann: Sie startet das kompilierte dist/server/index.js als
Programm gegen einen Wegwerf-Vault, führt den MCP-Handshake ab und verlangt, dass tools/list mit
genau den neun Tools antwortet. Sie deckt den Einstiegspunkt ab, der entscheidet, dass es eine Bibliothek ist und nichts startet –
ein sauberer Exit 0 an eine Shell, ein ewiges Warten an einen Client – und sie macht engines.node >= 20 zu einer
verifizierten Behauptung: CI führt sie auf Node 20 sowie auf dem festgelegten 26 aus, da die Suite selbst nicht auf 20 laufen kann
(test/frontmatter.test.ts hängt vom Typ-Stripping der Laufzeit ab), während kompiliertes JavaScript es kann.
Commit-Nachrichten und die benutzerorientierten Zeichenketten des Servers selbst – Tool-Beschreibungen, Fehlermeldungen, die
Prosa in einem Diff – sind auf Portugiesisch (BR) geschrieben: Der Vault, den dieser Server bedient, ist eine portugiesischsprachige
Wissensdatenbank und sein Leser ist ein portugiesischsprachiges Modell. Code-Kommentare und Docblocks sind auf
Englisch, wobei src/index/bm25.ts aus dem ersten Durchgang auf Portugiesisch belassen wurde.
Lizenz
MIT © 2026 Andrey Mudri
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to maintain a structured Markdown or Obsidian memory vault with tools for reading, writing, searching, and organizing notes.MIT
- AlicenseNot gradedqualityCmaintenanceProvides AI agents with direct filesystem access to an Obsidian vault for note management, task orchestration, context persistence, and git synchronization.671MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to search, read, and write notes in an Obsidian vault via MCP tools, and monitor product handoffs and state.MIT
- AlicenseNot gradedqualityBmaintenanceProvides a durable, Obsidian-compatible knowledge base for agents using markdown notes and wikilinks. Enables agents to store, retrieve, and interlink knowledge persistently, with tools for writing, searching, and managing a graph of notes.1MIT
Related MCP Connectors
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Token-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/andreymudri/vault-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server