google-workspace
Skill21 starsChanged 30 days agoMITView on GitHub
Use this skill when working with the mcp-google-multi MCP server to call Gmail, Drive, Calendar, Sheets, Docs, Contacts, Tasks, Meet, Chat, Slides, Forms, Search Console, Admin, or any other Google Workspace tool it exposes. Load it before the first discover or tool call in a session that touches this server, and whenever an account selector, a write-profile refusal, or an unfamiliar argument name needs resolving.
49 other projects use a version of this.
Adopted by
Most recently taken up by
- genericService/claude-skillstheir own version, first seen Nov 8, 2026
- ashleysbrain/skillstheir own version, first seen Nov 8, 2026
- delorenj/skillstheir own version, first seen Nov 7, 2026
- amirbiron/claude-skillstheir own version, first seen Nov 1, 2026
- rakaarwaky/agents-arwakytheir own version, first seen Nov 1, 2026
- InanisV/my-claude-skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use heartmula, jupyter-live-kernel and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
math-incSkillheartmula
Set up and run HeartMuLa, the open-source music generation model family (Suno-like). Generates full songs from lyrics + tags with multilingual support.
Also in 6 projects that use this
math-incSkilljupyter-live-kernel
Use a live Jupyter kernel for stateful, iterative Python execution via hamelnb. Load this skill when the task involves exploration, iteration, or inspecting intermediate results — data science, ML experimentation, API exploration, or building up complex code step-by-step. Uses terminal to run CLI commands against a live Jupyter kernel. No new tools required.
Also in 5 projects that use this
Tommy-ywSkillsongwriting-and-ai-music
Songwriting craft, AI music generation prompts (Suno focus), parody/adaptation techniques, phonetic tricks, and lessons learned. These are tools and ideas, not rules. Break any of them when the art calls for it.
Also in 7 projects that use this
john-data-chenSkillteams-meeting-pipeline
Operate the Teams meeting summary pipeline via Hermes CLI — summarize meetings, inspect pipeline status, replay jobs, manage Microsoft Graph subscriptions.
Also in 5 projects that use this
Tommy-ywSkillmaps
Location intelligence — geocode a place, reverse-geocode coordinates, find nearby places (46 POI categories), driving/walking/cycling distance + time, turn-by-turn directions, timezone lookup, bounding box + area for a named place, and POI search within a rectangle. Uses OpenStreetMap + Overpass + OSRM. Free, no API key.
Also in 8 projects that use this
mae616Skillp5js
p5.js(クリエイティブコーディング)のProcessing由来「コードでスケッチ」思想を軸に、setup/drawループ・座標系・インタラクション・パフォーマンス最適化を整理する。p5.js、Processing、クリエイティブコーディング、ジェネラティブアート、インタラクティブ表現、ビジュアルプログラミング、Canvas描画、パーティクル、フラクタル、ノイズ表現に関する相談で必ず使うこと。ユーザーが「コードでアート」「動くビジュアル」「インタラクティブな描画」と言った場合にも適用する。
Also in 6 projects that use this
- +5 more from math-inc
Other versions49 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 49
- NousResearch/hermes-agent★ 262ksame name
- google/adk-recipes★ 11ksame name
- google/adk-samples★ 11ksame name
- mitsuhiko/agent-commands★ 3.2ksame name
- mitsuhiko/agent-stuff★ 3.2ksame name
- math-inc/OpenGauss★ 1.3ksame name
- Tommy-yw/RunbookHermes★ 546same name
- aivrar/portable-hermes-agent★ 239same name
- RedWoodOG/Hermes-Desktop★ 177same name
- HybridAIOne/hybridclaw★ 159same name
39 more not listed
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 repositoryOne other file it gives its agents.
- CLAUDE.mdCLAUDE.md
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 1 is distinctive, and 10 are very specific to this project.
0
Common
Most of the 45 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 17
Every operational tool takes an account argument naming one of the configured aliases (an alias is a short local name, not the email …
- Very specific: line 21
Call account_list first. It returns each alias, its email, admin flag, token status, and which alias (if any) is the configured default.
- Very specific: line 23
If a default account is set, omit account on a single-account call.
- Very specific: line 25
If no default is set and more than one account is configured, you must pass account explicitly.
- Very specific: line 30
Read tools accept "*" for the account argument to fan out across every configured account (bounded concurrency), or a comma-separated …
- Very specific: line 44
Call {service}_discover (e.g.
- Distinctive: line 48
Call the tool by its exact name from that catalog.
- Very specific: line 72
gmail_search(since, until): when you have no stored history ID (e.g. - Very specific: line 87
Leave full unset (it defaults to the trimmed shape) on fat readers such as gmail_read(full) and gmail_read_thread(full).
- Very specific: line 146
If a service has no curated or generated tool for the operation you need (or discovery/reference/ doesn't cover it):
- Very specific: line 149
Call google_api_search(query, api, maxResults) with keywords (optionally scoped to one api alias) to find the Discovery method id, e.g.
“Common” is measured: kept by at least 6 in 10 of the 45 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
Google Workspace MCP server
This server exposes Google Workspace as MCP tools: a small set of curated, hand-written tools per service, a long tail of generated tools (one per Google API Discovery method), and an escape hatch for anything else. Reading this skill before the first call avoids the two most common failures: guessing an account when none was configured as default, and guessing an argument name instead of using the one the tool actually declares.
1. Pick the account
Every operational tool takes an account argument naming one of the
configured aliases (an alias is a short local name, not the email address
itself). Before calling anything:
- Call
account_listfirst. It returns each alias, its email, admin flag, token status, and which alias (if any) is the configured default. - If a default account is set, omit
accounton a single-account call; the server injects the default. Passing an alias is always safe too. - If no default is set and more than one account is configured, you must
pass
accountexplicitly. A call that omits it then fails withE_NO_DEFAULT_ACCOUNTand a hint listing everyalias=emailpair so you can match the one the user means by email, name, or context, rather than guessing. - Read tools accept
"*"for theaccountargument to fan out across every configured account (bounded concurrency), or a comma-separated subset such as"work,personal". Fan-out is read-only by design: write tools, and the handful of read tools that save a file to local disk (drive_download,drive_export,gmail_download_attachment), take exactly one account. A fan-out call returns{ results: [{ account, ok, data|error }], partial }so one account failing never hides the others.
2. Discover before calling
Tools are hidden from the model's context until revealed, but every tool is always callable by exact name (discovery is a listing optimization, not a security boundary).
- Call
{service}_discover(e.g.gmail_discover,drive_discover) for the service you need. It returns that service's catalog: each tool's name, a one-line summary, its arguments, and its read/create/update/delete class. An optionalqueryargument filters the catalog by keyword. - Call the tool by its exact name from that catalog. Do not guess a name by analogy with another service.
discover_allreveals every curated tool across all services at once, useful before a session doing substantial cross-service work, anddiscover_resetcollapses back to the configured default afterward to reclaim context.- A client that loads tool schemas on demand (rather than accepting everything a server advertises) may need its own tool-search or tool-load step before a newly revealed tool is actually callable. If a call to a tool you just discovered fails as unknown on such a client, look for that client's own load-tool mechanism before retrying the Google call itself.
3. Incremental Gmail sweeps
For a recurring "what's new in this mailbox" check, do not re-run the same
broad gmail_search on a timer. Two cheaper patterns:
gmail_list_history(startHistoryId, historyTypes)with astartHistoryIdyou stored from a previousgmail_get_profileorgmail_list_historyresponse. It returns exactly the mailbox changes since that point (messages added/deleted, labels added/removed), optionally filtered byhistoryTypes. Store the newest history ID you observe and pass it next time.gmail_search(since, until)when you have no stored history ID (e.g. the first sweep, or after a gap long enough that Gmail's history window has expired). Both accept an ISO 8601 date or a date-time with an explicitZor UTC offset, never a bare local time.
4. Keep results small
Large responses cost context and, for list endpoints, risk a page that looks complete but isn't. Prefer the per-call controls over reading everything and discarding most of it:
- On a generated tool or the
google_api_call(queryParams)escape hatch, pass Google's ownfieldspartial-response query param to restrict a response to the properties you actually need. Curated tools already pick a response shape for you, so they don't exposefieldsthemselves. - Leave
fullunset (it defaults to the trimmed shape) on fat readers such asgmail_read(full)andgmail_read_thread(full); passfull: trueonly when you actually need the untruncated body.calendar_list_eventsandcalendar_list_instancesalways return a trimmed view with nofullargument to toggle; callcalendar_get_eventfor one event's complete data. - Cap the page on list and search tools (the argument name varies by tool:
drive_search(maxResults)andcontacts_search(pageSize)are two examples; check{service}_discoveror the reference table for the exact name), and follownextPageTokenrather than assuming a short list is the whole answer. Where a list reportstruncated, there is more to fetch. - On Gmail, pass
headersongmail_read(headers)orgmail_read_batch(headers)to fetch onlyid,threadId,labelIds, and the named header values, skipping full body decoding entirely when you only need metadata likeSubjectorFrom.
5. Write profiles
Reads are never gated. Writes (create/update/delete) are deny-by-default and
controlled by the deployment's GOOGLE_PROFILE:
read-only(the default): every write refused.safe-writes: ordinary creates and updates on your own data are allowed, and so is moving an item to or from Trash (gmail_trash,drive_trash, and their untrash equivalents) since that is recoverable. Permanent deletes (emptying Trash, a hard Gmail or Drive delete),drive_transferwithmove: true, and privileged writes (anything needing an admin, Vault, reseller, or script scope, or registering a push channel) stay refused under this profile.full-writes: everything permitted by OAuth scope and the account's grants, privileged writes included. An operator's allow and deny patterns can widen or narrow any profile.
A write a profile refuses comes back as { error: "write_disabled", message,
hint, retriable: false } rather than a silent no-op or a generic failure.
The hint names the exact rule that refused it (a deny pattern, the
privileged-write rule, or the active profile) and what would need to change;
read it rather than retrying the same call. This applies to curated tools.
A generated tool or google_api_call follows a different rule: see section 7.
6. Argument names are exact
The server never rewrites an argument name: if you pass pageSize where a
tool expects maxResults, the call fails rather than silently mapping one to
the other. Always use the exact name shown by {service}_discover or the
service's reference table in reference/ next to this file. When in doubt,
discover the tool again and read its declared arguments rather than guessing
from memory or from another service's convention.
Each reference/<service>.md file tables every curated tool for that
service: its name, its read/create/update/delete class, a one-line summary,
and every argument with its type, whether it's required, and its
description. Generated tools (the long tail, one per Google API
Discovery method) are not tabled individually: they take Google's own
Discovery parameter names directly, and calling {service}_discover lists
each one with its arguments at call time.
7. Escape hatch for anything not covered
If a service has no curated or generated tool for the operation you need
(or discovery/reference/ doesn't cover it):
- Call
google_api_search(query, api, maxResults)with keywords (optionally scoped to oneapialias) to find the Discovery method id, e.g.drive.revisions.list. - Call
google_api_call(api, methodId, pathParams, queryParams, body)with that method id and whichever of path params, query params, or a JSON body it needs.
A read through the escape hatch is never gated, same as everywhere else. A
write (the class is derived from the method's HTTP verb and name) follows a
different rule than named tools: GOOGLE_READ_ONLY or a matching
GOOGLE_WRITE_DENY still refuses outright, and GOOGLE_PROFILE=full-writes
(with GOOGLE_OUTBOUND_ALLOWLIST unset) still allows outright, but every
other case, including GOOGLE_WRITE_ALLOW (allow lists no longer open the
escape hatch at all), asks the connected human to confirm the real call
before it runs. Expect a write through google_api_call or a generated
tool (anything called by its full name directly, not through a curated
tool) to pause for that confirmation unless the deployment runs
full-writes; a client that cannot be asked gets back { error:
"elicitation_unsupported", ... } instead, and a decline or cancel comes
back as { error: "write_declined", ... }; neither is worth retrying
without changing the write-control configuration or using a curated tool
instead. Over HTTP a client on the 2026-07-28 protocol revision gets an
"input required" result carrying the confirmation prompt: show it to the user
and repeat the same call with their answer attached. Otherwise, on the 2025
revision with the operator's opt-in, a write can come back as { error:
"confirmation_required", summary, confirmToken }: show the summary to the
user and, only if they agree, repeat the identical call with confirmToken
added (it works once and expires; an error of "confirmation_invalid" means start over). The escape hatch returns JSON only (binary media is refused with a
pointer to drive_download / drive_export), and a response over about
100k characters may be cut by the client, so narrow a large request. Prefer
a named curated or generated tool when one exists: it is more token-lean
and better typed than building the call by hand.
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.

