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.
npx claudepluginhub alpacalabsllc/skills-for-architects --plugin 06-materials-researchThis skill is limited to using the following tools:
**Called automatically by all product skills before reading or writing.** Can also be run manually to reconnect or reset.
Provides step-by-step guidance, code, and configurations for Google Sheets automation tasks in business workflows. Activates on phrases like 'google sheets automation'.
Provides Python CLI scripts for full read/write Google Sheets access with standalone OAuth. Supports get-text/CSV/JSON, ranges, append/update/clear, metadata, search. No server needed.
Automates Google Sheets via Composio tools over Rube MCP: read/write data, manage tabs/sheets, format cells, filter rows, append/upsert records.
Share bugs, ideas, or general feedback.
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 |