Skip to main content
Glama

NOUZ — Semantischer MCP-Server für Ihre Wissensdatenbank

Funktioniert mit Obsidian, Logseq und beliebigen Verzeichnissen mit Markdown-Dateien.

Struktur entsteht aus dem Inhalt.

Semantische Werkzeuge für Wissensdatenbanken, Projektspeicher und KI-Agenten.

MIT License Python 3.10+ MCP PyPI

🇬🇧 Englische Version


Warum Nouz?

Ordner zeigen, wo eine Datei liegt. Sie erklären einem Agenten jedoch nicht, wie Dokumente, Ideen und Materialien innerhalb der Datenbank miteinander verknüpft sind.

NOUZ gibt dem Agenten semantische Koordinaten. Jede Notiz erhält ein Domänenzeichen, eine Ebene in der Hierarchie und Verbindungen zu anderen Notizen. Die Domäne wird direkt aus dem Inhalt der Datei zugewiesen oder von Ihnen manuell festgelegt, falls Sie eine strikte Hierarchie wünschen.


Related MCP server: Semantic Mesh Memory (SEM) MCP Server

Was es tut

NOUZ fungiert als Zwischenschicht zwischen Ihrer Notizdatenbank und dem KI-Agenten. Es hilft dabei, verstreute Markdown-Dateien in einen Graphen zu verwandeln, mit dem über MCP gearbeitet werden kann:

  1. Automatische Klassifizierung (Semantik) Sie definieren "Kerne" (Cores) — die Basisdomänen Ihrer Datenbank (z. B. Systems Analysis, Data & Science, Engineering). Wenn Sie eine neue Notiz hinzufügen, liest NOUZ den Text, vergleicht die Vektoren und schlägt ein Domänenzeichen oder eine Kombination von Domänen vor.

  2. Suche nach Verbindungen zwischen Notizen Der Server erstellt einen gerichteten Graphen (DAG) und schlägt Verbindungen vor, die vor dem Speichern überprüft werden können:

    • Semantische Brücken: Zwei Notizen aus verschiedenen Domänen verweisen auf dieselbe Idee.

    • Tag-Brücken: Die Notizen haben gemeinsame verborgene Konzepte auf Tag-Ebene.

  3. Nachverfolgung der Datenbankentwicklung (Drift) NOUZ aggregiert Daten von unten nach oben. Wenn ein Modul als eine Domäne begann, neue Notizen es aber allmählich in eine andere Richtung führen, zeigt der Server die Abweichung (core_drift) an.

Je nach Ihren Anforderungen arbeitet NOUZ in drei Modi: vom einfachen Graphen (LUCA) bis hin zur strikten 5-stufigen Hierarchie (SLOI).


Wie es funktioniert

  1. Sie beschreiben die Domänen in der config.yaml — welchen Bereich jede Domäne abdeckt und anhand welcher Textmerkmale sie erkannt werden soll.

  2. Der Server wandelt die Beschreibungen in Referenzvektoren um (lokal, über LM Studio oder Ollama).

  3. Jede neue Notiz wird auf diese Achsen projiziert. Das Zeichen wird durch den Inhalt oder durch Sie bestimmt.

  4. L4 erhält ein Domänenprofil aus der Textklassifizierung, und L3/L2 sammeln den core_mix aus den untergeordneten Knoten. Wenn das sign eines Moduls vom core_mix abweicht, meldet der Server einen core_drift.

Zwei Arten von Brücken finden Verbindungen zwischen Notizen aus verschiedenen Domänen: semantische (Texte sind ähnlich) und Tag-basierte (Konzepte überschneiden sich).


Schnelleinstieg

pip install nouz-mcp
OBSIDIAN_ROOT=/path/to/vault nouz-mcp

Ohne config.yaml startet der Server im LUCA-Modus — ein Graph ohne Semantik, der sofort funktioniert.

Um den semantischen Modus zu aktivieren, erstellen Sie eine lokale Konfiguration aus der Vorlage:

cp config.template.yaml config.yaml

In Windows PowerShell:

Copy-Item config.template.yaml config.yaml

Oder aus den Quellen:

