Generate weekly telemetry reports and customer adoption reports for Azure Backup MCP tools. Runs KQL queries against the Kusto telemetry cluster, analyzes error patterns with 3-way classification (Customer/Azure Service/MCP Tool Bug), identifies customers via P360/C360 cross-cluster joins, compares week-over-week metrics, correlates with merged PRs and releases, and produces an Outlook-compatible HTML report. USE WHEN: weekly telemetry report, Azure Backup MCP telemetry, error analysis, telemetry bugs, weekly report, MCP tool success rate, backup telemetry, error classification, customer usage report, who is using Azure Backup MCP, backup adoption, customer report.
npx skills add https://github.com/microsoft/mcp --skill azurebackup-telemetry-report
Generate comprehensive telemetry reports for the Azure Backup MCP toolset by:
P360_CustomerName)ddazureclients.kusto.windows.net)AzureDevExp database on the Kusto clustermicrosoft/mcp repository (for PR/release correlation)Run the following KQL queries against the Kusto cluster using the MCP Kusto tool.
All queries use:
https://ddazureclients.kusto.windows.netAzureDevExpgetAzureMcpEvents_ToolCallsThis is the primary query. It classifies every call into one of four categories:
AggregateException, RequestFailedException with 5xx)FormatException, ArgumentNullException, ArgumentException, etc.Refer to kql-queries.md for the full query.
Compare total calls, success rate, customer errors, Azure service errors, and MCP tool bugs between
the current week and the previous week. See kql-queries.md.
Run the error summary query to get per-tool exception types, messages, and stack traces.
Also run the daily error trend query. See kql-queries.md.
Get P50/P95/P99 latency for successful calls. See kql-queries.md.
Query azurebackup/VaultType, azurebackup/WorkloadType, azurebackup/DatasourceType, azurebackup/OperationScope
dimensions to see if users have upgraded to versions with telemetry tags.
Use queries 7, 11, 12, and 13 from kql-queries.md.
Run these git commands against the microsoft/mcp repository:
# Merged PRs this week
git log upstream/main --oneline --since="<week-start>" -- tools/Azure.Mcp.Tools.AzureBackup/
# Releases shipped
git log upstream/main --oneline --since="<week-start>" --grep="Prepare MCP release"
# Open branches
git branch -a --list "*azurebackup*"
# Changes since last release
git diff <last-release-tag>..upstream/main --stat -- tools/Azure.Mcp.Tools.AzureBackup/
Also count tests on main (checkout upstream/main test files first):
# Runnable unit test count = [Fact] + [InlineData] (each InlineData is a separate test run)
$facts = (Select-String "\[Fact\]" tools/Azure.Mcp.Tools.AzureBackup/tests/Azure.Mcp.Tools.AzureBackup.Tests/**/*.cs | Measure-Object).Count
$inlines = (Select-String "\[InlineData" tools/Azure.Mcp.Tools.AzureBackup/tests/Azure.Mcp.Tools.AzureBackup.Tests/**/*.cs | Measure-Object).Count
# Total runnable = $facts + $inlines
# Live test count — count only [Fact] (each method has [Fact]; [LiveTestOnly] is an
# additional attribute on the same method, so counting both would double-count)
Select-String "\[Fact\]" tools/Azure.Mcp.Tools.AzureBackup/tests/Azure.Mcp.Tools.AzureBackup.Tests/*.cs | Measure-Object
# Registered tools
Select-String "AddCommand" tools/Azure.Mcp.Tools.AzureBackup/src/AzureBackupSetup.cs | Measure-Object
> Important: Do NOT count [Fact] + [Theory] as the unit test count — that gives you
> method count, not runnable test count. Each [InlineData] on a [Theory] is a separate test.
Apply the 3-way error classification:
| Category | Exception Types | What It Means |
|----------|----------------|---------------|
| Customer (4xx) | RequestFailedException with 400/403/404, KeyNotFoundException | User error — wrong input, missing permissions, resource doesn't exist |
| Azure Service | AggregateException, RequestFailedException with 5xx | Azure SDK/API/auth layer failure — tool correctly surfaces it |
| MCP Tool Bug | FormatException, ArgumentNullException, ArgumentException, InvalidOperationException (thrown by our code for unsupported operations) | Our tool code is wrong — needs a fix |
MCP Tool Success Rate = (Total - MCP Tool Bugs) / Total
For each error cluster, determine:
Use the report-template.html as a starting point.
The report must include these sections in order:
10. Codebase Snapshot — Tool count, test counts, lines changed
11. Action Items — Prioritized next steps
Save the report as azure-backup-telemetry-report-<date>.html (both the styled version and the Outlook-compatible version).
For the Outlook version, apply these rules:
<style> block or CSS classes)border-radius, gradients, or CSS pseudo-elementscellpadding/cellspacing attributes on tablesPixelsPerInch declaration in <head>border-left on table cells for callout boxes (instead of separate div)> Customer Report Queries: For customer identification, tool adoption, client distribution,
> and version analysis, refer to kql-customer-queries.md
> (queries 14–24). These queries use cross-cluster joins to mabprod1 (P360) and icmdataro.centralus (C360)
> for customer name resolution and external/internal classification.
>
> Key rule: Always use P360_CustomerName (not CustomerName) from the P360 table.
> The CustomerName field contains generic tenant names (e.g., "Denis" for Prometeia SpA).
> Important: MCP bug exception types must be checked before StatusCode.
> The HandleException base class maps ArgumentNullException (inherits ArgumentException)
> to HTTP 400, which would incorrectly classify MCP bugs as "Customer" errors if StatusCode
> is checked first.
Is success == true?
└─ YES → "Success"
└─ NO →
Is ExceptionType FormatException / ArgumentNullException / ArgumentException / InvalidOperationException?
└─ YES → "MCP Tool Bug"
└─ NO →
Is ExceptionType ValidationError?
└─ YES → "Customer (4xx)" (user omitted required options)
Is ExceptionType System.UnauthorizedAccessException?
└─ YES → "Customer (4xx)" (broken credentials / expired token)
Is ExceptionType Azure.Identity.CredentialUnavailableException?
└─ YES → "Customer (4xx)" (auth not configured)
Is StatusCode 400/401/403/404?
└─ YES → "Customer (4xx)"
└─ NO →
Is ExceptionType Azure.RequestFailedException with 5xx?
└─ YES → "Azure Service"
Is ExceptionType System.AggregateException?
└─ YES → "Azure Service"
Otherwise → "Unknown" (investigate)
These are the bugs triaged from the original telemetry analysis (April 2026):
| Bug | Tool | Description | Fix PR | Release |
|-----|------|-------------|--------|---------|
| BUG-1 | backup_status, protecteditem_get | ArgumentNullException on null ResourceType in MapArmResourceTypeToBackupDataSourceType | #2518 (partial), #2621 (defense-in-depth) | beta.7 (partial), pending |
| BUG-2 | protecteditem_protect | VM pre-discovery loop timeout | #2470 | beta.6 |
| BUG-3 | protectableitem_list, find-unprotected | Workload normalization ArgumentException in ValidateAndParseResourceTypeFilter | #2518 (partial), #2621 (relaxed regex) | beta.7 (partial), pending |
| BUG-4 | soft-delete | Deprecated BackupResourceVaultConfig API | #2518 | beta.7 |
| BUG-5 | enable-crr | Deprecated BackupResourceConfig API | #2518 | beta.7 |
| BUG-6 | vault_get | FormatException on subscription name (non-GUID) | #2518 | beta.7 |
| BUG-7 | protecteditem_protect | DPP vault missing managed identity | #2470 | beta.6 |
| BUG-8 | recoverypoint_get | Null container in resolution | #2518 | beta.7 |
| NEW-1 | vault_get | AggregateException — pre-existing auth race (Azure Service, not MCP bug) | Not filed | — |
| NEW-2 | job_get | FormatException in DPP SDK — XmlConvert.ToTimeSpan fails during DataProtectionBackupJobProperties.Deserialize (Azure SDK bug, not MCP code) | #2621 (workaround catch), azure-sdk#59306 (upstream) | pending |
> Note: PR #2518 title says "Fix 5 telemetry-triaged bugs (BUG-3,4,5,6,8)" but the
> actual merged code also includes the BUG-1 fix. However, the #2518 fixes for BUG-1 and
> BUG-3 were incomplete — confirmed by telemetry on beta.8/beta.9. PR #2621 adds
> defense-in-depth fixes for both. Always verify the diff, not just the title.
When new errors appear, assign the next sequential ID (NEW-2, NEW-3, etc.) and add to this table.
kql-queries.md — All Kusto queries used in the reportreport-template.html — Outlook-compatible HTML templateQuery the OFR (Office of Financial Research) Hedge Fund Monitor API for hedge fund data including SEC Form PF aggregated statistics, CFTC Traders in Financial Futures, FICC Sponsored Repo volumes, and FRB SCOOS dealer financing terms. Access time series data on hedge fund size, leverage, counterparties, liquidity, complexity, and risk management. No API key or registration required. Use when working with hedge fund data, systemic risk monitoring, financial stability research, hedge fund leverage or leverage ratios, counterparty concentration, Form PF statistics, repo market data, or OFR financial research data.
Design and automate Extract, Transform, Load data pipelines for data integration and analytics
Track and analyze US government shutdown liquidity impacts by monitoring TGA (Treasury General Account), bank reserves, EFFR, and SOFR data from FRED API. Use when user wants to (1) analyze current or past government shutdown effects on financial markets, (2) track liquidity conditions during fiscal policy disruptions, (3) assess "stealth tightening" effects, (4) compare shutdown episodes across different monetary policy regimes (QE vs QT), or (5) generate liquidity stress reports with historical context. Recommended usage frequency is weekly on Wednesdays after TGA/reserve data releases.
Auto-instrument Node.js applications with distributed tracing, metrics, and logs.
Azure Monitor Query SDK for Java. Execute Kusto queries against Log Analytics workspaces and query metrics from Azure resources.
Azure Monitor Query SDK for Python. Use for querying Log Analytics workspaces and Azure Monitor metrics.
Use this skill when you need to search Datadog logs, query metrics, tail logs in real-time, trace distributed requests, investigate errors, compare time periods, find log patterns, check service health, or export observability data.
Write comprehensive clinical reports including case reports (CARE guidelines), diagnostic reports (radiology/pathology/lab), clinical trial reports (ICH-E3, SAE, CSR), and patient documentation (SOAP, H&P, discharge summaries). Full support with templates, regulatory compliance (HIPAA, FDA, ICH-GCP), and validation tools.
Take microsoft/azurebackup-telemetry-report from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.