事件分类MCP服务器
Azure Functions MCP(模型上下文协议)扩展服务器,用于使用交互式小部件UI进行事件分类。提供用于列出、检查和分配事件的工具,以及直接在Copilot Chat中呈现的事件分类小部件。
_list_invention工具在交互式UI中返回结果:_ Example question about critical unassigned incidents.
_深入事件:_ Drill into a specific incident
工具
| 工具 | 说明 |
|---|---|
list_incidents | 使用严重性、状态、类别、分配和日期范围的可选过滤器获取事件。结果显示在“事件分类”小部件中。 |
get_incident_details | 返回完整的事件详细信息(描述、元数据)和事件时间线。结果显示在“事件分类”小部件中。 |
assign_incident | 分配或取消分配事件。更新所有者,将状态设置为“活动”(如果是“新建”),并记录时间线事件。 |
MCP资源
| 资源 | 描述 |
|---|---|
| 事件分类小部件 | 交互式事件分类仪表板(HTML/TypeScript应用程序),通过MCP应用程序在副驾驶聊天中内联呈现。支持过滤、分页和深入查看详细信息/时间线视图。 |
先决条件
- v18+
- Azure功能核心工具 v4
- VS Code 随着 Azure功能扩展
- 具有所需架构的Azure SQL数据库(见下文)
数据库设置
在实际场景中,事件数据通常来自ITSM平台(如ServiceNow、Jira服务管理)、监控和可观察性工具(如Datadog、PagerDuty)或云原生服务(如Azure Monitor)。为了简单起见,此示例使用种子SQL数据库,但在生产环境中,MCP服务器将通过其API或事件流与这些源集成。
运行附带的安装脚本,一步创建表和种子测试数据:
sqlcmd -S .database.windows.net -d -U -P
-i setup.sql或粘贴以下内容 setup.sql 进入Azure门户 查询编辑器 对于您的SQL数据库。
What the script creates
事件 --存储事件记录,包括严重性、状态、所有者、类别、来源和时间戳。
事件时间线 --存储与每个事件链接的时间线事件。
该脚本为11个类别(身份、电子邮件、端点、硬件、网络、云基础设施、应用程序、数据丢失、合规性、运营、许可)的20个样本事件以及相应的测试时间线事件提供种子。
本地开发
1.安装依赖项
npm install2.构建小部件
Incident Triage小部件是一个Vite+TypeScript应用程序 src/app/。必须在启动服务器之前构建:
cd src/app
npm install
npm run build
cd ../..这将生成一个文件 src/app/dist/index.html 该资源被用作MCP资源。
3.配置本地设置
编辑 local.settings.json 使用您的Azure SQL服务器和数据库。该项目使用Azure AD(Entra ID)默认凭据进行身份验证:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "node",
"SQL_SERVER": ".database.windows.net",
"SQL_DATABASE": ""
}
}注: 身份验证使用azure-active-directory-default,因此请确保您的身份(例如,通过az login)可以访问SQL数据库。
4.启动Azurite
功能应用程序在本地使用Azure存储(AzureWebJobsStorage 设置为 UseDevelopmentStorage=true).在运行服务器之前启动Azurite存储模拟器:
docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 \
mcr.microsoft.com/azure-storage/azurite5.构建并启动服务器
使用VS Code任务(推荐):
- 按
F5或单击 运行->开始调试.
或者从终端(在项目根目录中):
npm run build
func startMCP端点将在以下位置可用: http://localhost:7071/runtime/webhooks/mcp
6.将VS Code连接为MCP客户端
该项目包括 .vscode/mcp.json 已配置本地服务器条目:
{
"servers": {
"demo-local-server": {
"type": "http",
"url": "http://localhost:7071/runtime/webhooks/mcp"
}
}
}打开命令选项板(Cmd+Shift+P) → MCP:列出服务器 → 选择 demo-local-server → 开始。工具和小部件现在将在Copilot Chat中可用。
7.测试工具
在Copilot聊天中,尝试:
- “列出所有事件”
- “显示新的关键事件”
- “显示上周发生的事件”
- “获取事件4的详细信息”
- “将莉莉分配到事件2”
- “显示未分配的高严重性事件”
事件分类小部件将在聊天中内联呈现,显示一个可过滤的、分页的事件表。单击任何事件标题以深入查看其详细信息和时间线视图。
崭新的开始
要删除已编译的输出并从头开始重建,请执行以下操作:
npm start这运行 clean → build → func start 自动。用于完全重置,包括 node_modules:
rm -rf dist node_modules
npm install
npm run build
func start部署
部署到Azure
- 创建Node 22功能应用程序 --跟随 在Azure门户中创建功能应用程序 创建新功能应用程序的指南。
- 设置应用程序设置 --在Azure门户中,转到您的功能应用程序→ 设置 → 环境变量 → click +添加 对于以下每一项,然后单击 应用:
| 设置 | 值 |
|---|---|
SQL_SERVER | .database.windows.net |
SQL_DATABASE | `` |
FUNCTIONS_EXTENSIONBUNDLE_SOURCE_URI | https://cdn-staging.functions.azure.com/public |
- 配置用户分配的托管身份 — 创建用户分配的托管身份 如果你还没有,那么:
a.在Azure门户中,转到您的功能应用程序→ 设置 → 身份 → 用户分配 tab → 添加 → 选择用户分配的托管身份。
b.通过在SQL数据库上以Azure AD管理员身份运行以下T-SQL,授予对Azure SQL数据库的托管身份访问权限:
CREATE USER [] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [];
ALTER ROLE db_datawriter ADD MEMBER [];替换 `` 使用用户分配的托管身份资源的名称。
- 将用户分配的托管身份的客户端ID添加为应用程序设置,如步骤2所示:
| 设置 | 值 |
|---|---|
AZURE_CLIENT_ID | 用户分配的托管身份的客户端ID |
- 部署应用程序 --在VS Code中,右键单击Azure Functions扩展中的项目→ 部署到功能应用程序 → 选择您的功能应用程序。
防火墙/网络
要允许函数应用程序连接到Azure SQL,请执行以下操作:
- 在Azure门户中,转到 SQL 服务器 (不是数据库)。
- 导航至 安全 → 网络.
- 检查 “允许Azure服务和资源访问此服务器”.
- 点击 保存.
远程测试
1.将远程服务器添加到 .vscode/mcp.json
{
"servers": {
"-remote": {
"type": "http",
"url": "https://.azurewebsites.net/runtime/webhooks/mcp"
}
}
}2.设置服务器授权
要使用内置身份验证保护远程MCP端点,请按照中的说明进行操作 启用内置服务器授权和身份验证 导游。
3.连接并测试
打开命令选项板→ MCP:列出服务器 → 选择您的远程服务器→ 开始.
测试与本地测试相同的提示——这些工具现在将对您部署的Function App和生产Azure SQL数据库执行。
项目结构
├── host.json # Azure Functions host config + MCP server settings
├── local.settings.json # Local environment variables (not committed)
├── package.json # Dependencies and scripts
├── setup.sql # SQL script to create tables and seed 20 incidents
├── tsconfig.json # TypeScript configuration
└── src/
├── db.ts # Azure SQL connection pool (Azure AD auth)
├── index.ts # App setup (enables HTTP streaming, registers functions)
├── app/ # Incident Triage widget (Vite + TypeScript)
│ ├── index.html # Widget HTML + CSS
│ ├── package.json # Widget dependencies (@modelcontextprotocol/ext-apps)
│ ├── vite.config.ts # Vite config (single-file output)
│ └── src/
│ └── incident-app.ts # Widget logic (list/detail views, filters, pagination)
└── functions/
├── listIncidents.ts # list_incidents tool (filters, sorting)
├── getIncidentDetails.ts # get_incident_details tool (detail + timeline)
├── assignIncident.ts # assign_incident tool (assign/unassign)
└── incidentWidgetResource.ts # MCP resource serving the widget HTML