Skip to main content
Glama
MonoPaul
by MonoPaul

saq-mcp

A Model Context Protocol server for SAQ.com (Société des alcools du Québec).

Search wines and spirits, track new arrivals, monitor restocks, and filter alerts by geographic area — all from Claude or any MCP-compatible client.

Features

Tool

Description

search_products

Full-text search with filters: category, country, region, grape, price, availability

get_product

Product details by SKU (country, region, grape, ABV, sugar, taste profile, rating, store count)

get_new_arrivals

Products sorted by arrival date, optionally filtered by category

get_coming_soon

Products with "Available shortly" or "Lottery soon" status

check_store_availability

Which stores currently carry a product

watch_product

Add a SKU to the restock watchlist

unwatch_product

Remove from watchlist

watch_all

Monitor the entire SAQ catalog (~35k products) for any restock

unwatch_all

Disable catalog-wide monitoring

check_restocks

Manually trigger a restock check for all watched products

list_watched

Show watchlist status and last snapshot

set_location_filter

Restrict restock alerts to stores within a radius of a city or coordinates

clear_location_filter

Remove geographic filter

Related MCP server: MCP SearXNG Enhanced

How it works

SAQ's website runs on Adobe Commerce with the Live Search catalog service. On first run, a headless Chromium browser intercepts an outgoing request to catalog-service.adobe.io to extract the public API key, which is then cached locally. All subsequent calls go directly to the GraphQL endpoint — no browser overhead.

Restock detection compares each product's store_availability_list (a full list of store IDs returned inline by the search API) against a saved snapshot. A restock fires when new store IDs appear or availability status improves (e.g. Sold out → In store).

Requirements

  • Node.js 20+

  • macOS (for the launchd agent; the MCP server itself is cross-platform)

Installation

git clone https://github.com/MonoPaul/saq-mcp.git
cd saq-mcp
npm install
npx playwright install chromium   # one-time: downloads headless browser
npm run build

Add to Claude Code

Add to ~/.claude.json under mcpServers:

{
  "mcpServers": {
    "saq": {
      "command": "node",
      "args": ["/path/to/saq-mcp/dist/index.js"]
    }
  }
}

Schedule daily restock checks (macOS)

bash install.sh

This fills in the com.saq-mcp.watcher.plist.template with your local paths, writes it to ~/Library/LaunchAgents/, and loads it with launchctl. The watcher runs daily at 05:30 and sends a macOS notification for any restock detected.

You can also run it manually at any time:

node dist/watcher.js --notify

Geographic filtering

Restock alerts can be scoped to stores within a configurable radius:

# In Claude:
set_location_filter city="Montréal" radius_km=30

The city is geocoded using SAQ's own store directory (no external geocoding API). The filter applies to both individually watched products and the full catalog scan.

Data stored locally

All runtime data lives in ~/.saq-mcp/:

File

Contents

credentials.json

Cached API key (extracted once from the SAQ website)

watchlist.json

Watched SKUs, store snapshots, location filter

catalog-snapshot.json

Full catalog snapshot for watch-all mode

stores.json

SAQ store directory with coordinates (refreshed weekly)

restock.log

Append-only log of every watcher run

None of these files are committed to git.

License

MIT

Available Tools

15 tools
cellartracker_statusA

Show whether CellarTracker enrichment is configured for the daily email.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description must convey behavioral traits. It correctly indicates a read-only operation checking configuration status, with no side effects or destructive behavior. However, it does not discuss authentication, rate limits, or error conditions.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no unnecessary words. Every part is relevant and concise.

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?

Given no parameters and no output schema, the description adequately conveys the tool's purpose. However, it could mention the return type (e.g., boolean) for greater completeness.

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 has no parameters and schema coverage is 100%. Since there are no parameters, the description cannot add parameter meaning beyond the schema. The baseline for 0 parameters is 4.

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

Purpose5/5

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

The description clearly states the tool shows whether CellarTracker enrichment is configured for the daily email. It uses a specific verb ('show') and resource ('enrichment configured for daily email'), distinguishing it from sibling tools like setup_cellartracker.

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

