Koskamo

Nutrimeniu MCP

An official MCP server by Nutrimeniu that allows AI agents to search a food database and calculate nutrition declarations per 100g and per portion for recipes, complying with EU Regulation 1169/2011.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Nutrimeniu MCP logo, by Derikon Development SRLVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Derikon Development SRL
MCP endpoint (Streamable HTTP)
https://api.nutrimeniu.ro/mcp
Vendor documentation

What its tools do

2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

2 of 2 have a description · 2 of 2 declare behavior hints · 2 of 2 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to nutrimeniu.ro ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search for foods by name and retrieve nutritional values per 100g
  • Calculate total nutrition for recipes with up to 30 ingredients
  • Generate nutrition declarations compliant with EU Regulation 1169/2011

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
nutrimeniu-calculator 0.1.0
MCP protocol negotiated in check
2025-11-25
Tools
2 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Nutrimeniu computes EU Regulation 1169/2011-style nutrition declarations (per 100 g and per portion) from ingredient weights, using the Nutrimeniu food database of Romanian and European foods with names in English and Romanian. Use it when the user wants calories, macros or a nutrition table or label for a recipe or dish from its ingredients (in Romanian: valori nutriționale, declarație nutrițională, calorii pe porție, la 100 g). Not for packaged products looked up by barcode or brand, and not for a personal daily food diary or diet plan. Weights are in grams only: convert other units yourself and tell the user the conversion you used. Each weight must match the state of the chosen food: raw weight for a raw food, cooked weight for a cooked food. When they matter, ask the user for the number of servings and the final weight of the cooked dish. Call calculate_nutrition first, with the ingredient names. While an ingredient is ambiguous or not found the result has no totals: show the user the candidates it lists and let them choose (use search_foods only when none is listed or none fits), then call calculate_nutrition again with the chosen food_id; never guess. Not for the user's own Nutrimeniu recipes (the Nutrimeniu account connector handles those). A complete result also lists the allergens tagged on the matched foods and an ingredient list sorted by weight with the allergens in bold. Allergen tags can be missing: always show the allergen note and the ingredients whose allergen data is not checked, and never say a dish is allergen free. For a restaurant menu (Romanian Order ANPC 201/2022) set purpose to menu: the result starts with energy, fat, saturates, sugars and salt per portion, next to the portion weight. For a product label set purpose to label: the table uses the label rounding of the European Commission guidance. Every result carries a disclaimer: show it as given. The values are estimates calculated from ingredient data, not laboratory analysis, and the business that sells the food stays responsible for its menu or label. Show the data source of each ingredient. A complete result carries a save_recipe link that opens the calculated recipe in Nutrimeniu, where the user can keep it as a draft: show that link to the user exactly as given, with its label. When a result carries limit_reached, no search or calculation was made: relay its message, and register_url when present, to the user, and do not call that tool again in this conversation.

Tools

2 advertised

search_foods — Search foods
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the Nutrimeniu food database (Romanian and European foods, names in English and Romanian, diacritics optional) and return matching foods with their food_id, data source and nutrition values per 100 g (energy kJ/kcal, fat, saturates, carbohydrate, sugars, protein, salt). Use this to look up a food by name, for example an ingredient that matched several foods or none in a nutrition calculation. Searches share a budget of 50 food lookups per conversation with incomplete calculations. Values are estimates from the source data, not laboratory analysis.

