recipal-mcp-unofficial
recipal-mcp-unofficial
ReciPal 영양성분 라벨 API용 MCP 서버입니다. AI 어시스턴트가 레시피와 재료를 직접 읽고 편집할 수 있게 해주며, 웹 UI에서 몇 시간이 걸릴 대량 작업도 포함합니다.
비공식. ReciPal과 제휴, 보증, 지원 관계가 아닙니다. 제품 사용자들이 공개 API를 대상으로 만든 것입니다.
임시 프로젝트 — 이 저장소는 곧 보관(archive)됩니다. ReciPal이 공식 MCP 서버를 만들고 있습니다. 공식 서버가 출시되면 이 저장소는 해당 서버를 가리키도록 업데이트된 후 보관됩니다. 이 프로젝트에 의존하는 중요한 무언가를 만들지 마세요. 자세한 내용은 SUNSET.md를 참고하세요.
활성 유료 ReciPal 구독이 필요합니다. API 접근은 유료 기능이며, 키는 계정 설정의 API access에서 가져옵니다. 키가 없으면 이 서버는 아무것도 할 수 없습니다.
용도
ReciPal의 웹 UI는 레시피 하나를 편집하기에는 괜찮습니다. 하지만 40개를 한 번에 수정해야 할 때는 고통스럽습니다. 카탈로그 전체의 서빙 사이즈를 고치거나, (copy) 접미사로 들어온 재료 이름을 바꾸거나, 재료 하나만 다른 제품 변형 제품군을 만들 때 말이죠. 이 서버는 API를 노출해서 어시스턴트가 먼저 dry run을 수행한 뒤 반복 작업을 할 수 있게 해줍니다.
가장 유용한 도구는 bulk_clone_and_swap입니다. 완전히 구성된 레시피 하나를 템플릿으로 사용해 N개로 복제하고, 각 복제본에서 단일 재료를 교체합니다. 라벨 설정, 태그, 제공량이 함께 전달되어 복제본이 일관되게 생성됩니다.
Related MCP server: cookwith-mcp
범위와 배포
의도적으로 범위를 좁혔으며, 앞으로도 그럴 것입니다:
직접 복제해서 빌드하는 소스입니다. 원클릭 플러그인 번들,
npx패키지, MCP 디렉토리나 마켓플레이스 등록은 없습니다. 이는 ReciPal에 한 약속이며, 미뤄둔 일이나 할 일 목록이 아닙니다.npm에 게시하지 않습니다.
package.json은 의도적으로private로 표시되어 있습니다.ReciPal의 요청으로
recipal-mcp-unofficial로 명명되었으며, 공식 서버로 오인될 수 없도록 하기 위함입니다.
패키지 배포, 마켓플레이스 등록, 또는 더 쉬운 소비자 설치 경로를 추가하는 Pull Request는 거절됩니다. 어떤 기여가 환영받는지는 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.jsClaude 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에는 실행 취소가 없습니다.
그렇기 때문에 실제로 파괴적인 도구는 기본적으로 꺼져 있으며, 사용자가 명시적으로 활성화해야 합니다:
환경 변수 | 활성화되는 기능 | 이유 |
|
| 데이터 손실 위험 — 실행 취소 불가 |
|
| 모든 엔드포인트/메서드에 대한 원시 액세스 |
Delete 및 raw 도구는 기본적으로 꺼져 있습니다. 켜면 연결한 모든 클라이언트가 삭제를 실행할 수 있으므로, 실제 데이터로 작업하기 전에 먼저 재료(throwaway) 레시피에서 테스트하세요.
모든 쓰기 도구는 dry_run 및 confirm 가드를 지원합니다. 자세한 내용은 docs/TOOLS.md를 참고하세요. MCP 클라이언트가 승격된 도구 호출을 명시적으로 승인하지 않는 한 confirm은 자동으로 전달되지 않습니다.
⚠️ 소중한 카탈로그에 연결하기 전에 읽어보세요
confirm: true 및 dry_run 가드는 사용자가 아닌 모델이 제공합니다. 이 가드는 모호한 프롬프트가 피해를 입히는 것을 막아줍니다. 결단력 있는 또는 혼란스러운 에이전트를 막지는 못합니다 — 레시피를 삭제하기로 결정한 어시스턴트는 같은 호출에서 confirm: true를 전달할 것입니다.
그렇기 때문에 파괴적인 도구는 기본적으로 비활성화되어 있습니다. 활성화하는 것은 대화에 의한 결정이 아니라 서버를 실행하는 사람의 명시적인 결정입니다:
환경 변수 | 활성화되는 도구 | 비고 |
|
| 영구 삭제 — 복구 불가 |
|
| 어떤 엔드포인트든 호출 허용 (프로덕션에서 끄기) |
이 두 가지를 제외한 모든 도구는 기본적으로 활성화되어 있고, 읽기 전용 또는 dry-run 안전 모드입니다.
confirm: true와 dry_run 가드는 사용자가 아닌 모델이 공급합니다. 모호한 프롬프트가 피해를 입히는 것을 막아주지만, 결심한(또는 혼란스러운) 에이전트를 막지는 못합니다. 레시피를 삭제하기로 결정한 어시스턴트는 같은 호출에서 confirm: true를 전달할 것입니다. ReciPal에는 휴지통이 없습니다. delete_recipe는 되돌릴 수 없습니다.
안전하게 실험하려면: 아무거나 사용해도 되는 별도의 레시피 카탈로그(문서화된 데모 또는 테스트 카탈로그)에서 이 서버를 실행하고, dry run부터 시작하세요. 권장되는 안전 흐름은 docs/TESTING.md에 있습니다. list_recipes + get_recipe + get_recipe_nutrition 각각에 대해 한 번 시도해 보고, 실제로 라이브 카탈로그에 쓰기 전에 실패 여부를 확인하세요.
이 프로젝트에 익숙해지고 로컬에서 실행하기 위한 좋은 첫 단계는 docs/SETUP.md의 전 과정을 따르는 것입니다.
일반적인 사용 패턴
다음은 실제로 잘 작동하는 프롬프트와 워크플로입니다:
캘린더 기반 변형. 감사 추적에 도움이 되도록 레시피 이름에 날짜가 접미사로 붙은 템플릿 레시피가 있다면:
카탈로그의 모든 레시피를 가져와서,
(2025)와(2024)가 이름에 포함된 것을 찾아주세요. 그런 다음 2024년 레시피 각각에 대해resting_time_minutes = 45로 업데이트하세요. 하지만 먼저 변경 사항을 표로 알려주고, 승인 전까지는 아무것도 실행하지 마세요.
내부 동작: 어시스턴트는 list_recipes를 호출하고, 일치하는 항목을 필터링한 다음, 각 레시피 ID에 대해 update_recipe를 실행합니다. dry_run: true로 되돌아갈 수 있는 --dry-run 플래그는 없습니다 — 서버는 상태 비저장이므로, 클라이언트가 결정적으로 dry run을 수행할 방법이 없습니다.
반복적인 재료 교체. bulk_clone_and_swap은 동일한 단일 재료가 (약간 다른 이름의) N개 제품에 나타나는 경우를 위해 설계되었습니다:
"반죽" 레시피를 템플릿으로 사용하여 "쿠키" 제품 5개를 만들어 주세요. 각각
base_flour를rye_flour로 바꾸고, 이름에 제품 이름을 포함시키고, 100개 단위로 스케일링하세요. 먼저 dry run으로,dry_run: false로는 실행하지 마세요.
지원되는 도구
22개 도구 (기본적으로 20개 활성화). 전체 참조는 docs/TOOLS.md를 참조하세요.
읽기:
list_recipes— 페이지네이션된 레시피 목록get_recipe— 전체 레시피 (기본적으로 서브레시피 확장 포함)get_recipe_nutrition— 해당 레시피의 영양성분 패널 데이터list_recipe_ingredients— 서브레시피 포함 모든 레시피의 재료 줄list_ingredients— 계정의 공유 재료 라이브러리get_ingredient— 재료 정의 및 영양 데이터
쓰기:
create_recipe_ingredient— 레시피에 재료 줄 추가update_recipe_ingredient— 재료 줄 편집 (수량, 단위, 영양)delete_recipe_ingredient— 재료 줄 제거update_recipe— 레시피 메타데이터 편집update_recipe_calorie_display— 표시 칼로리 모드 전환calculate_recipe— ReciPal의 계산 엔진 강제 실행create_recipe— 새 레시피 작성delete_recipe— 레시피 삭제 (비활성화됨)create_ingredient— 공유 재료 라이브러리에 재료 추가update_ingredient— 재료 정의 편집list_food_databases— 접근 가능한 식품 데이터베이스 나열search_foods— USDA, 공개 및 사용자 정의 데이터베이스에서 식품 검색create_recipe_shortcut— 지름길(바로가기) 만들기
고급/대량:
bulk_clone_and_swap— 기본 레시피를 N번 복제하고 각 복제본의 재료 하나를 교체합니다bulk_update_recipe_ingredients— 한 번의 호출로 여러 재료 줄을 수정합니다
알려진 제한 사항
ReciPal API에 대해 실제로 검증된 제한 사항, 추측이 아닙니다:
API에 따르면 라벨 설정은 어떤 "영양성분 계산" 모드(준비/조리, 드립 팬 등)에서도 달라지지 않습니다.
nutrition_calculation_method를 변경해도 동일한 결과가 나옵니다. 결과가 캐시될 가능성이 있습니다.update_recipe는 서브레시피를 지원하지 않습니다. 서브레시피의 속성을 업데이트해야 한다면update_recipe_ingredient를 사용하세요./v1/recipes에 대한PATCH는 존재하지 않습니다. 예상치 못한 404 또는 405 오류가 발생하면 잘못된 HTTP 동사로 호출한 것입니다.bulk_clone_and_swap은 배치 잡을 폴링합니다. 지연 시간은 배치 크기에 따라 수 초에서 수 분까지 다양합니다. 클라이언트 시간 초과를 초과하면 상태를 다시 확인하세요.HTTP 429 응답은 API가 아닌 프록시 계층에서 나옵니다.
retry-after헤더가 누락되어 재시도가 어렵습니다 — 호출 사이에 지수 백오프를 구현하세요.create_recipe_ingredient의unit필드는 (옵션인 경우)recipe_ingredient키 아래가 아니라recipe키 아래에 속합니다. API 스키마가 일반적이지 않지만, 확인했습니다.get_recipe는 기본적으로 반환하지 않아도 되는 식품 데이터베이스 항목을 포함하지 않을 수 있습니다. 재료 영양 정보가 필요하면list_recipe_ingredients를 사용하세요.
개발
이것은 로컬 TypeScript 서버입니다:
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 aboveGXP5로 테스트하는 중:
GXP6
npm을 사용하세요. 이 저장소는 Yarn/Bun/pnpm과 같은 다른 패키지 매니저와 함께 사용하도록 설계되지 않았습니다.
문서
docs/SETUP.md — 설치, 구성, 클라이언트 설치, 문제 해결
docs/TOOLS.md — 생성된 도구 참조 (스키마 및 예시 포함)
docs/CONTRIBUTING.md — 기여 지침
docs/TESTING.md — 테스트 계정으로 확인된 동작 및 알려진 제한 사항
CHANGELOG.md — 버전별 변경 사항
라이선스
Available Tools
17 toolsbulk_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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to execute. | |
| dry_run | No | Default true. | |
| entries | Yes | One entry per new recipe. | |
| delay_ms | No | ||
| template_recipe_id | Yes | The fully-configured template recipe to clone from. | |
| swap_recipe_ingredient_id | Yes | The recipe_ingredient line ID ON THE TEMPLATE that should be replaced. The clone's corresponding line is located by matching ingredient_id. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to execute. | |
| dry_run | No | Default true. | |
| delay_ms | No | Pause between calls (default 400). | |
| recipe_ids | Yes | Recipe IDs to flag. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Open 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_json | No | Send JSON instead of form encoding. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | {ingredient_id (required), unit?, quantity?, waste?, total_grams?}. unit must be one of the ingredient's available units. | |
| as_json | No | ||
| recipe_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Open 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_json | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Optional attributes (e.g. name). | |
| as_json | No | ||
| recipe_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ingredient_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_id | Yes | ReciPal recipe ID. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_id | Yes | ||
| recipe_ingredient_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | Optional name filter, if supported. | |
| per_page | No | Default 20, max 20; larger values are silently reduced. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number (default 1). | |
| per_page | No | Items per page (default 20, max 20; larger values are silently reduced). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | e.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_json | No | ||
| recipe_id | Yes | Recipe to copy. |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | e.g. {name: 'Vanilla Concentrate'} | |
| as_json | No | ||
| ingredient_id | Yes |
TDQS
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.
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.
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.
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.
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.
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Open 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_json | No | ||
| recipe_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | {unit?, quantity?, waste?, total_grams?} — ingredient_id is ignored. | |
| as_json | No | ||
| recipe_id | Yes | ||
| recipe_ingredient_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
17 tool updates
v0.6.2- First observed
bulk_clone_and_swap - First observed
bulk_create_subrecipes - First observed
create_recipe - First observed
create_recipe_ingredient - First observed
create_recipe_shortcut - First observed
create_subrecipe - First observed
get_ingredient - First observed
get_recipe - First observed
get_recipe_ingredient - First observed
get_recipe_nutrition - First observed
list_ingredients - First observed
list_recipe_ingredients - First observed
list_recipes - First observed
scale_recipe - First observed
update_ingredient - First observed
update_recipe - First observed
update_recipe_ingredient
TDQS
Scored across 17 tools
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.
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.
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.
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
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
- AlicenseAqualityFmaintenanceAn MCP server that transforms AI assistants into personal chefs by providing recipe recommendations and meal planning features based on the HowToCook repository.5539 npm779ISC
- AlicenseBqualityDmaintenanceAn MCP server that enables AI-powered recipe generation and transformation using natural language, supporting dietary restrictions, allergies, and nutritional goals.213 npmMIT
- AlicenseNot gradedqualityFmaintenanceMCP 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 npmMIT
- FlicenseAqualityDmaintenanceMCP server enabling AI assistants to manage recipes and ingredients in the WeekPlan app via its REST API.81-