git clone https://github.com/Semiotronika/NOUZ-MCP
cd NOUZ-MCP
pip install -r requirements.txt
cp config.template.yaml config.yaml
OBSIDIAN_ROOT=./vault python server.py

Verbindung zu Claude Desktop, Cursor, Opencode oder einem beliebigen MCP-Client:

{
  "mcpServers": {
    "nouz": {
      "command": "nouz-mcp",
      "env": {
        "OBSIDIAN_ROOT": "/path/to/vault",
        "NOUZ_CONFIG": "/absolute/path/to/config.yaml",
        "EMBED_API_URL": "http://127.0.0.1:1234/v1"
      }
    }
  }
}

MCP-Werkzeuge

Werkzeug

Zweck

suggest_metadata

Zeichen, Ebene, Brücken, Drift-Warnungen

write_file

Notiz mit YAML-Metadaten schreiben

update_metadata

Nur YAML aktualisieren, ohne den Notiztext zu ändern

read_file

Notiz + Metadaten lesen

calibrate_cores

Referenzvektoren der Kerne aktualisieren

recalc_signs

Zeichen aller Notizen neu berechnen

recalc_core_mix

Aggregation von unten nach oben neu berechnen

index_all

Gesamte Datenbank neu indizieren

embed

Vektor für einen Text abrufen

list_files

Liste mit Filtern nach Ebene, Zeichen

get_children

Den Graphen nach unten durchlaufen

get_parents

Den Graphen nach oben durchlaufen

suggest_parents

Eltern für eine verwaiste Notiz finden

add_entity

Entität in einem Schritt erstellen (automatisches Sign, Tags, Eltern)

process_orphans

Dateien ohne Metadaten automatisch ausfüllen


Konfiguration

Minimale config.yaml:

mode: prizma

etalons:
  - sign: S
    name: Systems Analysis
    text: >
      Methodology for analysing complex objects: feedback loops,
      emergent properties, self-regulation, bifurcation points.
      Cybernetics, synergetics, dissipative structures, catastrophe
      theory, autopoiesis — tools for understanding how the whole
      exceeds the sum of its parts. Not data and not code — a way
      of thinking about how parts form a whole and why systems
      behave non-linearly.
  - sign: D
    name: Data & Science
    text: >
      Physics and cosmology: from subatomic particles to the large-scale
      structure of the Universe. Lagrangians, curvature tensors, scattering
      cross-sections, quarks, bosons, fermions, plasma, vacuum fluctuations,
      cosmic microwave background, cosmological constant, decoherence.
      Pure science about the nature of matter, energy and spacetime.
  - sign: E
    name: Engineering
    text: >
      Software engineering, machine learning and infrastructure: writing
      and debugging code, deployment, containerisation, neural networks,
      inference, tokenisation, data serialisation, microservices, CI/CD,
      automated testing, refactoring, Git, Docker, Kubernetes, APIs.
      The practical discipline of building computational systems from
      architecture to production.

thresholds:
  sign_spread: 0.05
  confident_spread: 60.0
  pattern_second_sign_threshold: 30.0
  semantic_bridge_threshold: 0.55
  parent_link_threshold: 0.55

artifact_signs:
  - sign: n
    name: Note
    text: Short note, observation, fragment.
  - sign: c
    name: Concept
    text: Definition, concept, entity description.
  - sign: r
    name: Reference
    text: External source, documentation, link, citation.
  - sign: l
    name: Log
    text: Session log, chronology, dialogue record.
  - sign: u
    name: Update
    text: Update, release note, changelog entry.
  - sign: h
    name: Hypothesis
    text: Hypothesis, assumption, speculative idea.
  - sign: s
    name: Specification
    text: Technical specification, instruction, requirements.

Führen Sie nach der Einrichtung calibrate_cores aus — der Server erstellt die Referenzvektoren. Überprüfen Sie die paarweisen Kosinus-Ähnlichkeiten: Der mean-centered Wert zwischen verschiedenen Domänen sollte deutlich niedriger sein als der Rohwert. Wenn alle Paare ungefähr gleich sind, verstärken Sie die Unterschiede in den Texten.

