PluginBench
MCP Server
Maintained
MIT

io.github.kiwoongeom/gmc-mcp MCP Server

io.github.kiwoongeom/gmc-mcp

126-tool MCP server for Google Merchant Center Merchant API v1—manage products, inventory, feeds, reports, and accounts from Claude.

What is the io.github.kiwoongeom/gmc-mcp MCP server?

The gmc-mcp server is a self-hosted MCP for Google Merchant Center built on Merchant API v1, exposing 126 tools across 19 modules. It enables natural-language automation of GMC workflows—product management, inventory, feeds, reports, promotions, accounts, and more—with audit logging, dry-run safety, and rollback capabilities.

gmc-mcp lets you manage Google Merchant Center feeds, products, inventory, and account settings through Claude or any MCP client. With 126 tools covering products, inventory, reports, promotions, accounts, regions, feeds, return policies, and more, you can query disapproved products, bulk-update prices, analyze performance reports, manage users and shipping settings, and roll back changes via audit logs. Built on the future-proof Merchant API v1 (not the deprecated Content API v2.1), MIT-licensed, pip-installable, and safe by default with append-only audit logging and dry-run mode.

How to install io.github.kiwoongeom/gmc-mcp

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
Environment / auth
  • GMC_ACCOUNT_ID
    required

    Your 10-digit Google Merchant Center account ID (top-right of merchants.google.com).

  • GMC_SERVICE_ACCOUNT_KEY
    secret

    Absolute path to a Google Cloud service-account JSON key file. The service account must be added as Admin in Merchant Center.

  • GMC_OAUTH_TOKEN
    secret

    Absolute path to an OAuth user-token JSON file produced by `gmc-mcp auth-init`. Use this OR GMC_SERVICE_ACCOUNT_KEY.

  • GMC_SUBACCOUNT_ID

    Optional sub-account ID when operating an MCA (Multi-Client Account).

  • GMC_DRY_RUN

    When 'true', writes are logged to the audit log only (no actual API calls).

  • GMC_LOG_LEVEL

    Log verbosity: DEBUG / INFO / WARNING / ERROR.

