mcpField
A
Apple Notes Mcp

Apple Notes Mcp

本地服务
github.com/disco-trooper记忆与知识77 周前更新

关于 Apple Notes Mcp

Apple Notes MCP 是面向 macOS Apple Notes 用户的 MCP 服务,可搜索并管理笔记。它结合语义与关键词检索、知识图谱和本地或 OpenRouter 嵌入。

主要功能

  1. 01语义与混合搜索
  2. 02创建、读取、更新和删除笔记
  3. 03增量及后台索引
  4. 04发现标签、链接和相关笔记
  5. 05本地或 OpenRouter 嵌入

适用场景

  1. 01按含义查找笔记内容
  2. 02将笔记移动到其他文件夹
  3. 03通过标签或关联探索笔记
  4. 04为大型笔记库执行后台索引

MCP 相关

它向 MCP 客户端提供 Apple Notes 搜索、读取、索引和管理工具,也支持通过知识图谱发现关联笔记。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"apple-notes": {
"command": "npx",
"args": [
"-y",
"@disco_trooper/apple-notes-mcp"
],
"env": {
"EMBEDDING_PROVIDER": "<EMBEDDING_PROVIDER>",
"EMBEDDING_MODEL": "<EMBEDDING_MODEL>"
}
}
}
}
启动命令npx -y @disco_trooper/apple-notes-mcp
需要配置的环境变量
EMBEDDING_PROVIDER
EMBEDDING_MODEL

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@disco_trooper/apple-notes-mcp

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

apple-notes-mcp

npm version npm downloads License: MIT macOS Bun Claude

Apple Notes 的 MCP 服务,支持语义搜索和 CRUD 操作。Claude 可通过自然语言搜索、读取、创建、更新和管理你的 Apple Notes。

功能

  • 基于分块的搜索 - 将长笔记拆分成多个块,以实现精准匹配
  • 查询缓存 - 重复搜索速度提升 60 倍
  • 知识图谱 - 发现标签、链接和相关笔记
  • 混合搜索 - 结合向量搜索与关键词搜索,并使用倒数排名融合
  • 语义搜索 - 按含义而非关键词查找笔记
  • 完整 CRUD - 创建、读取、更新、删除和移动笔记
  • 增量索引 - 仅重新嵌入有更改的笔记
  • 后台索引任务 - 异步执行完整/增量索引,并支持轮询进度
  • 双重嵌入方式 - 使用本地 HuggingFace 或 OpenRouter API

1.9.0 新增内容

  • 大型资料库索引 - Fetch 以批量方式读取笔记属性,因此索引数千条笔记也能顺利完成,不再卡住
  • 更可靠的 Fetch - 按批次重试被锁定或正在同步的笔记,并跳过这些笔记并生成报告,而不是让整个任务失败
  • 可取消读取 - 长时间运行的 Notes 读取会超时(JXA_TIMEOUT_MS),且取消操作会真正停止 Fetch

1.8.1 新增内容

  • 更快的 list-notes 文件夹筛选 - list-notes 现在只查询指定文件夹,而不是先扫描所有笔记
  • 正确处理同名文件夹 - 文件夹筛选现在会汇总各个账户中的匹配文件夹
  • 大型资料库性能优化 - 在大型笔记库中,按文件夹列出笔记的速度显著提升

安装

npm(推荐)
npm install -g @disco_trooper/apple-notes-mcp
apple-notes-mcp

设置向导将引导你完成以下步骤:

  1. 选择嵌入提供方(本地或 OpenRouter)
  2. 根据需要配置 API 密钥
  3. 设置 Claude Code 集成
  4. 为笔记建立索引
从源代码安装
git clone https://github.com/disco-trooper/apple-notes-mcp.git
cd apple-notes-mcp
bun install
bun run start

要求

  • macOS(通过 JXA 使用 Apple Notes)
  • Bun 运行时
  • 安装了笔记的 Apple Notes 应用

快速开始

安装后运行该命令:

apple-notes-mcp

首次运行时会自动启动设置向导。设置完成后,重启 Claude Code 即可使用 MCP 工具。

配置

配置文件存储在 ~/.apple-notes-mcp/.env 中:

