lokal
The Lokal server is a discovery layer for local food producers in Norway (1,371+ farms, farm shops, REKO rings, and farmers markets), enabling AI agents and users to find, filter, and retrieve detailed producer information.
Natural language search (
lokal_search): Find producers using free-text queries in Norwegian or English (e.g., "organic honey Oslo", "ost Trondheim"), with ranked results including contact info and vCard links.Structured discovery (
lokal_discover): Filter producers by food categories (vegetables, dairy, meat, honey, etc.), tags (organic, seasonal, fresh, etc.), and geographic proximity (lat/lng + radius in km).Producer profile lookup (
lokal_info): Retrieve full details for a specific producer by ID — address, products, opening hours, certifications, and a vCard link.Platform statistics (
lokal_stats): Access aggregate metrics such as total registered producers, cities covered, and interaction counts.Multiple integration options: Connect via MCP Streamable HTTP (compatible with Claude, ChatGPT, and custom agents), A2A JSON-RPC 2.0, or REST API endpoints. The OpenAPI spec, privacy policy, and terms of service are also accessible.
Built with Express.js framework, providing RESTful API endpoints for marketplace search, discovery, producer details, and platform statistics.
Deployed on Fly.io cloud platform in Stockholm region, providing scalable infrastructure for the local food discovery service.
Uses SQLite database with WAL mode and persistent volume for storing and querying data on 400+ food producers across 150+ Norwegian cities.
Built with TypeScript, providing type-safe API endpoints and structured data handling for the local food discovery platform.
Provides OpenAPI 3.1 specification in YAML format for API documentation and integration with tools like ChatGPT Custom GPTs.
🥬 Rett fra Bonden — Local Food Agent Network for Norway
Live: https://rettfrabonden.com | MCP Server: https://rettfrabonden.com/mcp | API Spec: https://rettfrabonden.com/openapi.yaml
Rett fra Bonden is the discovery layer for local food in Norway. 1,371+ producers — farms, farm shops, REKO rings, farmers markets, and cooperatives — discoverable by AI agents and humans alike.
Not an app. Not a webshop. Infrastructure — the DNS for food agents.
Use Rett fra Bonden
From Claude (remote MCP via Claude Connectors)
The recommended setup for Claude.ai users: connect the remote MCP server directly, no local install required.
MCP Server URL:
https://rettfrabonden.com/mcpTransport: Streamable HTTP (MCP protocol 2025-06-18)
Authentication: None required — the server is publicly accessible
Once connected, ask Claude things like:
"Finn økologiske grønnsaker nær Oslo som leverer hjem"
"Which dairy farms in Rogaland sell raw milk directly to consumers?"
"Compare three honey producers in Innlandet — who ships nationwide?"
From Claude Desktop (MCP stdio)
If you prefer a local install over remote:
{
"mcpServers": {
"lokal": {
"command": "npx",
"args": ["lokal-mcp"]
}
}
}From ChatGPT (Developer Mode / Custom GPT)
Developer Mode: Add https://rettfrabonden.com/mcp as the MCP server URL.
Custom GPT: Create a GPT with Actions pointing to https://rettfrabonden.com/openapi.yaml. Instructions in custom-gpt-instructions.md.
From your own agent (A2A / REST)
# Natural language search
curl "https://rettfrabonden.com/api/marketplace/search?q=organic+vegetables+near+Oslo"
# Structured discovery
curl -X POST https://rettfrabonden.com/api/marketplace/discover \
-H "Content-Type: application/json" \
-d '{"categories":["vegetables"],"tags":["organic"],"lat":59.91,"lng":10.75,"maxDistanceKm":30}'
# A2A JSON-RPC
curl -X POST https://rettfrabonden.com/a2a \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"message/send","params":{"message":{"role":"user","parts":[{"type":"text","text":"Find cheese near Bergen"}]}},"id":"1"}'Related MCP server: mcp-norwegian-companies
MCP Tools & Resources
The remote MCP endpoint at /mcp exposes four tools and two resources.
Tool | Purpose | Read/Write |
| Natural-language producer search (NO/EN). Auto-starts a conversation with top matches so sellers can respond. | Read + Write |
| Structured filter — categories, tags, geo-radius. Auto-starts conversations. | Read + Write |
| Full producer profile — address, products, opening hours, certifications. | Read only |
| Platform-level metrics — total agents, cities covered. | Read only |
Resource URI | Mime | Description |
|
| Aggregate view of producers by city |
|
| Detailed info about a specific producer |
HTTP API
Endpoint | Method | Description |
| POST/GET/DELETE | MCP Streamable HTTP (remote MCP transport) |
| GET | Natural language search (NO/EN) |
| POST | Structured filtering |
| GET | Producer details |
| GET | Platform statistics |
| POST | A2A JSON-RPC 2.0 |
| GET | A2A Agent Card |
| GET | MCP Server Card (human + machine-readable metadata) |
| GET | OpenAPI 3.1 spec |
| GET | AI-discovery index |
| GET | Privacy policy (NO/EN) |
Full spec: https://rettfrabonden.com/openapi.yaml
Architecture
TypeScript + Express on Fly.io
SQLite with WAL mode, persistent volume
MCP 2025-06-18 over Streamable HTTP + stdio (remote + local)
A2A v1.0.0 compliant (JSON-RPC 2.0 + Agent Card)
Value-based matching — no ads, no pay-to-rank
1,386+ agents across 374+ Norwegian cities
For producers
Your farm/market might already be listed. Visit https://rettfrabonden.com to check, and claim your agent to update your info and respond to buyer queries.
Troubleshooting
"The connector can't reach the server"
Check that your client is pointed at https://rettfrabonden.com/mcp (HTTPS, no trailing slash). The server uses the Streamable HTTP transport — stdio clients should use the lokal-mcp npm package instead.
"CORS error in the browser"
Browser-based MCP clients must send an Origin header. The server allow-lists https://claude.ai, https://www.claude.ai, https://chatgpt.com, and https://chat.openai.com. If you're hosting your own agent on a different origin, open an issue and we'll add it.
"tools/list returns an empty array"
Hit POST /mcp with a proper initialize request first and capture the Mcp-Session-Id response header. Subsequent calls must include that header — session IDs are sticky per connection.
"Search returns no results for a Norwegian query"
The server handles both NO and EN, but accents matter. Use økologisk rather than okologisk for best relevance. Try widening with lokal_discover — it accepts lat/lng + radius instead of free text.
"I claimed my agent but the dashboard is empty"
Claims are verified by email. Check spam for the verification code from kontakt@rettfrabonden.com. The token is valid for 24 hours.
Rate limits
Public endpoints allow 150 searches and 300 general API calls per 15-minute window. MCP tools/call counts against the search bucket. If your agent hits the limit, back off for 15 minutes — we don't block IPs, only throttle.
Still stuck Open an issue at https://github.com/slookisen/lokal/issues with the request payload (redact anything sensitive) and the response status code.
Privacy, Terms & Support
Privacy policy: https://rettfrabonden.com/privacy
Terms of service: https://rettfrabonden.com/terms
Issues / support: https://github.com/slookisen/lokal/issues
License
MIT
Maintenance
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/slookisen/lokal'
If you have feedback or need assistance with the MCP directory API, please join our Discord server