remove_keywords_from_negative_list
Remove keywords from a single existing Google Ads negative keyword list, matched by text.
Destructive search
Deletes, archives, launches or moves budget. Do not give an agent this one without a human gate.
What it does
Remove keywords from a single existing Google Ads negative keyword list, matched by text.
PURPOSE:
Drop keywords that no longer belong in a negative keyword list (e.g. a search
term that turned out to convert after all, or an over-eager exclusion). The
tool fetches the list internally, finds entries whose text matches what you
pass, and removes every match.
MATCHING:
- Comparison is case-sensitive and exact (whole-text equality).
- If the same text appears under multiple match types (e.g. "free" as PHRASE
AND as EXACT), all of them are removed.
- Inputs that don't match anything are reported back in 'notFound' without
failing the call.
WHEN TO USE:
- Undo a previous add_keywords_to_negative_lists mistake
- Clean up a list during the day-to-day review loop
- For full-list wipe use the platform's deleteAll endpoint instead
(not currently wrapped here)
NOT FOR:
- Detaching the list from a campaign (use remove_keywords_from_campaign).
- Deleting the list itself.
COMMON USE CASES:
1. Remove a single keyword:
remove_keywords_from_negative_list(
listId=43256533,
keywords=["free download"],
)
2. Remove several at once:
remove_keywords_from_negative_list(
listId=43256533,
keywords=["competitor a", "tutorial", "wiki"],
)
PARAMETERS:
- listId (integer, required): negative keyword list id
(from list_negative_keywords_list).
- keywords (array of strings, required, min 1): exact text(s) to remove.
RESPONSE FORMAT:
{
"listId": 43256533,
"removed": [{"text": "free download", "keywordMatchType": "PHRASE", "resourceName": "..."}, ...],
"notFound": ["wiki"]
}
CHANNEL SCOPE:
BOTH search channels are supported: pass channel=MICROSOFT_ADS for Microsoft
Ads (Bing) and channel=GOOGLE_ADS for Google. The two channels hold SEPARATE
lists, so never substitute one channel for the other to get "close enough"
results.Arguments
| Argument | Type | Notes | |
|---|---|---|---|
listId |
integer | required | ID of the negative keyword list (from list_negative_keywords_list). |
keywords |
array | required | Exact keyword texts to remove. Case-sensitive whole-text match. |
channel |
string | Ad channel scope. Both search channels are supported. These are PER-CHANNEL resources: GOOGLE_ADS and MICROSOFT_ADS hold separate sets, and one is invisible to the other. Defaults to GOOGLE_ADS when the user does not say which. one of: GOOGLE_ADS, MICROSOFT_ADS |
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":"remove_keywords_from_negative_list","arguments":{"listId":0,"keywords":[]}}}'
Response
No recorded response. This tool can delete, archive, launch or move budget, so it is never executed to build these docs.
The request above is still the exact shape to send. Nothing on this page is invented.
Related
Other search tools: