Skip to main content
Glama

Fish catalog

get_catalog
Read-onlyIdempotent

Get GYOTAK's full fish catalog with real-time availability, retail prices (THB/kg), freshness tiers, and traceability records. Retail prices are always included. For registered chat customers, pass customerKey (gyotak_cus_...) to show wholesale pricing and enable one-tap checkout. For LINE VIP customers, pass lineUserId. Delivery is available within Thailand only. International addresses are not accepted.

Input Schema

NameRequiredDescriptionDefault
lineUserIdNoLINE user ID for VIP pricing (optional)
customerKeyNoGYOTAK customerKey (gyotak_cus_...) for registered chat customers โ€” enables identification, wholesale pricing, and one-tap checkout (optional)

Output Schema

NameRequiredDescriptionDefault
vipNoCustomer line shown for a registered customer
itemsYesCatalog lines in the order shown (empty when no stock)
catalogNoUsed by the catalog widget (on-chain provenance per item)
nextActionsNoUsed by the catalog widget (buttons)
customerContextNoUsed by the catalog widget

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "catalog": {
      +      "description": "Used by the catalog widget (on-chain provenance per item)",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "customerContext": {
      +      "description": "Used by the catalog widget",
      +      "type": "object"
      +    },
      +    "items": {
      +      "description": "Catalog lines in the order shown (empty when no stock)",
      +      "items": {
      +        "description": "One line of the catalog text",
      +        "properties": {
      +          "bands": {
      +            "additionalProperties": {
      +              "type": "integer"
      +            },
      +            "description": "Packs per weight band, as listed under ๐Ÿ“ฆ",
      +            "type": "object"
      +          },
      +          "catchRecordCount": {
      +            "description": "Number of catch records in the traceability line",
      +            "type": "integer"
      +          },
      +          "catchRecords": {
      +            "description": "Up to 3 catch records as listed",
      +            "items": {
      +              "properties": {
      +                "blogUrl": {
      +                  "type": "string"
      +                },
      +                "location": {
      +                  "type": "string"
      +                },
      +                "photoAt": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "photoAt"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "days": {
      +            "description": "Days tier shown next to the tier (LINE VIP order-page catalog only)",
      +            "type": "integer"
      +          },
      +          "fishName": {
      +            "type": "string"
      +          },
      +          "label": {
      +            "description": "Card label shown in parentheses (LINE VIP order-page catalog only)",
      +            "type": "string"
      +          },
      +          "onchain": {
      +            "description": "Midnight on-chain links as listed",
      +            "items": {
      +              "properties": {
      +                "moreRecords": {
      +                  "type": "integer"
      +                },
      +                "network": {
      +                  "type": "string"
      +                },
      +                "tier": {
      +                  "type": "string"
      +                },
      +                "url": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "network",
      +                "url"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "orderAs": {
      +            "description": "Status and tier to pass to place_order, as shown after โ†’",
      +            "properties": {
      +              "status": {
      +                "type": "string"
      +              },
      +              "tier": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "status",
      +              "tier"
      +            ],
      +            "type": "object"
      +          },
      +          "orderUpToKg": {
      +            "description": "Shown as \"order up to โ€ฆkg\"; 0 when shown as \"cannot be ordered by kg right now\"",
      +            "type": "number"
      +          },
      +          "packs": {
      +            "description": "Stock packs as shown",
      +            "type": "integer"
      +          },
      +          "preferred": {
      +            "description": "true when marked โ˜… (preferred fish)",
      +            "type": "boolean"
      +          },
      +          "priceOnRequest": {
      +            "description": "true when the line shows \"price on request\"",
      +            "type": "boolean"
      +          },
      +          "priceThbPerKg": {
      +            "description": "Price shown for this line (THB/kg). Retail for anonymous callers, the customer's own price when vip is present",
      +            "type": "number"
      +          },
      +          "section": {
      +            "description": "Section heading (LINE VIP order-page catalog only)",
      +            "type": "string"
      +          },
      +          "status": {
      +            "description": "Cut / preparation as shown",
      +            "type": "string"
      +          },
      +          "thaiName": {
      +            "type": "string"
      +          },
      +          "tier": {
      +            "description": "Fresh / Tier1 / Tier2, or \"all\" for lines listed as [all tiers]",
      +            "type": "string"
      +          },
      +          "weightKg": {
      +            "description": "Stock weight as shown (kg, one decimal)",
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "fishName",
      +          "weightKg"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "nextActions": {
      +      "description": "Used by the catalog widget (buttons)",
      +      "type": "array"
      +    },
      +    "vip": {
      +      "description": "Customer line shown for a registered customer",
      +      "properties": {
      +        "cashbackLimitThb": {
      +          "type": "number"
      +        },
      +        "cashbackRemainingThb": {
      +          "type": "number"
      +        },
      +        "companyName": {
      +          "type": "string"
      +        },
      +        "orderMode": {
      +          "description": "LINE VIP order-page catalog: catalog browsing only / order from the LINE VIP order page / order in this chat",
      +          "enum": [
      +            "view_only",
      +            "line_order_page",
      +            "chat"
      +          ],
      +          "type": "string"
      +        },
      +        "shippingZone": {
      +          "description": "\"0\" = local (free), otherwise the zone number shown",
      +          "type": "string"
      +        },
      +        "tierPricing": {
      +          "description": "true when shown as \"tier pricing applied\"",
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "companyName"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "items"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and closed-world, and the delivery restriction aligns with openWorldHint=false while making it concrete. The description adds real behavioral context beyond annotations: retail prices are always returned, wholesale pricing is conditional on identity, and international addresses are rejected. It does not describe pagination or catalog size, which keeps it short of a 5.

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?

Four sentences, front-loaded with what is returned, then the two identity params, then the delivery constraint. No filler; the only mild redundancy is repeating the customerKey benefits already present in the schema.

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?

With an output schema present, return shape needs no explanation, and the description covers pricing tiers, identity options, and the geographic restriction. The remaining gap is minimal โ€” no guidance on catalog size or caching, which is not essential for correct invocation.

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 descriptions already explain both params, including the wholesale pricing and one-tap checkout effects. The description largely restates those effects, adding only the 'retail prices are always included' fallback behavior, so baseline 3 applies.

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 GYOTAK's full fish catalog') and enumerates what the payload contains: availability, retail prices in THB/kg, freshness tiers, traceability. This clearly separates it from search_fish, which would be the filtered-lookup sibling.

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 explicit conditional context: pass customerKey for registered chat customers to unlock wholesale pricing and one-tap checkout, pass lineUserId for LINE VIP customers, and delivery is Thailand-only. It does not explicitly compare against search_fish or say when not to use the catalog, but the selection conditions for the optional params are unambiguous.

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.

Resources