Skip to main content
Glama

hou_tea_browse

Browse the Chinese tea catalog and filter by category, price, season, or difficulty. Returns product details including taste profile, fermentation level, and ready-to-render card.

Instructions

[core] Browse the hou-tea Chinese tea catalog. Returns products with name, price (USD/USDC), images, taste profile, fermentation level, season, and a ready-to-render card object.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
categoryNo
price_minNo
price_maxNo
seasonNo
difficultyNo
per_pageNo
pageNo

Implementation Reference

  • The executor function for hou_tea_browse — calls houTea.catalog() with the parsed arguments. This is the actual handler that executes the tool logic.
    execute: (args) => houTea.catalog(args as Parameters<typeof houTea.catalog>[0]),
  • Input schema for hou_tea_browse: defines category (string), price_min/price_max (number), season (enum: spring/summer/autumn/winter), difficulty (enum: beginner/intermediate/advanced), per_page (integer 1-100, default 20), and page (integer min 1, default 1).
    inputSchema: obj({
      category: { type: "string" },
      price_min: { type: "number", minimum: 0 },
      price_max: { type: "number", minimum: 0 },
      season: { type: "string", enum: ["spring", "summer", "autumn", "winter"] },
      difficulty: { type: "string", enum: ["beginner", "intermediate", "advanced"] },
      per_page: { type: "integer", minimum: 1, maximum: 100, default: 20 },
      page: { type: "integer", minimum: 1, default: 1 },
    }),
  • Tool registration as a ToolDef in the CORE_TOOLS array. Includes name 'hou_tea_browse', group 'core', summary, description, uiComponent, inputSchema, execute function, and nextAction helper that suggests calling hou_tea_explain on the first result.
    const CORE_TOOLS: ToolDef[] = [
      {
        name: "hou_tea_browse",
        group: "core",
        summary: "Browse hou-tea catalog (filter by category / price / season / difficulty).",
        description:
          "Browse the hou-tea Chinese tea catalog. Returns products with name, price (USD/USDC), images, taste profile, fermentation level, season, and a ready-to-render `card` object.",
        uiComponent: "TeaRecommendationGrid",
        inputSchema: obj({
          category: { type: "string" },
          price_min: { type: "number", minimum: 0 },
          price_max: { type: "number", minimum: 0 },
          season: { type: "string", enum: ["spring", "summer", "autumn", "winter"] },
          difficulty: { type: "string", enum: ["beginner", "intermediate", "advanced"] },
          per_page: { type: "integer", minimum: 1, maximum: 100, default: 20 },
          page: { type: "integer", minimum: 1, default: 1 },
        }),
        execute: (args) => houTea.catalog(args as Parameters<typeof houTea.catalog>[0]),
        nextAction: (_args, data) => {
          const id = firstSkillId(data);
          if (!id) return undefined;
          return [
            {
              tool: "hou_tea_explain",
              reason: "Show a deep guide for the most relevant product.",
              args_hint: { skill_id: id },
            },
          ];
        },
      },
  • The actual catalog() method on the houTea client — makes a GET request to /api/agent/catalog with query params. This is the underlying API call invoked by the hou_tea_browse handler.
    export const houTea = {
      catalog: async (p: CatalogParams = {}) => {
        const merged = withDefaults({ store_id: DEFAULT_STORE_ID, ...p });
        return getJson<unknown>(`${DEFAULT_BASE}/api/agent/catalog${qs(merged as Record<string, unknown>)}`);
      },
  • The CatalogParams interface defining the typed parameters for the catalog API call that backs hou_tea_browse.
    export interface CatalogParams {
      store_id?: string;
      category?: string;
      price_min?: number;
      price_max?: number;
      season?: string;
      difficulty?: "beginner" | "intermediate" | "advanced";
      page?: number;
      per_page?: number;
    }
Behavior2/5

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

With no annotations, the description carries full burden. It describes return fields but fails to disclose behavioral traits such as read-only intent, idempotency, rate limits, or any side effects, leaving the agent uncertain about safety.

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 sentence with no extraneous words, front-loaded with '[core]', and efficiently conveys the tool's primary function and output.

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

Completeness1/5

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

Given 7 parameters, no output schema, and no annotations, the description is severely incomplete. It lists return fields but provides no parameter guidance, pagination details, or behavioral context, leaving major gaps for the agent.

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

Parameters1/5

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

Schema description coverage is 0%, requiring the description to compensate. The description omits any explanation of the 7 parameters (category, price_min, etc.), leaving the agent without guidance on how to use them for filtering.

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 clearly states the tool's verb ('Browse') and resource ('hou-tea Chinese tea catalog'), and lists specific return fields (name, price, images, etc.), distinguishing it from siblings like hou_tea_recommend which suggests recommendations.

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 for general browsing of the catalog but does not specify when to use this tool vs alternatives like hou_tea_discover_extended, nor provides exclusions or when-not-to-use scenarios.

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

Install Server

Other Tools

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/jackrain19743/hou-tea-mcp-server'

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