UNPKG

amazon-mcp-server

Version:

Model Context Protocol server for Amazon Seller API

148 lines (147 loc) 6.01 kB
/** * Handles interactions with the Amazon Seller API Catalog Items endpoints */ export class AmazonCatalogApi { /** * Creates a new instance of the Amazon Catalog API * @param authManager Authentication manager * @param region API region (default: 'eu') * @param defaultMarketplaceIds Default marketplace IDs */ constructor(authManager, region = 'eu', defaultMarketplaceIds = []) { this.authManager = authManager; this.baseUrl = `https://sellingpartnerapi-${region}.amazon.com`; this.defaultMarketplaceIds = defaultMarketplaceIds; } /** * Searches for products by EAN code * @param ean EAN code * @param marketplaceIds Marketplace IDs (optional) * @param includedData Data to include in the response (optional) * @returns Promise resolving to product details */ async getProductByEan(ean, marketplaceIds, includedData) { return this.searchProducts({ identifiers: ean, identifiersType: 'EAN', marketplaceIds: marketplaceIds || this.defaultMarketplaceIds, includedData: includedData || ['summaries', 'attributes', 'images', 'productTypes'] }); } /** * Searches for products by ASIN * @param asin ASIN code * @param marketplaceIds Marketplace IDs (optional) * @param includedData Data to include in the response (optional) * @returns Promise resolving to product details */ async getProductByAsin(asin, marketplaceIds, includedData) { return this.searchProducts({ identifiers: asin, identifiersType: 'ASIN', marketplaceIds: marketplaceIds || this.defaultMarketplaceIds, includedData: includedData || ['summaries', 'attributes', 'images', 'productTypes'] }); } /** * Searches for products by SKU * @param sku SKU code * @param marketplaceIds Marketplace IDs (optional) * @param includedData Data to include in the response (optional) * @returns Promise resolving to product details */ async getProductBySku(sku, marketplaceIds, includedData) { return this.searchProducts({ identifiers: sku, identifiersType: 'SKU', marketplaceIds: marketplaceIds || this.defaultMarketplaceIds, includedData: includedData || ['summaries', 'attributes', 'images', 'productTypes'] }); } /** * Searches for products by keywords * @param keywords Search keywords * @param marketplaceIds Marketplace IDs (optional) * @param includedData Data to include in the response (optional) * @returns Promise resolving to product details */ async getProductsByKeywords(keywords, marketplaceIds, includedData) { return this.searchProducts({ keywords, marketplaceIds: marketplaceIds || this.defaultMarketplaceIds, includedData: includedData || ['summaries', 'attributes', 'images', 'productTypes'] }); } /** * Searches for products by brand name * @param brandNames Brand names * @param marketplaceIds Marketplace IDs (optional) * @param includedData Data to include in the response (optional) * @returns Promise resolving to product details */ async getProductsByBrand(brandNames, marketplaceIds, includedData) { return this.searchProducts({ brandNames, marketplaceIds: marketplaceIds || this.defaultMarketplaceIds, includedData: includedData || ['summaries', 'attributes', 'images', 'productTypes'] }); } /** * Searches for products with advanced parameters * @param params Search parameters * @returns Promise resolving to product details */ async searchProducts(params) { const { identifiers, identifiersType, keywords, brandNames, marketplaceIds, includedData = ['summaries'], pageSize, pageToken } = params; // Build query parameters const queryParams = { marketplaceIds: marketplaceIds.join(','), includedData: includedData.join(',') }; if (identifiers) { queryParams.identifiers = Array.isArray(identifiers) ? identifiers.join(',') : identifiers; if (identifiersType) { queryParams.identifiersType = identifiersType; } } if (keywords) { queryParams.keywords = keywords; } if (brandNames && brandNames.length > 0) { queryParams.brandNames = brandNames.join(','); } if (pageSize) { queryParams.pageSize = pageSize.toString(); } if (pageToken) { queryParams.pageToken = pageToken; } // Make the API request const endpoint = `${this.baseUrl}/catalog/2022-04-01/items`; const response = await this.authManager.makeAuthorizedRequest('GET', endpoint, queryParams); // Process and return the results const items = []; if (response.items && Array.isArray(response.items)) { return response.items; } return items; } /** * Gets detailed information for a specific ASIN * @param asin ASIN code * @param marketplaceIds Marketplace IDs (optional) * @param includedData Data to include in the response (optional) * @returns Promise resolving to product details */ async getItemDetails(asin, marketplaceIds, includedData) { const endpoint = `${this.baseUrl}/catalog/2022-04-01/items/${asin}`; const queryParams = { marketplaceIds: (marketplaceIds || this.defaultMarketplaceIds).join(','), includedData: (includedData || ['summaries', 'attributes', 'images', 'productTypes']).join(',') }; const response = await this.authManager.makeAuthorizedRequest('GET', endpoint, queryParams); return response; } }