短信RCS消息桥接工具

一个连接AI代理与真实SMS/RCS对话的Chrome扩展与MCP服务器工具,无需第三方服务器或手机应用,直接通过浏览器访问Google Messages会话。

  • by GURSEWAKSINGHSANDHU
  • JavaScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 GURSEWAKSINGHSANDHU/google-messages-mcp

使用说明

谷歌消息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
  1. 打开 chrome://extensions 在Chrome浏览器中
  2. 启用 开发人员模式 (右上角切换)
  3. 点击 装载时未包装
  4. 选择 extension/ 文件夹
  5. 打开 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应用程序。该扩展使用多策略方法提取数据:

  1. 会话列表:查找全部 <a> 标签链接到 /web/conversations/,走到容器前,并使用TreeWalker提取文本节点(名称、时间戳、片段)。按对话ID进行重复数据删除。

  2. 消息:查询多个选择器(mms-message, [role="listitem"],消息气泡),并通过检查CSS对齐来确定方向(margin-left: auto =已发送,左对齐=已接收)。

  3. 发送:定位文本区域输入,设置值,然后单击可见的发送按钮(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个工具)
设置复杂性 高 高 低
消息同步 延迟 实时 实时

许可证

麻省理工学院


建立在挫折、毅力和克劳德代码之上。