parsley-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@parsley-mcpshow me this week's events"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Parsley MCP Server
An MCP server that gives AI assistants access to Parsley — recipe management, menu planning, and event operations for food service.
Hosted
A hosted version is available at parsley.vein.io. Connect any MCP client using a Remote transport with your Parsley API token, passed either as a Bearer token in the Authorization header or as a ?token= query parameter.
Read-only endpoint:
https://parsley.vein.io/mcpRead-write endpoint (includes event and user management):
https://parsley.vein.io/mcp/writeDemo endpoint (no auth required, mock data):
https://parsley.vein.io/mcp/demoFiltering tools
Pass ?tools=a,b,c to register only the tools you need, trimming the tool schema from the context window:
https://parsley.vein.io/mcp?tools=list_menu_items,get_recipe,list_eventsUnknown names return 400. Works on /mcp, /mcp/write, and /mcp/demo.
Related MCP server: Catalyst MCP Server
Local (stdio)
Run locally via npx:
PARSLEY_API_TOKEN=your_token npx parsley-mcpOr with write access:
PARSLEY_API_TOKEN=your_token npx parsley-mcp --enable-writesClaude Desktop configuration
{
"mcpServers": {
"parsley": {
"command": "npx",
"args": ["parsley-mcp"],
"env": {
"PARSLEY_API_TOKEN": "your_token"
}
}
}
}Tools
Read-only: list/get menu items, menus, recipes, ingredients, events, chef users, chef tags, serving stations, commissary reports, and CDN access tokens.
Write (opt-in): create/update events, push sales/waste/leftover data, create/update/delete chef users, and manage chef tags.
Development
npm install
npm run build
npm startDeploy to Cloudflare Workers:
npm run deployParsley API
This server wraps the Parsley public API.
License
MIT
Available Tools
19 toolsclear_cacheAIdempotent
Clear the cached Parsley API responses for this token. GET responses are cached for 24 hours; call this if you suspect data is stale. Ask the user for permission before calling, since subsequent reads will refetch from the API.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful context beyond annotations: the 24-hour GET cache TTL, the fact that reads will refetch afterward, and the instruction to obtain user permission first. Annotations already cover idempotence and non-destructiveness, so the description complements rather than repeats them.
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 short sentences, front-loaded with the action and scope, then TTL/trigger, then the permission caveat. 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?
Complete enough for a parameterless cache-control tool: it explains what is cleared, the cache lifetime, and the user-consent requirement. No output schema exists but none is needed for this action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document beyond the schema. Baseline for a 0-param tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Clear') and resource ('cached Parsley API responses for this token'), with clear scope. No sibling tool interacts with the cache, so the purpose is unambiguous in context.
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 says when to use it: 'call this if you suspect data is stale.' No alternative tool exists among siblings for cache management, so no exclusion routing is needed, but the trigger condition is clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_tokenB
Set the Parsley API bearer token for this session
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | Parsley API bearer token |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses session scoping, but says nothing about overwriting an existing token, permission or auth prerequisites, persistence beyond the session, rate limits, or any error behavior for an invalid token — all relevant for a credential-setting mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the scope qualifier ('for this session') is placed where it matters without padding.
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 configuration tool with no output schema and full schema coverage, the description plus schema is nearly self-sufficient. The only real omission is how this relates to the get_access_token sibling, which an agent would have to guess.
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% and the single parameter is fully documented in the schema itself ('Parsley API bearer token'), which the description merely repeats. Baseline 3 for a one-parameter tool whose schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (set the Parsley API bearer token) plus the scope (this session), so the action is unambiguous. It does not, however, distinguish itself from the sibling get_access_token, leaving an agent to infer the relationship between obtaining and configuring a token.
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 only usage cue is the phrase 'for this session.' There is no statement of when this must be called, whether it should follow get_access_token, whether it overwrites an existing token, or whether it is required before other Parsley calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_access_tokenBRead-only
Get CloudFront access token for CDN.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external-call semantics are covered. The description's only added context is that the token targets CloudFront CDN, which is useful for understanding scope but says nothing about token lifetime, caching, or whether each call mints a new token.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource and target service front-loaded and no filler. Nothing could be removed without losing information.
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 zero-parameter read-only tool this is minimally adequate, but with no output schema the description should say what is returned (a token string) and whether it is cached or freshly issued. Those operational details are left entirely to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless schema is 4. No parameter-related gaps exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get + access token) and scopes it to CloudFront/CDN, so the agent knows exactly what is being fetched. It does not, however, distinguish itself from the related sibling configure_token, which likely also touches the same credential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus configure_token, nor any prerequisite such as needing credentials configured first. Usage is only implied by the name and the 'for CDN' qualifier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commissary_reportCRead-only
Commissary transaction report as CSV.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | YYYY-MM-DD | |
| startDate | Yes | YYYY-MM-DD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds useful behavioral information by specifying the return format as CSV, which is not in the schema or annotations. It does not disclose authentication, rate limits, or pagination, but with annotations present, a 3 is appropriate.
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 extremely short and front-loaded, containing no filler or redundant phrasing. Every word contributes to stating the resource and output format. It is appropriately concise for a simple two-parameter report 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?
Given the simple schema, the readOnly/openWorld annotations, and the lack of an output schema, the description provides the essential output format but omits usage context. It does not explain what a commissary transaction report contains or when an agent should prefer it over other tools. For this level of complexity, it is minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both required parameters with their YYYY-MM-DD format. The description adds no additional meaning beyond the schema, such as whether the date range is inclusive or what happens if omitted. Baseline 3 is correct when the schema does the heavy lifting.
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 specific resource ('Commissary transaction report') and output format ('as CSV'), so the agent knows what it returns. However, it is a fragment without a verb and does not explicitly distinguish itself from the menu-focused sibling tools. It is adequate but not sharp enough for a 4.
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 indication of when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. There is no context signal from siblings since none of them are reports. This is essentially no usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventCRead-only
Get event with line items.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing beyond that — it says nothing about what 'line items' are, whether the lookup is by database id, or what happens when the id is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single terse sentence with no filler and the core action front-loaded. It is appropriately sized, though brevity here partly reflects under-specification rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param read tool with annotations and no output schema, the description should at minimum explain the id's meaning and what 'line items' entails. Neither is present, so an agent cannot call it confidently without trial and error.
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%, so the sole parameter 'id' is undocumented everywhere. The description never clarifies whether id is an event id, a slug, or an external identifier, leaving the parameter semantics entirely to guesswork.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb ('Get') and resource ('event') with a vague scope modifier ('with line items'). It does not distinguish this from siblings like get_menu, get_recipe, or get_menu_item, which share the identical singular-retrieval pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus list_events or the other get_* siblings. The agent must infer that this is the single-object fetch counterpart to list_events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ingredientBRead-only
Get ingredient: conversions, supply options, preparations.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful content about what the payload contains (conversions, supply options, preparations), but says nothing about error behavior when an id is unknown or the depth of the returned data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the action front-loaded and no filler. It is borderline telegraphic, but every word carries information about the tool and its return content.
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 tool with annotations covering safety and no output schema, hinting at returned fields is a reasonable substitute for documenting returns. The missing piece is the identifier semantics — the one required input is left completely unexplained.
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 single id parameter has no description in either schema or prose. The description never explains what identifier is expected (numeric id form, where to obtain it), so the agent gets no meaning beyond the 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?
States a specific verb and resource ('Get ingredient') and enumerates the data returned (conversions, supply options, preparations). It is distinguishable from list_ingredients and search_ingredients by the singular 'get' pattern, but it never explicitly contrasts itself with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of the alternative list/search tools, and no prerequisites for calling it. The only signal is the conventional get/list split implied by the sibling names, which the agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recipeBRead-only
Get recipe: steps, ingredients, sub-recipes, nutrition, cost.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID (numeric) or item number (string) | |
| getByItemNumber | No | True if id is an item number | |
| roundedQuantities | No | Round to 2 decimals (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds value by naming what is returned (steps, ingredients, sub-recipes, nutrition, cost), which matters since there is no output schema, but it says nothing about auth, errors, or caching.
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?
Single front-loaded sentence with the verb first and a tight comma-separated payload list. No filler, no repetition.
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 tool with no output schema, the description compensates adequately by enumerating the response fields, and all three parameters are fully documented in the schema. Missing only minor operational notes like caching behavior or rate limits.
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 documents id, getByItemNumber, and roundedQuantities. The description adds no parameter-level meaning beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Get recipe') and an enumeration of the returned payload (steps, ingredients, sub-recipes, nutrition, cost). It does not differentiate itself from siblings like get_menu_item or get_ingredient beyond the distinct resource name, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus alternatives, no prerequisites, and no when-not conditions. The implied usage (fetch a recipe by id) is obvious but never stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chef_tagsCRead-only
List chef tags.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered by structured data. The description adds nothing beyond that — no pagination behavior, no scope (all tags? user tags? workspace tags?), and no note on return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One clean front-loaded sentence with no waste, but the brevity is under-specification rather than genuine conciseness — there is no substance to be concise about.
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 zero-param read-only tool the description could still convey scope and result content, but it does not. With no output schema and only an openWorldHint annotation, an agent has no idea what tag data comes back or how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is an empty object, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"List chef tags" is a near-verbatim restatement of the tool name list_chef_tags, adding no scope, resource detail, or differentiation from siblings like list_chef_users. An agent learns nothing about what a 'chef tag' is or where these tags come from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives or related tools, and no condition that would select this tool over the many other list_* siblings. The entire description is a single purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chef_usersBRead-only
List chef users.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a safe, open-world read. The description adds nothing beyond that, but with annotations covering the safety profile a baseline 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded and wastes no words. It is concise, though it is arguably too terse to earn a top score.
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 no-parameter list tool with annotations covering the safety profile and no output schema, the description is minimally adequate. It omits what the returned chef users represent and any pagination or scoping behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there is nothing for the description to document. Baseline 4 applies for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb (List) and resource (chef users), so the purpose is identifiable. However, it is essentially a restatement of the tool name list_chef_users with no added specificity, and it does not differentiate from similarly-named siblings such as list_chef_tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no reference to any alternative tool. The agent gets no help deciding between this and the many other list_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsCRead-only
List events in a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | End, e.g. 2023-12-31T23:59:59 | |
| startDate | Yes | Start, e.g. 2023-01-03T09:00:00 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and open-world nature are covered. The description adds only the date-range scoping, which is already implied by the required params. No mention of pagination, sort order, result size, or what happens with large ranges.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler, front-loaded with the verb and resource. Appropriately sized for a trivial two-param list 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 list tool without an output schema, the description gives no sense of return shape, volume, ordering, or pagination. It is minimally functional but incomplete relative to what an agent needs to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters already carry format examples, so the schema does the heavy lifting. The description adds nothing beyond restating the date-range filter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'List' plus resource 'events' with a scoping constraint (date range). It doesn't differentiate itself from any sibling, but none of the listed siblings cover events listing (only get_event for single retrieval), so the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus get_event, nor what to do after listing. No exclusions or prerequisites are stated. Only the most rudimentary implied usage from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ingredientsARead-only
List ingredients. Returns up to 20 with {items, total, truncated}; each item has id, name, itemNumber, salable. If truncated, prefer search_ingredients or filter by salable.
| Name | Required | Description | Default |
|---|---|---|---|
| salable | No | Filter by salable status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=true). The description adds the meaningful behavioral fact that only up to 20 items are returned and that truncation can occur, which is beyond the annotations. It doesn't explain ordering or pagination mechanics, so it's useful but not rich.
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 tight sentences, front-loaded with purpose then return shape then escape hatch. No filler; every clause carries actionable information (cap, fields, alternatives).
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-param read tool with no output schema, the description covers purpose, cap, returned fields, and fallback routing. The only gap is not clarifying ordering or what total represents, but for this complexity level it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one optional boolean and 100% schema coverage, the schema already documents the salable filter. The description reinforces it as a truncation-mitigation strategy, adding a usage reason beyond the schema's terse label, which is more than baseline.
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?
Specific verb+resource ('List ingredients') that directly matches the tool name, and it goes further by describing the result shape and cap. It differentiates from search_ingredients by naming it only as an alternative for truncated results, but the list vs search distinction is implicit rather than explicit.
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 states when to switch to search_ingredients ('If truncated') and mentions filtering by salable as another option, giving clear conditional routing. It stops short of stating when this tool is preferred over search_ingredients in the first place, but the trigger condition is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_serving_stationsCRead-only
List serving stations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered by structured data. The description adds nothing beyond that: no mention of result shape, pagination, ordering, or what a serving station represents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler or redundancy, front-loaded. It is concise to the point of being thin, but there is nothing to trim.
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 zero-parameter listing tool with no output schema and openWorld semantics, the description leaves the agent without any sense of what is returned or how the result is scoped. The absence of an output schema means the description should carry more of this burden than it does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4; there is no parameter semantics to explain and the description is not deficient on this dimension.
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?
"List serving stations" restates the tool name almost verbatim, giving no more information than the identifier already conveys. It is syntactically a verb+resource but conveys no scope, distinguishing features, or relation to sibling list_* tools such as list_menus or list_ingredients.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of alternatives among the many sibling tools. The only hint of usage comes from the name itself, not from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ingredientsARead-only
Fuzzy-ranked search of ingredients over name/itemNumber (typo-tolerant, multi-token). Returns {items, total, offset, truncated}, best matches first. Default page size 20 (max 50); use offset to page through ranked results.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return (default 20, max 50) | |
| query | Yes | Search query (fuzzy, multi-token) | |
| offset | No | Skip this many ranked results (default 0) | |
| salable | No | Filter by salable status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint) and scope (openWorldHint), lowering the bar. The description adds genuinely useful behavioral detail beyond annotations: fuzzy typo-tolerant multi-token matching, ranked ordering, default/max page size, truncation signaling, and offset-based paging. It stops short of describing ranking/scoring mechanics or tie-breaking behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler: the matching behavior and return shape come first, paging mechanics second. Every clause 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 read-only paged search with a fully-described schema and no output schema, the description covers matching semantics, ranking, return shape keys, truncation, and paging. The only gaps are the unmentioned salable filter and sibling differentiation; otherwise it gives an agent what it needs to call 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 description coverage is 100%, so the schema already documents limit, query, offset, and salable. The description restates page size and offset usage but adds no syntax or semantics beyond the schema and omits the salable filter entirely. Baseline 3 is appropriate when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (ingredients) with the exact matching fields (name/itemNumber) and matching semantics (fuzzy, typo-tolerant, multi-token). It is clearly distinguishable from list_ingredients (enumeration) and get_ingredient (single fetch) among its siblings.
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 exploration/retrieval usage and explains paging mechanics, but never explicitly states when to use this vs list_ingredients or get_ingredient. No when-not guidance or alternative routing is provided, leaving the agent to infer from names.
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.
19 tool updates
v0.2.1- First observed
clear_cache - First observed
configure_token - First observed
get_access_token - First observed
get_commissary_report - First observed
get_event - First observed
get_ingredient - First observed
get_menu - First observed
get_menu_item - First observed
get_recipe - First observed
list_chef_tags - First observed
list_chef_users - First observed
list_events - First observed
list_ingredients - First observed
list_menu_items - First observed
list_menus - First observed
list_serving_stations - First observed
search_ingredients - First observed
search_menu_items - First observed
search_menus
TDQS
Scored across 19 tools
Each tool targets a distinct resource+action, and the list-vs-search pairs (list_menus/search_menus, list_ingredients/search_ingredients, list_menu_items/search_menu_items) are clearly differentiated by their descriptions. The only mild overlap is between get_menu, get_menu_item, and get_recipe, but these map to genuinely different entities so an agent can select correctly.
Every tool follows a clean snake_case verb_noun pattern (list_/search_/get_/clear_/configure_). The verbs are used consistently: list_* for enumeration, search_* for fuzzy query, get_* for single-entity fetch, matching the description semantics.
19 tools is at the higher end but justified given the domain spans menus, recipes, ingredients, menu items, events, plus utility/auth tools (configure_token, clear_cache, get_access_token). Nothing feels redundant given the list/search/detail triad per entity.
The surface covers read operations comprehensively across all entities (list, search, get for menus/ingredients/menu items, plus recipes, events, stations, chef tags/users, report). There are no write/update/delete operations, but the server appears intentionally read-only (24h GET cache), and only minor detail getters (e.g. serving station, chef user) are absent.
Maintenance
Related MCP Connectors
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
One connector for 15,000+ MCP servers plus your team's private MCPs, from any AI client.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that enables AI-powered recipe generation and transformation using natural language, supporting dietary restrictions, allergies, and nutritional goals.28 npmMIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that loads and serves Knowledge Packs to connect AI assistants with business systems like databases, DevOps tools, and APIs.1-
- AlicenseAqualityDmaintenanceMCP server that enables AI assistants to query Parse.ly analytics for top posts, authors, tags, referrers, content search, and social shares.68 npm1MIT
- FlicenseAqualityDmaintenanceMCP server enabling AI assistants to manage recipes and ingredients in the WeekPlan app via its REST API.81-