Obsidian MCP 服务器是一个基于模型上下文协议(MCP)的服务器,它能让像 Claude 这样的 AI 助手与你的 Obsidian 知识库进行交互。该服务器借助 Local REST API 插件,提供了读取、创建、搜索和管理 Obsidian 笔记的工具。
安装并配置 Obsidian:
配置你的 AI 工具:
编辑你的 Claude Desktop 配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"obsidian": {
"command": "uvx",
"args": ["obsidian-mcp"],
"env": {
"OBSIDIAN_REST_API_KEY": "your-api-key-here"
}
}
}
}
在你的 Cursor 设置中添加以下内容:
.cursor/mcp.json~/.cursor/mcp.json{
"mcpServers": {
"obsidian": {
"command": "uvx",
"args": ["obsidian-mcp"],
"env": {
"OBSIDIAN_REST_API_KEY": "your-api-key-here"
}
}
}
}
然后:打开“设置”→“Cursor 设置”→启用 MCP。
编辑你的 Windsurf 配置文件:
~/.codeium/windsurf/mcp_config.json{
"mcpServers": {
"obsidian": {
"command": "uvx",
"args": ["obsidian-mcp"],
"env": {
"OBSIDIAN_REST_API_KEY": "your-api-key-here"
}
}
}
}
然后:打开 Windsurf 设置→高级设置→级联→添加服务器→刷新。
将 your-api-key-here 替换为你从 Obsidian 复制的 API 密钥。
⚠️ 重要提示
如果你使用 HTTPS 或自定义端口,请在
env部分添加"OBSIDIAN_API_URL": "https://localhost:27124"。详情请参阅 高级配置。
重启你的 AI 工具 以加载新配置。
大功告成!现在你的 AI 工具可以访问你的 Obsidian 知识库了。
💡 使用建议
此安装方式使用了
uvx,它会自动下载并在隔离环境中运行服务器。大多数用户无需再安装其他东西。如果你没有安装uv,也可以使用pipx install obsidian-mcp,并在配置中将命令改为"obsidian-mcp"。
以下是一些示例提示,助你快速上手:
git clone https://github.com/natestrong/obsidian-mcp
cd obsidian-mcp
# 使用 pyenv(推荐)
pyenv virtualenv 3.12.9 obsidian-mcp
pyenv activate obsidian-mcp
# 或者使用 venv
python -m venv venv
source venv/bin/activate # 在 Windows 上:venv\Scripts\activate
pip install -r requirements.txt
export OBSIDIAN_REST_API_KEY="your-api-key-here"
# export OBSIDIAN_API_URL="https://localhost:27124" # 可选:仅在使用 HTTPS 时设置
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"obsidian": {
"command": "/path/to/python",
"args": ["-m", "src.server"],
"cwd": "/path/to/obsidian-mcp",
"env": {
"PYTHONPATH": "/path/to/obsidian-mcp",
"OBSIDIAN_REST_API_KEY": "your-api-key-here"
}
}
}
}
安装并配置 Obsidian:
配置你的 AI 工具:
编辑你的 Claude Desktop 配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"obsidian": {
"command": "uvx",
"args": ["obsidian-mcp"],
"env": {
"OBSIDIAN_REST_API_KEY": "your-api-key-here"
}
}
}
}
在你的 Cursor 设置中添加以下内容:
.cursor/mcp.json~/.cursor/mcp.json{
"mcpServers": {
"obsidian": {
"command": "uvx",
"args": ["obsidian-mcp"],
"env": {
"OBSIDIAN_REST_API_KEY": "your-api-key-here"
}
}
}
}
然后:打开“设置”→“Cursor 设置”→启用 MCP。
编辑你的 Windsurf 配置文件:
~/.codeium/windsurf/mcp_config.json{
"mcpServers": {
"obsidian": {
"command": "uvx",
"args": ["obsidian-mcp"],
"env": {
"OBSIDIAN_REST_API_KEY": "your-api-key-here"
}
}
}
}
然后:打开 Windsurf 设置→高级设置→级联→添加服务器→刷新。
将 your-api-key-here 替换为你从 Obsidian 复制的 API 密钥。
⚠️ 重要提示
如果你使用 HTTPS 或自定义端口,请在
env部分添加"OBSIDIAN_API_URL": "https://localhost:27124"。详情请参阅 高级配置。
重启你的 AI 工具 以加载新配置。
大功告成!现在你的 AI 工具可以访问你的 Obsidian 知识库了。
💡 使用建议
此安装方式使用了
uvx,它会自动下载并在隔离环境中运行服务器。大多数用户无需再安装其他东西。如果你没有安装uv,也可以使用pipx install obsidian-mcp,并在配置中将命令改为"obsidian-mcp"。
git clone https://github.com/natestrong/obsidian-mcp
cd obsidian-mcp
# 使用 pyenv(推荐)
pyenv virtualenv 3.12.9 obsidian-mcp
pyenv activate obsidian-mcp
# 或者使用 venv
python -m venv venv
source venv/bin/activate # 在 Windows 上:venv\Scripts\activate
pip install -r requirements.txt
export OBSIDIAN_REST_API_KEY="your-api-key-here"
# export OBSIDIAN_API_URL="https://localhost:27124" # 可选:仅在使用 HTTPS 时设置
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"obsidian": {
"command": "/path/to/python",
"args": ["-m", "src.server"],
"cwd": "/path/to/obsidian-mcp",
"env": {
"PYTHONPATH": "/path/to/obsidian-mcp",
"OBSIDIAN_REST_API_KEY": "your-api-key-here"
}
}
}
}
# 克隆仓库
git clone https://github.com/natestrong/obsidian-mcp
cd obsidian-mcp
# 设置 Python 环境
# 使用 pyenv(推荐)
pyenv virtualenv 3.12.9 obsidian-mcp
pyenv activate obsidian-mcp
# 或者使用 venv
python -m venv venv
source venv/bin/activate # 在 Windows 上:venv\Scripts\activate
# 安装依赖项
pip install -r requirements.txt
# 设置 Obsidian Local REST API
# 在 Obsidian 中安装 Local REST API 插件
# 在 Obsidian 设置中启用该插件
# 从插件设置中复制 API 密钥
# 记录端口号(默认:HTTP 为 27123,HTTPS 为 27124)
# 配置环境变量
export OBSIDIAN_REST_API_KEY="your-api-key-here"
# export OBSIDIAN_API_URL="https://localhost:27124" # 可选:仅在使用 HTTPS 时设置
# 添加到 Claude Desktop(用于开发)
# 编辑你的 Claude Desktop 配置文件:
# - macOS:`~/Library/Application Support/Claude/claude_desktop_config.json`
# - Windows:`%APPDATA%\Claude\claude_desktop_config.json`
# {
# "mcpServers": {
# "obsidian": {
# "command": "/path/to/python",
# "args": ["-m", "src.server"],
# "cwd": "/path/to/obsidian-mcp",
# "env": {
# "PYTHONPATH": "/path/to/obsidian-mcp",
# "OBSIDIAN_REST_API_KEY": "your-api-key-here"
# }
# }
# }
# }
# 运行测试
# 运行所有测试
python tests/run_tests.py
# 运行特定类型的测试
python tests/run_tests.py unit # 单元测试(需要 pytest)
python tests/run_tests.py integration # 集成测试(需要 pytest)
python tests/run_tests.py live # 使用真实 Obsidian 进行实时测试
# 运行单个测试文件
python tests/test_comprehensive.py # 完整工作流测试
python tests/test_data_validation.py # 数据结构验证
obsidian-mcp/
├── src/
│ ├── server.py # 主入口点,具有丰富的参数模式
│ ├── tools/ # 工具实现
│ │ ├── note_management.py # CRUD 操作
│ │ ├── search_discovery.py # 搜索和导航
│ │ ├── organization.py # 标签、移动、元数据
│ │ └── link_management.py # 反向链接、出站链接、断链
│ ├── models/ # 用于验证的 Pydantic 模型
│ │ └── obsidian.py # 笔记、搜索结果、知识库项模型
│ ├── utils/ # 共享实用工具
│ │ ├── obsidian_api.py # REST API 客户端包装器
│ │ ├── validators.py # 路径验证、清理
│ │ └── validation.py # 全面的参数验证
│ └── constants.py # API 端点、默认值、增强的错误消息
├── tests/
│ ├── run_tests.py # 智能测试运行器
│ ├── test_unit.py # 带模拟的单元测试
│ ├── test_integration.py # 集成测试
│ ├── test_live.py # 实时 API 测试
│ ├── test_comprehensive.py # 完整工作流验证
│ └── test_data_validation.py # 返回值测试
├── docs/ # 额外的文档
├── requirements.txt # Python 依赖项
├── CLAUDE.md # Claude 代码说明
└── README.md
read_note读取特定笔记的内容和元数据。 参数:
path:笔记的路径(例如,"Daily/2024-01-15.md")
返回值:{
"path": "Daily/2024-01-15.md",
"content": "# 日常笔记\n\n这里是内容...",
"metadata": {
"tags": ["daily", "journal"],
"aliases": [],
"frontmatter": {}
}
}
create_note创建新笔记或更新现有笔记。 参数:
path:笔记的创建路径content:笔记的 Markdown 内容(建议添加标签以进行组织)overwrite(默认:false):是否覆盖现有笔记
最佳实践:list_tags 查看现有标签,以保持一致性。#tag)或前置元数据添加。update_note更新现有笔记的内容。 ⚠️ 重要提示:默认情况下,此工具会替换整个笔记内容。如果需要保留现有内容,请先读取笔记。 参数:
path:要更新的笔记路径content:新的 Markdown 内容(除非使用追加模式,否则将替换现有内容)create_if_not_exists(默认:false):如果笔记不存在则创建merge_strategy(默认:"replace"):处理内容的方式
"replace":覆盖整个笔记内容(默认)"append":将新内容添加到现有内容的末尾
安全更新模式:delete_note从知识库中删除笔记。 参数:
path:要删除的笔记路径search_notes搜索包含特定文本或标签的笔记。 参数:
query:搜索查询(支持 Obsidian 搜索语法)context_length(默认:100):匹配项周围显示的字符数
搜索语法:"机器学习"tag:project 或 tag:#projectpath:Daily/tag:urgent TODOsearch_by_date按创建或修改日期搜索笔记。 参数:
date_type(默认:"modified"):可以是 "created" 或 "modified"days_ago(默认:7):回顾的天数operator(默认:"within"):可以是 "within"(过去 N 天)或 "exactly"(正好 N 天前)
返回值:{
"query": "过去 7 天内修改的笔记",
"count": 15,
"results": [
{
"path": "Daily/2024-01-15.md",
"date": "2024-01-15T10:30:00",
"days_ago": 1
}
]
}
示例用法:
search_by_date("modified", 0, "within")search_by_date("modified", 7, "within")search_by_date("created", 30, "within")search_by_date("modified", 2, "exactly")list_notes列出知识库中的笔记,可选择递归遍历。 参数:
directory(可选):要列出的特定目录(例如,"Daily","Projects")recursive(默认:true):递归列出所有笔记
返回值:{
"directory": "Daily",
"recursive": true,
"count": 365,
"notes": [
{"path": "Daily/2024-01-01.md", "name": "2024-01-01.md"},
{"path": "Daily/2024-01-02.md", "name": "2024-01-02.md"}
]
}
list_folders列出知识库中的文件夹,可选择递归遍历。 参数:
directory(可选):要列出的特定目录recursive(默认:true):包括所有嵌套子文件夹
返回值:{
"directory": "Projects",
"recursive": true,
"count": 12,
"folders": [
{"path": "Projects/Active", "name": "Active"},
{"path": "Projects/Archive", "name": "Archive"},
{"path": "Projects/Ideas", "name": "Ideas"}
]
}
create_folder在知识库中创建新文件夹,包括路径中的所有父文件夹。 参数:
folder_path:要创建的文件夹路径(例如,"Apple/Studies/J71P")create_placeholder(默认:true):是否创建占位符文件
返回值:{
"folder": "Apple/Studies/J71P",
"created": true,
"placeholder_file": "Apple/Studies/J71P/.gitkeep",
"folders_created": ["Apple", "Apple/Studies", "Apple/Studies/J71P"]
}
注意:此工具将创建所有必要的父文件夹。例如,如果 "Apple" 存在但 "Studies" 不存在,它将创建 "Studies" 和 "J71P"。
move_note将笔记移动到新位置。 参数:
source_path:笔记的当前路径destination_path:笔记的新路径update_links(默认:true):更新其他笔记中的链接(未来增强功能)move_folder将整个文件夹及其所有内容移动到新位置。 参数:
source_folder:当前文件夹路径(例如,"Projects/Old")destination_folder:新文件夹路径(例如,"Archive/Projects/Old")update_links(默认:true):更新其他笔记中的链接(未来增强功能)
返回值:{
"source": "Projects/Completed",
"destination": "Archive/2024/Projects",
"moved": true,
"notes_moved": 15,
"folders_moved": 3,
"links_updated": 0
}
add_tags向笔记的前置元数据中添加标签。 参数:
path:笔记的路径tags:要添加的标签列表(不带 # 前缀)update_tags更新笔记上的标签 - 可以替换所有标签或与现有标签合并。 参数:
path:笔记的路径tags:要设置的新标签(不带 # 前缀)merge(默认:false):如果为 true,则添加到现有标签;如果为 false,则替换所有标签
非常适合 AI 工作流:用户:"告诉我这篇笔记是关于什么的,并添加适当的标签"
AI:[读取笔记] "这篇笔记是关于机器学习研究的..."
AI:[使用 update_tags 设置标签:["ai", "research", "neural-networks"]]
remove_tags从笔记的前置元数据中删除标签。 参数:
path:笔记的路径tags:要删除的标签列表get_note_info获取笔记的元数据和统计信息,而无需检索其完整内容。 参数:
path:笔记的路径
返回值:{
"path": "Projects/AI Research.md",
"exists": true,
"metadata": {
"tags": ["ai", "research"],
"aliases": [],
"frontmatter": {}
},
"stats": {
"size_bytes": 4523,
"word_count": 823,
"link_count": 12
}
}
list_tags列出知识库中使用的所有唯一标签及其使用统计信息。 参数:
include_counts(默认:true):包括每个标签的使用计数sort_by(默认:"name"):按 "name" 或 "count" 排序
返回值:{
"total_tags": 25,
"tags": [
{"name": "project", "count": 42},
{"name": "meeting", "count": 38},
{"name": "idea", "count": 15}
]
}
性能说明:
⚡ 性能说明:链接管理工具在 v1.1.5 中进行了重大优化:
get_backlinks查找所有链接到特定笔记的笔记。 参数:
path:要查找反向链接的笔记路径include_context(默认:true):是否包括链接周围的文本上下文context_length(默认:100):要包括的上下文的字符数
返回值:{
"target_note": "Projects/AI Research.md",
"backlink_count": 5,
"backlinks": [
{
"source_path": "Daily/2024-01-15.md",
"link_text": "AI 研究",
"link_type": "wiki",
"context": "...今天正在进行 [[AI 研究]] 项目..."
}
]
}
使用场景:
get_outgoing_links列出特定笔记中的所有链接。 参数:
path:要提取链接的笔记路径check_validity(默认:false):是否检查链接的笔记是否存在
返回值:{
"source_note": "Projects/Overview.md",
"link_count": 8,
"links": [
{
"path": "Projects/AI Research.md",
"display_text": "AI 研究",
"type": "wiki",
"exists": true
}
]
}
使用场景:
find_broken_links查找知识库、特定目录或单个笔记中的所有断链。 参数:
directory(可选):要检查的特定目录(默认为整个知识库)single_note(可选):仅检查此特定笔记中的断链
返回值:{
"directory": "/",
"broken_link_count": 3,
"affected_notes": 2,
"broken_links": [
{
"source_path": "Projects/Overview.md",
"broken_link": "Projects/Old Name.md",
"link_text": "旧项目",
"link_type": "wiki"
}
]
}
使用场景:
# 运行所有测试
python tests/run_tests.py
# 运行特定类型的测试
python tests/run_tests.py unit # 单元测试(需要 pytest)
python tests/run_tests.py integration # 集成测试(需要 pytest)
python tests/run_tests.py live # 使用真实 Obsidian 进行实时测试
# 运行单个测试文件
python tests/test_comprehensive.py # 完整工作流测试
python tests/test_data_validation.py # 数据结构验证
npx @modelcontextprotocol/inspector python -m src.server
http://localhost:5173 打开。有关开发安装,请参阅上面的 开发安装 部分。
服务器提供详细、可操作的错误消息,以帮助 AI 系统从错误中恢复。
无效路径:
无效的笔记路径:'../../../etc/passwd'。
有效路径必须:1) 以 .md 或 .markdown 结尾;2) 使用正斜杠(例如,'folder/note.md');
3) 不包含 '..' 或不以 '/' 开头;4) 不超过 255 个字符。
示例:'Daily/2024-01-15.md' 或 'Projects/My Project.md'
空搜索查询:
搜索查询不能为空。
有效查询:1) 关键字:'机器学习';
2) 标签:'tag:#project';3) 路径:'path:Daily/';
4) 组合:'tag:#urgent TODO'
无效日期参数:
无效的 date_type:'invalid'。
必须是 'created' 或 'modified'。
使用 'created' 按创建日期查找笔记,使用 'modified' 按最后编辑日期查找笔记。
tags: [tag1, tag2]。#project #urgent。python -m src.server。list_notes 时指定目录(例如,"Daily","Projects")。tags: 字段(即使为空)。update_note 工具会替换内容。merge_strategy="append"。read_note 验证笔记是否存在。overwrite=true。安全的笔记编辑:
添加到日常笔记:
merge_strategy="append" 添加条目,而不会丢失现有内容。创建新笔记:
create_note 并将 overwrite=false(默认)以防止意外覆盖。list_tags 查看现有标签,避免创建重复标签。使用标签进行组织:
list_tags 检查现有标签。src/tools/ 下的适当模块中创建工具函数。src/models/ 中添加 Pydantic 模型。@mcp.tool() 装饰器在 src/server.py 中注册工具。tests/ 中添加测试。http://127.0.0.1:27123),以便于设置。get_backlinks - 查找所有链接到特定笔记的笔记。get_outgoing_links - 列出笔记中的所有链接,并检查其有效性。find_broken_links - 识别断链,以进行知识库维护。search_by_date 以正确查找今天修改的笔记(days_ago=0)。list_folders 工具,用于探索知识库文件夹结构。create_folder 工具,用于创建完整的文件夹层次结构。move_folder 工具,用于批量文件夹操作。update_tags 工具,用于 AI 驱动的标签管理。list_tags 工具,用于发现现有标签及其使用统计信息。create_note 以鼓励使用标签,以实现更好的组织。要将新版本发布到 PyPI,请执行以下操作:
# 1. 在 pyproject.toml 中更新版本号
# 2. 清理旧构建
rm -rf dist/ build/ *.egg-info/
# 3. 构建包
python -m build
# 4. 检查包
twine check dist/*
# 5. 上传到 PyPI
twine upload dist/* -u __token__ -p $PYPI_API_KEY
# 6. 创建并推送 git 标签
git tag -a v1.1.7 -m "发布版本 1.1.7"
git push origin v1.1.7
用户可以使用以下命令进行安装和运行:
# 使用 uvx(推荐 - 无需安装)
uvx obsidian-mcp
# 或者使用 pipx 全局安装
pipx install obsidian-mcp
obsidian-mcp
# 或者使用 pip 安装
pip install obsidian-mcp
obsidian-mcp
如果你使用非标准设置,可以使用以下环境变量自定义服务器行为:
OBSIDIAN_API_URL - 覆盖默认的 API 端点(默认:http://127.0.0.1:27123)
https://localhost:27124),请使用此选项。http://127.0.0.1:27123 和 http://127.0.0.1:27123/ 都可以)。{
"mcpServers": {
"obsidian": {
"command": "uvx",
"args": ["obsidian-mcp"],
"env": {
"OBSIDIAN_REST_API_KEY": "your-api-key-here",
"OBSIDIAN_API_URL": "https://localhost:27124"
}
}
}
}
git checkout -b feature/amazing-tool)。git commit -m '添加出色的工具')。git push origin feature/amazing-tool)。本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。