Skip to main content
Glama
Druhayes

king-soopers-mcp

by Druhayes

king-soopers-mcp

A local Model Context Protocol server for shopping at King Soopers through the official Kroger Developer API. It lets an LLM client such as Claude Code or Claude Desktop find stores, search products with live store pricing, build a shopping list, and push it to your King Soopers cart. Checkout happens in the King Soopers app.

Status: design phase. See docs/BUILD_SPEC.md for the full specification and docs/research/ for the API and SDK research behind it.

What it can and cannot do

The Kroger Public API allows product and store lookup and adding items to a cart. It does not expose cart contents, item removal, checkout, or order history; those require a Kroger Partner agreement. This server keeps a local shadow cart so you can review a list before syncing it to Kroger.

Related MCP server: Kroger MCP Server

Stack

  • Python 3.12+, managed with uv

  • Official mcp Python SDK 2.x

  • httpx, pydantic-settings

  • OAuth2 via the Kroger developer API only; no scraping or password login

Setup (once implemented)

  1. Register an app at developer.kroger.com with redirect URI http://localhost:8000/callback.

  2. Copy .env.example to .env and fill in the client id and secret.

  3. uv sync

  4. Register with Claude Code:

claude mcp add --scope user --transport stdio king-soopers -- uv run --directory /path/to/king-soopers-mcp king-soopers-mcp

Privacy

Credentials and tokens stay on your machine in .env and a 0600 token file. The server only writes to your Kroger account when you explicitly call the cart sync tool.

License

MIT

Available Tools

6 tools
auth_statusA

Report whether Kroger credentials and tokens are usable.

Only expiry metadata is returned; token values are never exposed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes
user_tokenYes
client_tokenYes
token_cache_pathYes
credentials_configuredYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description must carry the behavioral burden. It does so by stating that only expiry metadata is returned and that token values are never exposed, which is important security-relevant behavior beyond the tool's name. It could add an explicit read-only/no-side-effects statement, but 'Report' already 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?

Two tightly written sentences with no filler. The core purpose is front-loaded, and the token-exposure caveat earns its place as an important behavioral note.

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-argument status tool with an output schema, the description is complete: it states purpose, return scope, and a key security guarantee. No additional context is necessary for an agent to invoke it correctly.

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 the schema coverage is 100%, so there is nothing for the description to explain about inputs. Baseline 4 applies for no-parameter tools; the description adds no parameter semantics because none are needed.

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

Purpose5/5

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

The opening phrase 'Report whether Kroger credentials and tokens are usable' names a specific verb, resource, and result. It also differentiates this auth-focused tool from the sibling store-product tools, so an agent can recognize when it applies.

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 tool's context clear: it is a status check for Kroger credentials and tokens. It does not explicitly list alternatives or exclusion conditions, but no sibling is an auth tool, so the intended use is evident.

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

find_storesA

Find King Soopers stores near a zip code.

Results are ordered by the API's own proximity ranking. Each store carries a search_scope string describing this search, for example 'within 10 mi of 80202'; the Kroger locations endpoint returns no per-store distance and no coordinates for the search centre, so no distance is reported per store.

Args: zip_code: 5-digit zip to search around. Falls back to KROGER_DEFAULT_ZIP. radius_miles: Search radius, 1-100 miles. limit: Maximum number of stores to return, 1-200.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
zip_codeNo
radius_milesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and excels: it discloses API-side ordering, the search_scope string, the absence of per-store distance and search-center coordinates, and the zip-code fallback. These are non-obvious behavioral details that an agent would otherwise only learn at runtime.

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 front-loads the core purpose, then uses compact sections for behavioral caveats and parameter documentation. Every sentence provides decision-relevant detail with no filler.

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?

The description covers purpose, all parameters, defaults/fallbacks, ordering, and key output quirks. Since an output schema is present, the description is appropriately complete for a read-only lookup tool.

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

Parameters5/5

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

Schema description coverage is 0%, but the Args section fully compensates by explaining zip_code format and fallback, radius_miles range (1-100), and limit range (1-200). This adds units, constraints, and default behavior that the bare integer schema does not convey.

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 opening sentence states a specific verb ('Find'), a specific resource ('King Soopers stores'), and the search criterion ('near a zip code'). This makes the tool's purpose immediately clear and distinguishes it from siblings like search_products and set_default_store without needing to name them.

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 context: use this tool when you need nearby King Soopers stores for a zip code, and it documents the fallback to KROGER_DEFAULT_ZIP. However, it does not explicitly mention alternatives or say when not to use it, which prevents a full 5.

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

get_default_storeA

Show the store currently used for product prices and availability.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
sourceYes
addressYes
messageYes
configuredYes
location_idYes

TDQS

A3.8/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 of behavioral disclosure. The verb 'Show' implies a read operation, but the description does not state whether the operation is safe/non-mutating, whether it requires certain permissions, what happens if no default store is configured, or any side effects. This is minimal behavioral transparency beyond the core purpose.

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, focused sentence with no filler or redundancy. It is appropriately sized for the simplicity of the tool and front-loads the core information ('Show the store currently used').

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 that this is a zero-parameter getter with an output schema present, the description is nearly complete for invoking the tool correctly. It clearly states what the tool returns (the current store) and its scope (prices and availability). It could optionally mention the relationship with set_default_store or behavior when no default exists, but these are not critical for a simple getter.

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 the schema already covers everything at 100%. With 0 parameters, the baseline is 4. The description adds no parameter-specific details, but there is nothing to describe, so this baseline is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Show') and a specific resource ('the store currently used for product prices and availability'). This clearly distinguishes it from siblings like set_default_store (which changes the default) and find_stores (which searches stores).

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?

