Skip to main content
Glama
chrisscott

Swizzler MCP

by chrisscott

swizzler-mcp

An MCP server that lets an AI assistant read your Swizzler cocktail library — search recipes, pull up a spec, work out what you can make from the bottles on your shelf, and look at what you've actually been drinking. Works with Claude, Codex, and other MCP-compatible clients.

Read-only. Nothing here can change your library.

The iOS app is closed source; this server is not. It is the piece that runs on your own Mac and touches your recipe data, so it is the piece worth being able to read.

How it works

Swizzler stores recipes on-device in SwiftData, synced through your private CloudKit database. Neither of those is reachable from a desktop MCP server, so the app publishes a snapshot instead: turn on Settings → AI Assistants → Share Library, and Swizzler writes a photo-free copy of your library to its own iCloud Drive folder. This server reads that file from your Mac.

iPhone/iPad ──SwiftData──> private CloudKit  (app's own sync, untouched)
     │
     └──snapshot──> iCloud Drive/Swizzler/Library.swizzle ──> swizzler-mcp ──> Claude

Freshness

The snapshot only refreshes while Swizzler is running — it rewrites on every edit and when the app goes to the background. In practice that covers the single-device case completely, because your library can only change while the app is open in front of you.

Where it can lag is multi-device: edit on your iPad, then ask Claude on your Mac without opening Swizzler on any device that has synced. So every tool result states the snapshot's age, and past 24 hours it says so with a warning rather than answering as if the data were current. Ask Claude to check snapshot_status any time you want to know.

Related MCP server: Bar Assistant MCP Server

Install

One command, the same for every client. It runs straight from npm — nothing to download, build, or keep up to date.

Claude Code

claude mcp add swizzler -- npx -y swizzler-mcp

Codex

codex mcp add swizzler -- npx -y swizzler-mcp

Claude Desktop — add this to claude_desktop_config.json:

{
  "mcpServers": {
    "swizzler": {
      "command": "npx",
      "args": ["-y", "swizzler-mcp"]
    }
  }
}

Anything else that speaks MCP — run npx -y swizzler-mcp over stdio.

Node 20 or newer is the only requirement, and npx ships with it.

From a clone

git clone https://github.com/chrisscott/swizzler-mcp.git
cd swizzler-mcp
npm install
npm run build
claude mcp add swizzler -- node "$PWD/dist/index.js"

By default it reads:

~/Library/Mobile Documents/iCloud~com~getswizzler~app/Documents/Library.swizzle

Set SWIZZLER_LIBRARY_PATH to point somewhere else.

Tools

Tool

What it answers

snapshot_status

How current is this data, and where did it come from?

diagnose_sync

Why are recipes missing or stale? Checks iCloud Drive on this Mac.

search_recipes

By name, ingredient, spirit, collection, or favourites

get_recipe

The full spec for one drink

whats_next

The Next Round queue — what you've lined up to make

list_collections

Your collections and their sizes

what_can_i_make

Given these bottles, what's within reach (and what's missing)?

recipe_history

What you've actually made, how often, and how you rated it

Smart collections

Smart collections have no stored membership — the app evaluates their rules at query time. The snapshot resolves them into concrete memberships before writing, so the rule engine stays in Swift rather than being reimplemented here and drifting. Backup exports keep them as rules, so re-importing restores a smart collection rather than freezing today's matches.

Tests

npm test

Drives the built server over stdio with a real MCP client against fixture libraries, covering search, detail rendering, staleness warnings, and the missing-snapshot path.

Releasing

On a v* tag, .github/workflows/release.yml runs the suite, creates a GitHub release, and publishes to npm. npm is the only distribution channel — there is no download.

# bump the version in package.json first — the workflow fails the build if it
# disagrees with the tag
git tag v0.2.0 && git push --tags

npm publishing uses OIDC trusted publishing, so there is no token in the repo. It needs one-time setup on npmjs.com under the package's Settings → Trusted Publisher: repository chrisscott/swizzler-mcp, workflow release.yml. That can only be configured for a package that already exists, so the very first publish has to be done by hand.

