Skill v1.0.0
currentTrusted Publisher100/100version: "1.0.0" name: membership-card-png description: Generate a digital BlastPass membership card as a PNG image by running the bundled card_png.py script. Use when a member self-serves a lost/stolen/damaged card replacement, or any time a card needs to be shown on screen (vs. printed). The skill takes the member details returned by the Membership MCP (get_membership) plus the new_card_serial returned by reissue_card and passes them as command-line flags to a bundled Python (matplotlib) script that renders a CR80-sized membership card to a real PNG. It only renders the card from already-retrieved values — it never looks anything up or invents data.
BlastPass Membership Card PNG Generator
This skill produces a digital BlastPass membership card as a shareable image by running the bundled `card_png.py` script. It is the self-serve companion to membership-card-pdf: when a member reissues a lost, stolen, or damaged card, you mint a new serial via the Membership MCP and hand the member a PNG to save to their phone while the physical card ships.
You do not write any Python. You take the member record you already pulled from the Membership MCP (get_membership) and the new serial returned by reissue_card, then run the bundled script with those values as CLI flags.
Never invent a member, tier, or serial number — every value on the card comes from the MCP results. The script only draws the card; it does not decide anything.
When to use
Use this skill in the self-serve card reissue scenario, after:
get_membership(customer_id)confirmed the member and returned their details.- The member verified their identity (last 4 of the console serial).
reissue_card(customer_id, reason)deactivated the old card and returned a
new_card_serial.
Use the PDF skill instead when an in-store associate needs a printable card. Use this PNG skill when the member needs an on-screen / saveable card.
Inputs (map MCP results → CLI flags)
| Script flag | Source | |||
|---|---|---|---|---|
--member-name | get_membership.member_name | |||
--member-id | get_membership.customer_id | |||
--tier | get_membership.tier (e.g. "BlastPass Plus Extra") | |||
--tier-code | get_membership.tier_code (plus \ | extra \ | mega) — drives accent color & perks | |
--card-serial | `reissue_card.new_card_serial` (the freshly minted card; falls back to get_membership.card_serial if not a reissue) | |||
--console-serial | get_membership.console_serial | |||
--member-since | get_membership.activation_date | |||
--valid-through | get_membership.term_end_date | |||
--out | optional output path (default blastpass_card.png) |
The --tier-code selects the card's accent color, header badge, and the perks line printed beneath the card:
plus→ blue, "PLUS", 5% off + 10 BlastPoints/$1extra→ purple, "PLUS EXTRA", 10% off + 20% BlastPoints bonusmega→ orange, "MEGA!!!", 15% off + 50% BlastPoints + day-one exclusives
Workflow
1. Gather the confirmed values
From get_membership (tier, dates, console serial, name, id) and from reissue_card (new_card_serial). Do not pass any value the MCP didn't return.
2. Run the bundled script
Pass the confirmed values as flags. The script writes blastpass_card.png to the working directory (or --out) and prints a one-line confirmation:
python3 card_png.py \--member-name "Jordan Pixel" \--member-id MEGA-BLAST-1024 \--tier "BlastPass Plus Extra" \--tier-code extra \--card-serial BLAST-A1B2-1024 \--console-serial OMEGA-7F3A-1024 \--member-since 2026-02-26 \--valid-through 2027-02-26
--card-serial must be the new serial from reissue_card — never the old (now-deactivated) one.
3. Hand back the image
Tell the member their new digital card is ready (blastpass_card.png), read back the new card serial and tier so they can confirm it, and remind them the old card is now deactivated and the physical replacement ships in ~7 days.
Notes
- The bundled script is
card_png.py, validated against the four mock members in
the Membership MCP. It depends only on matplotlib (available in the runtime).
- The card serial shown is the new one from
reissue_card; the old serial is
already deactivated server-side, so it must never appear on the card.
- The barcode is decorative (deterministic from the card serial) — it is not a real
scannable symbology.
- All data is mock; the card is for demo purposes only.