Zettelkasten Knowledge Management Server
效率与工作流by Liam-Deacon
Manage and explore atomic notes using the Zettelkasten methodology through an MCP-compatible interface. Create, link, search, and synthesize notes with AI assistance to build a rich, interconnected knowledge graph. Enhance your knowledge workflow with bidirectional linking, tagging, and markdown-based note storage.
什么是 Zettelkasten Knowledge Management Server?
Manage and explore atomic notes using the Zettelkasten methodology through an MCP-compatible interface. Create, link, search, and synthesize notes with AI assistance to build a rich, interconnected knowledge graph. Enhance your knowledge workflow with bidirectional linking, tagging, and markdown-based note storage.
README
Zettelkasten MCP Server
A Model Context Protocol (MCP) server that implements the Zettelkasten knowledge management methodology, allowing you to create, link, explore and synthesize atomic notes through Claude and other MCP-compatible clients.
What is Zettelkasten?
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:
- Atomicity: Each note contains exactly one idea, making it a discrete unit of knowledge
- Connectivity: Notes are linked together to create a network of knowledge, with meaningful relationships between ideas
- Emergence: As the network grows, new patterns and insights emerge that weren't obvious when the individual notes were created
What makes the Zettelkasten approach powerful is how it enables exploration in multiple ways:
- Vertical exploration: dive deeper into specific topics by following connections within a subject area.
- Horizontal exploration: discover unexpected relationships between different fields by traversing links that cross domains.
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.
Features
- Create atomic notes with unique timestamp-based IDs
- Link notes bidirectionally to build a knowledge graph
- Tag notes for categorical organization
- Search notes by content, tags, or links
- Use markdown format for human readability and editing
- Integrate with Claude through MCP for AI-assisted knowledge management
- Dual storage architecture (see below)
- Synchronous operation model for simplified architecture
Examples
- Knowledge creation: A small Zettelkasten knowledge network about the Zettelkasten method itself
Note Types
The Zettelkasten MCP server supports different types of notes:
| Type | Handle | Description |
|---|---|---|
| Fleeting notes | fleeting | Quick, temporary notes for capturing ideas |
| Literature notes | literature | Notes from reading material |
| Permanent notes | permanent | Well-formulated, evergreen notes |
| Structure notes | structure | Index or outline notes that organize other notes |
| Hub notes | hub | Entry points to the Zettelkasten on key topics |
Link Types
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) |
Prompting
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:
System prompts
Pick one:
Project knowledge
For end users:
- zettelkasten-methodology-technical.md
- link-types-in-zettelkasten-mcp-server.md
- (more info relevant to your project)
Chat Prompts
- chat-prompt-knowledge-creation.md
- chat-prompt-knowledge-creation-batch.md
- chat-prompt-knowledge-exploration.md
- chat-prompt-knowledge-synthesis.md
Project knowledge (dev)
For developers and contributors:
NB: Optionally include the source code with a tool like repomix.
Storage Architecture
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:
- Edited directly in any text editor
- Placed under version control (Git, etc.)
- Backed up using standard file backup procedures
- Shared or transferred like any other text files
-
Database Index: Functions as an indexing layer that:
- Facilitates efficient querying and search operations
- Enables Claude to quickly traverse the knowledge graph
- Maintains relationship information for faster link traversal
- Is automatically rebuilt from Markdown files when needed
- Uses SQLite by default; provide a SQLAlchemy URL via
ZETTELKASTEN_DATABASEfor PostgreSQL or other backends
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.
Installation
Installing via Smithery
To install Zettelkasten MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install zettelkasten-mcp --client claude
Via uvx
uvx --from=git+https://github.com/entanglr/zettelkasten-mcp zettelkasten-mcp --notes-dir ./data/notes --database ./data/db/zettelkasten.db
Via pipx (native macOS/Linux/Windows)
Install from GitHub:
pipx install "git+https://github.com/entanglr/zettelkasten-mcp.git"
If/when published on PyPI, install from PyPI instead:
pipx install zettelkasten-mcp
Run the server:
zettelkasten-mcp --notes-dir ./data/notes --database ./data/db/zettelkasten.db
Native Apple Silicon (non-Docker)
On Apple Silicon Macs, prefer pipx/uvx for native darwin/arm64
execution. Docker images are Linux-only (linux/amd64, linux/arm64) and do
not provide a native darwin container target.
Docker image architecture support
The latest image tag is published as a multi-arch image manifest with:
linux/amd64linux/arm64
Backend support in the container image differs by architecture:
| Backend | linux/amd64 | linux/arm64 |
|---|---|---|
| SQLite | Supported | Supported |
| PostgreSQL | Supported | Supported |
| MySQL/MariaDB | Supported | Supported |
| SQL Server | Supported | Not supported |
linux/arm64 images intentionally skip SQL Server ODBC driver installation
(msodbcsql18) because upstream driver packaging is currently amd64-focused in
this Docker build strategy.
Local Development
# 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
Configuration
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.
To use PostgreSQL instead of the bundled SQLite database, install the optional driver and point ZETTELKASTEN_DATABASE at a SQLAlchemy URL:
pip install "zettelkasten-mcp[postgresql]"
export ZETTELKASTEN_DATABASE="postgresql+psycopg://user:password@localhost:5432/zettelkasten"
Using pipx:
pipx install "zettelkasten-mcp[postgresql]"
export ZETTELKASTEN_DATABASE="postgresql+psycopg://user:password@localhost:5432/zettelkasten"
ZETTELKASTEN_DATABASE accepts either a filesystem path (default ./data/db/zettelkasten.db) or any SQLAlchemy-compatible URL. Legacy ZETTELKASTEN_DATABASE_PATH / ZETTELKASTEN_DATABASE_URL variables are still honored for backward compatibility.
For MySQL or MariaDB support, install the mysql extra and supply a URL using the pymysql driver:
pip install "zettelkasten-mcp[mysql]"
export ZETTELKASTEN_DATABASE="mysql+pymysql://user:password@localhost:3306/zettelkasten"
Using pipx:
pipx install "zettelkasten-mcp[mysql]"
export ZETTELKASTEN_DATABASE="mysql+pymysql://user:password@localhost:3306/zettelkasten"
For Microsoft SQL Server, install the sqlserver extra and point to an ODBC connection string (requires the appropriate system ODBC driver, e.g. ODBC Driver 18 for SQL Server):
pip install "zettelkasten-mcp[sqlserver]"
export ZETTELKASTEN_DATABASE="mssql+pyodbc://user:password@server/database?driver=ODBC+Driver+18+for+SQL+Server"
Using pipx:
pipx install "zettelkasten-mcp[sqlserver]"
export ZETTELKASTEN_DATABASE="mssql+pyodbc://user:password@server/database?driver=ODBC+Driver+18+for+SQL+Server"
Note for container users: SQL Server support is available in the published
Docker image on linux/amd64 only. On linux/arm64, the container does not
include SQL Server ODBC drivers, so use SQLite/PostgreSQL/MySQL instead.
Usage
Starting the Server
python -m zettelkasten_mcp
Or with explicit configuration:
python -m zettelkasten_mcp --notes-dir ./data/notes --database ./data/db/zettelkasten.db
Or with PostgreSQL:
python -m zettelkasten_mcp --notes-dir ./data/notes \
--database postgresql+psycopg://user:password@localhost:5432/zettelkasten
Connecting to Claude Desktop
Using smithery
npx -y @smithery/cli install zettelkasten-mcp --client claude
Manually
Add the following configuration to your Claude Desktop:
{
"mcpServers": {
"zettelkasten": {
"command": "/absolute/path/to/zettelkasten-mcp/.venv/bin/python",
"args": ["-m", "zettelkasten_mcp"],
"env": {
"ZETTELKASTEN_NOTES_DIR": "/absolute/path/to/zettelkasten-mcp/data/notes",
"ZETTELKASTEN_DATABASE": "postgresql+psycopg://user:password@localhost:5432/zettelkasten",
"ZETTELKASTEN_LOG_LEVEL": "INFO"
}
}
}
}
Set ZETTELKASTEN_DATABASE to a filesystem path for SQLite or any SQLAlchemy URL (for example PostgreSQL) to choose the backend.
Available MCP Tools
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 |
Project Structure
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
Tests
Comprehensive test suite for Zettelkasten MCP covering all layers of the application from models to the MCP server implementation.
How to Run the Tests
From the project root directory, run:
Using pytest directly
python -m pytest -v tests/
Using UV
uv run pytest -v tests/
With coverage report
uv run pytest --cov=zettelkasten_mcp --cov-report=term-missing tests/
Running a specific test file
uv run pytest -v tests/test_models.py
Running a specific test class
uv run pytest -v tests/test_models.py::TestNoteModel
Running a specific test function
uv run pytest -v tests/test_models.py::TestNoteModel::test_note_validation
Tests Directory Structure
tests/
├── conftest.py - Common fixtures for all tests
├── test_integration.py - Integration tests for the entire system
├── test_mcp_server.py - Tests for MCP server tools
├── test_models.py - Tests for data models
├── test_note_repository.py - Tests for note repository
├── test_search_service.py - Tests for search service
├── test_semantic_links.py - Tests for semantic linking
└── test_zettel_service.py - Tests for zettel service
Important Notice
⚠️ 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.
Credit Where Credit's Due
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.
License
MIT License
Pre-commit (code formatting)
To keep code style consistent, this project uses pre-commit with black and isort configured.
Install and enable the hooks locally:
pip install pre-commit
pre-commit install
pre-commit run --all-files
If you use a virtual environment, make sure the environment is activated before running pre-commit install so the hooks point to the correct Python interpreter.
Editor configuration (VS Code)
This project includes recommended settings for Visual Studio Code to enable automatic import completions and organize imports on save. The workspace settings are in .vscode/settings.json and recommended extensions in .vscode/extensions.json.
Recommended VS Code extensions:
ms-python.python— Python language supportms-python.vscode-pylance— Pylance language server (provides auto-import completions)
Important settings (already configured):
python.analysis.autoImportCompletions: true— shows auto-import suggestions in completionseditor.codeActionsOnSave.source.organizeImports: true— runs import sorting on saveeditor.formatOnSave: truewith Black as the formatter
Activate the workspace settings by opening the project in VS Code; you may need to install the extensions and reload the window.
常见问题
Zettelkasten Knowledge Management Server 是什么?
Manage and explore atomic notes using the Zettelkasten methodology through an MCP-compatible interface. Create, link, search, and synthesize notes with AI assistance to build a rich, interconnected knowledge graph. Enhance your knowledge workflow with bidirectional linking, tagging, and markdown-based note storage.
相关 Skills
技能工坊
by anthropics
覆盖 Skill 从创建到迭代优化全流程:起草能力、补测试提示、跑评测与基准方差分析,并持续改写内容和描述,提升效果与触发准确率。
✎ 技能工坊把技能从创建、迭代到评测串成闭环,方差分析加描述优化,特别适合把触发准确率打磨得更稳。
PPT处理
by anthropics
处理 .pptx 全流程:创建演示文稿、提取和解析幻灯片内容、批量修改现有文件,支持模板套用、合并拆分、备注评论与版式调整。
✎ 涉及PPTX的创建、解析、修改到合并拆分都能一站搞定,连备注、模板和评论也能处理,做演示文稿特别省心。
PDF处理
by anthropics
遇到 PDF 读写、文本表格提取、合并拆分、旋转加水印、表单填写或加解密时直接用它,也能提取图片、生成新 PDF,并把扫描件通过 OCR 变成可搜索文档。
✎ PDF杂活别再来回切工具了,文本表格提取、合并拆分到OCR识别一次搞定,连扫描件也能变可搜索。
相关 MCP Server
文件系统
编辑精选by Anthropic
Filesystem 是 MCP 官方参考服务器,让 LLM 安全读写本地文件系统。
✎ 这个服务器解决了让 Claude 直接操作本地文件的痛点,比如自动整理文档或生成代码文件。适合需要自动化文件处理的开发者,但注意它只是参考实现,生产环境需自行加固安全。
by wonderwhy-er
Desktop Commander 是让 AI 直接执行终端命令、管理文件和进程的 MCP 服务器。
✎ 这工具解决了 AI 无法直接操作本地环境的痛点,适合需要自动化脚本调试或文件批量处理的开发者。它能让你用自然语言指挥终端,但权限控制需谨慎,毕竟让 AI 执行 rm -rf 可不是闹着玩的。
by stickerdaniel
LinkedIn Profile and Job Scraper 是让 Claude 直接抓取 LinkedIn 个人资料、公司信息和职位详情的工具。
✎ 这个服务器解决了招聘和商业调研中手动复制粘贴 LinkedIn 数据的痛点,适合猎头或市场分析师快速获取候选人背景和公司动态。不过,LinkedIn 反爬机制频繁更新,数据稳定性需要持续维护,使用时建议搭配人工验证。