{"serverId":"mcp-registry/ca.findmyfarmer/farms","tools":[{"name":"compare","fixed":{"name":"compare","description":"Two Farmdex varieties head to head — \"Honeycrisp vs Gala\": documented tasting prose, uses, and (same species) 1–5 trait values on shared axes relative to the species' reference variety. Both variants must clear a completeness bar (description + >= 2 documented sensory/use fields). Machine-only — there is deliberately no compare page family; cite the two variety URLs returned.","inputSchema":{"type":"object","required":["a","b"],"properties":{"a":{"type":"string","description":"first variant id, e.g. \"apple-honeycrisp\" (from search_farmdex / best_for)."},"b":{"type":"string","description":"second variant id, e.g. \"apple-gala\"."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":189,"tokensAfter":189},{"name":"find_near","fixed":{"name":"find_near","description":"Farms AND coordination points (farmers' markets, off-farm pickup points, stockists) within a radius of a point or a named place, ordered by distance, optionally filtered by what is sold (species ids or a good slug), a farming practice, a service category, or an event type. Points carry their schedule and the farms present. Distances are straight-line from each farm's PUBLIC map point, or pass distance=\"road\" for cached driving distance + minutes (cold pairs are filled once per call, capped). Thi","inputSchema":{"type":"object","properties":{"lat":{"type":"number","description":"Latitude of the centre. Pass lat+lng OR place."},"lng":{"type":"number","description":"Longitude of the centre."},"good":{"type":"string","description":"A goods slug from list_goods (e.g. \"grass-fed-beef\") — expands to its species and practice scope."},"page":{"type":"integer","minimum":1,"description":"Page number."},"kinds":{"type":"array","items":{"enum":["market","pickup","retail"],"type":"string"},"description":"Point kinds to include (default all)."},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Results per page, applied to farms and points separately (default 25)."},"place":{"type":"string","description":"A place slug from list_places, e.g. \"calgary\", \"alberta/calgary\" or \"alberta\". Its centroid becomes the centre and its reach the default radius."},"include":{"enum":["both","farms","points"],"type":"string","description":"What to return: farms, points (markets / pickups / stockists), or both (default)."},"species":{"type":"array","items":{"type":"string"},"description":"species ids (from search_farmdex / get_place_catalogue), OR-matched, e.g. [\"cattle-taurus\"]."},"distance":{"enum":["straight","road"],"type":"string","description":"straight (default) = geodesic from the public point. road = driving km + minutes from the shared 90-day cache; a bounded number of cold pairs are routed fresh per call, the rest carry straight-line only until warmed. Maps-hidden farms never carry road figures."},"practices":{"type":"array","items":{"type":"string"},"description":"farming practice ids from list_filters, e.g. [\"rotationalGrazing\"]."},"radius_km":{"type":"number","maximum":300,"minimum":1,"description":"Search radius in km (default: the place's reach, else 50; max 300)."},"event_types":{"type":"array","items":{"type":"string"},"description":"event type slugs from list_filters, e.g. [\"berry-picking\"]."},"service_categories":{"type":"array","items":{"type":"string"},"description":"service category slugs from list_filters, e.g. [\"hay-feed-forage\"]."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":734,"tokensAfter":734},{"name":"get_farm","fixed":{"name":"get_farm","description":"Fetch one farm's full public profile by its URL slug (the last path segment of a findmyfarmer.ca/farms/... URL, also returned by search_farms). Includes the farm story, contact channels the farmer chose to publish, and how to buy from them. Volume-capped: 50 profiles per caller per UTC day — this registry serves reference use and does not offer bulk datasets.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","description":"The farm's URL slug, e.g. \"po-s-broccoli-patch\"."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":155,"tokensAfter":155},{"name":"get_place_catalogue","fixed":{"name":"get_place_catalogue","description":"Everything available near a place — every species that published farms serving the place list, in taxonomy shape (category → subcategory → species) with local farm counts — plus the place's Wikidata / GeoNames ids.","inputSchema":{"type":"object","required":["province"],"properties":{"metro":{"type":"string","description":"Metro slug under that province, e.g. \"calgary\". Omit for the whole province."},"province":{"type":"string","description":"Province slug, e.g. \"alberta\"."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":148,"tokensAfter":148},{"name":"get_species","fixed":{"name":"get_species","description":"One Farmdex species: names, taxonomy, description, its GBIF / Wikidata / ITIS identifiers, and its varieties or breeds. Resolve a food name to a species id first with search_farmdex.","inputSchema":{"type":"object","required":["species"],"properties":{"species":{"type":"string","description":"species id, e.g. \"cattle-taurus\", \"garlic\"."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"list_filters","fixed":{"name":"list_filters","description":"The controlled vocabularies find_near accepts: farming practice ids, service category slugs, event type slugs.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":55,"tokensAfter":55},{"name":"list_goods","fixed":{"name":"list_goods","description":"The goods Find My Farmer publishes reports and price statistics for — the slugs price_stats and find_near accept, each with the species and practices that define it.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":70,"tokensAfter":70},{"name":"list_hubs","fixed":{"name":"list_hubs","description":"List Find My Farmer hubs — the named local-food regions (foodsheds) farms dock into. Useful for narrowing a farm search to a place.","inputSchema":{"type":"object","properties":{"province":{"type":"string","description":"Two-letter province/state code filter, e.g. \"AB\"."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":87,"tokensAfter":87},{"name":"list_places","fixed":{"name":"list_places","description":"The place graph: countries and provinces/states (no args), one country's provinces (country), or one province's metros (province). Each place carries its slug, centroid, reach, and Wikidata / GeoNames identifiers.","inputSchema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2, e.g. \"CA\"."},"province":{"type":"string","description":"Province slug, e.g. \"alberta\" — returns its metros."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":132,"tokensAfter":132},{"name":"price_stats","fixed":{"name":"price_stats","description":"Aggregate price statistics (low / median / mean / high, farm + observation counts, as-of dates) for a good, nationally or in one province, from Find My Farmer's price ledger. Every bucket covers at least 3 farms and names none; a single farm's own prices, each dated and cited, come from get_farm.","inputSchema":{"type":"object","required":["good"],"properties":{"good":{"type":"string","description":"A goods slug from list_goods, e.g. \"grass-fed-beef\", \"raw-honey\"."},"province":{"type":"string","description":"Province slug (\"alberta\"), code (\"AB\") or name. Omit for national."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":175,"tokensAfter":175},{"name":"search_farmdex","fixed":{"name":"search_farmdex","description":"Search the Farmdex — Find My Farmer's agricultural knowledge database of categories, species, and variants (e.g. heritage vegetable varieties, livestock breeds). Useful for resolving what a food product actually is before searching for farms that sell it.","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"e.g. \"brandywine tomato\", \"highland cattle\"."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":127,"tokensAfter":127},{"name":"search_farms","fixed":{"name":"search_farms","description":"Search the Find My Farmer registry of local farms in Canada. Returns farm name, location (city/province), type, and the canonical findmyfarmer.ca page URL. Search matches farm names, stories, and what each farm sells (goods, packages, events).","inputSchema":{"type":"object","properties":{"page":{"type":"integer","minimum":1,"description":"Page number (10 results per page)."},"query":{"type":"string","description":"Free-text search, e.g. \"beef\", \"sourdough\", \"farm stays\". Omit to list farms."},"province":{"type":"string","description":"Two-letter province/state code filter, e.g. \"AB\", \"BC\", \"MT\"."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":183,"tokensAfter":183}],"toolsChanged":12,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}