piknik
One-click install for Cursor, VS Code, Claude, and 20+ other MCP clients, powered by API Commons MCP Install — visit install.apicommons.org for more information.
Endpoint
Hosted endpoint · transport http
Connect
This is a remote MCP server — point an MCP client at the endpoint URL. Clients with native remote support (Claude, Cursor, VS Code, …):
For stdio-only clients (older Claude Desktop, etc.), bridge with mcp-remote:
If the server requires authentication, add the provider's token/header (e.g. an X-API-Key) per its docs. A quick reachability check:
Tools
geocode_address— Convert an address string to latitude and longitude coordinates. Uses hybrid geocoding (Google Maps API with Nominatim fallback) for accurate results.calculate_local_food_score— Calculate the Local Food Score for a given address or coordinates. Returns a score from 0-100 with three factors: how local, easy to get, and covers a diet. Only counts food grown within 100 km that is reachable through channels in the search radius.geocode_place— 🔐 ADMIN ONLY: Detect and set GPS coordinates for a place by geocoding its existing address. Useful for fixing places missing coordinates or correcting inaccurate ones.link_google_place— 🔐 ADMIN ONLY: Search Google Places for a Piknik place and optionally store its googlePlaceId after human review. Returns ranked candidates with 0-100 match scores and score breakdowns (name, address, status, type, proximity). Default action is search. Linking requires an explicit google_place_id unless auto_select is true.search_events— Search for local food events, farmers markets, workshops, and community gatherings. Respects EVENT_SYSTEM feature flag. Can search by address string or coordinates.get_analytics_metrics— Get analytics and business intelligence metrics for the food system. Admin access required.search_games— Search for active gamification challenges and geographic games. Respects GAMIFICATION_SYSTEM feature flag.find_places— Find existing places based on location, preferences, and context. Combines multiple recommendation engines for comprehensive results.suggest_place— Analyze location coverage gaps and create a new place suggestion. ONLY use this when there is verifiable evidence (such as a website, business registry, or direct confirmation) of the physical business existence. Do NOT make assumptions or suggest unverified places. Returns participant_id in the response when authenticated with business_nameget_professional_profile— Get professional networking profile information. Respects PROFESSIONAL_NETWORKING feature flag.search_listings— Search marketplace listings for items to buy, sell, or services offered. Find products and services available in the local food system.create_listing— 🔐 AUTHENTICATED: Create a new marketplace listing (wanted to buy, wanted to sell, or service offering). Requires OAuth authentication with marketplace:write scope.create_event— 🔐 AUTHENTICATED: Create a new event (farmers market, workshop, community gathering, etc.). Requires OAuth authentication with events:write scope. Respects EVENT_SYSTEM feature flag. Events can be created with or without a participant (place) association.update_event— 🔐 AUTHENTICATED: Update an existing event. Requires OAuth authentication with events:write scope. Can update event details, times, location, or status.get_my_places— 🔐 AUTHENTICATED: Get list of places (farms, restaurants, markets) that the authenticated user owns or has access to manage. Useful for finding participant_id to use with update_place, create_listing, or create_event.update_place— 🔐 AUTHENTICATED: Update a place (farm, restaurant, market) that you own or manage. Allows updating profile information like name, description, address, contact details, operating hours, and more. Admin users can also update status.claim_delivery_task— 🔐 AUTHENTICATED: Claim a delivery coordination task. Caller must have a participant with canDeliver: true.update_delivery_status— 🔐 AUTHENTICATED: Update delivery task status with optional GPS. Caller must be the user who claimed the task.search_offerings— Search for products and offerings across all places (farms, restaurants, processors). Find what products are available, where, and at what price.list_all_places— List all places (farms, markets, restaurants, community gardens) within a radius of coordinates. Get full inventory of participants in an area.list_service_locations— List all service locations (pickup points, delivery hubs) for a specific place. Service locations can be used for CSA pickups, farmers market stalls, delivery points, etc.create_service_location— 🔐 AUTHENTICATED: Create a new service location (CSA pickup point, farmers market stall, delivery hub) for your place. Address will be auto-geocoded.update_service_location— 🔐 AUTHENTICATED: Update an existing service location. Only provide fields to change.list_products— List products/offerings for a place, including kind, paused state, and pack sell prices (ways they sell: kg, eighth, etc.). Use create_pack_price to add sell packs on STAPLE offerings.search_products— Search the shared product catalog by name or alias. Returns product_id values to pass to create_product. No authentication required.create_product— 🔐 AUTHENTICATED: Create a place offering. kind=STAPLE (default): catalog food via product_id. kind=COMPOSED: named package/dish with optional ingredients[{source_id,product_id}]. Do NOT use price/price_unit for how the farm sells packs — after creating a STAPLE, call create_pack_price (e.g. 10 kg or 1 eighth). Use source_url for the shop/product page link — never put URLs in description. Use is_available=false to pause. Only with verifiable evidence. Use list_products / search_products first.update_product— 🔐 AUTHENTICATED: Update an offering. Use is_available to pause/resume. Use source_url for the shop/product page link — never put URLs in description. For STAPLE sell prices (10 kg, ⅛ animal, etc.) use create_pack_price / update_pack_price / delete_pack_price — not price/price_unit.fetch_ontario_farms— Fetch Ontario farm/agri-business records from government open data for populating Piknik. Returns OMAFRA-licensed meat and dairy plants (individual business records with addresses) plus census mid-tier farm counts by county ($100k–$999k receipts, 2021). Does NOT read from existing Piknik data.fetch_ontario_grocery_retailers— Fetch active Ontario grocery and convenience retailers from AGCO open data. Classifies each by consumer capacity tier (minimal gas/convenience vs community grocer vs regional chain) using licence type and premises type.get_regional_food_improvements— Analyze a region for food score gaps and ranked improvement opportunities (connect farms to shops, document inventory, onboard producers, infrastructure). Returns the same JSON as GET /api/regional-score/analyze.suggest_connection— 🔐 AUTHENTICATED: Propose a supplier→buyer sourcing link for admin review (does NOT change scores until approved). ONLY use this when there is verifiable evidence (such as a website link, official registry, or direct confirmation) of the commercial relationship. Do NOT make assumptions or suggest unverified connections. Supplier: FARM, PROCESSOR, COMMUNITY_GARDEN, MERCHANT (shop hop, discovery only), or MARKET with marketKind exchange. Buyer: RESTAURANT, MERCHANT, MARKET, FARM, or FOOD_BANK. Non-admins use this; admins use apply_connection for immediate links.apply_connection— 🔐 ADMIN ONLY: Create or update a live supplier→buyer sourcing link. ONLY use this when there is verifiable evidence (such as a website link, official registry, or direct confirmation) of the commercial relationship. Do NOT make assumptions or create unverified connections. Supplier: FARM, PROCESSOR, COMMUNITY_GARDEN, MERCHANT (shop hop, discovery only), or MARKET with marketKind exchange. Buyer: RESTAURANT, MERCHANT, MARKET, FARM, FOOD_BANK, or PROCESSOR. Farm and processor supplier links affect Local Food Score (processor chains include upstream farms and exchange hubs). Shop hops do not.remove_connection— 🔐 ADMIN ONLY: Remove a live supplier→buyer sourcing link.suggest_product— 🔐 AUTHENTICATED: Suggest a new product/offering for an existing place. ONLY use this when there is verifiable evidence (such as a website menu, farm guide, or direct confirmation) that the place actually offers this product. Do NOT make assumptions or suggest unverified products. Creates a pending suggestion for admin review — does not require place ownership.notify_participants— 🔐 ADMIN ONLY: Send welcome/onboarding emails to newly added participants (farms, gardens, etc.). Use this to notify businesses that they're now on Piknik and can claim their spot.list_neighborhoods— 🔐 ADMIN ONLY: List Waterloo Region neighborhoods (optional municipality filter). Each row includes id, label, kind, municipality, GPS, benchmark price (CAD), DOM, and previousPrice when set. Missing housing fields show as n/a. Structured result.neighborhoods has the full objects.add_neighborhood— 🔐 ADMIN ONLY: Add a neighborhood to the catalog. Response includes benchmark price, DOM, and previousPrice when provided.update_neighborhood— 🔐 ADMIN ONLY: Update a neighborhood by ID. Response always includes benchmark price, DOM, and previousPrice (n/a if unset).delete_neighborhood— 🔐 ADMIN ONLY: Delete a neighborhood from the catalog by its ID.rebuild_neighborhood_score_samples— 🔐 ADMIN ONLY: Rebuild the score samples for specified radii (e.g. 1, 3, 5, 8, or 10 km) in the Waterloo Region to update the Local Food Score map coloring.discover_neighborhood_candidates— 🔐 ADMIN ONLY: Discover food-related OSM locations (restaurants, cafes, specialty food shops) in a neighborhood, filtering out ignored franchise names and already imported places. Returns clean candidates for sourcing verification.apply_association— 🔐 ADMIN ONLY: Link a participant (farm, restaurant, market) to an association (like EFAO or WRCGN).remove_association— 🔐 ADMIN ONLY: Remove a link between a participant and an association.create_pack_price— 🔐 AUTHENTICATED (place owner or admin): Add how a STAPLE offering is sold — total price for a pack size. Examples: offering_id + pack_qty=10 + pack_unit=kg; or pack_qty=1 + pack_unit=eighth (beef share). Optional source_url = online shop page for that pack. Prefer offering_id. Use list_pack_prices to inspect; update_pack_price / delete_pack_price to fix mistakes.list_pack_prices— 🔐 AUTHENTICATED: List pack/sell-price quotes (includes source_url shop link when set). Filter by place, offering_id, category, quote_id, or fresh_only. Pass include_paused=true to see paused packs (farmer view).update_pack_price— 🔐 AUTHENTICATED (place owner or admin): Update a pack price quote. Use is_active=false to pause; true to resume. Optional source_url = online shop page for that pack (pass empty string to clear). Use list_pack_prices for quote_id; delete_pack_price to remove permanently.delete_pack_price— 🔐 AUTHENTICATED (place owner or admin): Permanently delete a pack price when you no longer sell that pack (or it was added by mistake). Prefer is_active=false (pause) if you may resume later.search_recipes— Search public published recipes (or your own with mine=true). Filter by cuisine slug, region, diet, meal, or free-text query.get_recipe— Get a recipe by ID (UUID/cuid). Drafts require ownership or admin.list_cuisines— List cuisine tags for recipes (id, slug, label). Use IDs with create_recipe / update_recipe.create_recipe— 🔐 AUTHENTICATED: Create a crowdsourced recipe. Defaults to DRAFT. Link ingredients to catalog via product_id when known.update_recipe— 🔐 AUTHENTICATED: Update a recipe you own (or any recipe if admin). Providing ingredients or cuisine_ids replaces those lists entirely.delete_recipe— 🔐 AUTHENTICATED: Permanently delete a recipe you own (or any if admin).search_jobs— Search job and volunteer postings. Public. Filter by place, text, employment type, or location. Use before create_job to avoid duplicates.create_job— 🔐 AUTHENTICATED: Create a job or volunteer posting for a place. Admins may post for any place; owners/admins of a place may post for that place. ONLY when a website or official posting names this opening — copy published words. Do not invent jobs.update_job— 🔐 AUTHENTICATED: Update or expire a job posting. Admins may edit any job; place owners/admins may edit their own. Set status CANCELLED or FILLED when the opening closes.list_associations— List associations (id, slug, name). Authenticated. Use before create_place_tour or apply_association.create_association— 🔐 ADMIN ONLY: Create an association. Use when the org does not already exist. Do not invent names.list_place_tours— List drafts and published walking tours for an association you can manage. Returns tours and member places for stops.create_place_tour— Create a draft walking tour for an association you can manage. Title must not copy the association name. Stops via set_place_tour_stops. Narration is on each place (update_place tourNarration).update_place_tour— Update a tour you can manage. Set status PUBLISHED when stops are ready. Public pages still need the Place Tours feature flag.set_place_tour_stops— Replace tour stops in order. participant_ids are Piknik place ids. Does not require membership, but dashboard stop picker lists members.
About MCP
The Model Context Protocol (MCP) is an open protocol Anthropic introduced for connecting LLM-based agents to external tools and data sources. Providers publish MCP servers that expose their API surface as structured, discoverable tools — an MCP-compatible client (Claude Desktop, Cursor, Cline, Continue, etc.) can connect to the server and call its tools without any per-provider integration code.
Browse every MCP server on the APIs.io network or compare with the broader Agent Skill surfaces of the same providers.
Work with this as data
Every MCP server here is available over the APIs.io API and to AI agents over MCP.