Skip to main content
Glama
RBV801

recipal-mcp-unofficial

by RBV801

recipal-mcp-unofficial

ReciPal の栄養ラベル API 用の MCP サーバーです。AI アシスタントがレシピ、原材料、サブレシピを直接読み取り・編集できるようにします。Web UI では何時間もかかる一括操作も含みます。

非公式です。 ReciPal とは提携・承認・サポート関係にありません。製品の公開 API に対してユーザーが構築したものです。

暫定プロジェクト — このリポジトリはアーカイブされます。 ReciPal は公式 MCP サーバーを開発中です。彼らのサーバーがリリースされたら、このサーバーはそれを指すように更新され、読み取り専用でアーカイブされます。これに依存するような重要なものは構築しないでください。SUNSET.md を参照してください。

有効な有料 ReciPal サブスクリプションが必要です。 API アクセスは有料機能であり、キーはアカウント設定の API access から取得します。これがないと、このサーバーは何もできません。

目的

ReciPal の Web UI は、1 つのレシピを編集するには十分です。しかし、40 個のレシピに同じ操作を行う場合(カタログ全体のサービングサイズを修正する、(copy) サフィックスが付いた原材料名を変更する、1 つの原材料だけが異なる製品バリエーション群を作成するなど)は苦痛です。このサーバーは API を公開するため、アシスタントがドライランを先に行い、ループでその作業を実行できます。

特に有用なツールは bulk_clone_and_swap です。完全に設定された 1 つのレシピをテンプレートとして、N 回クローンし、各クローンで 1 つの原材料を交換します。ラベル設定、タグ、サービングサイズは引き継がれるため、クローンは一貫性のあるものになります。

Related MCP server: cookwith-mcp

スコープと配布

意図的に狭く、今後もそのままです:

  • クローンしてビルドするソース。 ワンクリックプラグインバンドル、npx パッケージ、MCP ディレクトリやマーケットプレイスへの掲載はありません。これは ReciPal への約束であり、見落としや ToDo ではありません。

  • npm には公開されていません。 package.json は意図的に private とマークされています。

  • ReciPal の要請により recipal-mcp-unofficial と命名されており、公式サーバーと誤認されることはありません。

パッケージ化された配布、マーケットプレイスへの提出、またはより親しみやすい消費者向けインストールパスを追加するプルリクエストは拒否されます。歓迎される内容については CONTRIBUTING.md を参照してください。

インストール

Node.js 18 以降が必要です。

git clone https://github.com/BlackBlack/recipal-mcp-unofficial.git
cd recipal-mcp-unofficial
npm install
npm run build

次に、MCP クライアントに登録します。Claude Code の場合:

claude mcp add --transport stdio recipal-mcp-unofficial \
  --env RECIPAL_API_KEY=your_key_here \
  -- node /absolute/path/to/recipal-mcp-unofficial/build/index.js

Claude Desktop の場合は、claude_desktop_config.json に追加します:

{
  "mcpServers": {
    "recipal-mcp-unofficial": {
      "command": "node",
      "args": ["/absolute/path/to/recipal-mcp-unofficial/build/index.js"],
      "env": { "RECIPAL_API_KEY": "your_key_here" }
    }
  }
}

クライアントを再起動し、レシピの一覧を表示するように依頼します。19 個のツールが利用可能になるはずです。完全な手順は docs/SETUP.md にあります。

⚠️ 重要なカタログに接続する前にこれを読んでください

confirm: true と dry_run ガードは、あなたではなくモデルによって提供されます。 これらは、曖昧なプロンプトが損害を引き起こすのを防ぎます。しかし、決意のある、または混乱したエージェントを止めることはできません — レシピを削除すると判断したアシスタントは、同じ呼び出しで confirm: true を渡します。ReciPal には元に戻す機能がありません。

そのため、実際に破壊的なツールはデフォルトでオフになっています。それらを有効にすることは、会話ではなく、サーバーを実行する人による意図的な行為です:

環境変数

有効になるもの

ゲートの理由

RECIPAL_MCP_ALLOW_DELETE=1

delete_recipe, delete_recipe_ingredient

永続的なデータ損失、元に戻せない

RECIPAL_MCP_ENABLE_RAW=1

recipal_request

任意のメソッドで任意のエンドポイントを呼び出せる

それ以外のすべて — すべての読み取り、および通常の作成・更新ツール — はそのまま動作します。一括ツールは常に利用可能ですが、デフォルトで dry_run: true であり、呼び出し元が dry_run: false と confirm: true の両方を渡さない限り実行を拒否します。

推奨されるプラクティス:まず使い捨てのレシピで作業してください。 いくつかのエンドポイントはドキュメントが示唆するものとは異なる動作をします(既知の制限を参照)。

設定

変数

デフォルト

目的

RECIPAL_API_KEY

—

必須。 ReciPal アカウント設定 → API access から取得

RECIPAL_MCP_ALLOW_DELETE

オフ

2 つの削除ツールを公開

RECIPAL_MCP_ENABLE_RAW

