德文
为Claude Code开发MCP服务器。零配置设置——一个命令就完成了。
33个工具,用于完整的DEVONthink集成——搜索、CRUD、AI、标签、智能组、电子邮件线程等。所有MIT许可,除MCP SDK外无外部依赖。
______________________________________________________________________
快速开始
如果你有克劳德密码,只需问:
“嘿,克劳德,从github.com/mnott/Devon克隆Devon并为我设置它”
Claude将克隆仓库,构建它,配置 ~/.claude.json,并启用服务器。重新启动Claude Code,所有33个DEVONthink工具都可用。
______________________________________________________________________
它提供了什么
在运行此服务器的情况下,Claude Code可以:
- 搜索并浏览所有打开的DEVONthink数据库
- 读取文档内容(PDF、Markdown、纯文本、HTML、富格文本)
- 创建、更新和删除记录
- 跨组移动、复制、拷贝和转换记录
- 添加和删除标签、对文档进行分类、管理元数据
- 向DEVONthink的内置AI询问文档并创建摘要
- 将电子邮件与存档文件进行交叉引用
- 列出和导航数据库组
- 列出智能组和智能规则(无法通过AppleScript访问)
- 解析EML标头以进行电子邮件线程关联
- 读取并复制列布局配置
______________________________________________________________________
需求
- macOS(DEVONthink仅适用于macOS)
- 发展思维3或4 已安装并正在运行
- Node.js>=18
- 克劳德代码
______________________________________________________________________
安装
选项1:问克劳德(推荐)
在Claude Code中,让Claude进行设置:
“将Devon从github.com/mnott/Devon克隆到~/ai并对其进行配置”
Claude克隆、构建、配置 ~/.claude.json,并启用MCP服务器。
选项2:安装向导
npx @tekmidian/devon setup交互式CLI,用于检查先决条件、配置 ~/.claude.json,并启用服务器。
选项3:克隆和构建
git clone https://github.com/mnott/Devon ~/dev/ai/devon
cd ~/dev/ai/devon
npm install
npm run build
node dist/index.js setup______________________________________________________________________
手动配置
如果您更喜欢手动配置Claude代码,请将其添加到 mcpServers 部分 ~/.claude.json:
"devonthink": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@tekmidian/devon", "serve"],
"env": {}
}或者,如果您在本地安装了它:
"devonthink": {
"type": "stdio",
"command": "node",
"args": ["/path/to/devon/dist/index.js", "serve"],
"env": {}
}编辑后重新启动Claude代码 ~/.claude.json.
______________________________________________________________________
工具
按类别组织的所有33个工具。
应用
| 工具 | 说明 |
|---|---|
is_running | 检查DEVONthink是否正在运行 |
数据库
| 工具 | 说明 |
|---|---|
get_open_databases | 列出所有打开的数据库 |
current_database | 获取最前端的数据库 |
记录
| 工具 | 说明 |
|---|---|
create_record | 创建新记录(标记、文本、HTML等) |
delete_record | 按UUID删除记录 |
get_record_by_identifier | 通过UUID获取记录 |
get_record_properties | 获取记录的元数据属性 |
get_record_content | 读取记录的内容 |
update_record_content | 更新记录的内容 |
set_record_properties | 设置记录的元数据属性 |
rename_record | 重命名记录 |
move_record | 将记录移动到其他组或数据库 |
replicate_record | 在另一个组中创建记录的复制者 |
duplicate_record | 创建记录的独立副本 |
convert_record | 将记录转换为其他类型 |
群组
| 工具 | 说明 |
|---|---|
list_group_content | 列出组的内容 |
selected_records | 在DEVONthink中获取当前选定的记录 |
搜索
| 工具 | 说明 |
|---|---|
search | 使用DEVONthink查询语法跨数据库搜索 |
lookup_record | 按名称或路径查找记录 |
标签
| 工具 | 说明 |
|---|---|
add_tags | 向记录添加标签 |
remove_tags | 从记录中删除标签 |
网络
| 工具 | 说明 |
|---|---|
create_from_url | 从URL创建记录(markdown、PDF、网络存档、格式化笔记) |
智能
| 工具 | 说明 |
|---|---|
classify | 使用DEVONthink的AI分类对记录进行分类 |
compare | 比较两条记录的相似性 |
人工智能
| 工具 | 说明 |
|---|---|
ask_ai_about_documents | 问DEVONthink内置的AI一个关于文档的问题 |
check_ai_health | 检查DEVONthink的AI功能是否可用 |
create_summary_document | 创建人工智能生成的文档摘要 |
get_ai_tool_documentation | 获取DEVONthink人工智能功能的文档 |
自定义扩展
这五个工具扩展了核心DEVONthink脚本API,其功能无法通过AppleScript获得。
| 工具 | 说明 |
|---|---|
list_smart_groups | 枚举所有智能组(直接读取plist) |
list_smart_rules | 枚举所有智能规则(直接读取plist) |
parse_eml_headers | 从.eml文件中提取消息ID、引用、主题等 |
get_column_layout | 读取智能组的列布局配置 |
copy_column_layout | 将列布局从一个智能组复制到另一个 |
______________________________________________________________________
用法
配置后,Claude Code可以自动访问所有DEVONthink工具。DEVONthink必须在至少一个数据库打开的情况下运行。
示例提示:
- “在我的DEVONthink数据库中搜索有关第三季度预算的注释”
- “找到约翰关于合同的电子邮件,并向我展示相关文件”
- “在我的收件箱中用今天的会议笔记创建一个新的标记笔记”
- “列出我的Ablegen数据库中标记为'todo'的所有文档”
- “阅读我昨天导入的PDF的内容”
- “列出我的智能组”
- “解析此.eml文件的标头以查找其线程ID”
- “请DEVONthink的AI总结这些文档”
______________________________________________________________________
自定义工具参考
list_smart_groups
解析 ~/Library/Application Support/DEVONthink/SmartGroups.plist 并返回所有智能组及其名称、UUID、同步日期和 UseUUIDKey 旗帜。
关键限制: 智能组是 无法通过DEVONthink AppleScript脚本字典访问。此工具是枚举它们的唯一编程方式。
参数: 无
退货:
| 字段 | 类型 | 描述 |
|---|---|---|
success | boolean | 操作是否成功 |
smartGroups | array | 智能组条目列表 |
totalCount | number | 找到的智能组总数 |
每个条目 smartGroups:
| 字段 | 类型 | 描述 | |
|---|---|---|---|
name | string | 智能组的显示名称 | |
uuid | string | UUID来自 sync.UUID 字段--将其与 search 工具 | |
syncDate | string | null | 上次同步日期(ISO 8601) |
useUuidKey | boolean | null | DEVONthink是否在内部使用UUID作为键 |
______________________________________________________________________
list_smart_rules
解析 ~/Library/Application Support/DEVONthink/SmartRules.plist 并返回所有智能规则,包括名称、UUID、启用状态、执行元数据和同步日期。
参数: 无
退货:
| 字段 | 类型 | 描述 |
|---|---|---|
success | boolean | 操作是否成功 |
smartRules | array | 智能规则条目列表 |
totalCount | number | 找到的智能规则总数 |
每个条目 smartRules:
| 字段 | 类型 | 描述 | |
|---|---|---|---|
name | string | 智能规则的显示名称 | |
uuid | string | UUID来自 sync.UUID 现场 | |
enabled | boolean | null | 规则当前是否已启用 |
indexOffset | number | null | 规则列表中的顺序索引 |
lastExecution | number | null | CFAbsolute上次执行的时间戳 |
syncDate | string | null | 上次同步日期(ISO 8601) |
useUuidKey | boolean | null | DEVONthink是否在内部使用UUID作为键 |
______________________________________________________________________
parse_eml_headers
读取RFC 2822 .eml 文件,并提取电子邮件线程关联所需的MIME标头。
处理Subject、From和To字段中的CRLF和LF行尾、折叠标头(连续行)和RFC 2047编码单词。
只读取文件的前64KB,因为标头始终位于开头。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
filePath | string | yes | 绝对路径 .eml 文件 |
退货:
| 字段 | 类型 | 描述 | |
|---|---|---|---|
success | boolean | 解析是否成功 | |
filePath | string | 读取的路径 | |
messageId | string | null | Message-ID 标题值 |
inReplyTo | string | null | In-Reply-To 标题值 |
references | string\[\] | 来自的消息ID数组 References 头球 | |
subject | string | null | 解码主题行 |
from | string | null | 发件人地址 |
to | string | null | 收件人地址 |
cc | string | null | CC地址 |
date | string | null | 标题中的日期字符串 |
______________________________________________________________________
get_column_layout
从以下位置读取命名智能组或智能规则的列布局 ~/Library/Preferences/com.devon-technologies.think.plist.
返回有序的可见列、所有表视图列(可见和隐藏)和列宽。支持部分名称匹配。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | yes | 智能组或智能规则的显示名称 |
uuid | string | 否 | 如果名称查找失败,UUID回退 |
退货:
| 字段 | 类型 | 描述 | |
|---|---|---|---|
success | boolean | 是否找到布局 | |
name | string | 搜索到的名称 | |
resolvedKey | string | 实际使用的plist键 | |
columns | string\[\] | null | 显示顺序中可见的列 |
tableViewColumns | string\[\] | null | 所有列标识符(可见+隐藏) |
widths | object | null | 列标识符到宽度的映射 |
keysFound | string\[\] | 存在哪些plist键 |
______________________________________________________________________
copy_column_layout
将列布局从一个智能组或智能规则复制到另一个。所有布局键都是使用Python的原子编写的 plistlib.
必须重新启动DEVONthink(或关闭并重新打开智能组窗口)才能使更改生效。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
sourceName | string | yes | 源智能组的名称 |
targetName | string | yes | 目标智能组的名称 |
sourceUuid | string | no | 源的UUID回退 |
targetUuid | string | no | 目标的UUID(在UUID键下编写的布局) |
______________________________________________________________________
工作流
智能组发现和内容查询
智能组是由搜索条件定义的虚拟视图,它们不是AppleScript脚本字典的一部分。使用此两步模式:
第一步: 枚举所有智能组。
list_smart_groups第二步: 使用查询内容 search 随着 groupUuid.
search
query: ""
groupUuid: "4A469368-94FD-46D3-9A62-ED7C24D822D8"注:list_group_content使用智能组UUID返回电子邮件消息IDuuid字段(不是DEVONthink记录UUID)。使用search随着groupUuid相反,它返回带有日期和正确UUID的正确记录。
______________________________________________________________________
电子邮件线程关联
要将实时电子邮件线程链接回DEVONthink中的存档副本,请使用三层匹配策略:
第1层——线程ID匹配(最高精度)
get_record_properties uuid:
parse_eml_headers filePath: "/path/to/archived/email.eml"使用 messageId, inReplyTo,以及 references 以精确地关联。
第2层——主题和发件人匹配
search query: "kind:email subject:\"Contract renewal\" from:jane@example.com"脱衣 Re:, Fwd:, AW:, WG: 搜索前使用前缀。
第3级——仅受试者(最广泛)
search query: "kind:email subject:\"Contract renewal\""______________________________________________________________________
立柱布局管理
get_column_layout name: "Archivieren - Jobs"
copy_column_layout sourceName: "Archivieren - Jobs" targetName: "New Smart Group"复制后关闭并重新打开智能组窗口(或重新启动DEVONthink)。
______________________________________________________________________
DEVONthink搜索语法
这 search 该工具支持以下运算符:
| 操作员 | 示例 | 描述 |
|---|---|---|
kind: | kind:email | 按记录类型筛选 |
name: | name:"offer letter" | 匹配文件名或主题 |
subject: | subject:"interview" | 电子邮件主题字段 |
from: | from:recruiter@co.com | 发件人地址 |
to: | to:user@example.com | 收件人地址 |
text: | text:"stock options" | 全文内容搜索 |
tags: | tags:jobs | 标记记录 |
date: | date:2024-01-01~ | 日期范围(~ =之后) |
| 报价单 | "exact phrase" | 精确短语匹配 |
| 和/或 | from:x OR from:y 布尔运算符 |
组合运算符:
kind:email from:@company.com subject:"compensation" date:2023-01-01~2024-12-31______________________________________________________________________
运作原理
devon 是一个独立的MCP服务器 @modelcontextprotocol/sdk所有33个工具都是在MIT许可证下从头开始实现的,除了MCP SDK之外没有外部依赖关系。
这些工具通过JXA(JavaScript for Automation)与DEVONthink通信,JXA通过以下方式执行 osascript共享的JXA执行器处理脚本构造、转义和结果解析。自定义工具(智能组、智能规则、列布局)使用 PlistBuddy Python的 plistlib 直接读取DEVONthink偏好和数据文件。
与DEVONthink3和DEVONthink4兼容,具有自动应用程序名称检测功能。
______________________________________________________________________
故障排除
“未找到DEVONthink” 确保DEVONthink 3或4已安装在 /Applications 跑步。
“未找到数据库” 在使用MCP工具之前,请至少打开一个DEVONthink数据库。
工具未出现在Claude代码中
- 验证
~/.claude.json有devonthink进入 - 重新启动Claude Code(不仅仅是一个新会话——完全退出并重新打开)
- 检查DEVONthink是否正在运行
AppleScript错误 在“系统设置”>“隐私和安全”>“自动化”中授予Claude Code(或终端)自动化权限。
list_smart_groups 不返回结果或错误 plist格式因DEVONthink版本而异。使用 plutil -p ~/Library/Application\ Support/DEVONthink/SmartGroups.plist 检查原始格式并报告问题。
get_column_layout 返回“未找到布局” 智能组尚未保存自定义列布局。使用 copy_column_layout 从已配置布局的另一个智能组复制布局。
______________________________________________________________________
积分
______________________________________________________________________
许可证
麻省理工学院
