Skip to main content
Glama
A1-x-Tech

mcp-google-merchants

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GOOGLE_MERCHANTS_API_BASENoAPI root override.https://merchantapi.googleapis.com
GOOGLE_MERCHANTS_CLIENT_IDNoOAuth 2.0 client ID.
GOOGLE_MERCHANTS_TOKEN_URLNoOAuth token endpoint override.https://oauth2.googleapis.com/token
GOOGLE_MERCHANTS_ACCOUNT_IDNoDefault Merchant Center account ID; tools can override per call.
GOOGLE_MERCHANTS_TIMEOUT_MSNoPer-request timeout, ms.60000
GOOGLE_MERCHANTS_MAX_RETRIESNoRetries on transient errors.3
GOOGLE_MERCHANTS_ACCESS_TOKENNoPre-minted access token (~1h) — alternative to the three above.
GOOGLE_MERCHANTS_CLIENT_SECRETNoOAuth 2.0 client secret.
GOOGLE_MERCHANTS_REFRESH_TOKENNoOAuth refresh token (scope .../auth/content).

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_accountsA

Lists the Merchant Center accounts the authenticated user can access. Returns accounts[] (name, accountId, accountName, languageCode, timeZone, adultContent, testAccount) and nextPageToken. Use it first to discover the account ID the other tools need (or set GOOGLE_MERCHANTS_ACCOUNT_ID once). Optional filter uses the account filter syntax, e.g. accountName = "store".

get_accountA

Returns a single Merchant Center account: name (accounts/{id}), accountId, accountName, languageCode, timeZone, adultContent and testAccount. Useful to verify the configured account or inspect a sub-account.

get_homepageA

Returns the store homepage of an account: uri and claimed (whether the homepage is verified and claimed by the merchant — a prerequisite for serving offers). An unclaimed homepage is a common reason for account-level problems; claiming/unclaiming is not exposed as a tool (use raw_request POST accounts/v1/accounts/{a}/homepage:claim if you really need it).

get_shipping_settingsA

Returns the account-level shipping settings: services[] (delivery countries, delivery times, rate tables and carrier rates), warehouses[] and an etag. Read-only by design: the API's only write is shippingSettings:insert, a FULL REPLACE of every service — too dangerous for a tool; use raw_request if you really need it.

list_productsA

Lists the processed products of an account, as shown in Merchant Center. Each product has name (accounts/{a}/products/{contentLanguagefeedLabelofferId} — NO channel segment in v1), offerId, contentLanguage, feedLabel, dataSource, productAttributes (title, price, availability, ...), productStatus with itemLevelIssues, and base64EncodedName (use it when offerId contains URL-hostile characters like '/'). The list has no server-side filter — filter via search_reports on product_view. Recently inserted products appear only after async processing (minutes).

get_productA

Returns one processed product including productStatus.itemLevelIssues (code, severity, resolution, description) — the place to see why a product is disapproved. Identify the product either with product ("contentLanguagefeedLabelofferId", e.g. "enUSsku123", or the base64url base64EncodedName; legacy local products use a local~ prefix) or with the three components content_language + feed_label + offer_id. A product inserted moments ago may 404 until async processing finishes (minutes).

insert_product_inputA

Uploads (upserts) a product into an API data source: an existing input with the same contentLanguagefeedLabelofferId in that data source is fully replaced. Requires data_source (an API-type source — create one with create_data_source or in Merchant Center; file feeds cannot be written). Inserting with a different data source MOVES the product to it. Returns the ProductInput (name, product = the future processed name, base64EncodedProduct). Processing is async: the processed product shows up in get_product/list_products after several minutes, and data-quality problems surface later in productStatus.itemLevelIssues, not as API errors. Prices go in product_attributes as {"price": {"amountMicros": "9990000", "currencyCode": "USD"}} (1 unit = 1,000,000 micros).

update_product_inputA

Sparse-updates an existing product input — the cheap way to change price or availability without re-sending the whole product. data_source must be the source holding the input. update_mask is a comma-separated list of attribute paths (e.g. "productAttributes.price,productAttributes.availability"); when omitted, all populated fields of the request are applied. Returns the updated ProductInput; the processed product refreshes after async processing (minutes). To create a product or replace it wholesale use insert_product_input.

delete_product_inputA

Deletes a product input from a specific data source (data_source is required — the same product can exist in several sources, and only the targeted input is removed). product_input is "contentLanguagefeedLabelofferId" or the base64url name. Returns an empty object on success; the processed product disappears after async processing (minutes).

list_data_sourcesA

Lists the data sources of an account. Each has name (accounts/{a}/dataSources/{id}), dataSourceId, displayName, input (API | FILE | UI | AUTOFEED), exactly one type object (primaryProductDataSource, supplementalProductDataSource, promotionDataSource, ...) and fileInput for file feeds. Use it to find the API-type data source that insert_product_input / insert_promotion require as data_source.

get_data_sourceA

Returns one data source by its numeric ID (or full resource name): type, input (API/FILE/UI/AUTOFEED), feed configuration and fetch settings. Check input before calling fetch_data_source — only file-based feeds with fetch settings can be re-fetched.

