Skip to main content
Glama
CupOfOwls

Kroger MCP Server

by CupOfOwls

🛒 Kroger MCP Server 🛍️ -- FastMCP for Kroger Shopping

A FastMCP server that provides AI assistants like Claude with access to Kroger's grocery shopping functionality through the Model Context Protocol (MCP). This server enables AI assistants to find stores, search products, manage shopping carts, and access Kroger's comprehensive grocery data via the kroger-api python library.

📚 Docs: https://cupofowls.github.io/kroger-api/building-ai-agents/agent-lab — build an AI agent with kroger-mcp, and the full tool reference.

📺 Demo

Using Claude with this MCP server to search for stores, find products, and add items to your cart:

https://github.com/user-attachments/assets/69055f5f-04f5-4ec1-96ac-330aa288fbd1

Related MCP server: mcp-carrefour

Changelog

A changelog with recent changes is here.

🚀 Quick Start

Prerequisites

You will need Kroger API credentials (free from Kroger Developer Portal). Visit the Kroger Developer Portal to:

  1. Create a developer account

  2. Register your application

  3. Get your CLIENT_ID, CLIENT_SECRET, and set your REDIRECT_URI

The first time you run a tool requiring user authentication, you'll be prompted to authorize your app through your web browser. You're granting permission to your own registered app, not to any third party.

Installation

⚠️ macOS users must use installation Option 2 ⚠️

Once published to PyPI, you can use uvx to run the package directly without cloning the repository:

Edit Claude Desktop's configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Linux: ~/.config/Claude/claude_desktop_config.json

Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "kroger": {
      "command": "uvx",
      "args": [
        "kroger-mcp"
      ],
      "env": {
        "KROGER_CLIENT_ID": "your_client_id",
        "KROGER_CLIENT_SECRET": "your_client_secret", 
        "KROGER_REDIRECT_URI": "http://localhost:8000/callback",
        "KROGER_USER_ZIP_CODE": "10001"
      }
    }
  }
}

Benefits of this method:

  • Automatically installs the package from PyPI if needed

  • Creates an isolated environment for running the server

  • Makes it easy to stay updated with the latest version

  • Doesn't require maintaining a local repository clone

Option 2: Using uv with a Local Clone

First, clone locally:

git clone https://github.com/CupOfOwls/kroger-mcp

Then, edit Claude Desktop's configuration file:

{
  "mcpServers": {
    "kroger": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/cloned/kroger-mcp",
        "run",
        "kroger-mcp"
      ],
      "env": {
        "KROGER_CLIENT_ID": "your_client_id",
        "KROGER_CLIENT_SECRET": "your_client_secret", 
        "KROGER_REDIRECT_URI": "http://localhost:8000/callback",
        "KROGER_USER_ZIP_CODE": "10001"
      }
    }
  }
}

Option 3: Installing From PyPI

# Install with uv (recommended)
uv pip install kroger-mcp

# Or install with pip
pip install kroger-mcp

Option 4: Installing From Source

# Clone the repository
git clone https://github.com/CupOfOwls/kroger-mcp
cd kroger-mcp

# Install with uv (recommended)
uv sync

# Or install with pip
pip install -e .

Configuration

Pass the settings in the env block of your MCP client's JSON config, or put them in a .env file in the directory you start the server from (only its KROGER_* settings are read):

# Required: Your Kroger API credentials
KROGER_CLIENT_ID=your_client_id_here
KROGER_CLIENT_SECRET=your_client_secret_here
KROGER_REDIRECT_URI=http://localhost:8000/callback

# Optional: Default zip code for location searches
KROGER_USER_ZIP_CODE=90274

# Optional: The scopes the user grants at sign-in (default: product.compact cart.basic:write).
# Add profile.compact for get_user_profile, but only if your app is registered for the Identity API.
# KROGER_USER_SCOPES=product.compact cart.basic:write profile.compact

Running the Server

# With uv (recommended)
uv run kroger-mcp

# With uvx (directly from PyPI without installation)
uvx kroger-mcp

# Or with Python directly
python server.py

# Options such as an HTTP transport (see kroger-mcp --help)
uvx kroger-mcp --transport streamable-http --port 8000

# With FastMCP CLI for development
fastmcp dev server.py --with-editable .

🛠️ Features

💬 Built-In MCP Prompts

  • Shopping Path: Find optimal path through store for a grocery list

  • Pharmacy Check: Check if pharmacy at preferred location is open

  • Store Selection: Help user set their preferred Kroger store

  • Recipe Shopping: Find recipes and add ingredients to cart

📚 Available Tools

Location Tools

Tool

Description

Auth Required

search_locations

Find Kroger stores near a zip code

No

get_location_details

Get detailed information about a specific store

No

set_preferred_location

Set a preferred store for future operations

No

get_preferred_location

Get the currently set preferred store

No

check_location_exists

Verify if a location ID is valid

No

Product Tools

Tool

Description

Auth Required

search_products

Search for products by name, brand, or other criteria

No

bulk_search_products

Run up to 25 product searches in a single call

No

get_product_details

Get detailed product information including pricing

No

search_products_by_id

Find products by their specific product ID

No

get_product_images

Get product images from specific perspective (front, back, etc.)

No

Cart Tools

Tool

Description

Auth Required

add_items_to_cart

Add a single item to cart

Yes

bulk_add_to_cart

Add multiple items to cart in one operation

Yes

view_current_cart

View items currently in your local cart tracking

No

remove_from_cart

Remove items from local cart tracking

No

clear_current_cart

Clear all items from local cart tracking

No

mark_order_placed

Move current cart to order history

No

view_order_history

View history of placed orders

No

Information Tools

Tool

Description

Auth Required

list_chains

Get all Kroger-owned chains

No

get_chain_details

Get details about a specific chain

No

check_chain_exists

Check if a chain exists

No

list_departments

Get all store departments

No

get_department_details

Get details about a specific department

No

check_department_exists

Check if a department exists

No

Profile Tools

Tool

Description

Auth Required

get_user_profile

Get authenticated user's profile information

Yes

test_authentication

Check that the user is signed in and the token has not expired, refreshing it if it has

No

get_authentication_info

Get detailed authentication status

No

force_reauthenticate

Delete the saved sign-in, so the user can sign in again

No

start_authentication asks the user to grant product.compact and cart.basic:write, which the cart tools need. get_user_profile also needs profile.compact, from the Identity API. An app may request only the scopes of the API products it is registered for, and Kroger refuses the whole sign-in with invalid_scope when one is missing, so profile.compact is not requested by default. To use get_user_profile, register the Identity API for your app in the Kroger Developer Portal, set KROGER_USER_SCOPES to product.compact cart.basic:write profile.compact, restart the server, and sign in again.

Utility Tools

Tool

Description

Auth Required

get_current_datetime

Get current system date and time

No

🧰 Local-Only Cart Tracking

Since the Kroger API doesn't provide cart viewing functionality, this server maintains local tracking:

Local Cart Storage

  • File: kroger_cart.json

  • Contents: Current cart items with timestamps

  • Automatic: Created and updated automatically

Order History

  • File: kroger_order_history.json

  • Contents: Historical orders with placement timestamps

  • Usage: Move completed carts to history with mark_order_placed

Where these files live

State files (cart, order history, preferences) and OAuth tokens are stored in the first matching location:

  1. $KROGER_TOKEN_DIR, if you set that environment variable

  2. $XDG_DATA_HOME/kroger-mcp/ (defaults to ~/.local/share/kroger-mcp/) on macOS/Linux

  3. %APPDATA%\kroger-mcp\ on Windows

They are never written to the current working directory, which may be read-only or change between sessions under MCP hosts like Claude Desktop. Files from older versions that live in the working directory are migrated automatically on first use.

Several server processes can share the directory, for example one for Claude Desktop and one for Claude Code. Each change to a state file, and each renewal of the sign-in, holds a lock on that file (a .lock file beside it), so the processes do not overwrite each other's changes or sign each other out.

⚡ Concurrent calls

Each tool that calls the Kroger API or reads a state file runs in a worker thread, so a slow Kroger request holds up only its own call. The assistant's other calls go on, and so do the other clients of a server that uses the streamable-http or sse transport. Cancelling a call answers at once, but the request it already sent still finishes: a cancelled add_items_to_cart can still add the items.

⚠️ Error Handling

A tool that fails returns an MCP error result (isError: true), so the assistant can see what went wrong and correct its next call:

  • Text content: what went wrong, followed by Next step: and what to do about it, often naming the tool to call.

  • Structured content: an error object with a stable type, the message, the next_step, the tool, and every detail the kroger-api package has about a Kroger API error: status_code, Kroger's kroger_code and kroger_message, the request method and url, the correlation_id, a hint, and the response_body.

