Install
$ agentstack add skill-workato-devs-recipe-skills-gmail-recipes Open-source listing, not yet scanned by AgentStack. Follow the source repository for install instructions.
Security review
⚠ Flagged1 finding(s); flagged for manual review. · v0.1.0 How review works →
- • Prompt-injection patterns
- • Secret / credential exfiltration
- • Dangerous shell & filesystem operations
- • Untrusted network calls
- • Known-malicious package signatures
- high Possible prompt-injection directive.
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Gmail Recipes Skill
> DEPENDENCY: Run /workato-recipes first if not already loaded. > This skill requires the base Workato knowledge for triggers, control flow, datapills, and recipe structure.
You are now equipped with Gmail-specific knowledge for writing Workato recipes using the native Gmail connector.
CRITICAL: Pre-Generation Checklist
For EXISTING projects:
- Read existing Gmail
.recipe.jsonfiles to understand local patterns
For GREENFIELD projects:
- Use skill templates - see
templates/directory for validated examples - Use descriptive UUIDs - e.g.,
list-emails-001,get-details-002
ALWAYS:
- Ask for connection name - exact name of Gmail connection in Workato
- Confirm operation type - send, list, search, or label management
- Use API endpoint trigger for testability via curl
- Use descriptive UUIDs - never copy random hex UUIDs from existing recipes
- Remember datapill paths - adhoc HTTP uses
["body", ...]wrapper
> WARNING: Gmail adhoc HTTP responses wrap data in body. Always use paths like ["body", "messages"] for list/search results.
Capabilities
With this skill loaded, you can:
- Create recipes that send emails (text/HTML) with attachments
- Create recipes that list and search emails with Gmail query syntax
- Create recipes that get full message details
- Create recipes that manage labels (create, list, apply, remove)
- Create recipes that archive or modify messages
- Create callable API endpoint recipes for Gmail operations
Gmail Connector
This skill covers the native Gmail connector (gmail) which provides:
- 3 native actions for core email operations (send, get by ID, download attachment)
- 1 trigger for new email arrival
- Adhoc HTTP actions for all other Gmail REST API operations (list, search, labels, user info, modify, delete, threads, drafts)
Connector Limitations
> Important: The native Gmail connector is built on the Gmail REST API v1 with a hardcoded base URL (https://www.googleapis.com/gmail/v1/users/). This means: > > - 3 native actions + 1 trigger — covers send, get email/draft by ID, and download attachment > - Adhoc HTTP required for most operations: list/search emails, labels, user info, message modification, deletion, threads, drafts > - API version locked - Cannot access newer Gmail API features not in v1 > > If a user needs functionality not supported by the v1 API, recommend they: > 1. Check the Workato Community Library for updated Gmail connectors > 2. Consider building a custom SDK connector with the needed endpoints > 3. Use the HTTP connector with custom OAuth for full API flexibility
> Note: Developers can build custom SDK connectors for Gmail with additional actions. See workato-recipes/patterns/custom-connector-actions.md for custom connector patterns. Custom connectors are not included with Workato by default.
Gmail-Specific Knowledge
Provider
Use gmail for the native Gmail connector:
"provider": "gmail"
Connection Configuration
{
"keyword": "application",
"provider": "gmail",
"skip_validation": false,
"account_id": {
"zip_name": "my_gmail_account.connection.json",
"name": "My Gmail account",
"folder": ""
}
}
Gmail API Base URL
For adhoc HTTP actions, Gmail uses:
https://www.googleapis.com/gmail/v1/users/
Common paths:
me/messages- List messagesme/messages/{id}- Get message detailsme/labels- List labelsme/labels/{id}- Get/modify label
Datapill Paths
Native actions (like send_mail) return data without body wrapper:
"path": ["id"]
"path": ["threadId"]
"path": ["labelIds"]
Adhoc HTTP actions wrap responses in body:
"path": ["body", "messages"]
"path": ["body", "id"]
"path": ["body", "labelIds"]
Gmail Query Syntax
The q parameter supports Gmail search operators:
from:sender@example.com- From specific senderto:recipient@example.com- To specific recipientsubject:keyword- Subject contains keywordis:unread- Unread messagesis:starred- Starred messageshas:attachment- Has attachmentsafter:2024/01/01- After datebefore:2024/12/31- Before datelabel:INBOX- Has specific label
Combine with spaces: from:boss@company.com is:unread has:attachment
Optional Parameters Pattern
For optional query parameters, use .presence || skip:
"input": {
"data": {
"maxResults": "=_dp('{...}').presence || skip",
"pageToken": "=_dp('{...}').presence || skip",
"q": "=_dp('{...}').presence || skip",
"labelIds": "=_dp('{...}').presence || skip"
}
}
Native Connector Guidance
The Gmail connector provides 3 native actions and 1 trigger. See lint-rules.json for the authoritative list of valid action and trigger names.
Trigger
new_email— Fires when a new email arrives in the connected account.
Choosing the Right Approach
Native actions (use these when possible):
send_mail— Send an email (text or HTML) with optional attachments. See [detail below](#send_mail-detail).get_email_or_draft_by_id— Get full details of a single email or draft by message ID. Returns headers, body, labels, snippet.download_attachment— Download an attachment by message ID and attachment ID.
Adhoc HTTP required for everything else:
- List/search emails — Use
__adhoc_http_actionwithGET me/messagesand Gmail query syntax via theqparameter. See [adhoc patterns below](#adhoc-http-patterns). - Labels — List, create, modify, delete, apply, or remove labels via
me/labelsendpoints. - User info — Get Gmail profile via
me/profile. - Message operations — Modify (add/remove labels, archive), delete, trash via
me/messages/{id}/modify,me/messages/{id}/trash. - Threads and drafts — Full thread and draft management via
me/threads,me/drafts.
See patterns/gmail-api-reference.md for the full endpoint catalog.
send_mail Detail
Send an email with optional attachments:
{
"provider": "gmail",
"name": "send_mail",
"keyword": "action",
"input": {
"email_type": "html",
"to": "recipient@example.com",
"subject": "Email Subject",
"body": "HTML content here",
"from": "sender-alias@example.com",
"cc": "cc@example.com",
"bcc": "bcc@example.com",
"reply_to": "reply-to@example.com",
"attachments": {
"____source": "#{_dp('{...path to attachments array}')}",
"file_binary_content": "#{_dp('{...path to file content}')}",
"file_name": "#{_dp('{...path to file name}')}"
}
}
}
Email types:
"text"- Plain text email"html"- HTML formatted email
Output fields:
id- Message IDthreadId- Thread IDlabelIds- Array of label IDs
Adhoc HTTP Patterns
List Messages
{
"provider": "gmail",
"name": "__adhoc_http_action",
"keyword": "action",
"input": {
"mnemonic": "List Emails",
"verb": "get",
"response_type": "json",
"path": "me/messages",
"input": {
"schema": "[...]",
"data": {
"maxResults": "=_dp('{...}').presence || skip",
"q": "=_dp('{...}').presence || skip"
}
},
"output": "[{\"name\":\"messages\",\"type\":\"array\",\"of\":\"object\",\"properties\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"threadId\",\"type\":\"string\"}]}]"
}
}
Get Message Details
{
"provider": "gmail",
"name": "__adhoc_http_action",
"keyword": "action",
"input": {
"mnemonic": "Get Message Details",
"verb": "get",
"response_type": "json",
"path": "me/messages/#{_dp('{...message_id}')}",
"output": "[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"threadId\",\"type\":\"string\"},{\"name\":\"labelIds\",\"type\":\"array\",\"of\":\"string\"},{\"name\":\"snippet\",\"type\":\"string\"},{\"name\":\"payload\",\"type\":\"object\",\"properties\":[...]}]"
}
}
Common Patterns
List + Enrich Pattern
Gmail's list endpoint returns minimal data (just IDs). To get full details, use a foreach loop:
- List messages (returns IDs only)
- Declare a list variable
- Foreach message ID:
- Get message details
- Add to list variable
- Return enriched list
See templates/list-emails.json for a complete example.
Error Handling
Wrap Gmail operations in try/catch for robust error handling:
{
"keyword": "try",
"block": [
// Gmail operations
]
},
{
"keyword": "catch",
"block": [
// Return error response
]
}
Validation
See [validation-checklist.md](validation-checklist.md) for Gmail-specific validation, which references the base checklist in workato-recipes/validation-checklist.md.
Reference Files
skills/workato-recipes/SKILL.md- Base platform knowledgeskills/gmail-recipes/patterns/native-gmail-actions.md- Native action detailsskills/gmail-recipes/patterns/gmail-api-reference.md- API endpoint referenceskills/gmail-recipes/templates/- Validated recipe templates
Usage
Before Generating Recipes
Ask the user for these details:
- Gmail connection name - What is their Gmail connection called?
- Example: "My Gmail account"
- Operation type - Send, list, search, or manage labels?
- Trigger type - API endpoint, scheduler, or event-driven?
Recipe Generation Steps
- Ask for connection name (REQUIRED)
- Identify the operation needed
- Determine if native action or adhoc HTTP is required
- Generate valid JSON using base skill structure + Gmail specifics
Example Prompts
- "Create a recipe that sends an HTML email with attachments via API"
- "Create a recipe that lists unread emails from a specific sender"
- "Create a recipe that searches for emails and returns full details"
- "Create a recipe that applies a label to matching emails"
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: workato-devs
- Source: workato-devs/recipe-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.