Answer gardening questions using GardenLog MCP: single-plant timing, cross-plant seeding window discovery, full cycle seed planning, crop rotation advice, and garden bed history.
This skill enables answering gardening questions by calling GardenLog MCP tools and analyzing historical data with quality signals.
Use these routing rules before choosing tools:
Critical routing rule:
search_plant_harvest_summaries firstget_worklog_historyget_plant_harvest_cycles unless you already narrowed to a small plant set and need deeper follow-up analysisget_harvest_cycle_plants_summary unless the user explicitly wants the currently planned cycle rather than historical timingIdentify which workflow to use based on the user's question:
| User Question Type | Use This Workflow |
|---|---|
| "When should I seed [plant]?" | Single Plant Seeding Analysis |
| "When should I seed everything?" | Full Cycle Seed Plan |
| "What can I seed between now and [date]?" | Historical Seeding Window Search |
| "What should I start before the end of the month?" | Historical Seeding Window Search |
| "Which plants should be seeded by [date]?" | Historical Seeding Window Search |
| "Can I plant [plant] in this bed?" | Crop Rotation Check |
Purpose: Recommend optimal seeding date for a specific plant by analyzing baseline timing, planned dates, historical actuals, and outcome quality.
search_plants → Get plantId from plant nameget_current_harvest_cycle → Get active harvestCycleIdget_plant_details → Get baseline grow instructions (e.g., "6 weeks before warm soil")get_plant_schedule → Get current cycle's planned schedule for the specific plant
plantGrowthInstructionName to understand which season/methodget_harvest_cycle_plants_summary(includeVarieties=true, includeBeds=true) if you need bed infoget_plant_harvest_cycles → Get historical cycle data (notes with quality signals, dates, germination rates) for the plantget_worklog_history → Get historical actual seeding dates (use reason: 'SowIndoors' or 'SowOutside')From the notes field in get_plant_harvest_cycles results, classify each historical season:
✅ Positive Signals (prioritize these dates):
❌ Negative Signals (avoid these dates):
⚠️ Neutral:
**Planned Date:** [Date from plantCalendar]
**Historical Actual Dates:**
- [Year]: [Date] ([Days difference from planned])
- [Year]: [Date] ([Days difference from planned])
**Outcome Quality Analysis:**
- [Year] ([Date]): [Outcome summary with ✅/❌/⚠️]
**Recommended Date:** [Calculated recommendation]
**Confidence:** [High/Medium/Low]
**Rationale:** [1-2 sentences: baseline timing, historical pattern, quality signals, warnings]
Purpose: Analyze all plants in the current cycle, compare planned vs. recommended dates, flag discrepancies.
get_current_harvest_cycle → Get active harvestCycleIdget_harvest_cycle_plants_summary → Enumerate all plants in cycle (lightweight list with optional varieties/beds)
includeVarieties=true if you need variety-level recommendationsincludeBeds=true AND includeVarieties=true to see bed assignments (beds are associated with varieties)includeBeds=false if you only need plant/variety listget_plant_schedule → Get planned seeding schedule for current cycle (use plantName parameter)get_plant_harvest_cycles → Get historical cycle data with quality signals (2-3 years)get_worklog_history → Get historical actual seeding dates (2-3 years)delta = recommended - planned|delta| ≤ 2 days ✅|delta| > 2 days ⚠️
## Seed Plan Analysis for [Cycle Name]
**Summary:**
- Total plants: [N]
- Matches (±2 days): [N]
- Need adjustment: [N]
| Plant | Planned | Recommended | Difference | Status | Rationale |
|-------|---------|-------------|------------|--------|-----------|
| Tomatoes | Mar 15 | Mar 20 | +5 days | Different | 3yrs @ Mar 18-22, 92% germ |
| Onions | Feb 27 | Feb 25 | -2 days | Match | 3yrs consistent, 100% germ |
**Plants Needing Attention:**
[Detailed recommendations for plants with |delta| > 2 days]
Purpose: Identify all plants that are historically seeded within a target calendar window, using the full historical summary row per plant, grow instruction, and harvest cycle.
search_plant_harvest_summaries is not an earliest-date-only tool. Use earliestSeedingDate to decide whether a row falls inside the target seeding window, but also use earliestTransplantDate, earliestHarvestDate, latestHarvestDate, and feedbackNotes to explain timing, progression, and quality signals.
Use this workflow for questions like:
This is the default workflow for broad seeding-window discovery across many plants.
search_plant_harvest_summaries → Retrieve grouped historical summaries across all harvest cycles
plantName if the user asks about a single plantharvestCycleName or harvestCycleId only if the user explicitly wants one cycleearliestSeedingDate, earliestTransplantDate, earliestHarvestDate, latestHarvestDate, and feedbackNotesearliestSeedingDate to determine whether the row falls in the user's target seeding windowplantGrowthInstructionName because different grow instructions for the same plant may have different seeding windowsearliestTransplantDate when the user is planning starts that move outdoors laterearliestHarvestDate and latestHarvestDate when the user asks about crop duration or harvest spanfeedbackNotes when they contain useful context about success, failure, timing, or conditionsearliestSeedingDate as the historical baseline for "earliest known start"earliestSeedingDate is nullplantName + plantGrowthInstructionName combination separately
## Plants Historically Seeded Between [Start] and [End]
| Plant | Grow Instruction | Earliest Historical Seeding |
|-------|------------------|-----------------------------|
| Peppers | Start Indoors | Mar 15 |
| Tomatoes | Start Indoors | Mar 27 |
**Notes:**
- Dates are based on the earliest historical seeding date found in GardenLog.
- Different grow instructions for the same plant are listed separately when timing differs.
- When helpful, include transplant timing, harvest timing, and relevant feedback notes from the same summary rows.
Purpose: Validate that a plant isn't being placed in a bed where the same plant/family was grown within 3 years.
search_plants → Get plantId, infer plant family from nameget_current_harvest_cycle → Get active harvestCycleId and gardenIdget_plant_schedule → Get plant's current schedule to find assigned gardenBedId from bed placements
get_garden_bed_history → Get 3-year history for the bed (use startDate = 3 years ago)## Crop Rotation Analysis: [Plant] in [Bed Name]
**Plant:** [Name] ([Family])
**Bed:** [Bed Name]
**Current Cycle:** [Year]
**Bed History (3 years):**
- [Plant] ([Family], [Year]) ← [SAME PLANT/SAME FAMILY/Different]
- [Plant] ([Family], [Year])
**Risk:** [Description if violation detected]
**Problems:**
- [Disease/pest risks]
- [Nutrient depletion concerns]
**Recommendations:**
1. [Specific actions: amend soil, monitor, consider different bed]
| Tool | Purpose | Key Parameters | Returns |
|---|---|---|---|
search_plants | Find plant by name/description | searchText (required) | Plant matches with plantId, plantName, description |
get_plant_details | Get baseline grow instructions | plantId (required) | Timing guidelines, spacing, germination, botanical info |
get_current_harvest_cycle | Get active planning cycle | None | Current harvestCycleId, cycle name, start/end dates, garden info |
| Tool | Purpose | Key Parameters | Returns |
|---|---|---|---|
get_harvest_cycle_plants_summary | List all plants in cycle | harvestCycleId (required), includeVarieties (bool), includeBeds (bool) | Lightweight plant list (~5-10KB). Note: Bed data requires BOTH includeVarieties=true AND includeBeds=true (beds are variety-specific). |
get_plant_schedule | Get ALL schedules for ONE plant | plantName OR plantHarvestCycleId, harvestCycleId (required) | ALL planned schedules (one per grow instruction). For plants with multiple schedules (spring/fall), all returned so AI can pick relevant one by current date. Does not include bed assignments. |
| Tool | Purpose | Key Parameters | Returns |
|---|---|---|---|
search_plant_harvest_summaries | Primary tool for cross-plant historical timing and date-window questions | plantId, plantName, harvestCycleId, harvestCycleName (all optional) | One row per plant + grow instruction + harvest cycle with earliestSeedingDate, earliestTransplantDate, earliestHarvestDate, latestHarvestDate, and distinct non-empty feedbackNotes |
get_plant_harvest_cycles | Historical cycles for ONE plant | plantName (required), startDate (optional), endDate (optional) | Past cycles with quality notes, germination, simplified bed info |
get_worklog_history | Get actual completed tasks | reason (e.g., "SowIndoors"), startDate, endDate | Historical actual dates |
Selection guidance:
search_plant_harvest_summaries first for any broad historical question spanning multiple plants or a target date windowget_plant_harvest_cycles only for deeper single-plant investigationget_worklog_history only when you specifically need historical task/event records rather than summary rows| Tool | Purpose | Key Parameters | Returns |
|---|---|---|---|
get_garden_details | Garden and bed info | gardenId (required) | Garden metadata, bed list (NO coordinates/layout) |
get_garden_bed_history | Bed planting history | gardenBedId (required), startDate (optional) | What was grown in bed (NO variety/layout details) |
get_plant_schedule returns ALL schedules (one per grow instruction)plantGrowthInstructionName (e.g., "Direct seed in early spring" vs "Direct seed in late summer")GardenLog MCP requires Auth0 JWT authentication (automatically configured). All tools return user-scoped data.