mcp-server-fooddata-dk
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-server-fooddata-dkhow many calories in 100g of rugbrød?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-server-fooddata-dk
MCP server for Danish food and nutrition data. Combines Open Food Facts (Danish branded/supermarket products, barcode lookup) with the DTU Frida food composition database (generic Danish foods like rugbrød, leverpostej, frikadeller).
Read-only, no user accounts, no credentials. Built as a companion to
mcp-server-fatsecret: FatSecret's free tier only carries US food data, so this
server supplies the real Danish numbers and the calling model logs the meal
there with the serving scaled to match.
This is an independent, unofficial project, not affiliated with Open Food Facts or DTU.
Why two sources
They cover opposite gaps, and neither is sufficient alone:
Source | Strong at | Weak at |
Open Food Facts | Branded supermarket products, barcode scanning, ~9,400 Danish-tagged items | Generic/home-cooked foods; barcode coverage is patchy |
DTU Frida | Generic and composite Danish foods, authoritative composition data | No branded products, no barcodes |
fooddata_search queries both and returns Frida first, since for a generic
Danish food DTU's figures are authoritative while OFF's nearest equivalent is a
branded approximation.
Related MCP server: Open Food Facts MCP Server
Tools
Tool | Purpose |
| Discovery — find the right tool |
| Keyword search across both sources; per-100g macros with source attribution |
| Open Food Facts barcode (EAN) lookup |
| Full detail for one food by id ( |
| Which sources are available and their required attribution |
All values are per 100 g/ml — the only basis both sources reliably share. The caller scales from there.
Setup
No credentials needed. Open Food Facts requires only a descriptive
User-Agent, which defaults to this project's name and URL; set
OFF_USER_AGENT to include a real contact address if you run it at any volume.
{
"mcpServers": {
"fooddata-dk": {
"command": "npx",
"args": ["-y", "mcp-server-fooddata-dk"],
"env": { "OFF_USER_AGENT": "yourapp/1.0 (you@example.com)" }
}
}
}Adding the Frida dataset (optional)
Frida has no public API — its site is a single-page app over an undocumented backend, which this project deliberately does not reverse-engineer. The dataset is instead downloaded by hand and converted:
npm run frida:convert -- frida-export.csv ./data/frida.json --version 5.5See data/README.md. The server runs fine without it,
serving Open Food Facts only and reporting Frida as unavailable.
Rate limits and caching
Open Food Facts allows 15 requests/min for product reads and 10/min for searches, per IP. Responses are cached in memory (1 h TTL, 500 entries), including barcode misses — a barcode absent from OFF won't appear a minute later. A 429 is reported as a clear rate-limit message rather than a bare status code, and OFF's habit of serving an HTML error page during outages is detected and reported as such.
Attribution
Both licences require credit, and the server attaches it to every result:
Open Food Facts — Open Database License (ODbL).
DTU Frida — Frida Food Data (https://frida.fooddata.dk), National Food Institute, Technical University of Denmark.
Optional HTTP server
npm run dev:http (and the published Docker image) serve /mcp over
Streamable HTTP, gated by MCP_HTTP_TOKEN, plus a /healthz endpoint
reporting whether the Frida dataset loaded. There is no per-user state, so
unlike the personal connectors this one needs no identity forwarding.
Verification
npm run typecheck && npm test && npm run build
npm run smoke:live # hits the real Open Food Facts APILicense
Apache-2.0
Available Tools
5 toolsfooddata_get_by_barcodeLook Up Food by BarcodeARead-onlyIdempotent
Look up a packaged product by its barcode (EAN) in Open Food Facts. Danish barcode coverage is good but incomplete — if nothing is found, fall back to fooddata_search by name.
| Name | Required | Description | Default |
|---|---|---|---|
| barcode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context beyond those annotations: it notes that Danish barcode coverage is good but incomplete, implying occasional empty results, and it communicates the fallback behavior. This is useful context that enriches what the annotations already provide, though it doesn't discuss rate limits or auth requirements, which are likely not applicable here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with no fluff. The first sentence states the primary use case; the second adds essential fallback guidance. Front-loaded and efficient, every word contributes to selection and invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (one parameter, no output schema), the description is complete enough: it explains what the tool does, when to use it, and what to do if it fails. The fallback to fooddata_search covers a critical edge case. It doesn't detail the exact return format, but for a lookup tool with an open-world hint, this is acceptable. Overall, it provides sufficient context for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It does so by clarifying the 'barcode' parameter is an EAN and tying it directly to the tool's purpose. The schema already enforces numeric string with minLength 6, and the description adds the semantic meaning of 'EAN' without redundancy. This is sufficient for a simple single-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to look up a packaged product by its barcode (EAN) in Open Food Facts. It uses a specific verb ('look up') and resource ('packaged product by barcode'), which distinguishes it from sibling tools like fooddata_search (by name) and fooddata_get_food (likely by internal ID). The explicit mention of 'barcode (EAN)' leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance and a fallback: 'if nothing is found, fall back to fooddata_search by name.' This tells the agent exactly when to use this tool and what to do if it fails, and it names the alternative tool (fooddata_search). This is a model of clear usage instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fooddata_get_foodGet One Food by IdARead-onlyIdempotent
Full detail for a single food by the id returned from fooddata_search ("off:" or "frida:").
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly/idempotent/destructive safety hints. The description adds the id format constraint ('off:<barcode>' or 'frida:<id>') but does not describe return shape or error behavior, so moderate value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler; every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description gives essential information (id source and format) but omits details about the returned 'full detail' structure or error cases; adequate but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description for the id parameter, but the description fully explains the expected format, including prefixes from fooddata_search, completely compensating for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool retrieves full detail for a single food by id, referencing the specific id format from fooddata_search, which clearly distinguishes it from siblings like fooddata_get_by_barcode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates the id must come from fooddata_search, implying a search-then-get workflow, but does not explicitly mention alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fooddata_searchSearch Danish Food DataARead-onlyIdempotent
Search Danish food/nutrition data by keyword across Open Food Facts (branded/supermarket products) and DTU Frida (generic Danish foods like rugbrød or leverpostej). Returns per-100g calories and macros with source attribution. Use this to get real Danish nutrition values before logging a meal elsewhere.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Food name, Danish or English, e.g. "rugbrød" or "leverpostej". | |
| danishOnly | No | Restrict Open Food Facts results to products tagged as sold in Denmark. Set false to widen if a search returns nothing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description need not repeat safety traits. It adds useful behavioral context by specifying the return format (per-100g calories/macros) and source attribution, which helps the agent interpret results. It does not disclose any additional edge cases or rate limits, but the provided annotations lower the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core action and scope, followed by return details and a usage hint. Every sentence contributes essential information with zero filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (search across two data sources, no output schema), the description adequately covers purpose, usage, return format, and source attribution. It does not explain result ordering, pagination, or empty-result behavior, but these are secondary for a search tool and the annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (query and danishOnly have descriptions; limit lacks one). The description reinforces query semantics with examples (rugbrød, leverpostej) but does not add meaningful detail about limit or danishOnly beyond the schema. With coverage above 50%, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Search') and resource ('Danish food/nutrition data by keyword'). It explicitly names the two data sources (Open Food Facts and DTU Frida) and notes the return type (per-100g calories and macros), which distinguishes it from sibling tools like barcode lookup or food details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage scenario ('Use this to get real Danish nutrition values before logging a meal elsewhere') and explains the scope (keyword search across Danish food data). It does not explicitly state when not to use it or mention alternative tools, but the context and sibling names make the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fooddata_search_capabilitiesSearch Food Data CapabilitiesARead-onlyIdempotent
Find the right food-data tool. Use first if unsure what is available.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, providing a clear safety profile. The description adds context about being a first-step tool but does not elaborate on behavioral details such as return format, pagination behavior, or how results are ranked. This is acceptable given the annotations, but no extra behavioral insight is provided beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise with two short sentences, both of which are directly relevant and front-loaded. However, the brevity sacrifices necessary parameter explanation, so it is not perfectly efficient; it could include a clause about query/limit without bloating significantly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description must clarify what the agent will receive (e.g., a list of tool names, recommended tool, or explanation) and how to use the results. It also fails to explain how 'query' influences the output or how 'limit' affects the number of suggestions. For a meta-tool that guides tool selection, this lack of detail makes the description incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description coverage (0%), and the description does not mention the 'query' or 'limit' parameters at all. The tool name suggests query is a natural-language need description and limit may cap results, but the agent must guess these semantics. A description for a routing tool should explicitly state that 'query' is the user's goal and 'limit' restricts the number of recommended tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: 'Find the right food-data tool.' This uses a specific verb ('find') and resource ('right food-data tool'), clearly distinguishing it from sibling tools that directly search or retrieve food data. The phrase 'Use first if unsure what is available' reinforces its role as a discovery or routing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage guidance: 'Use first if unsure what is available.' This tells the agent when to call this tool, implying that if the agent already knows the appropriate sibling, it should use that tool directly. However, it does not explicitly name alternatives or say when not to use it, so it falls one point short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fooddata_sourcesFood Data SourcesARead-onlyIdempotent
Which data sources this server has available, and the attribution their licences require.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds that the tool returns license attribution requirements, which is useful content context. No contradictions are present, and the description does not overpromise. It doesn't mention response format or caching, but with strong annotations this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence fragment that conveys the essential purpose without wasting words. It is relatively clear and front-loaded with the main topic (data sources), though the grammar is slightly awkward due to the missing verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter informational tool with robust annotations, the description gives enough context: it explains what data is returned (sources and license attribution). No output schema exists, but the description communicates the tool's functionality sufficiently for an agent to select it. It could mention that it returns a list, but the use case is straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is empty. According to the rubric, 0 params is baseline 4. The description does not need to add parameter information, and none is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides available data sources and their required license attribution. It distinguishes itself from sibling tools (search, get_food) by focusing on server-level data source information, though it lacks an explicit verb like 'list' and uses a question-style fragment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternative tool guidance is provided. The purpose is clear enough to imply usage for retrieving data source information, but exclusions against alternatives like search_capabilities are not stated. The context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.1.0- First observed
fooddata_get_by_barcode - First observed
fooddata_get_food - First observed
fooddata_search - First observed
fooddata_search_capabilities - First observed
fooddata_sources
TDQS
Tools are largely distinct: search, barcode lookup, ID detail, and meta-info. fooddata_search_capabilities and fooddata_sources both provide meta-info but one guides tool selection while the other covers data sources/licensing. Search vs get_by_barcode is clarified by description, so only minor ambiguity remains.
All tools share the fooddata_ prefix, and most follow a verb_noun pattern (search_capabilities, get_food, get_by_barcode). However, 'fooddata_sources' is a bare noun and 'fooddata_search' is a bare verb, deviating slightly from the consistent verb_noun style.
Five tools is well-scoped for a food data server. Each serves a distinct need: search, barcode lookup, detail retrieval, and source/capability info. No redundant or missing tools for the server's read-only purpose.
The tool surface covers all core operations for a food data lookup server: keyword search, barcode lookup, full detail by ID, and attribution info. There are no dead ends—get_food relies on search IDs, but that is a documented flow. No obvious gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Food and nutrition data: search, macros, and comparisons
Danish grocery catalog as MCP tools: live offers across all major chains, stores, EAN lookup, stock.
1Unlock the power of food transparency with our Open Food Facts MCP server. Easily look up any food
Barcode lookup, nutrition search, and product comparison for 3M+ crowd-sourced food products.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides access to a comprehensive food database with 300,000+ items, enabling nutritional data lookups, food searches, and barcode scanning with all processing happening locally for privacy and speed.204MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to access the Open Food Facts database to query detailed food product information, nutritional data, and environmental scores. Supports product lookup by barcode, smart search with filtering, nutritional analysis, product comparison, and dietary recommendations to help users make informed food choices.51MIT
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to search for food products and retrieve detailed nutritional information from the Open Food Facts database using product names or barcodes.-
- FlicenseBqualityCmaintenanceEnables AI assistants to access food product information, providing nutritional analysis, product comparisons, and recipe suggestions using the Open Food Facts database.21-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/borgels/mcp-server-fooddata-dk'
If you have feedback or need assistance with the MCP directory API, please join our Discord server