Find My Farmer
Find Canadian farms that sell direct — what they grow and raise, where, when, and at what price.
Should I use this
Quality & Safety
Findings (1)
- LOWin compare
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"farms": {
"url": "https://findmyfarmer.ca/mcp"
}
}
}Remote endpoints
https://findmyfarmer.ca/mcpstreamable-httpWhat it can do
Tool inventory
Tools (15)
🟢search_farms(query, province, page)
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).
Input Schema
{
"type": "object",
"properties": {
"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\"."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number (10 results per page)."
}
}
}🟢get_farm(slug)
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.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "The farm's URL slug, e.g. \"po-s-broccoli-patch\"."
}
},
"required": [
"slug"
]
}🟢search_farmdex(query)
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.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "e.g. \"brandywine tomato\", \"highland cattle\"."
}
},
"required": [
"query"
]
}🟢list_hubs(province)
List Find My Farmer hubs — the named local-food regions (foodsheds) farms dock into. Useful for narrowing a farm search to a place.
Input Schema
{
"type": "object",
"properties": {
"province": {
"type": "string",
"description": "Two-letter province/state code filter, e.g. \"AB\"."
}
}
}🟢find_near(lat, lng, place, radius_km, species, ...)
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). This is the "where can I get X near here — and where on Saturday" primitive.
Input Schema
{
"type": "object",
"properties": {
"lat": {
"type": "number",
"description": "Latitude of the centre. Pass lat+lng OR place."
},
"lng": {
"type": "number",
"description": "Longitude of the centre."
},
"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."
},
"radius_km": {
"type": "number",
"minimum": 1,
"maximum": 300,
"description": "Search radius in km (default: the place's reach, else 50; max 300)."
},
"species": {
"type": "array",
"items": {
"type": "string"
},
"description": "species ids (from search_farmdex / get_place_catalogue), OR-matched, e.g. [\"cattle-taurus\"]."
},
"good": {
"type": "string",
"description": "A goods slug from list_goods (e.g. \"grass-fed-beef\") — expands to its species and practice scope."
},
"practices": {
"type": "array",
"items": {
"type": "string"
},
"description": "farming practice ids from list_filters, e.g. [\"rotationalGrazing\"]."
},
"service_categories": {
"type": "array",
"items": {
"type": "string"
},
"description": "service category slugs from list_filters, e.g. [\"hay-feed-forage\"]."
},
"event_types": {
"type": "array",
"items": {
"type": "string"
},
"description": "event type slugs from list_filters, e.g. [\"berry-picking\"]."
},
"distance": {
"type": "string",
"enum": [
"straight",
"road"
],
"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."
},
"include": {
"type": "string",
"enum": [
"both",
"farms",
"points"
],
"description": "What to return: farms, points (markets / pickups / stockists), or both (default)."
},
"kinds": {
"type": "array",
"items": {
"type": "string",
"enum": [
"market",
"pickup",
"retail"
]
},
"description": "Point kinds to include (default all)."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Results per page, applied to farms and points separately (default 25)."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number."
}
}
}🟢price_stats(good, province)
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 no price is attributed to a farm — this is the public, unattributable side of the FARM-VOICE price rule.
Input Schema
{
"type": "object",
"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."
}
},
"required": [
"good"
]
}🟢whats_in_season(province, month)
Species in their harvest window in a Canadian province for a given month (default: this month), with how many local published farms list each. Window-based (is the month inside start..end), not peak-based.
Input Schema
{
"type": "object",
"properties": {
"province": {
"type": "string",
"description": "Province slug (\"ontario\"), code (\"ON\") or name."
},
"month": {
"type": "integer",
"minimum": 1,
"maximum": 12,
"description": "Month number 1–12. Default: current month (UTC)."
}
},
"required": [
"province"
]
}🟢get_place_catalogue(province, metro)
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.
Input Schema
{
"type": "object",
"properties": {
"province": {
"type": "string",
"description": "Province slug, e.g. \"alberta\"."
},
"metro": {
"type": "string",
"description": "Metro slug under that province, e.g. \"calgary\". Omit for the whole province."
}
},
"required": [
"province"
]
}🟢list_places(country, province)
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.
Input Schema
{
"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."
}
}
}🟢get_species(species)
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.
Input Schema
{
"type": "object",
"properties": {
"species": {
"type": "string",
"description": "species id, e.g. \"cattle-taurus\", \"garlic\"."
}
},
"required": [
"species"
]
}🟢define_term(term)
Find My Farmer's definition of a farming practice (rotational grazing, grass-finished, no-till…): the meaning, the nuance, the questions to ask a farmer, FAQs, and how many farms claim it. Returns the term's stable IRI.
Input Schema
{
"type": "object",
"properties": {
"term": {
"type": "string",
"description": "Practice slug (\"rotational-grazing\") or id (\"rotationalGrazing\"). An unknown term returns the full list."
}
},
"required": [
"term"
]
}🟢list_goods
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.
Input Schema
{
"type": "object",
"properties": {}
}🟢list_filters
The controlled vocabularies find_near accepts: farming practice ids, service category slugs, event type slugs.
Input Schema
{
"type": "object",
"properties": {}
}⚪best_for(species, use, limit)
The best varieties of a species for a use — "best apple varieties for baking" — ranked from the Farmdex's documented tasting notes and trait spectra (1–5, relative to the species' reference variety). Pass species + use for the ranked answer; species alone lists the uses it can answer; use alone lists the species with an answer. A guide exists only once at least 3 documented varieties carry the use.
Input Schema
{
"type": "object",
"properties": {
"species": {
"type": "string",
"description": "species id from search_farmdex, e.g. \"apple\", \"tomato\"."
},
"use": {
"type": "string",
"description": "a best-uses token, e.g. \"baking\", \"canning\", \"fresh eating\", \"juicing\"."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Max varieties returned (default 25); the url carries the full guide."
}
}
}🔴compare(a, b)
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.
Input Schema
{
"type": "object",
"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\"."
}
},
"required": [
"a",
"b"
]
}Community
Evidence