addrbookFor publishers
← 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).

  1. 0x29f39bc216fec8883b76407c5b00a24141a95e7a0fdeaa2c3f57140089bcf8e9
  2. 0xcb4f32e742e535a2ab65071df39fac9c1f754eae17b16202f9ea441e4ee3f36e
  3. 0x136ccd37289705c681c109879483842cafd8a44747a0112f891ee34a83e2edaa
  4. 0x3e81fdd42514cbe5488374b6342afe6c2c54e7f46e3ee4dd61f12df4515ec4eb
  5. 0x87eab8a4019d0029eb77554c042b6bf5dc8756b4b7e85e8ba7adbf4ff5f3ac40
  6. 0x46870c738e39ae65d6eb58494a36daa8597f7bf96dd3f96fbf323b9204c9a4b7
  7. 0x4ced261a0d2f1dca80b2d5fd46f48d6047c44b7b625df817a85389730b309bcd
  8. 0x774590a99bba2be66469f50dba062163bffadda6d175b6156c25f64eb723cfe4
  9. 0xa6c508bee8146d66d84a6db7263cb95aa6ed96eb9d190f7dcf6b3942ce9b5879
  10. 0xceecb11ae941a028ba38b36bebeaea0d1db672b60f285af8fdaeb552f5fba197
  11. 0x7b0bb4483af5e03d9f02e715a84d790ec3df1fc57d38f1d1a5ed296a7e822d7f
  12. 0xeab0020f03650c1a79ed79927ae9d808c59a41295a86d1285582516590c954e6
  13. 0x16a8fb19a5e4f4535e7cb3fce5c15ecfa188586bb74e347ee71164f8af27dfe1
  14. 0xd843afcced75dedd39194ff9bd12326b88099e6112686db2299392d022dc3146
  15. 0xc3a6a3ae44ec0da1848b16d40c45d7aac97a67352eea8df18e0f26edabea8a2f
  16. 0x06d71bfa7d8b41d62c8836efc2c601e1cc3772d9453596b2ae4950887f3310ca
  17. 0x8c756542e482157df0c36464d75c937b845e4423dbbcfad08f0cf8d5a16b9a13
  18. 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON