Install
$ agentstack add skill-adform-agentic-skills-adform-creative-discrepancy-audit ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Adform creative-versus-served discrepancy audit
Compares the creatives assigned in campaign setup against the published and served ad state, surfacing mismatches that indicate trafficking errors. Read-only.
Connection & tooling
Runs on the Adform GraphQL MCP. Use graphql_execute to run queries. Use graphql_introspect on Ad and PublishedAd to discover available fields. Keep calls sequential (~1–2s apart).
Step 1 — List assigned ads on the campaign
{
adsByCampaignId(
campaignId: "3993873"
pagination: { offset: 0, limit: 50 }
) {
ads {
id { uuid id }
name batch adType commercialType
size { width height }
publishStatus active deleted
}
totalCount
}
}
Each ad's id object gives both the UUID and the integer ID. Note publishStatus — published, notPublished, publishedButChanged — and active flag.
Step 2 — Get the published state per ad
The published lookup uses the integer ID and adType, not the UUID:
{ publishedAdById(id: "12345", adType: creative) { id { uuid id } name adType commercialType contentType size { width height } active deleted } }
Compare published name, size, and adType against the assigned values. Flag any divergence between the assigned ad and the published version.
Step 3 — Inspect rotation members (for grouped ads)
{ adMembersByUuid(uuid: "ad-uuid-here") { adId { uuid id } name adType commercialType size { width height } } }
Confirm that members and their weights match the intended rotation configuration. Flag unexpected members or active members with zero weight.
Presenting
Discrepancy table: ad name and UUID, assigned values (name, size, type, publish status), published values, and the mismatch reason. Lead with serving mismatches and any unauthorised substitutions as these carry the highest risk, then rotation and weight anomalies. Each row is an action item for the adops owner.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: adform
- Source: adform/agentic-skills
- License: MIT
- Homepage: https://site.adform.com
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.