Skip to main content
Glama

AdsAgent — Google Ads MCP

creatives_list

Read-only

List creatives for Google Ads. Google has no uploaded library here, so this returns the account's read-only Google Drive cloud folders' files. For requests about materials or videos, include connected cloud folders with library_source=all or cloud. Follow next_cursor until has_more is false before concluding there are no cloud matches. Each item carries library_source, read_only and folder_path for display only. Cloud files are read-only here: they cannot be uploaded to, renamed, moved or deleted. A selection_key (gdrive:...) is not a Google asset: ad prepare tools refuse it with cloud_asset_requires_platform_asset. To use a file in an ad, pass its selection_key as base64_data in google_ads_asset_upload_prepare (images) or as source_url in google_ads_video_upload_prepare (videos); the original is fetched from Drive then. After the user confirms that upload, pass the resulting customers//assets/ to ad creation. cloud_count is the cloud total for the current filters; thumbnail_status is available or unavailable, and creatives_get returns the thumbnail_url. modified_from inclusive / modified_to exclusive filter Drive modified_time, not indexed_at, and need a timezone offset. An empty time window is a successful result; widen the window or omit it to browse all indexed files. Follow next_cursor with the same filters. No writes.

Input Schema

NameRequiredDescriptionDefault
qNo
sortNo
limitNo
cursorNo
folder_idNoBound cloud folder id (gdrive-folder:...) from creatives_list_folders. Share links must be bound through creatives_cloud_bind first.
media_typeNo
folder_nameNoA connected folder name from creatives_list_folders, resolved to its folder_id. Drive child folder names are not supported. Pass folder_id or folder_name, not both.
modified_toNoExclusive Drive modified_time upper bound with a timezone offset, not indexed_at.
modified_fromNoInclusive Drive modified_time lower bound with a timezone offset, not indexed_at.
library_sourceNoDefaults to all, including bound cloud folders. Google has no upload library.all
connection_contextNo

Output Schema