type

When

invalid_arguments

An argument breaks the tool's input schema (wrong pattern, out of range, unknown name). errors lists each one. No request is sent.

invalid_parameter

kroger-api rejected a value the schema cannot check, such as a search term of more than 8 words. No request is sent.

authentication_required

The user is not signed in, or the sign-in expired and could not be renewed.

location_required

A product tool got no location_id and no preferred location is set.

bad_request, authentication_error, permission_denied, not_found, rate_limited, server_error

The Kroger API answered 400, 401, 403, 404, 429, or 5xx.

connection_error, timeout

The Kroger API could not be reached, or did not answer within 30 seconds.

configuration_error

A setting such as KROGER_CLIENT_ID is missing or invalid. Fix the server configuration and restart it.

local_state_error

A cart, order history, or preferences file could not be read or written.

A cart add that times out, loses its connection after the request may have been sent, or gets a 5xx has outcome_unknown: true. Kroger may have added the items anyway, so the next step says to have the user check their cart before adding again, instead of retrying.

A search that finds nothing is not an error: it returns count: 0 and a message. The full list of error types is in the MCP tools reference.

🚧 Kroger Public API Limitations

  • View Only: The remove_from_cart and clear_current_cart tools ONLY affect local tracking, not the actual Kroger cart

  • Local Sync: Use these tools only when the user has already removed items from their cart in the Kroger app/website

  • One-Way: Items can be added to the Kroger cart but not removed through the Public API. The Partner API would allow these things, but that requires entering a contract with Kroger.

API

Version

Rate Limit

Notes

Authorization

1.0.13

No specific limit

Token management

Products

1.2.4

10,000 calls/day

Search and product details

Locations

1.2.2

1,600 calls/day per endpoint

Store locations and details

Cart

1.2.3

5,000 calls/day

Add/manage cart items

Identity

1.2.3

5,000 calls/day

User profile information

Note: Rate limits are enforced per endpoint, not per operation. You can distribute calls across operations using the same endpoint as needed.

🏫 Basic Workflow

  1. Set up a preferred location:

    User: "Find Kroger stores near 90274"
    Assistant: [Uses search_locations tool]
    User: "Set the first one as my preferred location"
    Assistant: [Uses set_preferred_location tool]
  2. Search and add products:

    User: "Add milk to my cart"
    Assistant: [Uses search_products, then add_items_to_cart]
    
    User: "Add bread, eggs, and cheese to my cart"
    Assistant: [Uses search_products for each, then bulk_add_to_cart]
  3. Manage cart and orders:

    User: "What's in my cart?"
    Assistant: [Uses view_current_cart tool to see local memory]
    
    User: "I placed the order on the Kroger website"
    Assistant: [Uses mark_order_placed tool, moving current cart to the order history]

🍪 OAuth2 Authentication

When Claude attempts to modify your Kroger account, you will be asked to insert a link into your browser that will handle authentication and allow Claude to add/remove items from your cart. Ensure that you have already made a Kroger account (this is different than your Kroger development account) before attempting to paste this link into your browser to initiate authentication.

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

⚠️ Disclaimer

This is an unofficial MCP server for the Kroger Public API. It is not affiliated with, endorsed by, or sponsored by Kroger.

For questions about the Kroger API, visit the Kroger Developer Portal or read the kroger-api package documentation.


Available Tools

31 tools
add_items_to_cartA

Add a single item to the user's Kroger cart and track it locally.

If the user doesn't specifically indicate a preference for pickup or delivery, you should ask them which modality they prefer before calling this tool.

NameRequiredDescriptionDefault
modalityNoHow the order will be fulfilled: PICKUP or DELIVERY (uppercase)PICKUP
quantityNoQuantity to add, 1 or more
product_idYes13-digit productId or UPC, for example 0001111041700. Get one from search_products.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations exist, so the description carries the full disclosure burden. It reveals a useful behavioral trait — the item is also tracked locally, and the modality decision must be confirmed first — but it does not state auth prerequisites, behavior on duplicate entries, or whether the cart mutation is reversible.

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 short sentences, action first, precondition second. No filler and nothing buried.

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?

An output schema exists, so return values need not be explained, and the schema fully documents the three parameters. The description covers the key pre-call decision (modality) but says nothing about authentication state or the local-tracking side effect's implications across sessions.

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?

Schema coverage is 100%, so the baseline is 3. The description earns a bump by clarifying that modality should be confirmed with the user rather than silently defaulted to PICKUP, which is meaningful guidance beyond the schema's enum and default.

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

Purpose4/5

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

