Card Forge

The browser measures the response and enforces the card rules; the model decides what the card should show.

Back to SkillSafe
How it works

Nothing to hand? Load the — a uniform list where one static template does the work — or the , where debits and credits name their own templates through a selector field. Both replay a saved run for free. Or press to watch the validator name eleven defects — seven hard failures and four warnings — without any model call.

1

A response template is a format, and formats are checkable

Microsoft 365 Copilot renders an API plugin's data through response_semantics: a data_path to the items, citation properties, and an Adaptive Card template — static, dynamic via a selector, or both. Every one of those rules is measured here, in this tab, for free: paste any bundle and the check tells you exactly what breaks — an unknown element type, an illegal enum value, a TextBlock that will truncate on Teams mobile.

2

The sample response is the evidence, and the analyzer reads it first

Your pasted JSON is parsed locally into facts: every candidate data_path, every field with its type, a sample value and how many items carry it. Those facts power a free skeleton bundle, and they power the grounding check: a ${binding} that resolves on no sampled item, a citation property on a field that is not there, a selector value with no matching template — each is named, whether you typed it or the model did.

3

The metered pass is judgement, and it must show its work

The skeleton captures what the sample vouches for; a good card shapes it around what you want shown — static or dynamic, which fields deserve the card, guards like ${if(field, field, 'N/A')} for facts not every item carries, money through formatNumber, a layout that survives narrow viewports. That shaping is what the AI pass adds. It returns strict JSON, declares anything it could not verify, and the same validator re-checks every binding in public. Pricing is honest: a worst-case amount is reserved, only what the run uses is charged, and untouched examples replay a saved run for free. The run button is disabled before you submit if the balance cannot cover the model's minimum. Bundles are saved to your account and searchable by meaning.

4

The second pass is the real one, so it is measured against the first

Nobody gets a card right on the first try. Say what to change and the bundle in the editor rides along as the starting point — then the new bundle is diffed line by line against the one it replaced, with the check delta beside it: fails, warnings and passes, before and after. If the refine made things worse the app says so in those words and puts the previous bundle back on request. When it is right, one button copies the ai-plugin.json snippet, and two more copy the bare card and one sample item into the shapes the Adaptive Cards Designer wants — no dismantling the bundle by hand.

A derived work of @github/mcp-create-adaptive-cards: its response_semantics patterns, template-language rules and responsive-design guidance are what this forge measures and enforces. Adaptive Cards and Microsoft 365 Copilot are Microsoft technologies; this app is not affiliated with Microsoft — check the official template-language docs before relying on an exotic construct.