A version already on the registry is skipped rather than failing the run, so re-running a release is safe.

workflow_dispatch runs the same build and tests without publishing, which is the way to check the pipeline before tagging.

Troubleshooting

"No Swizzler library snapshot at …" — Check three things, in this order:

  1. iCloud Drive is on for this Mac. System Settings → your name → iCloud → iCloud Drive. If it is off, nothing syncs down at all and ~/Library/Mobile Documents/ will hold only an empty com~apple~CloudDocs. To check from a terminal:

    defaults read MobileMeAccounts | grep -A2 MOBILE_DOCUMENTS

    Enabled = 0 means iCloud Drive is off.

  2. Sharing is on in the app. Settings → AI Assistants → Share Library. The status row underneath reports what the last write actually did.

  3. The snapshot has been published since you turned it on. Background the app to force a write, then give iCloud a minute.

The Swizzler folder doesn't appear in Finder — iOS caches the NSUbiquitousContainers key, so the folder sometimes only shows up after the app's build number changes.

Recipes look out of date — Open Swizzler on the device you last edited on. The snapshot is republished when the app backgrounds.

Available Tools

8 tools
diagnose_syncDiagnose syncA

Explain why the Swizzler library is missing or not updating, by checking iCloud Drive on this Mac and the state of the snapshot file. Use when recipes are missing or stale.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full disclosure burden. It usefully reveals what the tool inspects (iCloud Drive and the snapshot file state), but never states that this is a non-mutating read/diagnostic, nor what form the explanation takes. Safety profile and side-effect behavior are left unstated.

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

Conciseness5/5

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

Two tight sentences: the first states what the tool does and how, the second states when to invoke it. Every clause earns its place and the purpose is front-loaded.

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

Completeness3/5

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

For a zero-parameter diagnostic with no output schema, the description omits the return shape — an agent cannot tell whether it yields a diagnosis only, or a diagnosis plus remediation. What it does and when to use it are covered, but the result contract is missing.

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

Parameters4/5

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

The tool takes zero parameters, so per the baseline this scores 4. The description correctly implies no inputs are needed by describing a self-contained environment check.

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

Purpose4/5

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

States a specific verb and outcome ("Explain why the Swizzler library is missing or not updating") plus the resources inspected (iCloud Drive, snapshot file). It does not explicitly contrast itself with the closest sibling, snapshot_status, so an agent must infer the boundary from the word "Explain".

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

Usage Guidelines4/5

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

Gives an explicit trigger condition: "Use when recipes are missing or stale." That is clear context for invocation, but it names no alternatives or exclusions — e.g. when to prefer snapshot_status or recipe_history instead.

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

get_recipeGet recipeA

Full details for one recipe in the user's library, by name or id.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRecipe name or id

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. 'Full details' plus 'user's library' implies a read scoped to the caller's data, but nothing is said about what happens if the name/id is not found or whether lookup is case-sensitive.

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

Conciseness5/5

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

A single front-loaded sentence with no waste; the resource and lookup keys come first and nothing is padded.

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

Completeness4/5

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

For a one-parameter read tool with no output schema, the description conveys the scope and the return ('full details'), which is nearly sufficient. It could say more about the shape of the returned details, but nothing critical to invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the description only restates 'by name or id', which the schema already documents. Baseline 3 applies since the schema does the heavy lifting and the description adds no format or matching semantics.

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

Purpose4/5

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

