ワンクリックで
adaptive-card
Add Adaptive Card response templates to MCP-based API plugins for visual data presentation in Microsoft 365 Copilot
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Add Adaptive Card response templates to MCP-based API plugins for visual data presentation in Microsoft 365 Copilot
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
Authors and validates Microsoft Copilot Studio agent definitions (.mcs.yml) for the agents under src/agents/ in this M365 masterclass repo. Covers the topic YAML schema, the prebuilt entity catalog, Adaptive Card nodes, conversation design, and the language-server verification loop that settles "is this valid Copilot Studio YAML?" without guessing. Use when editing a topic, adding a Question or Adaptive Card, picking an entity, or when YAML might be Power Apps syntax instead of Copilot Studio syntax. Trigger phrases: copilot studio yaml, mcs.yml, topic yaml, AdaptiveDialog, Question node, AdaptiveCardPrompt, adaptive card, prebuilt entity, DatePrebuiltEntity, slot filling, trigger queries, is this valid copilot studio yaml, powerapps yaml, agent topic, onboarding agent, travel agent, food stock buddy.
Draft a concise sales follow-up email after a customer meeting or call. Use when a Northwind Traders seller asks to follow up, recap next steps, thank a customer, confirm an order, or send a note after a demo or discovery call.
Help a seller respond to common customer objections and push-back about price, timing, budget, or competitors during an active deal. Use when the user asks how to reply to, handle, or overcome a customer objection, a "too expensive" or "not the right time" comment, or a competitor comparison.
Research and summarize a customer account before a sales call. Use when a seller asks for an account brief, account summary, account research, pre-call prep, or a quick briefing on a Northwind Traders customer before a meeting.
Automate creation of Azure DevOps workload identity federation service connections with deployment metadata from deploy.json. Use when users need to create or delete Azure service connections with workload identity federation for secure, passwordless authentication.
Repo-local brand-voice checker for this Microsoft 365 / Copilot Studio & Copilot Cowork masterclass. Audits and fixes Markdown in demos/ and labs/ against the four house rules (no em dashes, quoted Mermaid labels, 4-sentence paragraph cap, topic-specific slash-command tables). Run after writing or significantly editing any readme.md or guide. The create-class master skill discovers this skill by globbing .claude/skills/brand-voice-*. Trigger phrases: brand voice check, brand-voice-copilot, quality check readme, fix em dashes, check mermaid labels, cowork brand voice, audit readme, polish demos readme.
SOC 職業分類に基づく
| name | adaptive-card |
| description | Add Adaptive Card response templates to MCP-based API plugins for visual data presentation in Microsoft 365 Copilot |
Add Adaptive Card response templates to MCP-based API plugins to enhance how data is presented visually in Microsoft 365 Copilot.
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:
{
"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
}
]
}
]
}
}
}
}
]
}
Use when API returns multiple types and each item needs a different template.
ai-plugin.json configuration:
{
"name": "GetTransactions",
"description": "Returns transaction details with dynamic templates",
"capabilities": {
"response_semantics": {
"data_path": "$.transactions",
"properties": {
"template_selector": "$.displayTemplate"
}
}
}
}
API Response with Embedded Templates:
{
"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": "medium",
"weight": "bolder",
"color": "good",
"text": "Credit"
},
{
"type": "FactSet",
"facts": [
{
"title": "Budget",
"value": "${budgetName}"
},
{
"title": "Amount",
"value": "${formatNumber(amount, 2)}"
},
{
"title": "Description",
"value": "${if(description, description, 'N/A')}"
}
]
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json"
}
}
}
Use static template as default when item doesn't have template_selector or when value doesn't resolve.
{
"capabilities": {
"response_semantics": {
"data_path": "$.items",
"properties": {
"title": "$.name",
"template_selector": "$.templateId"
},
"static_template": {
"type": "AdaptiveCard",
"version": "1.5",
"body": [
{
"type": "TextBlock",
"text": "Default: ${name}",
"wrap": true
}
]
}
}
}
}
JSONPath query indicating where data resides in API response:
"data_path": "$" // Root of response
"data_path": "$.results" // In results property
"data_path": "$.data.items"// Nested path
Map response fields for Copilot citations:
"properties": {
"title": "$.name", // Citation title
"subtitle": "$.description", // Citation subtitle
"url": "$.link" // Citation link
}
Property on each item indicating which template to use:
"template_selector": "$.displayTemplate"
{
"type": "TextBlock",
"text": "${if(field, field, 'N/A')}" // Show field or 'N/A'
}
{
"type": "TextBlock",
"text": "${formatNumber(amount, 2)}" // Two decimal places
}
{
"type": "Container",
"$data": "${$root}", // Break to root context
"items": [ ... ]
}
{
"type": "Image",
"url": "${imageUrl}",
"$when": "${imageUrl != null}" // Only show if imageUrl exists
}
{
"type": "TextBlock",
"text": "Text content",
"size": "medium", // small, default, medium, large, extraLarge
"weight": "bolder", // lighter, default, bolder
"color": "attention", // default, dark, light, accent, good, warning, attention
"wrap": true
}
{
"type": "FactSet",
"facts": [
{
"title": "Label",
"value": "Value"
}
]
}
{
"type": "Image",
"url": "https://example.com/image.png",
"size": "medium", // auto, stretch, small, medium, large
"style": "default" // default, person
}
{
"type": "Container",
"$data": "${items}", // Iterate over array
"items": [
{
"type": "TextBlock",
"text": "${name}"
}
]
}
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [ ... ]
},
{
"type": "Column",
"width": "stretch",
"items": [ ... ]
}
]
}
{
"type": "Action.OpenUrl",
"title": "View Details",
"url": "https://example.com/item/${id}"
}
Validate cards in:
ai-plugin.json:
{
"functions": [
{
"name": "SearchProjects",
"description": "Search for projects with status and details",
"capabilities": {
"response_semantics": {
"data_path": "$.projects",
"properties": {
"title": "$.name",
"subtitle": "$.status",
"url": "$.projectUrl"
},
"static_template": {
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.5",
"body": [
{
"type": "Container",
"$data": "${$root}",
"items": [
{
"type": "TextBlock",
"size": "medium",
"weight": "bolder",
"text": "${if(name, name, 'Untitled Project')}",
"wrap": true
},
{
"type": "FactSet",
"facts": [
{
"title": "Status",
"value": "${status}"
},
{
"title": "Owner",
"value": "${if(owner, owner, 'Unassigned')}"
},
{
"title": "Due Date",
"value": "${if(dueDate, dueDate, 'Not set')}"
},
{
"title": "Budget",
"value": "${if(budget, formatNumber(budget, 2), 'N/A')}"
}
]
},
{
"type": "TextBlock",
"text": "${if(description, description, 'No description')}",
"wrap": true,
"separator": true
}
]
}
],
"actions": [
{
"type": "Action.OpenUrl",
"title": "View Project",
"url": "${projectUrl}"
}
]
}
}
}
}
]
}
Ask the user:
Then generate:
{
"type": "Container",
"$data": "${items}",
"items": [
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
{
"type": "Image",
"url": "${thumbnailUrl}",
"size": "small",
"$when": "${thumbnailUrl != null}"
}
]
},
{
"type": "Column",
"width": "stretch",
"items": [
{
"type": "TextBlock",
"text": "${title}",
"weight": "bolder",
"wrap": true
}
]
}
]
}
]
}
{
"type": "TextBlock",
"text": "${status}",
"color": "${if(status == 'Completed', 'good', if(status == 'In Progress', 'attention', 'default'))}"
}
{
"type": "TextBlock",
"text": "$${formatNumber(amount, 2)}"
}