事件分诊服务器

一个基于Azure Functions的MCP扩展服务器,用于事件分诊,提供交互式小部件UI,支持列出、检查和分配事件。

  • by lilyjma
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 lilyjma/incidence-mcp-server-azure-function-node

使用说明

事件分类MCP服务器

Azure Functions MCP(模型上下文协议)扩展服务器,用于使用交互式小部件UI进行事件分类。提供用于列出、检查和分配事件的工具,以及直接在Copilot Chat中呈现的事件分类小部件。

list_invention工具在交互式UI中返回结果:

深入事件:

工具

工具 说明
list_incidents 使用严重性、状态、类别、分配和日期范围的可选过滤器获取事件。结果显示在“事件分类”小部件中。
get_incident_details 返回完整的事件详细信息(描述、元数据)和事件时间线。结果显示在“事件分类”小部件中。
assign_incident 分配或取消分配事件。更新所有者,将状态设置为“活动”(如果是“新建”),并记录时间线事件。

MCP资源

资源 描述
事件分类小部件 交互式事件分类仪表板(HTML/TypeScript应用程序),通过MCP应用程序在副驾驶聊天中内联呈现。支持过滤、分页和深入查看详细信息/时间线视图。

先决条件

数据库设置

在实际场景中,事件数据通常来自ITSM平台(如ServiceNow、Jira服务管理)、监控和可观察性工具(如Datadog、PagerDuty)或云原生服务(如Azure Monitor)。为了简单起见,此示例使用种子SQL数据库,但在生产环境中,MCP服务器将通过其API或事件流与这些源集成。

运行附带的安装脚本,一步创建表和种子测试数据:

sqlcmd -S <your-server>.database.windows.net -d <your-db> -U <user> -P <password> -i setup.sql

或粘贴以下内容 setup.sql 进入Azure门户 查询编辑器 对于您的SQL数据库。

What the script creates

事件 --存储事件记录,包括严重性、状态、所有者、类别、来源和时间戳。

事件时间线 --存储与每个事件链接的时间线事件。

该脚本为11个类别(身份、电子邮件、端点、硬件、网络、云基础设施、应用程序、数据丢失、合规性、运营、许可)的20个样本事件以及相应的测试时间线事件提供种子。

本地开发

1.安装依赖项

npm install

2.构建小部件

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": "<your-server>.database.windows.net",
    "SQL_DATABASE": "<your-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/azurite

5.构建并启动服务器

使用VS Code任务(推荐):

  • 按 F5 或单击 运行->开始调试.

或者从终端(在项目根目录中):

npm run build
func start

MCP端点将在以下位置可用: 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

  1. 创建Node 22功能应用程序 --跟随 在Azure门户中创建功能应用程序 创建新功能应用程序的指南。

  2. 设置应用程序设置 --在Azure门户中,转到您的功能应用程序→ 设置 → 环境变量 → click +添加 对于以下每一项,然后单击 应用:

    设置 值
    SQL_SERVER <your-server>.database.windows.net
    SQL_DATABASE <your-database>
    FUNCTIONS_EXTENSIONBUNDLE_SOURCE_URI https://cdn-staging.functions.azure.com/public
  3. 配置用户分配的托管身份 — 创建用户分配的托管身份 如果你还没有,那么:

    a.在Azure门户中,转到您的功能应用程序→ 设置 → 身份 → 用户分配 tab → 添加 → 选择用户分配的托管身份。

    b.通过在SQL数据库上以Azure AD管理员身份运行以下T-SQL,授予对Azure SQL数据库的托管身份访问权限:

    CREATE USER [<your-managed-identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<your-managed-identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<your-managed-identity-name>];
    

    替换 <your-managed-identity-name> 使用用户分配的托管身份资源的名称。

  4. 将用户分配的托管身份的客户端ID添加为应用程序设置,如步骤2所示:

    设置 值
    AZURE_CLIENT_ID 用户分配的托管身份的客户端ID
  5. 部署应用程序 --在VS Code中,右键单击Azure Functions扩展中的项目→ 部署到功能应用程序 → 选择您的功能应用程序。

防火墙/网络

要允许函数应用程序连接到Azure SQL,请执行以下操作:

  1. 在Azure门户中,转到 SQL 服务器 (不是数据库)。
  2. 导航至 安全 → 网络.
  3. 检查 “允许Azure服务和资源访问此服务器”.
  4. 点击 保存.

远程测试

1.将远程服务器添加到 .vscode/mcp.json

{
  "servers": {
    "<your-app-name>-remote": {
      "type": "http",
      "url": "https://<your-app-name>.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