# Changelog (https://sellersheetai.com/docs/changelog)

> What changed for MCP and API users, newest first.

## 2026-10-09 — One dropdown tool, and get_sheet_cell reads dropdowns

_changed_

`add_sheet_dropdown` is now the one tool for dropdowns: `values` for a fixed list, `source_range` for a list kept in other cells, `values: []` to remove one. Its reply echoes the rule as written. `add_sheet_data_validation` is removed; its old name answers with the replacement for 90 days. `get_sheet_cell` returns each cell's `dropdown` in the same shape and takes `include` to read only the groups you need (value, format, note, hyperlink, dropdown).

## 2026-10-07 — catalogItems_listCatalogCategories retired — Amazon shut down Catalog Items v0

_removed_

Amazon retired the Catalog Items v0 API for sellers on 2026-03-31, so `catalogItems_listCatalogCategories` answered 403 on every call. The tool is removed; its old name answers with the replacement for 90 days. Read the category hierarchy with `catalogItems_getCatalogItem` and `includedData: ["classifications"]`: each node carries `classificationId`, `displayName` and a nested `parent`.

## 2026-10-06 — Listings tools: the store ref alone names the marketplace; schema errors say why; Fill from JSON never waits on a schema

_changed_

The nine `listings_*` Publish Queue tools no longer take `countryCode` — the `&lt;store&gt;-&lt;CC&gt;` ref already names the marketplace, and a stray value is ignored (Ads tools keep it: it selects the Ads profile). A product type Amazon does not know now answers HTTP 400 naming the type; a schema Amazon could not serve answers 502 with `Retry-After` and is asked again on the next call (no five-minute lock-out). `listings_parse_payload`, `listings_parse_asin_to_cells` and the two bulk fetches parse from the JSON alone when the schema is unavailable and say so in `data.notes` / a row `note`; submit and validate still need the schema. Guide text served over MCP no longer carries sidebar-button tips.

## 2026-10-06 — Tool names: Amazon's name for an Amazon endpoint; SellerSheet workflows share the namespace

_action_

