Adaptive Cards Mcp

io.github.VikrantSingh01由 GitHub 账号 VikrantSingh01 发布v2.3.0更新于 Oct 24, 2026

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

已验证STDIO仅桌面效率与工作流开发者工具

概览

AI 生成的概览

一个本地 MCP 服务器,让助手为 Teams、Outlook、Copilot 等 Microsoft 平台生成、校验、优化并转换 Adaptive Cards。

可以做什么
根据自然语言描述或原始数据生成 Adaptive Card,并自动选择表格、事实集、图表或列表等布局。校验卡片的架构错误、无障碍评分与宿主兼容性,并针对无障碍与性能进行优化。把静态卡片转换为数据绑定的模板,并在不同架构版本与宿主配置之间升级或降级卡片。推荐布局模式,并运行生成、校验、优化、模板化、转换的多步骤流程。读取 v1.6 架构、宿主兼容性矩阵、示例卡片与布局模式等参考资源。
适用场景
当你为 Teams、Outlook、Copilot、Viva Connections 或 Webex 构建或维护 Adaptive Card,希望助手产出有效 JSON、修复渲染或无障碍问题,或让卡片适配特定宿主与架构版本时使用。
运行要求
通过 npx 以 stdio 在本机运行,需要 Node.js,无需安装步骤。通过 MCP 宿主使用时不需要 API 密钥,智能由宿主模型提供。可选设置包括 SSE 模式的 TRANSPORT 与 PORT、HTTP 认证的 MCP_API_KEY 与 MCP_AUTH_MODE,以及独立使用时所需的 ANTHROPIC_API_KEY、OPENAI_API_KEY 或 AZURE_OPENAI_API_KEY 等提供商密钥。
安装前请注意
遥测默认关闭;若通过 MCP_TELEMETRY 启用,会向 PostHog 发送匿名使用指标(工具名称、调用次数、耗时、操作系统、Node 与套件版本),POSTHOG_API_KEY 与 POSTHOG_HOST 用于配置该上报。提供商 API 密钥仅在独立或函数库使用时需要,应避免放入共享配置。卡片输出为 JSON,建议先审阅再粘贴到设计器或生产流程。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Adaptive Cards Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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

来源:README.md,提交 0e439bb

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v2.3.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分