Adaptive Cards Mcp

io.github.VikrantSingh01Published by GitHub account VikrantSingh01v2.3.0Updated Oct 24, 2026

Generate, validate, and optimize Adaptive Cards for Teams, Outlook, and Copilot.

Overview

AI-generated overview

A local MCP server that lets an assistant generate, validate, optimize and convert Adaptive Cards for Teams, Outlook, Copilot and other Microsoft hosts.

What you can do
Generate Adaptive Cards from natural-language descriptions or raw data, with automatic layout choice (table, fact set, chart, list). Validate cards for schema errors, accessibility score and host compatibility, and optimize them for accessibility and performance. Convert static cards into data-bound templates, and upgrade or downgrade cards between schema versions and host configurations. Suggest layout patterns and run multi-step pipelines (generate, validate, optimize, template, transform). Read reference resources such as the v1.6 schema, host compatibility matrix, example cards and layout patterns.
When to use it
Use it when you build or maintain Adaptive Cards for Teams, Outlook, Copilot, Viva Connections or Webex and want the assistant to produce valid JSON, fix render or accessibility problems, or adapt a card to a specific host and schema version.
Requirements
Runs locally over stdio via npx, so Node.js is needed; no install step is required. No API key is needed when used through an MCP host, since the host model supplies the intelligence. Optional settings include TRANSPORT and PORT for SSE mode, MCP_API_KEY and MCP_AUTH_MODE for HTTP auth, and provider keys such as ANTHROPIC_API_KEY, OPENAI_API_KEY or AZURE_OPENAI_API_KEY for standalone use.
Before you install
Telemetry is off by default; if enabled with MCP_TELEMETRY it sends anonymous usage metrics (tool names, counts, durations, OS, Node and package versions) to PostHog, and POSTHOG_API_KEY and POSTHOG_HOST configure that reporting. Provider API keys are only needed for standalone or library use and should be kept out of shared configs. Card output is JSON for review before pasting into a designer or production flow.

Installation

In SourceWeft

  1. Open Adaptive Cards Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Adaptive Cards MCP

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

[adaptive-cards-mcp — 9 tools, 21 patterns, 924 tests, 0 competitors]

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

Your browser does not support the video tag.

Quick Start

No install needed — npx downloads and runs it automatically.

1. Add to your AI assistant

Claude Code
bash
claude mcp add adaptive-cards-mcp -- npx adaptive-cards-mcp
GitHub Copilot (VS Code)

Add to .vscode/mcp.json:

json
{  "servers": {    "adaptive-cards-mcp": {      "command": "npx",      "args": ["adaptive-cards-mcp"]    }  }}
Cursor

Add to .cursor/mcp.json:

json
{  "mcpServers": {    "adaptive-cards-mcp": {      "command": "npx",      "args": ["adaptive-cards-mcp"]    }  }}
Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

json
{  "mcpServers": {    "adaptive-cards-mcp": {      "command": "npx",      "args": ["adaptive-cards-mcp"]    }  }}
Microsoft 365 Copilot / Copilot Studio (HTTP/SSE)
bash
TRANSPORT=sse PORT=3001 npx adaptive-cards-mcp
# With auth enabledTRANSPORT=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
OpenAI ChatGPT
  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

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

bash
npm install adaptive-cards-mcp
typescript
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 JSONconsole.log(result.cardId);     // Reference ID for subsequent callsconsole.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

[9 MCP tools for Adaptive Cards]

[generate_card producing a leave approval card for Teams]

Reference

MCP Tools (9)

ToolDescription
generate_cardNatural language / data → valid Adaptive Card v1.6 JSON
validate_cardSchema validation + accessibility score + host compatibility + suggested fixes
data_to_cardAuto-select Table / FactSet / Chart / List from data shape
optimize_cardImprove accessibility, performance, modernize actions
template_cardStatic card → ${expression} data-bound template
transform_cardVersion upgrade/downgrade, host-config adaptation
suggest_layoutRecommend best layout pattern for a description
generate_and_validateGenerate + validate + optionally optimize in one call
card_workflowMulti-step pipeline: generate → optimize → template → transform

MCP Prompts (3)

PromptPipelineSlash command
create-adaptive-cardgenerate → validate → optimize → host config/adaptive-cards-mcp:create-adaptive-card
review-adaptive-cardvalidate → auto-fix → before/after report/adaptive-cards-mcp:review-adaptive-card
convert-data-to-cardanalyze data → pick presentation → validate/adaptive-cards-mcp:convert-data-to-card

MCP Resources (5) + Templates (2)

ResourceDescription
ac://schema/v1.6Complete JSON Schema for Adaptive Cards v1.6
ac://hostsHost compatibility matrix for all 7 hosts
ac://hosts/{hostName}Single host compatibility info
ac://examples36 curated example cards catalog
ac://examples/{intent}Examples filtered by intent
ac://patterns21 canonical layout patterns
ac://cardsSession card store (cards by cardId)

Host Compatibility

HostMax VersionNotes
Generic1.6Default — no host-specific constraints
Teams1.6Max 6 actions, Action.Execute preferred
Outlook1.4Limited elements, max 4 actions
Web Chat1.6Full support
Windows1.6Subset of elements
Viva Connections1.4SPFx-based ACE framework
Webex1.3No Table, no Action.Execute

Configuration

Environment VariableDescriptionDefault
TRANSPORTTransport mode: stdio or ssestdio
PORTHTTP port for SSE transport3001
MCP_API_KEYAPI key for HTTP auth(disabled)
MCP_AUTH_MODEAuth mode: bearer for token validation(disabled)
ANTHROPIC_API_KEYAnthropic Claude API key(deterministic mode)
OPENAI_API_KEYOpenAI API key(deterministic mode)
AZURE_OPENAI_API_KEYAzure OpenAI API key(disabled)
AZURE_OPENAI_ENDPOINTAzure OpenAI endpoint URL(disabled)
OLLAMA_BASE_URLOllama local model URL(disabled)
DEBUGEnable debug logging: adaptive-cards-mcp(disabled)
MCP_RATE_LIMITEnable rate limiting: truefalse
MCP_TELEMETRYEnable telemetry: true to opt-infalse
POSTHOG_API_KEYPostHog project API key for remote reporting(disabled)
POSTHOG_HOSTPostHog API hosthttps://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

bash
cd packages/corenpm installnpm run build         # TypeScript + copy data filesnpm test              # 924 tests (vitest)npm run test:coverage # With coverage reportnpm run lint          # TypeScript type checknpm run lint:eslint   # ESLint checknpm run format        # Prettier formatting

Local Testing

Smoke test all tools and prompts:

bash
./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):

bash
cd packages/core && npm run buildnpx @modelcontextprotocol/inspector node dist/server.js# Opens http://localhost:6274 — pick a tool, enter params, click Run

Terminal (stdio):

bash
cd packages/coreecho '{"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:

bash
TRANSPORT=sse PORT=3001 node packages/core/dist/server.jscurl 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

PackageDescription
packages/coreMCP server + npm library (9 tools) — npm
packages/vscode-extensionVS 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 generation — generate_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.

Links

  • npm — Install and package details
  • GitHub — Source code, issues, and contributions
  • MCP Registry — Official MCP server listing

Related Projects

License

MIT

Source: README.md at commit 0e439bb

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v2.3.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts