多模式iMessage MCP
克劳德最完整的iMessage MCP服务器。阅读完整对话、搜索消息、, 查看图像附件、发送消息、查找联系人和对消息做出反应——所有这些都来自Claude Desktop或Claude Code。
为什么存在
其他iMessage MCP工具都会查询 text Apple的专栏 chat.db问题? 在现代macOS(14+)上,93%的消息存储在 attributedBody 而不是 text. 这些工具会默默地返回空的或不完整的对话。
该服务器对苹果的 NSAttributedString 二进制格式提取实际消息内容,让您可以访问 *完成* 消息历史。
特性
| 工具 | 说明 |
|---|---|
read_recent_messages | 阅读所有对话中的最新消息 |
search_messages | 对所有邮件、联系人和组名进行全文搜索 |
get_conversation | 获取与任何联系人(按姓名或号码)的完整对话线索 |
get_attachment | 查看图像和文件 从消息中——克劳德可以查看和分析照片 |
send_message | 发送iMessage(带有确认安全功能) |
list_recent_chats | 查看您最活跃的对话 |
lookup_contact | 从您的联系人中查找电话号码和电子邮件 |
react_to_message | 在消息中添加快速回复 |
多模式:克劳德可以看到你的照片
当你使用 get_attachment,图像以Claude实际可以使用的base64内容块的形式返回 *看*.HEIC照片(iPhone默认)会自动转换为JPEG。这意味着克劳德可以:
- 描述某人发给你的照片中有什么
- 从图像中读取文本/屏幕截图
- 分析对话中的视觉内容
需求
- macOS (读取本地iMessage数据库)
- Node.js >= 18
- 全磁盘访问 授予您的终端应用程序(系统设置>隐私和安全>全磁盘访问)。这涵盖了用于联系人姓名解析的iMessage数据库和AddressBook数据库,无需运行Contacts应用程序。
安装
git clone https://github.com/tszaks/multimodal-imessage-mcp.git
cd multimodal-imessage-mcp
npm install配置
克劳德桌面版
添加到您的 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"imessage": {
"command": "/opt/homebrew/bin/node",
"args": ["/path/to/multimodal-imessage-mcp/index.js"]
}
}
}重要提示: 使用Node.js二进制文件的完整路径(例如。,/opt/homebrew/bin/node),不仅node.MOSX桌面应用程序不会继承shell的PATH,并使用裸node命令通常解析为导致本机模块崩溃的旧系统节点。
克劳德代码
添加到您的 .mcp.json:
{
"mcpServers": {
"imessage": {
"command": "node",
"args": ["/path/to/multimodal-imessage-mcp/index.js"]
}
}
}在克劳德代码中, node 通常会正确解析,因为它继承了您的shell环境。使用示例
“显示我最近的消息” --阅读您最近的对话
“妈妈今天给我发了什么短信?” --通过通讯录将“妈妈”解析为电话号码,拉取对话
“在我的消息中搜索‘航班确认’” --对所有邮件进行全文搜索
“显示来自消息538516的照片” --返回实际图像供Claude查看和描述
“将'迟到10分钟'发送至+1234567890” --发送iMessage(需要确认)
运作原理
attributedBody修复
苹果的iMessage数据库(~/Library/Messages/chat.db)有两列用于消息内容:
text--旧版纯文本列(由旧版macOS使用)attributedBody--连载NSAttributedStringblob(由macOS 14+使用)
在现代macOS上,苹果逐渐将消息存储迁移到 attributedBody 支持富格文本、提及和格式。这 text 专栏越来越像是一种传统的退路,通常 NULL.
此服务器检测到以下邮件 NULL 文本并从中提取内容 attributedBody 通过解析二进制文件 NSTypedStream 格式:
- 查找
NSString二进制blob中的标记 - 读取类型标头字节(
01 94 84 01 2b) - 解码长度前缀(短消息为单字节,长消息为多字节)
- 提取UTF-8文本有效负载
附件处理
iMessage附件存储在 ~/Library/Messages/Attachments/ 路径跟踪在 attachment 桌子。这 get_attachment 工具:
- 查询给定邮件ID的附件元数据
- 解决
~/Library/Messages/...通往绝对路径的路径 - 对于JPEG/PNG/GIF/WebP:读取文件并返回base64图像内容
- 对于HEIC(iPhone默认):使用macOS转换为JPEG
sips返回之前 - 对于其他文件:返回元数据和文件路径
故障排除
“打开iMessage数据库失败” 授予对终端应用程序的全磁盘访问权限:系统设置>隐私和安全>全磁盘访问。
联系人查找未返回任何结果 联系人解析直接读取macOS AddressBook SQLite数据库(不需要联系人应用程序)。确保已授予“全磁盘访问”权限。如果刚刚添加了联系人,请重新启动MCP服务器以刷新缓存。
本机模块崩溃/“NODE_module_VERSION不匹配” 重建本机依赖关系: npm rebuild当你的Node.js版本发生变化时,就会发生这种情况。还要确保您的Claude Desktop配置使用节点的完整路径(请参阅上面的配置)。
对话中缺少消息 这正是此服务器修复的错误。确保您运行的是最新版本,其中包括 attributedBody 提取。
许可证
麻省理工学院
快速入门TL;博士
npm install
node index.js然后将服务器添加到MCP客户端配置中,并授予终端应用程序的全磁盘访问权限。
工作原理(TL;DR)
- 读取macOS iMessage SQLite数据库
- 解码现代
attributedBody完整消息文本的有效载荷 - 通过MCP公开对话/搜索/附件工具
- 使用AppleScript进行消息发送/反应操作,并进行明确确认
LLM快速复制
使用GitHub中此代码块上的复制按钮。
Repo: multimodal-imessage-mcp
Goal: Full iMessage MCP including attachments and send/reaction actions.
Setup:
1) npm install
2) Grant Full Disk Access to terminal app
3) Add MCP config entry for index.js
Use:
- read_recent_messages, search_messages, get_conversation
- get_attachment for image/file analysis
- send_message/react_to_message with explicit confirm flag
How it works:
- SQLite + attributedBody decoding + AppleScript actions wrapped as MCP tools