@spryker-sdk/spryker-mcp-server
Version:
AI-powered e-commerce server that enables intelligent shopping assistants for Spryker Commerce OS platforms
97 lines • 4.41 kB
JavaScript
/**
* Get Product Tool
*
* Retrieves detailed information about a specific product by SKU
*/
import { z } from 'zod';
import { zodToJsonSchema } from 'zod-to-json-schema';
import { ApiError, SprykerApiService } from '../services/spryker-api.js';
import { logger } from '../utils/logger.js';
const GetProductSchema = z.object({
sku: z.string().describe('Product Abstract SKU to retrieve'),
});
async function getProduct(args) {
const apiService = SprykerApiService.getInstance();
try {
logger.info('Retrieving product details', { sku: args.sku });
// Get abstract product details
const response = await apiService.get(`abstract-products/${args.sku}?include=abstract-product-image-sets,abstract-product-availabilities,abstract-product-prices,category-nodes`);
const product = response.data.data;
const included = response.data.included || [];
// Extract related data from included
const images = included.filter(item => item.type === 'abstract-product-image-sets');
const availability = included.filter(item => item.type === 'abstract-product-availabilities');
const prices = included.filter(item => item.type === 'abstract-product-prices');
const categories = included.filter(item => item.type === 'category-nodes');
return {
content: [
{
type: 'text',
text: JSON.stringify({
success: response.status === 200,
message: 'Product retrieved successfully',
product: {
sku: product.attributes.sku,
name: product.attributes.name,
description: product.attributes.description,
attributes: product.attributes.attributes,
metaTitle: product.attributes.metaTitle,
metaKeywords: product.attributes.metaKeywords,
metaDescription: product.attributes.metaDescription,
superAttributes: product.attributes.superAttributesDefinition,
attributeNames: product.attributes.attributeNames,
attributeMap: product.attributes.attributeMap,
url: product.attributes.url,
},
images: images.map(img => ({
id: img.id,
attributes: img.attributes,
})),
availability: availability.map(avail => ({
id: avail.id,
attributes: avail.attributes,
})),
prices: prices.map(price => ({
id: price.id,
attributes: price.attributes,
})),
categories: categories.map(cat => ({
id: cat.id,
attributes: cat.attributes,
})),
}, null, 2),
},
],
};
}
catch (error) {
logger.error('Get product failed', error);
return {
content: [
{
type: 'text',
text: JSON.stringify({
success: false,
error: 'Failed to retrieve product',
message: error instanceof Error
? error.message
: 'Unknown error occurred',
responseData: error instanceof ApiError ? error.responseData : [],
sku: args.sku,
}, null, 2),
},
],
isError: true,
};
}
}
export const getProductTool = {
name: 'get-product',
description: 'Get detailed abstract product information by SKU including attributes, concrete products(to add to cart), images, pricing, and availability.',
inputSchema: zodToJsonSchema(GetProductSchema),
handler: async (args) => {
const validatedArgs = GetProductSchema.parse(args);
return await getProduct(validatedArgs);
},
};
//# sourceMappingURL=get-product.js.map