search_foods input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "lang": {
      "enum": [
        "en",
        "ro"
      ],
      "type": "string",
      "description": "Language of the query and of the returned names. Default en."
    },
    "limit": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "Maximum number of results, 1 to 20. Default 10."
    },
    "query": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2,
      "description": "Food name to look for, in English or Romanian (diacritics optional)."
    }
  }
}
search_foods output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "foods"
  ],
  "properties": {
    "foods": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "name",
          "per_100g"
        ],
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "source": {
            "type": [
              "string",
              "null"
            ]
          },
          "name_en": {
            "type": [
              "string",
              "null"
            ]
          },
          "per_100g": {
            "type": "object",
            "required": [
              "energy_kj",
              "energy_kcal",
              "fat",
              "saturates",
              "carbohydrates",
              "sugars",
              "protein",
              "salt"
            ],
            "properties": {
              "fat": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "salt": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "sugars": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "protein": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "energy_kj": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "saturates": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "energy_kcal": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "carbohydrates": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "additionalProperties": {}
          },
          "source_label": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {}
      }
    },
    "limit_reached": {
      "type": "object",
      "required": [
        "reason",
        "budget",
        "message"
      ],
      "properties": {
        "budget": {
          "enum": [
            "calculations",
            "lookups"
          ],
          "type": "string"
        },
        "reason": {
          "enum": [
            "account_required",
            "session",
            "daily"
          ],
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "register_url": {
          "type": "string"
        }
      },
      "description": "Present only when a limit was reached: no search or calculation was made. message explains the limit; register_url, when present, opens the Nutrimeniu sign-up page.",
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
search_foods annotations
{
  "title": "Search foods",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calculate_nutrition — Calculate nutrition declaration
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants calories, macros or a nutrition table or label for a recipe or dish from its ingredients (Romanian: valori nutriționale, declarație nutrițională, calorii, la 100 g, per porție). Computes an EU Regulation 1169/2011-style nutrition declaration (energy kJ/kcal, fat, saturates, carbohydrate, sugars, protein, salt) per 100 g and per portion for a recipe, using the Nutrimeniu food database (Romanian and European foods, names in English or Romanian). Each ingredient is a name or food_id with its weight in grams, raw or cooked to match the food. When an ingredient matches several foods or none, the result has no totals and lists the candidate foods, if any, for that ingredient. A complete result also carries the allergens tagged on the matched foods, with a note that tags can be incomplete, an ingredient list sorted by weight with allergens in bold, the five values per portion that Romanian Order ANPC 201/2022 requires on menus (menu_declaration), values rounded for labels (label_rounded), the data source of each ingredient and a disclaimer. purpose is menu for a restaurant menu and label for a product label. Not for packaged products looked up by barcode or brand, for a daily food diary or diet plan, or for the user's own Nutrimeniu recipes. The values are estimates calculated from ingredient data, not laboratory analysis. Completed calculations are limited per conversation. Incomplete results are not counted toward that limit; they share a budget of 50 food lookups per conversation with food searches.

calculate_nutrition input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "ingredients"
  ],
  "properties": {
    "lang": {
      "enum": [
        "en",
        "ro"
      ],
      "type": "string",
      "description": "Language for food names and table labels: en or ro. Default en."
    },
    "purpose": {
      "enum": [
        "general",
        "menu",
        "label"
      ],
      "type": "string",
      "description": "menu: a restaurant menu (Order ANPC 201/2022), shows the five mandatory values per portion first; label: a product label, uses label rounding. Default general."
    },
    "servings": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Number of portions the recipe makes. Default 1."
    },
    "ingredients": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "grams"
        ],
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 2,
            "description": "Ingredient name in English or Romanian, e.g. \"chicken breast\" or \"piept de pui\"."
          },
          "grams": {
            "type": "number",
            "maximum": 10000,
            "minimum": 0.1,
            "description": "Weight in grams (0.1 to 10000), raw or cooked to match the chosen food."
          },
          "food_id": {
            "type": "integer",
            "maximum": 9007199254740991,
            "description": "Exact food id from a food search or from a candidate list, in place of name.",
            "exclusiveMinimum": 0
          }
        }
      },
      "maxItems": 30,
      "minItems": 1,
      "description": "The recipe ingredients, 1 to 30, each with a name or food_id and its weight in grams."
    },
    "recipe_name": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2,
      "description": "Name of the dish, e.g. \"Ciorbă de perișoare\". Used as the recipe name when the user saves it in Nutrimeniu."
    },
    "cooked_weight_grams": {
      "type": "number",
      "maximum": 300000,
      "minimum": 0.1,
      "description": "Final weight of the dish after cooking, in grams, when it differs from the sum of the raw ingredients."
    }
  }
}
calculate_nutrition output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "format": {
      "type": "string"
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "complete": {
      "type": "boolean",
      "description": "False when an ingredient is ambiguous or unknown: then there are no totals yet."
    },
    "per_100g": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "energy_kj",
            "energy_kcal",
            "fat",
            "saturates",
            "carbohydrates",
            "sugars",
            "protein",
            "salt"
          ],
          "properties": {
            "fat": {
              "type": [
                "number",
                "null"
              ]
            },
            "salt": {
              "type": [
                "number",
                "null"
              ]
            },
            "sugars": {
              "type": [
                "number",
                "null"
              ]
            },
            "protein": {
              "type": [
                "number",
                "null"
              ]
            },
            "energy_kj": {
              "type": [
                "number",
                "null"
              ]
            },
            "saturates": {
              "type": [
                "number",
                "null"
              ]
            },
            "energy_kcal": {
              "type": [
                "number",
                "null"
              ]
            },
            "carbohydrates": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ]
    },
    "allergens": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "contains",
            "may_contain",
            "unchecked_ingredients",
            "note"
          ],
          "properties": {
            "note": {
              "type": "string"
            },
            "contains": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "may_contain": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "unchecked_ingredients": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "Allergens tagged on the matched foods. Tags can be missing: the note says so and unchecked_ingredients lists the foods whose allergen data is not checked."
    },
    "unmatched": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "disclaimer": {
      "type": "string"
    },
    "ingredients": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "input",
          "grams",
          "matched",
          "candidates"
        ],
        "properties": {
          "grams": {
            "type": "number"
          },
          "input": {
            "type": [
              "string",
              "number"
            ]
          },
          "matched": {
            "anyOf": [
              {
                "type": "object",
                "required": [
                  "id",
                  "name"
                ],
                "properties": {
                  "id": {
                    "type": "number"
                  },
                  "name": {
                    "type": "string"
                  },
                  "source": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name_en": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "source_label": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "additionalProperties": {}
              },
              {
                "type": "null"
              }
            ]
          },
          "candidates": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "name"
              ],
              "properties": {
                "id": {
                  "type": "number"
                },
                "name": {
                  "type": "string"
                },
                "source": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name_en": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "energy_kcal": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "source_label": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "additionalProperties": {}
            }
          }
        },
        "additionalProperties": {}
      }
    },
    "per_portion": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "energy_kj",
            "energy_kcal",
            "fat",
            "saturates",
            "carbohydrates",
            "sugars",
            "protein",
            "salt"
          ],
          "properties": {
            "fat": {
              "type": [
                "number",
                "null"
              ]
            },
            "salt": {
              "type": [
                "number",
                "null"
              ]
            },
            "sugars": {
              "type": [
                "number",
                "null"
              ]
            },
            "protein": {
              "type": [
                "number",
                "null"
              ]
            },
            "energy_kj": {
              "type": [
                "number",
                "null"
              ]
            },
            "saturates": {
              "type": [
                "number",
                "null"
              ]
            },
            "energy_kcal": {
              "type": [
                "number",
                "null"
              ]
            },
            "carbohydrates": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ]
    },
    "save_recipe": {
      "type": "object",
      "required": [
        "label",
        "url",
        "expires_at"
      ],
      "properties": {
        "url": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "expires_at": {
          "type": "string"
        }
      },
      "description": "Present on a complete result: a link that opens this recipe in Nutrimeniu, to keep it as a draft.",
      "additionalProperties": false
    },
    "label_rounded": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "per_100g",
            "per_portion",
            "guidance"
          ],
          "properties": {
            "guidance": {
              "type": "string"
            },
            "per_100g": {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {
                "type": "string"
              }
            },
            "per_portion": {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {
                "type": "string"
              }
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "The declaration rounded per the European Commission guidance (December 2012), as strings such as \"<0.5\"."
    },
    "limit_reached": {
      "type": "object",
      "required": [
        "reason",
        "budget",
        "message"
      ],
      "properties": {
        "budget": {
          "enum": [
            "calculations",
            "lookups"
          ],
          "type": "string"
        },
        "reason": {
          "enum": [
            "account_required",
            "session",
            "daily"
          ],
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "register_url": {
          "type": "string"
        }
      },
      "description": "Present only when a limit was reached: no search or calculation was made. message explains the limit; register_url, when present, opens the Nutrimeniu sign-up page.",
      "additionalProperties": false
    },
    "ingredients_text": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "text",
            "html"
          ],
          "properties": {
            "html": {
              "type": "string"
            },
            "text": {
              "type": "string"
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "Ingredient list sorted by weight, per portion, with allergens in bold (text uses **, html uses <b>)."
    },
    "menu_declaration": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "portion_weight_grams"
          ],
          "properties": {
            "portion_weight_grams": {
              "type": "number"
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "Energy, fat, saturates, sugars and salt per portion, rounded for a menu, with the portion weight (Order ANPC 201/2022)."
    },
    "total_weight_grams": {
      "type": [
        "number",
        "null"
      ]
    },
    "portion_weight_grams": {
      "type": [
        "number",
        "null"
      ]
    },
    "free_calculations_left": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Free completed calculations left in this conversation."
    }
  },
  "additionalProperties": false
}
calculate_nutrition annotations
{
  "title": "Calculate nutrition declaration",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
857 ms
95th percentile latency
857 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 857 ms · metadata changed · 2 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http nutrimeniu-mcp https://api.nutrimeniu.ro/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add nutrimeniu-mcp --url https://api.nutrimeniu.ro/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable nutrimeniu-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "nutrimeniu-mcp": {
      "url": "https://api.nutrimeniu.ro/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "nutrimeniu-mcp": {
      "type": "streamableHttp",
      "url": "https://api.nutrimeniu.ro/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start nutrimeniu-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "nutrimeniu-mcp": {
      "type": "http",
      "url": "https://api.nutrimeniu.ro/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http nutrimeniu-mcp https://api.nutrimeniu.ro/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.nutrimeniu.ro/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "nutrimeniu-mcp": {
      "serverUrl": "https://api.nutrimeniu.ro/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Nutrimeniu MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Nutrimeniu MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing