MCP server giving agents structured plant data for garden planning: species care profiles, mechanism-derived companion checks, and frost-date planting windows.
plant-intel-mcp has well-structured tool definitions with complete input schemas and descriptions for all 5 tools. Naming follows verb_noun convention (search_plants, plant_details, etc.). Descriptions are adequate (50-150 chars) and explain purpose clearly. However, output schemas are not documented in the source code, LLMs cannot see what fields to expect from responses. Parameter descriptions are present but lack detail on constraints, ranges, and valid values. No error handling guidance visible. Tool composition is sound (each does one thing), but missing pagination details for search_plants despite accepting a 'page' parameter.
Determine if two plants are good companions based on mechanisms and documented listings
Identify plants from image URLs using Perenual's identification endpoint
Get detailed care information for a specific plant
Calculate planting windows based on frost dates and plant hardiness
Search for plants by query with optional filters
Output schemas not documented. LLMs cannot see what fields search_plants, plant_details, planting_window, companion_check, and identify_plant return. This forces agents to guess structure and wastes tokens on trial-and-error parsing.
Parameter descriptions lack constraint details. 'cycle' accepts 'annual, biennial, or perennial' but is not declared as an enum. 'watering' and 'sunlight' similarly lack enum constraints. Free-form strings invite hallucinated values.
Pagination not fully specified. search_plants accepts 'page' parameter but no 'limit' or 'per_page' parameter visible. No documentation of result count, total pages, or next_cursor. Large result sets could blow context window.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
No error handling guidance in tool descriptions. If Perenual API key is missing, identify_plant is conditionally unregistered (good), but other tools don't document what happens on auth failure or API errors. LLMs need recovery hints.
planting_window location parameter uses nested object with conditional properties (latitude/longitude OR hardinessZone). Undocumented mutual exclusivity. LLMs may pass both or neither, causing silent failures.