Usage Guidelines3/5

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

The description implies usage for checking configuration status, but does not provide explicit guidance on when to use this tool versus alternatives, such as setup_cellartracker. No exclusions or prerequisites are mentioned.

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

check_restocksA

Check all watched products for restock events right now. Compares current SAQ availability against saved snapshots.

ParametersJSON Schema
NameRequiredDescriptionDefault
notifyNoSend a macOS notification for each restock detected

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses the core comparison action and optional notification, but does not mention whether the tool modifies snapshots, rate limits, or the meaning of 'SAQ'. Additional context on side effects or data flow is missing.

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

Conciseness5/5

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

Two concise sentences, front-loaded with action and resource. No filler or redundancy. Every word serves a purpose.

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

Completeness3/5

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

The description omits what the tool returns, which is important since there is no output schema. It also lacks information on prerequisites (e.g., must have watched products). For a simple tool, these gaps reduce completeness.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter 'notify', which is already described in the schema as 'Send a macOS notification for each restock detected'. The description does not add further semantic value beyond the schema.

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

Purpose5/5

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

The description clearly states it checks watched products for restock events, with specific verb 'check', resource 'watched products', and context 'SAQ availability against saved snapshots'. It distinguishes from siblings like 'check_store_availability' which is for individual store checks.

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

Usage Guidelines4/5

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

The description implies periodic use to detect restocks ('right now'), but it does not explicitly state when to use this tool versus alternatives like 'check_store_availability' or prerequisites. The context of 'watched products' and siblings provides implicit guidance.

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

check_store_availabilityB

Check which SAQ stores have a specific product in stock

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYesSAQ product code / SKU

TDQS

B3.2/5.0
Behavior2/5

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

No annotations provided, so description bears full burden. It doesn't disclose behavioral traits such as whether results are filtered by location, whether the tool is read-only, or what response format to expect.

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?

Single sentence, no unnecessary words. Front-loaded with the core purpose.

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

Completeness2/5

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

Lacks output schema and behavioral details. Given the simplicity, the description could inform about output format (store IDs, addresses) or the impact of location filters on results.

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 covers 100% of parameters with a clear description for the only parameter 'sku'. Description adds no extra meaning beyond what is in the schema.

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

Purpose5/5

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

Description clearly states the verb 'check', resource 'SAQ stores', and purpose 'which have a specific product in stock'. It uniquely identifies the tool's function among siblings like 'get_product' or 'search_products'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like 'get_product' or 'check_restocks'. No mention of prerequisites or when not to use it.

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

clear_location_filterA

Remove the geographic filter — restock alerts will cover all SAQ stores in Quebec

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

The description discloses the primary behavior (removes filter, affects restock alerts coverage). However, with no annotations, it does not mention edge cases (e.g., idempotency, what happens if no filter is set) or any side effects. The disclosure is adequate but not thorough.

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

Conciseness5/5

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

The description is a single sentence that is front-loaded with the main action ('Remove the geographic filter') and provides a clear consequence. It contains no unnecessary words.

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?

Given the tool has no parameters, no output schema, and a simple action, the description is largely complete. It explains what the tool does and its effect. A minor gap is the lack of mention about whether the action is reversible or its scope beyond restock alerts.

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 has no parameters, and schema coverage is 100%. The description adds value by explaining the tool's purpose beyond the empty schema. Baseline for 0 parameters is 4, and the description justifies it by clarifying the action and its effect.

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

Purpose5/5

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

The description clearly states the verb 'Remove the geographic filter' and the resource being acted upon. It distinguishes from the sibling tool set_location_filter by specifying that it removes the filter, and explains the consequence (restock alerts cover all stores in Quebec).

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

Usage Guidelines4/5

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

The description implies when to use this tool (when you want to remove the geographic filter and have alerts cover all stores). It does not explicitly state when not to use it, but the context of having set_location_filter as a sibling provides clear differentiation. No exclusions or alternatives are mentioned.

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

get_coming_soonC

Get products that are coming soon (not yet available / pre-release), including upcoming lottery products

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
categoryNo
page_sizeNo

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description must convey behavioral traits. It states what it returns (coming soon products including lottery), but lacks details on pagination, ordering, or any side effects. Minimal disclosure.

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?

Single sentence of 16 words, no redundancy. Front-loads the core purpose. However, it is too short to cover needed guidance, so not penalized heavily but could be more informative.

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

Completeness1/5

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

The tool has 3 parameters with no description coverage, no output schema, and no annotations. The description does not explain pagination, filtering options, or return structure, leaving significant gaps for agent usage.

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

Parameters1/5

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

Schema description coverage is 0%, meaning the description adds no value to understanding parameters. The three parameters (page, category, page_size) are not explained in the description, leaving the agent to rely solely on the schema defaults and enum.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'products that are coming soon', including the specific case of lottery products. It distinguishes from siblings like 'get_new_arrivals' which likely targets newly available items.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives like 'get_new_arrivals' or 'search_products'. The description only implies usage for pre-release products without addressing when not to use it.

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

get_new_arrivalsC

Get the latest new arrivals on SAQ.com, sorted by arrival date (most recent first)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
categoryNoFilter new arrivals by category
page_sizeNo

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior, but it only states the basic function. It omits any mention of authentication needs, rate limits, idempotency, side effects, or return format. This is insufficient for a tool with no annotation support.

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

Conciseness5/5

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

The description is a single, well-structured sentence that immediately states the tool's core purpose and sorting behavior. Every word is necessary, and there is no superfluous information.

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

Completeness2/5

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

Considering the lack of output schema and annotations, the description is too sparse. It fails to explain pagination behavior, what fields the response contains, error handling, or any constraints beyond the parameters. A more complete description would include common behavioral details.

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

Parameters1/5

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

The schema has 33% description coverage, yet the description adds zero additional context for the three parameters. It does not explain 'page', 'page_size', or 'category' beyond their names and defaults. The category enum is already in the schema, so no added value.

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

Purpose5/5

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

The description clearly states the action ('Get'), the resource ('latest new arrivals on SAQ.com'), and the sorting ('sorted by arrival date, most recent first'). It effectively distinguishes this tool from siblings like 'get_coming_soon' or 'search_products'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, limitations, or conditions under which this tool should be preferred over similar tools like 'search_products' or 'get_coming_soon'.

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

get_productA

Get full details for a specific SAQ product by its SKU/code

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYesSAQ product code / SKU (e.g. "14366195" or "0014366195")

TDQS

A3.8/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 of behavioral disclosure. It states 'Get full details' but does not elaborate on what 'full details' includes (e.g., pricing, availability, nested objects). It implies a safe read operation but does not confirm read-only nature or discuss rate limits, authentication needs, or side effects.

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

Conciseness5/5

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

The description is a single sentence that is clear and front-loaded. Every word serves a purpose with no unnecessary fluff.

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?

Given the tool has one parameter, no output schema, and no nested objects, the description is mostly complete. It lacks explicit mention of what data is returned in 'full details', but for a simple retrieval tool, it is sufficient. Could be improved by listing example fields returned.

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

Parameters3/5

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

The input schema has one parameter 'sku' with a description that includes examples, achieving 100% schema coverage. The tool description does not add significant parameter-specific meaning beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Get', the resource 'full details for a specific SAQ product', and the method 'by its SKU/code'. This distinguishes it from sibling tools like search_products (which is for browsing) and get_coming_soon/get_new_arrivals (which are subsets).

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

Usage Guidelines3/5

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

The description implies usage when you have a specific SKU, but it does not explicitly state when to use this tool versus alternatives like search_products for multiple products or getting specific lists. No when-not or prerequisite information is provided.

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

list_watchedA

Show all products on the restock watchlist with their current snapshot status

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It conveys that the tool is read-only and returns a snapshot status. However, it lacks details on whether the list is paginated, sorted, or real-time. For a zero-parameter tool, the transparency is adequate.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. Every part contributes to the purpose.

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?

