update_product
Modify product details in ShipBob's fulfillment system, including name, SKU, dimensions, weight, and description for accurate inventory management.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| productId | Yes | The ID of the product to update | |
| name | No | Product name | |
| sku | No | Stock keeping unit | |
| barcode | No | Product barcode/UPC | |
| description | No | Product description | |
| weight | No | Weight in ounces | |
| length | No | Length in inches | |
| width | No | Width in inches | |
| height | No | Height in inches | |
| value | No | Declared value of the product |
Implementation Reference
- src/tools/product-tools.js:100-115 (handler)The handler function that implements the core logic of the 'update_product' tool. It destructures the productId and spreads the rest as productData, calls the ShipBob API client to perform the update, and returns a formatted success or error response.handler: async ({ productId, ...productData }) => { try { const updatedProduct = await shipbobClient.updateProduct(productId, productData); return { content: [{ type: "text", text: `Product updated successfully: ${JSON.stringify(updatedProduct, null, 2)}` }] }; } catch (error) { return { content: [{ type: "text", text: `Error updating product: ${error.message}` }], isError: true }; } }
- src/tools/product-tools.js:88-99 (schema)Zod schema defining the input parameters and validation for the 'update_product' tool.schema: { productId: z.string().describe("The ID of the product to update"), name: z.string().optional().describe("Product name"), sku: z.string().optional().describe("Stock keeping unit"), barcode: z.string().optional().describe("Product barcode/UPC"), description: z.string().optional().describe("Product description"), weight: z.number().optional().describe("Weight in ounces"), length: z.number().optional().describe("Length in inches"), width: z.number().optional().describe("Width in inches"), height: z.number().optional().describe("Height in inches"), value: z.number().optional().describe("Declared value of the product") },
- src/tools/product-tools.js:85-116 (registration)The complete tool definition object for 'update_product', including name, description, schema, and handler. This object is part of the productTools array exported and registered in server.js via registerTools(productTools).{ name: "update_product", description: "Update an existing product in ShipBob", schema: { productId: z.string().describe("The ID of the product to update"), name: z.string().optional().describe("Product name"), sku: z.string().optional().describe("Stock keeping unit"), barcode: z.string().optional().describe("Product barcode/UPC"), description: z.string().optional().describe("Product description"), weight: z.number().optional().describe("Weight in ounces"), length: z.number().optional().describe("Length in inches"), width: z.number().optional().describe("Width in inches"), height: z.number().optional().describe("Height in inches"), value: z.number().optional().describe("Declared value of the product") }, handler: async ({ productId, ...productData }) => { try { const updatedProduct = await shipbobClient.updateProduct(productId, productData); return { content: [{ type: "text", text: `Product updated successfully: ${JSON.stringify(updatedProduct, null, 2)}` }] }; } catch (error) { return { content: [{ type: "text", text: `Error updating product: ${error.message}` }], isError: true }; } } }
- src/api-client.js:67-69 (helper)Helper method in ShipBobClient that performs the actual PUT request to the ShipBob API /products/{id} endpoint, called by the tool handler.async updateProduct(id, productData) { return this.request('PUT', `/products/${id}`, productData); }