There is no explicit guidance on when to use this tool versus alternatives. The usage is implied by the name and description: call it to retrieve the current default store. However, it does not mention exclusions like 'to change the store, use set_default_store', so the guidance remains implicit rather than explicit.

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

get_productA

Get one product with every image perspective and full fulfillment detail.

Args: product_id: The product_id or UPC from search_products. location_id: Store to price against. Defaults to the saved default store.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idYes
location_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
upcYes
sizeYes
aisleYes
brandYes
aislesYes
imagesYes
sold_byYes
in_stockYes
image_urlYes
categoriesYes
product_idYes
descriptionYes
fulfillmentYes
location_idYes
price_promoYes
stock_levelYes
temperatureYes
price_regularYes
snap_eligibleYes
country_originYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure. It reveals output scope ('every image perspective and full fulfillment detail') and location_id default behavior, but does not discuss authentication, failures, or side effects beyond the implied read operation.

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 compact: one purpose sentence and two argument lines. No filler or redundancy, with the most important purpose front-loaded.

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 output schema supplies return structure and the tool has only two parameters, the description covers what the tool does and how to supply both parameters. It lacks explicit alternative routing but is otherwise complete for invocation.

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 description coverage is 0%, and the description compensates by explaining product_id is the ID/UPC from search_products and that location_id prices against a store with a saved default. This adds meaningful guidance absent from 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?

The first sentence 'Get one product with every image perspective and full fulfillment detail' uses a specific verb and resource and distinguishes this from search_products by targeting a single product. It does not explicitly name a sibling alternative, so it falls short of full differentiation.

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 Args section says product_id comes from search_products, which implies a two-step flow but does not explicitly state when to use get_product versus alternatives. There is no when-not-to-use guidance or named alternatives.

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

search_productsA

Search products with live pricing and stock at one King Soopers store.

Args: term: What to search for, for example 'whole milk'. location_id: Store to price against. Defaults to the saved default store. limit: Maximum number of products to return, 1-50. fulfillment: Optional filter: pickup, delivery, in_store, or ship_to_home.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYes
limitNo
fulfillmentNo
location_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden and does well: it discloses that results are live, scoped to one store, and that location_id has fallback behavior (saved default). It does not explicitly state auth requirements or failure modes, but 'Search' makes the read-only nature evident.

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 summary sentence is front-loaded and precise, and the Args block is compact with no filler. Every sentence contributes actionable information.

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 search tool with four parameters and an output schema present, the description is complete: it covers required vs optional params, defaults, bounds, and filter options. Nothing needed to invoke it correctly is missing.

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

Parameters5/5

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

The Args section adds meaning for all four parameters despite 0% schema coverage: term gets an example, location_id gets its default/store purpose, limit gets a 1-50 range, and fulfillment gets explicit allowed values (pickup, delivery, in_store, ship_to_home). This fully compensates for the bare 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?

The description opens with a specific verb and resource: 'Search products with live pricing and stock at one King Soopers store.' It clearly communicates the tool's function, though it does not explicitly distinguish itself from sibling get_product or find_stores.

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 gives clear context (single-store scope, live pricing/stock, default store behavior), so an agent can infer when search_products applies. However, it never names alternatives or states when to use get_product or find_stores instead.

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

set_default_storeA

Remember a store for later product searches.

Args: location_id: The location_id from find_stores, for example '62000115'.

ParametersJSON Schema
NameRequiredDescriptionDefault
location_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
sourceYes
addressYes
messageYes
configuredYes
location_idYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says the store is 'remembered' for later searches; it doesn't say whether an existing default is overwritten, whether authentication is required, or what observable effect occurs beyond future searches.

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 two short sentences with the core purpose first and the parameter guidance second. There is no filler or repetition of the schema beyond what adds value.

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 setter with an output schema, the description covers the input provenance and the intended effect on future searches. It could state the overwrite behavior and link to get_default_store, but the tool is simple enough that the current text is mostly 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?

With 0% schema description coverage, the description compensates by naming the exact source of location_id (find_stores) and giving a concrete example format ('62000115'). This is sufficient for the single required parameter.

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 an active verb ('Remember') and clearly scopes the resource to a store for later product searches, which matches the setter name. It doesn't explicitly contrast with get_default_store, but the purpose is unambiguous.

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 intended usage is implied: call it before product searches to establish a default store, using a location_id from find_stores. It doesn't state when not to use it or why get_default_store/search_products might be alternatives, so the guidance is only implicit.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.0
    • First observedauth_status
    • First observedfind_stores
    • First observedget_default_store
    • First observedget_product
    • First observedsearch_products
    • First observedset_default_store

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: store search, default store state management, product search, product detail, and auth status. There is no meaningful overlap between search_products and get_product because one returns a list of matches while the other retrieves a single product by ID.

Naming Consistency4/5

Tool names mostly follow a clean verb_noun snake_case pattern like find_stores, set_default_store, search_products, and get_product. The only minor deviation is auth_status, which is a noun phrase rather than a verb_noun form, but it is still short and clearly readable.

Tool Count5/5

Six tools is a well-scoped size for a grocery store/product lookup MCP server. Each tool covers a necessary part of the workflow without redundancy or bloat.

Completeness4/5

The core workflow of finding a store, setting it as default, searching products, and retrieving product details is well covered. Minor gaps exist, such as no way to clear the default store or browse product categories, but these are workable and don't block the primary use case.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Druhayes/king-soopers-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server