States a specific verb (get) and resource (recipe) with scope ('one recipe in the user's library') and lookup keys ('by name or id'). This clearly separates it from list/search siblings like search_recipes, though those siblings are not named explicitly.

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

Usage Guidelines3/5

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

Usage is implied: fetch full details when you already know which recipe you want. There is no explicit when-to-use/when-not guidance or routing to search_recipes for fuzzy lookups, leaving the agent to infer the boundary.

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

list_collectionsList collectionsA

List the user's recipe collections and how many recipes each holds.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. 'List' clearly signals a read-only, non-mutating operation and discloses the salient return content (collections plus per-collection recipe counts), which is genuinely useful. However, it says nothing about ordering, pagination, empty-result behavior, or any auth requirement.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; every clause (resource, ownership scope, returned metric) earns its place.

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

Completeness4/5

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

For a trivial, parameterless read tool with no output schema, the description conveys both what is listed and the shape of the result (collections with recipe counts), which is enough to call it correctly. Minor gaps around ordering and auth requirements keep it from a 5.

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

Parameters4/5

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

The tool takes zero parameters, so the schema has nothing to document and the description has nothing to compensate for. Baseline for a parameterless tool is 4.

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

Purpose4/5

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

States a specific verb and resource ('List the user's recipe collections') and adds scope detail (recipe counts per collection). It does not explicitly name a sibling to distinguish from, but the resource is distinct enough from get_recipe, search_recipes, and whats_next that confusion is unlikely.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent can infer this is for surveying collections, but there is no explicit when-to-use, when-not-to-use, or pointer to search_recipes/get_recipe for drilling into contents. No prerequisites are given.

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

recipe_historyRecipe historyB

What the user has actually made and how they rated it, from their "Made It" history. Use for questions like what they drink most or which recipes they rated highest.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
minRatingNoOnly recipes averaging at least this

TDQS

B3/5.0
Behavior2/5

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

No annotations exist, so the description carries the full behavioral burden. It discloses the data source ('Made It' history) and that ratings are included, which is useful, but says nothing about ordering, pagination, default limit behavior, or whether the result is a full or filtered set.

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

Conciseness4/5

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

Two tight sentences with the resource statement front-loaded and an immediately useful 'use for' clause. No filler, though the second sentence is more illustrative than specification.

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

Completeness3/5

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

For a simple zero-required-parameter read tool with no output schema, the description adequately conveys what is returned (made recipes plus ratings). It falls short on ordering, defaults, and result shape, which an agent needs to call it correctly.

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

Parameters2/5

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

Schema coverage is only 50%: minRating is described in the schema but limit is bare. The description adds no meaning for either parameter — it does not explain limit's role, default, or ordering, nor clarify that minRating filters on average rating as the schema says.

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

Purpose4/5

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

The description names the specific resource: the user's 'Made It' history with their ratings, and gives concrete query examples (most-drunk, highest-rated). It is clearly distinguishable from siblings like search_recipes or what_can_i_make, though it does not explicitly name those alternatives.

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

Usage Guidelines3/5

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

It offers example question types that imply when the tool applies, but never states when NOT to use it or which sibling handles adjacent needs (e.g., searching recipes vs. personal history). Usage is implied rather than routed.

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

search_recipesSearch recipesA

Search the user's own cocktail library by name, ingredient, spirit, or collection. Returns one line per match. Omit every filter to list the whole library.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 50)
queryNoFree text matched against recipe names and keywords
spiritNoBase spirit category, e.g. "gin", "rum"
collectionNoOnly recipes in this collection
ingredientNoIngredient the recipe must contain, e.g. "mezcal"
nextRoundOnlyNoRestrict to recipes flagged "Next Round" — the user's queue
favouritesOnlyNoRestrict to favourites

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does disclose the return shape ("one line per match"), which implies a read-only, summarised listing rather than full recipes. It says nothing about pagination, the limit default, or result ordering, and mutability/safety is only implied by "Search".

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

Conciseness5/5

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

Three tight sentences with zero filler; the resource scope and filter dimensions come first, the return shape second, and the no-filter behavior last. Every sentence earns its place.

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

Completeness4/5

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

For a read-only search over a well-documented 7-parameter schema with no output schema, the description covers scope, filters, default behavior, and result granularity. Missing only pagination/limit interaction, which the schema largely covers via the limit parameter.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters are already documented, and the baseline is 3. The description adds only the aggregate behavior of omitting filters (list the whole library), which is modest incremental meaning beyond the schema.

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

Purpose4/5

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

Specific verb (Search) plus specific resource and scope ("the user's own cocktail library") and the four filter dimensions. It does not explicitly differentiate itself from siblings like get_recipe or what_can_i_make, but an agent can tell it is a multi-result, filter-driven retrieval tool rather than a single-recipe fetch.

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

Usage Guidelines3/5

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

It gives one concrete usage rule — omit every filter to list the whole library — which is genuinely actionable. However, it never names or contrasts against alternatives (what_can_i_make, get_recipe, whats_next), so the when-to-use-this-vs-that decision is left to inference.

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

snapshot_statusSnapshot statusA

Report how current the local Swizzler library snapshot is, and where it came from. Use this when the user asks whether their recipes are up to date, or when a recipe they expect seems to be missing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. 'Report' implies a safe read operation and it discloses what is surfaced (freshness and provenance), but it says nothing about whether the check is purely local, whether it can trigger a refresh, or what the response looks like.

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

Conciseness5/5

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

Two sentences, both load-bearing: the first states what is returned and the second states when to call it. Nothing is repeated from the name or title.

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

Completeness4/5

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

With no output schema, no annotations, and no parameters, the description has to convey the value of the call, which it does by naming the two things reported (currency and source) plus the triggering situations. It stops short of describing output shape, but for a parameterless status check this is close to sufficient.

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

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4; there is no parameter behavior left for the description to clarify.

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

Purpose4/5

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

The description gives a specific verb ('Report') and resource ('how current the local Swizzler library snapshot is, and where it came from'), making the read-only diagnostic nature clear. It is distinguishable from siblings like diagnose_sync, though it does not explicitly name any sibling to sharpen the distinction.

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

Usage Guidelines4/5

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

Two concrete triggers are given: when the user asks whether recipes are up to date, and when an expected recipe seems to be missing. There are no explicit exclusions or named alternatives (e.g., diagnose_sync), which keeps it 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.

what_can_i_makeWhat can I makeB

Given the bottles and ingredients the user has on hand, find recipes they can make. Set allowMissing above 0 to include near-misses and see what is missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
ingredientsYesIngredients on hand
allowMissingNoHow many ingredients may be missing (default 0)

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It never says whether this is a read-only lookup, whether results are ranked, how ties or empty inventories are handled, or what the response contains. The near-miss explanation is useful but is essentially parameter semantics, not behavioral disclosure.

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

Conciseness5/5

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

Two sentences, zero filler, and the core capability is front-loaded before the modifier parameter tip. Every sentence earns its place.

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

Completeness3/5

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

For a simple read-style lookup with no output schema, the description covers the main flow but leaves the limit parameter and result shape entirely unexplained, and with no annotations those gaps are unaddressed elsewhere.

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

Parameters3/5

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

Schema coverage is 67%: ingredients and allowMissing are documented in the schema, and the description usefully extends allowMissing ('see what is missing'). However, the 'limit' parameter is undocumented in both schema and description, and default/format expectations for ingredients are not clarified.

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

Purpose4/5

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

States a specific verb and resource: find recipes the user can make from ingredients on hand. This implicitly separates it from search_recipes (query-driven lookup) and get_recipe (retrieval by id), but it never names or contrasts those siblings explicitly.

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

Usage Guidelines3/5

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

The second sentence gives a genuine usage cue for the near-miss mode ('Set allowMissing above 0 to include near-misses'), but there is no guidance on when to prefer this over search_recipes or get_recipe, and no prerequisites stated.

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

whats_nextWhat's nextB

Recipes the user has flagged "Next Round" in Swizzler — the queue of drinks they mean to make next. Use for "what's up next", "what am I making next", "what's in my queue".

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It clarifies what the flagged set represents, but says nothing about ordering, whether it is read-only, or how many items come back. For a no-annotation tool this is partial coverage only.

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

Conciseness4/5

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

Two tight sentences, front-loaded with the core concept before the trigger phrases. Nothing is wasted, though the phrasing is slightly indirect by opening with a noun phrase rather than an action.

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

Completeness3/5

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

With no output schema, the description does well to explain what the returned set represents, and the tool's surface area is small (one optional param). But the undocumented limit parameter is an unaddressed gap, leaving the definition only adequate for correct invocation.

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

Parameters2/5

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

The single parameter (limit, 1–100) has 0% schema description coverage and is never mentioned in the description. With no structured documentation anywhere, the agent gets no guidance on what limit means or its default. The description fails to compensate for the coverage gap.

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

Purpose4/5

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

The description names a specific resource — recipes flagged "Next Round" — and defines the domain concept (a queue of drinks the user intends to make next). That cleanly distinguishes it from siblings like what_can_i_make (ingredient-driven) and search_recipes. It stops short of a 5 because the verb is implied rather than stated (it is a noun phrase, not 'List…').

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

Usage Guidelines4/5

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

It provides explicit trigger phrases ('what's up next', 'what am I making next', 'what's in my queue'), which is real routing guidance for an agent matching user intent. It does not, however, name the sibling it is not (what_can_i_make) or state any exclusion condition.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.1.1
    • First observeddiagnose_sync
    • First observedget_recipe
    • First observedlist_collections
    • First observedrecipe_history
    • First observedsearch_recipes
    • First observedsnapshot_status
    • First observedwhat_can_i_make
    • First observedwhats_next

TDQS

A3.6/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have clearly distinct purposes (ingredient matching, search, history, queue, collections). The main overlap is snapshot_status vs diagnose_sync, both about library freshness/sync, though the descriptions differentiate reporting status from explaining causes.

Naming Consistency4/5

All names use snake_case consistently, which is good. However, the verb/noun patterns vary: some are verb_noun (search_recipes, get_recipe, list_collections), others are plain nouns (recipe_history, snapshot_status) or question phrasing (what_can_i_make, whats_next).

Tool Count5/5

Eight tools is well-scoped for a cocktail library assistant, each covering a distinct user intent without redundancy or bloat.

Completeness4/5

Read-side coverage is strong: discovery, search, detail, history, queue, collections, and sync troubleshooting. The surface appears read-only with no write operations (e.g. rating or adding recipes), a minor gap if mutation is in scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

  • Search 500 cocktail recipes, get full recipes, find drinks by ingredient, suggest random picks.

  • The media memory layer for AI agents and their humans. Your AI client gets 29 tools to search your collection, add items, update ratings, preview music, and find patterns across everything you've read, watched, and listened to.

  • Scraps Kitchen gives any AI agent a persistent, household-aware kitchen memory. Unlike generic chatbot recall, Scraps maintains structured cooking data: what's in your fridge (with freshness tracking), who you cook for (with allergens, dietary restrictions, and preferences), your recipe collection (with cook notes and per-diner ratings), your shopping list, and your kitchen equipment. 27 tools across 6 domains let agents read kitchen context, suggest meals that respect dietary safety, update the pantry after cooking, and build a history of what works for your household. Every interaction makes the data richer. Cooking history, preference signals, kitchen awareness = better suggestions next time. All tools work via oAuth and a free scraps.kitchen account.

  • Cocktails MCP — TheCocktailDB API (free, no auth)

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables intelligent cocktail discovery and recipe retrieval from Bar Assistant instances with natural language search, similarity matching, batch processing, and ingredient analysis capabilities.
    3
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Household-aware kitchen brain for AI agents: manage pantry inventory with freshness tracking, shopping lists, recipe collections with cook notes and per-diner ratings, dietary profiles with allergen safety, and kitchen equipment — all through 27 tools with OAuth 2.1 authentication. Includes a free tool for ingredient-based recipe generation without an account (accounts are free!).
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables natural language search for cocktail recipes and ingredient information through TheCocktailDB API. Supports searching by cocktail name, ingredient, category, or alcohol content to discover recipes and recommendations.
    5
    -