The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Google Merchant Center MCP listing page.
English | Русский
A1 Google Merchant Center MCP connects an AI app to your Google Merchant Center account. Find out why products are disapproved, inspect feeds and promotions, explore reports and market prices, then make deliberate changes to product data when you need to.
It works with the Merchant Center data behind Shopping listings: products, data sources, promotions and reports. Campaigns, budgets and bids belong to Google Ads and are outside this server.
Start with a read-only question:
Which products are disapproved, and what issues does Google report for each?
Connect the server · Explore use cases · Open technical documentation
You: Which products are disapproved, and what issues does Google report for each?
Assistant: Lists the affected products and explains the item-level issues that Merchant Center reports.
You: Show the current price and availability of product
SKU-123, then prepare an availability update toin_stock.Assistant: Shows the current product input, the API data source it belongs to and the exact change to make. It asks for confirmation before updating the live product input.
You: Confirm the update.
Assistant: Sends the update and explains that Merchant Center processes product data asynchronously. The processed product and its quality status can take several minutes to refresh.
You need Node.js 20+, a Google Merchant Center account and a Google Cloud project registered with Merchant Center. OAuth credentials are not required at install time — the server connects from the conversation, see Getting access.
In the app:
npx -y mcp-google-merchants@latest and the four environment variables below.| Variable | Value |
|---|---|
GOOGLE_MERCHANTS_CLIENT_ID | Your Google OAuth client ID |
GOOGLE_MERCHANTS_CLIENT_SECRET | Your Google OAuth client secret |
GOOGLE_MERCHANTS_REFRESH_TOKEN | Your Google OAuth refresh token |
GOOGLE_MERCHANTS_ACCOUNT_ID | Your Merchant Center account ID |
From the command line:
Check the connection:
The current official path is Settings → Extensions. For a custom desktop extension, open Advanced settings → Extension Developer → Install Extension…, select a .mcpb file and follow the prompts.
This repository currently publishes an npm stdio package and does not contain a .mcpb bundle. For Claude Desktop builds that still support local configuration, use the following JSON stdio configuration as a fallback:
In those builds, save it to ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows.
Add a user-level server to ~/.cursor/mcp.json on macOS/Linux or %USERPROFILE%\.cursor\mcp.json on Windows:
Run MCP: Open User Configuration from the Command Palette and add:
Check the server with MCP: List Servers.
SKU-123.Price comparisons and suggestions require the free Market Insights opt-in in Merchant Center. If the account has not opted in, the server explains why the report has no rows.
For any request that changes data, first ask the assistant to show the target account, data source and exact fields it plans to change.
Merchant Center keeps the incoming data and the resulting product status separate:
The server can read every listed source type. It can create API data sources and update product inputs only in an API data source; it cannot write into a file, interface or automatic feed. To find products by condition, use a report query: list_products itself does not provide server-side filtering.
| Operation | What happens | Confirmation boundary |
|---|---|---|
| Inspect accounts, products, feeds, promotions, reports, issues and quota use | Reads data from Merchant Center | Does not change Merchant Center |
| Create an API data source | Adds a source for product or promotion data | Changes the account |
| Update a product input | Changes selected product fields, such as price or availability | Changes live source data |
| Insert a product input | Replaces the complete input with the same ID in that API source; using a different source moves the product | Changes live source data |
| Re-fetch a file feed | Requests an out-of-schedule fetch of a file or Google Sheets feed | Starts asynchronous work at Google |
| Insert or update a promotion | Creates or changes a promotion | Changes live source data |
| Delete a product input | Removes the input from the selected data source | Destructive |
| Raw Merchant API request | Can access API methods without a dedicated tool | Potentially destructive |
The MCP client decides how it asks you to confirm write and destructive tools. The server marks its read-only, write and destructive operations so the client can present the right boundary.
The server uses the Google Merchant API and the OAuth scope https://www.googleapis.com/auth/content. There are two ways to hand it credentials, and the first one needs no configuration files.
Say "connect Google Merchant Center" and the assistant runs the flow with you:
setup_instructions prints the checklist: create or select a Google Cloud project, enable Merchant API, configure the consent screen and create a Desktop app OAuth client.set_client stores it owner-only. The secret never goes through the conversation.start_login returns a Google consent link. Open it on this machine and approve; the code comes back to a one-shot listener on 127.0.0.1 (PKCE), never through the chat.finish_login exchanges the code, saves the tokens to ~/.config/mcp-google-merchants/credentials.json (mode 0600) and verifies them with a real Merchant API call — so a project that is not registered with Merchant Center yet is caught right there.The tokens are re-read on every call, so the connection works immediately — no restart of the AI app. auth_status shows what is connected, logout revokes and deletes it. The Cloud-project registration below is still required: it is a Merchant Center step, not an OAuth one.
GOOGLE_MERCHANTS_ACCOUNT_ID.The one-time registration is available through the technical raw_request tool, but it is safer to follow Google’s guide if this is your first Merchant API setup. Google may take up to five minutes to accept calls after registration.
Treat the OAuth client secret and refresh token as passwords. They are kept in the MCP client configuration and can grant access to the Merchant Center account.
| Variable | Required | Description |
|---|---|---|
GOOGLE_MERCHANTS_CLIENT_ID | No* | OAuth 2.0 client ID. |
GOOGLE_MERCHANTS_CLIENT_SECRET | No* | OAuth 2.0 client secret. |
GOOGLE_MERCHANTS_REFRESH_TOKEN | No* | OAuth refresh token with the Merchant API scope. |
GOOGLE_MERCHANTS_ACCESS_TOKEN | No* | Short-lived access-token alternative to the three OAuth values above. |
GOOGLE_MERCHANTS_ACCOUNT_ID | No | Default Merchant Center account ID. Individual requests can select another accessible account. |
GOOGLE_MERCHANTS_OAUTH_PORT | No | Fixed loopback port for the in-chat login; useful over SSH port forwarding. |
GOOGLE_MERCHANTS_API_BASE | No | Merchant API base URL override. |
GOOGLE_MERCHANTS_TOKEN_URL | No | OAuth token endpoint override. |
GOOGLE_MERCHANTS_TIMEOUT_MS | No | Per-request timeout in milliseconds; default is 60000. |
GOOGLE_MERCHANTS_MAX_RETRIES | No | Maximum retry count for temporary failures; default is 3. |
* Use either the client ID, client secret and refresh token together, or a pre-minted access token. An access token usually expires in about one hour; a refresh token lets the server obtain a new access token when needed.
The server runs locally as a process started by your AI app. It sends Merchant Center requests to Google and refreshes OAuth access tokens through Google’s OAuth endpoint.
It sends anonymous usage telemetry to count active installations and tool demand: a random installation ID, package version, AI client and Node.js/operating-system versions, and the tool name. It never sends or stores OAuth tokens, Merchant Center data, tool arguments or prompts. Disable this telemetry for A1 MCP servers with:
list_method_quotas; Google’s daily counters reset at 12:00 UTC.429, the server follows Retry-After when provided and makes a limited number of retries. It does not replay a write after an uncertain network or server failure.list_product_issues works for standalone and sub-accounts, not advanced parent accounts.Found a bug or need a scenario? Create an issue or write in Telegram.
You made it to the end!