Ullas Opskrifter (Danish recipes)
Server Details
Read-only Danish recipes, ingredients and categories from ullasopskrifter.dk: search and browse.
- Status
- Healthy
- Uptime
- 100.0% over 23 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- MITCDK/ullas-mcp
- GitHub Stars
- 0
TDQS
Scored across 6 tools
categories_list, categories_recipes, recipes_list, and recipes_get target clearly distinct resources and operations. However, ingredients_search_recipes largely overlaps with search_recipes, which already covers ingredients, so an agent may pick between the two arbitrarily.
Four tools follow a noun_verb order (categories_list, categories_recipes, recipes_get, recipes_list), while ingredients_search_recipes and search_recipes use a verb-oriented pattern, mixing the convention. Descriptions remain readable, but the pattern is not fully predictable.
Six tools is well-scoped for a read-only recipe browsing server, with each tool earning its place. Nothing feels padded or conspicuously missing.
Core read paths (browse, fetch by id/slug, category filtering, ingredient and full-text search) are all covered. Write operations are absent, but for a published-recipes browsing API this is likely intentional; only minor gaps like multi-filter or random-recipe support remain.
Available Tools
6 toolscategories_listList categoriesARead-onlyIdempotentInspect
List recipe categories as a tree with published recipe counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is fully covered. The description adds framing about the tree shape and that counts reflect published recipes only, which is modest but real value beyond the 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 clause (tree shape, published counts) earns its place.
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 read tool with full annotation coverage and no output schema, the description is sufficient; the return shape is sketched (tree with counts), though slightly more detail on nesting/ordering would be ideal.
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 takes zero parameters, so the baseline is 4; there is no parameter semantics to clarify or omit.
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?
States a specific verb (List) and resource (recipe categories) plus the scope of what's returned (tree with published recipe counts). It's clear enough to distinguish from siblings like categories_recipes or recipes_list, though it doesn't explicitly name those alternatives.
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?
Usage is implied by the nature of a no-argument listing tool, but the description gives no explicit when-to-use guidance or mentions when a sibling such as categories_recipes would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
categories_recipesRecipes in categoryARead-onlyIdempotentInspect
List published recipes in a category (includes child categories).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Category slug | |
| sort | No | Optional sort: title, newest, views, views30 (same as the website) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds two useful behavioral facts beyond that: only published recipes are returned, and child categories are included.
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 sentence, front-loaded with the operation and scope, with no filler. Every word earns its place.
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 read-only list tool with full schema coverage and rich annotations, the description gives the core return scope (published recipes in a category tree). It omits pagination and sibling differentiation, but those are not strictly demanded at this complexity level.
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 coverage is 100%, and both parameters have schema descriptions. The description adds no parameter-level syntax or format details, so the baseline of 3 applies.
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?
States a specific verb 'List' and resource 'recipes', scoped to a category with child categories. It does not explicitly name or distinguish itself from siblings like recipes_list or search_recipes.
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 when-to-use conditions, exclusions, or comparisons to alternative tools are provided. The purpose implies a use case, but the description gives no explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingredients_search_recipesSearch by ingredientBRead-onlyIdempotentInspect
Find published recipes whose ingredient list contains the given text.
| Name | Required | Description | Default |
|---|---|---|---|
| ingredient | Yes | Ingredient name or fragment to match |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety behavior is covered. The description adds real value by restricting results to 'published' recipes and implying a substring/containment match, but says nothing about result caps, ranking, or empty-match behavior.
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?
One front-loaded sentence with no filler; the scope constraint ('published') and the matching rule appear immediately and nothing is wasted.
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 one-parameter read-only search with annotations covering safety, the description is minimally sufficient. It is missing the routing information against the sibling search_recipes and any hint about result volume, which is the main remaining gap.
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 coverage is 100% and the single parameter is already described as 'Ingredient name or fragment to match'. The description's phrase 'contains the given text' merely restates the fragment/substring idea, adding no syntax, casing, or matching-rule detail beyond the schema.
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 a specific verb and resource ('Find published recipes') and adds a meaningful scope qualifier ('ingredient list contains the given text'). It is clear what the tool does, but it never distinguishes itself from the sibling search_recipes, leaving the agent to infer the difference from names alone.
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?
There is no guidance on when to use this tool versus search_recipes or categories_recipes, nor any stated exclusions or prerequisites. The agent must guess that this is the ingredient-scoped search variant purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipes_getGet recipeARead-onlyIdempotentInspect
Get one published recipe by numeric id or slug (ingredients, method, categories, image and page URL).
| Name | Required | Description | Default |
|---|---|---|---|
| id_or_slug | Yes | Recipe id or slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuinely new context: only *published* recipes are retrievable, and it enumerates what comes back (ingredients, method, categories, image, page URL). It does not cover not-found/error behavior.
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 the verb first, the selector second, and the payload last. Nothing is wasted and nothing important is buried.
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?
With no output schema, the description usefully lists the returned fields, and annotations carry the safety semantics. Minor gaps remain around error/not-found handling and whether slugs are case-sensitive, but for a single-parameter getter this is close to complete.
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 coverage is 100%, so the baseline is 3, but the description adds a real detail beyond the schema: the id form is *numeric* (the schema only says 'string'), while accepting a slug as an alternative. That helps the agent format the argument correctly.
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?
States a specific verb and resource ('Get one published recipe') and constrains scope to a single item, which implicitly separates it from recipes_list and search_recipes. It doesn't name a sibling explicitly, so it falls just short of the top band.
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 'by numeric id or slug' phrasing implies you need a known identifier rather than search terms, which hints at when to prefer this over search_recipes. However, there is no explicit when-to-use/when-not statement and no alternative is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipes_listList recipesARead-onlyIdempotentInspect
List published recipes with pagination (title, slug, servings, image URL, and page URL).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| limit | No | Page size (default 20, max 100 on stdio; HTTP caps at 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive behavior, and a closed-world scope. The description adds useful context beyond those annotations: it scopes results to published recipes and enumerates the returned fields, which is especially valuable since there is no output schema. It still omits ordering, rate limits, and pagination metadata details.
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 sentence that front-loads the purpose and scope, then compactly summarizes the output fields in a parenthetical. Every element earns its place with no 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?
For a simple read-only list tool with two fully documented optional parameters and no output schema, the description covers purpose, scope, and return fields adequately. It leaves minor gaps around result ordering, pagination metadata, and sibling differentiation, but annotations and schema carry the rest.
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 100%, so the page and limit parameters are fully documented in the schema. The description mentions 'pagination' generically but adds no syntax, defaults, or constraints beyond what the schema already provides, making the baseline of 3 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?
States a specific verb and resource ('List published recipes') with a clear scope ('published') and enumerates the returned fields. It does not explicitly differentiate itself from siblings such as search_recipes or recipes_get, so it stops short of a 5.
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 no when-to-use guidance, no prerequisites, and no indication of when to prefer this over search_recipes or other siblings. Usage is only implied by the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recipesSearch recipesBRead-onlyIdempotentInspect
Full-text search across published recipe titles, ingredients, and instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so safety is fully covered. The description does add one meaningful behavioral fact beyond the annotations: that only *published* recipes are searched. It says nothing about ranking, result limits, or pagination, so it lands at a solid-but-partial 3.
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?
One sentence, front-loaded with the verb and scope, with no filler. It is appropriately sized for a single-parameter search tool, though the terseness leaves useful content unstated rather than overstating.
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?
With a one-parameter schema at full coverage and rich annotations, the description covers the essentials of what is searched. It is incomplete on the operational side: no mention of result ordering, expected result count, or truncation behavior, and there is no output schema to fall back on.
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?
There is a single parameter with 100% schema description coverage ('Search query'), so the schema baseline is 3. The description adds value by clarifying that the query is matched against titles, ingredients, and instructions, i.e. full-text rather than a name-only lookup, but no syntax, matching rules, or tokenization details are given.
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?
States a specific verb and resource ('full-text search across published recipe titles, ingredients, and instructions') and scopes it to published content. It does not, however, distinguish itself from siblings like ingredients_search_recipes or categories_recipes, which an agent must infer on its own.
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 when-to-use, when-not-to-use, or alternative-routing guidance is given. With three other search/list siblings in the set, the description should have said when this tool is preferred over ingredients_search_recipes or recipes_list, but it offers nothing.
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.
6 tool updates
- First observed
categories_list - First observed
categories_recipes - First observed
ingredients_search_recipes - First observed
recipes_get - First observed
recipes_list - First observed
search_recipes
Related MCP Connectors
Danish grocery catalog as MCP tools: live offers across all major chains, stores, EAN lookup, stock.
Read-only Hebrew AI-agent recipe library with search and full-text retrieval.
- CoPantryOAuthcom.copantry
Your household recipes, pantry, meal plan and shopping lists.
Search structured recipes, scale servings, match pantry ingredients, and build shopping lists.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides access to Danish food and nutrition data from Open Food Facts and DTU Frida, enabling keyword search, barcode lookup, and detailed food information with per-100g macros and source attribution.5Apache 2.0
- AlicenseAqualityBmaintenanceDanish grocery catalog as MCP tools: live offers across all major chains, stores, EAN lookup, stock.6MIT
- AlicenseAqualityBmaintenanceSearch and read recipes from the English Wikibooks Cookbook, with tools to rescale ingredient lists to a target number of servings.4361 npmMIT
- AlicenseAqualityCmaintenanceReads French recipes from Supertoinette, exposing recipe details and ingredients, and rescales quantities honestly according to serving counts or factors without requiring an API key.6323 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.