mcpField
I
iMessage History

iMessage History

本地服务
github.com/anipottsbuilds通信协作285 天前更新

关于 iMessage History

iMessage History 是面向 macOS 用户的只读 MCP 服务,可供 MCP 客户端搜索和查看 Apple Messages。它在本机处理消息记录、附件、会话变更和沟通统计。

主要功能

  1. 01搜索 iMessage、SMS、MMS 和 RCS
  2. 02读取会话及消息详情
  3. 03查看已移除位置元数据的图片
  4. 04通过同步变更流追踪更新
  5. 05统计消息数量和回复时间
  6. 06通过通讯录解析联系人

适用场景

  1. 01按词句或日期查找旧消息
  2. 02回复前查看一段会话
  3. 03了解新增或编辑的消息
  4. 04比较回复时间与消息量

MCP 相关

向 MCP 客户端提供只读工具、提示词和可选的会话资源。它在 Mac 上读取 Messages,并支持 stdio 或本地 HTTP 传输。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"anipottsbuilds-imessage": {
"command": "npx",
"args": [
"-y",
"imessage-mcp"
],
"env": {
"IMESSAGE_PRIVACY": "<IMESSAGE_PRIVACY>",
"IMESSAGE_CONTACTS": "<IMESSAGE_CONTACTS>",
"IMESSAGE_DB": "<IMESSAGE_DB>",
"IMESSAGE_CACHE": "<IMESSAGE_CACHE>",
"IMESSAGE_UPDATE_CHECK": "<IMESSAGE_UPDATE_CHECK>"
}
}
}
}
启动命令npx -y imessage-mcp
需要配置的环境变量
IMESSAGE_PRIVACYMost any caller can see: full (default for stdio), redacted, or aggregate.
IMESSAGE_CONTACTSlive (default) names handles from Contacts; none shows handles only.
IMESSAGE_DBPath to a copy of chat.db instead of this Mac's Messages database.
IMESSAGE_CACHESet to 0 to keep the search index in memory only.
IMESSAGE_UPDATE_CHECKSet to 0 to turn off the npm version check.

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

安装包
npmimessage-mcp3.3.2

工具

还没有获取到工具列表

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

详细介绍

README 配图

imessage-mcp

npm MCP Registry CI License: MIT

通过 Claude、Codex、Cursor、VS Code 及任何其他 MCP 客户端搜索和阅读你的 Messages 历史记录。

Claude Code 通过 imessage-mcp 了解一段关于黑客马拉松的真实对话

只读。在你的 Mac 上运行。无需账户、云服务或编译。

  • 按关键词、精确文本或短语搜索 iMessage、SMS、MMS 和 RCS 中的消息
  • 阅读完整对话,包括编辑内容、撤回的消息、回应、回复和已读回执
  • 查看他人发送给你的照片,并移除其中的位置数据
  • 通过变更动态跟进新消息,并回答数量和响应时间相关的问题

安装

要求: macOS 14 或更高版本。使用 npx 安装需要 Node.js 24.16 或更高版本(Claude Desktop 自带运行环境)。如需支持加密缓存,请使用 Node 24 LTS。不具备 SQLite 检查点 API 的运行时(包括 Node 25)会在内存中搜索,并在重启后重建;doctor 会报告此情况。

适用于任何读取 mcpServers JSON 的客户端的标准配置:

{
  "mcpServers": {
    "imessage": {
      "command": "npx",
      "args": ["-y", "imessage-mcp@latest"]
    }
  }
}

接着,向运行它的应用授予完全磁盘访问权限:系统设置 > 隐私与安全性 > 完全磁盘访问权限,开启相应应用(Claude、你的终端、Cursor、VS Code 等),然后彻底退出并重新打开该应用。不确定该选哪个应用?在该应用的终端中运行 npx -y imessage-mcp@latest doctor,它会告诉你。在授予访问权限之前,每个工具都会显示相同的操作步骤。

Amp
amp mcp add imessage -- npx -y imessage-mcp@latest
Claude Code
claude mcp add --scope user imessage -- npx -y imessage-mcp@latest

也可以安装插件:/plugin marketplace add anipotts/imessage-mcp,然后运行 /plugin install imessage-mcp@anipotts。

Claude Desktop

