io. github. slookisen/ lokal-mcp
by slookisen · remote · local (npm) · no sign-in to list tools · v0.5.0 · published by GitHub user slookisen
Norwegian local-food MCP: 1,500+ farms, shops, markets + umbrellas (Bondens marked, Hanen, REKO).
15 tools: 2 can delete or cancel things, 1 do something that can't be undone, 1 change things and 11 only read.
Scanned Oct 21, 2026
- Deletes or cancels2Claude Code: deny: see these tools
- Can't be undone1Claude Code: ask: see these tools
- Changes things1Claude Code: ask: see these tools
- Only reads11Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http lokal https://rettfrabonden.com/mcpTools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
15 tools
Deletes or cancels 2Claude Code: deny
lokal_cart_add_itemAdd a product to the cart or update its quantity (re-adding the same product_id updates qty).No findings
Why it is in this group
- The name "lokal_cart_add_item" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Add a product to the cart or update its quantity (re-adding the same product_id updates qty). Product must be in_stock and from a verified non-umbrella producer (use lokal_search / catalog feed to find eligible products and their IDs). Requires cart_id and buyer_ref from lokal_cart_create.
Annotations the server declares
- title: Add cart item
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
lokal_cart_submitSubmit the cart.No findings
Why it is in this group
- The name "lokal_cart_submit" says "submit": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Submit the cart. Re-checks availability of every item at submit time; if any item is no longer in_stock, submit is rejected with a clear per-item message. No payment is charged. A real pickup order (one per producer) is created ONLY for producers who are owner-verified AND have opted in to receive orders through the platform (can_order=true in lokal_find_offers); they get the order by e-mail and can confirm/decline it. Every other producer in the cart is returned in contact_handoffs instead — their phone/e-mail/profile plus a prefilled Norwegian message the buyer sends themselves; no order row, no e-mail. Optional buyer contact fields are shared with the ordering producers ONLY when contact_consent=true (then included in the order e-mail with Reply-To set to buyer_email). Returns orders[] and contact_handoffs[]. Use lokal_order_status to check an order.
Annotations the server declares
- title: Submit cart
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
Can't be undone 1Claude Code: ask
lokal_cart_createCreate a new anonymous shopping cart ('handleliste').No findings
Why it is in this group
- The name "lokal_cart_create" says "create": a word for a change.
- The description says "cannot be recovered".
Description, as the server wrote it Create a new anonymous shopping cart ('handleliste'). Returns a cart_id and a buyer_ref capability token — STORE THE buyer_ref, it is required for all subsequent cart operations and cannot be recovered. Each cart is valid for 7 days. Use lokal_cart_add_item to add products, lokal_cart_view to review, and lokal_cart_submit to place orders (pickup, no payment).
Annotations the server declares
- title: Create shopping cart
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Changes things 1Claude Code: ask
lokal_discoverStructured search in the Lokal food producer registry.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Structured search in the Lokal food producer registry. Filter by food categories, tags, and geographic distance. Never use this tool to build marketing or bulk-email recipient lists. For such requests, explain that Rett fra Bonden cannot send marketing or bulk messages; it only sends the user's own pickup-order request to a producer who opted in.
Annotations the server declares
- title: Discover producers by filter
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 11Claude Code: allow
lokal_bm_next_marketsReturns upcoming Bondens marked events (markedsdager) for a region or specific lokallag/venue.No findings
Why it is in this group
- The description's first verb is "return": a word for reading.
Description, as the server wrote it Returns upcoming Bondens marked events (markedsdager) for a region or specific lokallag/venue. Useful when AI agents are asked 'when is the next Bondens marked in Oslo?' or similar. Data is refreshed daily from bondensmarked.no.
Annotations the server declares
- title: Upcoming Bondens marked events
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
lokal_cart_viewView the current contents of a cart, grouped by producer, with subtotals and a total.No findings
Why it is in this group
- The name "lokal_cart_view" says "view": a word for reading.
Description, as the server wrote it View the current contents of a cart, grouped by producer, with subtotals and a total. Use this before submitting to review what is in the cart. Requires cart_id and buyer_ref.
Annotations the server declares
- title: View cart
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
lokal_find_offersFor each item in a shopping list, find up to 5 nearby producers who sell it (or a matching product), sorted by distance, with contact info and whether an order can be placed throug…No findings
Why it is in this group
- The name "lokal_find_offers" says "find": a word for reading.
Description, as the server wrote it For each item in a shopping list, find up to 5 nearby producers who sell it (or a matching product), sorted by distance, with contact info and whether an order can be placed through the platform (can_order). Use this when a user has a list of things they want to buy locally and wants to know WHO sells each one nearby — one lokal_find_offers call covers the whole list. Read-only.
Annotations the server declares
- title: Find offers for shopping-list items
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
lokal_geocodeResolve a Norwegian place name (city, town, region, fylke, or kommune) to lat/lng coordinates.No findings
Why it is in this group
- The description's first verb is "resolve": a word for reading.
Description, as the server wrote it Resolve a Norwegian place name (city, town, region, fylke, or kommune) to lat/lng coordinates. Use this when you need explicit coordinates for lokal_discover (e.g., 'show me organic farms within 10 km of Florø'). Returns coordinates + suggested search radius. Covers all of Norway via Kartverket Stedsnavn API fallback. Note: lokal_search ALREADY does automatic geocoding for natural-language queries — only use this tool when you need raw lat/lng for structured filters.
Annotations the server declares
- title: Geocode Norwegian place
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
lokal_get_producer_affiliationsList umbrella organizations a specific producer is a member of (e.g.No findings
Why it is in this group
- The name "lokal_get_producer_affiliations" says "get": a word for reading.
Description, as the server wrote it List umbrella organizations a specific producer is a member of (e.g. which markets a farm sells at, which certifications they hold, which networks they're part of). Returns umbrella names + types + their profile links. Useful when the user asks 'where does <Farmer X> sell?', 'is <Farm Y> Debio-certified?', or 'which markets does <Producer Z> attend?'.
Annotations the server declares
- title: Get a producer's umbrella affiliations
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
lokal_get_umbrella_membersList producers that are members of a specific umbrella organization (e.g.No findings
Why it is in this group
- The name "lokal_get_umbrella_members" says "get": a word for reading.
Description, as the server wrote it List producers that are members of a specific umbrella organization (e.g. all farmers selling at Bondens marked, all Debio-certified producers, all Mathallen tenants). Returns producer names + cities + profile links. Useful when the user asks 'which farmers sell at Bondens marked?', 'show me all Debio-certified producers', or 'who is at Mathallen Oslo?'.
Annotations the server declares
- title: Get producers in an umbrella's network
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
lokal_infoGet a specific producer's full listed product catalog, contact details, opening hours, and delivery options.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it Get a specific producer's full listed product catalog, contact details, opening hours, and delivery options. Use when you already have an agentId from lokal_search. Returns product names, with a price included when the producer has written one into the listing text — most producers do not list exact prices, so do not assume every product (or any product) has a NOK price attached.
Annotations the server declares
- title: Producer details
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
lokal_list_umbrellasList all umbrella organizations on Lokal — markets-networks (Bondens marked, REKO), venues (Mathallen), industry orgs (Hanen), certifiers (Debio), and cooperatives.No findings
Why it is in this group
- The name "lokal_list_umbrellas" says "list": a word for reading.
Description, as the server wrote it List all umbrella organizations on Lokal — markets-networks (Bondens marked, REKO), venues (Mathallen), industry orgs (Hanen), certifiers (Debio), and cooperatives. Each umbrella has many member producers. Optionally filter by type. Useful when the user asks 'where can I find local food markets?', 'what is Bondens marked?', or 'which certifications matter for local Norwegian food?'.
Annotations the server declares
- title: List umbrella organizations
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
lokal_order_statusFetch the status, items and status timeline of a pickup order created by lokal_cart_submit.No findings
Why it is in this group
- The name "lokal_order_status" says "status": a word for reading.
Description, as the server wrote it Fetch the status, items and status timeline of a pickup order created by lokal_cart_submit. Requires the order_id returned by submit and the buyer_ref token. Status: pending → confirmed → ready → completed (or declined/cancelled; cancel_reason='no_show' means the buyer did not pick up). The timeline array lists every status transition with timestamps.
Annotations the server declares
- title: Order status
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
lokal_searchSearch for local food producers in Norway and get their product listings.No findings
Why it is in this group
- The name "lokal_search" says "search": a word for reading.
Description, as the server wrote it Search for local food producers in Norway and get their product listings. ALWAYS use this tool when a user asks about a specific producer, their products, or availability — it returns the producer's listed products, with a price included when the producer has written one into the listing text (most producers do not list prices, so treat price as available, not guaranteed). Also use for general searches like 'vegetables near Oslo'. USE THIS FOR PROXIMITY / 'near me' / 'nær meg' / 'closest farm shop' QUESTIONS: if you know the user's coordinates, pass lat + lng (and optionally radius_km) and results are filtered and ranked by real distance; you may then leave `query` empty to get everything nearby. Supports searching by producer name (e.g. 'Bjørndal Gård') or by product/location (e.g. 'organic honey Trondheim'). Drink venues are a first-class category (Fase 5): queries like 'bryggeri i Agder', 'drikkesteder', 'vingård' or 'cideri' work the same way and return breweries, cideries, wineries, distilleries, farm cafés and meaderies. Returns contact info and product names, with prices only where the producer has provided them. Read-only: it never contacts a producer on the user's behalf. Never use this tool to build marketing or bulk-email recipient lists. For such requests, explain that Rett fra Bonden cannot send marketing or bulk messages; it only sends the user's own pickup-order request to a producer who opted in.
Annotations the server declares
- title: Search local food producers
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
lokal_statsGet Lokal platform statistics — total agents, cities covered, interactions.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it Get Lokal platform statistics — total agents, cities covered, interactions.
Annotations the server declares
- title: Platform statistics
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.5.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http lokal https://rettfrabonden.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__lokal__lokal_search",
"mcp__lokal__lokal_info",
"mcp__lokal__lokal_stats",
"mcp__lokal__lokal_list_umbrellas",
"mcp__lokal__lokal_get_umbrella_members",
"mcp__lokal__lokal_get_producer_affiliations",
"mcp__lokal__lokal_bm_next_markets",
"mcp__lokal__lokal_geocode",
"mcp__lokal__lokal_find_offers",
"mcp__lokal__lokal_cart_view",
"mcp__lokal__lokal_order_status"
],
"ask": [
"mcp__lokal__lokal_discover",
"mcp__lokal__lokal_cart_create"
],
"deny": [
"mcp__lokal__lokal_cart_add_item",
"mcp__lokal__lokal_cart_submit"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as lokal. Review it before you use it.