~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "gmc-mcp": {
      "command": "uvx",
      "args": [
        "gmc-mcp"
      ],
      "env": {
        "GMC_ACCOUNT_ID": "<YOUR_GMC_ACCOUNT_ID>",
        "GMC_SERVICE_ACCOUNT_KEY": "<YOUR_GMC_SERVICE_ACCOUNT_KEY>",
        "GMC_OAUTH_TOKEN": "<YOUR_GMC_OAUTH_TOKEN>",
        "GMC_SUBACCOUNT_ID": "<YOUR_GMC_SUBACCOUNT_ID>",
        "GMC_DRY_RUN": "<YOUR_GMC_DRY_RUN>",
        "GMC_LOG_LEVEL": "<YOUR_GMC_LOG_LEVEL>"
      }
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • gmc_list_products — List products in the Merchant Center feed
  • gmc_get_product — Retrieve a specific product by ID
  • gmc_insert_product — Add a new product to the feed
  • gmc_update_product — Update an existing product
  • gmc_delete_product — Delete a product from the feed
  • gmc_bulk_delete_products — Delete multiple products at once
  • gmc_list_disapproved_products — List all disapproved products with issue codes
  • gmc_update_regional_inventory — Update inventory for a specific region
  • gmc_update_local_inventory — Update inventory for a specific location
  • gmc_list_regional_inventories — List regional inventory settings
  • gmc_list_local_inventories — List local inventory settings
  • gmc_list_account_issues — List all account-level issues
  • gmc_get_product_status — Get approval status and issues for a product
  • gmc_summarize_product_issues — Summarize product issues by category
  • gmc_query_report — Query reports using SQL-like syntax
  • gmc_product_performance — Get product performance metrics
  • gmc_price_competitiveness — Compare prices against market benchmarks
  • gmc_best_sellers — Identify best-selling products
  • gmc_zero_click_products — Find products with impressions but no clicks
  • gmc_revenue_by_brand — Analyze revenue by brand

Use cases

  • Bulk update product prices or availability across multiple SKUs and regions
  • Query and analyze product performance, price competitiveness, and best-sellers using SQL-like reports
  • Identify and fix disapproved products by issue code, then verify corrections
  • Manage users, shipping settings, return policies, and account configuration programmatically
  • Roll back accidental changes using audit log IDs with full before/after snapshots

io.github.kiwoongeom/gmc-mcp MCP server FAQ

What is gmc-mcp?

gmc-mcp is an open-source MCP server for Google Merchant Center built on Merchant API v1. It exposes 126 tools for managing products, inventory, feeds, reports, promotions, accounts, and more—all accessible from Claude or any MCP-compatible client.

Is it free?

Yes. gmc-mcp is MIT-licensed and open-source. You only pay for Google Cloud resources (Merchant API calls are free tier eligible for most use cases).

How do I install it in Claude Desktop?

Install via pip (`pip install gmc-mcp`), set up a Google service account with Merchant API access, then add the server to your Claude Desktop config at `%APPDATA%/Claude/claude_desktop_config.json` with the `gmc-mcp run` command and your GMC account ID and service account key path.

What authentication does it support?

Both service account (default, recommended for automation) and OAuth user authentication. Service account credentials never leave your machine; they're stored locally and used only for API calls.

What makes this better than the deprecated Content API option?

gmc-mcp uses Merchant API v1 (future-proof, Google's current standard), includes 126 tools vs. 34 in older alternatives, has MIT licensing, is on PyPI for easy install, and includes audit logging, dry-run mode, and rollback safety.

Can I use it with multi-account setups (MCA)?

Yes. Set `GMC_SUBACCOUNT_ID` to target a specific sub-account, and use the MCA tools (`gmc_list_relationships`, `gmc_create_aggregation`, etc.) to manage multi-account hierarchies.

README (reference)

Source of truth, from the repository.

<!-- mcp-name: io.github.kiwoongeom/gmc-mcp -->

Google Merchant Center MCP (gmc-mcp)

PyPI Downloads Downloads/month GitHub stars CI Python License: MIT Ruff

MCP server for Google Merchant Center, built on Merchant API v1. 126 tools, MIT-licensed, pip install-able. Drive your Google Shopping feed, products, inventory, Reports, promotions, returns, and account configuration in natural language from Claude Desktop, Claude Code, or any MCP-compatible client.

Where this fits in the GMC + MCP landscape

OptionTypeAPILicenseInstallTools
Adzviser / Catchr / Windsor.ai / PipedreamPaid hosted SaaSvariesproprietarysign-upvaries
archpeng/GMC-mcp-serverSelf-hostedContent API v2.1 (deprecated 2026-08)none declaredgit clone34
gmc-mcp (this package)Self-hostedMerchant API v1 (future-proof)MITpip install gmc-mcp126

Pick this if you want: future-proof API, an actual OSS license, PyPI install, a larger toolset, audit log + rollback + dry-run safety, and credentials that never leave your machine.

Built on Merchant API v1 (replaces Content API for Shopping; v1beta was discontinued 2026-02-28). Safe by default: every write is recorded to an append-only audit log with before snapshots, dry-run is one toggle away, and destructive bulk operations require an explicit confirm parameter.

Why this exists

Google Merchant Center (GMC) powers Google Shopping listings, Free Listings, Shopping Ads, Buy on Google checkout, YouTube Shopping, and more. Managing a feed of thousands of products through the GMC web UI is tedious, and writing one-off Python scripts against the Merchant API REST endpoints is slow.

There are existing MCP services for GMC, but they fit different niches:

  • Paid hosted SaaS (Adzviser, Catchr, Windsor.ai, Pipedream) — your data is proxied through their servers; monthly subscription.
  • archpeng/GMC-mcp-server — earliest self-hosted Python option (Feb 2026), but built on the deprecated Content API v2.1 which Google retires in August 2026, has no license declared, and isn't on PyPI.

gmc-mcp was built to fill the gap: a self-hosted package on the new Merchant API v1, MIT-licensed, on PyPI, with audit/rollback/dry-run safety and 126 tools across 19 modules.

The package gives Claude (or any MCP client) 126 tools that map directly onto the Merchant API v1 surface, so you can do things like:

  • "Show me every disapproved product, grouped by issue code."
  • "Bump US prices 5% on these 40 SKUs."
  • "Which products had impressions but zero clicks last week?"
  • "Roll back audit ID 8fc8dc42… — that update broke something."
  • "Compare this Shopify CSV against my GMC feed; what's missing?"

What's exposed

126 tools across 19 modules + 4 meta tools.

ModuleTools
productsgmc_list_products, gmc_get_product, gmc_insert_product, gmc_update_product, gmc_delete_product, gmc_bulk_delete_products, gmc_list_disapproved_products
inventorygmc_update_regional_inventory, gmc_update_local_inventory, gmc_list_regional_inventories, gmc_list_local_inventories
issuesgmc_list_account_issues, gmc_get_product_status, gmc_summarize_product_issues
reportsgmc_query_report, gmc_product_performance, gmc_price_competitiveness, gmc_best_sellers, gmc_zero_click_products, gmc_revenue_by_brand, gmc_category_performance, gmc_competitive_visibility_top_merchants, gmc_price_insights, gmc_demoted_products
promotionsgmc_list_promotions, gmc_get_promotion, gmc_insert_promotion
accountsgmc_get_account, gmc_get_business_info, gmc_update_business_info, gmc_list_users, gmc_add_user, gmc_remove_user, gmc_get_shipping_settings, gmc_update_shipping_settings, gmc_list_programs, gmc_request_program_review, gmc_get_program_review
regionsgmc_list_regions, gmc_get_region, gmc_create_region, gmc_update_region, gmc_delete_region
notificationsgmc_list_subscriptions, gmc_subscribe, gmc_unsubscribe
feedsgmc_list_datasources, gmc_get_datasource, gmc_create_supplemental_feed, gmc_create_primary_feed, gmc_delete_datasource, gmc_fetch_datasource
return_policiesgmc_list_return_policies, gmc_get_return_policy, gmc_create_return_policy, gmc_update_return_policy, gmc_delete_return_policy
homepagegmc_get_homepage, gmc_update_homepage, gmc_claim_homepage, gmc_unclaim_homepage
account_configgmc_get_business_identity, gmc_update_business_identity, gmc_get_checkout_settings, gmc_create_checkout_settings, gmc_update_checkout_settings, gmc_delete_checkout_settings, gmc_get_automatic_improvements, gmc_update_automatic_improvements, gmc_get_autofeed_settings, gmc_update_autofeed_settings, gmc_get_account_tax, gmc_update_account_tax, gmc_get_email_preferences, gmc_update_email_preferences, gmc_get_latest_tos, gmc_list_tos_agreement_states, gmc_accept_tos
quotasgmc_list_quotas
reviewsgmc_list_merchant_reviews, gmc_get_merchant_review, gmc_insert_merchant_review, gmc_delete_merchant_review, gmc_list_product_reviews, gmc_get_product_review, gmc_insert_product_review, gmc_delete_product_review
conversionsgmc_list_conversion_sources, gmc_get_conversion_source, gmc_create_conversion_source, gmc_update_conversion_source, gmc_delete_conversion_source, gmc_undelete_conversion_source
omnichannelgmc_list_omnichannel_settings, gmc_get_omnichannel_settings, gmc_create_omnichannel_settings, gmc_update_omnichannel_settings, gmc_request_inventory_verification, gmc_link_gbp_account, gmc_list_gbp_accounts
lfpgmc_lfp_list_stores, gmc_lfp_get_store, gmc_lfp_insert_store, gmc_lfp_delete_store, gmc_lfp_insert_inventory, gmc_lfp_insert_sale, gmc_lfp_get_merchant_state
mcagmc_list_relationships, gmc_get_relationship, gmc_update_relationship, gmc_create_aggregation, gmc_delete_aggregation, gmc_list_account_services, gmc_propose_account_service, gmc_approve_account_service, gmc_reject_account_service
bulkgmc_bulk_update_regional_prices, gmc_bulk_set_availability
diagnosticsgmc_health_check, gmc_rollback, gmc_export_all, gmc_diff_with_shopify
metagmc_describe_server, gmc_audit_lookup, gmc_audit_tail, gmc_set_dry_run

CLI also exposes: gmc-mcp run, auth-init, register-gcp, webhook, describe, version.

Install

pip install gmc-mcp

For development:

git clone https://github.com/kiwoongeom/gmc-mcp
cd gmc-mcp
pip install -e ".[dev,test]"
pre-commit install

Quick start

1. Enable the Merchant API and create a service account

  1. console.cloud.google.com → create / pick a project.
  2. APIs & Services → Library → enable Merchant API.
  3. IAM & Admin → Service Accounts → Create service account named gmc-mcp.
  4. Open the new service account → Keys → Add key → Create new key → JSON. Save it somewhere safe.

2. Add the service account to your Merchant Center

  1. merchants.google.com → top-right gear → Account access → People.
  2. Add user → enter the gmc-mcp@PROJECT.iam.gserviceaccount.com email → grant Admin.
  3. Note the 10-digit Merchant Center ID in the top-right.

3. Configure

cp .env.example .env
# edit:
#   GMC_ACCOUNT_ID=1234567890
#   GMC_SERVICE_ACCOUNT_KEY=/abs/path/to/service-account.json

4. One-time GCP registration

Required before any v1 Merchant API call works for a new project.

gmc-mcp register-gcp --developer-email you@example.com

5. Smoke-test

gmc-mcp describe              # prints the resolved config
python examples/quickstart.py  # makes one read against the Merchant API

6. Wire into Claude

Drop this into %APPDATA%/Claude/claude_desktop_config.json (Desktop) or ~/.claude/settings.json (Code):

{
  "mcpServers": {
    "gmc": {
      "command": "gmc-mcp",
      "args": ["run"],
      "env": {
        "GMC_ACCOUNT_ID": "1234567890",
        "GMC_SERVICE_ACCOUNT_KEY": "/abs/path/to/service-account.json"
      }
    }
  }
}

Restart Claude. Ask: "What account am I connected to?" — it should call gmc_describe_server.

OAuth instead of a service account

For acting on behalf of an end user (e.g. multi-tenant SaaS):

# 1. In GCP, create OAuth client credentials (type: Desktop), download client_secret.json.
gmc-mcp auth-init --client-secrets ./client_secret.json
# follow the browser flow; a token JSON is saved to secrets/oauth-token.json.

# 2. Use it
export GMC_OAUTH_TOKEN=./secrets/oauth-token.json
gmc-mcp run

Transports

gmc-mcp run                              # stdio (Claude Desktop default)
gmc-mcp run --transport sse --port 8000  # SSE / HTTP (remote, Docker, hosted)

Or via Docker:

docker build -t gmc-mcp .
docker run --rm -p 8000:8000 \
    -e GMC_ACCOUNT_ID=1234567890 \
    -v $PWD/secrets:/secrets \
    -e GMC_SERVICE_ACCOUNT_KEY=/secrets/service-account.json \
    gmc-mcp

Audit log + rollback

Every write logs a JSONL entry to GMC_AUDIT_LOG (default: ./logs/audit.jsonl). Each entry contains:

  • audit_id — UUID for lookup
  • op, method, url, request_body, response_status, response_body
  • before — pre-write snapshot when the tool fetched it (used by update_* and delete_*)
  • dry_run — whether the request was actually sent

Inspect from inside Claude:

> Show me my last 5 GMC writes.
[gmc_audit_tail(limit=5) → ...]

> Look up audit ID abc123.
[gmc_audit_lookup(audit_id="abc123") → ...]

> Roll back audit ID abc123, that update was wrong.
[gmc_rollback(audit_id="abc123", confirm="ROLLBACK") → ...]

Dry-run

Two ways to enable:

GMC_DRY_RUN=true gmc-mcp run
> Set dry-run on and update the price of SKU1 to $19.99.
[gmc_set_dry_run(enabled=True) → ok]
[gmc_update_regional_inventory(...) → {"_dry_run": true, ...}]

Reads always go through; only writes are skipped.

Reports query examples

Paste into gmc_query_report:

-- Top 50 by clicks last 7 days
SELECT offer_id, title, clicks, impressions, ctr
FROM product_performance_view
WHERE date BETWEEN '2026-04-23' AND '2026-04-30'
ORDER BY clicks DESC LIMIT 50

-- Disapproved products with reason codes
SELECT id, offer_id, title, item_issues
FROM product_view
WHERE aggregated_reporting_context_status = 'NOT_ELIGIBLE_OR_DISAPPROVED'

-- You're priced higher than the benchmark
SELECT offer_id, title, price, benchmark_price
FROM price_competitiveness_product_view
WHERE price > benchmark_price LIMIT 100

Configuration reference

All config is via env vars (or .env). CLI flags --transport, --host, --port, --env override.

VarRequiredDefaultNotes
GMC_ACCOUNT_IDyes—10-digit Merchant Center ID
GMC_SERVICE_ACCOUNT_KEYone of—Path to service-account JSON
GMC_OAUTH_TOKENone of—Path to OAuth token JSON
GMC_SUBACCOUNT_IDno—When using an MCA
GMC_AUDIT_LOGno./logs/audit.jsonlAppend-only JSONL
GMC_PAGE_SIZEno100Default list page size
GMC_TIMEOUTno30Per-request seconds
GMC_DRY_RUNnofalseWrites go to audit only
GMC_LOG_LEVELnoINFODEBUG/INFO/WARNING/ERROR
GMC_TRANSPORTnostdiostdio or sse
GMC_HOSTno127.0.0.1SSE only
GMC_PORTno8000SSE only

Architecture

Claude (any MCP client)
    │  JSON-RPC over stdio or SSE
    ▼
gmc-mcp server  ──►  audit.jsonl
    │
    │  HTTP + Bearer token
    ▼
merchantapi.googleapis.com  ──►  Google Merchant Center
  • auth.py — ServiceAccountAuth and OAuthUserAuth share an Auth protocol.
  • client.py — single MerchantClient with retries (5x w/ jitter), pagination helper, and write-audit hook.
  • tools/*.py — each module exposes a register(mcp, client) that registers @mcp.tool() functions.
  • audit.py — append-only JSONL, lookup by ID, supports before snapshots.
  • cli.py — gmc-mcp run | auth-init | register-gcp | webhook | describe | version.

Testing

pytest                       # 100% offline; uses respx to mock HTTP
pytest --cov=gmc_mcp         # with coverage
ruff check src tests
mypy src/gmc_mcp

Roadmap

  • v0.3: webhook handler scaffolding (auto-respond to gmc_subscribe callbacks)
  • v0.3: native Merchant API v1 GA migration when Google releases it
  • v0.4: BigQuery export of Reports queries
  • v0.4: rule-based auto-fixers ("on disapproval, retry with corrected attribute")

Contributing

See CONTRIBUTING.md. PRs and issues welcome — this is the first open-source MCP for Google Merchant Center, so there's a lot of room for community input on which workflows deserve dedicated tools.

License

MIT — see LICENSE.


Search keywords: Google Merchant Center MCP, GMC MCP, Merchant API MCP, Google Shopping MCP, Shopping Ads MCP, free listings MCP, Claude Desktop Google Merchant Center, MCP for ecommerce, Shopify Google Merchant Center automation.

Related MCP servers

SISilica Core logo

Lightweight local retrieval for code and documents—search, read, and pack with zero network calls.

64
Python
MIT
View repository →

MCP server for NetIntel — DNS, SSL, WHOIS, email security, OSINT via x402 micropayments

0
JavaScript
View repository →

Access BoardGameGeek data, prices, and recommendations through AI assistants via MCP.

52
Go
MIT
View repository →

Submit and track stock/crypto direction predictions on LDBD's public leaderboard (ldbd.app).

0
JavaScript
MIT
View repository →

AI-native local business data. Find businesses, browse menus, check ratings, and place orders.

View repository →

SSH, SFTP, PTY shells, host-to-host copies and remote screenshots for AI agents. One Rust binary.

1
Rust
MIT
View repository →