add-gmail
Skill98 starsChanged 8 months agoApache-2.0View on GitHub
Add Gmail integration to MatClaw. Can be configured as a tool (agent reads/sends emails when triggered from WhatsApp) or as a full channel (emails can trigger the agent, schedule tasks, and receive replies). Guides through GCP OAuth setup and implements the integration.
- Reads credentials
5 other projects use a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- juancruzmunozalbelo/swarmclawtheir own version, first seen Oct 8, 2026
- Runchuan-BU/BioClawtheir own version, first seen Aug 2, 2026
- mrsandman17/chief-of-stafftheir own version, first seen May 20, 2026
- breakcafe/picoclawedited, first seen Mar 6, 2026
- jaypyles/nanoclaw-discordtheir own version, first seen Feb 8, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 1
- breakcafe/picoclaw★ 194% same
Wrote their own version · 4
- Runchuan-BU/BioClaw★ 405same name
- jaypyles/nanoclaw-discord★ 2same name
- juancruzmunozalbelo/swarmclaw★ 1same name
- mrsandman17/chief-of-staff★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository20 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- add-dingtalkSkill
- add-discordSkill
- add-ollama-toolSkill
- add-parallelSkill
- add-slackSkill
- add-telegramSkill
- add-telegram-swarmSkill
- add-vaspSkill
- add-voice-transcriptionSkill
- add-whatsappSkill
- convert-to-apple-containerSkill
- customizeSkill
- debugSkill
- get-qodo-rulesSkill
- qodo-pr-resolverSkill
- setupSkill
- update-matclawSkill
- use-local-whisperSkill
- x-integrationSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
18 rules. 1 is common, 4 are distinctive, and 13 are very specific to this project.
1
Common
Most of the 5 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
13
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
Read .matclaw/state.yaml. If gmail is in applied_skills, skip to Phase 3 (Setup).
- Very specific: line 29
If .matclaw/ directory doesn't exist yet:
- Very specific: line 37
Do NOT run the full apply script.
- Very specific: line 49
Add gmail to .matclaw/state.yaml under applied_skills with mode: tool-only.
- Distinctive: line 61
Run the full skills engine to apply all code changes:
- Distinctive: line 77
If the apply reports merge conflicts, read the intent files:
- Distinctive: line 100
All tests must pass (including the new gmail tests) and build must be clean before proceeding.
- Very specific: line 110
If credentials.json already exists, skip to "Build and restart" below.
- Common: line 127
If user provides a path, copy it:
- Very specific: line 134
If user pastes JSON content, write it to ~/.gmail-mcp/gcp-oauth.keys.json.
- Very specific: line 148
If that fails (some versions don't have an auth subcommand), try timeout 60 npx -y @gongrzhe/server-gmail-autoauth-mcp || true.
- Very specific: line 215
Verify ~/.gmail-mcp is mounted: check src/container-runner.ts for the .gmail-mcp mount
- Very specific: line 216
Check container logs: cat groups/main/logs/container-*.log | tail -50
- Distinctive: line 221
Check logs for Gmail polling errors
- Very specific: line 227
Remove ~/.gmail-mcp mount from src/container-runner.ts
- Very specific: line 228
Remove gmail MCP server and mcp__gmail__* from container/agent-runner/src/index.ts
- Very specific: line 229
Remove gmail from .matclaw/state.yaml
- Very specific: line 235
Delete src/channels/gmail.ts and src/channels/gmail.test.ts
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Add Gmail Integration
This skill adds Gmail support to MatClaw — either as a tool (read, send, search, draft) or as a full channel that polls the inbox.
Phase 1: Pre-flight
Check if already applied
Read .matclaw/state.yaml. If gmail is in applied_skills, skip to Phase 3 (Setup). The code changes are already in place.
Ask the user
Use AskUserQuestion:
AskUserQuestion: Should incoming emails be able to trigger the agent?
- Yes — Full channel mode: the agent listens on Gmail and responds to incoming emails automatically
- No — Tool-only: the agent gets full Gmail tools (read, send, search, draft) but won't monitor the inbox. No channel code is added.
Phase 2: Apply Code Changes
Initialize skills system (if needed)
If .matclaw/ directory doesn't exist yet:
npx tsx scripts/apply-skill.ts --initPath A: Tool-only (user chose "No")
Do NOT run the full apply script. Only two source files need changes. This avoids adding dead code (gmail.ts, gmail.test.ts, index.ts channel logic, routing tests, googleapis dependency).
1. Mount Gmail credentials in container
Apply the changes described in modify/src/container-runner.ts.intent.md to src/container-runner.ts: import os, add a conditional read-write mount of ~/.gmail-mcp to /home/node/.gmail-mcp in buildVolumeMounts() after the session mounts.
2. Add Gmail MCP server to agent runner
Apply the changes described in modify/container/agent-runner/src/index.ts.intent.md to container/agent-runner/src/index.ts: add gmail MCP server (npx -y @gongrzhe/server-gmail-autoauth-mcp) and 'mcp__gmail__*' to allowedTools.
3. Record in state
Add gmail to .matclaw/state.yaml under applied_skills with mode: tool-only.
4. Validate
npm run buildBuild must be clean before proceeding. Skip to Phase 3.
Path B: Channel mode (user chose "Yes")
Run the full skills engine to apply all code changes:
npx tsx scripts/apply-skill.ts .claude/skills/add-gmailThis deterministically:
- Adds
src/channels/gmail.ts(GmailChannel class with self-registration viaregisterChannel) - Adds
src/channels/gmail.test.ts(unit tests) - Appends
import './gmail.js'to the channel barrel filesrc/channels/index.ts - Three-way merges Gmail credentials mount into
src/container-runner.ts(~/.gmail-mcp -> /home/node/.gmail-mcp) - Three-way merges Gmail MCP server into
container/agent-runner/src/index.ts(@gongrzhe/server-gmail-autoauth-mcp) - Installs the
googleapisnpm dependency - Records the application in
.matclaw/state.yaml
If the apply reports merge conflicts, read the intent files:
modify/src/channels/index.ts.intent.md— what changed for the barrel filemodify/src/container-runner.ts.intent.md— what changed for container-runner.tsmodify/container/agent-runner/src/index.ts.intent.md— what changed for agent-runner
Add email handling instructions
Append the following to groups/main/CLAUDE.md (before the formatting section):
## Email Notifications
When you receive an email notification (messages starting with `[Email from ...`), inform the user about it but do NOT reply to the email unless specifically asked. You have Gmail tools available — use them only when the user explicitly asks you to reply, forward, or take action on an email.Validate
npm test
npm run buildAll tests must pass (including the new gmail tests) and build must be clean before proceeding.
Phase 3: Setup
Check existing Gmail credentials
ls -la ~/.gmail-mcp/ 2>/dev/null || echo "No Gmail config found"If credentials.json already exists, skip to "Build and restart" below.
GCP Project Setup
Tell the user:
I need you to set up Google Cloud OAuth credentials:
- Open https://console.cloud.google.com — create a new project or select existing
- Go to APIs & Services > Library, search "Gmail API", click Enable
- Go to APIs & Services > Credentials, click + CREATE CREDENTIALS > OAuth client ID
- If prompted for consent screen: choose "External", fill in app name and email, save
- Application type: Desktop app, name: anything (e.g., "MatClaw Gmail")
- Click DOWNLOAD JSON and save as
gcp-oauth.keys.jsonWhere did you save the file? (Give me the full path, or paste the file contents here)
If user provides a path, copy it:
mkdir -p ~/.gmail-mcp
cp "/path/user/provided/gcp-oauth.keys.json" ~/.gmail-mcp/gcp-oauth.keys.jsonIf user pastes JSON content, write it to ~/.gmail-mcp/gcp-oauth.keys.json.
OAuth Authorization
Tell the user:
I'm going to run Gmail authorization. A browser window will open — sign in and grant access. If you see an "app isn't verified" warning, click "Advanced" then "Go to [app name] (unsafe)" — this is normal for personal OAuth apps.
Run the authorization:
npx -y @gongrzhe/server-gmail-autoauth-mcp authIf that fails (some versions don't have an auth subcommand), try timeout 60 npx -y @gongrzhe/server-gmail-autoauth-mcp || true. Verify with ls ~/.gmail-mcp/credentials.json.
Build and restart
Clear stale per-group agent-runner copies (they only get re-created if missing, so existing copies won't pick up the new Gmail server):
rm -r data/sessions/*/agent-runner-src 2>/dev/null || trueRebuild the container (agent-runner changed):
cd container && ./build.shThen compile and restart:
npm run build
launchctl kickstart -k gui/$(id -u)/com.matclaw # macOS
# Linux: systemctl --user restart matclawPhase 4: Verify
Test tool access (both modes)
Tell the user:
Gmail is connected! Send this in your main channel:
@Andy check my recent emailsor@Andy list my Gmail labels
Test channel mode (Channel mode only)
Tell the user to send themselves a test email. The agent should pick it up within a minute. Monitor: tail -f logs/matclaw.log | grep -iE "(gmail|email)".
Once verified, offer filter customization via AskUserQuestion — by default, only emails in the Primary inbox trigger the agent (Promotions, Social, Updates, and Forums are excluded). The user can keep this default or narrow further by sender, label, or keywords. No code changes needed for filters.
Check logs if needed
tail -f logs/matclaw.logTroubleshooting
Gmail connection not responding
Test directly:
npx -y @gongrzhe/server-gmail-autoauth-mcpOAuth token expired
Re-authorize:
rm ~/.gmail-mcp/credentials.json
npx -y @gongrzhe/server-gmail-autoauth-mcpContainer can't access Gmail
- Verify
~/.gmail-mcpis mounted: checksrc/container-runner.tsfor the.gmail-mcpmount - Check container logs:
cat groups/main/logs/container-*.log | tail -50
Emails not being detected (Channel mode only)
- By default, the channel polls unread Primary inbox emails (
is:unread category:primary) - Check logs for Gmail polling errors
Removal
Tool-only mode
- Remove
~/.gmail-mcpmount fromsrc/container-runner.ts - Remove
gmailMCP server andmcp__gmail__*fromcontainer/agent-runner/src/index.ts - Remove
gmailfrom.matclaw/state.yaml - Clear stale agent-runner copies:
rm -r data/sessions/*/agent-runner-src 2>/dev/null || true - Rebuild:
cd container && ./build.sh && cd .. && npm run build && launchctl kickstart -k gui/$(id -u)/com.matclaw(macOS) orsystemctl --user restart matclaw(Linux)
Channel mode
- Delete
src/channels/gmail.tsandsrc/channels/gmail.test.ts - Remove
import './gmail.js'fromsrc/channels/index.ts - Remove
~/.gmail-mcpmount fromsrc/container-runner.ts - Remove
gmailMCP server andmcp__gmail__*fromcontainer/agent-runner/src/index.ts - Uninstall:
npm uninstall googleapis - Remove
gmailfrom.matclaw/state.yaml - Clear stale agent-runner copies:
rm -r data/sessions/*/agent-runner-src 2>/dev/null || true - Rebuild:
cd container && ./build.sh && cd .. && npm run build && launchctl kickstart -k gui/$(id -u)/com.matclaw(macOS) orsystemctl --user restart matclaw(Linux)
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

