Voila Groceries MCP
The Voila Groceries MCP server provides tools for grocery automation on the Voila platform — enabling product discovery, cart management, delivery slot handling, and order history access — without exposing checkout or order placement.
Session Management: Check session health to determine if the session is active, guest-only, expired, or retryable (
voila_check_session_health).Shopping Context: Retrieve the active shopping context including current region, delivery destination, delivery method, and cart context (
voila_get_active_shopping_context).Delivery Slots: List available delivery slots for a given destination and region (
voila_get_slot_listings), and reserve a specific slot after explicit user confirmation (voila_reserve_slot).Product Discovery:
Search for products by text query (
voila_search_products)Browse products by category ID (
voila_get_category_products)Fetch discounted/promotional products with configurable savings thresholds, sorting, pagination, and optional text filtering (
voila_get_discounted_products)
Cart Management: View the current cart with totals, limited/unavailable items, and pricing notices (
voila_get_cart); add (voila_add_cart_items) or remove (voila_remove_cart_items) product quantities using product UUIDs.Order History: List completed orders with pagination (
voila_get_completed_orders), retrieve item-level details for a specific order (voila_get_order_details), and aggregate previously ordered items across orders with optional date-range filtering (voila_get_completed_order_items).
Voila MCP
Voila MCP is a Model Context Protocol server for safe personal Voila grocery automation. It exposes small, auditable tools for product search, category browsing, discounts, delivery slots, cart deltas, and completed order history without exposing checkout or order placement.
Published on npm as @firfi/voila-mcp. The repository also includes @firfi/voila-sdk and @firfi/voila-cli.
Packages
packages/voila-sdk:@firfi/voila-sdk, the TypeScript SDK for Voila sessions, search, categories, cart, order history, slots, and checkout-readiness helpers.packages/voila-mcp:@firfi/voila-mcp, a stdio MCP server exposing small auditable tools.packages/voila-cli:@firfi/voila-cli, a user CLI that reuses the MCP operation registry.
The root package is private. Publishable packages live under packages/.
Related MCP server: FireBall1725/pcexpress-mcp-server
MCP Setup
Voila does not publish a documented third-party customer API. This server uses the same same-origin JSON endpoints as the web app, so authenticated use is session-based. Capture a session interactively with the CLI; do not store a Voila password in MCP config.
{
"mcpServers": {
"voila": {
"command": "npx",
"args": ["-y", "@firfi/voila-mcp"],
"env": {
"VOILA_AUTH_SESSION_PATH": "/absolute/path/to/session.json"
}
}
}
}If the session is missing, expired, or guest-only, tool results include authGuidance with the exact CLI login command to run. The MCP server itself does not launch a browser. A login performed while the server is running takes effect on its next tool call, without a restart.
With an explicit VOILA_AUTH_SESSION_PATH and guest mode off, the MCP server
also runs a read-only authenticated-session keepalive. Set VOILA_KEEPALIVE=0
to disable it; VOILA_KEEPALIVE_INTERVAL_SECONDS defaults to 86400 seconds
and must be at least 3600. The keepalive never bootstraps a guest and stops
as misconfigured if its configured session snapshot disappears.
Tools
voila_check_session_health: report active, guest, expired, or retryable session state.voila_get_active_shopping_context: read current region, destination, delivery method, and cart context.voila_get_slot_listings: list delivery slots for an explicit destination and region.voila_reserve_slot: reserve a caller-selected slot only with explicit confirmation flags.voila_search_products: search products for the current session context.voila_get_category_products: fetch products for a Voila category id.voila_get_discounted_products: scan promotions and return meaningful discounted products.voila_get_completed_orders: read completed orders with cursor pagination.voila_get_order_details: read item-level details for one completed order.voila_get_completed_order_items: aggregate previously ordered items across completed orders.voila_get_cart: read active cart totals, limited items, unavailable data, and pricing notices.voila_add_cart_items: add quantity deltas using Voila product UUIDs.voila_remove_cart_items: remove quantity deltas using Voila product UUIDs.
The server does not expose checkout or order-placement tools. Cart mutations use quantity deltas and return server notices for limited, unavailable, and pricing-change cases.
Transports
Stdio is the default for local MCP clients:
npx -y @firfi/voila-mcpHTTP is available for registry inspection and deployments behind a trusted gateway:
MCP_TRANSPORT=http MCP_HTTP_HOST=0.0.0.0 PORT=8080 VOILA_GUEST=1 npx -y @firfi/voila-mcpThe HTTP endpoint is /mcp unless MCP_HTTP_PATH is set. VOILA_GUEST=1 forces guest-session behavior for safe introspection environments such as Glama. Do not expose HTTP with a real session file directly to the public internet; put authentication and access control in front of /mcp.
CLI
voila auth login --session ~/.config/voila/session.json
voila auth status --json
voila auth keepalive --interval 86400
voila search "milk"
voila orders list
voila orders details <order-id>
voila orders items --from-date 2026-06-01 --to-date 2026-06-30
voila cart getThe CLI default session path is ~/.config/voila/session.json. Browser login uses a persistent Playwright profile at ~/.cache/voila/browser-profile unless --profile is provided; log in manually and close the browser window to save.
Verification
pnpm check-all
pnpm package:auditLive endpoint smoke tests remain opt-in. Do not run live cart mutation tests against a real account unless the test cleans up and the caller explicitly asks for it.
Available Tools
13 toolsvoila_add_cart_itemsAdd Cart ItemsADestructive
Add product quantity deltas to the active cart using Voila product UUIDs.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it's a write operation (readOnlyHint=false) with possible destructive effects (destructiveHint=true) and non-idempotent behavior (openWorldHint=true). The description adds minimal additional context—'deltas' and 'active cart'—but does not disclose side effects like item creation or accumulation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence (12 words) with no filler. It is front-loaded with the action and object, making it efficient for agent scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and one nested parameter, the description is brief. It lacks details on behavior for new items (creation vs. update) and the meaning of 'deltas' in relation to the positive-only schema constraint. The context is adequate but not fully comprehensive.
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 0%, so the description must carry the burden. It clarifies that productId is a 'Voila product UUID' and quantity is a 'delta' (change rather than absolute), which adds value beyond the raw schema. However, it does not explain the meaning of a delta (e.g., positive only) or the structure of the items array.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add'), the object ('product quantity deltas'), and context ('active cart using Voila product UUIDs'). It effectively distinguishes from sibling tools like voila_get_cart (read-only) and voila_remove_cart_items (removal) by specifying 'deltas'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying cart item quantities, but does not explicitly state when to choose this over voila_remove_cart_items or how to handle new items. It also does not clarify that quantity must be positive (deltas are strictly additive according to schema) or mention prerequisites like an active session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_check_session_healthCheck Session HealthARead-onlyIdempotent
Check whether the configured Voila session is active, retryable, expired, or guest-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds context about the possible session statuses (active, retryable, expired, guest-only), which is useful behavioral information beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that conveys all essential information without any unnecessary words.
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 health check tool with no parameters and no output schema, the description, combined with the annotations, provides complete context. It tells what the tool checks and the possible outcomes.
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 has zero parameters, so the baseline is 4. The description does not need to explain parameters since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Check' and the resource 'session health' and lists specific statuses (active, retryable, expired, guest-only). It differentiates the tool from sibling tools that deal with cart items, orders, products, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that the tool is used to check session health before performing other operations, but it does not explicitly state when to use it or when not to. No alternatives or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_get_active_shopping_contextGet Active Shopping ContextCRead-onlyIdempotent
Read the active Voila delivery and cart context. Preferred first step for order planning before product discovery because availability and pricing are session and slot-context sensitive.
| Name | Required | Description | Default |
|---|---|---|---|
| regionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations by noting that availability and pricing depend on session and slot context. Annotations already declare readOnlyHint, openWorldHint, idempotentHint as true and destructiveHint as false, so the description's added value is moderate. No contradiction with annotations.
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, front-loaded with the main purpose. No redundant information. Could be slightly improved by brevity, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 1 parameter with no explanation, no output schema, and a complex domain with many sibling tools, the description is insufficient. It doesn't specify what the returned context contains (e.g., delivery address, cart ID, pricing info), which is critical for an agent to plan subsequent calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain the sole parameter 'regionId'. An agent must infer its purpose from the name alone, which is insufficient for a required parameter (though not explicitly required, it has minLength). The description should clarify what regionId represents or defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read the active Voila delivery and cart context' with a specific verb and resource. It distinguishes itself from sibling tools by positioning itself as the 'preferred first step for order planning before product discovery', though it does not explicitly compare to voila_get_cart which might overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for use: 'first step for order planning before product discovery'. It explains why this step is important (session and slot-context sensitivity). However, it does not explicitly exclude other use cases or mention alternatives like voila_get_cart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_get_cartGet CartARead-onlyIdempotent
Fetch the current active cart with totals, limited items, unavailable data, and pricing notices.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's a safe read operation. The description adds behavioral context by specifying the returned components (totals, limited items, etc.), which goes beyond annotations. However, it could mention error conditions or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the action and resource. Every word carries meaning; no extraneous content. Ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and zero parameters, the description sufficiently explains what the tool returns (totals, limited items, etc.). It could be more complete by specifying the response format or data structure, but for the complexity level, it is adequate.
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?
There are zero parameters, and schema description coverage is 100%. Per guidelines, baseline for 0 params is 4. The description does not need to add parameter meaning since there are none, and it remains fitting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and clearly identifies the resource ('current active cart') and its contents ('totals, limited items, unavailable data, and pricing notices'). This distinguishes it from sibling tools like voila_add_cart_items and voila_remove_cart_items, which perform different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when needing the current cart state but does not explicitly state when to use this tool versus alternatives (e.g., voila_get_order_details for past orders). No exclusions or context triggers are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_get_category_productsGet Category ProductsARead-onlyIdempotent
Fetch products for a Voila category id for the current session context. Product availability and pricing are session and slot-context sensitive, so prefer checking slots first when planning an order.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | ||
| pageToken | No | ||
| categoryId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds valuable context that product availability and pricing are session and slot-context sensitive, which is critical for correct usage but not covered by annotations. No contradiction with annotations.
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 consists of two short sentences with no filler. It front-loads the primary action and efficiently communicates the key operational nuance. Every sentence earns its place without redundancy.
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?
Despite good annotations, the description lacks details about output format, pagination behavior, and the exact meaning of 'session context'. Given no output schema and missing parameter descriptions, the agent would need to infer or experiment to use the tool effectively, especially compared to similar sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate by explaining parameter purpose and usage. However, it only implicitly references 'categoryId' without mentioning 'pageSize' or 'pageToken', leaving pagination and constraints undocumented. The agent receives no guidance beyond basic parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch' and the resource 'products for a Voila category id', with the specific scope of 'current session context'. This distinguishes it from sibling tools like voila_get_discounted_products and voila_search_products by focusing on unfiltered category retrieval within a session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to 'prefer checking slots first when planning an order', implying a workflow order but does not explicitly name the slot-checking tool (e.g., voila_get_slot_listings) or specify when not to use this tool. The guidance is helpful but lacks directness and exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_get_completed_order_itemsGet Completed Order ItemsARead-onlyIdempotent
Aggregate previously ordered items across completed orders, optionally within a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| toDate | No | ||
| fromDate | No | ||
| pageSize | No | ||
| maxOrders | No | ||
| pageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety and idempotency. The description adds context about aggregation and date range but does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with 12 words, front-loading the key action and scope. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no output schema, and no param descriptions, the single sentence is insufficient. It does not explain return format, pagination behavior, or how maxOrders interacts with pageSize.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only mentions date range (toDate, fromDate) but ignores pagination parameters (pageSize, maxOrders, pageToken). This leaves agent guessing about usage of these critical parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('aggregate') and resources ('previously ordered items across completed orders') and clarifies the scope with 'optionally within a date range'. It clearly distinguishes from siblings like voila_get_completed_orders and voila_get_order_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing aggregated items from completed orders with an optional date filter, but it does not provide explicit when-to-use or when-not-to-use guidance nor alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_get_completed_ordersGet Completed OrdersARead-onlyIdempotent
Fetch completed Voila orders with cursor pagination for the authenticated account.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | ||
| pageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds cursor pagination detail beyond annotations, but does not disclose other behavioral traits like rate limits, ordering of results, or response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the essential information without any redundancy or unnecessary words. It is front-loaded with the key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 optional params, no output schema, safe annotations), the description covers the core behavior. However, it lacks information about default ordering or response format, which would be helpful for a complete understanding.
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 has 0% description coverage for both parameters. The description mentions 'cursor pagination', implicitly clarifying that pageToken is a cursor, but does not explain pageSize (e.g., default value, behavior when omitted). This provides some value but insufficiently compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'fetch', the resource 'completed Voila orders', and includes scope ('for the authenticated account') and pagination method ('cursor pagination'). This distinguishes it from sibling tools like voila_get_completed_order_items or voila_get_order_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (fetching completed orders), but it does not explicitly mention when to use this tool versus alternatives such as voila_get_order_details or voila_get_completed_order_items. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_get_discounted_productsGet Discounted ProductsARead-onlyIdempotent
Fetch discounted Voila products from promotions. Product availability and pricing are session and slot-context sensitive, so prefer checking slots first when planning an order. By default returns only meaningful discounts ($0.50 or 10% savings); lower thresholds only when the user asks. Query matches are filtered locally and include scan metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| query | No | ||
| pageSize | No | ||
| pageToken | No | ||
| categoryId | No | ||
| minSavingsAmount | No | ||
| minSavingsPercent | No | ||
| retailerCategoryId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds valuable context about session/slot sensitivity and local filtering with scan metadata, enhancing transparency without contradiction.
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 three sentences long, front-loaded with the core purpose, and every sentence adds meaningful context without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 optional parameters and no output schema, the description covers core behavior and important nuances (session sensitivity, default thresholds) but omits parameter descriptions for most fields, leaving users to infer from names. Adequate for basic use but incomplete for advanced scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only explains two parameters (minSavingsAmount and minSavingsPercent) implicitly via default thresholds. Other parameters like sort, query, pageSize, pageToken, categoryId, and retailerCategoryId are left without explanation, insufficient for an 8-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches discounted Voila products from promotions, using a specific verb and resource. It distinguishes from sibling tools like voila_search_products and voila_get_category_products by focusing on promotional/discounted items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises checking slot context first due to session/slot sensitivity and explains default discount thresholds. It implicitly guides when to use (for deals) but lacks explicit exclusions or alternatives beyond the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_get_order_detailsGet Order DetailsARead-onlyIdempotent
Fetch item-level details for one completed Voila order by order id.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the annotations. Annotations clearly indicate read-only, idempotent, open-world, and non-destructive behavior. Description is adequate but does not disclose aspects like error handling or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no extraneous words. It is well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (1 param, no output schema, rich annotations), the description covers the core purpose. However, it lacks details on error cases (e.g., order not found or not yet completed) and does not specify the return format.
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 0% with only a single required parameter 'orderId' (minLength 1). The description mentions 'by order id' but provides no additional semantic guidance like expected format, valid examples, or behavior if order is not found.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch', the resource 'item-level details for one completed Voila order', and the method 'by order id'. It distinguishes from sibling tools that list orders or cart items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The description implies usage when you have a completed order id, but does not mention alternatives or constraints beyond 'completed'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_get_slot_listingsGet Slot ListingsARead-onlyIdempotent
List available Voila delivery slots for an explicit delivery destination and region. Preferred first step for order planning; this is read-only and does not reserve a slot.
| Name | Required | Description | Default |
|---|---|---|---|
| regionId | Yes | ||
| numberOfDays | No | ||
| viewingLocation | No | ||
| shippingGroupType | No | ||
| displayConfiguration | No | ||
| deliveryDestinationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description reinforces that it is read-only and does not reserve a slot, but adds no new behavioral traits beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two short sentences, front-loading the purpose and key behavior, with zero waste.
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 no output schema, the description does not explain the structure of the returned slot listings. Combined with missing parameter descriptions, the tool definition is incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of the 6 parameters (e.g., regionId, deliveryDestinationId, numberOfDays). With no parameter documentation, it fails to add meaning beyond the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'available Voila delivery slots', and specifies constraints like explicit delivery destination and region. It also distinguishes from sibling tools such as voila_reserve_slot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates this is the 'preferred first step for order planning' and notes it is read-only and does not reserve a slot, providing clear context on when to use. However, it lacks explicit when-not or alternative suggestions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_remove_cart_itemsRemove Cart ItemsADestructive
Remove product quantity deltas from the active cart using Voila product UUIDs.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (destructiveHint true) but adds minimal extra context beyond 'quantity deltas' and 'active cart'. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded and contains no redundant information. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter array), the presence of annotations, and no output schema, the description provides sufficient context for an agent to understand the core operation. It could mention that quantities must be positive, but overall it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by specifying 'quantity deltas' and 'Voila product UUIDs', which map to the items array properties productId and quantity. However, it does not explain the direction of the delta (e.g., positive values remove quantity) or the exact structure of the array.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove'), the target ('product quantity deltas from the active cart'), and the method ('using Voila product UUIDs'). It distinguishes from sibling tools like voila_add_cart_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (active cart, product UUIDs) but does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_reserve_slotReserve SlotADestructive
Reserve a caller-selected Voila delivery slot. This is a mutation and should only be called after a latest slot listing and explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| slotId | Yes | ||
| regionId | Yes | ||
| externalAddress | No | ||
| deliveryDestinationId | Yes | ||
| confirmSlotReservation | Yes | ||
| allowReservationOverwrite | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description labels it as a mutation, consistent with annotations (destructiveHint=true). It adds the precondition but lacks deeper behavioral details such as idempotency, blocking behavior, or side effects beyond the basic mutation indication.
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 concise sentences with no wasted words. The first sentence conveys purpose, the second gives usage condition. It's front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, a nested object, no output schema, and a destructive hint, the description covers the usage condition but omits details about return values, parameter semantics, and overwrite behavior. It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no parameter explanations. Key parameters like slotId, regionId, and externalAddress remain undefined, leaving the agent without guidance on required values or formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'reserve' and the resource 'Voila delivery slot'. It distinguishes from the sibling `voila_get_slot_listings` by specifying that it must be called after a slot listing and user confirmation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states that the tool should only be used after a latest slot listing and explicit user confirmation, providing clear usage context. It does not enumerate alternative tools, but the sibling context implies `voila_get_slot_listings` is the precursor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voila_search_productsSearch ProductsARead-onlyIdempotent
Search Voila products by text query for the current session context. Product availability and pricing are session and slot-context sensitive, so prefer checking slots first when planning an order.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| pageSize | No | ||
| pageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds useful behavioral context about session and slot sensitivity of results, which is beyond the annotations. No contradictions detected.
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 concise: two sentences with no wasted words. The first sentence states the core function, and the second adds important context. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters and no output schema, the description covers the main purpose and context sensitivity but omits details about pagination, result format, and what 'current session context' means precisely. It is minimally viable for a search tool but leaves some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the schema provides no parameter descriptions. The tool description does not mention any parameters either, forcing the agent to rely solely on the schema's property names. For a 3-parameter tool, the description should have added meaning (e.g., that 'query' is a text string, 'pageSize' limits results, 'pageToken' handles pagination), but it fails to do so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Voila products by text query for the current session context. It uses a specific verb and resource, and the phrase 'by text query' distinguishes it from sibling tools like voila_get_category_products or voila_get_discounted_products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Product availability and pricing are session and slot-context sensitive, so prefer checking slots first when planning an order.' This tells the agent when to use the tool and suggests a contextual alternative (checking slots), though it does not explicitly name the sibling tool voila_get_slot_listings.
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. Dates show when Glama detected each change.
13 tool updates
v0.1.0- First observed
voila_add_cart_items - First observed
voila_check_session_health - First observed
voila_get_active_shopping_context - First observed
voila_get_cart - First observed
voila_get_category_products - First observed
voila_get_completed_order_items - First observed
voila_get_completed_orders - First observed
voila_get_discounted_products - First observed
voila_get_order_details - First observed
voila_get_slot_listings - First observed
voila_remove_cart_items - First observed
voila_reserve_slot - First observed
voila_search_products
TDQS
Each tool targets a distinct operation: cart management, session health, shopping context, product discovery (by category, search, discounts), slot operations, and order history. No two tools overlap in purpose.
All tool names follow the consistent pattern 'voila_verb_noun' in snake_case (e.g., voila_add_cart_items, voila_reserve_slot). No mixing of conventions or vague verbs.
With 13 tools, the set is well-scoped for a grocery ordering assistant. It covers core operations without being overwhelming or sparse.
The tool surface covers product discovery, cart operations, slot reservation, and order history. A minor gap is the lack of a category listing tool, but the domain is otherwise well-covered.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Grocery meal planning, budgets, and flyer deals for Canadian households. Auth required.
Canadian grocery flyer deals and recipes by item, store, postal code, cuisine, or diet. No auth.
Search multi-merchant supply, checkout, and track orders via MCP.
Kroger MCP — grocery products, prices, and store locations (developer.kroger.com)
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Real Canadian Superstore to extract order history, browse products, and export purchase data. Supports authentication via bearer token and provides comprehensive order management and product discovery capabilities.-
- AlicenseNot gradedqualityAmaintenanceControl your grocery cart with AI! This MCP server enables LLMs (like Claude) to search past orders, find products, and manage your shopping cart across all Loblaws-owned grocery banners.8AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceMCP server for grocery-related web automation using Playwright, enabling AI assistants to interact with grocery websites.-
- FlicenseAqualityCmaintenanceEnables product search, product detail, online availability, and store finder for RONA's catalogue via MCP tools.4-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dearlordylord/voila-sdk'
If you have feedback or need assistance with the MCP directory API, please join our Discord server