amazon-mcp-server
Version:
Model Context Protocol server for Amazon Seller API
148 lines (147 loc) • 6.01 kB
JavaScript
/**
* 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;
}
}