Chrome Extension Bridges Google Messages to Claude Code via MCP

Direct Integration Without Docker or Cloud Servers
A developer has created a Chrome extension that injects into Google Messages Web sessions and bridges them to Claude Code via Model Context Protocol (MCP). The architecture uses stdio transport between Claude Code and a Node.js MCP server, which communicates with the Chrome extension via WebSocket on localhost:7008.
What Works vs. Existing Solutions
The developer tried two existing approaches first:
- OpenMessage: Docker container using libgm protocol with SSE sessions that expire after a few minutes of inactivity, causing "Invalid session ID" errors. It requires restarting the Docker container for new messages to sync and uses 7 MCP tools (~1,500 tokens per conversation).
- TextBee: Android SMS gateway app that routes all private SMS messages through cloud servers (SMS only, no RCS). Requires webhook server plus Tailscale/ngrok tunnel, totaling five moving parts for basic texting.
The new Chrome extension approach has three working MCP tools with ~300 tokens overhead:
list_chats– Returns all conversations with names, snippets, and timestampsread_messages– Provides full message history with sent/received directionsend_message– Fills in text but doesn't actually send (currently works as a draft tool)
The Angular Isolation Problem
Google Messages Web is an Angular app where Chrome extension content scripts run in an "isolated world" – a separate JavaScript context from the page. Angular's zone.js only patches event listeners in the main world, so when the extension sets the textarea value and clicks Send:
- The text appears in the input ✓
- The send button gets clicked ✓
- Angular's form control doesn't detect the value change, so the click handler thinks the field is empty ✗
Attempted Solutions
The developer has tried multiple approaches:
- Native value setter + input events
document.execCommand('insertText')- Full mouse event sequence (pointerdown/mousedown/mouseup/click)
- Enter key simulation
- Manifest V3
world: "MAIN"content script (gets closest but still doesn't send)
Debug output from the main world script shows: {"valueSet": true, "btnLabel": "Send end-to-end encrypted RCS message", "clicked": true, "inputAfter": "text still here...", "sentVia": "none"}
Potential Solutions to Explore
The developer is considering:
chrome.debuggerAPI for trusted input events- Accessing Angular's NgZone via
__ngContext__on DOM elements - CDP (Chrome DevTools Protocol) for
Input.dispatchKeyEvent
The project is open source with repository at https://github.com/GURSEWAKSINGHSANDHU/google-messages-mcp and issue tracking at https://github.com/GURSEWAKSINGHSANDHU/google-messages-mcp/issues/1.
📖 Read the full source: r/ClaudeAI
👀 See Also

HomeButler: Zero-token homelab management for OpenClaw agents
HomeButler is a single Go binary that lets OpenClaw agents manage homelab infrastructure without API keys or tokens. It runs locally and keeps all operations on your network.

Claude-Powered MCP Tool Generates Interactive HTML Components Without Build Tools
A developer built daub.dev, a system where Claude drives an MCP server to produce styled, interactive HTML UI components from natural language descriptions without React, bundlers, or build pipelines.

Building a Self-Improving Dream Cycle with Cron Jobs and Claude
A developer built an autonomous dream cycle using two cron jobs: one at 10:30 PM for research and reflection, and another at 11:00 PM for review and planning. The system scans arXiv, GitHub trending, and Reddit, identifies weaknesses, and proposes concrete improvements.

Utilyze: Open-Source GPU Monitor That Measures Real Compute Throughput, Not Just Kernel Activity
Utilyze samples hardware performance counters to report compute and memory throughput relative to theoretical limits, exposing that dashboards showing 100% utilization may have only 1-10% real throughput.