obsidian-mcp-server
obsidian-mcp-server
一个用于 Obsidian 学习库的 MCP 服务器(模型上下文协议)。 让 Claude 能够访问笔记搜索、笔记内容、以卡片组格式创建闪卡, 以及学习追踪插件的学习计划。
Python,MCP SDK 2.x,stdio 传输。
用途
此前,逻辑分散在两个 Obsidian 插件中:
Decks(第三方插件)负责渲染闪卡,但不会创建闪卡——卡片 都是手工编写的。
Lerntracker(自有插件)管理学习进度和学习计划, 但不会自动将内容分配到具体日期。
这个服务器弥补了两个缺口:Claude 可以直接以现有
文件格式创建卡片,并计算学习计划,写回 Lerntracker 的 data.json。
Related MCP server: Nexus MCP for Obsidian
安装
cd ~/Projects/obsidian-mcp-server
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt配置
两个路径都来自环境变量——没有硬编码。
变量 | 默认值 | 说明 |
|
| 库的根目录 |
|
| Lerntracker 的数据库 |
Vault 路径的默认值适用于 iCloud 同步的 Obsidian;
对于其他设置,只需设置 OBSIDIAN_VAULT_PATH。
Lerntracker 路径可以单独设置,因为 Obsidian 库可能嵌套:
如果子文件夹中还有另一个库,它会有自己的
data.json。默认值指向主库的路径。
工具
工具 | 作用 |
| 在文件名和内容中不区分大小写地搜索。名称匹配会获得更高权重;返回路径 + 文本片段。只读 |
| 返回笔记的完整内容。只读 |
| 写入。 将一张卡片追加到 |
| 将笔记整理为结构化摘要。只读 |
| 写入。 创建 |
| 写入。 将未学习的子主题分配到各天,并写入 |
所有模式均由 SDK 根据类型提示和文档字符串自动生成——代码中 没有手写的 JSON 模式。
闪卡格式
create_flashcard 精确写入库中现有卡片使用的格式
(标题 + 段落),并附加指向来源笔记的维基链接:
---
tags: [decks]
---
## Was ist ein Signal?
Eine zeitabhängige, messbare physikalische Größe.
Quelle: [[01_Physikalische_Schicht]]目标文件路径由来源笔记的课程文件夹决定;deck 会覆盖
文件名。如果文件不存在,会以 tags: [decks] 创建。
如果存在完全相同的问题,则跳过而不是
重复创建。
牌组的学习状态存储在 SQLite 数据库中,而不是 Markdown 文件中。服务器不会修改它——FSRS 历史记录 保持不变。
为什么 generate_summary 不自己生成摘要
服务器没有语言模型。它只返回结构化笔记
(大纲、关键数字、全文);摘要由客户端侧的模型生成——
也就是 Claude Desktop。随后通过
save_summary 保存。这是常见的 MCP 角色分工:服务器提供
上下文并执行操作,模型负责撰写。
如果服务器自己生成摘要,就需要调用 Anthropic API 并持有自己的 API 密钥。
学习计划逻辑
generate_study_plan 将每个未学习的子主题分配到具体日期:
课程按考试日期排序——最早的考试优先。
学习截止日期 =
examDate − bufferDays;缓冲天数保留用于复习。学习日来自
settings.weeklyHours(0 = 周日 … 6 = 周六)。值为0的天以及所有blockedDates会被跳过。每个子主题需要
hours_per_subtopic(默认 1.5 小时),并分配到 剩余容量最早的一天。如果一天放不下, 则拆分到多天——插件支持多个dates。已完成的子主题以及已有
dates的子主题保持不变。无法在截止日期前安排的内容会作为警告报告,而不是静默丢弃。
每次写入前,会在文件旁创建备份
(data.backup-<时间戳>.json);写入通过临时文件原子完成。
dry_run=True 仅显示计划。
写入后,在 Obsidian 中按 Cmd+R 刷新,让插件重新加载。
资源
URI | 内容 |
| 库的文件夹树,包含每个文件夹的笔记数量 |
| 单条笔记的内容,只读 |
模板特意使用 {+path}(保留展开)而不是 {path}。
普通模板变量不匹配斜杠——使用 {path} 会导致子文件夹中的
笔记被静默地找不到,而库中
几乎每个笔记都在课程文件夹里。
使用 MCP Inspector 本地测试
Inspector 通过 SDK 的 CLI 启动,并打开一个 Web 界面,
可以在其中单独调用工具和资源。需要 npx
(Node.js)和 uv。
source .venv/bin/activate && mcp dev main.py该命令会输出一个类似 http://localhost:6274 的 URL(带有附加的
会话令牌)。在浏览器中打开,点击左侧的 Connect,然后:
Tools 选项卡 → List Tools → 选择一个工具,填写参数,Run Tool
Resources 选项卡 → List Resources → 点击
vault://structure对于模板化资源,直接输入 URI,格式为
note://<课程文件夹>/Flashcards/<文件>.md
使用不同的库:
OBSIDIAN_VAULT_PATH="$HOME/Pfad/zu/deinem/Vault" mcp dev main.py尝试写入工具时,建议使用一个一次性库:
OBSIDIAN_VAULT_PATH=/tmp/testvault mcp dev main.py连接 Claude Desktop
配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"obsidian-vault": {
"command": "/Users/DEIN_NAME/Projects/obsidian-mcp-server/.venv/bin/python",
"args": ["/Users/DEIN_NAME/Projects/obsidian-mcp-server/main.py"],
"env": {
"OBSIDIAN_VAULT_PATH": "/Users/DEIN_NAME/Pfad/zu/deinem/Vault"
}
}
}
}重要:使用绝对路径——这里不会展开 ~ 和 $HOME。
command 要指定 venv 中的 Python:Claude Desktop
启动服务器时不会激活环境,仅使用 "python3" 会找不到
mcp 包。
如果文件已存在,只需将 "obsidian-vault" 条目插入现有的
mcpServers 对象中。之后完全退出并重新启动
Claude Desktop;服务器会出现在输入框的工具菜单中。
安全性
来自工具或资源调用的每个路径都会对照库进行检查:
拒绝绝对路径和 .. 穿越,且解析后的目标必须
位于 OBSIDIAN_VAULT_PATH 之内。.obsidian、.git、.trash、
.claude 和 node_modules 被排除在搜索和结构列出之外——
否则插件包会淹没结果。
save_summary 不会覆盖已有文件,create_flashcard 不会
创建重复卡片,generate_study_plan 在写入前会备份 data.json。
测试情况
针对 Python 3.14 上的 mcp 2.0.0 进行了测试:工具模式、资源模板、
与真实 ClientSession 的 stdio 握手、路径防护,以及
针对一次性库的写入工具测试(包括多天拆分、
被阻止的日期、零小时的工作日以及溢出情况)。
许可证
MIT——参见 LICENSE。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables interaction with Obsidian vaults through MCP, supporting note creation from templates, link management, backlink analysis, tag operations, and automatic Map of Contents generation.112,4721MIT
- AlicenseNot gradedqualityAmaintenanceTurns your Obsidian vault into an MCP-enabled workspace with tools for reading/writing notes, managing folders, running semantic searches, and maintaining long-term memory—all while keeping data local to your vault.173,522150MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to search, read, and append content to notes in an Obsidian vault via the MCP protocol.2,472BSD Zero Clause
- AlicenseBqualityBmaintenanceBridges Obsidian vaults with MCP-compatible AI tools, enabling read/write/search of notes, task management, and vault operations through 34 tools and prompt templates.34571MIT
Related MCP Connectors
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, a…
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/MzaKhn/obsidian-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server