NameRequiredDescriptionDefault
okNo
codeNo
metaNo
noteNo
countNo
errorNo
itemsNo
needsNo
totalNo
reasonNo
statusNo
foldersNo
bind_urlNo
completeNo
retryableNo
error_codeNo
invite_urlNo
cloud_countNo
next_actionNo
next_cursorNo
support_refNo
total_countNo
folder_countNo
folder_limitNo
user_messageNo
invalid_fieldsNo
library_sourceNo
rejected_pathsNo
upload_libraryNo
expires_in_daysNo
origin_support_refNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "bind_url": {
      +      "type": "string"
      +    },
      +    "cloud_count": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "code": {
      +      "type": "string"
      +    },
      +    "complete": {
      +      "type": "boolean"
      +    },
      +    "count": {
      +      "type": "integer"
      +    },
      +    "error": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "additionalProperties": true,
      +              "properties": {
      +                "code": {
      +                  "type": "string"
      +                },
      +                "details": {
      +                  "additionalProperties": true,
      +                  "properties": {},
      +                  "type": "object"
      +                },
      +                "message": {
      +                  "type": "string"
      +                },
      +                "retryable": {
      +                  "type": "boolean"
      +                },
      +                "support_ref": {
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            }
      +          ]
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "error_code": {
      +      "type": "string"
      +    },
      +    "expires_in_days": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "folder_count": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "folder_limit": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "folders": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {},
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "invalid_fields": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "invite_url": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "items": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "folder_path": {
      +            "type": "string"
      +          },
      +          "library_source": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "read_only": {
      +            "type": "boolean"
      +          },
      +          "selection_key": {
      +            "type": "string"
      +          },
      +          "thumbnail_status": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "thumbnail_url": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "library_source": {
      +      "type": "string"
      +    },
      +    "meta": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "complete": {
      +          "type": "boolean"
      +        },
      +        "has_more": {
      +          "type": "boolean"
      +        },
      +        "limit": {
      +          "type": "integer"
      +        },
      +        "next_continuation": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "next_cursor": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "pagination_complete": {
      +          "type": "boolean"
      +        },
      +        "returned_count": {
      +          "type": "integer"
      +        },
      +        "source": {
      +          "type": "string"
      +        },
      +        "total_count": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "truncated": {
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "needs": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "next_action": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "additionalProperties": true,
      +              "properties": {},
      +              "type": "object"
      +            }
      +          ]
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "next_cursor": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "ok": {
      +      "type": "boolean"
      +    },
      +    "origin_support_ref": {
      +      "type": "string"
      +    },
      +    "reason": {
      +      "type": "string"
      +    },
      +    "rejected_paths": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "retryable": {
      +      "type": "boolean"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "support_ref": {
      +      "type": "string"
      +    },
      +    "total": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "total_count": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "upload_library": {
      +      "type": "boolean"
      +    },
      +    "user_message": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / folder_name
      Added value: +{
      +  "description": "A connected folder name from creatives_list_folders, resolved to its folder_id. Drive child folder names are not supported. Pass folder_id or folder_name, not both.",
      +  "maxLength": 200,
      +  "type": "string"
      +}
  3. Changed5 schema fields changed
    • changedInput schema / properties / folder_id / description
      Previous value: -"Cloud folder id (gdrive-folder:...) from creatives_list_folders."New value: +"Bound cloud folder id (gdrive-folder:...) from creatives_list_folders. Share links must be bound through creatives_cloud_bind first."
    • addedInput schema / properties / library_source / default
      Added value: +"all"
    • addedInput schema / properties / library_source / description
      Added value: +"Defaults to all, including bound cloud folders. Google has no upload library."
    • addedInput schema / properties / modified_from / description
      Added value: +"Inclusive Drive modified_time lower bound with a timezone offset, not indexed_at."
    • addedInput schema / properties / modified_to / description
      Added value: +"Exclusive Drive modified_time upper bound with a timezone offset, not indexed_at."
  4. Added

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: cloud files are read-only and cannot be uploaded to, renamed, moved or deleted; selection_key values are refused by ad prepare tools with a named error (cloud_asset_requires_platform_asset) and must be re-uploaded first; pagination must be exhausted via next_cursor/has_more; an empty time window is a success, not a failure. It also explains the display-only fields (library_source, read_only, folder_path, cloud_count, thumbnail_status with creatives_get for thumbnail_url).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and scope are front-loaded and almost every sentence carries operational detail, but the 14-sentence block repeats itself: cursor-following is stated twice ('Follow next_cursor until has_more is false' and 'Follow next_cursor with the same filters'), and 'No writes' restates the read-only claims made earlier. It would be stronger split into clearly labeled list semantics vs. upload hand-off.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-step workflow tool with 11 params, an output schema and read-only annotations, the description supplies everything an agent needs to call it, interpret an empty result, paginate, and hand a selection_key off to the correct prepare tool. Return-value detail is correctly delegated to the output schema and creatives_get.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 45% across 11 params, but the description carries the load for the tricky ones: library_source=all vs cloud for cloud-inclusive results, modified_from inclusive / modified_to exclusive filtering Drive modified_time (not indexed_at) and requiring a timezone offset, and reusing the same filters with next_cursor. q, sort, limit, media_type and connection_context remain undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List creatives for Google Ads') and immediately clarifies a non-obvious scope: there is no uploaded library, so results are the account's read-only Drive cloud folders' files. This lets an agent distinguish it from a generic asset list. It never names the sibling creatives_list_cloud, so the agent must infer whether this is the unified list or the cloud-specific one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit usage conditions: 'For requests about materials or videos, include connected cloud folders with library_source=all or cloud', and it routes the follow-up work to google_ads_asset_upload_prepare (images, base64_data) or google_ads_video_upload_prepare (videos, source_url). It also states the empty-result caveat (widen or omit the window, don't conclude 'no matches' without exhausting next_cursor). It stops short of saying when to prefer creatives_list_cloud or creatives_list_folders instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources