Obsidian MCP服务器插件

一个为Obsidian设计的插件,作为MCP(模型上下文协议)服务器,使Claude Desktop和其他AI助手能够直接与Obsidian库交互。

  • by senseiBas
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 senseiBas/mcp-server

使用说明

黑曜石MCP服务器插件

项目概述

这是一个黑曜石插件,用作MCP(模型上下文协议)服务器,使Claude Desktop和其他AI助手能够直接与黑曜石库交互。它提供了MCP协议(由Claude Desktop使用)和Obsidian API之间的桥梁。

作者 老师贝斯 / Sensei Bass 许可证: 麻省理工学院 版本: 1.0.0

建筑

高级设计

Claude Desktop (stdio)
    ↓
stdio-bridge.js (converts stdio ↔ HTTP)
    ↓
MCP Server (HTTP on localhost:3000)
    ↓
Obsidian API (vault access)

为什么选择HTTP而不是stdio?

黑曜石在Electron中运行,而Electron没有直接的stdio访问权限。此插件在本地运行HTTP服务器(localhost:3000),并使用stdio网桥(stdio-bridge.js)在以下两者之间转换:

  • Claude Desktop基于stdio的MCP协议
  • 此插件基于HTTP的实现

这种架构是 安全意识:HTTP服务器只监听本地主机,阻止外部网络访问。

核心组件

1.MCP服务器(src/mcp-server.ts)

主服务器类:

  • 在端口3000上运行HTTP服务器(仅限本地主机)
  • 在JSON-RPC 2.0上实现MCP协议
  • 处理三种核心MCP方法:
    • initialize -协议握手
    • tools/list -返回可用工具
    • tools/call -执行工具

关键实施细节:

  • 使用Electron的内置 http 模块(非节点)
  • 为本地主机启用CORS
  • 所有请求都是POST(CORS飞行前的选项)
  • 通知(以开头的方法 notifications/)已确认但未处理

2.可用工具

该插件为vault交互提供了四种工具:

search_notes

地点: src/tools/search-notes.ts 目的: 按查询文本搜索vault笔记 参数:

  • query (必填):搜索文本(搜索标题和内容)
  • folder (可选):按文件夹路径筛选
  • tag (可选):按标签筛选(不带#)
  • limit (可选):最大结果(默认值:10)

退货: 带有片段的匹配笔记的JSON数组

get_note

地点: src/tools/get-note.ts 目的: 阅读特定笔记的完整内容和元数据 参数:

  • path (必需):要注释的Vault路径

退货: 注意内容、元数据、封面、标签、链接

重要提示: 使用 search_notes 首先找到正确的路径,然后使用 get_note 阅读完整内容。

get_related_notes

地点: src/tools/get-related-notes.ts 目的: 查找与特定笔记相关的笔记 参数:

  • path (必需):要注释的Vault路径

退货:

  • 传出链接(注意此注释链接到)
  • 传入链接/反向链接(链接到此注释的注释)

注: 仅返回路径-使用 get_note 阅读相关笔记的全部内容。

append_to_note

地点: src/tools/append-to-note.ts 目的: 将内容附加到现有注释的末尾 参数:

  • path (必需):要注释的Vault路径
  • content (必填):要附加的Markdown内容

退货: 成功消息

使用案例: 添加新信息、记录、扩展笔记而不替换内容

3.插件入口点(main.ts)

主要的黑曜石插件类:

  • 加载/卸载插件
  • 启动/停止MCP服务器
  • 与Obsidian的插件系统集成

4.斯迪奥大桥(stdio-bridge.js)

独立的Node.js脚本:

  • 从stdin(从Claude Desktop)读取JSON-RPC
  • 转发到HTTP服务器(此插件)
  • 将HTTP响应发送回stdout
  • 处理初始化和工具调用

开发指南

构建命令

npm install          # Install dependencies
npm run dev          # Watch mode (rebuilds on changes)
npm run build        # Production build

项目结构

.
├── src/
│   ├── mcp-server.ts          # Main MCP server implementation
│   ├── types.ts               # TypeScript types
│   └── tools/
│       ├── search-notes.ts    # Search functionality
│       ├── get-note.ts        # Note reading
│       ├── get-related-notes.ts  # Link traversal
│       └── append-to-note.ts  # Note appending
├── main.ts                    # Obsidian plugin entry point
├── stdio-bridge.js            # Claude Desktop bridge
├── manifest.json              # Plugin manifest
└── package.json               # Dependencies

关键依赖关系

  • obsidian -黑眼圈API类型
  • esbuild -构建工具
  • typescript -语言
  • 内置Node.js http 模块(通过电子)

测试

node test-connection.js  # Test HTTP server directly
node test-mcp.js        # Test MCP protocol

协议细节

MCP(模型上下文协议)

此插件在JSON-RPC 2.0上实现了MCP 2024-11-05协议版本。

支持的方法:

  • initialize -握手,回报能力
  • tools/list -返回带有JSON模式的工具定义
  • tools/call -执行带有参数的工具

工具响应格式:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Tool result as string"
      }
    ]
  }
}

错误处理

标准JSON-RPC错误代码:

  • -32601 -未找到方法
  • -32603 -内部错误/工具执行失败

配置

Claude桌面设置

窗户:

{
  "mcpServers": {
    "obsidian-vault": {
      "command": "node",
      "args": [
        "C:\\Path\\To\\Vault\\.obsidian\\plugins\\mcp-server\\stdio-bridge.js"
      ]
    }
  }
}

macOS/Linux:

{
  "mcpServers": {
    "obsidian-vault": {
      "command": "node",
      "args": [
        "/path/to/vault/.obsidian/plugins/mcp-server/stdio-bridge.js"
      ]
    }
  }
}

常见模式

搜索笔记

  1. 使用 search_notes 带有查询
  2. 可选择按文件夹或标签过滤
  3. 获取具有路径的匹配笔记列表

阅读笔记内容

  1. 使用 search_notes 查找笔记路径
  2. 使用 get_note 具有读取完整内容的确切路径

探索相关笔记

  1. 使用 get_related_notes 查找链接笔记
  2. 使用 get_note 在每个相关路径上读取内容
  3. 递归探索构建知识图谱

添加到备注

  1. 使用 search_notes 或 get_note 验证钞票是否存在
  2. 使用 append_to_note 在末尾添加内容

安全注意事项

  • HTTP服务器仅侦听 localhost (127.0.0.1)
  • 无外部网络访问
  • 无需身份验证(假设本地环境可信)
  • CORS仅对本地主机启用

故障排除

服务器无法启动

  • 检查端口3000是否已在使用中
  • 检查黑曜石开发人员控制台(Ctrl+Shift+I)

Claude Desktop无法连接

  • 验证Obsidian是否正在运行
  • 验证插件是否在黑曜石设置中启用
  • 检查路径 claude_desktop_config.json 是正确的
  • 完全重新启动克劳德桌面

工具调用失败

  • 检查Obsidian控制台是否有错误消息
  • 验证注释路径是否正确(区分大小写)
  • 阅读前确保笔记存在

未来增强思路

基于 findings.md,要添加的潜在功能:

  1. 基础查询执行 -执行Dataview查询,返回结果
  2. 插件集成 -列出已安装的插件,访问其数据
  3. 笔记创建 -创建新笔记(目前仅追加)
  4. 注释修改 -编辑现有内容(而不仅仅是追加)
  5. 文件操作 -移动、重命名、删除笔记
  6. 图形分析 -高级链接图查询
  7. Canvas集成 -读取/修改画布文件

参考文献