etalons sind die semantischen Domänen, die über Embeddings verglichen werden. artifact_signs ist der Materialtyp für L5-Artefakte: Notiz, Konzept, Link, Log, Update, Hypothese oder Spezifikation. Dies ist eine heuristische Markierung, kein separater Referenzwert für Embeddings. Im öffentlichen Schema werden Domänen normalerweise mit Großbuchstaben (S/D/E) und Materialtypen mit Kleinbuchstaben (n/c/r/l/u/h/s) gekennzeichnet; diese können in der Konfiguration geändert werden, wenn die Zeichen kurz sind und nicht mit den Domänen kollidieren. Bei Bedarf können für jeden Typ keywords hinzugefügt werden: Dann verwendet der Server Ihre Wörter für die Heuristik anstelle des eingebauten RU/EN-Sets.

Reales Berechnungsbeispiel

Hier sind die tatsächlichen Ergebnisse für die Referenzwerte S/D/E mit dem Modell text-embedding-granite-embedding-278m-multilingual:

=== Pairwise Cosine (raw) ===
S↔D: 0.5894    S↔E: 0.5862    D↔E: 0.6022

=== Pairwise Cosine (mean-centered) ===
S↔D: -0.5059   S↔E: -0.5117   D↔E: -0.4822

Negative mean-centered Werte sind hier ein gutes Ergebnis: Nach Abzug des Durchschnittsvektors gehen die Domänen gut auseinander. Selbstklassifizierung: S→99.4%, D→97.5%, E→96.9%.

Variable

Standardwert

Beschreibung

OBSIDIAN_ROOT

./obsidian

Pfad zum Vault

NOUZ_CONFIG

(leer)

Absoluter Pfad zur config.yaml; falls nicht gesetzt, sucht der Server die Konfiguration im aktuellen Verzeichnis

NOUZ_DATABASE_NAME

obsidian_kb.db

Name der SQLite-Cache-Datei innerhalb von OBSIDIAN_ROOT; praktisch für isolierte Tests, z. B. obsidian_kb.public.db

NOUZ_DATABASE_PATH

(leer)

Vollständiger Pfad zum SQLite-Cache; hat Vorrang vor NOUZ_DATABASE_NAME

EMBED_PROVIDER

openai

openai, lmstudio, ollama

EMBED_API_URL

http://127.0.0.1:1234/v1

Endpunkt für Embeddings

EMBED_API_KEY

(leer)

API-Schlüssel, falls erforderlich

EMBED_MODEL

(leer)

Modellname


Datenschutz

Komponente

Lokal?

Embeddings (LM Studio / Ollama)

✅ Ja

Ihre Notizen

✅ Ja

NOUZ-Server

✅ Ja

Kontext des KI-Agenten (Claude, ChatGPT)

❌ Geht in die Cloud

Alles Kritische bleibt auf Ihrem Rechner.


Entwicklung

git clone https://github.com/Semiotronika/NOUZ-MCP
cd NOUZ-MCP
pip install -e .
python test_server.py

MIT License © 2026 Semiotronika

Kosinusse werden berechnet. Die Syntax ändert sich. Die Semantik bleibt.

Available Tools

8 tools
get_childrenGet ChildrenA
Read-onlyIdempotent

Traverse the hierarchy downward from one note. Returns all direct and transitive child note paths from the local graph index. Use this to answer 'what does this topic/module contain?' It is read-only and does not recompute semantic classification. Use get_parents for the opposite direction.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path from OBSIDIAN_ROOT

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds meaningful behavioral context beyond those: it reads from the 'local graph index' and does not recompute semantic classification. This gives the agent a clearer model of what side effects, if any, to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words. The core purpose is front-loaded, and each sentence earns its place by adding scope, usage guidance, or behavioral caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only traversal tool with one well-documented parameter and strong annotations, the description is complete. It explains what is returned, how to invoke it conceptually, what it does not do, and how it relates to its sibling. No output schema exists, but the return concept is clearly stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single path parameter already documented as 'Relative path from OBSIDIAN_ROOT'. The description does not add parameter-level detail, but the schema already carries the necessary semantics, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact operation ('Traverse the hierarchy downward'), the resource ('one note'), and the result ('all direct and transitive child note paths'). It also differentiates itself from the sibling get_parents, so an agent can select it without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit use case ('what does this topic/module contain?') and explicitly routes to get_parents for the opposite direction. It also notes that it does not recompute semantic classification, which helps avoid misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_parentsGet ParentsA
Read-onlyIdempotent