变量描述默认值
OPENROUTER_API_KEYOpenRouter API 密钥(启用云端嵌入)-
EMBEDDING_MODEL模型名称(本地或 OpenRouter)Xenova/multilingual-e5-small
EMBEDDING_DIMS嵌入维度4096
READONLY_MODE禁止所有写入操作false
INDEX_TTL搜索时自动刷新的间隔(秒;未设置时禁用)-
SEARCH_REFRESH_TIMEOUT_MS搜索等待刷新后再使用过期索引的最长时间2000
INDEX_JOB_RETENTION_SECONDS已完成/失败的索引任务可供查询的时长3600
EMBEDDING_BATCH_SIZE生成嵌入时的批次大小50
NOTES_FETCH_BATCH_SIZEFetch Notes 时的批次大小100
JXA_TIMEOUT_MS单次 Notes 读取的最长时间(毫秒)120000
DEBUG启用调试日志false
搜索自动刷新策略
  • search-notes 不会在每次请求时强制刷新。
  • 如果未设置 INDEX_TTL,则禁用自动刷新,搜索使用当前索引。
  • 如果设置了 INDEX_TTL,则仅在 TTL 过期后刷新。
  • 如果刷新失败或耗时超过 SEARCH_REFRESH_TIMEOUT_MS,搜索会改用过期索引的结果,而不会超时。

重新配置:

apple-notes-mcp setup
# or from source:
bun run setup
嵌入提供方

本地(默认):使用 HuggingFace Transformers 和 Xenova/multilingual-e5-small。免费,可在本地运行,下载大小约为 200 MB。

OpenRouter:使用云 API。速度快,无需本地资源,但需要从 openrouter.ai 获取 API 密钥。

模型对比请参阅 docs/models.md。

工具

搜索与发现
search-notes

混合向量与全文搜索。

query: "meeting notes from last week"
folder: "Work"           # optional, filter by folder
limit: 10                # default: 20
mode: "hybrid"           # hybrid, keyword, or semantic
include_content: false   # include full content vs preview
list-notes

按排序和筛选条件列出笔记。不带参数时,显示索引统计信息。

sort_by: "modified"      # created, modified, or title (default: modified)
order: "desc"            # asc or desc (default: desc)
limit: 10                # max notes to return (1-100)
folder: "Work"           # filter by folder (case-insensitive)

提供 folder 时,服务只会从 Apple Notes 获取匹配文件夹中的笔记。即使你的笔记库中有数百条笔记,这也能让限定文件夹的请求保持快速。

示例:

  • 获取最新的 5 条笔记:{ sort_by: "created", order: "desc", limit: 5 }
  • 最近修改的笔记:{ sort_by: "modified", limit: 10 }
  • 按字母顺序列出文件夹中的笔记:{ sort_by: "title", order: "asc", folder: "Projects" }
list-folders

列出所有 Apple Notes 文件夹。

get-note

按标题获取笔记内容。

title: "My Note"          # or "Work/My Note" for disambiguation
include_html: false       # include raw HTML (default: false)
get-tables

从笔记中提取结构化表格数据。

title: "My Note"

返回:

{
  "tableCount": 2,
  "tables": [{
    "index": 0,
    "rows": [["Header1", "Header2"], ["Val1", "Val2"]],
    "formatting": [[{"bold": true}, {"bold": true}], ...]
  }]
}
索引
index-notes

为语义搜索建立笔记索引。

mode: "incremental"       # incremental (default) or full
force: false              # force reindex even if TTL hasn't expired
background: false         # optional; defaults to false (synchronous mode)

使用 mode: "full" 创建分块索引,以提升对长笔记的搜索效果。首次建立完整索引需要更长时间,因为要生成分块,但之后的搜索会很快。

对于大型笔记库,建议在后台建立索引:

start-index-job
mode: "full"               # full or incremental

返回包含 id、status 和 progress 的任务快照。 在获取、嵌入和持久化阶段,进度会分成较小步幅更新。

get-index-job
job_id: "<job-id>"

轮询,直到状态变为 completed、failed 或 cancelled。 你可能会看到作为过渡状态的 cancelling。

list-index-jobs
limit: 10                  # optional, 1-50
cancel-index-job
job_id: "<job-id>"

请求尽力取消正在运行的任务。取消采用协作方式:

  • 长时间运行的步骤必须到达取消检查点。
  • 可能会保留部分已完成的工作。
  • 当前任务达到 cancelled 后,再启动新任务。
reindex-note

手动编辑后重新索引单条笔记。

title: "My Note"
CRUD 操作
create-note

在 Apple Notes 中创建笔记。

title: "New Note"
content: "# Heading\n\nMarkdown content..."
folder: "Work"            # optional, defaults to Notes

创建、更新、删除或移动笔记后,服务会尽力自动同步向量索引和分块索引。 如果同步部分失败,工具响应会包含 index sync warning。运行 reindex-note 或 index-notes。