Given no parameters, no output schema, and a straightforward purpose, the description covers the essential information. It is complete enough for an agent to understand the tool's function without additional context.

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?

No parameters exist, so schema coverage is trivially 100%. According to the rubric, zero parameters baseline is 4. The description adds no extra parameter info, but none is needed.

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

Purpose5/5

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

The description clearly states the verb 'Show' and the resource 'all products on the restock watchlist' along with what is included ('current snapshot status'). It effectively distinguishes from sibling tools like 'get_product' (single product) or 'search_products' (query-based).

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

Usage Guidelines3/5

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

The description implies when to use this tool (to view the watchlist) but does not provide explicit guidance on when not to use it or mention alternatives. For a simple listing tool with many related siblings, some context on when to prefer this over other watchlist tools would be beneficial.

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

search_productsC

Search SAQ products by query, category, country, grape variety, price range, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
grapeNoGrape variety (e.g. "Cabernet Sauvignon")
queryNoSearch term (wine name, producer, region, etc.)
regionNoRegion (e.g. "Bordeaux", "Burgundy")
countryNoCountry of origin (e.g. "France", "Italy")
sort_byNoSort fieldrelevance
categoryNoProduct category
sort_dirNoSort directiondesc
max_priceNoMaximum price in CAD
min_priceNoMinimum price in CAD
page_sizeNo
availabilityNoFilter by availability status

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must disclose behavior but only says 'search products'. It omits pagination behavior, sorting defaults, result format, and whether it's read-only. The agent has no information about side effects, rate limits, or authentication needs.

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?

Single sentence efficiently communicates the tool's main function. No redundancy, front-loaded with the core purpose. Every word earns its place.

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

Completeness2/5

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

Despite 12 parameters and no output schema, the description fails to explain search behavior, result structure, pagination, or how filters combine. It is insufficient for an agent to fully understand the tool's capabilities without relying heavily on the schema.

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 high (83%), so the schema already describes most parameters. The description adds minimal value by listing a few parameter names but does not explain their meaning beyond what the schema provides. Baseline 3 is appropriate.

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?

Description clearly states the tool searches SAQ products by various criteria (query, category, country, grape variety, price range). It distinguishes from specific sibling tools like get_new_arrivals or check_store_availability, but the ending 'etc.' slightly reduces precision.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs. alternatives like get_coming_soon or check_restocks. The agent is left to infer that this is the general search while others are specialized, but no explicit direction is given.

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

set_location_filterA

Restrict restock alerts to SAQ stores within a radius of a city or coordinates. Applies to both individual SKU watching and watch-all catalog scans.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of center — use instead of city for a precise location
lngNoLongitude of center — use instead of city for a precise location
cityNoCity name (e.g. "Montréal", "Québec", "Laval"). Used to compute the center point.
radius_kmNoRadius in km around the center point (default: 30)

TDQS

A3.8/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. It discloses that the tool restricts alerts to a radius and applies to both individual and watch-all scans, but does not mention whether the filter is persistent, whether it overrides previous filters, or if any side effects exist. This is minimal transparency for a mutation tool.

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

Conciseness5/5

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

Two sentences, each adding distinct value: the first states the primary action and the scope, the second clarifies applicability. No redundant or unnecessary words.

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?

Given the tool's simplicity (4 params, no output schema, no annotations), the description is complete enough. It explains what the tool does and its scope. It could optionally mention that it returns a confirmation or affects subsequent alerts, but this is not critical.

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?

Parameter schema coverage is 100% with clear descriptions for each param (lat, lng, city, radius_km). The description adds a general statement about using city or coordinates but does not provide additional semantic detail beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: to restrict restock alerts to SAQ stores within a radius. It specifies the verb 'restrict' and the resource 'restock alerts', and distinguishes itself by explicitly mentioning it applies to both individual SKU watching and watch-all catalog scans, differentiating from siblings like 'clear_location_filter'.

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

Usage Guidelines3/5

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

