Google Workspace (Gmail, Calendar, Drive) and iMessage integration for Claude Code
Project description
jean-claude
A Claude Code plugin for managing Gmail, Google Calendar, Google Drive, and iMessage (macOS only).
Prerequisites
Claude Code
This is a plugin for Claude Code, Anthropic's agentic coding tool. Install it first:
curl -fsSL https://claude.ai/install.sh | bash
uv (Python package manager)
This plugin requires uv to manage Python dependencies (requires Python 3.11+, which uv will install automatically if needed):
curl -LsSf https://astral.sh/uv/install.sh | sh
Installation
From your terminal, run:
claude plugin marketplace add max-sixty/jean-claude
claude plugin install jean-claude@jean-claude
Setup
Google Workspace (Gmail, Calendar, Drive)
After installing the plugin, ask Claude to authenticate:
"Set up Google authentication for jean-claude"
Claude will run the auth command for you, which opens a browser for OAuth consent.
Manual setup (if you prefer running commands yourself)
# The plugin is installed at:
cd ~/.claude/plugins/marketplaces/jean-claude
# Full access (read, send, modify)
uv run jean-claude auth
# Or read-only access (no send/modify capabilities)
uv run jean-claude auth --readonly
# Verify it worked
uv run jean-claude status
Credentials are saved to ~/.config/jean-claude/token.json and persist until
revoked.
[!NOTE] You may see an "unverified app" warning during OAuth—this is normal for apps pending Google verification. Click "Advanced" → "Go to jean-claude (unsafe)" to proceed. The app only requests the permissions you approve and stores credentials locally on your machine.
Using your own Google Cloud credentials (optional)
Use your own credentials if the default ones stop working (Google limits unverified apps to 100 users) or if you want your own quota.
- Create a Google Cloud project at https://console.cloud.google.com
- Go to "APIs & Services" → "Enabled APIs" and enable:
- Gmail API
- Google Calendar API
- Google Drive API
- Go to "APIs & Services" → "OAuth consent screen":
- Choose "External" user type
- Fill in app name and your email
- Add scopes:
gmail.modify,calendar,drive - Add yourself as a test user
- Go to "APIs & Services" → "Credentials":
- Click "Create Credentials" → "OAuth client ID"
- Choose "Desktop app" as application type
- Download the JSON file
- Move the downloaded file:
mkdir -p ~/.config/jean-claude mv ~/Downloads/client_secret_*.json ~/.config/jean-claude/client_secret.json
- Run the auth command—it will automatically use your credentials
iMessage (macOS only)
iMessage integration requires macOS—it uses AppleScript and the local Messages database.
-
Sending messages: Works via AppleScript. On first use, macOS prompts to allow your terminal to control Messages.app (Automation permission). Grant this to whichever app runs Claude Code (Terminal, iTerm2, VS Code, etc.).
-
Reading messages: Requires Full Disk Access to read the Messages database.
- Open System Settings → Privacy & Security → Full Disk Access
- Click + and add the app that runs Claude Code:
- If using Terminal: add
/Applications/Utilities/Terminal.app - If using iTerm2: add
/Applications/iTerm.app - If using VS Code: add
/Applications/Visual Studio Code.app - If using another terminal: find it in
/Applicationsor viawhich
- If using Terminal: add
- Toggle the app on and restart it
Usage
Once installed, Claude automatically uses this plugin when you ask it to:
- Search, send, or draft emails
- Check calendar or create events
- Find, upload, or share Drive files
- Send texts or check iMessages
Example Prompts
"Check my inbox for unread emails"
"What's on my calendar today?"
"Send an email to alice@example.com about the meeting"
"Search Drive for quarterly reports"
"Text +12025551234 that I'm running late"
CLI Commands
The plugin provides a unified CLI with subcommands. Claude invokes these automatically, but you can also run them manually:
cd ~/.claude/plugins/marketplaces/jean-claude
uv run jean-claude --help
uv run jean-claude gmail --help
uv run jean-claude gcal --help
uv run jean-claude gdrive --help
uv run jean-claude imessage --help # macOS only
Shell Completions
Enable tab completion for the CLI:
cd ~/.claude/plugins/marketplaces/jean-claude
# Bash (~/.bashrc)
eval "$(uv run jean-claude completions bash)"
# Zsh (~/.zshrc)
eval "$(uv run jean-claude completions zsh)"
# Fish (~/.config/fish/config.fish)
uv run jean-claude completions fish | source
Features
Gmail
- Search and list emails
- Create, send, and manage drafts
- Reply and forward with threading preserved
- Star, archive/unarchive, mark read/unread, trash messages
Google Calendar
- List events (today, date range, or N days)
- Create events with attendees, location, description
- Search, update, and delete events
- Timezone auto-detection
Google Drive
- List and search files
- Upload and download files
- Create folders and share files
- Trash and restore files
iMessage (macOS only)
- Send messages to individuals or groups
- Send file attachments
- List chats and participants
- Search message history
- View unread messages
Security
- OAuth tokens are stored with 0600 permissions (owner read/write only)
- Default OAuth client credentials are embedded for convenience (standard practice for desktop/CLI apps per Google's guidelines)
- Users can provide their own Google Cloud credentials if preferred
- All email/message sends require explicit user approval
Development
# Install with dev dependencies
uv sync
# Run tests
uv run pytest
# Run lints
pre-commit run --all-files
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jean_claude_code-0.1.2-py3-none-manylinux2014_x86_64.whl.
File metadata
- Download URL: jean_claude_code-0.1.2-py3-none-manylinux2014_x86_64.whl
- Upload date:
- Size: 6.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bffd0ca67ae12c2b482069a2ba200a4c4d74283735da7a3dff67ad2df61801a5
|
|
| MD5 |
d27e6350b393e1deae68356b8dddfa68
|
|
| BLAKE2b-256 |
c2a76e9bc08bd84010e310ece4bd95ec254f583cd095f663b5332822be3ace4c
|
Provenance
The following attestation bundles were made for jean_claude_code-0.1.2-py3-none-manylinux2014_x86_64.whl:
Publisher:
build.yml on max-sixty/jean-claude
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jean_claude_code-0.1.2-py3-none-manylinux2014_x86_64.whl -
Subject digest:
bffd0ca67ae12c2b482069a2ba200a4c4d74283735da7a3dff67ad2df61801a5 - Sigstore transparency entry: 779750835
- Sigstore integration time:
-
Permalink:
max-sixty/jean-claude@75333cb4be6dccb82a70231c4bc929f61d4a9fb8 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/max-sixty
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@75333cb4be6dccb82a70231c4bc929f61d4a9fb8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jean_claude_code-0.1.2-py3-none-manylinux2014_aarch64.whl.
File metadata
- Download URL: jean_claude_code-0.1.2-py3-none-manylinux2014_aarch64.whl
- Upload date:
- Size: 6.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7de0305386ed7ca0d07d9e877fbbf14c3fbe33b4d8a02e10da28a09504d0ff7
|
|
| MD5 |
7fc2430e9739ddd85ebbaa74cd194b12
|
|
| BLAKE2b-256 |
940a776409538097185ef79da4a65fda6b65a54c250226871040e37e195882eb
|
Provenance
The following attestation bundles were made for jean_claude_code-0.1.2-py3-none-manylinux2014_aarch64.whl:
Publisher:
build.yml on max-sixty/jean-claude
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jean_claude_code-0.1.2-py3-none-manylinux2014_aarch64.whl -
Subject digest:
f7de0305386ed7ca0d07d9e877fbbf14c3fbe33b4d8a02e10da28a09504d0ff7 - Sigstore transparency entry: 779750833
- Sigstore integration time:
-
Permalink:
max-sixty/jean-claude@75333cb4be6dccb82a70231c4bc929f61d4a9fb8 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/max-sixty
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@75333cb4be6dccb82a70231c4bc929f61d4a9fb8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jean_claude_code-0.1.2-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: jean_claude_code-0.1.2-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 6.3 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1088858ca944e961940690b90099da3bf06f0bcc39ffc57214f01538d18e9b15
|
|
| MD5 |
20eca9ba370ca9e9ff543e94add139c3
|
|
| BLAKE2b-256 |
3ac48fd0b2402cf7db020f6e3a51f7ed6dd1982f138e23c9116fcabf8ecd7820
|
Provenance
The following attestation bundles were made for jean_claude_code-0.1.2-py3-none-macosx_11_0_arm64.whl:
Publisher:
build.yml on max-sixty/jean-claude
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jean_claude_code-0.1.2-py3-none-macosx_11_0_arm64.whl -
Subject digest:
1088858ca944e961940690b90099da3bf06f0bcc39ffc57214f01538d18e9b15 - Sigstore transparency entry: 779750832
- Sigstore integration time:
-
Permalink:
max-sixty/jean-claude@75333cb4be6dccb82a70231c4bc929f61d4a9fb8 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/max-sixty
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@75333cb4be6dccb82a70231c4bc929f61d4a9fb8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jean_claude_code-0.1.2-py3-none-macosx_10_9_x86_64.whl.
File metadata
- Download URL: jean_claude_code-0.1.2-py3-none-macosx_10_9_x86_64.whl
- Upload date:
- Size: 6.6 MB
- Tags: Python 3, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b53a9231870c37d21417cf7df843af801271bd44a1733e9d03626c2faecd57a1
|
|
| MD5 |
dee446a61fe3b1df3792ab984fa44433
|
|
| BLAKE2b-256 |
7b2238f73aa23242584ed09c52c7015d30bd7667284cdc1b10e4a343ed2f71eb
|
Provenance
The following attestation bundles were made for jean_claude_code-0.1.2-py3-none-macosx_10_9_x86_64.whl:
Publisher:
build.yml on max-sixty/jean-claude
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jean_claude_code-0.1.2-py3-none-macosx_10_9_x86_64.whl -
Subject digest:
b53a9231870c37d21417cf7df843af801271bd44a1733e9d03626c2faecd57a1 - Sigstore transparency entry: 779750830
- Sigstore integration time:
-
Permalink:
max-sixty/jean-claude@75333cb4be6dccb82a70231c4bc929f61d4a9fb8 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/max-sixty
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@75333cb4be6dccb82a70231c4bc929f61d4a9fb8 -
Trigger Event:
push
-
Statement type: