Silently verifies canoa.json and Google Sheets access for product data. Copies template sheet or creates new one if needed, then updates config. Auto-called by product skills before read/write.
How this skill is triggered — by the user, by Claude, or both
Slash command
/06-materials-research:master-scheduleThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Called automatically by all product skills before reading or writing.** Can also be run manually to reconnect or reset.
Called automatically by all product skills before reading or writing. Can also be run manually to reconnect or reset.
Template sheet ID: 1mWnExnSWTKJv0vbu1mDnrQFmv_Iz_fNklIeuBYfMB5k
cat ./canoa.json 2>/dev/null
Call mcp__google-sheets__list_sheets with the master_sheet_id from canoa.json.
No config found or sheet inaccessible. Set up automatically without asking the user.
Attempt to copy the template sheet using the Google Drive API (files.copy). If a Drive MCP tool is available, use it:
drive.files.copy
fileId: "1mWnExnSWTKJv0vbu1mDnrQFmv_Iz_fNklIeuBYfMB5k"
title: "Product Library — {today's date}"
If no Drive copy tool is available, fall back to creating a new spreadsheet and writing the header row:
mcp__google-sheets__create_spreadsheet with title "Product Library — {today's date}"Sheet1!A1:AG1 using the CSV header from ../../schema/product-schema.mdNote in canoa.json whether this was a template copy or a fresh sheet ("setup": "copy" or "setup": "fresh").
Look for a tab named Products. If not found (e.g. fresh sheet named Sheet1), use whatever tab exists and record its name in canoa.json.
{
"master_sheet_id": "{new sheet ID}",
"sheet_title": "Product Library — {date}",
"sheet_url": "https://docs.google.com/spreadsheets/d/{id}",
"products_tab": "Products",
"project_name": "",
"setup": "copy",
"created_at": "{ISO timestamp}"
}
✓ Product library created and connected.
docs.google.com/spreadsheets/d/{id}
You may want to rename this sheet and set a project name.
Run /master-schedule to update.
Then return — the calling skill continues.
When invoked directly (/master-schedule), run the same flow but also:
canoa.json exists and the sheet is accessible, show current status:Product library connected.
Project: {project_name or "(unnamed)"}
Sheet: {sheet_title}
URL: docs.google.com/spreadsheets/d/{id}
Tab: {products_tab}
Options:
1. Update project name
2. Connect a different sheet (paste URL)
3. Reset (create a new copy of the template)
canoa.json.If any MCP call fails with "tool not found" or auth error, stop and report:
Google Sheets MCP is not connected or not authenticated.
To connect it, add to ~/.claude/mcp_settings.json:
{
"mcpServers": {
"google-sheets": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-google-sheets"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "<path-to-service-account-json>"
}
}
}
}
Then restart Claude Code and try again.
Need help creating a service account? Ask for instructions.
| Situation | Handling |
|---|---|
canoa.json exists, sheet accessible | Return silently |
canoa.json exists, sheet deleted | Auto-create new copy, update canoa.json |
canoa.json missing | Auto-create new copy, write canoa.json |
| Drive copy tool not available | Fall back to fresh sheet + header row |
| MCP not connected | Stop, show setup instructions |
npx claudepluginhub alpacalabsllc/skills-for-architects --plugin 06-materials-researchAutomates Google Sheets operations like reading/writing data, managing spreadsheets/tabs, formatting cells, filtering rows, and upserting records via Composio's Rube MCP toolkit. Use for programmatic spreadsheet workflows requiring OAuth-connected tools.
Automates Google Sheets via Composio MCP: read/write data, manage tabs, format cells, filter rows, and upsert records. Ideal for spreadsheet-driven workflows.
Provides CLI-based read/write access to Google Sheets via Python scripts with standalone OAuth authentication. Supports get-text/CSV/JSON, range updates, appends, clears, and batch operations.