list_product_rate_plans
Retrieve rate plans assigned to a product by specifying its product ID. Optional parameters allow filtering, sorting, and paginating the results.
Instructions
List product rate plans for a product. GET /products/{productId}/product-rateplans. Product reference: productId (URI: /products/{productId}). Optional: include, orderBy, sortBy, pageNo, itemPerPage.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| productId | Yes | Product ID (URI: /products/{productId}) | |
| include | No | Attributes to include | |
| orderBy | No | Sort column | |
| sortBy | No | Sort direction | |
| pageNo | No | Page number | |
| itemPerPage | No | Items per page |
Implementation Reference
- Main handler implementation for the 'list_product_rate_plans' tool. Defines the tool definition (name, description, input schema), a Zod validation schema, and the handler function which parses args, extracts productId, and calls the service layer's listRatePlans function.
import { z } from "zod"; import type { Tool } from "../types.js"; import type { Client } from "./helpers.js"; import { errorResult, handleToolCall } from "./helpers.js"; import * as ratePlanService from "../../services/productRatePlanServices.js"; const schema = z.object({ productId: z.string().min(1, "productId is required"), include: z.string().optional(), orderBy: z.string().optional(), sortBy: z.string().optional(), pageNo: z.number().int().min(1).optional(), itemPerPage: z.number().int().min(1).optional(), }); const definition = { name: "list_product_rate_plans", description: "List product rate plans for a product. GET /products/{productId}/product-rateplans. Product reference: productId (URI: /products/{productId}). Optional: include, orderBy, sortBy, pageNo, itemPerPage.", inputSchema: { type: "object" as const, properties: { productId: { type: "string", description: "Product ID (URI: /products/{productId})" }, include: { type: "string", description: "Attributes to include" }, orderBy: { type: "string", description: "Sort column" }, sortBy: { type: "string", description: "Sort direction" }, pageNo: { type: "number", description: "Page number" }, itemPerPage: { type: "number", description: "Items per page" }, }, required: ["productId"], }, }; async function handler(client: Client, args: Record<string, unknown> | undefined) { const parsed = schema.safeParse(args); if (!parsed.success) { return errorResult(parsed.error.errors.map((e) => e.message).join("; ")); } const { productId, ...params } = parsed.data; return handleToolCall(() => ratePlanService.listRatePlans(client, productId, params)); } export const listRatePlansTool: Tool = { definition, handler, }; - Input schema definition for list_product_rate_plans. Uses both a Zod schema (lines 7-14) for runtime validation and an explicit inputSchema object (lines 20-31) for MCP tool definition format. Required parameter: productId. Optional: include, orderBy, sortBy, pageNo, itemPerPage.
const definition = { name: "list_product_rate_plans", description: "List product rate plans for a product. GET /products/{productId}/product-rateplans. Product reference: productId (URI: /products/{productId}). Optional: include, orderBy, sortBy, pageNo, itemPerPage.", inputSchema: { type: "object" as const, properties: { productId: { type: "string", description: "Product ID (URI: /products/{productId})" }, include: { type: "string", description: "Attributes to include" }, orderBy: { type: "string", description: "Sort column" }, sortBy: { type: "string", description: "Sort direction" }, pageNo: { type: "number", description: "Page number" }, itemPerPage: { type: "number", description: "Items per page" }, }, required: ["productId"], }, }; - src/tools/product_rate_plans/listRatePlans.ts:43-46 (registration)Export of the Tool object containing definition and handler. This gets collected via src/tools/product_rate_plans/index.ts (line 9) and registered into the central tool array in src/tools/index.ts (line 29).
export const listRatePlansTool: Tool = { definition, handler, }; - Service-layer listRatePlans function. Builds a URL with query parameters (include, orderBy, sortBy, pageNo, itemPerPage, query, status) and makes a GET request to /products/{productId}/product-rateplans. This is the actual API call implementation.
export async function listRatePlans( client: Client, productId: string, params?: ListRatePlansParams ): Promise<PaginatedResponse<unknown>> { const search = new URLSearchParams(); if (params?.include) search.append("include", params.include); if (params?.orderBy) search.append("orderBy", params.orderBy ?? ""); if (params?.sort) search.append("sort", params.sort); if (params?.sortBy) search.append("sortBy", params.sortBy ?? ""); if (params?.pageNo != null) search.append("pageNo", String(params.pageNo)); if (params?.itemPerPage != null) search.append("itemPerPage", String(params.itemPerPage)); if (params?.query) search.append("query", params.query); if (params?.status) search.append("status", params.status); const q = search.toString(); return client.get<PaginatedResponse<unknown>>( `/products/${productId}/product-rateplans${q ? `?${q}` : ""}` ); }