States a specific verb and resource ('Add a single item to the user's Kroger cart') plus a scope qualifier ('single item') that implicitly separates it from bulk_add_to_cart. It never names the bulk sibling explicitly, so an agent must infer the distinction from the word 'single'.

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

Usage Guidelines4/5

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

Gives a concrete prerequisite: ask the user about pickup vs delivery before calling when no preference is stated. That is real when-to-use guidance. The one gap is that it never says when to prefer bulk_add_to_cart for multiple items.

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

bulk_add_to_cartA

Add multiple items to the user's Kroger cart in a single operation.

If the user doesn't specifically indicate a preference for pickup or delivery, you should ask them which modality they prefer before calling this tool.

NameRequiredDescriptionDefault
itemsYesList of items to add. Each item should have: - product_id: The product ID or UPC - quantity: Quantity to add (default: 1) - modality: PICKUP or DELIVERY (default: PICKUP)

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/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 disclosure burden. It correctly implies a cart mutation and adds the useful modality-consultation rule, but says nothing about partial-failure behavior (if item 5 of 10 fails), whether items merge with or replace existing cart contents, or any auth/permission requirements.

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 short sentences, zero repetition, and the core capability is front-loaded ahead of the conditional guidance. Nothing could be cut without losing information.

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?

An output schema exists, so return values need no explanation, and the single nested items parameter is fully documented in the schema. However, for a mutation tool with no annotations, the description should say more about bulk-operation semantics such as partial success and cart-state effects.

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

Parameters3/5

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

Schema description coverage is 100%, with each field (product_id pattern, quantity minimum, modality enum) already documented, so the baseline is 3. The description only restates that items are a list and reinforces the modality choice at a conversational level rather than adding new field semantics.

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

Purpose4/5

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

States a specific verb (add), resource (Kroger cart), and scope (multiple items in a single operation), which implicitly separates it from the single-item sibling add_items_to_cart. The sibling is never named, so the differentiation is inferential rather than explicit.

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

Usage Guidelines4/5

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

Gives a concrete pre-call protocol: if the user has no stated preference, ask about pickup vs delivery before invoking. It does not cover when to prefer this over add_items_to_cart or what to do if only one item needs adding, so alternatives are left implied.

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

bulk_search_productsB

Search for multiple products in a single tool call to reduce round-trips.

NameRequiredDescriptionDefault
searchesYesList of search queries (1-25). Each item should have: - term: The search term (e.g., "milk", "bread"); 3+ characters, at most 8 words - limit: Number of results per search (1-50, default: 10) - fulfillment: Optional fulfillment filter ("ais", "csp", "dth", "sth") - brand: Optional brand filter (case-sensitive)
location_idNo8-character store locationId, for example 01400513. Defaults to the preferred location set with set_preferred_location.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/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, yet it discloses nothing about per-search error handling, whether results are grouped in input order, auth/location requirements, or behavior when one search in the batch fails. 'Reduce round-trips' is the only behavioral hint.

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?

A single front-loaded sentence with no filler. It is short but borders on under-specification rather than redundancy.

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?

For a batched operation with 25-item fan-out, the description should at minimum explain how results map back to individual searches and how partial failures surface; neither is covered. The output schema covers return values, but the batching semantics that an agent most needs are absent.

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%, including per-field descriptions for term, brand, limit, fulfillment, and location_id, so the baseline is 3. The description adds no parameter meaning beyond the schema.

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

Purpose4/5

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

States a specific verb+resource (search multiple products in one call) and the distinguishing trait versus the singular sibling: batching. It doesn't name search_products directly, so the differentiation is implied rather than explicit.

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

Usage Guidelines3/5

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

The clause 'to reduce round-trips' implies when to reach for this instead of search_products, but there is no explicit when/when-not guidance, no mention of the 1-25 search cap as a routing constraint, and no alternative named.

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

check_chain_existsB

Check if a chain exists in the Kroger system.

NameRequiredDescriptionDefault
chain_nameYesChain name, for example Kroger or Ralphs. See list_chains.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

There are no annotations, so the description carries the full behavioral burden. It implies a read-only lookup through "Check," but does not explicitly state that it is non-mutating, whether authentication is required, or how invalid or missing chains are handled.

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 wording. It conveys the tool's purpose immediately and wastes no space.

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

Completeness4/5

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

For a simple one-parameter existence check with a complete parameter schema and an output schema, the description is largely sufficient. Minor gaps remain around explicit read-only behavior and sibling-tool selection, but the core information needed to call the tool is present.

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

Parameters3/5

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

Schema description coverage is 100%, and the chain_name parameter is already documented with an example and a pointer to list_chains. The description adds no additional meaning beyond what the schema provides, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a clear verb and resource: "Check if a chain exists" in the Kroger system. It does not explicitly differentiate this existence check from sibling tools like list_chains or get_chain_details, which keeps it from a 5.

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

Usage Guidelines3/5

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

Usage is implied by the existence-check phrasing, but the description gives no explicit guidance on when to use this tool versus list_chains, get_chain_details, or check_location_exists. The agent must infer the appropriate context from the name and purpose alone.

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

check_department_existsA

Check if a department exists in the Kroger system.

NameRequiredDescriptionDefault
department_idYes2-character department ID. Get one from list_departments.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/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, but an existence check is inherently a read-only lookup and that is clear from the phrasing. It adds nothing about behavior on a nonexistent department, error/response shape, or whether the check is cached or authoritative.

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?

A single front-loaded sentence with no filler. It is efficient, though very spare given the tool's role in a multi-step workflow.

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?

A simple single-parameter lookup with an output schema and a fully documented parameter; the description plus structured data cover what an agent needs to invoke it. Only the semantics of a false/not-found result are left unstated.

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

Parameters3/5

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

Schema description coverage is 100% and the schema states the 2-character pattern and where to obtain an ID, so the one parameter is fully documented. The description adds no meaning beyond that, which is the expected baseline.

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

Purpose4/5

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

States a specific verb (check existence) and resource (department in the Kroger system), which separates it from the sibling existence checks for locations and chains. It does not explicitly name those siblings, but the resource noun does the distinguishing work.

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

Usage Guidelines3/5

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

Usage is only implied by the name and by the schema note to get an ID from list_departments. The description never states when to call this instead of list_departments or get_department_details, nor any prerequisite such as obtaining the ID first.

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

check_location_existsB

Check if a location exists in the Kroger system.

NameRequiredDescriptionDefault
location_idYes8-character store locationId, for example 01400513. Get one from search_locations.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry behavioral disclosure. 'Check' implies a read-only existence test, but the description does not explicitly state no side effects, permission needs, or rate limits; the output schema covers return values.

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?

It is a single front-loaded sentence with no redundant wording. It communicates the core operation efficiently.

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

Completeness4/5

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

For a low-complexity, one-parameter existence check with a fully described schema and an output schema, the description covers the essential purpose. The main missing piece is usage guidance versus alternatives, which prevents a 5.

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% and the single location_id parameter is fully documented with pattern, example, and source in the schema. The description adds no parameter meaning beyond that, so baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb ('Check') and resource ('location exists') in the Kroger system, making the operation clear. It does not explicitly contrast with nearby tools like search_locations or get_location_details, so sibling differentiation is left implicit.

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 when-to-use guidance or exclusions are given. The schema mentions getting an ID from search_locations, but the description does not say when this check is preferable to searching or fetching details.

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

clear_current_cartA

Clear all items from the local cart tracking only.

IMPORTANT: This tool CANNOT remove items from the actual Kroger cart in the app/website. It only clears our local tracking. The user must remove items from their actual cart through the Kroger app or website themselves.

Use this tool only when:

  1. The user has already cleared their Kroger cart through the app/website

  2. You need to update the local tracking to reflect that change

  3. Or when the local tracking is out of sync with the actual cart

Returns: Dictionary confirming the local cart tracking was cleared

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/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 and does well by disclosing the critical limitation that it cannot remove items from the real Kroger cart. It also mentions the local-only side effect and return shape, though it does not discuss reversibility or confirmation behavior.

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?

The critical caveat is front-loaded and the structure is easy to scan. There is some redundancy between the IMPORTANT paragraph and the numbered usage conditions, but it remains purposeful.

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?

Given the local-versus-actual cart distinction, zero parameters, and an output schema, the description provides everything an agent needs to avoid a dangerous misinterpretation. It clearly states what is cleared, what is not cleared, and when to invoke it.

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 zero parameters, so parameter semantics are inherently simple and the empty schema is sufficient. The description correctly adds no unnecessary parameter detail.

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 states a specific verb and resource: clearing all items from local cart tracking. It immediately distinguishes the scope from the sibling remove_from_cart/actual Kroger cart behavior by saying it only affects local tracking and cannot change the app/website cart.

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

Usage Guidelines5/5

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

It gives explicit when-to-use conditions in a numbered list and warns against misuse by stating the user must clear the actual Kroger cart separately. This is unusually clear routing guidance for an agent.

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

complete_authenticationA

Complete the OAuth flow using the redirect URL from Kroger.

After opening the auth URL in your browser and authorizing the app, you'll be redirected to a callback URL. Copy that entire URL and pass it to this tool to complete the authentication process.

NameRequiredDescriptionDefault
redirect_urlYesThe full URL from your browser after authorization

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It explains the OAuth prerequisite and that the redirect URL must be copied, but it does not state what completing authentication changes internally, whether the URL is single-use, or what errors occur if the URL is invalid.

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?

The description is front-loaded with the core action and then provides necessary procedural context. It is appropriately sized, though the second sentence is somewhat verbose for a one-parameter tool.

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?

An output schema exists, so return values need not be explained. The one required parameter is fully documented. However, the description lacks context about how this tool relates to start_authentication, what auth state changes, and how failures should be handled.

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

Parameters3/5

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

Schema description coverage is 100%, so the single parameter is already documented in the schema. The description reinforces that the entire callback URL should be passed, but adds no format or validation details beyond the schema baseline.

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

Purpose4/5

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

The description clearly states the action: completing the OAuth authentication flow using a redirect URL from Kroger. It is more specific than a tautology, but it does not explicitly differentiate this tool from siblings like start_authentication or force_reauthenticate.

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 gives clear procedural guidance: open the auth URL, authorize, get redirected, copy the full callback URL, and pass it here. It implies this is the second step after starting authentication, but it does not explicitly name alternatives or state 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.

force_reauthenticateA

Force re-authentication by clearing the current authentication token. Use this if you're having authentication issues or need to log in as a different user.

This deletes the saved user token. The local cart tracking and order history are kept.

Returns: Dictionary indicating the re-authentication was initiated

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are supplied, so the description carries the full burden, and it does disclose the destructive side effect ('deletes the saved user token') plus what survives ('local cart tracking and order history are kept'). It stops short of saying the session is immediately invalidated or that re-login is mandatory afterward, but the core blast radius is clear.

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?

Front-loaded with the action and its mechanism, then triggers, then the data-preservation note. The trailing 'Returns:' block is redundant given a real output schema exists, costing a small amount of space but not obscuring anything.

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

Completeness4/5

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

For a zero-parameter mutation with no annotations, it covers the action, the trigger, and the side effects on persisted data. The only missing piece is what happens to the current session immediately after clearing — whether the agent must call start_authentication next.

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?

Zero parameters, so there is nothing to disambiguate; the baseline of 4 applies. The description correctly implies this is a no-argument, unconditional operation.

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?

States a specific verb and mechanism ('Force re-authentication by clearing the current authentication token'), which unambiguously separates it from siblings like test_authentication, start_authentication, and complete_authentication. An agent can tell this is a reset/cleanup action rather than part of the login flow.

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

Usage Guidelines5/5

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

Explicitly names both trigger conditions: authentication problems, or switching to a different user. That is precisely the when-to-use guidance that distinguishes it from the sibling authentication tools, with no inference required.

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

get_authentication_infoA

Get information about the current authentication state and token.

A user who is not signed in is a normal result (authenticated false), not an error.

Returns: Dictionary containing authentication information

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/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 usefully discloses that authenticated=false is a normal result rather than an error and that the tool returns authentication information including a token; it does not elaborate on permissions, token sensitivity, or side effects, but for a zero-parameter read tool this is reasonably transparent.

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 short and front-loaded: it states the purpose first, then highlights the key non-error behavior, then notes the return shape. Every sentence adds useful information without repetition.

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 low complexity, zero parameters, and existing output schema, the description is nearly complete. It covers the main purpose and the important unauthenticated case, though it could more explicitly relate the tool to sibling authentication operations.

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 zero parameters and 100% schema coverage, so parameter semantics are not a concern. The description appropriately adds no parameter detail because none is needed.

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

Purpose4/5

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

The description uses a specific verb and resource: get current authentication state and token. It is clear enough to distinguish from most siblings, but it does not explicitly differentiate itself from nearby authentication tools such as test_authentication or force_reauthenticate.

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 by stating that an unauthenticated result is normal, which helps an agent interpret the call. However, it does not explicitly say when to use this tool versus test_authentication, start_authentication, or complete_authentication.

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

get_chain_detailsC

Get detailed information about a specific Kroger chain.

NameRequiredDescriptionDefault
chain_nameYesChain name, for example Kroger or Ralphs. See list_chains.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden, yet it only implies read-only behavior through the verb 'Get'. It says nothing about what happens when the chain name is invalid or not found, or about any authentication/rate-limit characteristics.

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?

One short, front-loaded sentence with zero filler. It is efficient, though its brevity borders on under-specification rather than optimal density.

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

Completeness3/5

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

For a simple one-parameter getter with an output schema and full schema coverage, the description is minimally sufficient. It leaves the not-found behavior and relationship to check_chain_exists unaddressed, which are the only meaningful gaps.

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?

There is a single parameter with 100% schema description coverage, including an example ('Kroger or Ralphs') and a pointer to list_chains, so the schema already does the work. The description adds no additional meaning about name matching (exact vs fuzzy, case sensitivity).

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

Purpose4/5

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

States a specific verb ('Get') and resource ('detailed information about a specific Kroger chain'), which clearly separates it from list-style siblings such as list_chains. It does not explicitly name the sibling it contrasts with, but the singular 'specific chain' framing makes the distinction inferable.

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?

The description gives no when-to-use or when-not-to-use guidance. The only routing hint ('See list_chains') lives in the input schema's parameter description, not the tool description, and nothing explains the relationship to check_chain_exists or what to do when a chain is unknown.

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

get_current_datetimeA

Get the current system date and time.

This tool is useful for comparing with cart checkout dates, order history, or any other time-sensitive operations.

Returns: Dictionary containing current date and time information

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the disclosure burden, and it does signal the operation is a safe read returning date/time data. However, it omits timezone, format, and any freshness guarantees — meaningful for a time tool — though the output schema likely covers the return structure.

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?

The purpose is front-loaded in one clear sentence. The trailing 'Returns: Dictionary...' block is largely redundant given that an output schema exists, costing a little efficiency.

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

Completeness4/5

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

For a zero-parameter tool with an output schema, the description supplies enough for correct invocation. The only shortfall is not stating timezone/format, but the output schema can reasonably be expected to define that.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies; there is nothing for the description to disambiguate. The schema being empty and closed (additionalProperties: false) is self-explanatory.

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?

States a specific verb and resource — 'Get the current system date and time' — leaving no ambiguity about what the tool returns. No sibling in the list performs this function, so differentiation is implicit but sufficient.

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 second sentence gives concrete usage contexts (cart checkout dates, order history, time-sensitive operations), which is genuine when-to-use guidance. It does not name exclusions, but no sibling competes for this task, so nothing critical is missing.

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

get_department_detailsC

Get detailed information about a specific department.

NameRequiredDescriptionDefault
department_idYes2-character department ID. Get one from list_departments.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden. It says nothing about whether this is a safe read, what happens for an invalid or nonexistent department ID (error vs empty), or any permission/auth requirements; only the implicit 'Get' signals read-only behavior.

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?

A single front-loaded sentence with zero padding. It is efficient, though its brevity reflects under-specification rather than tight editing of richer content.

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?

An output schema exists, so return values need not be described, and the single parameter is fully documented in schema. What is missing is disambiguation from the several sibling department/location tools and any behavioral notes in the absence of annotations.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter fully documents its format (2-character ID) and how to obtain it. The description adds no parameter meaning beyond the schema, which is the baseline-3 case for a one-parameter tool.

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

Purpose4/5

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

The description names a specific verb and resource ('Get detailed information about a specific department'), which is unambiguous. However, it does nothing to distinguish this from siblings like list_departments (which would return summaries for all departments) or check_department_exists, nor does it say what 'detailed' includes.

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?

There is no guidance on when to use this tool versus list_departments or check_department_exists. The only routing hint ('Get one from list_departments') lives in the parameter schema, not the description, and it explains ID sourcing rather than tool selection.

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

get_location_detailsB

Get detailed information about a specific Kroger store location.

NameRequiredDescriptionDefault
location_idYes8-character store locationId, for example 01400513. Get one from search_locations.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. 'Get' weakly implies a non-destructive read, but it does not state authentication requirements, whether the call is rate-limited or cached, or what categories of detail are returned (the output schema covers return values, which lowers the bar somewhat). Adequate but thin.

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?

One short, front-loaded sentence with no wasted words. It is efficient, though it errs toward under-specification rather than excess.

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 output schema handles return values and the schema fully documents the single parameter, so the core is covered. However, with no annotations and a family of authentication siblings, the description should say whether this endpoint requires authentication or a preferred-location context; that gap keeps it at a minimum-viable 3.

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?

There is only one parameter and schema description coverage is 100%, including the 8-character format, an example value, and a pointer to search_locations. The description adds no meaning beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Get) and resource (detailed information about a specific Kroger store location), which is enough to distinguish it from search_locations by scope. It does not explicitly name the sibling it complements, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied: 'a specific store location' signals that a known identifier is required, and the schema tells the agent to obtain one from search_locations. The description itself never says when to call this versus search_locations or check_location_exists.

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

get_preferred_locationA

Get the currently set preferred store location.

No preferred location is a normal result (preferred_location_id null), not an error.

Returns: Dictionary containing the preferred location information

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It does valuable work by declaring that a null preferred_location_id is a normal result rather than an error, but it says nothing about authentication requirements or read-only guarantees beyond the verb 'Get'.

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?

The key edge case is stated up front in the second sentence, which is exactly where it belongs. The trailing 'Returns: Dictionary containing...' line is thin and largely redundant, but it does not bloat the definition.

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?

An output schema exists, so return values need not be explained here. For a no-parameter read tool, the main thing an agent needs to know is how to interpret an empty result, and the description covers that clearly.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies.

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

Purpose4/5

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

States a specific verb and resource: 'Get the currently set preferred store location.' An agent can distinguish it from set_preferred_location and get_location_details without opening the schema, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is only implied by the word 'preferred' and the pairing with set_preferred_location. There is no statement of when to prefer this over get_location_details or search_locations, and no prerequisites are mentioned.

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

get_product_detailsB

Get detailed information about a specific product.

NameRequiredDescriptionDefault
product_idYes13-digit productId or UPC, for example 0001111041700. Get one from search_products.
location_idNo8-character store locationId, for example 01400513. Defaults to the preferred location set with set_preferred_location.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. "Get" implies a read, but the description says nothing about authentication, error behavior when a product is missing, or the effect of the default location.

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?

It is a single front-loaded sentence with no wasted words. The brevity is appropriate structurally, even though the content is sparse.

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 tool is a simple two-parameter read, the schema is fully documented, and an output schema exists, so return values need not be described. However, the description does not clarify what "detailed information" includes beyond what the output schema may show, leaving some contextual ambiguity.

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%, and the schema already explains the 13-digit product ID, its relationship to search_products, and the default location behavior. The description adds no parameter meaning beyond that baseline.

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

Purpose4/5

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

States a clear verb and resource ("Get detailed information about a specific product"), so the agent knows this retrieves product details. It does not differentiate from siblings such as search_products or get_product_images, which limits clarity in a crowded toolset.

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?

The description gives no guidance on when to use this tool versus search_products or get_product_images. The only hint that it should follow a search comes from the product_id schema description, not the tool description itself.

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

get_product_imagesA

Get an image for a specific product from the requested perspective.

Use get_product_details first to see what perspectives are available (typically "front", "back", "left", "right").

NameRequiredDescriptionDefault
product_idYes13-digit productId or UPC, for example 0001111041700. Get one from search_products.
location_idNo8-character store locationId, for example 01400513. Defaults to the preferred location set with set_preferred_location.
perspectiveNoThe image perspective to retrieve (default: "front")front

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 usefully discloses that available perspectives vary per product (typically front/back/left/right), which prevents blind guesses, but it never says what is returned (image URL vs. binary data), whether the call is read-only, or how failures surface.

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

Conciseness5/5

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

Two sentences, zero waste, with the core action stated first and the prerequisite second. Every sentence earns its place and nothing is buried.

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

Completeness3/5

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

With no output schema, the agent must infer the return type (image payload vs. URL) from the name alone, which is a meaningful gap for an image-fetching tool. The prerequisite and perspective hints are good, but the 'what comes back' question is left unanswered.

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?

Schema coverage is 100%, so the baseline is 3, and the description adds genuine value by naming the typical perspective values ('front', 'back', 'left', 'right') that the schema leaves open as a free-form string with no enum. It adds nothing about product_id or location_id, which the schema already documents thoroughly.

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?

States a specific verb and resource ('Get an image for a specific product') plus a qualifier ('from the requested perspective'), and explicitly points at get_product_details as the companion tool, so the agent can separate it from the product-detail sibling without reading either schema.

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

Usage Guidelines4/5

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

Gives a clear sequencing rule: call get_product_details first to discover which perspectives exist, rather than guessing. It stops short of stating what to do when the requested perspective is unavailable or when not to call this tool, so it is clear but not exhaustive.

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

get_user_profileA

Get the authenticated user's Kroger profile information.

The Identity API needs a sign-in that grants the profile.compact scope.

Returns: Dictionary containing user profile data

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the auth prerequisite ('needs a sign-in that grants the profile.compact scope'), which is real behavioral context an agent needs. However, it omits what happens on missing/invalid sign-in (error vs empty result) and whether the call has 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.

Conciseness4/5

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

Three short lines, front-loaded with the action and a real prerequisite. The 'Returns: Dictionary containing user profile data' line is largely redundant given an output schema exists, which slightly dilutes an otherwise tight description.

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?

A zero-parameter read with an output schema needs little more than the auth prerequisite, which is supplied. The only missing element is failure behavior when the scope requirement is unmet.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. Nothing is left ambiguous about inputs, and the description correctly signals the target is implicitly the authenticated user rather than a passed ID.

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

Purpose4/5

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

States a specific verb and resource: 'Get the authenticated user's Kroger profile information.' An agent can distinguish it from get_user_zip_code and get_authentication_info by the 'profile information' framing, though the description never names those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the tool retrieves the current (authenticated) user's profile, and the scope prerequisite is a strong hint about context. But there is no explicit when-to-use, when-not-to-use, or routing to an alternative sibling.

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

get_user_zip_codeA

Returns user zip code, it is anticipated that by exposing this to the LLM it will choose to use it rather than generating a zip code based on system data.

Args: N/A Returns: Dictionary containing user Zip Code

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/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 behavioral burden. It communicates that this is a read-style getter and that it returns actual user zip code data, but it does not mention authentication requirements, privacy implications, caching, or error behavior.

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

Conciseness3/5

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

The key purpose is front-loaded, but the description includes redundant 'Args: N/A' and 'Returns' sections even though the schema has no parameters and an output schema exists. The meta note about LLM behavior is useful but not tightly phrased.

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

Completeness4/5

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

For a zero-parameter getter with an output schema, the description gives the essential behavior: it returns the user's zip code and should be preferred over generated values. Missing auth/privacy context is a gap, but the simplicity of the tool and presence of output schema make it largely 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, so the baseline is 4. The schema is empty and fully described structurally, and no additional parameter semantics are needed.

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

Purpose4/5

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

States a specific verb and resource: returns the user's zip code. It is distinguishable from most sibling tools, though it does not explicitly contrast with nearby profile/location tools such as get_user_profile or get_location_details.

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 it by saying the LLM should use this tool rather than generating a zip code from system data. However, it does not state when not to use it or name alternative tools for related location/profile data.

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

list_chainsA

Get a list of all Kroger-owned chains.

Returns: Dictionary containing chain information

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/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 disclosure burden. It does state the return shape ('Dictionary containing chain information'), but says nothing about read-only semantics, required authentication, result size, or pagination — all plausible concerns for a live grocery API.

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

Conciseness4/5

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

Two short lines with the action stated first and no filler. The 'Returns' line is largely redundant given an output schema exists, which is the only minor inefficiency.

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

Completeness3/5

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

For a zero-parameter list tool with an output schema, the return values do not need explaining, and the description is nearly sufficient. It falls short on operational context — auth requirements, whether the list is exhaustive or paginated, and how it relates to the chain lookup siblings.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4; there is no parameter semantics for the description to elaborate. The schema's empty object with additionalProperties: false already makes the no-argument contract unambiguous.

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

Purpose4/5

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

States a specific verb and resource (get/list all Kroger-owned chains) with a scope qualifier ('all') that implicitly separates it from single-chain siblings like get_chain_details and check_chain_exists. It never names those alternatives explicitly, so the differentiation is left to inference.

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 word 'all' hints that this is the enumeration tool rather than a lookup, which is useful implied guidance. But there is no explicit when-to-use statement, no mention of when to prefer get_chain_details or check_chain_exists, and no note about authentication prerequisites despite an auth flow existing in the sibling set.

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

list_departmentsB

Get a list of all available departments in Kroger stores.

Returns: Dictionary containing department information

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden. It says nothing about scope (all stores globally vs. the user's preferred store), whether authentication or a selected location is required, or ordering/pagination — only a vague 'Dictionary containing department information'.

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

Conciseness4/5

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

Two short sentences with the action front-loaded. The 'Returns:' line is slightly wasteful since an output schema exists and the phrase 'department information' is vague, but nothing is bloated.

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

Completeness3/5

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

With zero parameters and an output schema present, the description only needs to convey scope and routing — and it leaves scope ambiguous ('in Kroger stores' could mean all stores or the selected one) and offers no sibling routing despite four closely related department/location tools.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. There is nothing for the description to disambiguate, and it correctly frames the call as taking no arguments.

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

Purpose4/5

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

States a specific verb and resource: 'Get a list of all available departments in Kroger stores.' An agent can distinguish it from get_department_details and check_department_exists by implication (list vs. single detail vs. existence check), though it never names or contrasts those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is only implied by the word 'list' — the description never says when to call this instead of get_department_details, check_department_exists, or list_chains, nor does it mention any prerequisites such as needing a preferred location set.

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

mark_order_placedA

Mark the current cart as an order that has been placed and move it to order history. Use this after you've completed checkout on the Kroger website/app.

NameRequiredDescriptionDefault
order_notesNoOptional notes about the order

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It discloses the key side effect: the current cart is marked as placed and moved to order history. However, it does not mention auth requirements, irreversibility, what happens if no cart exists, or whether checkout state is verified.

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 short sentences; the core action is front-loaded and the usage condition follows immediately. Every sentence earns its place.

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

Completeness4/5

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

For a simple mutation with one optional parameter and an output schema, the description provides enough to call it correctly: when to use it and what it does. Missing details about failure modes or irreversibility keep it from a 5, but the essential context is present.

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%, so the optional order_notes parameter is fully documented in the schema. The description adds no parameter-specific guidance, which is acceptable given the high schema coverage baseline.

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 uses a specific verb ('Mark') and resource ('current cart') and states the state transition ('move it to order history'). This clearly distinguishes it from siblings like view_order_history, clear_current_cart, and view_current_cart.

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

Usage Guidelines4/5

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

It gives clear usage context: use after completing checkout on the Kroger website/app. It does not explicitly state exclusions or alternatives, but the timing guidance is sufficient to select the tool correctly.

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

remove_from_cartA

Remove an item from the local cart tracking only.

IMPORTANT: This tool CANNOT remove items from the actual Kroger cart in the app/website. It only updates our local tracking to stay in sync. The user must remove the item from their actual cart through the Kroger app or website themselves.

Use this tool only when:

  1. The user has already removed an item from their Kroger cart through the app/website

  2. You need to update the local tracking to reflect that change

NameRequiredDescriptionDefault
modalityNoSpecific modality to remove (if None, removes all instances)
product_idYesThe product ID to remove from the local tracking

Output Schema

NameRequiredDescription

No output 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 carries the full burden and does the most important part: it loudly discloses that the tool does NOT mutate the real Kroger cart and that the user must act externally. That is a non-obvious side-effect warning an agent would otherwise get wrong. It stops short of covering failure modes (e.g., product_id not present in local tracking) or whether removal is idempotent.

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?

The critical caveat is front-loaded in the second sentence and reinforced with a compact numbered list, which is appropriate for a high-misuse-risk tool. It is slightly repetitive ('The user must remove the item from their actual cart through the Kroger app or website themselves' restates the IMPORTANT block), costing a little tightness.

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?

An output schema exists, so return values need no explanation, and the one thing that would actually trip an agent up — confusing local tracking with the real cart — is covered thoroughly. Remaining gap is edge-case behavior: what happens when product_id isn't in local tracking, and whether modality=null removing 'all instances' succeeds silently.

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

Parameters3/5

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

Schema description coverage is 100%, so both product_id and the modality enum/default are already fully documented in the schema. The description adds no parameter-level detail beyond the schema. Baseline 3 applies since the schema does the heavy lifting.

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?

States a specific verb and resource ('Remove an item from the local cart tracking only') and immediately delimits the scope with the negative case: it cannot touch the real Kroger cart. The local-tracking-vs-real-cart distinction is exactly what an agent needs to disambiguate this from the cart-mutating siblings like add_items_to_cart and clear_current_cart.

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

Usage Guidelines5/5

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

Provides an explicit, numbered 'Use this tool only when' list with two concrete preconditions (user already removed the item themselves; local tracking needs syncing). This is a genuine when/when-not gate, not an implication. It doesn't name sibling alternatives by name, but the precondition effectively excludes every other cart tool on its own.

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

search_locationsC

Search for Kroger store locations near a zip code.

NameRequiredDescriptionDefault
chainNoOnly return stores of this chain, for example Kroger. See list_chains.
limitNoNumber of results to return (1-200)
zip_codeNo5-digit ZIP code. ZIP+4 is not accepted. Defaults to the user's ZIP code (see get_user_zip_code).
radius_in_milesNoSearch radius in miles (1-100)

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not state that the operation is read-only, whether results are paginated, or how many results are returned by default beyond what the schema already says.

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?

A single front-loaded sentence with no wasted words. It is efficient, though its brevity contributes to gaps addressed in other dimensions rather than being a structural flaw itself.

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

Completeness3/5

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

With fully documented parameters and an output schema, an agent can invoke the tool correctly. However, the description omits that chain filtering is available, that zip_code defaults to the user's ZIP, and how this differs from sibling lookup tools.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented. The description reinforces that zip_code determines proximity but adds nothing about chain filtering, radius, or limit beyond the schema.

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

Purpose4/5

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

States a specific verb ('Search') and resource ('store locations') with a geographic qualifier ('near a zip code'). It does not distinguish itself from siblings like get_location_details, check_location_exists, or list_chains, and the mention of 'Kroger' is slightly narrower than the chain parameter implies.

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?

There is no explicit guidance on when to use this tool versus get_location_details, check_location_exists, or list_chains. Usage is only implied by the word 'Search'; no exclusions or alternatives are named.

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

search_productsC

Search for products at a Kroger store.

NameRequiredDescriptionDefault
brandNoOnly return products of this brand. Case-sensitive, for example 'Kroger'.
limitNoNumber of results to return (1-50)
fulfillmentNoOnly return products available by this fulfillment method: ais (available in store), csp (curbside pickup), dth (delivery to home), sth (ship to home)
location_idNo8-character store locationId, for example 01400513. Defaults to the preferred location set with set_preferred_location.
search_termYesProduct search term, for example 'milk' or 'organic apples'. At least 3 characters and at most 8 words separated by single spaces.

Output Schema

NameRequiredDescription

No output parameters

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 carries the full burden but only says the search is store-scoped. It says nothing about result ordering, relevance, pagination behavior, or what happens when the location is invalid or unset, all of which an agent needs before invoking.

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?

A single short sentence with no waste and the core action front-loaded. It is efficient, though its brevity reflects under-specification more than disciplined trimming.

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?

An output schema exists so return values needn't be explained, and the schema documents parameters well. But for a 5-parameter search tool with several near-identical siblings and no annotations, a one-sentence description leaves the agent without the routing or behavioral context it needs.

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

Parameters3/5

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

Schema description coverage is 100%, with each of the five parameters documented including brand case-sensitivity, limit bounds, fulfillment enum meanings, and the 8-character location format. The description adds nothing beyond that, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('Search for products') plus its scope ('at a Kroger store'), so the agent knows exactly what it does. However, it does nothing to distinguish it from close siblings like bulk_search_products or search_products_by_id, leaving that differentiation to inference.

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?

There is no guidance on when to use this versus bulk_search_products or search_products_by_id, nor any stated prerequisite. The only usage hint, that it defaults to the preferred location, lives in the schema rather than the description.

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

search_products_by_idC

Search for products by their specific product ID.

NameRequiredDescriptionDefault
product_idYes13-digit productId or UPC, for example 0001111041700. Get one from search_products.
location_idNo8-character store locationId, for example 01400513. Defaults to the preferred location set with set_preferred_location.

Output Schema

NameRequiredDescription

No output parameters

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 carries the full burden of behavioral disclosure. It implies a read-only lookup via 'Search,' but says nothing about whether the location defaults to a preferred store (that detail lives only in the schema), whether a miss returns empty vs. an error, or any rate or availability constraints.

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?

A single front-loaded sentence with no filler. It is efficient but so thin that the brevity comes at the cost of routing information rather than being a model of density.

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?

An output schema exists and the parameter schema is fully documented, so return values and argument formats are covered elsewhere. What remains missing is sibling differentiation and any hint of usage context, which matters given how many product-related siblings exist.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains the 13-digit UPC format and the 8-character location ID with its default from set_preferred_location. The description adds nothing beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource: search for products by product ID. The distinction from siblings is missing, though — it does not clarify how this differs from search_products, bulk_search_products, or get_product_details, which all sound like they could return product data.

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?

There is no explicit when-to-use guidance and no mention of alternatives despite several overlapping siblings. An agent can infer this is the single-ID lookup path, but nothing in the text says so or says when not to reach for it.

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

set_preferred_locationB

Set a preferred store location for future operations.

NameRequiredDescriptionDefault
location_idYes8-character store locationId, for example 01400513. Get one from search_locations.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden for a mutation tool. It signals persistence ('future operations') but says nothing about whether an existing preference is overwritten, whether the change is reversible, whether authentication is required, or what happens if the location id is invalid.

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?

A single front-loaded sentence with no filler or repetition. It is efficient, though its brevity is part of why behavioral coverage is thin.

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 tool is simple (one required parameter), an output schema exists so return values need not be described, and the schema fully documents the parameter. The remaining gap is behavioral: a persistent-state mutation with zero annotations and no description of overwrite/reversibility or side effects on later operations.

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

Parameters3/5

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

Schema description coverage is 100%, and the location_id description already specifies the 8-character format, a concrete example, and how to obtain a value via search_locations. The description adds nothing beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

The description names a specific verb ('Set') and resource ('preferred store location'), and the phrase 'for future operations' hints at the persistence semantics that distinguish it from get_preferred_location. It does not explicitly name the read-side sibling, so the differentiation is implicit rather than stated.

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?

'For future operations' implies this is a persistent setting that affects subsequent calls, which is a weak form of usage context. There is no explicit statement of when to prefer this over get_preferred_location or what prerequisite (a valid location from search_locations) is needed; that prerequisite appears only in the schema, not the description.

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

start_authenticationA

Start the OAuth authentication flow with Kroger.

This tool returns a URL that the user needs to open in their browser to authenticate with Kroger. After authorization, the user will be redirected to a callback URL that they need to copy and paste back. If Kroger shows invalid_scope instead of the sign-in page, the app is not registered for one of the requested scopes (the scope field of the result, set by KROGER_USER_SCOPES in the server's configuration).

Returns: Dictionary with authorization URL, the requested scopes, and instructions

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output 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 carries the full burden and does well: it discloses the external user interaction required, the callback copy-paste step, and a specific failure mode (invalid_scope tied to KROGER_USER_SCOPES server config). It doesn't say whether calling it invalidates an existing token or whether it's idempotent, which is the main remaining gap.

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?

Front-loaded with the core action, then the required user steps. Slightly dense in the invalid_scope sentence but every part conveys actionable behavior rather than filler.

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?

An output schema exists, so explaining return values is not required, yet the description summarizes them briefly rather than redundantly. For a zero-parameter starter tool this is nearly complete; only the explicit next-step handoff to complete_authentication is missing.

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

Parameters4/5

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

Zero parameters, so the baseline is 4 per the rubric. The description correctly implies no inputs are needed, though there is nothing additional to document.

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?

States a specific verb+resource ('Start the OAuth authentication flow with Kroger') and is clearly distinguishable from siblings like complete_authentication, force_reauthenticate, and test_authentication. The agent can tell this is the flow initiator, not a status check or a finisher.

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 makes the usage context clear: call it to obtain a URL the user opens, then the user returns a callback URL. However, it never explicitly names the follow-up sibling (complete_authentication) or states that this must be called first / not to use it if already authenticated, leaving the sequencing to inference.

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

test_authenticationA

Check whether the user is signed in and the saved token has not expired.

An expired token is refreshed if possible. The check compares the token's expiry time with the clock, so a sign-in that Kroger revoked early still reports token_valid true until a cart call fails. A user who is not signed in is a normal result (token_valid false), not an error.

Returns: Dictionary indicating authentication status

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/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, and it does so well: it discloses the token-refresh side effect, the clock-comparison mechanism, and the important caveat that a revoked token still reports token_valid true until a cart call fails. What it lacks is any note on network or auth requirements or failure modes of the refresh itself.

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?

Front-loaded with the core purpose, then the refresh behavior, then the caveat, in a compact four-sentence body with zero waste. The trailing 'Returns:' block is slightly redundant against the output schema but does not bloat the description.

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?

An output schema exists, so the description need not explain return values, and the behavioral caveats it does provide are exactly what an agent needs to interpret the result correctly. Only the missing sibling routing keeps this from being fully complete for a no-parameter check tool.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is a 4. Nothing in the description contradicts or muddies the empty 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?

States a specific check (whether the user is signed in and the saved token is not expired) with a clear predicate outcome. The scope is narrow enough that an agent can distinguish it from the sibling authentication tools such as get_authentication_info or force_reauthenticate without opening a schema.

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?

Implies usage context (verify sign-in state before an operation needing it) and helpfully notes that an unsigned-in user is a normal result, not an error. It never explicitly names an alternative or states when to prefer get_authentication_info or force_reauthenticate, leaving sibling routing to inference.

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

view_current_cartA

View the current cart contents tracked locally.

Note: This tool can only see items that were added via this MCP server. The Kroger API does not provide permission to query the actual user cart contents.

Returns: Dictionary containing current cart items and summary

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden. It does this well by disclosing that only items added through this MCP server are visible and that the Kroger API does not permit querying the actual user cart. It does not explicitly state read-only behavior or side-effect absence, but 'View' strongly implies it.

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 short, front-loaded with the core purpose, and separates the important limitation into a clear note. The returns summary is slightly redundant given the output schema, but it is brief and does not bloat the definition.

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 zero-parameter read tool with an output schema, the description supplies the key missing context: the cart is locally tracked and cannot reflect the actual Kroger cart. That is enough for an agent to call it correctly and interpret the results.

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 zero parameters, so parameter semantics are not applicable in the usual sense. The baseline for zero-parameter tools is 4, and the description does not need to explain inputs.

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 gives a specific verb and resource: view the current cart contents. It also immediately clarifies that this is a locally tracked cart, not the user's actual Kroger cart, which distinguishes it from any tool that would query real account data.

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

Usage Guidelines3/5

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

Usage is implied by 'View the current cart contents,' but the description does not explicitly say when to use this versus add_items_to_cart, remove_from_cart, clear_current_cart, or mark_order_placed. The local-only caveat is useful context, but it is a limitation rather than an alternative-selection guide.

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

view_order_historyA

View the history of placed orders.

Note: This tool can only see orders that were explicitly marked as placed via this MCP server. The Kroger API does not provide permission to query the actual order history from Kroger's systems.

NameRequiredDescriptionDefault
limitNoNumber of recent orders to show (1-50)

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/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 and does disclose the single most important behavioral trait: the data source is local state, not Kroger's systems, due to API permission limits. It does not explicitly state read-only semantics or ordering/pagination behavior, but the critical limitation is front and center.

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 short sentences, both earning their place, with the core purpose stated first and the caveat immediately after. No filler or repetition of the name.

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

Completeness4/5

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

For a one-optional-param read tool with an output schema, the description covers purpose, data scope, and the reason for that scope — enough to call it correctly. Minor gap: it doesn't say what an empty result implies beyond the caveat or how results are ordered.

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?

One optional parameter with 100% schema coverage, where the schema already documents range 1-50 and the default. The description adds no syntax or semantics beyond what the schema provides, so the baseline of 3 applies.

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

Purpose4/5

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

Specific verb+resource ("View the history of placed orders") with an added scope qualifier that separates it from Kroger's real order history. It does not explicitly name a sibling like mark_order_placed or view_current_cart as the counterpart, so sibling differentiation is only implied.

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 note tells the agent this only returns orders flagged via this MCP server, which is useful context for interpreting empty results, but it never states when to call this versus view_current_cart or that mark_order_placed must precede it. Usage is inferable rather than stated.

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. 31 tool updatesv0.4.0
    • Changedadd_items_to_cart11 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / modality / description
        Added value: +"How the order will be fulfilled: PICKUP or DELIVERY (uppercase)"
      • addedInput schema / properties / modality / enum
        Added value: +[
        +  "PICKUP",
        +  "DELIVERY"
        +]
      • removedInput schema / properties / modality / title
        Removed value: -"Modality"
      • addedInput schema / properties / product_id / description
        Added value: +"13-digit productId or UPC, for example 0001111041700. Get one from search_products."
      • addedInput schema / properties / product_id / pattern
        Added value: +"^[0-9]{13}$"
      • removedInput schema / properties / product_id / title
        Removed value: -"Product Id"
      • addedInput schema / properties / quantity / description
        Added value: +"Quantity to add, 1 or more"
      • addedInput schema / properties / quantity / minimum
        Added value: +1
      • removedInput schema / properties / quantity / title
        Removed value: -"Quantity"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbulk_add_to_cart9 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / items / description
        Added value: +"List of items to add. Each item should have:\n   - product_id: The product ID or UPC\n   - quantity: Quantity to add (default: 1)\n   - modality: PICKUP or DELIVERY (default: PICKUP)"
      • changedInput schema / properties / items / items / additionalProperties
        Previous value: -trueNew value: +false
      • addedInput schema / properties / items / items / description
        Added value: +"One item of a bulk_add_to_cart call"
      • addedInput schema / properties / items / items / properties
        Added value: +{
        +  "modality": {
        +    "default": "PICKUP",
        +    "description": "How the order will be fulfilled: PICKUP or DELIVERY (uppercase)",
        +    "enum": [
        +      "PICKUP",
        +      "DELIVERY"
        +    ],
        +    "type": "string"
        +  },
        +  "product_id": {
        +    "description": "13-digit productId or UPC, for example 0001111041700. Get one from search_products.",
        +    "pattern": "^[0-9]{13}$",
        +    "type": "string"
        +  },
        +  "quantity": {
        +    "default": 1,
        +    "description": "Quantity to add, 1 or more",
        +    "minimum": 1,
        +    "type": "integer"
        +  }
        +}
      • addedInput schema / properties / items / items / required
        Added value: +[
        +  "product_id"
        +]
      • addedInput schema / properties / items / minItems
        Added value: +1
      • removedInput schema / properties / items / title
        Removed value: -"Items"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Addedbulk_search_products
    • Changedcheck_chain_exists5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / chain_name / description
        Added value: +"Chain name, for example Kroger or Ralphs. See list_chains."
      • addedInput schema / properties / chain_name / minLength
        Added value: +1
      • removedInput schema / properties / chain_name / title
        Removed value: -"Chain Name"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcheck_department_exists5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / department_id / description
        Added value: +"2-character department ID. Get one from list_departments."
      • addedInput schema / properties / department_id / pattern
        Added value: +"^[A-Za-z0-9]{2}$"
      • removedInput schema / properties / department_id / title
        Removed value: -"Department Id"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcheck_location_exists5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / location_id / description
        Added value: +"8-character store locationId, for example 01400513. Get one from search_locations."
      • addedInput schema / properties / location_id / pattern
        Added value: +"^[A-Za-z0-9]{8}$"
      • removedInput schema / properties / location_id / title
        Removed value: -"Location Id"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedclear_current_cart2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedcomplete_authentication4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / redirect_url / description
        Added value: +"The full URL from your browser after authorization"
      • removedInput schema / properties / redirect_url / title
        Removed value: -"Redirect Url"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedforce_reauthenticate2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedget_authentication_info2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedget_chain_details5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / chain_name / description
        Added value: +"Chain name, for example Kroger or Ralphs. See list_chains."
      • addedInput schema / properties / chain_name / minLength
        Added value: +1
      • removedInput schema / properties / chain_name / title
        Removed value: -"Chain Name"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedget_current_datetime2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedget_department_details5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / department_id / description
        Added value: +"2-character department ID. Get one from list_departments."
      • addedInput schema / properties / department_id / pattern
        Added value: +"^[A-Za-z0-9]{2}$"
      • removedInput schema / properties / department_id / title
        Removed value: -"Department Id"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedget_location_details5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / location_id / description
        Added value: +"8-character store locationId, for example 01400513. Get one from search_locations."
      • addedInput schema / properties / location_id / pattern
        Added value: +"^[A-Za-z0-9]{8}$"
      • removedInput schema / properties / location_id / title
        Removed value: -"Location Id"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedget_preferred_location2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedget_product_details8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / location_id / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "pattern": "^[A-Za-z0-9]{8}$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / location_id / description
        Added value: +"8-character store locationId, for example 01400513. Defaults to the preferred location set with set_preferred_location."
      • removedInput schema / properties / location_id / title
        Removed value: -"Location Id"
      • addedInput schema / properties / product_id / description
        Added value: +"13-digit productId or UPC, for example 0001111041700. Get one from search_products."
      • addedInput schema / properties / product_id / pattern
        Added value: +"^[0-9]{13}$"
      • removedInput schema / properties / product_id / title
        Removed value: -"Product Id"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedget_product_images10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / location_id / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "pattern": "^[A-Za-z0-9]{8}$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / location_id / description
        Added value: +"8-character store locationId, for example 01400513. Defaults to the preferred location set with set_preferred_location."
      • removedInput schema / properties / location_id / title
        Removed value: -"Location Id"
      • addedInput schema / properties / perspective / description
        Added value: +"The image perspective to retrieve (default: \"front\")"
      • addedInput schema / properties / perspective / minLength
        Added value: +1
      • removedInput schema / properties / perspective / title
        Removed value: -"Perspective"
      • addedInput schema / properties / product_id / description
        Added value: +"13-digit productId or UPC, for example 0001111041700. Get one from search_products."
      • addedInput schema / properties / product_id / pattern
        Added value: +"^[0-9]{13}$"
      • removedInput schema / properties / product_id / title
        Removed value: -"Product Id"
    • Changedget_user_profile2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedget_user_zip_code2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedlist_chains2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedlist_departments2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedmark_order_placed6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / order_notes / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / order_notes / description
        Added value: +"Optional notes about the order"
      • removedInput schema / properties / order_notes / title
        Removed value: -"Order Notes"
      • removedInput schema / properties / order_notes / type
        Removed value: -"string"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedremove_from_cart9 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / modality / anyOf
        Added value: +[
        +  {
        +    "description": "How the order will be fulfilled: PICKUP or DELIVERY (uppercase)",
        +    "enum": [
        +      "PICKUP",
        +      "DELIVERY"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / modality / description
        Added value: +"Specific modality to remove (if None, removes all instances)"
      • removedInput schema / properties / modality / title
        Removed value: -"Modality"
      • removedInput schema / properties / modality / type
        Removed value: -"string"
      • addedInput schema / properties / product_id / description
        Added value: +"The product ID to remove from the local tracking"
      • addedInput schema / properties / product_id / minLength
        Added value: +1
      • removedInput schema / properties / product_id / title
        Removed value: -"Product Id"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedsearch_locations10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / chain / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / chain / description
        Added value: +"Only return stores of this chain, for example Kroger. See list_chains."
      • removedInput schema / properties / chain / title
        Removed value: -"Chain"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / radius_in_miles / title
        Removed value: -"Radius In Miles"
      • changedInput schema / properties / zip_code / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "pattern": "^[0-9]{5}$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / zip_code / description
        Added value: +"5-digit ZIP code. ZIP+4 is not accepted. Defaults to the user's ZIP code (see get_user_zip_code)."
      • removedInput schema / properties / zip_code / title
        Removed value: -"Zip Code"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedsearch_products15 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / brand / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / brand / description
        Added value: +"Only return products of this brand. Case-sensitive, for example 'Kroger'."
      • removedInput schema / properties / brand / title
        Removed value: -"Brand"
      • changedInput schema / properties / fulfillment / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "csp",
        -      "delivery",
        -      "pickup"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "ais",
        +      "csp",
        +      "dth",
        +      "sth"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / fulfillment / description
        Added value: +"Only return products available by this fulfillment method: ais (available in store), csp (curbside pickup), dth (delivery to home), sth (ship to home)"
      • removedInput schema / properties / fulfillment / title
        Removed value: -"Fulfillment"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • changedInput schema / properties / location_id / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "pattern": "^[A-Za-z0-9]{8}$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / location_id / description
        Added value: +"8-character store locationId, for example 01400513. Defaults to the preferred location set with set_preferred_location."
      • removedInput schema / properties / location_id / title
        Removed value: -"Location Id"
      • addedInput schema / properties / search_term / description
        Added value: +"Product search term, for example 'milk' or 'organic apples'. At least 3 characters and at most 8 words separated by single spaces."
      • addedInput schema / properties / search_term / minLength
        Added value: +3
      • removedInput schema / properties / search_term / title
        Removed value: -"Search Term"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedsearch_products_by_id8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / location_id / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "pattern": "^[A-Za-z0-9]{8}$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / location_id / description
        Added value: +"8-character store locationId, for example 01400513. Defaults to the preferred location set with set_preferred_location."
      • removedInput schema / properties / location_id / title
        Removed value: -"Location Id"
      • addedInput schema / properties / product_id / description
        Added value: +"13-digit productId or UPC, for example 0001111041700. Get one from search_products."
      • addedInput schema / properties / product_id / pattern
        Added value: +"^[0-9]{13}$"
      • removedInput schema / properties / product_id / title
        Removed value: -"Product Id"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedset_preferred_location5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / location_id / description
        Added value: +"8-character store locationId, for example 01400513. Get one from search_locations."
      • addedInput schema / properties / location_id / pattern
        Added value: +"^[A-Za-z0-9]{8}$"
      • removedInput schema / properties / location_id / title
        Removed value: -"Location Id"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedstart_authentication2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedtest_authentication2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedview_current_cart2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedview_order_history6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit / description
        Added value: +"Number of recent orders to show (1-50)"
      • addedInput schema / properties / limit / maximum
        Added value: +50
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
  2. 30 tool updates
    • First observedadd_items_to_cart
    • First observedbulk_add_to_cart
    • First observedcheck_chain_exists
    • First observedcheck_department_exists
    • First observedcheck_location_exists
    • First observedclear_current_cart
    • First observedcomplete_authentication
    • First observedforce_reauthenticate
    • First observedget_authentication_info
    • First observedget_chain_details
    • First observedget_current_datetime
    • First observedget_department_details
    • First observedget_location_details
    • First observedget_preferred_location
    • First observedget_product_details
    • First observedget_product_images
    • First observedget_user_profile
    • First observedget_user_zip_code
    • First observedlist_chains
    • First observedlist_departments
    • First observedmark_order_placed
    • First observedremove_from_cart
    • First observedsearch_locations
    • First observedsearch_products
    • First observedsearch_products_by_id
    • First observedset_preferred_location
    • First observedstart_authentication
    • First observedtest_authentication
    • First observedview_current_cart
    • First observedview_order_history

TDQS

B3.4/5.0

Scored across 31 tools

Disambiguation4/5

Most tools target distinct resources and actions (locations, products, cart, orders, chains, departments). The main overlap is between authentication/status tools and between paired check_* versus get_* detail tools, but the descriptions make the intended use clear enough to avoid serious misselection.

Naming Consistency4/5

Almost all tools use a readable snake_case verb_noun pattern such as get_location_details, search_products, and add_items_to_cart. Minor deviations like bulk_search_products, force_reauthenticate, and mark_order_placed slightly break the pattern but remain understandable and consistent in casing.

Tool Count2/5

At 31 tools, the surface is heavy for a shopping assistant MCP, with several check_*/get_* pairs and bulk variants inflating the set. The broad domain explains some of it, but many tools could be consolidated or treated as internal helpers.

Completeness4/5

Core workflows are covered: authentication, store search, product search/details, cart add/view/remove/clear, local order history, chains, departments, and profile. Gaps include no true checkout or cart-quantity update, and cart/order operations are local-only due to Kroger API limits, but the tool descriptions acknowledge these constraints.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    F
    maintenance
    A Model Context Protocol server that enables AI assistants to interact with a complete e-commerce application, providing authentication, product browsing, and shopping cart management through standardized MCP tools.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that connects Carrefour Drive to Claude and other MCP clients, enabling product search with real prices, nutriscore, availability, and natural language cart management.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Control 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.
    11
    AGPL 3.0