Azure存储交互式演示

一个在VS Code Copilot聊天中直接呈现Azure存储仪表板的交互式MCP应用演示,支持浏览存储账户、管理容器和Blob以及生成SAS令牌。

  • by tw3lveparsecs
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 tw3lveparsecs/mcp-apps-demo

使用说明

Azure存储MCP应用程序演示

一个交互式MCP Apps演示,直接在VS Code Copilot聊天中呈现Azure存储仪表板。浏览存储帐户、管理容器和blob以及生成SAS令牌——所有这些都在由 MCP应用程序扩展.

什么是MCP应用程序?

MCP应用程序扩展 模型上下文协议 让MCP工具返回 交互式UI组件 (HTML/CSS/JS)直接在对话中呈现。工具可以显示仪表板、表单、可视化和多步骤工作流,而不是纯文本响应,同时让人工智能模型了解用户操作。

演示流程

  1. 询问副驾驶: “显示我订阅中的所有Azure存储帐户”
  2. 仪表板出现: 一个交互式卡片网格,显示存储帐户的位置、SKU、级别和大小信息
  3. 单击存储帐户: 仪表板呼叫 get_storage_account 并呈现一个包含属性、端点和容器表的详细面板
  4. 管理容器: 创建新容器、删除现有容器或单击容器以浏览blob
  5. 管理blob: 上传文件(拖放或文本)、下载blob、内联预览内容或删除blob
  6. 生成SAS令牌: 表单模式允许您选择权限和到期时间;UI调用 generate_sas_token 并使用复制按钮显示令牌和完整URL

所有交互都发生在嵌入式UI中——代理在幕后协调工具调用。

先决条件

  • Node.js 18+
  • VS Code 使用GitHub Copilot(Copilot聊天)
  • 您的VS代码版本支持MCP应用程序(建议VS代码内部人员)
  • Azure 订阅 随着 AZURE_SUBSCRIPTION_ID 环境变量集
  • Azure命令行界面 已登录(或由支持的其他凭据源 DefaultAzureCredential)

快速开始

# Install dependencies
npm install

# Build (type-check + bundle UI + compile server)
npm run build

# Configure the MCP server in VS Code (see .vscode/mcp.json example below)
# Then open this folder in VS Code and use Copilot chat

发展

# Watch mode: auto-rebuilds UI and restarts server on changes
npm run dev

# Run HTTP server for testing (port 3001)
npm run serve

# Run stdio server directly
npm run serve:stdio

项目结构

├── mcp-app.html             # UI entry point (bundled by Vite)
├── src/
│   ├── mcp-app.ts           # Client-side dashboard logic (App class)
│   └── mcp-app.css          # Azure-themed styling
├── server.ts                # MCP server: 10 tools + 1 UI resource
├── main.ts                  # Entry point: stdio + HTTP transports
├── dist/                    # Build output (bundled HTML + compiled JS)
├── package.json
├── tsconfig.json            # Type checking config
├── tsconfig.server.json     # Server compilation config
└── vite.config.ts           # Vite + singlefile bundler

建筑

MCP服务器(Server.ts)

使用注册10个工具和1个UI资源 @modelcontextprotocol/ext-apps/server:

工具 描述 有用户界面吗?
list_storage_accounts 列出订阅中的所有帐户 是(仪表板)
get_storage_account 返回详细的帐户信息 否(由仪表板UI使用)
list_containers 列出帐户中的blob容器 否(由仪表板UI使用)
create_container 创建新的blob容器 否(由仪表板UI使用)
delete_container 删除blob容器 否(由仪表板UI使用)
list_blobs 列出容器中的blob 否(由仪表板UI使用)
upload_blob 以blob形式上传内容 否(由仪表板UI使用)
download_blob 下载blob内容 否(由仪表板UI消耗)
delete_blob 删除blob 否(由仪表板UI使用)
generate_sas_token 为容器生成SAS令牌 否(由仪表板UI使用)

仪表板用户界面(src/mcp-app.ts)

使用 App 类从 @modelcontextprotocol/ext-apps 致:

  • 通过以下方式接收初始工具结果 ontoolresult
  • 在视图(帐户)之间导航→ 容器→ blobs)与面包屑导航
  • 通过以下方式调用服务器工具 app.callServerTool() 用于所有CRUD操作(获取详细信息、列出/创建/删除容器、列出/上传/下载/删除blob、生成SAS)
  • 显示用于创建容器、上传blob、生成SAS令牌、确认删除和blob内容预览的模式对话框
  • 通过以下方式应用主机主题 onhostcontextchanged

构建管道

  • Vite+Vite插件单文件 捆绑包 mcp-app.html + src/mcp-app.ts + src/mcp-app.css 在中转换为单个自包含的HTML文件 dist/
  • TypeScript 编译服务器文件(server.ts, main.ts)to dist/
  • MCP服务器读取并提供捆绑的HTML作为 text/html;profile=mcp-app 资源

参考文献