オフ

recipal_request を公開

RECIPAL_MCP_DEBUG

オフ

完全なリクエストボディを stderr に記録。ボディにはレシピデータが含まれ、クライアントは stderr をディスクに記録する可能性が高いため、通常はオフのままにしてください

RECIPAL_MCP_MAX_RETRIES

3

HTTP 429 での再試行

RECIPAL_API_BASE

https://www.recipal.com/api/v1

エンドポイントを上書き。https かつ recipal.com ホストである必要があります

RECIPAL_MCP_ALLOW_CUSTOM_BASE

オフ

非 recipal.com ベースを許可。API キーはその宛先に送信されるため、意図的に面倒になっています

.env.example を参照してください。

ツール

合計 22 ツール、デフォルトで 19 個が公開されています。すべてのパラメータを含む生成リファレンス:docs/TOOLS.md

グループ

ツール

読み取り

list_recipes, get_recipe, get_recipe_nutrition, list_recipe_ingredients, get_recipe_ingredient, list_ingredients, get_ingredient, get_recipe_label

レシピ書き込み

create_recipe, create_recipe_shortcut, update_recipe, scale_recipe, create_subrecipe, delete_recipe†

原材料行の書き込み

create_recipe_ingredient, update_recipe_ingredient, delete_recipe_ingredient†, update_ingredient

ラベル

request_label_render

一括

bulk_create_subrecipes, bulk_clone_and_swap

エスケープハッチ

recipal_request†

† デフォルトで無効。

書き込みツールは、固定パラメータリストではなく、オープンな fields オブジェクトを受け取ります。ReciPal の公開ドキュメントは完全なレシピ属性リストの前に切り詰められているため、フィールド名をハードコーディングすると推測になってしまいます。代わりに fields はそのまま渡され、Rails スタイルのフォームエンコード(recipe[name]=...)で送信されます。文書化されていない属性もコード変更なしで動作します。エンドポイントが JSON を好む場合は as_json: true を設定します。

書き込む前に実際のレシピを読んでください。 既存のレシピに対する get_recipe は、アカウントが使用する正確な属性名を示します。

既知の制限

これらは実際のもので、ライブ API に対して検証済みであり、これを基に構築する前に知っておく価値があります:

  • create_recipe_shortcut は動作しません。 試したすべての ingredients 配列形式で HTTP 422 を返します。ReciPal のドキュメントはパラメータリストの前に切り詰められているため、正しい形式は不明です。create_recipe + create_recipe_ingredient を使用するか、scale_recipe を使用して設定済みテンプレートをクローンしてください。ツールは形式を発見できるように残されています — 解決した場合は PR を開いてください。

  • PUT /recipe_ingredients/{id} は ingredient_id を静かに無視します。 元の原材料がまだ添付された状態で HTTP 200 を返します。ある原材料を別のものに交換するには、削除してから作成する必要があり、bulk_clone_and_swap は内部でこれを行います。

  • ReciPal はほとんどすべてのレスポンスを二重にラップします — {recipe: {recipe_ingredients: [{recipe_ingredient: {…}}]}}。外側のエンベロープからフィールドを読み取ると、エラーなしで undefined になります。このサーバーを拡張する場合は、既存の unwrap() / extractRecords() ヘルパーを使用してください。

  • scale_recipe と create_subrecipe のパラメータ名は公開されていません。 パススルー fields で動作しますが、ループする前に使い捨てレシピでそれぞれ一度実行し、レスポンスを読んでください。

  • ドキュメントでは /recipes/{id}/scale は PUT とされていますが、実際に動作するのは POST です。 テストせずに「修正」しないでください。

  • ページネーションヘルパーはありません。 list_recipes は 1 ページあたり最大 100 件です。自分でページを進めてください。

レート制限

ReciPal は、おおよそ 175,000 リクエスト/週、1,000 リクエスト/分(それを超えると HTTP 429)、および最大 5 つの同時ラベルレンダリングを文書化しています。このサーバーは 429 を Retry-After と指数バックオフで尊重し、残り 100 リクエスト未満になると stderr に警告し、すべての一括ループを設定可能な遅延で厳密に順次実行します。ラベルレンダリングを並列化しないでください。

開発

npm run typecheck   # tsc --noEmit
npm run build       # -> build/index.js
npm test            # offline smoke tests, no API key or network needed
npm run gen:docs    # regenerate docs/TOOLS.md from the running server
npm run verify      # all of the above

docs/TOOLS.md は、ビルドされたサーバーを起動し、自身のツールリストを尋ねることで生成されるため、リファレンスがコードから逸脱することはありません。CI は古い場合に失敗します。ツールを追加または変更した場合は、npm run build && npm run gen:docs を実行して結果をコミットしてください。

上記のスコープ内での貢献を歓迎します — CONTRIBUTING.md から始め、ライブアカウントに対する変更の検証方法は docs/TESTING.md、各部分の連携方法は docs/DESIGN.md を参照してください。

ライセンス

Apache-2.0。

