Obsidian MCP 服务器是基于 Model Context Protocol 的功能模块,可在 Obsidian 的 vault 中实现强大的文件与内容管理能力。借助调用工具资源,它能执行复杂的文本处理和内容操作。
Obsidian MCP 服务器能助力开发者在 Obsidian vault 中实现复杂的文本处理和文件管理。下面为你介绍其安装与配置步骤。
npm install obsidian-mcp-server
package.json 中添加如下配置:"mcp_server": {
"vault_root": "./vault", // 指定 vault 根目录路径
"port": 3001, // 可选,默认端口为 3001
"log_level": "info" // 可选,日志级别:debug、info、warning、error
}
npm start
git clone https://github.com/mcptoolkit/obsidian-mcp-server.git
cd obsidian-mcp-server
npm install
config.json 文件中填写以下信息:{
"vault_root": "./vault", // 指定 vault 根目录
"port": 3001, // 可选,默认端口为 3001
"log_level": "info" // 可选,日志级别:debug、info、warning、error
}
npm start
// 列出指定目录下的文件
const result = await client.call("obsidian_list_files_in_dir", { dirpath: "./" });
console.log(result);
// 读取文件内容
const content = await client.call("obsidian_get_file_contents", { filepath: "notes/README.md" });
console.log(content);
// 简单文本搜索
const result = await client.call("obsidian_find_in_file", {
filepath: "notes/index.md",
query: "hello"
});
console.log(result);
// 复杂搜索(JsonLogic)
const result = await client.call("obsidian_complex_search", {
query: "{ \"and\": [\n" +
" { \"glob\": [\"docs/*.md\", { \"var\": \"path\" } ] },\n" +
" { \"in\": [=\"#todo\", { \"var\": \"frontmatter.tags\" } ] }\n" +
"] }"
});
console.log(result);
// 查询文件属性
const metadata = await client.call("obsidian_get_file_metadata", { filepath: "notes/todo.md" });
console.log(metadata);
// 更新文件属性
const result = await client.call("obsidian_update_file_properties", {
filepath: "notes/todo.md",
properties: {
priority: "high",
due_date: "2024-03-15"
}
});
console.log(result);
通过设置定时任务,定期调用 MCP 服务器的 obsidian_list_files_in_dir 和 obsidian_move_file 接口,将指定目录下的文件按日期归档。
const { DateTime } = require('luxon');
async function archiveOldFiles() {
const today = DateTime.local().toISODate();
const files = await client.call("obsidian_list_files_in_dir", { dirpath: "./old" });
for (const file of files) {
if (file.lastModified < today) {
await client.call("obsidian_move_file", {
from_path: `old/${file.name}`,
to_path: `archived/${today}/${file.name}`
});
}
}
}
setInterval(archiveOldFiles, 86400000); // 每天执行一次
结合自然语言处理工具,定期分析文件内容并自动分类。
async function autoCategorize() {
const files = await client.call("obsidian_list_files_in_dir", { dirpath: "./notes" });
for (const file of files) {
const content = await client.call("obsidian_get_file_contents", { filepath: `notes/${file.name}` });
const category = getCategoryFromContent(content);
if (category) {
await client.call("obsidian_move_file", {
from_path: `notes/${file.name}`,
to_path: `${category}/${file.name}`
});
}
}
}
setInterval(autoCategorize, 604800000); // 每周执行一次
// 列出 vault 中的所有文件
obsidian_list_files_in_vault: {
}
// 列出指定目录下的文件
obsidian_list_files_in_dir: {
dirpath: string; // 相对于 vault 根目录的路径
}
// 获取文件内容
obsidian_get_file_contents: {
filepath: string; // 相对于 vault 根目录的路径
}
// 在文件中查找文本并返回上下文
obsidian_find_in_file: {
query: string,
contextLength?: number // 默认上下文长度为10
}
// 使用 JsonLogic 表达式进行复杂搜索
obsidian_complex_search: {
query: JsonLogicQuery
// 示例:
// 按标签查找:"{"in": ["#mytag", {"var": "frontmatter.tags"}]}"
//
// 按目录查找:"{"glob": ["docs/*.md", {"var": "path"}]}"
//
// 组合条件:"{"and": [
// {"glob": ["*.md", {"var": "path"}]},
// {"in": ["#mytag", {"var": "frontmatter.tags"}]}
// ]}'
}
// 追加内容到文件末尾
obsidian_append_content: {
filepath: string, // 相对于 vault 根目录的路径
content: string // 要追加的内容
}
// 替换文件内容
obsidian_patch_content: {
filepath: string, // 相对于 vault 根目录的路径
content: string // 新的内容
}
// 获取文件元数据
obsidian_get_file_metadata: {
filepath: string // 相对于 vault 根目录的路径
}
// 更新文件属性
obsidian_update_file_properties: {
filepath: string, // 相对于 vault 根目录的路径
properties: { // 需要更新的属性
[key: string]: any
}
}
vault_root 和日志级别,以便服务器正常运行。Obsidian MCP 服务器基于 Model Context Protocol 构建,通过调用该协议的接口,实现了在 Obsidian vault 中的文件和内容管理功能。服务器使用 Node.js 开发,借助 npm 进行依赖管理。在配置方面,可通过 package.json 或 config.json 文件指定 vault 根目录、端口和日志级别等参数。在文件操作上,支持原子操作,保证文件写入的安全性;在内容搜索方面,提供了简单文本搜索和基于 JsonLogic 的复杂搜索功能;在属性管理方面,可查询和更新文件的元数据。
项目基于 MIT 协议开源。