update-note

更新现有笔记。

title: "My Note"
content: "Updated markdown content..."
reindex: true             # re-embed after update (default: true)
delete-note

删除笔记(需要确认)。

title: "My Note"
confirm: true             # must be true to delete
move-note

将笔记移动到其他文件夹。

title: "My Note"
folder: "Archive"
batch-delete

一次删除多条笔记。

titles: ["Note 1", "Note 2"]  # OR folder: "Old Project"
confirm: true                 # required for safety
batch-move

将多条笔记移动到目标文件夹。

titles: ["Note 1", "Note 2"]  # OR sourceFolder: "Old"
targetFolder: "Archive"       # required
索引管理
purge-index

清除所有已索引的数据。在切换嵌入模型或修复损坏的索引时使用。

confirm: true   # required for safety

清除后,运行 index-notes 以重建索引。

知识图谱
list-tags

列出所有标签及其出现次数。

search-by-tag

查找带有指定标签的笔记。

tag: "project"
folder: "Work"    # optional
limit: 20         # default: 20
related-notes

查找与源笔记相关的笔记。

title: "My Note"
types: ["tag", "link", "similar"]  # default: all
limit: 10                          # default: 10
export-graph

导出知识图谱以供可视化。

format: "json"     # json or graphml
folder: "Work"     # optional filter

支持的格式:

  • json - 用于自定义可视化(D3.js、Web 应用)
  • graphml - 用于专业工具(Gephi、yEd、Cytoscape)

Claude Code 设置

自动设置(推荐)

设置向导会自动将 apple-notes-mcp 添加到 Claude Code。安装后运行 apple-notes-mcp。

手动配置

添加到 ~/.claude.json:

使用 npm 安装:

{
  "mcpServers": {
    "apple-notes": {
      "command": "apple-notes-mcp",
      "args": [],
      "env": {}
    }
  }
}

从源代码安装:

{
  "mcpServers": {
    "apple-notes": {
      "command": "bun",
      "args": ["run", "/path/to/apple-notes-mcp/src/index.ts"],
      "env": {}
    }
  }
}

使用示例

完成设置后,使用自然语言与 Claude 交互:

  • “搜索我的笔记,查找项目创意”
  • “在 Work 文件夹中创建一条名为‘Meeting Notes’的笔记”
  • “我的假期计划笔记里写了什么?”
  • “将‘Old Project’笔记移到 Archive”
  • “为我的笔记编制索引”(在 Apple Notes 中添加笔记后)

故障排除

“Note not found”

当多个笔记同名时,请使用完整路径格式 Folder/Note Title。

首次搜索速度较慢

首次使用时,本地嵌入模型会下载模型(约 200MB)。后续搜索速度会很快。

“READONLY_MODE is enabled”

在 .env 中设置 READONLY_MODE=false,以启用写入操作。

搜索结果中缺少笔记

运行 index-notes 以更新搜索索引。如果增量索引漏掉了更改,请使用 mode: full。

“iCloud account not available” / Can't get account "iCloud"

此错误来自另一种 Apple Notes MCP 实现,该实现使用工具 search_notes 和参数 Keywords。

本项目使用:

  • 工具:search-notes
  • 参数:query

如果客户端使用 Keywords 调用 search_notes,请将 MCP 配置指向 apple-notes-mcp,然后重启客户端。

JXA 错误

确保 Apple Notes 正在运行且包含笔记。出现提示时,请授予自动化权限。

“JSON Parse error: Unexpected identifier undefined”

这通常表示索引进程内存不足。请尝试:

  1. 关闭其他应用程序以释放内存
  2. 在 .env 中设置 EMBEDDING_BATCH_SIZE=25,以减少内存用量
  3. 重启 Apple Notes 应用
  4. 再次运行 index-notes
编制索引时跳过的笔记

以下情况可能会导致某些笔记被跳过:

  • 已锁定——如果希望将其编入索引,请在 Apple Notes 中解锁
  • 正在同步——等待 iCloud 同步完成,然后重新编制索引
  • 已损坏——尝试将内容复制到新笔记中,然后删除旧笔记

索引器会报告被跳过的笔记,并继续处理其余笔记。

开发

# Type check
bun run check

# Run tests
bun run test

# Run with coverage
bun run test:coverage

# Run with debug logging
DEBUG=true bun run start

# Watch mode
bun run dev

贡献

欢迎提交 PR!请:

  • 提交前运行 bun run check
  • 为新功能添加测试
  • 根据需要更新文档

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。