← The evidence ledger
Evidence row 35909
Observed , by baseline/1.
- Kind
- listing
- About
- source_record mcp_registry:io.github.davidmosiah/google-ads-mcp
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 7fbf065a02fd20d567e47656087c3bb3b18f3d53660bfde5d80eb7b17facb935
- Leaf
- 0x29f3a0ab5030527d024f09039a446c2297868b6b4dea92b19a2d790d7c7cd841
What was observed
{
"endpoints": [
[
"web",
"https://github.com/davidmosiah/google-ads-mcp-unofficial"
]
],
"name": "io.github.davidmosiah/google-ads-mcp",
"owner_address": null,
"raw": {
"_meta": {
"io.modelcontextprotocol.registry/official": {
"isLatest": true,
"publishedAt": "2026-07-03T12:02:45.900412Z",
"status": "active",
"statusChangedAt": "2026-07-03T12:02:45.900412Z",
"updatedAt": "2026-07-03T12:02:45.900412Z"
}
},
"server": {
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"description": "Unofficial Google Ads MCP for campaigns, keywords, budgets, and gated mutations.",
"name": "io.github.davidmosiah/google-ads-mcp",
"packages": [
{
"environmentVariables": [
{
"description": "Google Ads API developer token from your Google Ads Manager account. Required.",
"format": "string",
"isSecret": true,
"name": "GOOGLE_ADS_DEVELOPER_TOKEN"
},
{
"description": "Google OAuth2 client ID. Required.",
"format": "string",
"name": "GOOGLE_ADS_CLIENT_ID"
},
{
"description": "Google OAuth2 client secret. Prefer storing in ~/.google-ads-mcp/config.json via setup.",
"format": "string",
"isSecret": true,
"name": "GOOGLE_ADS_CLIENT_SECRET"
},
{
"description": "Manager (MCC) customer ID used as login-customer-id header, no dashes (e.g., 1234567890). Optional but required for multi-account access.",
"format": "string",
"name": "GOOGLE_ADS_LOGIN_CUSTOMER_ID"
},
{
"description": "OAuth redirect URI. Defaults to http://127.0.0.1:3000/callback.",
"format": "string",
"name": "GOOGLE_ADS_REDIRECT_URI"
},
{
"description": "Optional local path for OAuth tokens. Defaults to ~/.google-ads-mcp/tokens.json (0600).",
"format": "string",
"name": "GOOGLE_ADS_TOKEN_PATH"
},
{
"description": "Optional payload mode: summary, structured, or raw. Defaults to structured. raw returns full Google Ads API payloads.",
"format": "string",
"name": "GOOGLE_ADS_PRIVACY_MODE"
},
{
"description": "Set to true to enable write tools (pause/resume keywords/campaigns, set bids, set budgets). Default false (read-only). Agents changing real ad spend is high-stakes; review every change.",
"format": "string",
"name": "GOOGLE_ADS_ALLOW_MUTATIONS"
},
{
"description": "Optional SQLite cache toggle. Set to true or sqlite to enable.",
"format": "string",
"name": "GOOGLE_ADS_CACHE"
},
{
"description": "Optional local SQLite cache path. Defaults to ~/.google-ads-mcp/cache.sqlite.",
"format": "string",
"name": "GOOGLE_ADS_CACHE_PATH"
},
{
"description": "Optional cache TTL in seconds. Defaults to 60. Set to 0 to keep entries indefinitely (entries are still overwritten on each hit).",
"format": "string",
"name": "GOOGLE_ADS_CACHE_TTL_SECONDS"
},
{
"description": "Set to true to disable the HTTP retry middleware. Default false.",
"format": "string",
"name": "GOOGLE_ADS_NO_RETRY"
}
],
"identifier": "google-ads-mcp-unofficial",
"registryType": "npm",
"transport": {
"type": "stdio"
},
"version": "0.1.3"
}
],
"repository": {
"source": "github",
"url": "https://github.com/davidmosiah/google-ads-mcp-unofficial"
},
"version": "0.1.3",
"websiteUrl": "https://github.com/davidmosiah/google-ads-mcp-unofficial"
}
},
"source": "mcp_registry",
"summary": "Unofficial Google Ads MCP for campaigns, keywords, budgets, and gated mutations."
}What the leaf hashes
{"body":"7fbf065a02fd20d567e47656087c3bb3b18f3d53660bfde5d80eb7b17facb935","id":35909,"kind":"listing","method":"baseline/1","observed_us":1793025374793875,"prev":null,"subject":"mcp_registry:io.github.davidmosiah/google-ads-mcp","subject_kind":"source_record"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).
- 0x29f39bc216fec8883b76407c5b00a24141a95e7a0fdeaa2c3f57140089bcf8e9
- 0xcb4f32e742e535a2ab65071df39fac9c1f754eae17b16202f9ea441e4ee3f36e
- 0x136ccd37289705c681c109879483842cafd8a44747a0112f891ee34a83e2edaa
- 0x3e81fdd42514cbe5488374b6342afe6c2c54e7f46e3ee4dd61f12df4515ec4eb
- 0x87eab8a4019d0029eb77554c042b6bf5dc8756b4b7e85e8ba7adbf4ff5f3ac40
- 0x46870c738e39ae65d6eb58494a36daa8597f7bf96dd3f96fbf323b9204c9a4b7
- 0x4ced261a0d2f1dca80b2d5fd46f48d6047c44b7b625df817a85389730b309bcd
- 0x774590a99bba2be66469f50dba062163bffadda6d175b6156c25f64eb723cfe4
- 0xa6c508bee8146d66d84a6db7263cb95aa6ed96eb9d190f7dcf6b3942ce9b5879
- 0xceecb11ae941a028ba38b36bebeaea0d1db672b60f285af8fdaeb552f5fba197
- 0x7b0bb4483af5e03d9f02e715a84d790ec3df1fc57d38f1d1a5ed296a7e822d7f
- 0xeab0020f03650c1a79ed79927ae9d808c59a41295a86d1285582516590c954e6
- 0x16a8fb19a5e4f4535e7cb3fce5c15ecfa188586bb74e347ee71164f8af27dfe1
- 0xd843afcced75dedd39194ff9bd12326b88099e6112686db2299392d022dc3146
- 0xc3a6a3ae44ec0da1848b16d40c45d7aac97a67352eea8df18e0f26edabea8a2f
- 0x06d71bfa7d8b41d62c8836efc2c601e1cc3772d9453596b2ae4950887f3310ca
- 0x8c756542e482157df0c36464d75c937b845e4423dbbcfad08f0cf8d5a16b9a13
- 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
- 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
- Day root
- 0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
- Chained
- 0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
- Published
- On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae