ChefBear
Server Details
Save, find, read and share your ChefBear restaurant menus and pick dishes that suit your tastes.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 12 tools
Each tool has a clearly distinct trigger and the descriptions explicitly disambiguate the close pairs: get_menu vs get_shared_menu vs list_menus, save_menu vs import_menu (recognition vs already-parsed dishes), and share_menu vs revoke_menu_share. The async import flow (import_menu then get_import_status) and status/connection tools are also cleanly separated, leaving no realistic misselection risk.
Nearly all tools follow a consistent snake_case verb_noun pattern (get_menu, list_menus, share_menu, revoke_menu_share, update_taste_profile), making the surface highly predictable. The single outlier is connection_status, which lacks a verb and would have fit better as get_connection_status.
Twelve tools is well within the ideal range and every tool maps to a real operation: connection check, import lifecycle (import + status), read paths (list/get/shared), write paths (save/update/share/revoke), and recommendation. Nothing feels padded or missing at the count level.
The core lifecycle is well covered: create menus (import/save), read them (list/get/shared), share and unshare, read/update taste profiles, and get recommendations. The notable gaps are destructive/edit operations — there is no way to delete a saved menu, rename it, or edit its dishes once created, which would leave an agent stuck on such requests.
Available Tools
12 toolsconnection_statusCheck the connectionARead-onlyIdempotentInspect
Use this once right after ChefBear is connected, or when the user asks whether ChefBear is connected or what it may do. Returns only this connection's own permissions (scopes) and app name, with no account or menu data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| scopes | Yes | |
| connected | Yes | |
| clientName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context by disclosing the output boundary — only this connection's own scopes and app name, no account or menu data — which tells the agent not to expect broader context.
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: usage conditions first, then the return boundary. Every clause carries information an agent would otherwise have to infer, and nothing is repeated from the annotations or schema.
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-argument, read-only status probe, the definition covers the only open questions: when to call it and what it will and will not reveal. With an output schema present and annotations covering safety, no further detail is needed 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?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify beyond confirming the call is argument-free, which the empty schema already makes evident.
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 (check this connection) and explicitly bounds the payload: 'returns only this connection's own permissions (scopes) and app name, with no account or menu data.' That negative scoping clearly separates it from the menu-oriented siblings such as get_menu and list_menus.
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?
Gives concrete triggering conditions: 'once right after ChefBear is connected, or when the user asks whether ChefBear is connected or what it may do.' The 'once' wording also implies it should not be polled repeatedly. It stops short of naming an alternative tool or stating explicit when-not cases, so it falls just below the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_import_statusCheck menu importARead-onlyIdempotentInspect
Use this after import_menu to see whether the menu is ready. Returns pending, ready (with the menuId and a private ChefBear link to the menu) or failed with a reason; while the import is still running it waits up to about 10 seconds for it to finish before answering. Check at most twice in a row; if it is still pending, tell the user and check again on their next message. Read-only; does not use the recognition allowance.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | The jobId returned by import_menu. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| jobId | Yes | |
| menuId | No | |
| status | Yes | |
| menuUrl | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description discloses that the tool waits up to about 10 seconds while an import is running, returns pending/ready/failed, and does not consume the recognition allowance. The ready-state details such as menuId and a private ChefBear link add useful behavioral context even though an output schema exists.
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 first states when to use the tool, then explains return states and waiting behavior, then gives polling limits. Every sentence carries practical information, and there is no redundant 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 simple one-parameter polling tool with an output schema and clear annotations, the description covers the prerequisite, latency behavior, return outcomes, polling policy, and safety note. An agent has enough context to invoke it correctly without needing to infer missing 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 input schema has 100% description coverage and already explains that jobId is the ID returned by import_menu. The tool description reinforces the import_menu context but does not add syntax, format, or validation details beyond what the schema provides, so the baseline of 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?
The description states a specific verb and resource: it checks whether a menu import is ready after import_menu. It clearly distinguishes this polling/status tool from the sibling import_menu action and from menu retrieval tools like get_menu.
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 says to use this after import_menu and gives concrete polling guidance: check at most twice in a row, then tell the user and check again on their next message. These are actionable usage constraints that an agent would otherwise have to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taste_profileRead your taste profileARead-onlyIdempotentInspect
Use this when the user asks what ChefBear knows about their food tastes, or when choosing dishes for them would go better with the likes, dislikes, allergies and diets they saved in ChefBear. Returns the user's saved taste profile: likes, dislikes, allergies, diets, taste levels from 1 to 5 (spicy, oily, sweet, meat, adventure), their food personality from the ChefBear quiz, and dishes they recently picked or turned down from their saved menus. Read-only. The entries are the user's own statements, not medical facts, so still suggest confirming allergens and ingredients with the restaurant. Needs the "See your taste profile" permission, which is granted separately from menu access; without it, ask the user about their tastes instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| diets | Yes | |
| likes | Yes | |
| levels | Yes | |
| persona | Yes | The food personality from the ChefBear quiz, if the user took it. |
| dislikes | Yes | |
| allergies | Yes | |
| updatedAt | Yes | When the profile last changed, ISO 8601 UTC. |
| hasProfile | Yes | False until the user saves something; the lists are then empty. |
| recentChoices | Yes | Dishes the user picked or turned down, newest first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, yet the description still adds real behavior: a named permission ('See your taste profile') granted separately from menu access, and the caveat that entries are the user's own statements rather than medical facts, with an instruction to confirm allergens. That is material context an agent could not infer from structured fields.
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?
Front-loaded with the usage trigger, and each clause carries distinct information (triggers, contents, read-only, safety caveat, permission). It is one dense paragraph rather than separated lines, which makes the permission constraint slightly harder to scan than it could be.
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?
Though an output schema exists and return values need not be spelled out, the description still summarizes the payload, and it covers auth requirements, the medical-fact caveat, and the failure fallback. Nothing an agent needs to call this correctly is missing.
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 and no schema semantics are missing. Baseline 4 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?
States a specific verb and resource ('Returns the user's saved taste profile') and enumerates exactly what that profile contains: likes, dislikes, allergies, diets, five taste levels, food personality, and recently picked/turned-down dishes. The 'Read-only' line makes it clearly distinct from the sibling update_taste_profile.
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?
Gives two explicit triggers ('when the user asks what ChefBear knows about their food tastes' and 'when choosing dishes for them') plus a when-not/fallback path: if the permission is missing, ask the user directly instead. This routes the agent without guesswork.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_dishesRecommend dishes from a menuARead-onlyIdempotentInspect
Use this when the user asks what to order from one of their saved ChefBear menus and their tastes, dislikes, allergies or diets matter. Ranks the menu's dishes against the user's saved taste profile (when this connection may read it) plus any preferences you pass from the conversation, and lists dishes whose printed text mentions a stated allergy or dislike as excluded, with the reason. It matches the menu's text only and does not decide diets, so check the picks against the user's diets and suggest confirming allergens and ingredients with the restaurant. Read-only; does not use the recognition allowance.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many dishes to recommend. Defaults to 5. | |
| menuId | Yes | The menuId from list_menus or get_import_status, or the menu's https://chef-bear.com/my-menu/ link. | |
| preferences | No | Preferences the user stated in this conversation, used together with the saved profile. | |
| useSavedProfile | No | false: ignore the saved taste profile for this call. Defaults to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| menu | Yes | |
| picks | Yes | |
| cautions | Yes | |
| excluded | Yes | |
| preferences | Yes | |
| profileUsed | Yes | Whether the user's saved taste profile was used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations it discloses non-obvious behavior: rankings combine the saved profile with conversation preferences when the connection may read it, allergy/dislike hits are excluded with a stated reason, matching is on printed menu text only, and the call does not consume the recognition allowance. Those are exactly the trust caveats an agent needs before acting on the output.
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?
It is front-loaded with the 'Use this when' trigger and every sentence carries information; nothing is filler. It is dense — three long clauses in one paragraph — and the phrase 'recognition allowance' assumes product jargon the agent may not know.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the 100%-documented schema covers parameter formats. The description supplies the missing conceptual layer (profile vs. passed preferences, exclusion logic, text-only matching); only the exclusion of a plain 'just list the menu' fallback leaves a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: preferences are used together with the saved profile, and allergies/dislikes act as hard exclusions rather than soft ranking signals — a semantic the schema does not convey. The useSavedProfile toggle and its interaction with passed preferences are left to 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 specific verb and resource — ranking a saved menu's dishes against a taste profile — and scopes it to the 'what should I order' situation. It is clearly distinguishable from siblings such as get_menu or get_taste_profile, which only retrieve raw data.
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 states explicitly when to reach for it (user asks what to order and tastes, dislikes, allergies or diets matter) and what it will not do (does not decide diets; check picks yourself). It never names a sibling alternative such as get_menu for plain retrieval, so the boundary is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taste_profileUpdate your taste profileADestructiveIdempotentInspect
Use this when the user asks you to remember, change or forget something about their own food tastes in ChefBear (for example "remember I'm allergic to peanuts", "I don't eat cilantro" or "I'm vegetarian now"), or confirms which dish they picked or turned down from one of their saved ChefBear menus. Adds or removes likes, dislikes, allergies and diets, sets or clears taste levels from 1 to 5, and records picks and rejections by menuId and the dish's id from get_menu. Record only what the user said about themselves in this conversation: never guess an allergy, diet or preference, and don't record a choice they didn't confirm. Repeating the same requestId with the same changes applies them once. Returns the updated profile. Needs the "Update your taste profile" permission.
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | ||
| levels | No | Taste levels from 1 (not at all) to 5 (very much): spicy, oily, sweet, meat and adventure (trying unfamiliar dishes). null clears a level. | |
| remove | No | ||
| choices | No | Dishes the user confirmed they picked or turned down, from at most three of their saved menus. | |
| requestId | Yes | A new unique ID for this change, such as a UUID. Repeating it with the same changes returns the same result instead of applying them twice. |
Output Schema
| Name | Required | Description |
|---|---|---|
| changes | No | The changes as saved, when the connection may not read the profile. |
| profile | No | The saved profile, only when the connection may also read it. |
| updated | Yes | Always true: the change is saved (or was, for a replay). |
| replayed | Yes | True when this requestId was already applied; nothing changed this time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=true) the description explains the idempotency mechanism concretely via matching requestId plus identical changes, discloses that it returns the updated profile, and states the required 'Update your taste profile' permission. It does not spell out what happens to entries omitted from a call or whether removals of non-existent items error, so it stops short of a 5.
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 trigger clause and examples are front-loaded before the mechanics, which is the right ordering. It is dense but justified given five nested parameter groups, though the requestId idempotency sentence duplicates the schema's own requestId description and could be trimmed.
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 destructive multi-group mutation, the definition covers the trigger, the safety constraint against guessing allergies or preferences, idempotency, permission requirements, and the return value, while an output schema handles the response shape. Nothing an agent needs to call this correctly is missing.
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 60% with rich nested descriptions already documenting add/remove categories, the 1-5 level scale with null clearing, and the menuId/dishId sources. The description largely restates these ('sets or clears taste levels from 1 to 5', 'the dish's id from get_menu') rather than adding new meaning such as per-call limits, ordering, or precedence between add and remove on the same value.
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-resource pair ('Update your taste profile') and then enumerates exactly what is mutated: likes, dislikes, allergies, diets, taste levels 1-5, and picks/rejections keyed by menuId and dishId. This is clearly distinct from the read-only sibling get_taste_profile and from recommend_dishes, so an agent can route without opening the schema.
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 gives an explicit trigger ('when the user asks you to remember, change or forget something about their own food tastes'), three concrete example utterances, and covers the secondary trigger of confirming a dish picked or rejected from a saved menu. It also supplies negative guidance: record only what the user said about themselves, never guess an allergy/diet/preference, and don't record unconfirmed choices.
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.
12 tool updates
- First observed
connection_status - First observed
get_import_status - First observed
get_menu - First observed
get_shared_menu - First observed
get_taste_profile - First observed
import_menu - First observed
list_menus - First observed
recommend_dishes - First observed
revoke_menu_share - First observed
save_menu - First observed
share_menu - First observed
update_taste_profile
Related MCP Connectors
Restaurant picks from food creators you trust: ranked guides, reviews and places near you.
AI-native restaurant discovery: verified/menu-indexed/discovered tiers + signed allergy-safety data.
Find restaurants and sourced dietary dish evidence. Free discovery; metered menus need an API key.
Find restaurants on Mizam: live menus, allergens, prices, hours, table availability. Read-only.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenancePersonalized restaurant recommendations, table bookings, and delivery via MCP, CLI, or API, learning user taste and acting proactively.MIT

PosDO MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceDiscovers over 356,000 restaurants across 20 countries, providing search, reviews, time-based offers, and cultural context via the Model Context Protocol.Apache 2.0- AlicenseNot gradedqualityDmaintenanceYour digital kitchen, powered by AI. Track what you have, discover what you can cook, and get guided through every recipe — step by step, timer by timer.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for AI-native restaurant discovery with three-tier search (verified, menu_indexed, discovered), Menu Protocol menus, and structured menu validation.3 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.