create_data_sourceA

Creates an API (generic) data source — the target that insert_product_input / update_product_input / insert_promotion need as data_source. Only API sources can be created through the API (file, UI and autofeed sources are set up in Merchant Center). For product sources content_language and feed_label must be both set or both omitted; countries applies to primary sources only. A promotions source requires target_country and content_language. Returns the created DataSource with its dataSourceId.

fetch_data_sourceA

Triggers an immediate re-fetch (re-read) of a file-based feed outside its regular schedule. Works only for data sources with a file input and fetch settings (scheduled fetch or Google Sheets); calling it on an API-type source is an error. Returns an empty object on success — the fetch itself runs asynchronously on Google's side.

insert_promotionA

Creates or updates a promotion. Unlike product writes, the data source travels in the request BODY (the server assembles it). The promotion object requires promotionId, contentLanguage (ISO 639-1), targetCountry (CLDR, e.g. "US") and redemptionChannel (array with ONLINE and/or IN_STORE — at least one). Optional attributes carry longTitle, couponValueType, offerType, genericRedemptionCode, promotionEffectiveTimePeriod {startTime, endTime}, productApplicability, moneyOffAmount, percentOff, etc. Returns the Promotion incl. promotionStatus; approval happens asynchronously (check get_promotion later).

list_promotionsA

Lists the promotions of an account: promotions[] (name, promotionId, contentLanguage, targetCountry, redemptionChannel, attributes, promotionStatus with destination statuses and itemLevelIssues) and nextPageToken.

get_promotionA

Returns one promotion including promotionStatus (per-destination approval and itemLevelIssues) — the place to check whether a freshly inserted promotion was approved.

search_reportsA

Runs a Merchant Center Query Language (MCQL) query via reports:search. Tables: product_view, product_performance_view, price_competitiveness_product_view, price_insights_product_view, non_product_performance_view, best_sellers_product_cluster_view, best_sellers_brand_view, competitive_visibility_top_merchant_view, competitive_visibility_competitor_view, competitive_visibility_benchmark_view. Rules: field names are snake_case in the query but camelCase in the JSON response; no SELECT ; performance views require a WHERE date range, e.g. SELECT offer_id, clicks, impressions FROM product_performance_view WHERE date BETWEEN '2026-07-01' AND '2026-07-31' ORDER BY clicks DESC. price_ views require the Market Insights opt-in. Each result row has exactly one populated view object. This is also the way to FILTER products (product_view) — list_products has no filter.

price_competitivenessA

Convenience wrapper over a canned MCQL query on price_competitiveness_product_view: for each product, your price vs the market benchmark_price (aggregated from comparable offers across merchants) with report_country_code. A product priced above the benchmark is losing clicks to cheaper rivals. Requires the account to be opted into Market Insights (free, in Merchant Center settings) — otherwise rows are empty. Price amounts are micros (1,000,000 = 1 unit) and may arrive as strings (int64). Optional country narrows to one report country.

price_insightsA

Convenience wrapper over a canned MCQL query on price_insights_product_view: Google's suggested_price per product with the predicted change in impressions, clicks and conversions if you adopt it (predicted_*_change_fraction, e.g. 0.05 = +5%), plus an overall effectiveness bucket (LOW/MEDIUM/HIGH). Requires the Market Insights opt-in — otherwise rows are empty. Price amounts are micros and may arrive as strings (int64).

list_product_issuesA

Lists aggregate product statuses per reporting context and country (issueresolution sub-API): stats {active, pending, disapproved, expiring counts} plus itemLevelIssues[] with how many products each issue affects — the fastest way to see what is wrong with a feed at a glance. Works only for sub-accounts and standalone accounts, NOT for advanced (parent) accounts. The filter supports only reporting_context and country, e.g. reporting_context = "SHOPPING_ADS" AND country = "US". For a single product's issues use get_product (productStatus.itemLevelIssues).

list_method_quotasA

Shows the account's Merchant API usage vs limits per method group (quota sub-API): quotaGroups[] with name, quotaUsage, quotaLimit (per day), quotaMinuteLimit and methodDetails[] listing the methods in each group. Daily counters reset at 12:00 UTC — midday, not midnight. Use it to diagnose HTTP 429 RESOURCE_EXHAUSTED errors and to see how much headroom is left.

raw_requestA

Escape hatch to call any Merchant API v1 path directly, for endpoints without a dedicated tool (e.g. "accounts/v1/accounts/123/issues" or the one-time "accounts/v1/accounts/123/developerRegistration:registerGcp"). The path must include the sub-API prefix (accounts/v1, products/v1, datasources/v1, promotions/v1, reports/v1, issueresolution/v1, quota/v1, inventories/v1, ...). query adds URL query parameters (e.g. dataSource for productInputs writes, updateMask for PATCH); body is sent as JSON. Can create, modify and delete data — use the dedicated tools when one exists.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/A1-x-Tech/mcp-google-merchants'

If you have feedback or need assistance with the MCP directory API, please join our Discord server