Programme health check
Skill bobberrisford/affiliatemcp/skills/programme-health-check
Use this skill for a one-off diagnostic across every available data operation for a brand, typically at account handover or kick-off: is the connection healthy, what can we actually read, is data flowing, and where are the gaps. It is the "audit the account before we start" pass, not a recurring report. Trigger on: "Audit Acme's programme", "Health-check the Acme account", "Run a full check on [brand]", "We just won Acme, what can we see?", "Is the Acme connection working end to end?".From its SKILL.md
npx -y skills add bobberrisford/affiliatemcp --skill programme-health-checkAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.3 KB, as published. Nobody here has run it
Operating instructions
You are running a one-off health check on a brand's programme: confirm the
connection works, map what each bound network can read, exercise every supported
read operation once, and report data presence and gaps. This is a handover or
kick-off diagnostic. For the recurring "how is the brand doing" view use
programme-performance-report; for the week-over-week scan use
programme-anomaly-watch.
Step 1 — resolve the brand
If the user did not name a brand, ask which one. Do not guess.
Call affiliate_resolve_brand. If the user named a network, pass { network: "<slug>" } to filter; otherwise call with no arguments and filter the result to the brand the user named.
The response is an array of { brand, network, networkBrandId }. Reduce it to the bindings whose brand matches the user's brand. If none remain, tell the user the brand is not registered, suggest affiliate_resolve_brand with no args to see what is, and stop.
Step 2 — confirm the connection and read capabilities
For the brand's bindings, confirm health and capability before pulling data:
- Call
affiliate_run_diagnosticfor the configured networks, oraffiliate_<network>_verify_authper binding, to confirm credentials work. Awin advertiser:affiliate_awin-advertiser_verify_auth. - Call
affiliate_list_networksonce and retain each binding's metadata: networkclaimStatus,knownLimitations, and any per-operation claim-status overrides. Use the diagnostic result'soperationsobject as the source of truth for supported / unsupported operations.
If auth fails for a binding, record it as a red flag and skip that binding's data pulls; do not retry around a failed credential.
Step 3 — exercise each supported read operation once
For every binding, call each brand-scoped data operation the diagnostic says the
network supports, once, over a recent window (default last 30 days, ending
today). Skip operations the network does not support and record them as "not
supported" rather than calling them. Tool names follow
affiliate_<network>_<operation>. At minimum, cover these when supported:
- Programmes:
affiliate_awin-advertiser_list_programmes({ brand }) - Per-publisher performance:
affiliate_awin-advertiser_get_programme_performance({ brand, from, to }) - Roster:
affiliate_awin-advertiser_list_media_partners({ brand }) - Transactions (where supported):
affiliate_awin-advertiser_list_transactions({ brand, from, to })
Pass brand exactly as it came back from affiliate_resolve_brand. For each
call record three outcomes: it succeeded with data, it succeeded but returned
nothing, or it failed (capture the verbatim envelope: network, operation,
message, httpStatus). A success with no rows is a finding, not a failure.
Step 4 — present the health check
Output in this order, per network binding:
- Connection: auth result and the network's
claimStatus(production / partial / experimental / unsupported). - Capability matrix: each operation marked supported or not supported, and for supported ones whether the call returned data, returned empty, or failed.
- Data presence: a one-line note per successful operation — programme count, partner count by status, recent transaction count, whether any performance rows came back. Numbers only where the data shows them.
- Known limitations: surface each binding's
knownLimitationsverbatim (for example normalised-zero clicks, missing reversal reasons) so they are visible before the account team relies on a metric. - Tracking-link check (manual): note that link tracking is not verified by
this skill. If the operator wants live link verification, point them at the
shipped
audit-affiliate-linksskill; do not claim this check ran. - Red flags and gaps: failed auth, unsupported core operations, empty results that look wrong for a live programme, and any verbatim errors.
Close with a short plain-language verdict: is the account ready to report on, or are there gaps to resolve first.
Matter-of-fact tone, UK spelling, no hype. Keep the matrix compact.
Constraints
- Read-only diagnostic. It never changes configuration or contacts a network beyond the read calls above.
- Distinguish "not supported" (the adapter has no such operation) from "empty" (the call ran and returned nothing) from "failed" (an error envelope). Never collapse these into one state.
- Never invent figures or capabilities. An unsupported operation is reported as unsupported, not as zero data.
- Surface
knownLimitationsrather than hiding them; a healthy connection with a known metric gap is still a gap the account team must see. - Do not cite a tracking-link check as having run. Link verification is the
separate
audit-affiliate-linksworkflow.