
Mcp Create Adaptive Cards
Define Adaptive Card static and dynamic response templates in ai-plugin.json so MCP API plugins render structured data in Microsoft 365 Copilot.
Overview
mcp-create-adaptive-cards is an agent skill for the Build phase that adds Adaptive Card response templates to MCP-based API plugins for Microsoft 365 Copilot.
Install
npx skills add https://github.com/github/awesome-copilot --skill mcp-create-adaptive-cardsWhat is this skill?
- Covers static `response_semantics.static_template` and dynamic templates with `$when` for varying API payloads
- Maps API JSON to card fields via `data_path` and property bindings (title, subtitle, etc.)
- Targets Adaptive Card schema 1.5 with Container, `$data`, and repeater patterns for list results
- Aligns with M365 Copilot API plugin and MCP-based plugin authoring workflows
- Includes edit/search codebase tooling expectations for ai-plugin.json and related manifest files
- Adaptive Card schema version 1.5 referenced in template examples
- Two template modes documented: static response templates and dynamic patterns
Adoption & trust: 8.5k installs on skills.sh; 34.6k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
Your MCP API plugin returns data Copilot can call, but users only see unstructured text or JSON instead of scannable cards.
Who is it for?
Solo builders wiring an existing HTTP API into M365 Copilot via MCP plugins who need production-quality card layouts without a separate client app.
Skip if: Teams that only need REST APIs with no Copilot surface, or plugins that intentionally return plain markdown-only answers with no structured fields.
When should I use this skill?
Add Adaptive Card response templates to MCP-based API plugins for visual data presentation in Microsoft 365 Copilot.
What do I get? / Deliverables
You ship ai-plugin.json response_semantics with static or dynamic Adaptive Card templates so Copilot renders tool results as consistent visual summaries.
- Updated ai-plugin.json response_semantics with Adaptive Card static or dynamic templates
- Property bindings from API JSON paths to card title, subtitle, and body fields
Recommended Skills
Journey fit
This skill targets the integration layer between your API, MCP plugin manifest, and M365 Copilot UI—not generic frontend or backend coding in isolation. Integrations is the canonical shelf for MCP plugin semantics, OpenAPI-shaped tools, and Copilot response presentation wiring.
How it compares
Use for Copilot plugin manifest and Adaptive Card templates—not as a replacement for building the underlying MCP server or REST API itself.
Common Questions / FAQ
Who is mcp-create-adaptive-cards for?
Indie developers and small teams publishing MCP-based API plugins to Microsoft 365 Copilot who want Adaptive Card presentation in ai-plugin.json.
When should I use mcp-create-adaptive-cards?
During Build integrations when you have tool definitions working but need static_template or dynamic card rules; also when validating Copilot launch demos that must show list or detail layouts.
Is mcp-create-adaptive-cards safe to install?
Review the Security Audits panel on this Prism page and treat manifest edits like production config—validate JSON schema and test in a dev Copilot tenant before wide rollout.
SKILL.md
READMESKILL.md - Mcp Create Adaptive Cards
````prompt --- mode: 'agent' tools: ['changes', 'search/codebase', 'edit/editFiles', 'problems'] description: 'Add Adaptive Card response templates to MCP-based API plugins for visual data presentation in Microsoft 365 Copilot' model: 'gpt-4.1' tags: [mcp, adaptive-cards, m365-copilot, api-plugin, response-templates] --- # Create Adaptive Cards for MCP Plugins Add Adaptive Card response templates to MCP-based API plugins to enhance how data is presented visually in Microsoft 365 Copilot. ## Adaptive Card Types ### Static Response Templates Use when API always returns items of the same type and format doesn't change often. Define in `response_semantics.static_template` in ai-plugin.json: ```json { "functions": [ { "name": "GetBudgets", "description": "Returns budget details including name and available funds", "capabilities": { "response_semantics": { "data_path": "$", "properties": { "title": "$.name", "subtitle": "$.availableFunds" }, "static_template": { "type": "AdaptiveCard", "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.5", "body": [ { "type": "Container", "$data": "${$root}", "items": [ { "type": "TextBlock", "text": "Name: ${if(name, name, 'N/A')}", "wrap": true }, { "type": "TextBlock", "text": "Available funds: ${if(availableFunds, formatNumber(availableFunds, 2), 'N/A')}", "wrap": true } ] } ] } } } } ] } ``` ### Dynamic Response Templates Use when API returns multiple types and each item needs a different template. **ai-plugin.json configuration:** ```json { "name": "GetTransactions", "description": "Returns transaction details with dynamic templates", "capabilities": { "response_semantics": { "data_path": "$.transactions", "properties": { "template_selector": "$.displayTemplate" } } } } ``` **API Response with Embedded Templates:** ```json { "transactions": [ { "budgetName": "Fourth Coffee lobby renovation", "amount": -2000, "description": "Property survey for permit application", "expenseCategory": "permits", "displayTemplate": "$.templates.debit" }, { "budgetName": "Fourth Coffee lobby renovation", "amount": 5000, "description": "Additional funds to cover cost overruns", "expenseCategory": null, "displayTemplate": "$.templates.credit" } ], "templates": { "debit": { "type": "AdaptiveCard", "version": "1.5", "body": [ { "type": "TextBlock", "size": "medium", "weight": "bolder", "color": "attention", "text": "Debit" }, { "type": "FactSet", "facts": [ { "title": "Budget", "value": "${budgetName}" }, { "title": "Amount", "value": "${formatNumber(amount, 2)}" }, { "title": "Category", "value": "${if(expenseCategory, expenseCategory, 'N/A')}" }, { "title": "Description", "value": "${if(description, description, 'N/A')}" } ] } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json" }, "credit": { "type": "AdaptiveCard", "version": "1.5", "body": [ { "type": "TextBlock", "size