Labsco
MCP SERVER

NOUZ MCP Server

by Semiotronika

Turns a folder of Markdown notes into a navigable graph — parents, children, tags and a domain sign per note — for Obsidian, Logseq or any vault.

Note-Taking & Personal Knowledge BasesVerified
Summary
It gives a vault a shape an agent can walk: every note has parents, children and a place in a domain.

Two choices keep it safe to point at real notes. Metadata edits are a separate tool from body edits, so classifying a note carries no risk of rewriting it, and classification arrives as a suggestion you approve rather than a write. Start in LUCA mode with no config at all — describing your domains and wiring up a local embedding endpoint only pays off once the vault is large enough to get lost in.

What it is

A layer between a Markdown knowledge base and an agent. It keeps a SQLite index of files, YAML metadata and graph links, and can classify a note against domains you define.

What you get
  • read_file returns one note as JSON: body, YAML frontmatter, hierarchy metadata, parent links, explicit tags and any warnings
  • write_file creates or replaces a note, with content_lock=true to keep the existing body and update only the metadata
  • update_metadata changes the frontmatter alone — type, level, sign, artifact_sign, tags, parents — and leaves the Markdown byte for byte
  • list_files gives a lightweight inventory with path, type, level and sign, filterable by subfolder, and no_metadata=true finds notes carrying no YAML at all
  • get_children walks the hierarchy downward through direct and transitive children; get_parents returns the links upward with their link_type — hierarchy, derived_from, semantic, temporary, tag, analogy or error
  • suggest_metadata reads a note and proposes a domain sign, material type, hierarchy level, tags with the chunk evidence behind them, bridge candidates and hierarchy warnings — as a proposal, not a write
  • index_all rebuilds the index after you move things around outside the tool, and reports parent links that no longer resolve
Requirements

Python 3.10+, installed with pip install nouz-mcp and run over stdio. OBSIDIAN_ROOT points at the vault (default ./obsidian) and the SQLite index lives inside it as obsidian_kb.db unless NOUZ_DATABASE_NAME or NOUZ_DATABASE_PATH says otherwise. With no config.yaml it starts in LUCA mode — the graph without semantic classification — and needs nothing else. The semantic modes need embeddings: EMBED_PROVIDER selects an OpenAI-compatible endpoint or Ollama, EMBED_API_URL points at it (default http://127.0.0.1:1234/v1) and EMBED_MODEL names the model; NOUZ_CONFIG locates config.yaml when it is not in the working directory.

Setup effort

One command — pip install nouz-mcp