「ReciPal」はその所有者の商標であり、ここではこのソフトウェアが通信する対象を説明するためにのみ使用されています。

Available Tools

17 tools
bulk_clone_and_swapA

The copy-and-swap loop. For each entry: clone template_recipe_id via scale_recipe, rename it, then replace the designated ingredient line with a different ingredient_id. Runs sequentially and independently per entry, so one failure does not poison the rest. Defaults to dry_run:true.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true to execute.
dry_runNoDefault true.
entriesYesOne entry per new recipe.
delay_msNo
template_recipe_idYesThe fully-configured template recipe to clone from.
swap_recipe_ingredient_idYesThe recipe_ingredient line ID ON THE TEMPLATE that should be replaced. The clone's corresponding line is located by matching ingredient_id.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description usefully discloses sequential execution, per-entry independence, failure isolation, and the dry_run default, which is valuable safety context given no annotations are provided. However, it omits the confirm gate ('Must be true to execute') and does not clarify what a dry run returns or that actual persistence requires confirm=true and dry_run=false. This is a notable but not fatal behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four short sentences that front-load the core purpose and then add execution semantics, failure isolation, and the dry-run default. There is no filler, and every sentence contributes to an agent's ability to understand and invoke the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a bulk mutation tool with no annotations and no output schema, the description covers the core algorithm, sequential/independent execution, and the dry-run safety default. The main missing piece is explicit mention of the confirm flag, but the schema already documents that, so the description is reasonably complete for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (83%), so the baseline is 3. The description adds some algorithmic glue, such as cloning template_recipe_id via scale_recipe and swapping the designated ingredient line with each entry's ingredient_id, but it does not systematically illuminate parameters like confirm or delay_ms beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'The copy-and-swap loop' and then spells out the exact per-entry sequence: clone template_recipe_id via scale_recipe, rename it, then replace the designated ingredient line. This clearly distinguishes the tool from siblings like scale_recipe (single clone) and bulk_create_subrecipes (bulk create without swap), so an agent can identify its purpose without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly frames this as a batch loop over entries, which signals when to use it over single-item operations like scale_recipe. It does not explicitly name alternatives or say 'use this instead of X', but the 'for each entry' construction and the reference to scale_recipe provide enough context for an agent to infer the batch use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_create_subrecipesA

Flag many recipes as subrecipes, sequentially. Defaults to dry_run:true — returns the plan without touching anything. Set dry_run:false AND confirm:true to execute. Returns a per-recipe success/failure report including the new ingredient_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true to execute.
dry_runNoDefault true.
delay_msNoPause between calls (default 400).
recipe_idsYesRecipe IDs to flag.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description fully carries the behavioral burden. It discloses the dry-run default, states that nothing is touched in dry-run mode, explains the exact conditions required to execute, and mentions the per-recipe success/failure report with new ingredient_ids. This is unusually complete for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences carry all essential information: what the tool does, the safe default, the exact execution condition, and the return value. The most important safety information is front-loaded, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a bulk mutation tool with no output schema and no annotations, the description covers purpose, safety, execution conditions, and the returned report format sufficiently. It could be slightly more complete by explicitly noting the alternative single-item path, but it already gives an agent enough to call and interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful interaction semantics beyond the schema: dry_run defaults to true, and both dry_run:false and confirm:true are required together to execute. It also connects 'sequentially' to the delay_ms parameter concept, adding value over the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Flag many recipes as subrecipes, sequentially.' It identifies the resource (many recipes) and the bulk nature, distinguishing it from the singular create_subrecipe sibling by implication, though it does not explicitly name the alternative or clarify the naming mismatch between 'create' and 'flag'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete execution guidance: dry_run defaults true, and execution requires both dry_run:false and confirm:true. This tells the agent exactly when and how to safely invoke the tool, but it does not explicitly state when to choose this tool over create_subrecipe for single-recipe cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_recipeA

Create a new empty recipe. POST /recipes. Prefer scale_recipe (clone a fully-configured template) when you need label settings to match existing recipes.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesOpen key/value object of attributes. Keys are passed straight through to the ReciPal API namespaced under the resource (e.g. {name, package_yield_quantity, package_yield_unit, servings, packages, suggested_serving, sku, preparation, visual_unit_of_measure}). Call get_recipe on an existing recipe first to see the exact attribute names this account uses. Note that tags cannot be set here -- ReciPal accepts the request and silently ignores a tags string, and errors on other shapes. Tags do carry forward through scale_recipe when cloning a tagged template.
as_jsonNoSend JSON instead of form encoding.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses that the resulting recipe is 'empty' and that the operation is a POST to /recipes, which signals a non-idempotent create. However, it does not mention required permissions, side effects, or what happens on success or failure, so important behavioral context is still missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The core action is front-loaded, the endpoint is a useful quick signal, and the alternative guidance is tucked naturally into the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description plus the rich schema is largely complete for invoking the tool: the agent knows what it creates, when to use an alternative, and what fields are expected. The main gap is that there is no output schema and the description doesn't state what the API returns, which could matter for chaining the created recipe into subsequent calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already well documented in the input schema. The tool description itself adds no parameter-level detail, but that is acceptable because the schema provides example attribute names and warns about tag behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action and resource: 'Create a new empty recipe' and even gives the endpoint POST /recipes. The word 'empty' distinguishes it from clone-style operations, and the sibling list shows alternatives like create_recipe_shortcut and create_subrecipe, so there is no ambiguity about what this tool creates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to prefer an alternative: 'Prefer scale_recipe (clone a fully-configured template) when you need label settings to match existing recipes.' This gives a concrete, decision-relevant condition rather than leaving the agent to infer when scale_recipe should be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_recipe_ingredientA

