A Model Context Protocol (MCP) server that implements the Zettelkasten knowledge management methodology, allowing you to create, link, and search atomic notes through Claude and other MCP-compatible clients.
A Model Context Protocol (MCP) server that implements the Zettelkasten knowledge management methodology, allowing you to create, link, and search atomic notes through Claude and other MCP-compatible clients.
The Zettelkasten method is a knowledge management system developed by German sociologist Niklas Luhmann, who used it to produce over 70 books and hundreds of articles. It consists of three core principles:
What makes the Zettelkasten approach powerful is how it enables exploration in multiple ways:
This structure invites serendipitous discoveries as you follow trails of thought from note to note, all while keeping each piece of information easily accessible through its unique identifier. Luhmann called his system his "second brain" or "communication partner" - this digital implementation aims to provide similar benefits through modern technology.
To ensure maximum effectiveness, we recommend using a system prompt ("project instructions"), project knowledge, and an appropriate chat prompt when asking the LLM to process information, or explore or synthesize your Zettelkasten notes. The docs
directory in this repository contains the necessary files to get you started:
Pick one:
For end users:
For developers and contributors:
NB: Optionally include the source code with a tool like repomix.
The Zettelkasten MCP server supports different types of notes:
The Zettelkasten MCP server uses a comprehensive semantic linking system that creates meaningful connections between notes. Each link type represents a specific relationship, allowing for a rich, multi-dimensional knowledge graph.
Primary Link Type | Inverse Link Type | Relationship Description |
---|---|---|
reference | reference | Simple reference to related information (symmetric relationship) |
extends | extended_by | One note builds upon or develops concepts from another |
refines | refined_by | One note clarifies or improves upon another |
contradicts | contradicted_by | One note presents opposing views to another |
questions | questioned_by | One note poses questions about another |
supports | supported_by | One note provides evidence for another |
related | related | Generic relationship (symmetric relationship) |
This system uses a dual storage approach:
Markdown Files: All notes are stored as human-readable Markdown files with YAML frontmatter for metadata. These files are the source of truth and can be:
SQLite Database: Functions as an indexing layer that:
If you edit Markdown files directly outside the system, you'll need to run the zk_rebuild_index
tool to update the database. The database itself can be deleted at any time - it will be regenerated from your Markdown files.
# Clone the repository
git clone https://github.com/entanglr/zettelkasten-mcp.git
cd zettelkasten-mcp
# Create a virtual environment with uv
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
uv add "mcp[cli]"
# Install dev dependencies
uv sync --all-extras
Create a .env
file in the project root by copying the example:
cp .env.example .env
Then edit the file to configure your connection parameters.
python -m zettelkasten_mcp.main
Or with explicit configuration:
python -m zettelkasten_mcp.main --notes-dir ./data/notes --database-path ./data/db/zettelkasten.db
Add the following configuration to your Claude Desktop:
{
"mcpServers": {
"zettelkasten": {
"command": "/absolute/path/to/zettelkasten-mcp/.venv/bin/python",
"args": [
"-m",
"zettelkasten_mcp.main"
],
"env": {
"ZETTELKASTEN_NOTES_DIR": "/absolute/path/to/zettelkasten-mcp/data/notes",
"ZETTELKASTEN_DATABASE_PATH": "/absolute/path/to/zettelkasten-mcp/data/db/zettelkasten.db",
"ZETTELKASTEN_LOG_LEVEL": "INFO"
}
}
}
}
All tools have been prefixed with zk_
for better organization:
Tool | Description |
---|---|
zk_create_note | Create a new note with a title, content, and optional tags |
zk_get_note | Retrieve a specific note by ID or title |
zk_update_note | Update an existing note's content or metadata |
zk_delete_note | Delete a note |
zk_create_link | Create links between notes |
zk_remove_link | Remove links between notes |
zk_search_notes | Search for notes by content, tags, or links |
zk_get_linked_notes | Find notes linked to a specific note |
zk_get_all_tags | List all tags in the system |
zk_find_similar_notes | Find notes similar to a given note |
zk_find_central_notes | Find notes with the most connections |
zk_find_orphaned_notes | Find notes with no connections |
zk_list_notes_by_date | List notes by creation/update date |
zk_rebuild_index | Rebuild the database index from Markdown files |
zettelkasten-mcp/
├── src/
│ └── zettelkasten_mcp/
│ ├── models/ # Data models
│ ├── storage/ # Storage layer
│ ├── services/ # Business logic
│ └── server/ # MCP server implementation
├── data/
│ ├── notes/ # Note storage (Markdown files)
│ └── db/ # Database for indexing
├── tests/ # Test suite
├── .env.example # Environment variable template
└── README.md
Comprehensive test suite for Zettelkasten MCP covering all layers of the application from models to the MCP server implementation.
From the project root directory, run:
python -m pytest -v tests/
uv run pytest -v tests/
uv run pytest --cov=zettelkasten_mcp --cov-report=term-missing tests/
uv run pytest -v tests/test_models.py
uv run pytest -v tests/test_models.py::TestNoteModel
uv run pytest -v tests/test_models.py::TestNoteModel::test_note_validation
tests/
├── conftest.py - Common fixtures for all tests
├── test_models.py - Tests for data models
├── test_note_repository.py - Tests for note repository
├── test_zettel_service.py - Tests for zettel service
├── test_search_service.py - Tests for search service
├── test_mcp_server.py - Tests for MCP server tools
└── test_integration.py - Integration tests for the entire system
⚠️ USE AT YOUR OWN RISK: This software is experimental and provided as-is without warranty of any kind. While efforts have been made to ensure data integrity, it may contain bugs that could potentially lead to data loss or corruption. Always back up your notes regularly and use caution when testing with important information.
This MCP server was crafted with the assistance of Claude, who helped organize the atomic thoughts of this project into a coherent knowledge graph. Much like a good Zettelkasten system, Claude connected the dots between ideas that might otherwise have remained isolated. Unlike Luhmann's paper-based system, however, Claude didn't require 90,000 index cards to be effective.
MIT License