Tool names now follow two rules. A tool that wraps one Amazon endpoint takes Amazon's name even when it also polls that operation or downloads its document: `get_feed` → `feeds_getFeed`; `submit_feed` → `feeds_createFeed`; `sp_api_get_report` → `reports_getReport`; `get_data_kiosk_query` → `dataKiosk_getQuery`; `cancel_inbound_plan` → `fbaInbound_cancelInboundPlan`; `confirm_placement_option` → `fbaInbound_confirmPlacementOption`; `update_shipment_tracking_details` → `fbaInbound_updateShipmentTrackingDetails`; `vendor_retail_submit_acknowledgement` → `vendorOrders_submitAcknowledgement`; `vendor_retail_submit_invoices` → `vendorInvoices_submitInvoices`; `vendor_retail_submit_shipments` → `vendorShipments_SubmitShipments`; `vendor_retail_submit_shipment_confirmations` → `vendorShipments_SubmitShipmentConfirmations`. The unpolled single-item `vendorShipments_SubmitShipmentConfirmations` is retired; the polled batch now carries that name. A SellerSheet workflow over several operations keeps the namespace of the Amazon API area it serves and takes a snake_case tail — no Amazon operation name has an underscore, so the tail alone tells you it is SellerSheet's own: `create_and_publish_aplus` → `aplusContent_create_and_publish`; `list_aplus_sheet_rows` → `aplusContent_list_documents_detailed`; `build_listing_payload` → `listings_build_payload`; `parse_listing_amazon` → `listings_parse_payload`; `parse_asin_to_sheet_format` → `listings_parse_asin_to_cells`; `fetch_listing_attrs_by_asins` → `listings_fetch_attributes_by_asins`; `fetch_listing_attrs_by_skus` → `listings_fetch_attributes_by_skus`; `get_listing_attribute_guide` → `listings_get_attribute_guide`; `prepare_publish_queue_template` → `listings_prepare_publish_queue_template`; `submit_listing_feed` → `listings_submit_feed`; `submit_listing_payload` → `listings_submit_items`; `submit_listings_feed` → `listings_submit_feed_legacy`; `validate_listings` → `listings_validate_rows`; `poll_feed_status` → `listings_poll_feed_results`; `confirm_fba_placement` → `fbaInbound_confirm_plan_options`; `create_fba_packing_list` → `fbaInbound_create_packing_list`; `generate_shipment_transport_options` → `fbaInbound_generate_shipment_options`; `get_fba_plan_status` → `fbaInbound_get_plan_status`; `get_labels` → `fbaInbound_get_labels`; `orchestrate_fba_packing` → `fbaInbound_orchestrate_packing`; `sync_fba_shipment_status` → `fbaInbound_sync_shipment_status`; `create_sta_sheet` → `fbaInbound_create_sta_sheet`; `insights_report` → `customerFeedback_insights_report`; `insights_report_status` → `customerFeedback_insights_report_status`; `noon_download_export` → `noon_impex_download_export`; `noon_prepare_publish_queue_template` → `noon_content_prepare_publish_queue_template`; `noon_load_publish_queue_content` → `noon_content_load_publish_queue_content`. An old name answers with its replacement for 90 days. `listings_poll_feed_results` also changed shape: it takes the feed ids (and each row's SKUs cell) and returns the Submission Log cells for you to write — the server no longer reads or writes the sheet; likewise `listings_validate_rows` and `listings_submit_feed_legacy` return the row in `data.submissionLog` instead of appending it.

## 2026-10-06 — human_action is for you; a refused call is an error on every route

_changed_

A result's `human_action` now appears only when there is something you yourself must do (approve, pick an option, fix an input). What the AI should call next is in each tool's description instead, so those hints no longer go stale when a tool is renamed. Eleven more routes that used to answer a refused call as a success carrying an error message now answer with the proper status: an empty validation or a patch without patches (400), an unknown copy-generation or Buyer-insights job (400), an image that belongs to another store on confirm (403), and a job that could not be queued or a copy model that is not configured (502, nothing charged). The catalog on this page now carries each tool's toolset (Amazon SP-API, Amazon Ads, noon, Google Workspace, SellerSheet) and vendor family.

## 2026-10-06 — noon tools renamed to noon's own operation names

_action_

Every one-operation noon tool is now named `noon_&lt;section&gt;_&lt;Operation&gt;`, in the words noon's own API reference uses — the section from the page address and the operation exactly as noon writes it (for example `noon_stock_GetStock`). The three workflow tools keep their names. An old name answers with its replacement for 90 days. Renamed: `noon_barcode_sku_map` → `noon_catalog_BarcodeSkuMap`; `noon_batch_get_pricing` → `noon_pricing_BatchGetPricing`; `noon_batch_get_transfer_price` → `noon_xborder_pricing_BatchGetTransferPrice`; `noon_batch_upsert_pricing` → `noon_pricing_BatchUpsertPricing`; `noon_batch_upsert_product` → `noon_xborder_pricing_BatchUpsertProduct`; `noon_batch_upsert_transfer_price` → `noon_xborder_pricing_BatchUpsertTransferPrice`; `noon_child_sku_delete` → `noon_catalog_ChildSkuDelete`; `noon_create_barcode_import` → `noon_catalog_CreateBarcodeImport`; `noon_create_export` → `noon_impex_CreateExport`; `noon_generate_import_signed_url` → `noon_catalog_GenerateImportSignedUrl`; `noon_get_content` → `noon_content_GetContent`; `noon_get_export_category_list` → `noon_impex_GetExportCategoryList`; `noon_get_export_status` → `noon_impex_GetExportStatus`; `noon_get_import_status` → `noon_catalog_GetImportStatus`; `noon_get_product_offers` → `noon_offer_GetProductOffers`; `noon_get_stock` → `noon_stock_GetStock`; `noon_inbound_create_shipment` → `noon_inbound_CreateShipment`; `noon_inbound_delete_shipment_items` → `noon_inbound_DeleteShipmentItems`; `noon_inbound_get_shipment` → `noon_inbound_GetShipment`; `noon_inbound_get_slot_availability` → `noon_inbound_GetSlotAvailability`; `noon_inbound_list_eligible_items` → `noon_inbound_ListEligibleItems`; `noon_inbound_list_shipment_items` → `noon_inbound_ListShipmentItems`; `noon_inbound_list_shipments` → `noon_inbound_ListShipments`; `noon_inbound_schedule_shipment` → `noon_inbound_ScheduleShipment`; `noon_inbound_update_shipment` → `noon_inbound_UpdateShipment`; `noon_inbound_update_shipment_items` → `noon_inbound_UpdateShipmentItems`; `noon_inbound_update_shipment_status` → `noon_inbound_UpdateShipmentStatus`; `noon_list_categories` → `noon_content_ListCategories`; `noon_list_category_attributes` → `noon_content_ListCategoryAttributes`; `noon_list_return_references` → `noon_returns_ListReturnReferences`; `noon_list_warehouses` → `noon_warehouse_platform_ListWarehouses`; `noon_parent_sku_delete` → `noon_catalog_ParentSkuDelete`; `noon_update_stock` → `noon_stock_UpdateStock`; `noon_upsert_product` → `noon_content_UpsertProduct`.

## 2026-10-06 — Failed calls are reported as errors; an invalid key is refused with 401

_changed_

A call that could not be carried out — a noon outage, a missing argument, a product type Amazon does not know — now comes back as a tool error instead of a normal result that only said so in its text, and Amazon's full error list comes with it. An API key that was deleted is refused with HTTP 401, so your client asks you to reconnect instead of failing on every call. Results are sent as compact JSON, which uses fewer tokens.

## 2026-09-29 — Three narrow Ads writes: campaign budget, campaign state, target bid

_new_

`ads_update_campaign_budget`, `ads_update_campaign_state` and `ads_update_target_bid` change one thing on one campaign or target, under the same names Amazon Ads' own MCP uses. Use them for the three changes sellers make most; the general update tools still cover everything else.

## 2026-09-29 — SP-API tools renamed to Amazon's Selling Partner connector names

_action_

Every one-operation SP-API tool is now named `&lt;namespace&gt;_&lt;operationId&gt;`, the same names Amazon's own Selling Partner connector uses (for example `fbaInbound_createInboundPlan`). Workflow tools keep their names. An old name answers with its replacement for 90 days. Renamed: `cancel_data_kiosk_query` → `dataKiosk_cancelQuery`; `cancel_feed` → `feeds_cancelFeed`; `cancel_fulfillment_order` → `fbaOutbound_cancelFulfillmentOrder`; `cancel_self_ship_appointment` → `fbaInbound_cancelSelfShipAppointment`; `check_listing_restrictions` → `listings_getListingsRestrictions`; `confirm_delivery_window_options` → `fbaInbound_confirmDeliveryWindowOptions`; `confirm_packing_option` → `fbaInbound_confirmPackingOption`; `confirm_shipment_content_update_preview` → `fbaInbound_confirmShipmentContentUpdatePreview`; `confirm_transportation_options` → `fbaInbound_confirmTransportationOptions`; `create_data_kiosk_query` → `dataKiosk_createQuery`; `create_fulfillment_order` → `fbaOutbound_createFulfillmentOrder`; `create_fulfillment_return` → `fbaOutbound_createFulfillmentReturn`; `create_inbound_plan` → `fbaInbound_createInboundPlan`; `create_marketplace_item_labels` → `fbaInbound_createMarketplaceItemLabels`; `create_solicitation` → `solicitations_createProductReviewAndSellerFeedbackSolicitation`; `delete_listing` → `listings_deleteListingsItem`; `delivery_offers` → `fbaOutbound_deliveryOffers`; `estimate_fees_batch` → `productFees_getMyFeesEstimates`; `estimate_fees_for_asin` → `productFees_getMyFeesEstimateForASIN`; `estimate_fees_for_sku` → `productFees_getMyFeesEstimateForSKU`; `generate_delivery_window_options` → `fbaInbound_generateDeliveryWindowOptions`; `generate_packing_options` → `fbaInbound_generatePackingOptions`; `generate_placement_options` → `fbaInbound_generatePlacementOptions`; `generate_self_ship_appointment_slots` → `fbaInbound_generateSelfShipAppointmentSlots`; `generate_shipment_content_update_previews` → `fbaInbound_generateShipmentContentUpdatePreviews`; `generate_transportation_options` → `fbaInbound_generateTransportationOptions`; `get_browse_node_return_topics` → `customerFeedback_getBrowseNodeReturnTopics`; `get_browse_node_return_trends` → `customerFeedback_getBrowseNodeReturnTrends`; `get_browse_node_review_topics` → `customerFeedback_getBrowseNodeReviewTopics`; `get_browse_node_review_trends` → `customerFeedback_getBrowseNodeReviewTrends`; `get_catalog_item` → `catalogItems_getCatalogItem`; `get_competitive_pricing` → `productPricing_getCompetitivePricing`; `get_competitive_summary` → `productPricing_getCompetitiveSummary`; `get_content_document` → `aplusContent_getContentDocument`; `get_data_kiosk_document` → `dataKiosk_getDocument`; `get_data_kiosk_queries` → `dataKiosk_getQueries`; `get_delivery_challan_document` → `fbaInbound_getDeliveryChallanDocument`; `get_feature_inventory` → `fbaOutbound_getFeatureInventory`; `get_feature_sku` → `fbaOutbound_getFeatureSKU`; `get_featured_offer_expected_price` → `productPricing_getFeaturedOfferExpectedPriceBatch`; `get_features` → `fbaOutbound_getFeatures`; `get_feeds` → `feeds_getFeeds`; `get_financial_events_for_order` → `finances_listFinancialEventsByOrderId`; `get_fulfillment_order` → `fbaOutbound_getFulfillmentOrder`; `get_fulfillment_preview` → `fbaOutbound_getFulfillmentPreview`; `get_inbound_operation_status` → `fbaInbound_getInboundOperationStatus`; `get_inbound_plan` → `fbaInbound_getInboundPlan`; `get_inventory_summaries` → `fbaInventory_getInventorySummaries`; `get_item_browse_node` → `customerFeedback_getItemBrowseNode`; `get_item_eligibility_preview` → `fbaInboundEligibility_getItemEligibilityPreview`; `get_item_offers` → `productPricing_getItemOffers`; `get_item_offers_batch` → `productPricing_getItemOffersBatch`; `get_item_review_topics` → `customerFeedback_getItemReviewTopics`; `get_item_review_trends` → `customerFeedback_getItemReviewTrends`; `get_listing` → `listings_getListingsItem`; `get_listing_offers` → `productPricing_getListingOffers`; `get_listing_offers_batch` → `productPricing_getListingOffersBatch`; `get_order` → `orders_getOrder`; `get_order_metrics` → `sales_getOrderMetrics`; `get_package_tracking_details` → `fbaOutbound_getPackageTrackingDetails`; `get_pricing` → `productPricing_getPricing`; `get_product_type` → `productTypeDefinitions_getDefinitionsProductType`; `get_self_ship_appointment_slots` → `fbaInbound_getSelfShipAppointmentSlots`; `get_selling_partner_metrics` → `replenishment_getSellingPartnerMetrics`; `get_shipment` → `fbaInbound_getShipment`; `get_shipment_content_update_preview` → `fbaInbound_getShipmentContentUpdatePreview`; `get_solicitation_actions` → `solicitations_getSolicitationActionsForOrder`; `list_all_fulfillment_orders` → `fbaOutbound_listAllFulfillmentOrders`; `list_catalog_categories` → `catalogItems_listCatalogCategories`; `list_content_document_asin_relations` → `aplusContent_listContentDocumentAsinRelations`; `list_delivery_window_options` → `fbaInbound_listDeliveryWindowOptions`; `list_financial_event_groups` → `finances_listFinancialEventGroups`; `list_financial_events` → `finances_listFinancialEvents`; `list_financial_events_by_group` → `finances_listFinancialEventsByGroupId`; `list_financial_transactions` → `finances_listTransactions`; `list_inbound_plan_boxes` → `fbaInbound_listInboundPlanBoxes`; `list_inbound_plan_items` → `fbaInbound_listInboundPlanItems`; `list_inbound_plan_pallets` → `fbaInbound_listInboundPlanPallets`; `list_inbound_plans` → `fbaInbound_listInboundPlans`; `list_item_compliance_details` → `fbaInbound_listItemComplianceDetails`; `list_offer_metrics` → `replenishment_listOfferMetrics`; `list_offers` → `replenishment_listOffers`; `list_packing_group_boxes` → `fbaInbound_listPackingGroupBoxes`; `list_packing_group_items` → `fbaInbound_listPackingGroupItems`; `list_packing_options` → `fbaInbound_listPackingOptions`; `list_placement_options` → `fbaInbound_listPlacementOptions`; `list_prep_details` → `fbaInbound_listPrepDetails`; `list_return_reason_codes` → `fbaOutbound_listReturnReasonCodes`; `list_shipment_boxes` → `fbaInbound_listShipmentBoxes`; `list_shipment_content_update_previews` → `fbaInbound_listShipmentContentUpdatePreviews`; `list_shipment_items` → `fbaInbound_listShipmentItems`; `list_shipment_pallets` → `fbaInbound_listShipmentPallets`; `list_transportation_options` → `fbaInbound_listTransportationOptions`; `patch_listing` → `listings_patchListingsItem`; `post_content_document_approval_submission` → `aplusContent_postContentDocumentApprovalSubmission`; `post_content_document_asin_relations` → `aplusContent_postContentDocumentAsinRelations`; `post_content_document_suspend_submission` → `aplusContent_postContentDocumentSuspendSubmission`; `put_listing` → `listings_putListingsItem`; `schedule_self_ship_appointment` → `fbaInbound_scheduleSelfShipAppointment`; `search_catalog_items` → `catalogItems_searchCatalogItems`; `search_content_documents` → `aplusContent_searchContentDocuments`; `search_content_publish_records` → `aplusContent_searchContentPublishRecords`; `search_listings_items` → `listings_searchListingsItems`; `search_orders` → `orders_searchOrders`; `search_product_types` → `productTypeDefinitions_searchDefinitionsProductTypes`; `set_packing_information` → `fbaInbound_setPackingInformation`; `set_prep_details` → `fbaInbound_setPrepDetails`; `sp_api_cancel_report` → `reports_cancelReport`; `sp_api_cancel_report_schedule` → `reports_cancelReportSchedule`; `sp_api_create_report` → `reports_createReport`; `sp_api_create_report_schedule` → `reports_createReportSchedule`; `sp_api_get_report_schedule` → `reports_getReportSchedule`; `sp_api_list_report_schedules` → `reports_getReportSchedules`; `sp_api_search_reports` → `reports_getReports`; `update_content_document` → `aplusContent_updateContentDocument`; `update_fulfillment_order` → `fbaOutbound_updateFulfillmentOrder`; `update_inbound_plan_name` → `fbaInbound_updateInboundPlanName`; `update_item_compliance_details` → `fbaInbound_updateItemComplianceDetails`; `update_shipment_name` → `fbaInbound_updateShipmentName`; `update_shipment_source_address` → `fbaInbound_updateShipmentSourceAddress`; `validate_content_document_asin_relations` → `aplusContent_validateContentDocumentAsinRelations`; `vendor_retail_get_purchase_order` → `vendorOrders_getPurchaseOrder`; `vendor_retail_get_purchase_orders` → `vendorOrders_getPurchaseOrders`; `vendor_retail_get_purchase_orders_status` → `vendorOrders_getPurchaseOrdersStatus`; `vendor_retail_get_shipment_details` → `vendorShipments_GetShipmentDetails`; `vendor_retail_get_shipment_labels` → `vendorShipments_GetShipmentLabels`; `vendor_retail_get_transaction` → `vendorTransactionStatus_getTransaction`; `vendor_retail_submit_shipment_confirmation` → `vendorShipments_SubmitShipmentConfirmations`.

## 2026-09-29 — Every Ads tool renamed to match Amazon's own operation names

_action_

Every Ads MCP tool is now named after the Amazon Advertising API operation it calls (`ads_` + the operation, or Amazon Ads' own MCP name where one wraps the same call) instead of a generic entity+action shape. A retired name still answers for 90 days with its replacement(s), then it is unknown — update any saved workflows now. v1 entities (each follows query/create/update/delete): `ads_campaigns`→`ads_query_campaign`, `ads_campaigns_create`→`ads_create_campaign`, `ads_campaigns_update`→`ads_update_campaign`, `ads_campaigns_delete`→`ads_delete_campaign`; `ads_ad_groups`→`ads_query_ad_group`, `ads_ad_groups_create`→`ads_create_ad_group`, `ads_ad_groups_update`→`ads_update_ad_group`, `ads_ad_groups_delete`→`ads_delete_ad_group`; `ads_ads`→`ads_query_ad`, `ads_ads_create`→`ads_create_ad`, `ads_ads_update`→`ads_update_ad`, `ads_ads_delete`→`ads_delete_ad`; `ads_targets`→`ads_query_target`, `ads_targets_create`→`ads_create_target`, `ads_targets_update`→`ads_update_target`, `ads_targets_delete`→`ads_delete_target`; `ads_ad_associations`→`ads_query_ad_association`, `ads_ad_associations_create`→`ads_create_ad_association`, `ads_ad_associations_update`→`ads_update_ad_association`, `ads_ad_associations_delete`→`ads_delete_ad_association`. Account &amp; admin: `ads_brand_home`→`ads_get_brands`; `ads_invoices`→`ads_list_invoices`, `ads_get_invoice`; `ads_localization`→`ads_get_localized_currencies`, `ads_get_localized_products`, `ads_get_localized_keywords`, `ads_get_localized_targeting_expression`; `ads_metadata`→`ads_product_metadata`; `ads_store_insights`→`ads_get_asin_engagement_for_store`, `ads_get_insights_for_store_api`; `ads_stores`→`ads_list_assets`; `ads_validation_configs`→`ads_get_campaigns_validation_configs`, `ads_get_targeting_clauses_validation_configs`; `ads_account`→`ads_list_ads_accounts`, `ads_get_ads_account`; `ads_account_create`→`ads_create_ads_account`; `ads_manager_accounts`→`ads_get_manager_accounts`; `ads_manager_accounts_create`→`ads_create_manager_account`; `ads_manager_accounts_associate`→`ads_associate_accounts`; `ads_manager_accounts_disassociate`→`ads_disassociate_accounts`; `ads_streams`→`ads_list_stream_subscriptions`, `ads_get_stream_subscription`; `ads_streams_create`→`ads_create_stream_subscription`; `ads_streams_update`→`ads_update_stream_subscription`. Budgets: `ads_budget_rules_recommendation`→`ads_get_budget_rules_recommendation`; `ads_sb_budget_recommendations`→`ads_sb_get_budget_recommendations`; `ads_sp_initial_budget_recommendation`→`ads_get_budget_recommendation`; `ads_budget_rules`→`ads_get_budget_rules_for_advertiser`, `ads_get_budget_rule_by_rule_id_for_campaigns`, `ads_get_campaigns_associated_with_budget_rule`, `ads_list_associated_budget_rules_for_campaigns`; `ads_budget_rules_create`→`ads_create_budget_rules_for_campaigns`; `ads_budget_rules_update`→`ads_update_budget_rules_for_campaigns`; `ads_budget_rules_associate`→`ads_create_associated_budget_rules_for_campaigns`; `ads_budget_rules_disassociate`→`ads_disassociate_associated_budget_rule_for_campaigns`; `ads_budget_usage`→`ads_campaigns_budget_usage`, `ads_portfolio_budget_usage`. Reports: `ads_create_report`→`ads_create_async_report`; `ads_get_report`→`ads_get_async_report` (the bare names are reserved for a future contract). SB/SD recommendations: `ads_sb_bid_recommendations`→`ads_get_bids_recommendations`; `ads_sb_keyword_recommendations`→`ads_get_keyword_recommendations`; `ads_sd_bid_recommendations`→`ads_get_target_bid_recommendations`; `ads_sd_budget_recommendations`→`ads_get_sd_budget_recommendations`; `ads_sd_targeting_recommendations`→`ads_get_target_recommendations`. SP analytics: `ads_sp_brand_metrics`→`ads_generate_brand_metrics_report`, `ads_get_brand_metrics_report`; `ads_sp_export`→`ads_campaign_export`, `ads_ad_group_export`, `ads_target_export`, `ads_ad_export`, `ads_get_export`; `ads_sp_history`→`ads_get_history`; `ads_sp_insights`→`ads_insights_get_audiences_overlapping_audiences`; `ads_sp_rule_events`→`ads_sp_get_all_rule_events`; `ads_sp_bid_rules`→`ads_search_optimization_rules`; `ads_sp_bid_rules_create`→`ads_sp_create_optimization_rules`; `ads_sp_bid_rules_update`→`ads_sp_update_optimization_rules`; `ads_sp_bid_rules_pause`→`ads_sp_update_optimization_rules` (send `status: PAUSED` yourself); `ads_sp_bid_rules_associate`→`ads_associate_optimization_rules_to_campaign`; `ads_sp_campaign_optimization`→`ads_get_optimization_rule_eligibility`, `ads_get_rule_notification`, `ads_get_campaign_optimization_rule`; `ads_sp_campaign_optimization_create`→`ads_create_optimization_rule`; `ads_sp_campaign_optimization_update`→`ads_update_optimization_rule`; `ads_sp_campaign_optimization_delete`→`ads_delete_campaign_optimization_rule`; `ads_sp_campaign_recommendations`→`ads_list_recommendations`; `ads_sp_campaign_recommendations_apply`→`ads_apply_recommendations`; `ads_sp_campaign_recommendations_update`→`ads_update_recommendation`. SP campaigns: `ads_sp_bid_recommendations`→`ads_get_theme_based_bid_recommendation_for_ad_group_v1`; `ads_sp_budget_recommendations`→`ads_sp_get_budget_recommendations`; `ads_sp_category_refinements`→`ads_get_refinements_for_category`; `ads_sp_category_suggestions`→`ads_get_category_recommendations_for_asins`; `ads_sp_product_suggestions`→`ads_sp_get_product_recommendations`; `ads_sp_recommendations`→`ads_get_ranked_keyword_recommendation`; `ads_sp_negative_brands`→`ads_get_negative_brands`, `ads_search_brands`; `ads_sp_portfolios`→`ads_list_portfolios`; `ads_sp_portfolios_create`→`ads_create_portfolio`; `ads_sp_portfolios_update`→`ads_update_portfolio`.

## 2026-09-10 — One Credits pool for every AI action; credits_quote; the model route is set on the Dashboard

_changed_

Images, listing copy, small text calls and Buyer insights are all paid from one prepaid Credits balance (1 credit = $1): an image costs 0.5 credits up to 1024 px and 1 above, listing copy 0.1 per language, a small text call 0.1, a Buyer insights report 0.5 — held before the call and refunded whenever it fails. New `credits_quote` returns the price of an action on your current model route before you run it, and `get_user_context.credits` carries the balance, the route and its rate card. The route itself is chosen once on the Dashboard and every surface follows it: `set_llm_route` and the per-call `route` argument are gone.

## 2026-08-07 — Ads entity management is now v1-only; 21 legacy tools retired

_changed_

Campaigns, ad groups, ads, and targets (keywords, product targets, and every negative flavor) are managed exclusively through the unified v1 tools — `ads_campaigns`, `ads_ad_groups`, `ads_ads`, `ads_targets` — one consistent shape across SP/SB/SD. The 21 per-product CRUD tools (`ads_sp_campaigns`, `ads_sb_keywords`, `ads_sd_targets`, …) are retired. `ads_sp_bulk_create` now takes a v1-native spec with strict validation: a malformed payload is rejected whole with the exact field path before anything is created, and duplicate campaign names or unresolvable ASINs reject the request before any mutation.

## 2026-08-06 — Budget tools: live usage, rules automation, smarter recommendations

_new_

Four new tools complete the Budgets family. `ads_budget_rules` automates daily-budget raises for SP/SB/SD — on a schedule, during Amazon shopping events, or while a performance metric beats a threshold. `ads_budget_rules_recommendation` lists upcoming events with a suggested increase, `ads_sb_budget_recommendations` adds SB missed-opportunity estimates, and `ads_sp_initial_budget_recommendation` suggests a starting budget before a campaign exists. Pair them with `ads_budget_usage` to see intraday consumption before touching any budget.

## 2026-08-05 — MCP SDK 2.0 & per-key scopes

_changed_

The server now speaks MCP protocol revisions 2025-11-25 and 2026-07-28. API keys carry their own scope — open or restricted store lists, plus SP/Ads read-vs-write — and `get_user_context` reports `scope_source` and `api_key_name` so your AI knows exactly what the acting key can do.

## 2026-08-02 — Store references now require a marketplace

_action_

Pass `MYSTORE-AE`, not `MYSTORE`. A bare store name is rejected — the error lists every ref that would have worked, so your AI self-corrects in one step. `get_user_context` returns ready-made `store_refs`; pass one verbatim. Stores whose every marketplace is inactive on your plan are refused with clear remedies instead of answering from frozen data.

## 2026-07-27 — Image Library

_new_

Browse confirmed and staged AI images per store at /studio/library — parent-SKU folders, version history, and inline assign-to-slot for staged drafts.

## 2026-07-26 — Generated images delivered via CDN

_changed_

`generate_image` / `edit_image` now deliver to `cdn.sellersheetai.com` and return a `cdn_url`. Google Drive delivery is retired. `store`, `sku` and `slot` are required so every image lands in your store's library.

## 2026-07-22 — noon.com toolset

_new_

36 tools for selling on noon (UAE, Saudi Arabia, Egypt): catalog & content, pricing, stock, FBN inbound shipments, reports and cross-border — the same natural-language workflow as Amazon.

## 2026-07-17 — SellerSheet Skills plugin

_new_

One plugin install for Claude Code and Codex registers the MCP server automatically (browser OAuth, no key) and adds nine production skills — sheet building, operator dashboards, report querying, listing images, Amazon Ads, Data Kiosk, and noon reports. `/plugin marketplace add sellersheetai/sellersheet-skills` — see the repo.

## 2026-06-25 — sync_listings removed

_removed_

Use `search_listings_items` + `get_listing` instead — same data, clearer semantics.