Google E-commerce (GA4, Search Console, Merchant Center)
PYPI · GOOGLE-ECOMMERCE-MCP
Read-only GA4, Search Console, Merchant Center, Tag Manager, Indexing and PageSpeed for shops.
Available components
Last scanned (8 hours ago)
Scores higher than 89% of PyPI servers
Category Marketing and SEO
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 4 of 52 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to MoonEyes/google-ecommerce-mcp). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability65
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4572 tokens (~207/item across 22 items; 22 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management40
- Stability observed for 12 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 22 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 16 Oct 26 −2
- Stability: 0.37 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Schema quality: 120 → 207 ▼ functional
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Package version: 0.3.1 → 0.4.0 functional
- 15 Oct 26 +16
- Malware scan: unverified → pass ▲ security
- 14 Oct 26 +21
- Malware scan: pass → unverified ▼ security
- Injection markers: unverified → pass ▲ security
- Schema quality: pass → fail ▼ functional
- Tool coverage: unverified → 100 ▲ functional
- Stability: unverified → 0.33 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- 13 Oct 26 +26
- Malware scan: unverified → pass ▲ security
- Known CVEs: unverified → pass ▲ security
- Dependency health: unverified → 0.96 ▲ functional
- 12 Oct 26 −58
- Malware scan: pass → unverified ▼ security
- Known CVEs: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Dependency health: 0.96 → unverified ▼ functional
- First check of Schema quality: unverified functional
- Package version: 0.2.0 → 0.3.1 functional
- 4 Oct 26 82
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 16 Oct 2026 · Analysed pypi/google-ecommerce-mcp@0.4.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | pypi |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | MoonEyes/google-ecommerce-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/MoonEyes/google-ecommerce-mcp/.github/workflows/release.yml@refs/tags/v0.4.0 |
| Rekor log index | 3283884262 |
| Predicate type | PyPI publish attestation https://docs.pypi.org/attestations/publish/v1 |
| Subject digest | sha256:61a4036fc8850ce8bf35f3c1f774713d6c94ffda1a1ca5c8e23ad8ba4449501f |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 52 packages
| Packages resolved | 52 |
|---|---|
| Stale | 4 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
ads_overview Ads overview (all platforms) ~175
Google Ads, Meta and OpenAI Ads totals side by side for one period: spend, impressions, clicks, conversions and conversion value as reported by each platform, the platform's own ROAS, currency, attribution windows and date range. A platform not configured or failing gets its own block without blocking the others (partial). combined adds spends only when every currency is the same (else null with combined_reason; a platform without activity adds zeros and needs no currency) and computes ROAS as total value / total spend. Conversions overlap between platforms: their sum is not deduplicated (warning).
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | string | yes | Last day, YYYY-MM-DD, on or after start_date |
| start_date | string | yes | First day, YYYY-MM-DD (each platform counts in its own account timezone) |
No output schema declared.
No examples provided.
ga4_properties GA4 properties ~112
GA4 accounts and properties the authorized Google account can read (Admin API accountSummaries), so the assistant can find a property id itself and pass it as property_id to ga4_report or ga4_realtime. Returns {"properties": [{property_id, property_name, property_type, account_id, account_name, configured}], "configured_property_id"}. Needs the Google Analytics Admin API enabled; no extra OAuth scope.
| Name | Type | Req | Description |
|---|---|---|---|
| max_pages | integer | – | Pages of 200 accounts to read at most |
No output schema declared.
No examples provided.
ga4_realtime GA4 realtime ~142
GA4 realtime report for the last 30 minutes. Useful to check a tracking change, for example that one page view is counted once and not twice. Returns {"rows": [...], "row_count": n, "totals": {...}, "metrics": {...}}.
| Name | Type | Req | Description |
|---|---|---|---|
| dimensions | array | – | GA4 realtime dimensions, e.g. unifiedScreenName, country, deviceCategory |
| metrics | array | – | GA4 realtime metrics, e.g. activeUsers, screenPageViews, eventCount |
| property_id | string | – | Numeric GA4 property id, as listed by ga4_properties; empty uses the configured GA4_PROPERTY_ID |
No output schema declared.
No examples provided.
ga4_report GA4 report ~300
Run a Google Analytics 4 report (Data API runReport): traffic, conversions or revenue split by any dimensions over a date range. Returns the top rows ({"rows": [{dimension: value, metric: number}]}), "totals" over every row, "row_count" and "truncated", the unit and definition of each metric under "metrics", the currency, and a "date_range" resolved to calendar dates in the property's timezone with "data_complete". Use ga4_realtime for the last 30 minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| channel_group | string | – | Optional exact filter on sessionDefaultChannelGroup, e.g. 'Organic Search'; empty for all channels |
| dimensions | array | – | GA4 API dimension names, e.g. sessionDefaultChannelGroup, landingPage, sessionSource, yearMonth, itemName |
| end_date | string | – | YYYY-MM-DD, NdaysAgo, yesterday or today |
| limit | integer | – | Maximum rows returned (1 to 1000); totals always cover every row |
| metrics | array | – | GA4 API metric names, e.g. sessions, totalUsers, ecommercePurchases, purchaseRevenue, keyEvents |
| property_id | string | – | Numeric GA4 property id, as listed by ga4_properties; empty uses the configured GA4_PROPERTY_ID |
| start_date | string | – | YYYY-MM-DD, NdaysAgo, yesterday or today |
No output schema declared.
No examples provided.
gads_accounts Google Ads accounts ~98
Google Ads customer accounts the Google Ads token can read directly (customers:listAccessibleCustomers), with the configured GADS_CUSTOMER_ID and GADS_LOGIN_CUSTOMER_ID (manager account), to pick a customer_id for gads_performance or gads_query. Returns {"customers": [{"id"}], "configured_customer_id", "login_customer_id", "cached"} (cached: true when the list comes from the 5-minute discovery cache).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
gads_performance Google Ads performance ~297
Google Ads performance by account, campaign or ad group over a date range: spend, impressions, clicks, conversions, conversion value, CTR, CPC, CPA and ROAS, optionally split by date, device or network. Built from fixed aggregated GAQL templates (searchStream), highest spend first. Returns "rows", "totals" (ROAS = sum of values / sum of spends) with "totals_complete". start_date and end_date are required (empty -> invalid_dates), the "currency" (looked up when no row), a "date_range" in the account timezone with "data_complete", the unit and definition of each metric, and the "attribution" used.
| Name | Type | Req | Description |
|---|---|---|---|
| customer_id | string | – | Google Ads customer id (digits, dashes allowed), as listed by gads_accounts; empty uses the configured GADS_CUSTOMER_ID |
| end_date | string | – | Required: last day, YYYY-MM-DD (account timezone) |
| level | string | – | Row level: account, campaign or ad_group |
| limit | integer | – | Maximum rows returned (1 to 1000), highest spend first; totals cover up to 10,000 rows (see totals_complete) |
| segment | string | – | Optional split of each row: none, date, device or network |
| start_date | string | – | Required: first day, YYYY-MM-DD (account timezone) |
No output schema declared.
No examples provided.
gads_query Google Ads GAQL query ~560
Run a free read-only Google Ads Query Language (GAQL) SELECT on one customer (searchStream), for fields the fixed gads_performance templates do not cover. Refused without any network call unless it is a single SELECT with no ';' and no '--' or '/*' (refused even inside a string literal). The read is bounded: without LIMIT, LIMIT 10001 is added (before PARAMETERS); a larger LIMIT is lowered to 10001; the answer is capped at 20 MB. One SELECT and one FROM only, no JOIN, no backslash, ASCII only outside string literals. FROM and every dotted name prefix in SELECT, WHERE and ORDER BY (besides metrics and segments) must be a reporting resource: customer, campaign, campaign_budget, ad_group, ad_group_ad, ad_group_criterion, keyword_view, shopping_performance_view, product_group_view, asset_group, asset_group_listing_group_filter, asset_group_asset, asset, ad_group_ad_asset_view, campaign_criterion, geographic_view, gender_view, age_range_view, landing_page_view, expanded_landing_page_view, display_keyword_view, topic_view, bidding_strategy, conversion_action, location_view, distance_view, with customer.* limited to id, descriptive_name, currency_code, time_zone, status, manager, test_account and resource_name; anything else is refused with resource_not_allowed. Names exposing personal data (change_event, click_view, call_view, search term views, leads, user_*, payments_*, billing_*, customer_user_access, invoices, account links, placements...) are refused anywhere in the query with sensitive_resource. Setting GADS_ALLOW_SENSITIVE_QUERIES=1 in the server env lifts both lists (personal data possible). Rows are flattened to GAQL field names (campaign.name, metrics.clicks); micros fields are converted to currency units: *_micros renamed without the suffix (metrics.cost_micros -> metrics.cost), metrics.average_cpc, average_cpm, average_cost and cost_per_* kept under their name.
| Name | Type | Req | Description |
|---|---|---|---|
| customer_id | string | – | Google Ads customer id (digits, dashes allowed), as listed by gads_accounts; empty uses the configured GADS_CUSTOMER_ID |
| gaql | string | yes | One read-only GAQL statement starting with SELECT, e.g. SELECT campaign.name, metrics.clicks FROM campaign WHERE segments.date DURING LAST_7_DAYS; no ';', '--' or '/*' anywhere, even in a string |
| limit | integer | – | Maximum rows returned (1 to 1000); Google is asked for at most 10,001 rows (LIMIT added or lowered) |
No output schema declared.
No examples provided.
gsc_inspect_url Search Console URL inspection ~77
Google index status of one URL (URL Inspection API): verdict, coverage state, user and Google-selected canonical, robots.txt state, page fetch state and last crawl time. Quota: 2,000 inspections per day.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Full URL to inspect; must belong to the configured Search Console property |
No output schema declared.
No examples provided.
gsc_performance Search Console performance ~196
Google Search Console search performance for the configured property: clicks, impressions, CTR and average position, split by query, page, country, device or date. Returns the top rows, "totals" for the whole period (same filter, no split), "truncated", the unit and definition of each metric under "metrics", and a "date_range" in Pacific Time (Search Console's timezone) with "data_complete".
| Name | Type | Req | Description |
|---|---|---|---|
| dimensions | array | – | How to split the results |
| end_date | string | – | YYYY-MM-DD; empty means 2 days ago (Search Console data lag) |
| limit | integer | – | Maximum rows returned (1 to 1000); totals always cover the whole property |
| page_contains | string | – | Optional: keep only pages whose URL contains this text |
| start_date | string | – | YYYY-MM-DD; empty means 30 days ago (Pacific Time) |
No output schema declared.
No examples provided.
gsc_sitemaps Search Console sitemaps ~30
Sitemaps declared in Search Console, with last submission, last download, errors and warnings.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
gtm_inventory Tag Manager inventory ~65
Tags (type, paused, firing triggers, parameters), triggers and variables of the configured Google Tag Manager container's default workspace, plus the id of the live published version. Built-in trigger ids are translated, e.g. All Pages. Useful to spot a tag configured twice.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
indexing_status Indexing API status ~59
Latest Indexing API notifications (URL_UPDATED / URL_DELETED) Google holds for a URL. Read only: nothing is submitted. Most URLs were never notified, which is reported as such.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Full URL to look up |
No output schema declared.
No examples provided.
merchant_data_sources Merchant Center data sources ~25
Merchant Center data sources (feeds): labels, countries, languages, fetch URLs.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
merchant_product_issues Merchant Center product issues ~147
Merchant Center products with their item-level issues (disapprovals, demotions, warnings) per destination, with the attribute to fix. Scans every page of products up to max_pages. Returns {"products": [{offer_id, feed_label, title, link, issues: [{code, severity, description, attribute, destination}]}], "scanned": n, "truncated": bool}.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum products returned (1 to 1000) |
| max_pages | integer | – | Pages of 250 products to scan at most |
| only_with_issues | boolean | – | True: only products with at least one issue; False: every product |
No output schema declared.
No examples provided.
merchant_report_query Merchant Center report query ~84
Run a Merchant Center report (Merchant API reports:search) with an MCQL query, for example product status or free-listing performance. Returns Google's raw result rows.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | – | Merchant Center Query Language (MCQL) statement. Tables include product_view (must select id) and product_performance_view (clicks, impressions by date or offer) |
No output schema declared.
No examples provided.
meta_ad_accounts Meta ad accounts ~55
List the Meta ad accounts the access token can read (id act_..., name, status, currency, timezone). Use it to find the account id for META_AD_ACCOUNT_ID or for the account_id argument of meta_insights.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
meta_insights Meta Ads insights ~381
Meta Ads performance (spend, impressions, clicks, reach, purchases, purchase value, ROAS) by level. ctr is recomputed as a ratio 0..1, ROAS = purchase value / spend (totals: sum of values / sum of spends), Meta's own purchase_roas is kept raw in meta_reported_roas. Currency is the ad account's, never converted.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | Ad account id (digits or act_<digits>); empty means META_AD_ACCOUNT_ID |
| attribution_windows | array | – | Optional attribution windows for purchases (e.g. 7d_click); empty means Meta's default 7-day click + 1-day view; several windows give one figure per window, no single total |
| breakdowns | array | – | Optional extra split of each row, from a fixed list: age, gender, country, region, publisher_platform, platform_position, device_platform, impression_device |
| date_preset | string | – | Meta relative period (e.g. last_7d, last_month), exclusive with start_date/end_date; all three empty means last_28d |
| end_date | string | – | YYYY-MM-DD, last day included; leave empty with start_date to use date_preset |
| level | string | – | Row level: account (one row per period), campaign, adset or ad |
| limit | integer | – | Maximum rows returned (1 to 500), highest spend first (daily rows too); totals cover up to 5 pages of 500 rows |
| start_date | string | – | YYYY-MM-DD, first day in the ad account's timezone; leave empty with end_date to use date_preset |
| time_increment | string | – | all_days: one row for the whole period; 1: one row per day |
No output schema declared.
No examples provided.
openai_ads_account OpenAI Ads account ~85
OpenAI Ads (ChatGPT ads) ad account of the configured OPENAI_ADS_API_KEY (GET /v1/ad_account): only id, name, status, currency and timezone when present; every other key is dropped and listed in raw_fields_dropped. Use it as a connection test before openai_ads_insights. Cached 300 s ("cached": true).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
openai_ads_conversions OpenAI Ads conversions ~531
OpenAI Ads (ChatGPT ads) conversion insights (POST /v1/conversions/insights, a read query): goal conversions (click-through and view-through) and attributed order value per campaign, ad group or ad (entity_ids), or for the whole account (group_by_entity false), over whole days in the account timezone. Returns "rows" (null kept), recomputed "totals", "currency" (account_currency), "attribution" and "date_range". No pagination: more than 2000 rows answers too_many_rows (fewer entities, shorter period or fewer event_names). Warning: attributed event details may contain order or user identifiers; only documented aggregate fields are kept.
| Name | Type | Req | Description |
|---|---|---|---|
| account_timezone | string | yes | IANA timezone of the ad account, e.g. Europe/Paris (the timezone column of openai_ads_insights): the API counts whole days in it |
| aggregation_level | string | yes | Required row entity: campaign, ad_group or ad |
| attribution_time_basis | string | – | ad_event_time (API default) or conversion_time; empty sends nothing |
| attribution_window_days | integer | – | Click attribution window in days: 7, 14 or 30 |
| breakdown | string | – | Optional breakdown: country or device; empty for none |
| end_date | string | yes | Last day, YYYY-MM-DD (inclusive) |
| entity_ids | – | – | Ids of the entities of aggregation_level (1 to 100). Required when group_by_entity is true; must be empty when it is false |
| event_names | – | – | Optional exact event names for the event details (requires include_attributed_events; here at most 20 names of 64 characters among letters, digits, _ . : -, stricter than the API) |
| group_by_entity | boolean | – | True (API default): one row per entity of entity_ids; false: one row for the whole ad account (no entity_ids) |
| include_attributed_events | boolean | – | True: add per-event aggregates (event_name, counts, value); may expose order or user identifiers, so only aggregate fields are kept |
| include_zero_rows | boolean | – | True (API default): keep rows without conversions |
| start_date | string | yes | First day, YYYY-MM-DD (whole days, 365 days at most) |
| time_granularity | string | – | none: period totals; daily: one row per day |
| view_through_attribution_window_days | integer | – | View-through attribution window in days: 0 or 1 |
No output schema declared.
No examples provided.
openai_ads_insights OpenAI Ads insights ~761
OpenAI Ads (ChatGPT ads) performance over a date range: impressions, clicks, spend, ctr, conversions and attributed sales for the ad account or one campaign, ad group or ad. Returns "rows" as reported (flat keys such as campaign_id; null kept, null_means "non calculable"), recomputed "totals" (roas = sum of sales / sum of spend), "currency" (from order_created_attributed_sales_currency, else None), "date_range" in the timezone returned by the API, "next_after" while has_more (reads up to max_rows rows over at most 5 pages), units (spend in major currency units, ctr ratio) and "attribution". No automatic retry.
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | next_after (last_id) of a previous call to read the next rows; empty to start |
| aggregation_level | string | – | Row entity inside the endpoint scope: ad_account, campaign, ad_group or ad; empty uses the endpoint level |
| attribution_time_basis | string | – | ad_event_time (API default) or conversion_time; empty sends nothing |
| attribution_window_days | integer | – | Click attribution window in days: 7, 14 or 30 |
| before | string | – | first_id of a previous call to read the rows before it (one page); not with after |
| end_date | string | yes | Last day, YYYY-MM-DD (inclusive) |
| entity_id | string | – | Id of the campaign, ad group or ad (letters, digits, _ and -); empty for level account |
| fields | – | – | Canonical field names, e.g. impressions, clicks, spend, ctr, cpc, cpm, conversions, cpa, post_click_cvr, order_created_attributed_sales, order_created_attributed_sales_currency, order_created_roas, c… |
| filters | – | – | Optional filters, combined with AND: {"field": "campaign.id", "operator": "IN", "value": ["cmpn_1"]} or {"field": "ad.clicks", "operator": "GREATER_THAN" or "LESS_THAN", "value": 10} (at most 10) |
| include_zero_impression_items | boolean | – | True: also return entities with zero impressions (only without a segment) |
| level | string | – | Which endpoint: account = the whole ad account; campaign, ad_group or ad = one entity given by entity_id |
| max_rows | integer | – | Maximum rows returned by this call (1 to 6000), over at most 5 pages |
| page_size | integer | – | Rows per API page (1 to 2000) |
| segment | string | – | Optional single segment: product, country, device or platform (request segment fields such as country.clicks) |
| sort | – | – | Optional sort criteria in order: [{"field": "spend", "direction": "desc"}] (at most 5) |
| start_date | string | yes | First day, YYYY-MM-DD |
| time_granularity | string | – | none: one row per entity for the period; daily, monthly or hourly (hourly: about 30 days of history, not with a segment) |
| timezone | string | – | Optional IANA timezone of the day boundaries; empty uses the ad account timezone (keep empty for conversion or sales metrics, which require whole days in the account timezone) |
| view_through_attribution_window_days | integer | – | View-through attribution window in days: 0 or 1 |
No output schema declared.
No examples provided.
pagespeed PageSpeed Insights ~83
Lighthouse performance and SEO scores (0 to 100) plus LCP, CLS and TBT for a URL, and the Chrome UX Report field category when Google has real-user data. Set PAGESPEED_API_KEY to avoid the shared anonymous quota.
| Name | Type | Req | Description |
|---|---|---|---|
| strategy | string | – | Device profile Lighthouse emulates |
| url | string | yes | Full public URL to test |
No output schema declared.
No examples provided.
server_status Server status ~71
Which Google services are configured for this server, and whether the stored OAuth token works. Call it first when another tool answers not_configured or not_authenticated. Returns one boolean per service, the token storage (os-keyring or file), "token": "ok" or the error, and the package version.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
How do I install the Google E-commerce (GA4, Search Console, Merchant Center) MCP server?
Google E-commerce (GA4, Search Console, Merchant Center) runs locally as a PyPI package, launched with uvx google-ecommerce-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · google-ecommerce-mcp
claude mcp add mooneyes-google-ecommerce-mcp -- uvx google-ecommerce-mcp
What is the Google E-commerce (GA4, Search Console, Merchant Center) MCP server?
Google E-commerce (GA4, Search Console, Merchant Center) is an MCP server listed in the public MCP registry as io.github.MoonEyes/google-ecommerce-mcp. Read-only GA4, Search Console, Merchant Center, Tag Manager, Indexing and PageSpeed for shops. This page covers its PyPI package (google-ecommerce-mcp).
Is the Google E-commerce (GA4, Search Console, Merchant Center) MCP server safe to use?
Google E-commerce (GA4, Search Console, Merchant Center) scores 85 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 16 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Google E-commerce (GA4, Search Console, Merchant Center) MCP server expose?
Google E-commerce (GA4, Search Console, Merchant Center) exposes 22 tools: server_status, ga4_report, ga4_realtime, ga4_properties, gsc_performance, and 17 more. Their descriptions and schemas cost roughly 4,334 tokens of context every time the server is loaded.
Is the Google E-commerce (GA4, Search Console, Merchant Center) MCP server still maintained?
Google E-commerce (GA4, Search Console, Merchant Center) is still listed as active in the MCP registry. We last reached this channel on 16 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Google E-commerce (GA4, Search Console, Merchant Center) MCP server under?
Google E-commerce (GA4, Search Console, Merchant Center) declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.