← AdAgntCONTENT HISTORY

Update to AdAgnt

Snapshot Nov 2, 2026 · 06:11 UTC · version 1.0.1

Collection source: downloaded plugin package. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.

WHAT CHANGED

Instructions updated for adagnt-mcp

Skill instructions — Now says: 348 tools across eight ad platforms. Most failed calls are not hard problems — - **Assets before campaigns** on Meta and TikTok —

Observed in instructions or declared skills. Runtime behavior has not been tested.

Save AdAgnt and check future changes in Following.

Up to 3 plugins free · no card required.

All fields and original values.

Skill instructions

Before

Sep 30, 2026 · 23:11 UTC

291 tools across six ad platforms. Most failed calls are not hard problems — - **Assets before campaigns** on Meta, TikTok and LinkedIn — Batch where a tool supports it (`batch_update_linkedin_campaigns`) rather than looping single calls.

After

Nov 2, 2026 · 06:11 UTC

348 tools across eight ad platforms. Most failed calls are not hard problems — - **Assets before campaigns** on Meta and TikTok —

Compare saved observations

Download comparison JSON

SKILL.md text changes

− removed · + added

--- before
+++ after
@@ -5,7 +5,7 @@
 
 # AdAgnt tool-call contract
 
-291 tools across six ad platforms. Most failed calls are not hard problems —
+348 tools across eight ad platforms. Most failed calls are not hard problems —
 they are the same handful of avoidable mistakes. This is that list.
 
 ## 1. Resolve the account before anything else
@@ -53,7 +53,7 @@
 - **Keyword research before campaign creation.** `research_keywords` returns
   real volumes, competition and bid ranges. Inventing keywords wastes the
   user's money.
-- **Assets before campaigns** on Meta, TikTok and LinkedIn —
+- **Assets before campaigns** on Meta and TikTok —
   `validate_and_prepare_*_assets`, `upload_tiktok_images`, `validate_video`.
 - **Amazon:** profile → campaign → ad group → product ad → keywords. Each step
   needs the ID from the one before.
@@ -94,9 +94,6 @@
 the monthly limit, the reset date, and the upgrade options. When quota is hit,
 tools stop cleanly — nothing is left half-changed.
 
-Batch where a tool supports it (`batch_update_linkedin_campaigns`) rather than
-looping single calls.
-
 ## 7. Results
 
 Every tool returns a JSON object, and the MCP layer sends it as
Full technical diff · 1 changed fields

changed /skill_md_contents

BEFORE
"---\nname: adagnt-mcp\ndescription: The AdAgnt tool-call contract — how to resolve accounts, the hard argument limits that reject calls, what each error code means, and how quota works. Load this before calling AdAgnt tools so calls succeed first time instead of failing validation.\n---\n\n# AdAgnt tool-call contract\n\n291 tools across six ad platforms. Most failed calls are not hard problems —\nthey are the same handful of avoidable mistakes. This is that list.\n\n## 1. Resolve the account before anything else\n\nTools operate on the user's *primary* account for a platform unless told\notherwise.\n\n- `list_connected_accounts` — what is connected, and which is primary\n- `get_connections_status` — whether a platform is linked and healthy\n- `switch_primary_account` — change the default (a write)\n\n**Amazon is different.** Every Amazon tool needs a **profile**, which pairs an\nadvertiser account with one marketplace. Call `amazon_list_profiles` first and\npass the profile explicitly. A US profile cannot see UK campaigns.\n\n**AppLovin** uses accounts from `applovin_list_accounts`.\n\nIf no account exists you get `NO_ACCOUNT`. In sandbox that usually means the\nplatform has not been touched yet — a demo account with 90 days of history is\ncreated the first time you use a platform, so simply proceeding will seed it.\n\n## 2. Hard argument limits that reject the call\n\nThese are enforced by schema. Getting them wrong returns `INVALID_ARGS` and\nnothing is created.\n\n| Tool | Field | Limit |\n|---|---|---|\n| `create_search_campaign` | `ad_groups[].headlines` | **exactly 15** |\n| `create_search_campaign` | `ad_groups[].descriptions` | **exactly 4** |\n| `create_search_campaign` | `ad_groups[].keywords` | **at least 5** |\n| `create_ad` | `headlines` | 3–15 |\n| `update_ad_headlines` | `headlines` | 3–15 |\n\n**Write the full set yourself.** Do not ask the user for fifteen headlines, and\nnever promise them a smaller number — Google itself allows 3–15 headlines and\n2–4 descriptions, so this constraint is AdAgnt's and stricter than the platform's.\n\n## 3. Order of operations that actually matters\n\n- **`get_true_roas` throws without a revenue source.** Check\n  `list_revenue_sources` first; if empty, propose `connect_revenue_source`\n  (GA4, Shopify, Stripe, Klaviyo — it backfills 90 days) and wait for approval.\n  Do not call it and report the error as a finding.\n- **Keyword research before campaign creation.** `research_keywords` returns\n  real volumes, competition and bid ranges. Inventing keywords wastes the\n  user's money.\n- **Assets before campaigns** on Meta, TikTok and LinkedIn —\n  `validate_and_prepare_*_assets`, `upload_tiktok_images`, `validate_video`.\n- **Amazon:** profile → campaign → ad group → product ad → keywords. Each step\n  needs the ID from the one before.\n\n## 4. Error codes, and what each one actually means\n\n| Code | Meaning | What to do |\n|---|---|---|\n| `INVALID_ARGS` | Arguments failed validation | Read the message — it names the field. Fix and retry **once**. |\n| `NOT_FOUND` | The named object does not exist | List first, then act on a real ID. Never guess an ID. |\n| `NO_ACCOUNT` | No connected account for that platform | Offer to connect it. |\n| `NOT_SUPPORTED` | The operation is not available on this driver | Not a bug. Say so plainly and stop. |\n| `PLATFORM_ERROR` | The ad platform itself rejected the call | Report the platform's reason. Do not retry a write. |\n| `QUOTA_EXCEEDED` | Monthly tool-call limit reached | Report the limit; `get_usage_status` shows plan and reset date. |\n\n**Known `NOT_SUPPORTED`: AppLovin on a live account.** All writes throw, plus\ncreative-set listing, asset listing and targeting search. Campaign reads and\nthe whole reporting surface work. In sandbox all 36 AppLovin tools work. Tell\nthe user which they are hitting rather than implying a bug.\n\n## 5. Writes\n\n- Every write tool is annotated **destructive**, so ChatGPT raises its own\n  permission prompt. That prompt describes intent, not values — it is not a\n  substitute for showing the user the actual budget, keywords and ad copy.\n- **Never auto-retry a write after an ambiguous failure.** That is how\n  duplicate campaigns and double spend happen. Retry only `INVALID_ARGS`, which\n  provably did nothing.\n- **Verify with an independent read.** Do not report success or failure from\n  the write's own return value alone. A write here has come back looking like a\n  failure while the campaign was in fact created — reporting that verbatim\n  would have had the user create it a second time. Call the matching list/get\n  tool and report what you observed there.\n\n## 6. Quota\n\nMetered per tool call, reads included. `get_usage_status` returns the plan,\nthe monthly limit, the reset date, and the upgrade options. When quota is hit,\ntools stop cleanly — nothing is left half-changed.\n\nBatch where a tool supports it (`batch_update_linkedin_campaigns`) rather than\nlooping single calls.\n\n## 7. Results\n\nEvery tool returns a JSON object, and the MCP layer sends it as\n`structuredContent` alongside the text. Read fields directly rather than\nre-parsing the text block.\n"
AFTER
"---\nname: adagnt-mcp\ndescription: The AdAgnt tool-call contract — how to resolve accounts, the hard argument limits that reject calls, what each error code means, and how quota works. Load this before calling AdAgnt tools so calls succeed first time instead of failing validation.\n---\n\n# AdAgnt tool-call contract\n\n348 tools across eight ad platforms. Most failed calls are not hard problems —\nthey are the same handful of avoidable mistakes. This is that list.\n\n## 1. Resolve the account before anything else\n\nTools operate on the user's *primary* account for a platform unless told\notherwise.\n\n- `list_connected_accounts` — what is connected, and which is primary\n- `get_connections_status` — whether a platform is linked and healthy\n- `switch_primary_account` — change the default (a write)\n\n**Amazon is different.** Every Amazon tool needs a **profile**, which pairs an\nadvertiser account with one marketplace. Call `amazon_list_profiles` first and\npass the profile explicitly. A US profile cannot see UK campaigns.\n\n**AppLovin** uses accounts from `applovin_list_accounts`.\n\nIf no account exists you get `NO_ACCOUNT`. In sandbox that usually means the\nplatform has not been touched yet — a demo account with 90 days of history is\ncreated the first time you use a platform, so simply proceeding will seed it.\n\n## 2. Hard argument limits that reject the call\n\nThese are enforced by schema. Getting them wrong returns `INVALID_ARGS` and\nnothing is created.\n\n| Tool | Field | Limit |\n|---|---|---|\n| `create_search_campaign` | `ad_groups[].headlines` | **exactly 15** |\n| `create_search_campaign` | `ad_groups[].descriptions` | **exactly 4** |\n| `create_search_campaign` | `ad_groups[].keywords` | **at least 5** |\n| `create_ad` | `headlines` | 3–15 |\n| `update_ad_headlines` | `headlines` | 3–15 |\n\n**Write the full set yourself.** Do not ask the user for fifteen headlines, and\nnever promise them a smaller number — Google itself allows 3–15 headlines and\n2–4 descriptions, so this constraint is AdAgnt's and stricter than the platform's.\n\n## 3. Order of operations that actually matters\n\n- **`get_true_roas` throws without a revenue source.** Check\n  `list_revenue_sources` first; if empty, propose `connect_revenue_source`\n  (GA4, Shopify, Stripe, Klaviyo — it backfills 90 days) and wait for approval.\n  Do not call it and report the error as a finding.\n- **Keyword research before campaign creation.** `research_keywords` returns\n  real volumes, competition and bid ranges. Inventing keywords wastes the\n  user's money.\n- **Assets before campaigns** on Meta and TikTok —\n  `validate_and_prepare_*_assets`, `upload_tiktok_images`, `validate_video`.\n- **Amazon:** profile → campaign → ad group → product ad → keywords. Each step\n  needs the ID from the one before.\n\n## 4. Error codes, and what each one actually means\n\n| Code | Meaning | What to do |\n|---|---|---|\n| `INVALID_ARGS` | Arguments failed validation | Read the message — it names the field. Fix and retry **once**. |\n| `NOT_FOUND` | The named object does not exist | List first, then act on a real ID. Never guess an ID. |\n| `NO_ACCOUNT` | No connected account for that platform | Offer to connect it. |\n| `NOT_SUPPORTED` | The operation is not available on this driver | Not a bug. Say so plainly and stop. |\n| `PLATFORM_ERROR` | The ad platform itself rejected the call | Report the platform's reason. Do not retry a write. |\n| `QUOTA_EXCEEDED` | Monthly tool-call limit reached | Report the limit; `get_usage_status` shows plan and reset date. |\n\n**Known `NOT_SUPPORTED`: AppLovin on a live account.** All writes throw, plus\ncreative-set listing, asset listing and targeting search. Campaign reads and\nthe whole reporting surface work. In sandbox all 36 AppLovin tools work. Tell\nthe user which they are hitting rather than implying a bug.\n\n## 5. Writes\n\n- Every write tool is annotated **destructive**, so ChatGPT raises its own\n  permission prompt. That prompt describes intent, not values — it is not a\n  substitute for showing the user the actual budget, keywords and ad copy.\n- **Never auto-retry a write after an ambiguous failure.** That is how\n  duplicate campaigns and double spend happen. Retry only `INVALID_ARGS`, which\n  provably did nothing.\n- **Verify with an independent read.** Do not report success or failure from\n  the write's own return value alone. A write here has come back looking like a\n  failure while the campaign was in fact created — reporting that verbatim\n  would have had the user create it a second time. Call the matching list/get\n  tool and report what you observed there.\n\n## 6. Quota\n\nMetered per tool call, reads included. `get_usage_status` returns the plan,\nthe monthly limit, the reset date, and the upgrade options. When quota is hit,\ntools stop cleanly — nothing is left half-changed.\n\n## 7. Results\n\nEvery tool returns a JSON object, and the MCP layer sends it as\n`structuredContent` alongside the text. Read fields directly rather than\nre-parsing the text block.\n"
Full snapshot data
{
  "description": "The AdAgnt tool-call contract — how to resolve accounts, the hard argument limits that reject calls, what each error code means, and how quota works. Load this before calling AdAgnt tools so calls succeed first time instead of failing validation.",
  "included_files": [],
  "name": "adagnt-mcp",
  "skill_md_contents": "---\nname: adagnt-mcp\ndescription: The AdAgnt tool-call contract — how to resolve accounts, the hard argument limits that reject calls, what each error code means, and how quota works. Load this before calling AdAgnt tools so calls succeed first time instead of failing validation.\n---\n\n# AdAgnt tool-call contract\n\n348 tools across eight ad platforms. Most failed calls are not hard problems —\nthey are the same handful of avoidable mistakes. This is that list.\n\n## 1. Resolve the account before anything else\n\nTools operate on the user's *primary* account for a platform unless told\notherwise.\n\n- `list_connected_accounts` — what is connected, and which is primary\n- `get_connections_status` — whether a platform is linked and healthy\n- `switch_primary_account` — change the default (a write)\n\n**Amazon is different.** Every Amazon tool needs a **profile**, which pairs an\nadvertiser account with one marketplace. Call `amazon_list_profiles` first and\npass the profile explicitly. A US profile cannot see UK campaigns.\n\n**AppLovin** uses accounts from `applovin_list_accounts`.\n\nIf no account exists you get `NO_ACCOUNT`. In sandbox that usually means the\nplatform has not been touched yet — a demo account with 90 days of history is\ncreated the first time you use a platform, so simply proceeding will seed it.\n\n## 2. Hard argument limits that reject the call\n\nThese are enforced by schema. Getting them wrong returns `INVALID_ARGS` and\nnothing is created.\n\n| Tool | Field | Limit |\n|---|---|---|\n| `create_search_campaign` | `ad_groups[].headlines` | **exactly 15** |\n| `create_search_campaign` | `ad_groups[].descriptions` | **exactly 4** |\n| `create_search_campaign` | `ad_groups[].keywords` | **at least 5** |\n| `create_ad` | `headlines` | 3–15 |\n| `update_ad_headlines` | `headlines` | 3–15 |\n\n**Write the full set yourself.** Do not ask the user for fifteen headlines, and\nnever promise them a smaller number — Google itself allows 3–15 headlines and\n2–4 descriptions, so this constraint is AdAgnt's and stricter than the platform's.\n\n## 3. Order of operations that actually matters\n\n- **`get_true_roas` throws without a revenue source.** Check\n  `list_revenue_sources` first; if empty, propose `connect_revenue_source`\n  (GA4, Shopify, Stripe, Klaviyo — it backfills 90 days) and wait for approval.\n  Do not call it and report the error as a finding.\n- **Keyword research before campaign creation.** `research_keywords` returns\n  real volumes, competition and bid ranges. Inventing keywords wastes the\n  user's money.\n- **Assets before campaigns** on Meta and TikTok —\n  `validate_and_prepare_*_assets`, `upload_tiktok_images`, `validate_video`.\n- **Amazon:** profile → campaign → ad group → product ad → keywords. Each step\n  needs the ID from the one before.\n\n## 4. Error codes, and what each one actually means\n\n| Code | Meaning | What to do |\n|---|---|---|\n| `INVALID_ARGS` | Arguments failed validation | Read the message — it names the field. Fix and retry **once**. |\n| `NOT_FOUND` | The named object does not exist | List first, then act on a real ID. Never guess an ID. |\n| `NO_ACCOUNT` | No connected account for that platform | Offer to connect it. |\n| `NOT_SUPPORTED` | The operation is not available on this driver | Not a bug. Say so plainly and stop. |\n| `PLATFORM_ERROR` | The ad platform itself rejected the call | Report the platform's reason. Do not retry a write. |\n| `QUOTA_EXCEEDED` | Monthly tool-call limit reached | Report the limit; `get_usage_status` shows plan and reset date. |\n\n**Known `NOT_SUPPORTED`: AppLovin on a live account.** All writes throw, plus\ncreative-set listing, asset listing and targeting search. Campaign reads and\nthe whole reporting surface work. In sandbox all 36 AppLovin tools work. Tell\nthe user which they are hitting rather than implying a bug.\n\n## 5. Writes\n\n- Every write tool is annotated **destructive**, so ChatGPT raises its own\n  permission prompt. That prompt describes intent, not values — it is not a\n  substitute for showing the user the actual budget, keywords and ad copy.\n- **Never auto-retry a write after an ambiguous failure.** That is how\n  duplicate campaigns and double spend happen. Retry only `INVALID_ARGS`, which\n  provably did nothing.\n- **Verify with an independent read.** Do not report success or failure from\n  the write's own return value alone. A write here has come back looking like a\n  failure while the campaign was in fact created — reporting that verbatim\n  would have had the user create it a second time. Call the matching list/get\n  tool and report what you observed there.\n\n## 6. Quota\n\nMetered per tool call, reads included. `get_usage_status` returns the plan,\nthe monthly limit, the reset date, and the upgrade options. When quota is hit,\ntools stop cleanly — nothing is left half-changed.\n\n## 7. Results\n\nEvery tool returns a JSON object, and the MCP layer sends it as\n`structuredContent` alongside the text. Read fields directly rather than\nre-parsing the text block.\n"
}

SHA-256 of public snapshot: 814bc02a4dbf79c41e6a86ae6cee525b0ab5412edfaedd838f573b4b4b1c7359