下载 imessage-mcp.mcpb 并双击,或者如果设置 > 扩展中列出了 iMessage History,也可以从那里安装。要更新自行安装的程序包,请下载最新版本并再次双击。

然后在完全磁盘访问权限中启用 Claude,并退出后重新打开 Claude。

Cline

将标准配置添加到 cline_mcp_settings.json(文档)。

Codex
codex mcp add imessage -- npx -y imessage-mcp@latest

或者添加到 ~/.codex/config.toml:

[mcp_servers.imessage]
command = "npx"
args = ["-y", "imessage-mcp@latest"]
Copilot CLI

运行 /mcp add,或者将标准配置添加到 ~/.copilot/mcp-config.json,并设置 "type": "local"。

Cursor

在 Cursor 中安装

或者将标准配置添加到 ~/.cursor/mcp.json。

Gemini CLI

将标准配置添加到 ~/.gemini/settings.json。

Goose

在 Goose 中安装

JetBrains(Junie) 将标准配置添加到 `.junie/mcp/mcp.json`,或在 Junie CLI 中输入 `/mcp`。
Kiro

添加到 Kiro

opencode

在 ~/.config/opencode/opencode.json 中:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "imessage": { "type": "local", "command": ["npx", "-y", "imessage-mcp@latest"], "enabled": true }
  }
}
VS Code

在 VS Code 中安装 在 VS Code Insiders 中安装

code --add-mcp '{"name":"imessage","command":"npx","args":["-y","imessage-mcp@latest"]}'
Warp、Windsurf、Zed 等

在客户端的 MCP 设置中添加标准配置。Zed 使用 context_servers,并设置 "source": "custom"。

如果 GUI 应用提示找不到 npx,说明它无法访问你的 Node 安装:请将 which npx 返回的完整路径用作 command。

使用方法

用日常语言提问:“帮我梳理一下最近的短信”“查找关于晚餐预订的消息”“Sam 通常多久回复?”客户端的提示词菜单中还提供三个提示词:

提示词功能
catch_up列出有哪些人在等你回复,以及他们需要什么
draft_reply按你自己的短信风格起草回复。由你发送;此服务无法代你发送。
recap回顾你本周的消息:数量、最繁忙的对话,以及仍在等待回复的人

支持附加资源的客户端可以使用 imessage://conversations 和 imessage://conversations/{chat_id}。

工具

工具功能
search_messages按子字符串、精确文本、词元或短语搜索。默认搜索消息文本;可选择搜索对话名称和附件文件名。可按服务、已发送或已接收状态及日期筛选
get_conversation按 chat_id、联系人名称或群组名称读取对话,包括编辑、回应、回执、回复、群组事件和附件。游标用于翻页查看较早的事件
list_conversations按联系人、服务、类型、回复状态或日期查找对话;每条结果都包含最新消息,可按最新消息优先排序,也可按联系频率排序
get_attachment显示 get_conversation 中的一个附件:图片会以 JPEG 格式显示,并移除位置和相机元数据;文本文件会以文本形式显示。需要使用 full 隐私模式
sync_messages拉取游标之后的所有变更:新消息、已编辑、已撤回和已删除的消息,以及对话成员关系、回应和回执
analyze_communication按小时和星期几统计消息数量、回复时间、连续活动情况,以及对话发起者
resolve_contact在 Mac 的通讯录中将姓名、电话号码或电子邮件匹配到联系人;存在歧义时会报告,而不会猜测
server_status版本、更新可用性、隐私模式、索引和缓存状态、架构支持、对话成员数量及通讯录访问状态

所有工具均为只读,并标记为 readOnlyHint。结果使用普通 ID(message_id、chat_id、attachment_id),可在不同工具间传递。

Apple 可能会在多个对话中记录同一条消息。搜索结果会将该消息仅返回一次,并附上所有规范的 chat_ids 及其 conversations 标签。单个成员关系也包含 chat_id 和 conversation;对于共享结果,请将 chat_ids 中相关的 ID 传递给 get_conversation。只有 Apple 提供的明确查找依据才会合并聊天别名。共享消息不会合并无关对话。

全局和联系人的消息数量会在请求范围内对共享记录去重。对话时间线和序列指标则会保留每条记录的成员关系,因此各对话的数量相加可能超过全局数量。同步变更会包含 chat_ids,并在 message_membership_changed 中提供 previous_chat_ids;其 changed_at 为 null,因为 Apple 不会为这些关联记录时间戳。记录的成员关系描述的是观察到变更时的状态;可用的文本、发送者和回执字段则描述当前源状态。升级索引格式会重建一次缓存,并使旧的同步游标失效;如果返回 DATABASE_CHANGED,请开始新的同步。

联系人姓名会扩展为所选人员的地址。即使通讯录中存在相互冲突的标签,精确电话号码或电子邮件也只会限定到该地址。resolve_contact 仍会报告身份歧义;限定地址不会合并人员,也不会包含其其他地址。对于类似地址的群组标题,请使用 conversation_names 范围进行搜索,并使用所选的 chat_id。

每个工具的输出架构都同时接受成功封装和结构化错误封装,因此严格模式的客户端可以展示原始原因和恢复提示。

默认情况下,对话读取采用严格模式。如果无法完整恢复正文或关联,错误会说明可使用 allow_partial: true 重试。部分结果会保留 completeness、警告以及每个事件的 row_status;引用证据前请先检查这些信息。缩小日期范围或使用 around_message_id 可以避开无关的受损事件。结构性故障仍会以失败关闭。

配置

向 args 添加选项,例如 ["-y", "imessage-mcp@latest", "--privacy", "redacted"]。

选项说明
--privacy <mode>调用方最多可以看到的内容。full(默认)、redacted(名称和遮蔽后的标识符、日历日期,不含消息文本或文件名)或 aggregate(仅计数)。调用可以请求更严格的模式,但不能请求更宽松的模式。环境变量 IMESSAGE_PRIVACY
--contacts <mode>live(默认)显示通讯录中的名称和标识符;none 仅显示标识符。环境变量 IMESSAGE_CONTACTS
--database <path>读取 chat.db 的副本,而不是这台 Mac 上的“信息”数据库。环境变量 IMESSAGE_DB
--transport http --port <n>通过 HTTP 在 127.0.0.1 上提供 MCP 服务,而不是使用标准输入/输出。需要 IMESSAGE_API_TOKEN 或 IMESSAGE_API_TOKEN_FILE。IMESSAGE_ALLOWED_HOSTS 和 IMESSAGE_ALLOWED_ORIGINS 接受以逗号分隔的列表;两者默认值均为 localhost。
IMESSAGE_CACHE=0仅在内存中保留搜索索引
IMESSAGE_WARM_SEARCH=0在首次搜索时构建搜索索引,而不是在启动时构建
IMESSAGE_UPDATE_CHECK=0关闭版本检查

隐私与安全

  • 只读。 服务以只读方式打开“信息”数据库,不提供发送、编辑、回应或标记已读的工具。
  • 本地运行。 不使用账户,不收集遥测数据或分析数据。唯一的网络请求是可选的 npm 注册表版本检查。
  • 客户端看到的是你请求的内容。 结果会发送到你使用的 MCP 客户端及其模型提供商,并受其政策约束。--privacy redacted 或 aggregate 会限制离开服务的数据。
  • 搜索索引。 索引在你的 Mac 上构建;SQLite 检查点 API 可用时,会加密缓存到 ~/Library/Caches/imessage-mcp,密钥由“信息”数据库派生,因此只有已经能够读取你消息的应用才能打开它。删除缓存始终是安全的。即使缓存不可用或发生故障,server_status 也会报告相应情况,而搜索仍会从内存中继续进行。
  • 不可信内容。 消息中可能包含用于操纵 AI 的文本。服务会告知客户端,必须将所有消息内容视为数据,绝不能视为指令。

详情请参阅:SECURITY.md 和 PRIVACY.md。

开发

npm ci
npm test      # unit tests on synthetic Messages databases
npm run e2e   # launches the built server over stdio and HTTP
npm run perf  # one-million-message performance gates

测试仅使用合成数据。请参阅 CONTRIBUTING.md。

依赖项 PR 通过作用域限定为仓库的 GitHub App 使用受保护的自动合并,无需续期个人访问令牌。每日运行的健康检查会检测身份验证失败和更新停滞;请参阅维护与恢复。

  • 在确认 App 迁移完成且不再需要回滚后,弃用未使用的所有者令牌副本。
  • 长时间不活跃后,确认 GitHub 未禁用定时工作流。依赖项合并不会发布版本。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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