Return the parent links of one note from the graph index. Each result includes the parent entity name and link_type, such as hierarchy, derived_from, semantic, temporary, tag, analogy, or error. Use this to understand where a note belongs before editing links. It is read-only. Use suggest_parents when a note has no parents and you want candidate links.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path from OBSIDIAN_ROOT

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true; the description repeats the read-only fact but also adds new context about result contents (parent entity name and link_type with allowed categories). This helps the agent anticipate the response shape even though there is no output schema. The description does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the primary behavior and then usage/alternative. Every sentence adds information; the only slight redundancy is the read-only statement, which is already in annotations, but it is short and does not bloat. Highly scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only lookup with no output schema, the description covers the action, the return fields, and a usage trigger. It does not describe error cases or exact return shape beyond fields, but that is minor. One minor inconsistency: it references 'suggest_parents' while the sibling list contains 'suggest_metadata' – possibly a naming mismatch, but the tool itself is still callable correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes the only parameter 'path' as 'Relative path from OBSIDIAN_ROOT' with 100% coverage. The description adds no further parameter-specific detail, so it relies on the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Return'), resource ('parent links of one note from the graph index'), and enumerates the link_type values in the result. This clearly distinguishes it from sibling tools like get_children, which would return the opposite direction. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives a use case ('understand where a note belongs before editing links') and names an alternative (suggest_parents) for the case where a note has no parents. It does not address all siblings, but the one likely-confusing alternative is covered. No exclusions beyond the suggested_difference, so a 4 is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

index_allIndex AllA
Idempotent

Scan the whole Markdown vault and rebuild the local SQLite index of files, metadata, and graph links. Use this after adding, moving, or reorganizing notes outside NOUZ. It is safe to run repeatedly and reports missing parent links. In PRIZMA/SLOI, with_embeddings=true also updates file and chunk embeddings for retrieval and semantic classification, which is slower and requires an embedding provider. This tool indexes data; it is not a search tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
with_embeddingsNoIf true, compute embeddings for all files (slower, requires LM Studio/Ollama). Default false.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already signal idempotency and non-destructiveness, and the description confirms those traits with 'safe to run repeatedly.' It adds new behavioral details such as reporting missing parent links and the slower, provider-dependent embedding behavior when with_embeddings is true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each earning its place: the core action, when to use it, and important behavioral caveats. The main purpose is front-loaded before secondary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and strong annotations, the description covers invocation triggers, safety, side effects, and output hints like missing parent links. It does not describe the full return format, but that is a minor gap given the lack of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents with_embeddings well, so the description's added operational context — slower execution, provider requirement, and effect on retrieval/semantic classification — goes beyond the schema. It clarifies tradeoffs but not every environment-specific detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete verb and resource: scanning the Markdown vault and rebuilding the local SQLite index of files, metadata, and graph links. It also explicitly disambiguates from siblings by stating it indexes data and is not a search tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger, 'Use this after adding, moving, or reorganizing notes outside NOUZ,' and a clear exclusion: this tool is not for searching. This tells an agent when to invoke it and when to look elsewhere.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_filesList FilesA
Read-onlyIdempotent

List notes already known to the local index. Returns lightweight records with path, type, level, and sign, without loading full note bodies. Use this for inventory, filtering, and finding files to inspect next. Set no_metadata=true to find Markdown files without YAML metadata. Use get_children or get_parents when you need graph traversal from a specific note.

