NOUZ MCP Server
Manages notes in an Obsidian vault, providing tools to read, write, and navigate markdown files with YAML frontmatter, including bidirectional link tracking (parents/children), semantic indexing, and hierarchical organization across five knowledge levels.
Integrates with Ollama for local embedding generation, enabling semantic search, similarity matching, and automated metadata suggestions using locally-hosted language models.
Integrates with OpenAI's API for cloud-based embedding generation, supporting semantic analysis, core sign calibration, and vector similarity operations for knowledge graph navigation.
NOUZ — MCP Server for Obsidian
Unified MCP server for semantic knowledge management in Obsidian. Works with local embedding models — no cloud required.
Quick Start
git clone https://github.com/KVANTRA-dev/NOUZ-MCP
cd NOUZ-MCP
pip install -r requirements.txt
export OBSIDIAN_ROOT=./vault
export EMBED_API_URL=http://127.0.0.1:1234/v1 # LM Studio or Ollama
python server.pyConnect via any MCP-compatible client (Claude Desktop, etc.) using stdio transport.
Modes
NOUZ has three operating modes. Set via MODE env var or config.yaml.
Mode | Description | Embeddings required |
luca | Pure graph — YAML + links, no semantic classification | No |
prizma | Graph + semantics — sign classification, core_mix, semantic bridges | Yes |
sloi | Strict 5-level hierarchy — cycle detection, violation warnings | Yes |
Start with LUCA if you just want graph navigation. Add PRIZMA/SLOI when you're ready to define your semantic cores.
Note Format
Each note uses YAML frontmatter:
---
type: module
level: 3
sign: T
status: active
tags:
- research
parents:
- Parent Note Name
parents_meta:
- entity: Parent Note Name
link_type: hierarchy
---
Your note content here.Five Levels
Level | Type | Description |
1 | core | Top-level domain (e.g. "Mathematics") |
2 | pattern | Knowledge area within domain |
3 | module | Grouping within field |
4 | quant | Concrete atomic note |
5 | artifact | Leaf note, reference, log |
The parents field is a list of note names (used by Obsidian/ExcaliBrain for wikilinks). The parents_meta field carries structured link metadata for NOUZ graph logic. Keep them in sync — NOUZ handles this automatically on write.
Semantic Etalons (Prizma / Sloi)
Etalons define the "axes" of your semantic space — reference texts that represent each knowledge domain. NOUZ classifies notes by cosine similarity to these vectors.
Copy config.template.yaml to config.yaml:
mode: prizma
etalons:
- sign: T
name: Technology
text: "programming software architecture infrastructure machine learning neural networks algorithms"
- sign: S
name: Science
text: "physics chemistry biology mathematics formal logic theorems cosmology quantum mechanics"
- sign: H
name: Humanities
text: "philosophy psychology sociology history literature art culture ethics cognitive science"Best practices:
Use 3–5 domains — more makes classification noisy
Each etalon should be a dense list of keywords, not a sentence
Run
calibrate_coresafter changing etalons, then check pairwise cosine similarityAim for similarity < 0.55 between any two etalons for clean separation
Tools
All modes
Tool | Description |
| Read note with parsed YAML metadata |
| Write note with YAML frontmatter |
| Filter and list notes from vault |
| Index vault to SQLite DB |
| Get embedding vector from configured provider |
| Get parent nodes (files linking to this) |
| Get child nodes (files this links to) |
| Return entity formula: |
Prizma / Sloi only
Tool | Description |
| Recompute etalon embeddings from config |
| Auto-assign signs to all indexed notes |
| Aggregate core_mix bottom-up through DAG |
| Suggest sign, level, core_mix for a note |
| Suggest parent links by vector similarity |
Environment Variables
Variable | Default | Description |
|
| Path to your Obsidian vault |
|
|
|
|
|
|
|
| Embedding API endpoint |
| — | Model name (optional, uses provider default) |
| — | API key (leave empty for local models) |
|
| Set to |
Example Workflow
# 1. Start server
python server.py
# 2. Index your vault
index_all(with_embeddings=true)
# 3. Calibrate etalons (Prizma/Sloi)
calibrate_cores()
# 4. Classify all notes
recalc_signs()
# 5. Query
suggest_parents("path/to/note.md")
list_files(sign="T", level=4)Links
MIT License © 2026 KVANTRA
Changelog
v2.1.1
Minor fixes and refactoring
v2.1.0
Initial public release
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/KVANTRA-dev/NOUZ-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server