adaptive-cards-mcp
This MCP server enables AI assistants to generate, validate, optimize, and transform Microsoft Adaptive Cards for Teams, Outlook, Copilot, Webex, and other surfaces.
Core Capabilities:
Generate Cards: Convert natural language descriptions or structured data (JSON/CSV) into valid Adaptive Card v1.6 JSON, targeting specific hosts and intents (approval, form, notification, dashboard, etc.) with light/dark theme support
Validate Cards: Schema validation against v1.6, accessibility scoring (up to 100/100), host compatibility checks, and suggested fixes; strict mode treats warnings as errors
Convert Data to Cards: Automatically transform structured data (JSON arrays, CSV, key-value objects) into the optimal layout — Table, FactSet, Chart (bar/line/pie/donut), List, or Carousel
Optimize Cards: Enhance cards for accessibility, performance, compact layout, modern design, and readability
Templatize Cards: Convert static cards into reusable templates with
${expression}data binding for dynamic contentTransform Cards: Upgrade/downgrade schema versions (v1.3–1.6), apply host-specific constraints, or flatten nested elements
Suggest Layouts: Recommend optimal layout patterns based on description, target host, and interactivity requirements
Multi-Step Workflows: Run chained pipelines (generate → validate → optimize → template → transform) in a single call, plus 3 guided prompt workflows: create, review, and convert-data-to-card
Host Support: Targets 7 hosts — Teams (v1.6), Outlook (v1.4), Web Chat (v1.6), Windows (v1.6), Viva Connections (v1.4), Webex (v1.3), and Generic (v1.6) — with automatic version downgrading and removal of unsupported features per host.
Additional Features:
Returns
cardIdreferences so cards can be reused across subsequent tool calls within a sessionIntegrates with Claude, GitHub Copilot, Cursor, Windsurf, Microsoft 365 Copilot, Copilot Studio, and OpenAI ChatGPT via simple
npxcommandsAvailable as an npm library for programmatic use in bots, APIs, and CI pipelines
Provides specialized tools to transform and downgrade Adaptive Cards for Cisco Webex, ensuring compatibility with version 1.3 constraints by removing unsupported elements such as Tables and specific Action types.
Adaptive Cards MCP
An MCP server that helps AI assistants generate valid, accessible Adaptive Cards for Teams, Outlook, Copilot, and other Microsoft surfaces. 9 tools, 3 guided workflows, 924 tests.
Blog: I Built an MCP Server That Makes AI 10x Better at Adaptive Cards
Demo
Related MCP server: aifmt
Quick Start
No install needed — npx downloads and runs it automatically.
1. Add to your AI assistant
claude mcp add adaptive-cards-mcp -- npx adaptive-cards-mcpAdd to .vscode/mcp.json:
{
"servers": {
"adaptive-cards-mcp": {
"command": "npx",
"args": ["adaptive-cards-mcp"]
}
}
}Add to .cursor/mcp.json:
{
"mcpServers": {
"adaptive-cards-mcp": {
"command": "npx",
"args": ["adaptive-cards-mcp"]
}
}
}Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"adaptive-cards-mcp": {
"command": "npx",
"args": ["adaptive-cards-mcp"]
}
}
}TRANSPORT=sse PORT=3001 npx adaptive-cards-mcp
# With auth enabled
TRANSPORT=sse MCP_API_KEY=your-secret npx adaptive-cards-mcpOpen Copilot Studio → your agent → Tools → Add a tool → New tool → Model Context Protocol
Enter your MCP server URL (e.g.,
https://your-server.azurewebsites.net/sse)Select the tools to expose
Enable Developer mode in ChatGPT settings
Go to Settings → Connectors → Create
Enter your MCP server HTTPS URL
2. Start using it
Just ask your AI assistant in natural language:
> Create an expense approval card for Teams> Convert this JSON data into an Adaptive Card table> Validate this card and fix accessibility issues> Make this card work on Outlook (v1.4)The AI picks the right tools, generates a valid card, validates it, and returns production-ready JSON you can paste directly into the Adaptive Cards Designer to preview.
Usage
Natural language (recommended)
Describe what you need — the AI figures out which tools to call:
Approvals and workflows:
> Create an expense approval card for Teams with requester photo, amount,
category, line items, and approve/reject/comment buttons> Build a time-off request card — employee name, dates, remaining PTO balance,
manager approval with optional rejection reasonNotifications and alerts:
> Create a CI/CD deployment notification: service name, environment, build number,
commit SHA, deploy status with rollback button> Generate a PagerDuty-style incident alert card — severity P1, affected service,
start time, on-call engineer, acknowledge/escalate actionsData and reports:
> Here's our Q1 sales data, turn it into a card:
[{"region":"APAC","revenue":1250000,"growth":"12%"},
{"region":"EMEA","revenue":980000,"growth":"8%"},
{"region":"Americas","revenue":2100000,"growth":"15%"}]> Convert this CSV to a card:
Employee,Department,Start Date,Status
Jane Kim,Engineering,2026-01-15,Active
Bob Lee,Design,2026-02-01,Active
Carol Wu,PM,2026-03-10,OnboardingForms and input:
> Create an employee onboarding checklist — new hire name, start date,
assigned buddy, IT setup tasks with checkboxes, and a submit button> Build a customer feedback survey card with a 1-5 star rating,
comment field, and NPS score dropdownProfiles and status:
> Create a team member profile card with photo, name, title, department,
skills tags, and contact buttons for email/chat/calendar> Build a service health dashboard card showing 5 microservices
with status indicators (healthy/degraded/down) and last check timeCross-host and versioning:
> This card works in Teams but breaks in Outlook — fix it
> Make this card work on Webex (v1.3 only, no Table, no Action.Execute)
> Downgrade this v1.6 card to v1.4 for Viva ConnectionsValidation and optimization:
> Validate this card and tell me what's wrong — I'm getting render errors
> Make this card accessible — it needs to work with screen readers
> This card is too complex, optimize it for performance and compact layoutWhat you say | What the AI calls |
"Create a leave approval card for Teams" |
|
"Here's my API response, make it a card" |
|
"Is this card valid for Outlook?" |
|
"Make this card accessible" |
|
"Convert this card to a reusable template" |
|
"This card needs to work on v1.3" |
|
"What layout should I use for a dashboard?" |
|
Slash commands (MCP prompts)
For guided, multi-step workflows, use the built-in prompts directly:
Create a card:
> /adaptive-cards-mcp:create-adaptive-card
description: "Expense approval with requester photo, line items table, total amount,
and approve/reject buttons with comment field"
host: teams
intent: approvalRuns: generate → validate → optimize → host config
> /adaptive-cards-mcp:create-adaptive-card
description: "CI/CD deployment notification with service name, environment,
build number, status badge, and rollback action"
host: teams
intent: notification> /adaptive-cards-mcp:create-adaptive-card
description: "Employee profile card with photo, name, title, department,
contact info, and skills tags"
host: outlook
intent: profileConvert data to a card:
> /adaptive-cards-mcp:convert-data-to-card
data: [
{ "task": "Review PR #482", "assignee": "Jane", "due": "2026-03-21", "status": "pending" },
{ "task": "Deploy hotfix v2.1.3", "assignee": "Bob", "due": "2026-03-19", "status": "in-progress" },
{ "task": "Update API docs", "assignee": "Carol", "due": "2026-03-22", "status": "done" }
]
title: "Sprint Tasks"
presentation: table> /adaptive-cards-mcp:convert-data-to-card
data: { "service": "api-gateway", "cpu": "92%", "memory": "78%", "requests": "12.4k/min",
"p99_latency": "245ms", "error_rate": "0.3%", "uptime": "99.97%" }
title: "Service Health — api-gateway"
presentation: factsRuns: analyze data → pick best layout → validate output
Review an existing card:
> /adaptive-cards-mcp:review-adaptive-card
card: { "type": "AdaptiveCard", "version": "1.6", "body": [...your card...] }
host: outlookRuns: validate schema + accessibility → auto-fix issues → summary report
npm library (programmatic)
For use in your own code (bots, APIs, CI pipelines), install the package:
npm install adaptive-cards-mcpimport { generateCard, validateCardFull, dataToCard, optimizeCard } from 'adaptive-cards-mcp';
const result = await generateCard({
content: "Create a flight status card",
host: "teams",
intent: "display"
});
console.log(result.card); // Adaptive Card JSON
console.log(result.cardId); // Reference ID for subsequent calls
console.log(result.validation); // Schema + accessibility + host compatSee the Library API reference for full details.
What you get back
Card-producing tools return two clean blocks — card JSON you can copy, and a metadata summary:
```json
{
"type": "AdaptiveCard",
"version": "1.6",
"body": [ ... ],
"actions": [ ... ]
}
```
---
**Validation:** Valid
**Accessibility Score:** 100/100
**Elements:** 7 | **Nesting Depth:** 2 | **Version:** 1.6
**Card ID:** card-abc123
**Steps:** generate → validate → optimize
**Try it out:** Paste the card JSON into the [Adaptive Cards Designer](https://adaptivecards.microsoft.com/designer)
**Local Preview:** file:///tmp/ac-preview-xyz.htmlTools, Prompt and Usage
Reference
MCP Tools (9)
Tool | Description |
| Natural language / data → valid Adaptive Card v1.6 JSON |
| Schema validation + accessibility score + host compatibility + suggested fixes |
| Auto-select Table / FactSet / Chart / List from data shape |
| Improve accessibility, performance, modernize actions |
| Static card → |
| Version upgrade/downgrade, host-config adaptation |
| Recommend best layout pattern for a description |
| Generate + validate + optionally optimize in one call |
| Multi-step pipeline: generate → optimize → template → transform |
MCP Prompts (3)
Prompt | Pipeline | Slash command |
| generate → validate → optimize → host config |
|
| validate → auto-fix → before/after report |
|
| analyze data → pick presentation → validate |
|
MCP Resources (5) + Templates (2)
Resource | Description |
| Complete JSON Schema for Adaptive Cards v1.6 |
| Host compatibility matrix for all 7 hosts |
| Single host compatibility info |
| 36 curated example cards catalog |
| Examples filtered by intent |
| 21 canonical layout patterns |
| Session card store (cards by cardId) |
Host Compatibility
Host | Max Version | Notes |
Generic | 1.6 | Default — no host-specific constraints |
Teams | 1.6 | Max 6 actions, Action.Execute preferred |
Outlook | 1.4 | Limited elements, max 4 actions |
Web Chat | 1.6 | Full support |
Windows | 1.6 | Subset of elements |
Viva Connections | 1.4 | SPFx-based ACE framework |
Webex | 1.3 | No Table, no Action.Execute |
Configuration
Environment Variable | Description | Default |
| Transport mode: |
|
| HTTP port for SSE transport |
|
| API key for HTTP auth | (disabled) |
| Auth mode: | (disabled) |
| Anthropic Claude API key | (deterministic mode) |
| OpenAI API key | (deterministic mode) |
| Azure OpenAI API key | (disabled) |
| Azure OpenAI endpoint URL | (disabled) |
| Ollama local model URL | (disabled) |
| Enable debug logging: | (disabled) |
| Enable rate limiting: |
|
| Enable telemetry: |
|
| PostHog project API key for remote reporting | (disabled) |
| PostHog API host |
|
Note: When used via MCP (Claude Code, Copilot, Cursor), the host LLM provides the intelligence — no API key needed. Set an API key only for standalone/library usage.
Telemetry & Privacy
Telemetry is opt-in and disabled by default. When enabled, the server collects anonymous usage metrics and sends aggregated data to PostHog to help improve the project.
How to enable:
VS Code extension: A one-time consent prompt appears on first install. You can change it anytime in Settings → Adaptive Cards → Telemetry.
CLI / MCP server: Set
MCP_TELEMETRY=truein your environment, or edit~/.adaptive-cards-mcp/config.jsonand set"telemetry": true.
What is sent: Tool names, call counts, durations, error rates, platform (OS), Node version, package version, transport type.
What is never sent: Card content, user prompts, data payloads, IP addresses, file paths, environment variables.
A random session ID is generated each time the server starts — no persistent identifier is stored across sessions.
To disable: Set MCP_TELEMETRY=false or leave unconfigured (default is off).
Development
cd packages/core
npm install
npm run build # TypeScript + copy data files
npm test # 924 tests (vitest)
npm run test:coverage # With coverage report
npm run lint # TypeScript type check
npm run lint:eslint # ESLint check
npm run format # Prettier formattingLocal Testing
Smoke test all tools and prompts:
./test-mcp-tools.sh --local # 28 tests — all 9 tools with real-world scenarios
./test-mcp-prompts.sh --local # 10 tests — all 3 prompts (guided workflows)
./test-mcp-tools.sh # same tests against published npm package
./test-mcp-prompts.sh # same tests against published npm packageMCP Inspector (visual UI):
cd packages/core && npm run build
npx @modelcontextprotocol/inspector node dist/server.js
# Opens http://localhost:6274 — pick a tool, enter params, click RunTerminal (stdio):
cd packages/core
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"generate_card","arguments":{"content":"expense approval card","intent":"approval","host":"teams"}}}' \
| node dist/server.js 2>/dev/null | tail -1 | python3 -m json.toolSSE mode:
TRANSPORT=sse PORT=3001 node packages/core/dist/server.js
curl http://localhost:3001/healthArchitecture
packages/core/src/
├── server.ts # MCP server (stdio + SSE, 9 tools, 3 prompts)
├── index.ts # Library exports
├── types/ # TypeScript interfaces
├── core/ # Schema validator, analyzer, accessibility, host compat
├── generation/ # 21 layout patterns, data analyzer, assembler, LLM client
├── tools/ # 9 tool handlers
├── utils/ # Logger, input guards, rate limiter, card store, auth, telemetry, preview
└── data/ # v1.6 schema, 36 examples, host configsEcosystem
Package | Description |
MCP server + npm library (9 tools) — npm | |
VS Code extension — adaptive-cards-ai-vscode |
What's New in v2.3.0
Accessibility 100/100 — All generated cards now include
speakproperty automaticallyNo more broken JSON — Newlines in content sanitized, titles no longer truncate at version numbers
Host-aware generation —
generate_and_validateauto-downgrades card version for Outlook (v1.4), Webex (v1.3)CSV fix — CSV data correctly parsed before building FactSet/Table cards
Telemetry —
/metricsendpoint with session tracking, per-tool call distribution, host/intent usageMCP Registry — Listed on the official MCP Registry
E2E test suite — 28 tool tests + 10 prompt tests with quality gates (a11y score, element count)
See the full CHANGELOG for details.
Links
npm — Install and package details
GitHub — Source code, issues, and contributions
MCP Registry — Official MCP server listing
Related Projects
AdaptiveCards-Mobile — Cross-platform Adaptive Cards renderer
openclaw-adaptive-cards — OpenClaw AI agent plugin using this library
Adaptive Cards Documentation — Official docs
Adaptive Cards Designer — Interactive card designer
Adaptive Cards Schema Explorer — Interactive schema reference
License
MIT
Available Tools
9 toolscard_workflowC
Execute a multi-step card pipeline in a single call. Steps: generate, validate, optimize, template, transform.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | Pipeline steps to execute in order | |
| content | No | Content for generate step | |
| data | No | Data for generate/data_to_card step | |
| host | No | ||
| version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry behavioral transparency. It only lists steps but fails to disclose how steps interact, error handling, result chaining, or termination behavior. This is insufficient for a composite tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence listing the steps, making it very concise. However, it sacrifices necessary detail for brevity. It front-loads the core action but lacks structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 steps, 5 parameters, no output schema, multiple siblings), the description is incomplete. It does not explain the pipeline execution model, output, or error behavior, leaving significant gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds minimal value beyond the schema. It reiterates 'steps' list and mentions 'content' and 'data' briefly. For undocumented parameters 'host' and 'version', no additional meaning is provided. Schema coverage is 60%, but the description does not compensate for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes a multi-step card pipeline including generate, validate, optimize, template, and transform steps. It gives a specific verb and resource, but does not explicitly differentiate from sibling tools like individual step tools or generate_and_validate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention scenarios where all steps are needed, nor when to use individual tools instead. The description simply states what it does without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_to_cardA
Convert structured data (JSON array, CSV, key-value object) into the optimal Adaptive Card presentation.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | The data to convert — JSON object, JSON array of objects, or CSV string | |
| presentation | No | Presentation type. "auto" (default) auto-selects | |
| title | No | Title for the card header | |
| host | No | Target host app. Default: generic | |
| templateMode | No | Generate a templated card with ${expression} data binding. Default: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions 'optimal' Auto-selection but does not indicate side effects, idempotency, required permissions, or rate limits. Safety and mutability are not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundancy. Every word is essential to convey the tool's core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers primary purpose but omits details about output format, constraints (e.g., data size limits), or the variety of presentation types available (hinted only by schema). With no output schema, more context on return value would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all parameters with 100% coverage. The description adds minimal extra meaning (e.g., listing input formats), so it meets baseline but does not significantly enhance understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts structured data (JSON array, CSV, key-value object) into Adaptive Card presentations, specifying the exact action and input formats. This distinguishes it from siblings like generate_card or validate_card.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when structured data needs conversion to a card, but provides no explicit comparison to sibling tools (e.g., when to use generate_card instead) or conditions for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_and_validateA
Generate an Adaptive Card and immediately validate + optionally optimize it in a single call. Reduces tool-call overhead for common workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Natural language description of the card to generate | |
| data | No | Optional structured data to incorporate | |
| host | No | Target host app | |
| intent | No | Card intent | |
| version | No | Target version. Default: 1.6 | |
| optimizeGoals | No | If provided, also optimize the card after generation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but lacks disclosure of what happens on validation failure, side effects, or state changes. 'Immediately validate' is vague, and there is no mention of permissions or return behavior, leaving important behavioral traits ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with primary purpose. Every sentence adds value with no redundancy, achieving high efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool combines generation, validation, and optional optimization but provides no details about return values, validation results, or optimization output. Without an output schema, the description leaves critical contextual gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described. The description adds the overall workflow context but does not significantly enhance parameter meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates, validates, and optionally optimizes an Adaptive Card in one call. It effectively distinguishes from siblings like generate_card, validate_card, and optimize_card by combining these steps, which is a specific verb+resource combo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you want to generate and validate (and optionally optimize) together, reducing overhead. It provides clear context for the combined workflow but does not explicitly state when to use separate tools or exclude cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_cardB
Convert any content — natural language description, structured data, or a combination — into a valid Adaptive Card v1.6 JSON. Returns cardId for reference in subsequent tool calls.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Natural language description of the card to generate, or paste raw data/text. | |
| data | No | Optional structured data (JSON object or CSV string) to incorporate into the card | |
| host | No | Target host app. Default: generic | |
| theme | No | Theme for styling hints | |
| intent | No | The intent of the card — helps select the best layout pattern | |
| version | No | Target Adaptive Card schema version. Default: "1.6" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It notes that the output is a valid card and that a cardId is returned, implying persistence. However, it lacks details on side effects, error handling, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, front-loading the core purpose. Every word adds value, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the main purpose and output, it omits usage guidelines, side effects, and differentiation from siblings. Given the tool's complexity and lack of output schema, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add significant extra meaning beyond what the schema already provides for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool converts content into Adaptive Card JSON and returns a cardId. However, it does not explicitly differentiate from siblings like 'data_to_card' or 'generate_and_validate', which could cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus others, no exclusion criteria, and no context about prerequisites or fallbacks. The agent must infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_cardC
Optimize an existing Adaptive Card. Accepts card JSON or a cardId.
| Name | Required | Description | Default |
|---|---|---|---|
| card | Yes | The Adaptive Card JSON object or cardId to optimize | |
| goals | No | Optimization goals. Default: all | |
| host | No | Target host app |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions accepting card JSON or cardId but does not describe side effects (e.g., mutation), return value, or required permissions. The term 'optimize' is underspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is clear and front-loaded. However, it may be too brief for the complexity of the tool, potentially missing critical details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no output schema, and no annotations, the description is inadequate. It lacks information about optimization outputs, default behavior, and any constraints, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds marginal value. It repeats that 'card' can be JSON or cardId, which is already in the schema. No additional explanation is given for 'goals' or 'host' beyond their enum definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Optimize') and the resource ('existing Adaptive Card'), and distinguishes from siblings like generate_card or validate_card by focusing on optimization. However, it does not elaborate on what 'optimize' entails, leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus its siblings. It does not state prerequisites, when-not to use, or alternative tools, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_layoutC
Recommend the best Adaptive Card layout pattern for a given description.
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | Describe the card you want to build | |
| constraints | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It fails to disclose whether the tool is read-only, what the output format is, or any constraints (e.g., rate limits, required permissions). The lack of behavioral details makes it harder for an agent to invoke correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence, 10 words). While brevity is valued, it sacrifices necessary detail. The sentence is front-loaded and clear, but the tool definition would benefit from a bit more information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the relatively simple tool with 2 parameters and no output schema, the description is incomplete. It doesn't explain what a 'layout pattern' is, what the output of the recommendation looks like, or how the constraints parameter modifies the result. This lack of completeness could lead to misuse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50% (the constraints object lacks a top-level description). The tool description does not add meaning beyond the schema; e.g., it does not explain the role of constraints or how they influence the recommendation. The description's mention of 'given description' only covers the first parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it recommends the best Adaptive Card layout pattern based on a description. The verb 'recommend' and resource 'Adaptive Card layout pattern' are specific, but it does not explicitly differentiate from sibling tools like generate_card or optimize_card, which may also involve layout decisions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like generate_card or transform_card. The description does not indicate any prerequisites, exclusions, or specific scenarios where suggestion is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_cardB
Convert a static Adaptive Card into an Adaptive Card Template with ${expression} data binding.
| Name | Required | Description | Default |
|---|---|---|---|
| card | No | A static Adaptive Card or cardId to convert into a template | |
| dataShape | No | Optional data shape hint | |
| description | No | If no card is provided, describe the card to generate as a template |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the conversion to template with data binding, but does not disclose side effects, idempotency, or what happens to the original card. Adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence that front-loads the core transformation. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, and the description does not explain the return format or how the template is structured. With three parameters and a transformation, more detail is needed for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds marginal value: it repeats what the schema says about 'card' and 'description', and provides no extra semantic detail for 'dataShape'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'convert', the resource 'static Adaptive Card', and the outcome 'Adaptive Card Template with ${expression} data binding'. It uniquely identifies the tool's purpose among siblings like generate_card and validate_card.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as generate_card or transform_card. No when-not-to-use conditions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transform_cardB
Transform an Adaptive Card: upgrade/downgrade version, apply host-specific constraints, or flatten nesting.
| Name | Required | Description | Default |
|---|---|---|---|
| card | Yes | The Adaptive Card JSON object or cardId to transform | |
| transform | Yes | The type of transformation to apply | |
| targetVersion | No | Target version for upgrade/downgrade (e.g., "1.3", "1.5", "1.6") | |
| targetHost | No | Target host |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It does not disclose whether transformations mutate the card, return a new card, require specific permissions, or have side effects. The term 'transform' is vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence covers main purpose efficiently. No superfluous words. However, a more structured format (e.g., bullet points) could improve scanability, but not necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description should mention return values or side effects. It doesn't. Also, with 4 parameters and only 2 required, description doesn't explain when optional parameters are needed. Incomplete for a transformation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, so baseline is 3. The description adds a high-level list of transformations, but the schema already provides enum values for 'transform' and descriptions for 'targetVersion' and 'targetHost'. No additional meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool transforms an Adaptive Card, listing specific operations (upgrade/downgrade version, apply host constraints, flatten nesting). This distinguishes it from sibling tools like generate_card or validate_card.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. For instance, it doesn't clarify when to use 'transform_card' over 'optimize_card' or 'suggest_layout'. No context on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_cardA
Validate an Adaptive Card JSON against the v1.6 schema. Returns diagnostics with suggested fixes for each error. Accepts card JSON or a cardId from a previous tool call.
| Name | Required | Description | Default |
|---|---|---|---|
| card | Yes | The Adaptive Card JSON object to validate, or a cardId string | |
| host | No | Check compatibility with this host app. Default: generic | |
| strictMode | No | When true, warnings are treated as errors. Default: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description reveals it is non-destructive (validate), returns diagnostics, and accepts cardId from prior calls, but does not explicitly state read-only or performance details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no extraneous words. The description efficiently conveys core functionality and parameter nuances.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects: validation schema, return diagnostics, accepted inputs (JSON or cardId), and host/strictMode options. Lacks explicit output format but adequate for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3; the description adds context: 'card' can be JSON or cardId, 'host' checks compatibility, 'strictMode' treats warnings as errors, improving clarity beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool validates an Adaptive Card JSON against the v1.6 schema, returns diagnostics with fixes, and distinguishes from sibling tools focused on generation or workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the tool is for validation, but does not explicitly state when not to use it or provide alternatives from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
- First observed
card_workflow - First observed
data_to_card - First observed
generate_and_validate - First observed
generate_card - First observed
optimize_card - First observed
suggest_layout - First observed
template_card - First observed
transform_card - First observed
validate_card
TDQS
There is significant functional overlap between tools, particularly generate_card, generate_and_validate, and card_workflow which all involve card generation, causing potential confusion. However, descriptions clarify distinctions like multi-step pipelines vs. single-step generation, helping agents differentiate.
Tool names follow a consistent verb_noun pattern throughout, such as generate_card, optimize_card, and validate_card. All tools use snake_case with clear, descriptive verbs, making the set predictable and easy to navigate.
With 9 tools, the count is well-scoped for Adaptive Cards workflows, covering generation, validation, optimization, templating, and transformation. Each tool serves a distinct role in the card lifecycle, avoiding bloat while ensuring comprehensive coverage.
The toolset provides strong coverage of the Adaptive Cards domain, including creation, validation, optimization, templating, and transformation. A minor gap exists in lacking explicit tools for card deletion or management, but core workflows are fully supported without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for VertaaUX.ai — run UX & accessibility audits, generate fixes, and monitor quality from your LLM or IDE. 38 tools covering the full audit-to-fix lifecycle across 7 UX categories.2960MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that fixes, validates, and generates visual text content for AI coding assistants.MIT
- FlicenseAqualityBmaintenanceMCP server to help AI assistants generate Italian PA user interfaces by providing components, recipes, accessibility rules, and validation for Bootstrap Italia and Web Components.9-
- FlicenseNot gradedqualityCmaintenanceMCP server that exposes a design system and UX rulebook as tools, enabling AI to generate UI consistent with your design tokens, components, layout rules, accessibility guidelines, and templates. It also provides a review tool to score UI proposals against the design system.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/VikrantSingh01/adaptive-cards-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server