{"ok":true,"site":{"host":"verdant.joebgallegos.workers.dev","url":"https://verdant.joebgallegos.workers.dev/","type":"live","desc":"verdant — a relaxing 3D garden you tend together with an AI agent, via WebMCP.","tools":[{"name":"get_garden_state","kind":"answer","impl":"imperative","description":"Get the full live state of the garden: every plot, every plant with its id, type, growth stage, health, water level, and whether it is ready to harvest, plus the harvest basket, robot crew, visible plan preview, and active or latest agent job. Call this first to orient or resynchronize yourself after the person interacts with the app.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_plant_types","kind":"answer","impl":"imperative","description":"List the seed catalog: every plant type the garden supports, with its kind (vegetable/flower/fruit), how long it takes to grow, how thirsty it is, and its harvest yield.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_care_recommendations","kind":"answer","impl":"imperative","description":"Get a prioritized list of what needs attention in the garden right now: thirsty plants to water, plants ready to harvest, withered plants to clear, and empty plots to sow. Use this to plan your next actions.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"preview_garden_plan","kind":"act","impl":"imperative","description":"Stage a proposed planting layout as glowing ghost plants in the live garden without planting anything. Use this for collaborative design: explain the plan, let the person review it, and only call run_garden_plan after they approve. Calling this again replaces the previous preview.","inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"A short human-friendly name for the layout."},"rationale":{"type":"string","minLength":1,"maxLength":280,"description":"A concise explanation of the design choices."},"assignments":{"type":"array","minItems":1,"maxItems":16,"description":"The empty plots and plant types to show in the preview.","items":{"type":"object","properties":{"plotIndex":{"type":"integer","minimum":0,"maximum":15},"plantType":{"type":"string","enum":["lettuce","carrot","tomato","lavender","sunflower","pumpkin"]}},"required":["plotIndex","plantType"],"additionalProperties":false}},"aftercare":{"type":"string","enum":["none","one_accelerated_day"],"description":"Set to \"one_accelerated_day\" when the person asks you to keep the approved planting healthy afterward. The browser will own that 60-second demo-day care session, so it continues after your turn ends."},"helpers":{"type":"integer","minimum":0,"maximum":3,"description":"How many helpers should work this plan. Omit to keep the standing crew. A number only adds helpers, it never recalls them."}},"required":["name","rationale","assignments"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"run_garden_plan","kind":"act","impl":"imperative","description":"Execute a planting preview after the person approves it, or reconcile with the existing job if they already approved it in the app. This is idempotent for a planId and never starts the same plan twice. Background aftercare continues even after your turn ends. Poll get_agent_job for progress.","inputSchema":{"type":"object","properties":{"planId":{"type":"string","minLength":1,"description":"The exact plan id returned by preview_garden_plan."}},"required":["planId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_agent_job","kind":"answer","impl":"imperative","description":"Get live progress for an asynchronous robot job started by a bulk action or approved garden plan. Omit jobId to inspect the active or most recent job.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"jobId":{"type":"string","minLength":1,"description":"Job id returned by a bulk action or run_garden_plan. Omit for the latest job."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_crew","kind":"act","impl":"imperative","description":"Set how many helper robots should be out with the lead. Helpers pop out of the lead and merge back into it. The count is declarative: set_crew({ helpers: 2 }) twice still yields two helpers. helpers: 0 recalls every helper. A helper that is mid-task finishes it first; converged: false means the crew is still settling.","inputSchema":{"type":"object","properties":{"helpers":{"type":"integer","minimum":0,"maximum":3,"description":"Helpers to have standing besides the lead. 0 recalls everyone."}},"required":["helpers"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"plant_seed","kind":"act","impl":"imperative","description":"Plant a seed in a garden plot. If plotIndex is omitted, the first empty plot is used. New plants start healthy with moderate water.","inputSchema":{"type":"object","properties":{"plantType":{"type":"string","enum":["lettuce","carrot","tomato","lavender","sunflower","pumpkin"],"description":"Which seed to plant. See list_plant_types."},"plotIndex":{"type":"integer","minimum":0,"maximum":15,"description":"Plot number 0-15, row-major from the near-left corner. Must be empty."}},"required":["plantType"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"water_plant","kind":"act","impl":"imperative","description":"Water one plant by id. Water decays over time; plants below ~15% water lose health and can wither. Avoid watering plants that are already near 100% — overwatering slowly harms them.","inputSchema":{"type":"object","properties":{"plantId":{"type":"string","minLength":1,"description":"Unique id of the plant, e.g. \"plant-m4x8q2-a9f1\". See get_garden_state."}},"required":["plantId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"water_all_thirsty","kind":"act","impl":"imperative","description":"Water every plant whose water level is below 35%. Efficient routine care in one call.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"harvest_plant","kind":"act","impl":"imperative","description":"Harvest one plant by id. Only plants with readyToHarvest = true can be harvested; harvesting removes the plant, frees its plot, and adds produce to the basket.","inputSchema":{"type":"object","properties":{"plantId":{"type":"string","minLength":1,"description":"Unique id of the plant, e.g. \"plant-m4x8q2-a9f1\". See get_garden_state."}},"required":["plantId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"harvest_all_ready","kind":"act","impl":"imperative","description":"Harvest every plant that is currently ready. Frees those plots for replanting.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_plant","kind":"act","impl":"imperative","description":"Remove a withered plant by id to free its plot. Only withered plants can be removed — living plants are never destroyed by this tool.","inputSchema":{"type":"object","properties":{"plantId":{"type":"string","minLength":1,"description":"Unique id of the plant, e.g. \"plant-m4x8q2-a9f1\". See get_garden_state."}},"required":["plantId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","apiSurface":"spec","toolCount":13}}