Skip to content

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).

Deletes · 2Final · 1Changes · 1

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

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/mcp

Tools

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_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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.