ParametersJSON Schema
NameRequiredDescriptionDefault
signNoFilter by domain sign, e.g. S, D, E, or another sign configured in config.yaml
levelNoFilter by hierarchy level: 1=core/domain, 2=pattern/topic, 3=module/group, 4=quant/idea, 5=artifact/raw material
subfolderNoRestrict search to a subfolder within the vault
no_metadataNoIf true, include files without YAML frontmatter

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavior beyond annotations: it operates on the local index, returns lightweight records, and does not load full note bodies. It does not discuss error conditions or index staleness, but those are not essential for selection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: purpose, return characteristics, when to use, a parameter tip, and sibling routing. Information is front-loaded with the core function stated first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only filtered list with no required parameters and full schema coverage, the description covers scope, return shape, use cases, and alternatives. No critical calling information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with useful descriptions, so the baseline applies. The description adds only a mild clarification that no_metadata targets Markdown files without YAML frontmatter, not enough to meaningfully surpass the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List notes already known to the local index.' It explicitly lists returned record fields (path, type, level, sign) and distinguishes itself from graph-traversal siblings by directing agents to get_children or get_parents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit use cases ('inventory, filtering, and finding files to inspect next'), a specific filter recommendation (no_metadata=true for Markdown files without YAML), and names alternatives for graph traversal. An agent knows exactly when to choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_fileRead FileA
Idempotent

Read one Markdown note from the local knowledge base. Returns the note body, YAML frontmatter, hierarchy metadata, parent links, explicit tags, and warnings as JSON. Use this before write_file when you need to preserve existing content or inspect current metadata. Side effect: refreshes this file in the local SQLite index so later classification and parent suggestions use current data. It never changes the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path from OBSIDIAN_ROOT, e.g. 'notes/my-note.md'

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the SQLite index refresh side effect and explaining why it matters for later classification and parent suggestions. It also explicitly states 'It never changes the file,' clarifying the non-destructive nature despite readOnlyHint being false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: the action and return value are front-loaded, the write_file use case is stated, and the side effect is disclosed without redundancy. The description is compact yet information-dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read operation with no output schema, the description is complete: it lists all returned content fields, states the side effect, and confirms file immutability. An agent has enough information to invoke the tool correctly and interpret its result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides a complete description of the single path parameter with an example, so schema coverage is 100%. The description adds context about Markdown notes and the local knowledge base, but no additional parameter-level semantics are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Read one Markdown note from the local knowledge base.' It also enumerates the returned components (note body, YAML frontmatter, hierarchy metadata, parent links, tags, warnings), making the tool's function concrete and distinct from siblings like list_files or write_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use this tool 'before write_file when you need to preserve existing content or inspect current metadata,' giving clear situational guidance. It does not cover alternatives like get_parents or suggest_metadata, but the primary routing to write_file is well defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_metadataSuggest MetadataA
Idempotent

Analyze one note and propose knowledge-graph metadata for review. Returns suggested domain sign, material type, hierarchy level, explicit tags, tag quality, tag candidates with chunk evidence, bridge candidates, and hierarchy warnings. Use this before write_file when you want classification help, or to audit an existing note. It is read-only and never edits YAML. Semantic fields require embeddings and are available in PRIZMA/SLOI modes. The optional context object lets an agent test metadata overrides without changing the note.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path from OBSIDIAN_ROOT
contextNoOptional metadata overrides for what-if analysis.

TDQS

A3.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states 'It is read-only and never edits YAML,' but the annotations declare readOnlyHint: false, indicating the operation may not be read-only. This is a direct annotation contradiction. Per the rubric, behavioral_transparency must be scored 1 when the description contradicts annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with purpose first, then output details, then usage, then behavioral notes, then context semantics. Every sentence adds meaningful information and there is no filler. Despite being moderately long, the detail is mostly essential for correctly invoking the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description generously enumerates return fields, explains the read-only nature, notes embedding-dependent fields, and describes the optional context object's purpose. This gives an agent enough to decide and call the tool correctly, aside from the read-only contradiction flagged above.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds useful context about the context object ('test metadata overrides without changing the note') and mentions semantic fields requiring embeddings, but it does not substantially improve parameter-level understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: 'Analyze one note and propose knowledge-graph metadata for review.' It also enumerates the exact outputs (domain sign, material type, hierarchy level, tags, etc.), which goes well beyond a vague purpose statement. This clearly distinguishes it from siblings like write_file and update_metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it: 'Use this before write_file when you want classification help, or to audit an existing note.' It also clarifies the tool is read-only and never edits YAML, which implicitly routes agents away from using it for mutations. This is strong usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_metadataUpdate MetadataA
Destructive