Add an ingredient line to a recipe. POST /recipes/{id}/recipe_ingredients. Accepts ingredient_id (required) plus unit + quantity, or total_grams.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYes{ingredient_id (required), unit?, quantity?, waste?, total_grams?}. unit must be one of the ingredient's available units.
as_jsonNo
recipe_idYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It reveals it is a POST creation endpoint but does not mention side effects, ordering, duplicate handling, permissions, failure modes, or response behavior. For a mutating tool this is a meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action, and contains no filler. The endpoint and the two payload alternatives are stated compactly without sacrificing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Core invocation is covered: the endpoint and accepted payload shapes are clear. But with no output schema, no annotations, and a nested fields object, the description omits the meaning of as_json, return details, and preconditions like the recipe needing to exist. An agent could call it for basic cases but not with full confidence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (33%), so the description must compensate. It adds valuable OR-logic: ingredient_id with unit+quantity, or total_grams, which goes beyond the schema's flat field list. However, the as_json parameter remains completely undocumented, and the nested field names are already present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Add an ingredient line to a recipe.' This is easily distinguished from siblings like create_recipe (whole recipe creation) and update_recipe_ingredient (editing an existing line). Including the endpoint further removes ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The verb and resource imply the tool's use case: when you need to add a new ingredient line to an existing recipe. However, the description does not explicitly mention alternatives or situations when this tool should not be used, such as updating an existing line with update_recipe_ingredient. Context is present but exclusions are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_recipe_shortcutA

Create a complete recipe with its ingredients in one request. POST /recipes/shortcut. The fastest path for building many recipes. Requires ingredient_ids and ingredient_weights: parallel lists of the same length, weights in grams. Either may be given as an array or a comma-separated string. Note this does NOT inherit label settings from an existing recipe -- serving size, package yield and tags all come back unset, so use scale_recipe to clone a configured template when label settings matter.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesOpen key/value object of attributes. Keys are passed straight through to the ReciPal API namespaced under the resource (e.g. {name, package_yield_quantity, package_yield_unit, servings, packages, suggested_serving, sku, preparation, visual_unit_of_measure}). Call get_recipe on an existing recipe first to see the exact attribute names this account uses. Note that tags cannot be set here -- ReciPal accepts the request and silently ignores a tags string, and errors on other shapes. Tags do carry forward through scale_recipe when cloning a tagged template. Also include ingredient_ids and ingredient_weights: parallel lists of the same length, weights in grams. Either may be an array or a comma-separated string.
as_jsonNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it discloses a critical non-obvious behavior: label settings are not inherited, so serving size, package yield, and tags come back unset. It also notes the POST endpoint and the parallel-list constraint. It does not describe error behavior or authentication, but the material caveats are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then the endpoint, then usage context, then parameter constraints, then the critical caveat and alternative. Every sentence adds value, and the structure makes it easy for an agent to extract the key facts quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is quite complete for a complex creation tool: it explains the endpoint, required nested fields, constraints, and the key behavioral caveat about label settings. However, there is no output schema and the response shape is not described, so the agent still lacks full information about what the tool returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, so the description must compensate. It does by clarifying that ingredient_ids and ingredient_weights are required, must be parallel lists of equal length, use grams, and may be arrays or comma-separated strings. The as_json parameter is left undocumented, but it is a simple boolean and the more complex fields parameter is well explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Create a complete recipe with its ingredients in one request.' This clearly differentiates it from sibling tools like create_recipe and create_recipe_ingredient by emphasizing the combined recipe-plus-ingredients behavior and the shortcut endpoint.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly positions this as 'the fastest path for building many recipes' and provides an alternative: 'use scale_recipe to clone a configured template when label settings matter.' This gives the agent a clear when-to-use and when-not-to-use rule with a named sibling alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_subrecipeA

Flag an existing recipe as a subrecipe so it becomes usable as an ingredient in other recipes. POST /recipes/{id}/create_subrecipe. Returns the new ingredient record — capture its ingredient_id, that is what you add to other recipes.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoOptional attributes (e.g. name).
as_jsonNo
recipe_idYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears the full burden. It does disclose the mutation effect ('Flag an existing recipe as a subrecipe') and the return behavior ('Returns the new ingredient record — capture its ingredient_id'), which is helpful. However, it does not mention reversibility, permissions, idempotency, or potential side effects on the original recipe record.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences carry the core purpose, the endpoint, the return value, and actionable follow-up instructions. There is no filler, and the most important behavior is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives the essential flow for the main use case and names the output field to capture. But because there is no output schema and no annotation context, the vague optional fields object and the unexplained as_json flag leave an agent with uncertainty about edge cases and response formatting.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The endpoint string ('POST /recipes/{id}/create_subrecipe') and the phrase 'existing recipe' imply that recipe_id is the ID of an existing recipe. The schema already documents fields as optional attributes. However, as_json is not explained anywhere, and the description does not add detail about what kinds of fields are accepted despite the schema coverage being only 33%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific action ('Flag an existing recipe as a subrecipe') and explains the consequence ('so it becomes usable as an ingredient in other recipes'). This clearly distinguishes it from sibling tools like create_recipe or create_recipe_ingredient, and the endpoint reference reinforces what resource is affected.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: when an existing recipe should be promoted to a subrecipe/ingredient. It also tells the agent what to do with the result, but it does not explicitly contrast with alternatives such as bulk_create_subrecipes or explain when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ingredientA

Get one ingredient with its full nutrition data and available units.

ParametersJSON Schema
NameRequiredDescriptionDefault
ingredient_idYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It accurately discloses that the call retrieves one ingredient and that the response contains nutrition data and available units, but it does not describe behavior for missing IDs, error handling, or any access constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It names the action, object, and key response contents in a compact and scannable form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter getter, the description names the returned data and is not misleading. Still, with no output schema, no annotations, and siblings like get_recipe_ingredient and list_ingredients, it lacks enough context to fully disambiguate the correct tool and confirm response semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, ingredient_id, is self-descriptive, and the description reinforces that it selects a single ingredient. However, schema description coverage is 0%, and the description does not explain the expected ID format or how to discover valid IDs, leaving the agent with only the property name and type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('get'), a clear resource ('one ingredient'), and the response scope ('full nutrition data and available units'). This distinguishes it from list_ingredients (a plural listing) and implies it is a master-ingredient lookup rather than a recipe-scoped ingredient lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance about when to use this tool instead of related tools such as list_ingredients or get_recipe_ingredient. It implies a single-record lookup, but it provides no exclusions, prerequisites, or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recipeA

Get one recipe in full, including nutrition, serving size, package yield, tags and label settings. Use this to read a template recipe's exact settings before cloning it.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipe_idYesReciPal recipe ID.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden; it explicitly labels the call as reading exact settings and enumerates the returned fields, making the read-only nature apparent. It omits error/authorization details, which are not central for a simple getter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first front-loads the operation and contents, the second adds a precise usage trigger. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple single-id getter with no output schema; the description adequately covers what the response contains and when to call it. No critical missing context remains for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the sole parameter recipe_id is already described as 'ReciPal recipe ID.' The description adds no further parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific operation 'Get one recipe in full' and enumerates the returned content (nutrition, serving size, package yield, tags, label settings). This clearly distinguishes it from the nutrition-only sibling get_recipe_nutrition and other recipe-specific getters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly directs the agent to use this tool 'to read a template recipe's exact settings before cloning it,' giving a concrete trigger. It does not enumerate when to prefer siblings such as get_recipe_nutrition or list_recipe_ingredients, but the use case is clear enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recipe_ingredientB

Get one ingredient line on a recipe.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipe_idYes
recipe_ingredient_idYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of explaining behavior. It indicates a read operation via 'Get,' but does not disclose the response shape, error behavior, authorization requirements, or any reliance on the recipe context. This is not misleading, but it adds little behavioral detail beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler or redundancy. Every word contributes to identifying the resource and the operation, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with two self-explanatory ID parameters, the description is minimally sufficient. However, with no annotations, no output schema, and no mention of relationship to sibling tools like list_recipe_ingredients or get_ingredient, it leaves some context gaps that an agent would need to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain either parameter. The names recipe_id and recipe_ingredient_id are reasonably clear, but the description does not clarify that recipe_ingredient_id identifies a line within the recipe or indicate where these IDs come from, so it does not compensate for the lack of schema-level parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' with a precise resource, 'one ingredient line on a recipe,' which clearly distinguishes it from list_recipe_ingredients (which returns multiple lines) and get_ingredient (which would fetch ingredient master data rather than a recipe-specific line). The singular phrasing signals exactly which resource the agent will retrieve.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The singular 'Get one' implies this tool is for fetching a specific recipe ingredient line when both IDs are known, rather than listing all lines. However, the description does not explicitly state when to use it over alternatives, mention how to obtain the required IDs, or rule out sibling tools, so the usage guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recipe_nutritionA

