Skip to main content
Glama

get_product_recommendation

Read-only

Translate a customer's primary concern into a product recommendation. primary_concern must be one of: blockout, heat, glare, moisture, privacy, security, automation. Optionally narrow by room (bedroom, lounge, etc.), location, budget, and aesthetic. Returns a recommended product_id with rationale, pass it to get_price or configure_product next. Security concern routes to brochure MCP (Garden Route customers only).

Input Schema

NameRequiredDescriptionDefault
roomNoOptional room, e.g. "bedroom". Noted in the reply.
locationNoOptional customer city or suburb. Accepted but not currently used.
aestheticNoOptional style preference. Noted in the reply.
max_budget_zarNoOptional budget in ZAR. Drops options whose 1000x1000mm starting price is above it.
primary_concernYesMain need: blockout, heat, glare, moisture, privacy, security or automation. security returns a Garden Route handoff, not shop products.

Output Schema

NameRequiredDescriptionDefault
notesNo
handoffNo
recommendationsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedInput schema / properties / aesthetic / description
      Added value: +"Optional style preference. Noted in the reply."
    • addedInput schema / properties / location / description
      Added value: +"Optional customer city or suburb. Accepted but not currently used."
    • addedInput schema / properties / max_budget_zar / description
      Added value: +"Optional budget in ZAR. Drops options whose 1000x1000mm starting price is above it."
    • addedInput schema / properties / primary_concern / description
      Added value: +"Main need: blockout, heat, glare, moisture, privacy, security or automation. security returns a Garden Route handoff, not shop products."
    • addedInput schema / properties / room / description
      Added value: +"Optional room, e.g. \"bedroom\". Noted in the reply."
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "handoff": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "product_family": {
      +          "type": "string"
      +        },
      +        "reason": {
      +          "type": "string"
      +        },
      +        "url": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "url",
      +        "product_family",
      +        "reason"
      +      ],
      +      "type": "object"
      +    },
      +    "notes": {
      +      "type": "string"
      +    },
      +    "recommendations": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "currency": {
      +            "const": "ZAR",
      +            "type": "string"
      +          },
      +          "product_id": {
      +            "type": "string"
      +          },
      +          "product_name": {
      +            "type": "string"
      +          },
      +          "reason": {
      +            "type": "string"
      +          },
      +          "shop_url": {
      +            "type": "string"
      +          },
      +          "starting_price_zar_for_1m_x_1m": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          }
      +        },
      +        "required": [
      +          "product_id",
      +          "product_name",
      +          "reason",
      +          "starting_price_zar_for_1m_x_1m",
      +          "currency",
      +          "shop_url"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "recommendations"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A4/5.0
Behavior4/5

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

Consistent with readOnlyHint=true — the wording ('Translate', 'Returns a recommended product_id') describes a pure lookup with no mutation. It adds real context beyond annotations: the security path is a handoff to another MCP rather than a normal result, and budget filtering silently drops products whose 1000x1000mm starting price exceeds the cap. The 'Garden Route customers only' qualifier is useful but vague about what happens to non-Garden-Route security requests.

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?

Four tight sentences: what it does, valid inputs, optional narrowing, then next steps and the routing exception. The product_id handoff is placed exactly where the agent will look for it after invoking. No 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?

For a read-only, single-required-param tool with a full output schema, this covers purpose, inputs, output handoff and the one exceptional path. The only material gap is how it relates to catalog-search siblings — an agent may still be unsure whether to recommend or search.

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 baseline is 3 and the schema already carries enum values and per-parameter notes. The description does add the budget mechanism, but its claim that you can 'narrow by ... location' conflicts with the schema's own note that location is 'Accepted but not currently used', which could lead an agent to rely on a filter that does nothing.

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?

Uses a specific verb+resource: 'Translate a customer's primary concern into a product recommendation.' The enumerated concern values make the input space concrete. It stops short of distinguishing itself from catalog siblings like search_products or lookup_catalog, so an agent can't be certain when this beats a catalog search.

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?

Clear usage context: supply a primary concern, optionally narrow by room/budget/aesthetic, then pass the returned product_id to get_price or configure_product. It also states an exclusion — security concerns route to the brochure MCP for Garden Route customers rather than returning shop products. No comparison against catalog-search siblings is offered.

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.