Update only YAML frontmatter for an existing note and preserve the Markdown body exactly. Use this for safe changes to type, level, sign, artifact_sign, tags, parents, and parents_meta when the note content must not be touched.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path from OBSIDIAN_ROOT
metadataYesYAML frontmatter to write while preserving the existing body.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true, and the description adds useful behavioral context: only YAML frontmatter is written, the Markdown body is preserved exactly, and specific fields are scoped. It does not clarify whether the metadata object replaces or merges with existing frontmatter, which is a minor gap given the destructive hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences contain all the essential information with no filler. The first sentence front-loads the core guarantee, and the second provides the usage context and allowed fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no output schema, the description covers when to use it, what changes, and what is preserved. The main omission is the merge-vs-replace behavior of the metadata object, which could affect how an agent constructs the call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both path and metadata, so the baseline is 3. The description adds value by enumerating the allowed metadata fields (type, level, sign, artifact_sign, tags, parents, parents_meta) and clarifying that metadata only applies to frontmatter, not the body.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Update'), a precise resource ('YAML frontmatter for an existing note'), and an explicit preservation guarantee ('preserve the Markdown body exactly'). It also names the exact metadata fields, making it clearly distinguishable from write_file and other siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool: 'Use this for safe changes to type, level, sign, artifact_sign, tags, parents, and parents_meta when the note content must not be touched.' It does not explicitly name an alternative like write_file for body edits, but the 'only frontmatter / preserve body exactly' language strongly implies the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_fileWrite FileA
Destructive

