Skip to main content
Glama

kapruka_get_product

Read-onlyIdempotent

Fetch full details for a single Kapruka product by its product ID.

Returns name, description, price (with optional currency conversion), stock status,
images, variants, shipping info, delivery scope, and a direct product URL.

Discounts: `price` is what checkout charges, with any website discount already
applied; `compare_at_price` is the pre-discount price when one applies (null
otherwise). Each variant carries its own pair. Quote `price`.

Delivery scope: most gifts ship island-wide, but restaurant food, hotel cakes
and liquor only reach a limited city set (typically the Colombo area). The
`delivery` object is the authority — search results do NOT carry it. When
`delivery.island_wide` is false, tell the customer up front that the item is
delivered only to selected cities, and confirm their city with
kapruka_check_delivery(city, product_id) before promising anything. If
`deliverable_city_count` exceeds the returned list, the list is truncated —
say "and more", don't treat it as complete.

Note: Some IDs starting with 'CATSYM' are category landing pages, not purchasable
products — this tool will flag those clearly.

Args:
    params (GetProductInput):
        - product_id (str): Kapruka product ID (e.g. 'cakeXX000000')
        - currency (str): Price currency — LKR (default), USD, GBP, AUD, EUR
        - type (Optional[str]): Optional type hint (e.g. 'specialgifts')
        - response_format (str): 'markdown' (default) or 'json'

Returns:
    str: Product details in the requested format.

    JSON schema:
    {
      "id": str,
      "name": str,
      "description": str,
      "summary": str,
      "price": {"amount": float, "currency": str},
      "compare_at_price": {"amount": float, "currency": str} | null,
      "in_stock": bool,
      "stock_level": str,           # "low" | "medium" | "high"
      "category": {"id": str, "name": str, "slug": str, "path": str},
      "variants": [{"id": str, "name": str, "sku": str, "price": {...},
                    "in_stock": bool, "stock_level": str, "attributes": {...}}],
      "images": [str],              # list of full-resolution image URLs
      "attributes": {"type": str, "subtype": str, "weight": str, "vendor": str},
      "shipping": {"ships_from": str, "ships_internationally": bool, "restricted_countries": [str]},
      "delivery": {
        "island_wide": bool,
        "deliverable_city_count": int,   # only when island_wide=false; TRUE total
        "deliverable_cities": [str]      # only when island_wide=false; capped at 60
      },
      "rating": null,
      "url": str
    }

    Error: "Error: <message>" on failure.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / $defs / GetProductInput / properties / currency / description
      Previous value: -"Price currency. Supported: LKR, USD, GBP, AUD, CAD, EUR"New value: +"Price currency. Supported: LKR, USD, GBP, AUD, EUR"
  2. Changed1 schema field changed
    • changedInput schema / $defs / GetProductInput / properties / product_id / description
      Previous value: -"Kapruka product ID (e.g. 'cake00ka002034', 'EF_PC_CHOC0V2774P00065')"New value: +"Kapruka product ID (e.g. 'cakeXX000000', 'EF_PC_CHOC0V2774P00065')"
  3. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial behavioral context beyond them: discount semantics for price vs compare_at_price, the limited-city delivery constraint, the deliverable_cities truncation-at-60 caveat, and the CATSYM non-purchasable flag. This is real operational guidance, not repetition.

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 one-line purpose, then organized into price, delivery, and note sections with clear headers. Some delivery prose is longer than strictly needed, but each block carries actionable instructions and nothing is wasted.

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?

A full response schema is documented, so return values need no prose, and the description still covers edge cases an agent needs: discount interpretation, truncated city lists, category landing pages, and the 'Error: <message>' failure format.

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

Parameters3/5

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

The Args section enumerates product_id examples and lists currency options (LKR default, USD/GBP/AUD/EUR) and response_format values, largely mirroring the input schema. The only added nuance is that 'type' is rarely needed. Adequate but adds little beyond the schema fields.

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 ('Fetch full details for a single Kapruka product') scoped by 'by its product ID', which distinguishes it from kapruka_search_products by implying an already-known ID. An agent can identify the tool without opening the 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 clear conditional guidance: when to call kapruka_check_delivery(city, product_id) before promising delivery, and how to treat CATSYM IDs that are landing pages rather than products. It does not explicitly say to find IDs via kapruka_search_products first, but the workflow context is strong.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.