[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69B57RE62W6TP2G2SEFM048":3,"skill-same:01M69B57RE62W6TP2G2SEFM048":66},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":41,"ownerHtmlUrl":42,"ownerBlogUrl":43,"ownerDescription":44,"updatedAt":45,"install":46,"resources":59},"01M69B57RE62W6TP2G2SEFM048","membership-card-png",null,"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\u002Fstolen\u002Fdamaged 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.","microsoft\u002Fnew-copilot-studio-tech-guide","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69B4WAHGNC7KVW5MVXCGRYK",21,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide\u002Fblob\u002Fmain\u002Fsample\u002Farchive\u002Fstore-solution\u002Fskills\u002Fmembership-card-png\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30],"membership card png","MCP","image","python","2026-11-10 10:12:30",false,"---\nname: membership-card-png\ndescription: 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\u002Fstolen\u002Fdamaged 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.\n---\n\n# BlastPass Membership Card PNG Generator\n\nThis skill produces a **digital BlastPass membership card** as a shareable image by\nrunning the **bundled `card_png.py` script**. It is the self-serve companion to\n`membership-card-pdf`: when a member reissues a lost, stolen, or damaged card, you\nmint a new serial via the Membership MCP and hand the member a PNG to save to their\nphone **while the physical card ships**.\n\nYou do **not** write any Python. You take the member record you already pulled from\nthe **Membership MCP** (`get_membership`) and the **new serial** returned by\n`reissue_card`, then **run the bundled script** with those values as CLI flags.\n\nNever invent a member, tier, or serial number — every value on the card comes from\nthe MCP results. The script only *draws* the card; it does not decide anything.\n\n## When to use\n\nUse this skill in the **self-serve card reissue** scenario, after:\n\n1. `get_membership(customer_id)` confirmed the member and returned their details.\n2. The member verified their identity (last 4 of the console serial).\n3. `reissue_card(customer_id, reason)` deactivated the old card and returned a\n   `new_card_serial`.\n\nUse the PDF skill instead when an in-store associate needs a **printable** card.\nUse this PNG skill when the member needs an **on-screen \u002F saveable** card.\n\n## Inputs (map MCP results → CLI flags)\n\n| Script flag | Source |\n| --- | --- |\n| `--member-name` | `get_membership.member_name` |\n| `--member-id` | `get_membership.customer_id` |\n| `--tier` | `get_membership.tier` (e.g. `\"BlastPass Plus Extra\"`) |\n| `--tier-code` | `get_membership.tier_code` (`plus` \\| `extra` \\| `mega`) — drives accent color & perks |\n| `--card-serial` | **`reissue_card.new_card_serial`** (the freshly minted card; falls back to `get_membership.card_serial` if not a reissue) |\n| `--console-serial` | `get_membership.console_serial` |\n| `--member-since` | `get_membership.activation_date` |\n| `--valid-through` | `get_membership.term_end_date` |\n| `--out` | optional output path (default `blastpass_card.png`) |\n\nThe `--tier-code` selects the card's accent color, header badge, and the perks line\nprinted beneath the card:\n\n- `plus` → blue, \"PLUS\", 5% off + 10 BlastPoints\u002F$1\n- `extra` → purple, \"PLUS EXTRA\", 10% off + 20% BlastPoints bonus\n- `mega` → orange, \"MEGA!!!\", 15% off + 50% BlastPoints + day-one exclusives\n\n## Workflow\n\n### 1. Gather the confirmed values\n\nFrom `get_membership` (tier, dates, console serial, name, id) and from\n`reissue_card` (`new_card_serial`). Do **not** pass any value the MCP didn't return.\n\n### 2. Run the bundled script\n\nPass the confirmed values as flags. The script writes `blastpass_card.png` to the\nworking directory (or `--out`) and prints a one-line confirmation:\n\n```bash\npython3 card_png.py \\\n    --member-name \"Jordan Pixel\" \\\n    --member-id MEGA-BLAST-1024 \\\n    --tier \"BlastPass Plus Extra\" \\\n    --tier-code extra \\\n    --card-serial BLAST-A1B2-1024 \\\n    --console-serial OMEGA-7F3A-1024 \\\n    --member-since 2026-02-26 \\\n    --valid-through 2027-02-26\n```\n\n`--card-serial` must be the **new** serial from `reissue_card` — never the old\n(now-deactivated) one.\n\n### 3. Hand back the image\n\nTell the member their new digital card is ready (`blastpass_card.png`), read back\nthe **new card serial** and tier so they can confirm it, and remind them the old\ncard is now deactivated and the physical replacement ships in ~7 days.\n\n## Notes\n\n- The bundled script is `card_png.py`, validated against the four mock members in\n  the Membership MCP. It depends only on `matplotlib` (available in the runtime).\n- The card serial shown is the **new** one from `reissue_card`; the old serial is\n  already deactivated server-side, so it must never appear on the card.\n- The barcode is decorative (deterministic from the card serial) — it is not a real\n  scannable symbology.\n- All data is mock; the card is for demo purposes only.\n","# BlastPass Membership Card PNG Generator\n\nThis skill produces a **digital BlastPass membership card** as a shareable image by\nrunning the **bundled `card_png.py` script**. It is the self-serve companion to\n`membership-card-pdf`: when a member reissues a lost, stolen, or damaged card, you\nmint a new serial via the Membership MCP and hand the member a PNG to save to their\nphone **while the physical card ships**.\n\nYou do **not** write any Python. You take the member record you already pulled from\nthe **Membership MCP** (`get_membership`) and the **new serial** returned by\n`reissue_card`, then **run the bundled script** with those values as CLI flags.\n\nNever invent a member, tier, or serial number — every value on the card comes from\nthe MCP results. The script only *draws* the card; it does not decide anything.\n\n## When to use\n\nUse this skill in the **self-serve card reissue** scenario, after:\n\n1. `get_membership(customer_id)` confirmed the member and returned their details.\n2. The member verified their identity (last 4 of the console serial).\n3. `reissue_card(customer_id, reason)` deactivated the old card and returned a\n   `new_card_serial`.\n\nUse the PDF skill instead when an in-store associate needs a **printable** card.\nUse this PNG skill when the member needs an **on-screen \u002F saveable** card.\n\n## Inputs (map MCP results → CLI flags)\n\n| Script flag | Source |\n| --- | --- |\n| `--member-name` | `get_membership.member_name` |\n| `--member-id` | `get_membership.customer_id` |\n| `--tier` | `get_membership.tier` (e.g. `\"BlastPass Plus Extra\"`) |\n| `--tier-code` | `get_membership.tier_code` (`plus` \\| `extra` \\| `mega`) — drives accent color & perks |\n| `--card-serial` | **`reissue_card.new_card_serial`** (the freshly minted card; falls back to `get_membership.card_serial` if not a reissue) |\n| `--console-serial` | `get_membership.console_serial` |\n| `--member-since` | `get_membership.activation_date` |\n| `--valid-through` | `get_membership.term_end_date` |\n| `--out` | optional output path (default `blastpass_card.png`) |\n\nThe `--tier-code` selects the card's accent color, header badge, and the perks line\nprinted beneath the card:\n\n- `plus` → blue, \"PLUS\", 5% off + 10 BlastPoints\u002F$1\n- `extra` → purple, \"PLUS EXTRA\", 10% off + 20% BlastPoints bonus\n- `mega` → orange, \"MEGA!!!\", 15% off + 50% BlastPoints + day-one exclusives\n\n## Workflow\n\n### 1. Gather the confirmed values\n\nFrom `get_membership` (tier, dates, console serial, name, id) and from\n`reissue_card` (`new_card_serial`). Do **not** pass any value the MCP didn't return.\n\n### 2. Run the bundled script\n\nPass the confirmed values as flags. The script writes `blastpass_card.png` to the\nworking directory (or `--out`) and prints a one-line confirmation:\n\n```bash\npython3 card_png.py \\\n    --member-name \"Jordan Pixel\" \\\n    --member-id MEGA-BLAST-1024 \\\n    --tier \"BlastPass Plus Extra\" \\\n    --tier-code extra \\\n    --card-serial BLAST-A1B2-1024 \\\n    --console-serial OMEGA-7F3A-1024 \\\n    --member-since 2026-02-26 \\\n    --valid-through 2027-02-26\n```\n\n`--card-serial` must be the **new** serial from `reissue_card` — never the old\n(now-deactivated) one.\n\n### 3. Hand back the image\n\nTell the member their new digital card is ready (`blastpass_card.png`), read back\nthe **new card serial** and tier so they can confirm it, and remind them the old\ncard is now deactivated and the physical replacement ships in ~7 days.\n\n## Notes\n\n- The bundled script is `card_png.py`, validated against the four mock members in\n  the Membership MCP. It depends only on `matplotlib` (available in the runtime).\n- The card serial shown is the **new** one from `reissue_card`; the old serial is\n  already deactivated server-side, so it must never appear on the card.\n- The barcode is decorative (deterministic from the card serial) — it is not a real\n  scannable symbology.\n- All data is mock; the card is for demo purposes only.\n",{"name":5,"description":7},"main","a2c7726117cccf8b8e09a45674a5b75266117f03","sample\u002Farchive\u002Fstore-solution\u002Fskills\u002Fmembership-card-png",18,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide","https:\u002F\u002Fmicrosoft.github.io\u002Fnew-copilot-studio-tech-guide\u002F","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-03 16:16:31",{"source":8,"skillName":5,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add microsoft\u002Fnew-copilot-studio-tech-guide --skill membership-card-png",{"tool":52,"command":53},"bunx","bunx skills add microsoft\u002Fnew-copilot-studio-tech-guide --skill membership-card-png",{"tool":55,"command":56},"pnpm","pnpm dlx skills add microsoft\u002Fnew-copilot-studio-tech-guide --skill membership-card-png","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide\u002Fblob\u002Fmain\u002Fsample\u002Farchive\u002Fstore-solution\u002Fskills\u002Fmembership-card-png\u002FSKILL.md",true,[60],{"path":61,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":64,"sourceHtmlUrl":65},"card_png.py","SCRIPT","脚本",6809,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide\u002Fblob\u002Fmain\u002Fsample\u002Farchive\u002Fstore-solution\u002Fskills\u002Fmembership-card-png\u002Fcard_png.py",[67,80,89,99,106,113],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":76,"publishedAt":31},"01M69B5V0891MZX3575Z1CBH7B","slip-pdf-generator","Generate a printable BlastBox return \u002F RMA \u002F exchange slip as a PDF for the associate to hand to the customer. Use at the end of a return, warranty swap, membership cancellation, or upgrade once all amounts are final. The skill runs a bundled Python script that renders the confirmed slip values into a real PDF file.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide\u002Fblob\u002Fmain\u002Fsample\u002Fsolution\u002Fsrc\u002FBlastBoxAgents\u002Fbotcomponents\u002Fcra24a45_skill_md_d925ad573675\u002Ffiledata\u002FSKILL.md",[73],{"categoryNo":74,"categoryName":75,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[77,78,79,30],"slip pdf generator","PDF","customer",{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":31},"01M69B5SK7S95EJDCDVEH5CR5A","points-reconciliation","Reconcile a customer's BlastPoints loyalty balance after a complex visit (purchases, returns, promo multipliers, expiry) and convert the net balance to store credit. Use when an associate asks about a member's points, or after a return that should claw back previously earned points. The skill runs a bundled Python script that applies the base earn rate, promo multipliers, tier bonus, clawbacks, and expiry, then prints a points ledger and the redeemable store-credit value.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide\u002Fblob\u002Fmain\u002Fsample\u002Fsolution\u002Fsrc\u002FBlastBoxAgents\u002Fbotcomponents\u002Fcra24a45_skill_md_4e6ebf925ae8\u002Ffiledata\u002FSKILL.md",[],[87,88,79,30],"points reconciliation","claw",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":96,"publishedAt":31},"01M69B5R4AKKQ3E2Q7J67VQF9W","prorated-refund-calculator","Calculate the exact prorated refund when a customer cancels a BlastPass membership, and the net settlement when a defective unit is traded up to a pricier model. Use after the Store Policy Agent confirms the refund rule and the Membership MCP has returned the membership details. The skill runs a bundled Python script so the arithmetic is exact.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide\u002Fblob\u002Fmain\u002Fsample\u002Fsolution\u002Fsrc\u002FBlastBoxAgents\u002Fbotcomponents\u002Fcra24a45_skill_md_30aa9a7b2b7c\u002Ffiledata\u002FSKILL.md",[95],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[97,28,79,98,30],"prorated refund calculator","policy",{"skillNo":100,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":105,"publishedAt":31},"01M69B5NT2G4A8E8BP7Q04APSC","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide\u002Fblob\u002Fmain\u002Fsample\u002Fsolution\u002Fsrc\u002FBlastBoxAgents\u002Fbotcomponents\u002FDefault_draft_IsBewO.file.SKILL.md\u002Ffiledata\u002FSKILL.md",[103,104],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[27,30,29,28],{"skillNo":107,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":112,"publishedAt":31},"01M69B5M5R4NDD56YXG27NMA2J","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide\u002Fblob\u002Fmain\u002Fsample\u002Farchive\u002Fstore-solution\u002Fsrc\u002Fbotcomponents\u002FDefault_draft_IsBewO.file.SKILL.md\u002Ffiledata\u002FSKILL.md",[110,111],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[27,30,29,28],{"skillNo":114,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":118,"publishedAt":31},"01M69B5JA3J0EZCP7VJHXX6F4M","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fnew-copilot-studio-tech-guide\u002Fblob\u002Fmain\u002Fsample\u002Farchive\u002Fstore-solution\u002Fskills\u002Fslip-pdf-generator\u002FSKILL.md",[117],{"categoryNo":74,"categoryName":75,"taxonomyType":21,"taxonomyTypeDesc":22},[77,78,79,30]]