使用说明
谷歌消息MCP桥
AI代理与您的真实SMS/RCS对话之间缺少链接。
Chrome扩展+MCP服务器 克劳德代码 (或任何MCP客户端)通过您现有的客户端读取、搜索和发送SMS/RCS消息 谷歌网络消息 会议。没有第三方服务器。没有手机端应用程序。没有API密钥。只有你的浏览器。
为什么存在
我们尝试了所有现有的解决方案。他们都做得不够好。
OpenMessage的问题
打开消息 使用 libgm 模拟谷歌消息配对的协议。理论上听起来很棒。在实践中:
- SSE会话不断到期。 MCP传输使用服务器发送事件,会话在几分钟的不活动后静默死亡。你得到
Invalid session ID对话中出错,除了重新启动Docker容器外没有恢复路径。 - 主机名不匹配错误。 SSE服务器返回回调URL
localhost但如果你通过连接127.0.0.1,握手无声地失败了。 - 7个工具定义=每次对话约1500个令牌。 每个Claude Code会话都会将所有工具模式加载到上下文中。短信的七个工具是多余的,会烧毁你的上下文窗口。
- 消息同步延迟。 在重新启动容器以重新触发回填之前,新的传入消息不会出现。并非完全“实时”
- Docker依赖。 需要一个正在运行的Docker容器,这增加了轻量级集成的复杂性和资源开销。
TextBee的问题
TextBee 是一款Android应用程序,可以将您的手机变成带有REST API的SMS网关。它确实有效,但:
- 需要专用的Android应用程序 在手机上全天候运行、耗尽电池和使用移动数据。
- 云中继依赖性。 消息在到达您的webhook之前通过TextBee的云服务器路由。您的私人短信对话通过第三方传递。
- 仅限短信。 没有RCS支持。2025年以后,大多数Android到Android的对话都是具有端到端加密的RCS。TextBee只能看到和发送普通短信。
- 复杂的webhook管道。 您需要Tailscale漏斗(或ngrok)+Express.js webhook服务器+API客户端来接收消息。这是基本短信访问的三个移动部分。
- 没有对话背景。 REST API为您提供不带对话线程、联系人姓名或阅读状态的原始消息。
我们的方法:使用已经有效的方法
您的Google消息已配对并在Chrome中运行。它已经包含了您的所有对话、联系人、RCS支持和端到端加密。为什么不直接和它谈谈呢?
谷歌消息MCP桥 将内容脚本注入到现有的Google Messages选项卡中,并将其作为干净的3-tool MCP服务器公开。就是这样。没有Docker。没有云中继。没有手机端应用程序。没有API密钥。
建筑
Claude Code <--stdio--> MCP Server (Node.js) <--WebSocket:7008--> Chrome Extension (content.js on messages.google.com)
| 组件 | 角色 |
|---|---|
| Chrome 扩展 | messages.google.com上的内容脚本。从DOM中提取对话/消息,键入和发送消息,报告连接状态。 |
| MCP服务器 | 使用stdio传输的Node.js进程(无SSE,无会话过期)。在端口7008上运行WebSocket服务器,以将Claude Code工具调用桥接到扩展。 |
| 谷歌信息网 | 您已配对的会话。该扩展对实时DOM进行读写操作。 |
代币效率
| 解决方案 | 工具 | 每个对话的令牌 |
|---|---|---|
| 打开消息 | 7 | ~1500 |
| TextBee+定制MCP | 2-3 | ~400-600 |
| 谷歌消息MCP | 3 | ~300 |
工具
list_chats
列出最近的SMS/RCS对话,包括联系人姓名、上次消息预览、时间戳和未读计数。
read_messages
阅读特定对话的消息历史记录。返回每条消息的文本、时间戳和方向(发送/接收)。
send_message
向现有对话发送SMS/RCS消息。在Google Messages撰写字段中键入内容,然后单击发送。
设置
先决条件
- 谷歌Chrome浏览器 谷歌网络消息 已与您的手机配对
- Node.js 18+
- Claude Code(或任何兼容MCP的客户端)
1.安装Chrome扩展程序
git clone https://github.com/GURSEWAKSINGHSANDHU/google-messages-mcp.git
cd google-messages-mcp
- 打开
chrome://extensions在Chrome浏览器中 - 启用 开发人员模式 (右上角切换)
- 点击 装载时未包装
- 选择
extension/文件夹 - 打开 messages.google.com -你应该在右下角看到一个绿点
2.安装MCP服务器
cd server
npm install
3.用克劳德代码注册
claude mcp add -s user --transport stdio google-messages -- node C:/path/to/google-messages-mcp/server/index.js
替换 C:/path/to/ 你的实际路径。
4.验证
打开克劳德代码并询问:
List my recent text messages
你应该看到你的谷歌消息对话。
状态
工作
list_chats-可靠地提取所有包含姓名、片段、时间戳的对话read_messages-具有发送/接收方向检测的完整消息历史记录- WebSocket自动重新连接 -如果服务器重新启动,扩展会自动重新连接
- 连接指示器 -谷歌信息上的绿点/红点显示网桥状态
进行中
send_message-文本输入是有效的,但Angular的zone.js更改检测需要主世界脚本注入才能可靠地激活发送按钮。看 问题#1.
计划的
- 按联系人姓名或电话号码搜索对话
- 创建新对话(发送一个不在现有聊天中的号码)
- 附件/图像支持
- 通过MCP资源发送未读消息通知
- 自动回复模式,可定制AI角色
运作原理
DOM提取
Google Messages Web是一个Angular应用程序。该扩展使用多策略方法提取数据:
-
会话列表:查找全部
<a>标签链接到/web/conversations/,走到容器前,并使用TreeWalker提取文本节点(名称、时间戳、片段)。按对话ID进行重复数据删除。 -
消息:查询多个选择器(
mms-message,[role="listitem"],消息气泡),并通过检查CSS对齐来确定方向(margin-left: auto=已发送,左对齐=已接收)。 -
发送:定位文本区域输入,设置值,然后单击可见的发送按钮(Google Messages会呈现隐藏的重复按钮-我们按以下方式进行筛选
offsetParent !== null).
主世界注射
内容脚本在Chrome的“孤立世界”中运行——它们共享DOM,但有一个单独的JavaScript上下文。Angular的zone.js只修补主世界中的事件监听器。这意味着:
- 从内容脚本发送的事件 不触发角度变化检测
- textarea值在DOM中设置,但Angular的表单控件看不到它
- 按钮点击启动,但Angular的处理程序不运行
解决方案: main-world.js 作为Manifest V3运行 world: "MAIN" 内容脚本。它与 content.js 通过 CustomEvent 并在Angular的区域内执行所有DOM转换。
贡献
该项目正在积极建设中。核心阅读基础设施正常工作。主要的挑战是通过Angular的变化检测边界发送可靠的消息。
如果您有以下方面的经验:
- Angular内部构件/zone.js
- Chrome扩展程序主世界脚本
- Google消息Web DOM结构
我们很乐意得到你的帮助。打开一个问题或PR。
比较
| 功能 | OpenMessage | TextBee | 本项目 |
|---|---|---|---|
| RCS支持 | 部分 | 否 | 是 |
| E2E加密 | 否 | 否 | 是(本地) |
| 云依赖性 | 否 | 是 | 不 |
| 需要手机应用程序 | 否 | 是 | 不 |
| 是否需要Docker | 是 | 否 | 不 |
| 会话稳定性 | 差(SSE到期) | 好 | 良好(标准偏差) |
| 代币开销 | ~1500(7个工具) | ~400(2个工具) | ~300(3个工具) |
| 设置复杂性 | 高 | 高 | 低 |
| 消息同步 | 延迟 | 实时 | 实时 |
许可证
麻省理工学院
建立在挫折、毅力和克劳德代码之上。
