list_extensions
List the account's Google Ads / Microsoft Ads library extensions (sitelinks, callouts, snippets, etc.) with their internal ids.
Read extensions
Returns data. Calling it changes nothing, so it is safe in an unattended loop.
What it does
List the account's Google Ads / Microsoft Ads library extensions (sitelinks, callouts, snippets, etc.) with their internal ids.
ALSO KNOWN AS: list extensions, show extensions, find sitelink, which extensions do we have, extension library, browse extensions
KEYWORDS: list, show, find, browse, extensions, sitelink, callout, library, google ads, microsoft ads, bing, id
WHEN TO USE:
- "What sitelinks do we have?" / "Show our Google Ads extensions"
- ALWAYS before add_extensions_to_native_campaign or remove_extensions_from_native_campaign — those need internal ids, and this is the only tool that returns them. The create_*_extension tools return an empty body and cannot tell you the new id.
WHEN NOT TO USE:
- Creating a new extension → use the relevant create_*_extension tool
- Non-search channels (Facebook / LinkedIn / Reddit) — extensions do not exist there
INPUTS:
- channel (required): GOOGLE_ADS or MICROSOFT_ADS
- types (optional): filter, e.g. ["SITELINK"]
- name (optional): name filter. Extension names are AUTO-DERIVED, not user-chosen — a sitelink's name is its link text and both description lines joined by newlines, truncated to 50 chars. Filter by `types` and match on the returned fields instead of guessing a name.
- page / size (optional): pagination, defaults 0 / 50
Returns {totalElements, totalPages, data:[{id, name, type, createdDate, ...}]}. Only campaign-attachable extensions are listed (account-level ones are excluded by the platform).Arguments
| Argument | Type | Notes | |
|---|---|---|---|
channel |
string | required | Search channel. Ad extensions are a search-channel-only concept. one of: GOOGLE_ADS, MICROSOFT_ADS |
types |
array | Optional extension-type filter, e.g. ["SITELINK"]. | |
name |
string | Optional name filter. Names are auto-derived by the platform, not user-chosen, so prefer filtering by `types`. | |
page |
integer | 0-based page index. Defaults to 0. | |
size |
integer | Page size. Defaults to 50. |
Request
curl
curl -s -X POST https://mcp-server.metadata.io/mcp \
-H "Authorization: $METADATA_PAT" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_extensions","arguments":{"channel":"GOOGLE_ADS"}}}'
Response
Recorded with these arguments. Enum values are the first the tool's own schema
declares; ids were fetched live from a list_ call immediately before.
arguments used
{
"channel": "GOOGLE_ADS"
}
Real, from the production server, in 1387 ms. The full response was 16,802 bytes; this is the first part of it. Values that identify a customer or disclose money are replaced with typed placeholders; keys, types and nesting are exactly as returned.
recorded response
{
"totalElements": 38,
"totalPages": 1,
"data": [
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "SITELINK",
"createdDate": "2026-07-31T18:22:17",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"url": "[url redacted]",
"linkText": "[linkText redacted]",
"description1": "[description1 redacted]",
"description2": "[description2 redacted]"
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "STRUCTURED_SNIPPET",
"createdDate": "2026-07-31T18:22:17",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"header": "[header redacted]",
"values": [
"[values redacted]",
"[values redacted]",
"[values redacted]",
"[values redacted]"
]
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "CALLOUT",
"createdDate": "2026-07-31T18:22:15",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"calloutText": "[calloutText redacted]"
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "STRUCTURED_SNIPPET",
"createdDate": "2026-07-08T17:40:36",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"header": "[header redacted]",
"values": [
"[values redacted]",
"[values redacted]",
"[values redacted]",
"[values redacted]",
"[values redacted]",
"[values redacted]"
]
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "CALLOUT",
"createdDate": "2026-07-08T17:40:16",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"calloutText": "[calloutText redacted]"
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "CALLOUT",
"createdDate": "2026-07-08T17:40:05",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"calloutText": "[calloutText redacted]"
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "CALLOUT",
"createdDate": "2026-07-08T17:39:53",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"calloutText": "[calloutText redacted]"
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "CALLOUT",
"createdDate": "2026-07-08T17:39:41",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"calloutText": "[calloutText redacted]"
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "CALLOUT",
"createdDate": "2026-07-08T17:39:25",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"calloutText": "[calloutText redacted]"
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "CALLOUT",
"createdDate": "2026-07-08T17:39:08",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"calloutText": "[calloutText redacted]"
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "CALLOUT",
"createdDate": "2026-07-08T17:38:55",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"calloutText": "[calloutText redacted]"
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "CALLOUT",
"createdDate": "2026-07-08T17:38:45",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"calloutText": "[calloutText redacted]"
},
{
"id": "[number redacted]",
"name": "[name redacted]",
"type": "CALLOUT",
"createdDate": "2026-07-08T17:38:36",
"disapproved": false,
"disapprovalReasons": [],
"thumbnail": "[thumbnail redacted]",
"calloutText": "[calloutText redacted]"
},
{
"id": "[number redacted]",
"name"
… truncated
Related
Other extensions tools: