Gmail CLI for AI Agents

Framework Integration Gradient
Gmail Logo
CLI Logo
divider

Introduction

CLIs are eating MCPs. The industry is converging on the very same idea. MCPs for all their merit can be token hungry, slow, and unreliable for complex tool chaining. However, coding agents have become incredibly good at working with CLIs, and in fact they are far more comfortable working with CLI tools than MCP.

With Composio's Universal CLI, your coding agents can talk to over 850+ SaaS applications. With Gmail, agents can read emails, search your inbox, draft messages, manage labels, and organize threads, and more — all without worrying about authentication.

This guide walks you through Composio Universal CLI and explains how you can connect it with coding agents like Claude Code, Codex, OpenCode, etc, for end-to-end Gmail automation.

Also integrate Gmail with

What is Universal CLI and why use it?

The idea behind building the universal CLI is to give agents a single command interface to interact with all your external applications. Here's what you'll get with it:

  • Agent-friendly: Coding agents like Claude Code, Codex, and OpenCode can use CLI tools natively — no MCP setup required.
  • Authentication handled: Connect once via OAuth or API Key, and all CLI commands work with your credentials automatically.
  • Tool discovery: Search, inspect, and execute 20,000+ tools across 850+ apps from one interface.
  • Trigger support: Use triggers to listen for events across your apps, powered by real-time webhooks or polling under the hood.
  • Type generation: Generate typed schemas for autocomplete and type safety in your projects.

Prerequisites

Install the Composio CLI, authenticate, and initialize your project:

bash
# Install the Composio CLI
curl -fsSL https://composio.dev/install | bash

# Authenticate with Composio
composio login

During login you'll be redirected to sign in page, finish the complete flow and you're all set.

Composio CLI authentication flow

Connecting Gmail to Coding Agents via Universal CLI

Once it is installed, it's essentially done. Claude Code, Codex, OpenCode, OpenClaw, or any other agent will be able to access the CLI. A few steps to give agents access to your apps.

  1. Launch your Coding Agent — Claude Code, Codex, OpenCode, anything you prefer.
  2. Prompt it to "Authenticate with Gmail"
  3. Complete the authentication and authorization flow and your Gmail integration is all set.
  4. Start asking anything you want.

Supported Tools & Triggers

Tools
Triggers
Modify email labelsAdds and/or removes specified gmail labels for a message; ensure `message id` and all `label ids` are valid (use 'listlabels' for custom label ids).
Create email draftCreates a gmail email draft, supporting to/cc/bcc, subject, plain/html body (ensure `is html=true` for html), attachments, and threading.
Create labelCreates a new label with a unique name in the specified user's gmail account.
Delete DraftPermanently deletes a specific gmail draft using its id; ensure the draft exists and the user has necessary permissions for the given `user id`.
Delete messagePermanently deletes a specific email message by its id from a gmail mailbox; for `user id`, use 'me' for the authenticated user or an email address to which the authenticated user has delegated access.
Fetch emailsFetches a list of email messages from a gmail account, supporting filtering, pagination, and optional full content retrieval.
Fetch message by message IDFetches a specific email message by its id, provided the `message id` exists and is accessible to the authenticated `user id`.
Fetch Message by Thread IDRetrieves messages from a gmail thread using its `thread id`, where the thread must be accessible by the specified `user id`.
Get Gmail attachmentRetrieves a specific attachment by id from a message in a user's gmail mailbox, requiring valid message and attachment ids.
Get contactsFetches contacts (connections) for the authenticated google account, allowing selection of specific data fields and pagination.
Get PeopleRetrieves either a specific person's details (using `resource name`) or lists 'other contacts' (if `other contacts` is true), with `person fields` specifying the data to return.
Get ProfileRetrieves key gmail profile information (email address, message/thread totals, history id) for a user.
List draftsRetrieves a paginated list of email drafts from a user's gmail account.
List Gmail labelsRetrieves a list of all system and user-created labels for the specified gmail account.
List threadsRetrieves a list of email threads from a gmail account, identified by `user id` (email address or 'me'), supporting filtering and pagination.
Modify thread labelsAdds or removes specified existing label ids from a gmail thread, affecting all its messages; ensure the thread id is valid.
Move to TrashMoves an existing, non-deleted email message to the trash for the specified user.
Patch LabelPatches the specified label.
Remove labelPermanently deletes a specific, existing user-created gmail label by its id for a user; cannot delete system labels.
Reply to email threadSends a reply within a specific gmail thread using the original thread's subject, requiring a valid `thread id` and correctly formatted email addresses.
Search PeopleSearches contacts by matching the query against names, nicknames, emails, phone numbers, and organizations, optionally including 'other contacts'.
Send DraftSends the specified, existing draft to the recipients in the to, cc, and bcc headers.
Send EmailSends an email via gmail api using the authenticated user's google profile display name, requiring `is html=true` if the body contains html and valid `s3key`, `mimetype`, `name` for any attachment.

Universal CLI Commands for Gmail

You can also manually execute CLI commands to interact with your Gmail.

Connect your Gmail account

Link your Gmail account and verify the connection:

bash
# Connect your Gmail account (opens OAuth flow)
composio connected-accounts link gmail

# Verify the connection
composio connected-accounts list --toolkits gmail

Discover Gmail tools

Search and inspect available Gmail tools:

bash
# List all available Gmail tools
composio tools list --toolkit gmail

# Search for Gmail tools by action
composio tools search "gmail"

# Inspect a tool's input schema
composio tools info GMAIL_ADD_LABEL_TO_EMAIL

Common Gmail Actions

Modify email labelsAdds and/or removes specified gmail labels for a message; ensure `message id` and all `label ids` are valid (use 'listlabels' for custom label ids)

bash
composio tools execute GMAIL_ADD_LABEL_TO_EMAIL \
  --message_id "17f1b2b9c1b2a3d4"

Create email draftCreates a gmail email draft, supporting to/cc/bcc, subject, plain/html body (ensure `is html=true` for html), attachments, and threading

bash
composio tools execute GMAIL_CREATE_EMAIL_DRAFT \
  --body "Hello Team,  Please find the attached report for your review.  Best regards, Your Name" \
  --subject "Project Update Q3" \
  --recipient_email "john.doe@example.com"

Create labelCreates a new label with a unique name in the specified user's gmail account

bash
composio tools execute GMAIL_CREATE_LABEL \
  --label_name "Work"

Delete DraftPermanently deletes a specific gmail draft using its id; ensure the draft exists and the user has necessary permissions for the given `user id`

bash
composio tools execute GMAIL_DELETE_DRAFT \
  --draft_id "r-8388446164079304564"

Set up Gmail Triggers

Listen for events in real time using triggers:

Email SentTriggers when a Gmail message is sent by the authenticated user

bash
# Find your connected account ID
composio connected-accounts list --toolkits gmail

# Create a trigger
composio triggers create GMAIL_EMAIL_SENT_TRIGGER \
  --connected-account-id <your-connected-account-id> \
  --trigger-config '{
  "query": "to:someone@example.com",
  "userId": "me",
  "interval": 2
}'

# Listen for trigger events in real time
composio triggers listen --toolkits gmail --table

New Gmail Message Received TriggerTriggers when a new message is received in Gmail

bash
# Find your connected account ID
composio connected-accounts list --toolkits gmail

# Create a trigger
composio triggers create GMAIL_NEW_GMAIL_MESSAGE \
  --connected-account-id <your-connected-account-id> \
  --trigger-config '{
  "query": "label:inbox OR label:sent",
  "interval": 2,
  "labelIds": "INBOX"
}'

# Listen for trigger events in real time
composio triggers listen --toolkits gmail --table

Generate Type Definitions

Generate typed schemas for Gmail tools to get autocomplete and type safety in your project:

bash
# Auto-detect language
composio generate --toolkits gmail

# TypeScript
composio ts generate --toolkits gmail

# Python
composio py generate --toolkits gmail

Tips & Tricks

  • Always inspect a tool's input schema before executing: composio tools info <TOOL_NAME>
  • Pipe output with jq for better readability: composio tools execute TOOL_NAME -d '{}' | jq
  • Set COMPOSIO_API_KEY as an environment variable for CI/CD pipelines
  • Use composio dev logs tools to inspect execution logs and debug issues

Next Steps

  • Try asking your coding agent to perform various Gmail operations
  • Explore cross-app workflows by connecting more toolkits
  • Set up triggers for real-time automation
  • Use composio generate for typed schemas in your projects

How to build Gmail MCP Agent with another framework

FAQ

What is the Composio Universal CLI?

The Composio Universal CLI is a single command-line interface that lets coding agents and developers interact with 850+ SaaS applications. It handles authentication, tool discovery, action execution, and trigger setup — all from the terminal, without needing to configure MCP servers.

Which coding agents work with the Composio CLI?

Any coding agent that can run shell commands works with the Composio CLI — including Claude Code, Codex, OpenCode, OpenClaw, and others. Once the CLI is installed, agents automatically discover and use the composio commands to interact with Gmail and other connected apps.

How is the CLI different from using an MCP server for Gmail?

MCP servers require configuration and can be token-heavy for complex workflows. The CLI gives agents a direct, lightweight interface — no server setup needed. Agents simply call composio commands like any other shell tool. It's faster to set up, more reliable for multi-step tool chaining, and works natively with how coding agents already operate.

How safe is my Gmail data when using the Composio CLI?

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Gmail data and credentials are handled as safely as possible. You can also bring your own OAuth credentials for full control.

Used by agents from

Context
Letta
glean
HubSpot
Agent.ai
Altera
DataStax
Entelligence
Rolai
Context
Letta
glean
HubSpot
Agent.ai
Altera
DataStax
Entelligence
Rolai
Context
Letta
glean
HubSpot
Agent.ai
Altera
DataStax
Entelligence
Rolai

Never worry about agent reliability

We handle tool reliability, observability, and security so you never have to second-guess an agent action.