Get only the nutrition sub-object for a recipe.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipe_idYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. It discloses that the response is limited to the nutrition sub-object, which is valuable. However, it does not mention error behavior, whether nutrition may be absent, or any authentication requirements, leaving some behavioral context unspecified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no filler. The key qualifier 'only' is front-loaded, making the tool's scope immediately clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only retrieval tool, the description provides the essential return-semantics: the nutrition sub-object. It does not explain the content of that sub-object, but with no output schema and a simple operation, the agent has enough information to invoke the tool correctly with recipe_id.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines recipe_id with zero description coverage, and the tool description does not explicitly explain the parameter. The mention of 'a recipe' provides contextual anchor for recipe_id, but the description does not add details about format or how to obtain the ID. Since the parameter name is self-explanatory, the gap is moderate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the specific resource ('only the nutrition sub-object for a recipe'). The word 'only' explicitly distinguishes it from broader tools like get_recipe, leaving no ambiguity about its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'only the nutrition sub-object' conveys a clear use case: when just the nutrition data is needed rather than the full recipe. It does not explicitly name alternatives or exclusion conditions, but the selectivity is strongly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ingredientsA

List the account's ingredient library. Subrecipes appear here once created, which is how you find the ingredient_id needed to add a subrecipe to another recipe. Paginated; per_page max 20. Larger values are silently reduced to 20, so callers must paginate.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
searchNoOptional name filter, if supported.
per_pageNoDefault 20, max 20; larger values are silently reduced.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral transparency burden. It discloses important pagination behavior: per_page max 20, larger values silently reduced, and that callers must paginate. It also mentions that subrecipes appear in the list, which is a non-obvious behavior useful to callers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler, and information is front-loaded with the core purpose first. Each sentence earns its place: purpose, use case, and pagination caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no output schema, the description covers the essential operational details: account scope, pagination behavior, silent cap, and the use case for finding ingredient_id. It does not describe the response shape, but the description gives enough for an agent to know what the tool returns and how to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, but the description adds little beyond the schema. It repeats the per_page cap that the schema already documents, and provides no additional meaning for the page or search parameters beyond what the schema minimally says. The undocumented page parameter is not explained in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation: 'List the account's ingredient library.' It distinguishes itself from siblings like list_recipes (recipes vs. ingredients) and list_recipe_ingredients (ingredients within a recipe) by specifying the ingredient library scope. The added context about subrecipes and ingredient_id clarifies its unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a specific use case: finding the ingredient_id needed to add a subrecipe to another recipe. However, it does not explicitly contrast with list_recipes, get_ingredient, or list_recipe_ingredients, so the when-to-use guidance is implied rather than clearly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_recipe_ingredientsA

List every ingredient line on a recipe, with recipe_ingredient IDs, ingredient IDs, quantities, units and total_grams.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipe_idYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It discloses the returned fields and the scope ('every ingredient line'), but it does not mention whether the operation is read-only, whether there is pagination/ordering, or how subrecipes are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one tightly scoped sentence that leads with the action and resource, then enumerates useful output fields. There is no filler or redundant restating of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter list tool with no output schema, the description adequately conveys what is returned and implies the input. It could be more complete with explicit usage boundaries or parameter semantics, but it is largely sufficient for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single recipe_id parameter has no schema-level description and overall schema coverage is 0%. The description indirectly clarifies that recipe_id identifies the recipe whose lines are listed, but it does not explicitly document the parameter or provide format/source context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('every ingredient line on a recipe') and names the exact output fields (recipe_ingredient IDs, ingredient IDs, quantities, units, total_grams). This clearly distinguishes it from siblings like get_recipe_ingredient (singular) and list_ingredients (global ingredient catalog).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you need all ingredient lines for a given recipe. However, it provides no explicit guidance about when to prefer get_recipe_ingredient for a single line or list_ingredients for a catalog, and it names no alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_recipesA

List recipes from ReciPal with IDs, names, and tags. Paginated; per_page max 20. Larger values are silently reduced to 20, so callers must paginate.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number (default 1).
per_pageNoItems per page (default 20, max 20; larger values are silently reduced).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the transparency burden. It discloses the pagination behavior, the hard cap of 20, the silent reduction of larger values, and the need to paginate. This is valuable behavioral context beyond the bare schema and accurately signals that this is a read-only list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence front-loads what the tool returns, and the second adds the essential pagination warning. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 fully documented parameters, the description covers what is returned, the pagination constraint, and the caller's responsibility. No output schema exists, but the described fields are enough for an agent to understand the result shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains page and per_page in full. The description's mention of per_page max 20 and silent reduction mainly reiterates what the schema says, adding no new parameter-level meaning. Baseline 3 is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a concrete resource ('recipes from ReciPal'), and the included fields ('IDs, names, and tags'). This clearly distinguishes it from the relevant siblings, such as get_recipe for fetching a single recipe or list_recipe_ingredients for a different resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes when to use this tool: to list recipes, with the important caveat that results are paginated and per_page is capped at 20. It does not explicitly mention alternatives or conditions for choosing get_recipe instead, but the list-vs-get context is strongly implied by the wording.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scale_recipeA

Copy (and optionally scale) an existing recipe. POST /recipes/{id}/scale. This is the copy-and-swap primitive: cloning a configured template carries its label settings and tags forward, so you only replace one ingredient afterward. Pass a scale factor of 1 for a straight copy.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoe.g. {name: 'New Recipe Name', scale_factor: 1}. Parameter names for this endpoint are not published; run once against a throwaway recipe to confirm.
as_jsonNo
recipe_idYesRecipe to copy.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and largely meets it: it discloses the copy-and-swap semantics, notes that label settings and tags are carried forward, and warns that endpoint parameter names are unpublished. It does not cover response or error behavior, but the core mutation intent is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: operation, endpoint, behavioral intent, and scale-factor guidance in three short sentences. Every sentence earns its place, and no filler is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, this description is strong: it covers the copy-and-swap scenario, the optional scale factor, and the unpublished-fields risk with a practical workaround. The main remaining gap is the meaning of as_json and the absence of return-value guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The fields object is given a concrete example with name and scale_factor, plus a practical caveat about unpublished parameter names, adding real value beyond the schema. recipe_id is adequately described in the schema, but as_json remains unexplained in both the description and the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete action ('Copy (and optionally scale) an existing recipe') and a specific resource, and adds meaningful context by explaining that cloning a configured template carries label settings and tags forward. This clearly distinguishes it from create, update, and bulk-clone sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description identifies the intended use case: cloning a configured template and then replacing one ingredient afterward, and it clarifies that a scale factor of 1 produces a straight copy. It does not explicitly name alternatives or exclusion conditions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_ingredientA

Update an ingredient in the library. PUT /ingredients/{id}. Use for renaming (e.g. stripping '(copy)' suffixes).

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYese.g. {name: 'Vanilla Concentrate'}
as_jsonNo
ingredient_idYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden, but it only restates the mutation and offers a use example. It does not disclose whether the update is partial or a full PUT replacement, what fields are accepted beyond name, whether auth is required, what the response looks like, or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the operation, the endpoint, and the intended use case in two sentences. There is no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with no annotations, no output schema, an undocumented 'as_json' boolean, and a flexible nested 'fields' object, this description is not complete enough for fully safe autonomous invocation. It gives good purpose but lacks behavioral and response details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to the 'fields' parameter via the renaming use case and connects ingredient_id to the resource path. However, schema coverage is only 33%, and the 'as_json' parameter is completely unexplained in both schema and description, so the description only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation (update), the resource (an ingredient in the library), and the exact HTTP endpoint (PUT /ingredients/{id}). The phrase 'in the library' helps distinguish this from sibling tools like update_recipe_ingredient, which operate at the recipe level.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit use case: renaming ingredients, such as stripping '(copy)' suffixes. It does not explicitly name alternatives or state when not to use the tool, but the library context and concrete example provide clear practical guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_recipeA

Update a recipe's attributes. PUT /recipes/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesOpen key/value object of attributes. Keys are passed straight through to the ReciPal API namespaced under the resource (e.g. {name, package_yield_quantity, package_yield_unit, servings, packages, suggested_serving, sku, preparation, visual_unit_of_measure}). Call get_recipe on an existing recipe first to see the exact attribute names this account uses. Note that tags cannot be set here -- ReciPal accepts the request and silently ignores a tags string, and errors on other shapes. Tags do carry forward through scale_recipe when cloning a tagged template.
as_jsonNo
recipe_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It adds useful behavioral detail: tags are silently ignored or error depending on shape, and keys are passed through to ReciPal namespaced under the resource. However, it does not disclose whether the update is partial or full replacement, what the response contains, or any side effects or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core description is a single front-loaded sentence with the endpoint, and the longer parameter description is dense with useful caveats rather than fluff. The scale_recipe note is slightly tangential but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description should cover return/error behavior and update semantics; it does not. But it does provide enough field-level guidance and a prerequisite for an agent to likely call the tool correctly for the main use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The fields parameter is richly explained with example keys, namespacing behavior, and a get_recipe first instruction, compensating for low schema coverage. However, as_json is left undocumented, and recipe_id only appears by name and in the URL pattern, so the description does not fully compensate for the 33% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the exact operation: updating a recipe's attributes, reinforced by the PUT /recipes/{id} endpoint. The resource (recipe, not recipe_ingredient or ingredient) and action are unambiguous, distinguishing it from siblings like update_recipe_ingredient and create_recipe.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for modifying an existing recipe and gives a practical prerequisite (call get_recipe first to see account-specific attribute names). It does not explicitly say when to prefer this tool over alternatives such as create_recipe or scale_recipe, and only notes an exclusion for tags.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_recipe_ingredientA