Create or replace one Markdown note with YAML metadata. Use it when an agent has an explicit final content body and metadata to save. This is a destructive write: it replaces the complete file, unless content_lock=true is used to preserve the existing body and update only metadata. Before writing, the server validates that parent links do not create graph cycles, syncs parents and parents_meta, and then refreshes the local index. Use read_file first for existing notes and suggest_metadata first when you want classification hints.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path from OBSIDIAN_ROOT
contentYesMarkdown body (without frontmatter delimiters)
metadataNoYAML frontmatter to write for the note.
content_lockNoIf true, IGNORE content param and preserve original file text. Default false.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description clearly discloses the destructive nature ('replaces the complete file'), explains the content_lock exception, and describes server-side side effects (cycle validation, parent syncing, index refresh). This adds significant behavioral context beyond the destructiveHint annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler: purpose first, then usage condition, then behavioral warnings and prerequites. Every sentence adds operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex write tool with nested objects and no output schema, the description covers the critical operational facts: destructive behavior, content_lock preservation, validation and sync side effects, and recommended sibling tools. The rich schema handles parameter details, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters well. The description adds useful high-level context about content_lock behavior and destructive replacement, but it does not add per-parameter detail beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Create or replace one Markdown note with YAML metadata.' It also identifies a distinguishing capability (content_lock preserves body while updating metadata) and implicitly separates it from sibling tools like update_metadata and suggest_metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use the tool: 'when an agent has an explicit final content body and metadata to save.' It also names alternatives: 'Use read_file first for existing notes and suggest_metadata first when you want classification hints.' This gives clear selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv3.2.5
    • Removedchunk_file
    • Removedchunk_text
    • Removedembed
    • Removedsearch_chunks
    • Changedwrite_file1 field changed
      • changedInput schema / properties / metadata / properties / parents_meta / items / properties / link_type / enum
        Previous value: -[
        -  "hierarchy",
        -  "semantic",
        -  "temporary",
        -  "tag",
        -  "analogy",
        -  "error"
        -]New value: +[
        +  "hierarchy",
        +  "derived_from",
        +  "semantic",
        +  "temporary",
        +  "tag",
        +  "analogy",
        +  "error"
        +]
  2. 12 tool updatesv3.2.2
    • Addedchunk_file
    • Addedchunk_text
    • Addedembed
    • Addedget_children
    • Addedget_parents
    • Addedindex_all
    • Addedlist_files
    • Addedread_file
    • Addedsearch_chunks
    • Addedsuggest_metadata
    • Addedupdate_metadata
    • Addedwrite_file
  3. 12 tool updatesv3.2.1
    • Removedchunk_file
    • Removedchunk_text
    • Removedembed
    • Removedget_children
    • Removedget_parents
    • Removedindex_all
    • Removedlist_files
    • Removedread_file
    • Removedsearch_chunks
    • Removedsuggest_metadata
    • Removedupdate_metadata
    • Removedwrite_file
  4. 5 tool updatesv3.2.0
    • Addedchunk_file
    • Addedchunk_text
    • Addedsearch_chunks
    • Changedsuggest_metadata1 field changed
      • changedInput schema / properties / context / properties / tags / description
        Previous value: -"Candidate tags."New value: +"Explicit tags for what-if analysis. They are normalized to canonical slug form. NOUZ may suggest tag candidates, but does not write inferred tags."
    • Changedwrite_file2 fields changed
      • changedInput schema / properties / metadata / properties / parents_meta / items / properties / link_type / enum
        Previous value: -[
        -  "hierarchy",
        -  "semantic",
        -  "temporary",
        -  "tag",
        -  "error"
        -]New value: +[
        +  "hierarchy",
        +  "semantic",
        +  "temporary",
        +  "tag",
        +  "analogy",
        +  "error"
        +]
      • changedInput schema / properties / metadata / properties / tags / description
        Previous value: -"Search and semantic tags."New value: +"Explicit search or semantic tags. They are normalized to canonical slug form; NOUZ does not infer tags."
  5. 1 tool updatev3.0.2
    • Changedwrite_file1 field changed
      • changedInput schema / properties / metadata / properties / artifact_sign / description
        Previous value: -"Material type sign for artifacts/quants, e.g. note, concept, reference, log, news, hypothesis, specification."New value: +"Material type sign for artifacts/quants, e.g. note, concept, reference, log, update, hypothesis, specification."
  6. 3 tool updatesv3.0.0
    • Removedformat_entity_compact
    • Addedupdate_metadata
    • Changedwrite_file1 field changed
      • changedInput schema / properties / metadata / properties / parents_meta / items / properties / link_type / enum
        Previous value: -[
        -  "hierarchy",
        -  "semantic",
        -  "temporary",
        -  "analogy",
        -  "tag",
        -  "error"
        -]New value: +[
        +  "hierarchy",
        +  "semantic",
        +  "temporary",
        +  "tag",
        +  "error"
        +]
  7. 13 tool updatesv2.5.2
    • Removedcalibrate_cores
    • Changedembed1 field changed
      • addedInput schema / properties / text / description
        Added value: +"Text to embed (will be truncated to ~2000 chars)"
    • Changedformat_entity_compact2 fields changed
      • addedInput schema / properties / path / description
        Added value: +"Relative path from OBSIDIAN_ROOT"
      • addedInput schema / properties / write
        Added value: +{
        +  "default": false,
        +  "description": "If true, write formula block to file",
        +  "type": "boolean"
        +}
    • Changedget_children1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Relative path from OBSIDIAN_ROOT"
    • Changedget_parents1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Relative path from OBSIDIAN_ROOT"
    • Changedindex_all1 field changed
      • addedInput schema / properties / with_embeddings / description
        Added value: +"If true, compute embeddings for all files (slower, requires LM Studio/Ollama). Default false."
    • Changedlist_files5 fields changed
      • addedInput schema / properties / level / description
        Added value: +"Filter by hierarchy level: 1=core/domain, 2=pattern/topic, 3=module/group, 4=quant/idea, 5=artifact/raw material"
      • addedInput schema / properties / level / enum
        Added value: +[
        +  1,
        +  2,
        +  3,
        +  4,
        +  5
        +]
      • addedInput schema / properties / no_metadata / description
        Added value: +"If true, include files without YAML frontmatter"
      • addedInput schema / properties / sign / description
        Added value: +"Filter by domain sign, e.g. S, D, E, or another sign configured in config.yaml"
      • addedInput schema / properties / subfolder / description
        Added value: +"Restrict search to a subfolder within the vault"
    • Changedread_file1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Relative path from OBSIDIAN_ROOT, e.g. 'notes/my-note.md'"
    • Removedrecalc_core_mix
    • Removedrecalc_signs
    • Changedsuggest_metadata3 fields changed
      • addedInput schema / properties / context / description
        Added value: +"Optional metadata overrides for what-if analysis."
      • addedInput schema / properties / context / properties
        Added value: +{
        +  "level": {
        +    "enum": [
        +      0,
        +      1,
        +      2,
        +      3,
        +      4,
        +      5
        +    ],
        +    "type": "integer"
        +  },
        +  "parents": {
        +    "description": "Candidate parent wiki links.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "sign": {
        +    "description": "Candidate domain sign to evaluate.",
        +    "type": "string"
        +  },
        +  "tags": {
        +    "description": "Candidate tags.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "type": {
        +    "enum": [
        +      "meta",
        +      "core",
        +      "pattern",
        +      "module",
        +      "quant",
        +      "artifact"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / path / description
        Added value: +"Relative path from OBSIDIAN_ROOT"
    • Removedsuggest_parents
    • Changedwrite_file5 fields changed
      • addedInput schema / properties / content / description
        Added value: +"Markdown body (without frontmatter delimiters)"
      • addedInput schema / properties / content_lock
        Added value: +{
        +  "default": false,
        +  "description": "If true, IGNORE content param and preserve original file text. Default false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / metadata / description
        Added value: +"YAML frontmatter to write for the note."
      • addedInput schema / properties / metadata / properties
        Added value: +{
        +  "artifact_sign": {
        +    "description": "Material type sign for artifacts/quants, e.g. note, concept, reference, log, news, hypothesis, specification.",
        +    "type": "string"
        +  },
        +  "level": {
        +    "description": "Hierarchy level: 0=meta root, 1=core/domain, 2=pattern/topic, 3=module/group, 4=quant/idea, 5=artifact/raw material.",
        +    "enum": [
        +      0,
        +      1,
        +      2,
        +      3,
        +      4,
        +      5
        +    ],
        +    "type": "integer"
        +  },
        +  "parents": {
        +    "description": "Obsidian wiki links for parents, e.g. ['[[Systems]]'].",
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "parents_meta": {
        +    "description": "Structured parent links used by NOUZ.",
        +    "items": {
        +      "properties": {
        +        "entity": {
        +          "type": "string"
        +        },
        +        "link_type": {
        +          "enum": [
        +            "hierarchy",
        +            "semantic",
        +            "temporary",
        +            "analogy",
        +            "tag",
        +            "error"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "sign": {
        +    "description": "Domain sign assigned manually or by semantic classification, e.g. S, D, E.",
        +    "type": "string"
        +  },
        +  "tags": {
        +    "description": "Search and semantic tags.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "type": {
        +    "description": "Entity type such as core, pattern, module, quant, or artifact.",
        +    "enum": [
        +      "meta",
        +      "core",
        +      "pattern",
        +      "module",
        +      "quant",
        +      "artifact"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / path / description
        Added value: +"Relative path from OBSIDIAN_ROOT"
  8. 13 tool updatesv2.1.0
    • First observedcalibrate_cores
    • First observedembed
    • First observedformat_entity_compact
    • First observedget_children
    • First observedget_parents
    • First observedindex_all
    • First observedlist_files
    • First observedread_file
    • First observedrecalc_core_mix
    • First observedrecalc_signs
    • First observedsuggest_metadata
    • First observedsuggest_parents
    • First observedwrite_file

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have clear, distinct responsibilities: write_file is for creating/replacing notes, update_metadata is for frontmatter-only edits, and suggest_metadata provides classification advice. The only mild overlap is that write_file with content_lock=true can also update metadata-only, but the descriptions are explicit enough to guide correct selection.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (index_all, read_file, write_file, update_metadata, list_files, get_children, get_parents, suggest_metadata). There is no mixing of conventions or unexpected naming styles.

Tool Count5/5

Eight tools is a well-scoped set for a Markdown vault knowledge-base server. Each tool covers a distinct operation without redundancy, and the count is neither too sparse nor overwhelming.

Completeness3/5

The core content lifecycle (read, create/replace, update metadata, index, list, traverse) is covered, but obvious operations are missing: there is no delete/remove toolchers, no search/query tool despite embeddings being mentioned, and no explicit move/rename workflow. These are notable gaps but not fatal for basic note management.

Maintenance

ActivitySlowing
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers