mcpField
I
imessage-mcp

imessage-mcp

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

关于 imessage-mcp

imessage-mcp 是用于在 Mac 上搜索和分析 Messages 历史记录的只读 MCP 服务。它在本地运行,向 MCP 客户端提供会话读取、附件查看、变更动态和隐私模式。

主要功能

  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 工具和资源提供本地 Messages 历史记录,包括搜索、会话访问、同步和通信分析。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"imessage-mcp-anipotts": {
"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.1

工具

25

收录的工具列表 · 更新于 3 周前

参数类型必填说明
querystring否要搜索的文本(大小写不敏感的子字符串匹配)
contactstring否按联系人句柄(电话/电子邮件)或姓名筛选
date_fromstring否开始日期(ISO 格式,例如 2024-01-01)
date_toany否结束日期(ISO 格式,例如 2024-12-31)
sent_onlyboolean否仅包含你发送的消息
received_onlyboolean否仅包含收到的消息
group_chatstring否按群聊名称或 chat_identifier 筛选
has_attachmentboolean否仅包含带附件的消息
include_allboolean否包含来自所有联系人的消息,即使你从未回复过他们(默认值:false)
limitnumber否最大结果数(默认值 50,最大值 500)
offsetnumber否分页偏移量

详细介绍

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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。