Update one ingredient line. PUT /recipes/{id}/recipe_ingredients/{ri_id}. NOTE: this endpoint silently ignores ingredient_id — it returns 200 with the original ingredient still attached. To swap one ingredient for another you must delete the line and create a new one.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYes{unit?, quantity?, waste?, total_grams?} — ingredient_id is ignored.
as_jsonNo
recipe_idYes
recipe_ingredient_idYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It goes beyond the schema by revealing that the endpoint silently ignores ingredient_id and returns 200 with the original ingredient still attached. This is a significant non-obvious behavior that would otherwise lead to silent data corruption. It does not describe all side effects or response details, but the most critical trap is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the operation, gives the endpoint, then flags the critical caveat and workaround. Every sentence earns its place with no redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers the core operation and the main failure mode well. However, it does not explain what the response contains beyond a 200 status, and the as_json parameter remains unexplained. The tool is usable for a simple update, but the context around parameter behavior and return value is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, so the description needed to compensate. The PUT path usefully maps recipe_id and recipe_ingredient_id, and the note reinforces that ingredient_id is ignored. However, as_json is entirely undocumented in both the schema and the description, and the fields object's allowed keys are only partially addressed through schema text, not the description. This leaves a meaningful semantic gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action and resource: 'Update one ingredient line,' reinforced by the PUT path identifying recipe and recipe_ingredient IDs. It is specific enough to distinguish updating a recipe ingredient line from updating a recipe or an ingredient master record, though it does not explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('Update one ingredient line') and clear when-not-to-use guidance: attempting to swap an ingredient via ingredient_id silently fails, and the tool must not be used for that purpose—delete and create instead. This directly prevents a likely misuse.

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.

  1. 17 tool updatesv0.6.2
    • First observedbulk_clone_and_swap
    • First observedbulk_create_subrecipes
    • First observedcreate_recipe
    • First observedcreate_recipe_ingredient
    • First observedcreate_recipe_shortcut
    • First observedcreate_subrecipe
    • First observedget_ingredient
    • First observedget_recipe
    • First observedget_recipe_ingredient
    • First observedget_recipe_nutrition
    • First observedlist_ingredients
    • First observedlist_recipe_ingredients
    • First observedlist_recipes
    • First observedscale_recipe
    • First observedupdate_ingredient
    • First observedupdate_recipe
    • First observedupdate_recipe_ingredient

TDQS

A3.8/5.0

Scored across 17 tools

Disambiguation4/5

Most tools target distinct resources or actions, and descriptions clearly separate list/get/create/update/bulk workflows. A few overlaps exist—get_recipe versus get_recipe_nutrition, and create_recipe versus create_recipe_shortcut versus scale_recipe—but the descriptions are detailed enough to prevent serious misselection.

Naming Consistency5/5

Tool names consistently follow lowercase snake_case verb_noun patterns like list_recipes, get_recipe, create_recipe, update_recipe, and bulk_create_subrecipes. Compound names like create_recipe_shortcut and bulk_clone_and_swap are minor extensions but do not break the overall predictable convention.

Tool Count4/5

17 tools is slightly above the ideal 3-15 range, but the count is justified by the combination of single-resource operations, bulk utilities, and shortcut creation. Each tool serves a recognizable recipe-management workflow, so the set feels somewhat heavy but not bloated.

Completeness2/5

The tool surface covers read, create, update, copy, and bulk operations, but there are no delete endpoints for recipes, ingredients, or recipe ingredient lines. This is a significant gap because update_recipe_ingredient silently ignores ingredient_id and the documentation explicitly says swapping requires deleting the line and creating a new one—yet no delete tool exists to complete that workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

  • MCP server that lets AI assistants use all OneSchema features exposed via the public API.

  • MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud

  • Your Recipes, Beautifully Kept. weReci MCP server lets Claude and other MCP clients work with your personal weReci cookbook, the recipes you've imported from the web, social video and scanned family books. Interactive UI in the chat. weReci supports MCP Apps, so in clients that support it, tools return live views instead of plain text: recipe cards, shopping lists and your recipe graph. Clients without MCP Apps support get the same results as text. Find and read recipes: search your collection in plain language, open any recipe in full, or get an overview of what's in your cookbook. Cook with them: scale a recipe to any serving count, with cooking adjustments as well as amounts. Get substitution suggestions with ratios and caveats. Explore connections: browse your recipe graph (shared ingredients, techniques and cuisines), trace the connection between two recipes, and look up where a dish sits on the cuisine map. Themed collections: list the themed groups weReci curates from your cookbook, or ask it to reshuffle them. Shop: build a shopping list from one or more recipes, add or update items, and read the list back. Share: email a recipe to someone. Longer jobs like conceit reshuffles run in the background, with tools to check their progress. Everything is scoped to your own cookbook, or to a shared one you've joined.

  • Hosted MCP server to manage a restaurant menu from AI agents - 39 tools over the DuckHub API.

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    An MCP server that transforms AI assistants into personal chefs by providing recipe recommendations and meal planning features based on the HowToCook repository.
    5
    539 npm
    779
    ISC
  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that enables AI-powered recipe generation and transformation using natural language, supporting dietary restrictions, allergies, and nutritional goals.
    2
    13 npm
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for MealMastery AI meal planning that enables users to manage meal plans, recipes, and grocery lists through natural language conversation with AI agents like Claude.
    32 npm
    MIT