Skip to main content
Glama

Adaptive Cards MCP

License: MIT TypeScript Adaptive Cards CI npm npm downloads MCP Registry GitHub stars

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-mcp

Add 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-mcp
  1. Open Copilot Studio → your agent → Tools → Add a tool → New tool → Model Context Protocol

  2. Enter your MCP server URL (e.g., https://your-server.azurewebsites.net/sse)

  3. Select the tools to expose

  1. Enable Developer mode in ChatGPT settings

  2. Go to Settings → Connectors → Create

  3. 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

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 reason

Notifications 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 actions

Data 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,Onboarding

Forms 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 dropdown

Profiles 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 time

Cross-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 Connections

Validation 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 layout

What you say

What the AI calls

"Create a leave approval card for Teams"

generate_and_validate → optimized card with Approve/Reject actions

"Here's my API response, make it a card"

data_to_card → auto-picks Table/FactSet/List based on data shape

"Is this card valid for Outlook?"

validate_card → schema errors, accessibility score, host compatibility

"Make this card accessible"

optimize_card → adds wrap, altText, speak, heading styles

"Convert this card to a reusable template"

template_card → static values become ${expression} bindings

"This card needs to work on v1.3"

transform_card → downgrades, removes unsupported features

"What layout should I use for a dashboard?"

suggest_layout → pattern recommendation with rationale

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: approval

Runs: 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: profile

Convert 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: facts

Runs: 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: outlook

Runs: 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-mcp
import { 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 compat

See 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.html

Tools, Prompt and Usage

Reference

MCP Tools (9)

Tool

Description

generate_card

Natural language / data → valid Adaptive Card v1.6 JSON

validate_card

Schema validation + accessibility score + host compatibility + suggested fixes

data_to_card

Auto-select Table / FactSet / Chart / List from data shape

optimize_card

Improve accessibility, performance, modernize actions

template_card

Static card → ${expression} data-bound template

transform_card

Version upgrade/downgrade, host-config adaptation

suggest_layout

Recommend best layout pattern for a description

generate_and_validate

Generate + validate + optionally optimize in one call

card_workflow

Multi-step pipeline: generate → optimize → template → transform

MCP Prompts (3)

Prompt

Pipeline

Slash command

create-adaptive-card

generate → validate → optimize → host config

/adaptive-cards-mcp:create-adaptive-card

review-adaptive-card

validate → auto-fix → before/after report

/adaptive-cards-mcp:review-adaptive-card

convert-data-to-card

analyze data → pick presentation → validate

/adaptive-cards-mcp:convert-data-to-card

MCP Resources (5) + Templates (2)

Resource

Description

ac://schema/v1.6

Complete JSON Schema for Adaptive Cards v1.6

ac://hosts

Host compatibility matrix for all 7 hosts

ac://hosts/{hostName}

Single host compatibility info

ac://examples

36 curated example cards catalog

ac://examples/{intent}

Examples filtered by intent

ac://patterns

21 canonical layout patterns

ac://cards

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

Transport mode: stdio or sse

stdio

PORT

HTTP port for SSE transport

3001

MCP_API_KEY

API key for HTTP auth

(disabled)

MCP_AUTH_MODE

Auth mode: bearer for token validation

(disabled)

ANTHROPIC_API_KEY

Anthropic Claude API key

(deterministic mode)

OPENAI_API_KEY

OpenAI API key

(deterministic mode)

AZURE_OPENAI_API_KEY

Azure OpenAI API key

(disabled)

AZURE_OPENAI_ENDPOINT

Azure OpenAI endpoint URL

(disabled)

OLLAMA_BASE_URL

Ollama local model URL

(disabled)

DEBUG

Enable debug logging: adaptive-cards-mcp

(disabled)

MCP_RATE_LIMIT

Enable rate limiting: true

false

MCP_TELEMETRY

Enable telemetry: true to opt-in

false

POSTHOG_API_KEY

PostHog project API key for remote reporting

(disabled)

POSTHOG_HOST

PostHog API host

https://eu.i.posthog.com

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=true in your environment, or edit ~/.adaptive-cards-mcp/config.json and 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 formatting

Local 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 package

MCP 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 Run

Terminal (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.tool

SSE mode:

TRANSPORT=sse PORT=3001 node packages/core/dist/server.js
curl http://localhost:3001/health

Architecture

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 configs

Ecosystem

Package

Description

packages/core

MCP server + npm library (9 tools) — npm

packages/vscode-extension

VS Code extension — adaptive-cards-ai-vscode

What's New in v2.3.0

  • Accessibility 100/100 — All generated cards now include speak property automatically

  • No more broken JSON — Newlines in content sanitized, titles no longer truncate at version numbers

  • Host-aware generationgenerate_and_validate auto-downgrades card version for Outlook (v1.4), Webex (v1.3)

  • CSV fix — CSV data correctly parsed before building FactSet/Table cards

  • Telemetry/metrics endpoint with session tracking, per-tool call distribution, host/intent usage

  • MCP 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.

  • npm — Install and package details

  • GitHub — Source code, issues, and contributions

  • MCP Registry — Official MCP server listing

License

MIT

Available Tools

9 tools
card_workflowC

Execute a multi-step card pipeline in a single call. Steps: generate, validate, optimize, template, transform.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesPipeline steps to execute in order
contentNoContent for generate step
dataNoData for generate/data_to_card step
hostNo
versionNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesThe data to convert — JSON object, JSON array of objects, or CSV string
presentationNoPresentation type. "auto" (default) auto-selects
titleNoTitle for the card header
hostNoTarget host app. Default: generic
templateModeNoGenerate a templated card with ${expression} data binding. Default: false

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesNatural language description of the card to generate
dataNoOptional structured data to incorporate
hostNoTarget host app
intentNoCard intent
versionNoTarget version. Default: 1.6
optimizeGoalsNoIf provided, also optimize the card after generation

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesNatural language description of the card to generate, or paste raw data/text.
dataNoOptional structured data (JSON object or CSV string) to incorporate into the card
hostNoTarget host app. Default: generic
themeNoTheme for styling hints
intentNoThe intent of the card — helps select the best layout pattern
versionNoTarget Adaptive Card schema version. Default: "1.6"

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardYesThe Adaptive Card JSON object or cardId to optimize
goalsNoOptimization goals. Default: all
hostNoTarget host app

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYesDescribe the card you want to build
constraintsNo

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardNoA static Adaptive Card or cardId to convert into a template
dataShapeNoOptional data shape hint
descriptionNoIf no card is provided, describe the card to generate as a template

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardYesThe Adaptive Card JSON object or cardId to transform
transformYesThe type of transformation to apply
targetVersionNoTarget version for upgrade/downgrade (e.g., "1.3", "1.5", "1.6")
targetHostNoTarget host

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardYesThe Adaptive Card JSON object to validate, or a cardId string
hostNoCheck compatibility with this host app. Default: generic
strictModeNoWhen true, warnings are treated as errors. Default: false

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 9 tool updates
    • First observedcard_workflow
    • First observeddata_to_card
    • First observedgenerate_and_validate
    • First observedgenerate_card
    • First observedoptimize_card
    • First observedsuggest_layout
    • First observedtemplate_card
    • First observedtransform_card
    • First observedvalidate_card

TDQS

A3.5/5.0
Disambiguation3/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessResponsive

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

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP 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.
    29
    60
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that fixes, validates, and generates visual text content for AI coding assistants.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP 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

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