The description implies usage for setting a geographic filter but provides no explicit guidance on when to use this tool versus alternatives (e.g., clear_location_filter) or when not to use it. No context about prerequisites or conditions is given.

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

setup_cellartrackerA

Configure CellarTracker credentials so the daily email includes community scores and average prices. Credentials are saved to ~/.saq-mcp/cellartracker.json and used only by the watcher daemon.

ParametersJSON Schema
NameRequiredDescriptionDefault
passwordYesYour CellarTracker password
usernameYesYour CellarTracker username

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Discloses that credentials are saved to a specific file (~/.saq-mcp/cellartracker.json) and scope of use (only by watcher daemon). Does not detail overwrite behavior or immediate validation, but adequate for this simple tool.

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

Conciseness5/5

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

Two efficient sentences: first explains purpose and effect, second adds file location and usage constraint. No wasted words.

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?

Given the simplicity (2 required params, no output schema, no nested objects), the description is complete. It explains the 'why' and 'where'. Could include validation or error handling, but not necessary for basic use.

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 describes username and password with descriptions, and coverage is 100%. Description adds context ('CellarTracker credentials') but does not add meaning beyond what the schema provided. Baseline score of 3 is appropriate.

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

Purpose5/5

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

Clearly states the verb 'Configure' and resource 'CellarTracker credentials', and explains the purpose (daily email includes community scores and average prices). Distinct from siblings which are search/check tools, making this a unique configuration tool.

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?

Describes the effect (email enrichment) and the side effect (credentials saved to a file, used only by watcher daemon). Implies it's a setup step, but does not explicitly state when not to use or mention alternatives.

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

unwatch_allA

Disable full-catalog restock monitoring (catalog snapshot is kept on disk)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description adds value by noting that 'catalog snapshot is kept on disk', indicating a non-destructive operation. It does not fully detail side effects (e.g., no mention of any pending notifications), but for a simple 0-parameter tool, this is sufficient.

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

Conciseness5/5

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

The description is a single concise sentence with a parenthetical note, containing no unnecessary words and efficiently conveying the tool's purpose and a key behavioral detail.

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

Completeness5/5

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

For a tool with no parameters and no output schema, the description fully explains what the tool does and what effect it has (disabling monitoring while retaining the snapshot). No additional information is needed.

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?

There are no parameters, so no parameter semantics are needed. The description does not add anything about parameters, but baseline for 0 params is 4.

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

Purpose5/5

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

The description clearly states the verb 'Disable' and the resource 'full-catalog restock monitoring', and the name 'unwatch_all' directly contrasts with sibling 'watch_all', providing strong purpose clarity.

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?

No explicit guidance on when to use this tool vs alternatives like 'unwatch_product' or 'watch_all', but the name and context (sibling tools) imply it is for disabling the full-catalog monitoring previously enabled by 'watch_all', so usage is inferable.

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

unwatch_productA

Remove a product from the restock watchlist

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYesSAQ product code / SKU to stop watching

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral details. It mentions removal from a watchlist but does not clarify idempotency, side effects, or behavior if the product is not currently watched.

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, concise sentence with no extraneous information. Every word is necessary and 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?

Given the single parameter and no output schema, the description is adequate but minimal. It lacks context about effects, accuracy, or prerequisites, leaving room for more completeness.

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

Parameters3/5

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

The schema already describes the single parameter 'sku' with 100% coverage. The description adds no additional meaning beyond what the schema provides, resulting in baseline score.

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

Purpose5/5

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

The description clearly states the action: 'Remove a product from the restock watchlist,' with a specific verb and resource. It directly contrasts with sibling tools like watch_product and list_watched.

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

Usage Guidelines3/5

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

The description implies use when a product should no longer be watched, but provides no explicit guidance on when to use this tool versus alternatives (e.g., unwatch_all) or any prerequisites.

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

watch_allA

Enable full-catalog restock monitoring. The daily watcher will scan every SAQ product and alert on any store count increase or availability improvement.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/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. It discloses that the tool initiates a daily scan and alerts on stock increases, but omits details like reversibility, persistence, or what alerts look like. Some behavioral context is given but not comprehensive.

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, front-loaded with purpose, no extra words. Every sentence earns its place, providing necessary information efficiently.

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

Completeness3/5

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

The description lacks details on what happens after enabling the watcher (e.g., how alerts are delivered, how to stop). Sibling tools like unwatch_all exist but are not referenced. For a simple tool, it's adequate but could be more complete.

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?

There are zero parameters, and the schema coverage is 100% by default. Per guidelines, 0 parameters gives a baseline of 4. The description adds no parameter-related meaning, but none is needed.

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

Purpose5/5

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

Description clearly states the tool enables full-catalog restock monitoring, distinguishing it from siblings like watch_product for individual products. The verb 'Enable' and resource 'full-catalog restock monitoring' are specific and unambiguous.

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

Usage Guidelines4/5

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

The description implies usage when broad monitoring of all SAQ products is desired. While it doesn't explicitly mention when not to use or alternatives, the sibling list provides context. A clear guideline is provided within the description.

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

watch_productB

Add a SAQ product to the restock watchlist. The watcher will alert when it becomes available at new stores.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYesSAQ product code / SKU to watch

TDQS

B3.3/5.0
Behavior2/5

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

Without annotations, the description carries full behavioral burden. It mentions alerting but omits details like whether the tool is idempotent, requires authentication, or handles duplicate watches. Users must infer behavior.

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, 18 words, front-loaded with the action. Every word is necessary; no fluff.

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?

Adequate for a simple tool with one parameter and no output schema. However, missing context like maximum watchlist size or duplicate handling, and given many sibling tools, more guidance would help.

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?

With 100% schema description coverage, the baseline is 3. The description adds no additional meaning beyond the schema's description of the 'sku' parameter.

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

Purpose5/5

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

The description clearly states the verb 'add', the resource 'SAQ product to the restock watchlist', and the purpose of alerting when available. This distinguishes it from sibling tools like unwatch_product or check_restocks.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like watch_all or check_restocks. The description does not mention prerequisites, limitations, or scenarios where another tool would be preferred.

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. 15 tool updatesv1.0.0
    • First observedcellartracker_status
    • First observedcheck_restocks
    • First observedcheck_store_availability
    • First observedclear_location_filter
    • First observedget_coming_soon
    • First observedget_new_arrivals
    • First observedget_product
    • First observedlist_watched
    • First observedsearch_products
    • First observedset_location_filter
    • First observedsetup_cellartracker
    • First observedunwatch_all
    • First observedunwatch_product
    • First observedwatch_all
    • First observedwatch_product

TDQS

A3.7/5.0

Scored across 15 tools

Disambiguation5/5

Each tool has a clearly distinct purpose. For example, watch_product vs watch_all are differentiated by scope, and check_restocks vs check_store_availability target different actions. All descriptions are explicit enough to avoid confusion.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (e.g., search_products, set_location_filter), but cellartracker_status breaks this pattern by starting with a noun instead of a verb. This is a minor deviation in an otherwise uniform set.

Tool Count5/5

15 tools is well-scoped for the domain of product search, restock monitoring, and CellarTracker integration. Each tool serves a specific function without unnecessary redundancy, and the count is within the ideal range for a focused MCP server.

Completeness4/5

The tool set covers the core workflows: product discovery, watchlist management, restock checking, location filtering, and CellarTracker setup. Minor gaps exist, such as the absence of store details retrieval or credential management, but these do not hinder the main use cases.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that enables AI assistants to search for alcohol products, manage shopping carts, and place orders on Drizly. It uses browser automation to check product availability, discover local stores, and track delivery status.
    12
    8 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server for real-time Swiss grocery shopping that searches and compares products across 8 major Swiss retailers (Migros, Coop, Aldi, Denner, Lidl, Farmy, Volgshop, Otto’s), normalizes per-unit prices, surfaces promotions, computes optimal multi-store shopping plans, and works with any MCP-compatible client without API keys or accounts.
    7
    86 npm
    30
    AGPL 3.0