plugins/fabric-skills/skills/azmon-mirroredcatalogs-operations-cli/SKILL.md
Brings Azure Monitor, Application Insights, and Log Analytics telemetry into Fabric as Eventhouse external delta tables and correlates it with business data. Use to onboard observability data, judge whether latency or availability affected revenue, or build a Real-Time dashboard and Operations Agent over it.
npx skillsauth add microsoft/skills-for-fabric azmon-mirroredcatalogs-operations-cliInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Telemetry — MANDATORY. Every
api.fabric.microsoft.comcall must carryx-ms-fabric-skill: azmon-mirroredcatalogs-operations-cli(az rest:--headers "x-ms-fabric-skill=azmon-mirroredcatalogs-operations-cli"), including every LRO poll,fabric_lroand retry. Snippets omit it — add it anyway.
Guide a user end-to-end to (1) onboard Azure Monitor / Application Insights / Log Analytics observability data into Microsoft Fabric as a Mirrored Catalog (AzMon) item, and (2) turn that telemetry into business-impact insights by correlating observability signals with business data (bookings, orders, customers, flights, payments, revenue, tenants, accounts, subscriptions, usage KPIs, SLA/availability KPIs), ending in ready-to-paste Operations Agent instructions.
This is a self-contained Skills-for-Fabric package. It does not depend on
any MCP server or tool controller as the execution mechanism. Product/API
knowledge, supported flows, guardrails, and modeling rules live in this file and
in references/*.md.
Before running this skill, read the shared common guidance:
azmon-mirroredcatalogs-operations-cli is for onboarding Azure Monitor /
Application Insights / Log Analytics telemetry into Microsoft Fabric
(mirroredCatalogs endpoint), correlating that telemetry with business data, and
generating Operations Agent instructions. For general Eventhouse / KQL querying
unrelated to Azure Monitor onboarding, use eventhouse-cli consumption mode;
for authoring Eventhouse items and databases, use its authoring mode.
Read these when the corresponding stage needs product/API detail. Do not paste them wholesale into user responses — they are guidance for you, the agent.
| Reference | Use it for | |-----------|-----------| | references/azmon-fabric-api-reference.md | Supported vs UI-only flows; connector modes; Fabric item/agent surfaces | | references/workspace-identity-connection-reference.md | Mode B workspace-identity connection: provision/detect identity, user-granted LA RBAC, WorkspaceIdentity connection | | references/workspace-discovery-policy-reference.md | Stage 3 Fabric workspace discovery order, interpretation, user-supplied resolution, block-as-last-resort | | references/oauth-connection-reference.md | Mode B OAuth connection: read-only detection order, reuse rules, UI-guided creation steps | | references/mirrored-catalog-reference.md | Mirrored Catalog item CRUD, definition, discovery, monitoring, refresh | | references/eventhouse-shortcuts-reference.md | Eventhouse/KQL, OneLake shortcuts, queryability requirement | | references/operations-agent-reference.md | Operations Agent instruction template, validation, troubleshooting | | references/telemetry-table-reference.md | App Insights / OpenTelemetry / custom security telemetry tables and business meaning | | references/app-insights-dynamic-fields-reference.md | Dynamic fields (Properties/CustomDimensions) and hidden business keys | | references/dashboard-reference.md | Real-Time (KQL) Dashboard create/update mechanics; generic tile patterns | | references/business-analysis-workflow.md | Full detail for the business-analysis half — Stages 13–17 (incl. correlation patterns & modeling appendices); load at the Stage 12 handoff |
Business entities named anywhere in this Skill or its references — bookings, orders, customers, flights, revenue, tenants, payments, and similar — are EXAMPLES ONLY. The Skill MUST NOT infer the user's business domain from these examples. The user's actual business entities MUST be discovered from real Fabric data (Eventhouse / KQL database / Warehouse / Lakehouse / shortcuts) and confirmed with the user before use.
To be explicit:
The Skill is a guided staged workflow.
Actual execution depends on capabilities available in the current environment.
Portal-guided instructions are allowed ONLY for OAuth Azure Monitor connector creation.
The Skill MUST NOT switch the entire onboarding flow to portal-guided instructions as a generic fallback.
For all non-OAuth stages, the Skill MUST first attempt to discover whether a supported execution path exists in the current environment.
Supported execution paths may include:
az rest --method get
against https://api.fabric.microsoft.com/... (discovery/read-only only)Log Analytics REST API reference (agent-facing). When the Skill needs to perform or validate Azure Log Analytics operations, it may consult the official Log Analytics REST APIs reference to identify supported Log Analytics management, workspace, table, ingestion, and query APIs. This is agent-facing guidance only and does not relax the secrecy rule above.
These execution paths are distinct and MUST NOT be conflated:
az rest --method get —
a narrow, permitted exception used ONLY for Fabric discovery/read against
https://api.fabric.microsoft.com/.... It is GET-only, never creates,
updates, deletes, or modifies anything, and never exposes tokens, secrets,
auth headers, or sensitive payloads. This is NOT general shell/CLI access.MCP unavailability alone does NOT mean execution capability is unavailable.
Unavailability of any single execution path does NOT automatically imply the capability is unavailable. Before declaring a capability unavailable, the Skill MUST evaluate ALL supported execution paths listed above and confirm that none is available. Capability unavailable may be reported only after every supported execution path has been evaluated.
If no supported execution path exists, the Skill MUST:
The Skill MUST NOT:
The Skill SHOULD prefer automated execution paths over UI-guided instructions:
Before providing UI-guided instructions the Skill MUST:
Only after those steps may the Skill provide UI-guided guidance.
OAuth Azure Monitor connector creation remains an explicitly supported UI-guided scenario and does not require the above evaluation.
The Skill MUST operate as a strict staged workflow controller.
Begin every response with this structure, written as normal chat text (not a code block):
Then close with a line inviting the user to confirm before continuing (e.g. “Waiting for your confirmation to continue.”).
If the current stage is unclear → STOP and ask the user where to resume.
After presenting any step that requires confirmation:
The Skill MUST NOT run arbitrary shell/CLI/az/PowerShell commands, perform network debugging, investigate server connectivity, or execute infrastructure troubleshooting. These are out of scope unless explicitly part of the current stage.
Narrow exception — Fabric REST read-only discovery. The Skill MAY use an
authenticated az rest --method get call ONLY for Fabric REST read-only
discovery, and ONLY when ALL of the following hold:
https://api.fabric.microsoft.com/....This exception does NOT permit arbitrary shell/CLI execution, non-GET az rest
calls, or use of the Kusto / KQL data-plane when disabled.
Narrow exception — Fabric workspace-identity provisioning + LA role assignment
(Mode B only). In the Mode B workspace-identity option, the Skill MAY use
authenticated az calls to detect/provision the workspace identity and, when the
caller is permitted, assign its Log Analytics role, limited to:
GET https://api.fabric.microsoft.com/v1/workspaces/{id} (detect), andPOST https://api.fabric.microsoft.com/v1/workspaces/{id}/provisionIdentity
(provision) plus GET polling of its long-running operation, andaz role assignment list (check) and az role assignment create at the Log
Analytics workspace scope to grant the identity Owner, but ONLY when the
caller holds Microsoft.Authorization/roleAssignments/write there.Each write is confirmation-gated (Stage 5), touches only the workspace identity
and its LA role (nothing else), exposes no tokens/secrets/auth headers, and
the Skill states the capability path used. If the caller lacks role-assignment
permission, the Skill MUST NOT force it — it instructs the user / an admin to run
the assignment instead. This does NOT permit any other non-GET az rest calls or
any broader az usage.
Behave like a guided product experience, not a backend debugger.
Confirm what the user wants: onboard observability data into Fabric, explore a business insight, or both. Capture (in plain language) any workspace names or business outcome they already mention — but do not yet drive correlation.
Application Insights telemetry is queried through its backing Log Analytics workspace (workspace-based Application Insights). Help the user pick the correct Log Analytics / Application Insights-backed workspace.
When the user names a workspace and no exact match exists, the Skill MUST NOT fail. Instead:
Never fabricate a workspace name or GUID — only offer real discovered workspaces.
Help the user choose the target Fabric workspace (display name + id). Use a case-insensitive substring filter when helpful. Read-only; nothing is created here. Never expose raw API responses or tokens.
Fabric workspaces are not Azure Resource Manager resources, so absence of an automatic enumeration path does NOT mean no Fabric workspace exists. Never terminate the workflow early: if automatic discovery fails, ask the user for a Fabric Workspace Name, ID, or URL, validate it as far as the available capabilities allow, and continue. Never auto-select a workspace, never fabricate a workspace or a validation result, and mark Stage 3 BLOCKED only after every discovery mechanism AND every user-supplied resolution path has been exhausted.
Follow the full discovery order, the interpretation rules, and the UI-guided last-resort boundary in references/workspace-discovery-policy-reference.md.
Validation MUST run against the identity that will actually perform the flow,
so the identity is chosen before any validation check — not deferred to
Stage 5. Do NOT silently reuse whatever az happens to be signed in as.
Present the choice and STOP — ask this as normal chat text (a plain numbered list, not a code block):
Which identity should I use for this onboarding?
Invite the user to reply 1 or 2; note that Service Principal is recommended.
az account show) so
validation runs against the right principal. If it does not match the chosen
identity, stop and resolve the sign-in before validating.Before any creation, verify for that identity:
If validation fails, summarize which checks passed/failed in user terms, explain
the missing capability, and offer to try another workspace, grant the missing
permission, or switch identity. See
references/azmon-fabric-api-reference.md for supported-scope rules.
Before declaring validation capability unavailable, the Skill MUST determine whether the environment provides one of the following:
MCP availability is only one possible execution path.
The Skill MUST report validation capability unavailable only after evaluating all supported execution paths and finding none.
Before declaring validation capability unavailable, the Skill MUST:
Two connection modes are supported. Prefer Service Principal (Mode A) — the
automated, non-interactive path — as the default. Fall back to OAuth (Mode B)
only when Service Principal is unavailable or the user explicitly requests it.
Keep the two modes separate. Never route OAuth through Service Principal
logic, and never route Service Principal through OAuth / interactive sign-in
logic. See
references/azmon-fabric-api-reference.md
for the authoritative connector rules and the exact documented connection API
endpoints and payload shapes (List / Get / Create Connection + List Supported
Connection Types). Use those documented shapes — do not guess a connection
payload or go searching general docs. When the Azure Monitor connector's exact
type / creationMethod / parameters are unknown, resolve them from the
supportedConnectionTypes endpoint rather than assuming.
The identity was already chosen and validated in Stage 4 (Identity selection). Use that identity here — do not re-prompt unless the user changes it. Map the chosen identity to its connection mode:
To be discoverable, a connection must have at least one role assigned to the calling identity — whether the Service Principal (Mode A) or the user (Mode B). Any assigned role makes it appear in the listing and reusable; a User role is enough for detection and reuse, and Owner is only needed to manage / modify / delete it. If the caller holds no role on a connection, the API will not return it — that is by design, not a failure.
Therefore, if the search finds no matching connection, the Skill MUST NOT immediately conclude the connection does not exist. It MUST first consider that the connection may exist but simply be invisible to the current identity because it holds no role on it, and:
Never fabricate a connection or claim one exists without a real listing match.
Portal-guided instructions are permitted ONLY for OAuth Azure Monitor connector creation.
Portal guidance is NOT an allowed fallback for:
If execution capability for these actions is unavailable, the Skill MUST stop and identify the missing capability.
Present this as "connect using Service Principal" — the automated, non-interactive path (no user login, no UI step). This is the preferred default; attempt it before OAuth.
Automation boundary: infrastructure (connector create-or-reuse, mirrored item creation) is automated; business decisions (Eventhouse/KQL DB selection, shortcut creation) always require explicit user confirmation.
When the chosen identity is User / interactive (Mode B), the connection can be created two ways. Before detecting or creating anything, present this choice as normal chat text (a plain numbered list, not a code block) and STOP for the user's answer:
How should I authenticate the Azure Monitor connection?
Route to the matching sub-branch below — 1 → Mode B (OAuth), 2 → Mode B (Workspace identity). Keep the two strictly separate. If the user has no preference, note that workspace identity avoids interactive sign-in and secret handling, but WAIT for their choice — never auto-select.
Use this sub-branch when the user picked option 1 above, i.e. only when Service Principal (Mode A) is unavailable or the user explicitly requests OAuth. OAuth connector creation is UI-guided only (Fabric → Manage Connections) — the Skill never creates one through an API; it only detects and reuses an existing connection, read-only, and only when the Log Analytics workspace matches exactly.
Follow the full detection order, reuse rules, and user-facing wording in references/oauth-connection-reference.md. Keep this strictly separate from Mode A.
Use this sub-branch when the user picked option 2 above. Fabric's automatically-managed workspace identity is used as the connection credential (no secret). This flow provisions the identity if needed, ensures it has a sufficient Log Analytics role — assigning it automatically when the caller is permitted, otherwise instructing the user — then creates the connection.
Follow the full sequence, endpoints, gates, and payloads in
references/workspace-identity-connection-reference.md.
Key gates: provisioning the identity is confirmation-gated (caller must be
workspace Admin); the LA role is assigned by the Skill when the caller
holds role-assignment permission (else the Skill instructs and WAITs for
confirmation) — both writes are confirmation-gated; then create the connection
using the WorkspaceIdentity credential type. Keep this strictly separate from
Mode A.
Create the Azure Monitor Mirrored Catalog item in the target Fabric workspace, or reuse an existing matching item. This is a Fabric-modifying action → confirm first. Supported Mirrored Catalog operations (item CRUD, definition, discovery, monitoring, refresh) are documented in references/mirrored-catalog-reference.md.
Per Microsoft Learn, the Create Mirrored Catalog API lists service principals and managed identities as supported identities for create, so a Service Principal create is documented as supported and is not an absolute platform limitation.
Observed fallback. Some Service Principal runs have nonetheless seen the item create rejected under an application-only token (the underlying item-creation path can run on-behalf-of a signed-in user). Treat this as observed tenant behavior, not a documented rule, and keep the docs-accurate default: attempt create under the SP, and only fall back to a user (delegated) / UI context if the create call is actually denied or unavailable.
Get, list, update, discovery, monitoring, refresh, and shortcut operations all work under an application-only SP token once the item exists.
Consequently, when running under a Service Principal, the Skill MUST:
Downstream Mirrored Catalog operations (update, discovery, monitoring, refresh) remain available to the Service Principal once the item exists.
The item does not take a free-form list of table names — it mirrors by
scope (a namespace hierarchy path in the definition), and that scope MUST be
a Selectable value returned by the List Scopes discovery API. To target
only the tables the user wants:
Selectable scope for the item. If the user
already knows the target tables, pick the narrowest Selectable scope that
covers them. If there is no intent yet (the user wants to explore first),
create with a broader scope and optionally re-scope narrower later —
updating the item definition — once intent is captured. Use only real returned
scope values — never fabricate a scope or table name.Selectable scope is broader than the requested
set, the item will also mirror the extra sibling tables under that scope —
mirroring cannot exclude individual siblings. State this plainly and get
explicit confirmation before creating.Unless the user specifies otherwise, the default set of tables to mirror is
every table that (a) appears in real List Scopes / Discovery output and (b)
matches one of these name prefixes (case-insensitive; tolerate the _CL
custom-table suffix):
App* — Application Insights tablesOTel* — OpenTelemetry-native tables (e.g. OTelLogs)XD* — custom, security-related log tablesThen ask the user whether they want any additional tables before creating (confirmation gate — present the resolved set and WAIT).
Selectable scope that covers
all matched tables. If that scope also pulls in extra sibling tables beyond
the default set, list the extras explicitly, explain that siblings cannot be
individually excluded, and get confirmation before creating. Once confirmed, the
extras are expected — they are not failures at the Stage 8 equality check.App* / OTel* / XD* match any discovered table, fall back to
presenting all/representative discovered tables (explore-first) and let the user
choose.XD* security tables are only considered after the workspace has passed
Stage 4's validation (a supported, validated workspace); an unsupported-workspace
block takes precedence and table selection MUST NOT be used to bypass it.App*/OTel*/XD* tables, disclosing any
extra siblings — never re-scope silently; confirm first.The confirmed set (default + confirmed siblings + any tables the user adds) becomes the expected set for the Stage 8 requested-vs-mirrored equality check.
For a first-time mirrored workspace, tell the user upfront that mirrored tables and data typically take around 5 minutes to materialize and become queryable after the item is created. Until then, discovery/queries may return empty or partial results — this is expected, not an error. Do not declare tables missing during this window: verify mirror/refresh status, wait, and re-check before concluding anything.
After the item is created or reused, optionally capture business intent now (Stage 7) if the user already has a goal; otherwise proceed to table discovery and exploration and capture intent before schema verification (Stage 12).
If the user already has a business question, capture it now so table discovery (Stage 8) and Eventhouse scoring (Stage 9) can be guided by it. If they don't, this stage is optional right now — the user may explore their data first (Stages 8–11) and provide intent later. Either way, intent is MANDATORY before schema verification (Stage 12) and correlation (Stage 14); capturing it early is just an optimization that focuses discovery.
When capturing intent, ask in business language, e.g.:
The Skill MUST NOT proceed to schema verification (Stage 12) or business correlation (Stage 14) without either:
Intent may be provided here or after exploration, but it MUST exist before Stage 12. Never assume intent.
Suggest 3–5 directions, each framed as observability signal → business impact, and ask the user to choose one:
Capturing intent early is allowed but optional — it MUST exist before schema verification (Stage 12). Either way, the Skill MUST NOT generate correlation logic yet. Correlation logic only comes after shortcuts exist, schema is verified, data is queryable, dynamic fields are inspected, join candidates are validated, and data freshness is checked (Stages 10–14).
Browse candidate Azure Monitor / Application Insights tables. If a business goal was captured (Stage 7), filter to the tables relevant to it. If there is no intent yet (explore-first), present all/representative discovered tables so the user can browse. Use only real discovered scope/table values — never fabricate table names. Use references/telemetry-table-reference.md to explain what each table means in business terms and which tables best fit the stated goal (or what each table offers when exploring).
The primary discovery mechanism is the Mirrored Catalog Discovery APIs. If discovery appears incomplete, do NOT immediately conclude tables are missing or switch to alternative metadata paths. First:
Only after these checks may the Skill evaluate alternative metadata paths. See references/mirrored-catalog-reference.md.
This check applies once a requested table set exists — whether specified up front or after intent is captured later. When the default mirror set (Stage 6) or a user-adjusted set is in effect, that set is the requested set for this check, and any sibling tables disclosed and confirmed under the narrowest-common- scope rule are expected (compare against the chosen scope's expected contents, not a bare table list — do not report confirmed siblings as failures). When the user asked for a specific set of tables, verify the item mirrors exactly that set — use equality, not subset ("my tables are present" is not enough). Compare the actually-mirrored table set (from Discovery / Monitoring) against the requested set and report the result:
Selectable scope exists, offer to re-scope; otherwise
state that the source only exposes a broader scope and the extras are
unavoidable.Never fabricate the mirrored table set; enumerate it from real Discovery / Monitoring results only.
Ask the user which Eventhouse should host the LA-table shortcuts. Present these options as normal chat text (not a code block) and require explicit confirmation:
Both options are writable and support the Operations Agent path (they can host
IncidentBins materialization).
Run Eventhouse Recommendation Mode to inform the choice — discover available Eventhouses, inspect their contents (tables, shortcuts, KQL databases), and score each by relevant business tables, relevant telemetry tables, existing shortcuts, queryable tables, KQL database availability, and data freshness. When the user's goal is correlating telemetry with existing business data, recommend option A (colocation); otherwise a new Eventhouse is a clean starting point. Present as normal chat text:
The Skill MUST NOT auto-select. Present the recommendation, state exactly what will be created, and require explicit confirmation. See references/eventhouse-shortcuts-reference.md.
Plan external Delta table registrations for the resolved table set into the chosen/new Eventhouse — name the target Eventhouse in the plan header — before any schema verification or join logic. Present the plan and STOP for confirmation.
Key rules (see the shortcuts reference for detail):
Tables/dbo/<Table> path — not from the Core Shortcuts API (which creates a
link only). Query via external_table('<name>').Tables/dbo/<Table> path, target KQL
database, and that the schema will be read from the table's Delta log.true)Query acceleration is a policy on external delta tables (set via
.alter external table … policy query_acceleration), not a shortcut-object
property. Every registered external delta table gets acceleration enabled
(true) — not optional. Include an Acceleration Enabled (always Yes) plan-table
column; if the environment can't support it, surface that rather than registering
without the policy. Full policy in
references/eventhouse-shortcuts-reference.md.
Only after explicit confirmation, register each table as an external Delta
table in the target KQL database (report which one): read the table's schema
from its Delta log, map Delta → Eventhouse types, and run .create external table ['<Table>'] (<cols>) kind=delta ( h@'<OneLake Tables/dbo/<Table> path>;impersonate' )
via POST {clusterUri}/v1/rest/mgmt. Then verify with .show external tables +
external_table('<Table>') | take 1. The Core Shortcuts API is not required
for queryability (it creates a link only). If a table is not queryable → STOP and
return to planning / registration. See
references/eventhouse-shortcuts-reference.md
for the schema-read, type mapping, and command template.
When registering ANY external delta table, always enable the query acceleration
policy (true) per the
Query acceleration policy,
and report the resulting status (expected: enabled).
Never build correlation logic on assumptions or screenshots. Before proposing any join, bin, or threshold, verify against the actual KQL database. Business intent MUST already be captured/confirmed before this stage — if it was deferred at Stage 7, capture it now (using the Stage 7 questions/fallback) before proceeding, since the telemetry-source selection below is scored by goal relevance. Never assume intent.
getschema.Query convention. Mirrored telemetry tables are external tables — query them via
external_table('<name>')(they do not appear in.show tables); business tables that are managed in an Eventhouse use their bare name.
Retrieve real schema. For each table:
external_table('<TableName>') | getschema | project ColumnName, ColumnType.
Use authoritative column names/types — not names guessed from screenshots or
table names.
Inspect and sample dynamic fields. Business join keys are often nested in
dynamic columns (Properties, CustomDimensions, Details, Measurements,
Payload, Context). Sample rows and inspect keys. See
references/app-insights-dynamic-fields-reference.md.
Extract candidate business identifiers with explicit KQL
(tostring(Properties.BookingId), with casing fallbacks via coalesce).
Validate join keys against real data. Prove a candidate joins — run the join and confirm non-zero matches:
external_table('AppEvents')
| extend BookingId = tostring(Properties.BookingId)
| where isnotempty(BookingId)
| join kind=inner (Bookings | project BookingId = tostring(BookingId)) on BookingId
| summarize MatchedRows=count(), DistinctBookings=dcount(BookingId)
Non-zero → direct join, high confidence. Zero → the key is wrong or data doesn't overlap; find the real one.
Check freshness and align the window.
external_table('<TableName>') | summarize Rows=count(), MinTime=min(TimeGenerated), MaxTime=max(TimeGenerated).
Do not assume ago(1h); use a window covering the actual data range and
explain it in user terms.
Confirm categorical values used by rules
(external_table('<Table>') | summarize count() by <field>) so impact rules
use real categories.
Telemetry source selection MUST be data-driven. Before selecting a correlation model, the Skill MUST inspect ALL candidate telemetry sources discovered (e.g. AppEvents, AppExceptions, AppRequests, AppDependencies, AppTraces, AppPageViews, AppBrowserTimings, AvailabilityResults, and any other telemetry source present) — not just one.
Score each candidate telemetry source by:
Select the highest-scoring telemetry source. The Skill MUST NOT automatically prioritize AppExceptions, and MUST NOT automatically prioritize AppEvents — the winner is whichever source scores highest against real data.
Before Stage 14, ALL must hold: schema retrieved via getschema; join keys
validated with non-zero matches (when a direct join is used); freshness verified
and window aligned; relevant categorical values confirmed. If any fails → STOP,
do not proceed.
Present a concise summary (verified join keys, match results, business impact if any, data time window). Then ask: "Do you want to continue to business analysis (impact modeling, a dashboard, and optionally an Operations Agent) based on this verified model?" HARD STOP and wait. On confirmation, continue with Stages 13–17 as defined in references/business-analysis-workflow.md.
The business-oriented analysis half (business data discovery/scoring, correlation planning, an optional Real-Time KQL dashboard, and an optional gated Operations Agent) is defined authoritatively in references/business-analysis-workflow.md (with Appendices A–B) and loaded only when the user opts in at the Stage 12 handoff. On opt-in, do not work from memory — open that file and follow Stages 13–17 exactly; the controller still tracks and enforces these stages, their order, hard stops, and confirmation gates (including dashboard-before-agent and the Stage 16 "do we even want an agent?" gate).
User: "In my Observability workspace, onboard our Azure Monitor / Log Analytics observability data (it holds our Application Insights tables) into Fabric, then tell me whether last week's latency spike hurt checkout conversions."
Skill behavior: Runs the staged workflow — confirms the target workspace and checks onboarding prerequisites (a reachable Azure Monitor / Log Analytics source or connection), stopping with an explicit list of what is missing if any prerequisite is absent. Once the observability data (including the Application Insights telemetry tables) is onboarded and queryable, it discovers the real business dataset in the workspace, correlates the latency signal against the conversion KPI using discovered keys, and reports a specific business-impact conclusion (or an error if the required data is unavailable). It never fabricates workspace names, tables, or query results, and never exposes tokens or connection internals.
User: "Create a new Spark notebook and build a Delta table pipeline to load my business dataset."
Skill behavior: Declines the out-of-scope authoring request, creates nothing in Fabric, and directs the user to the appropriate authoring mode in spark-cli rather than taking over the task.
tools
Manages Fabric Spark work, including notebook cell code with %%configure, %%sql, PySpark and notebookutils, named notebook runs, Livy sessions, triage of failed or OOM notebook and pipeline Spark runs, and the Materialized Lake View (MLV) lifecycle. Load it before writing MLV SQL, since CREATE MATERIALIZED LAKE VIEW and its CONSTRAINT clause are Fabric-only. KQL materialized views belong to eventhouse-cli.
tools
Governs Microsoft Fabric OneLake catalog health, protection, and trust through Fabric Admin, Core, and Power BI REST APIs. Use for tenant or owner-scoped audits and guarded remediation of domains, workspace assignment, capacity, labels, tags, descriptions, refresh, and item identity. Catalog item discovery belongs to search-consumption-cli.
tools
Runs the Fabric Git integration lifecycle through fab api or az rest, including connecting a workspace to Azure DevOps or GitHub, committing, updating from Git, reading sync status, resolving conflicts, disconnecting a connected workspace, and automating sync with a service principal. For stage promotion use deployment-pipelines-authoring-cli. Branch switching, fab deploy, fabric-cicd and cross-workspace rebinding are out of scope.
tools
Manages Fabric IQ Ontology items, including entity and relationship types, data bindings, and definition updates, plus schema, lineage, grounding, and graph-walk exploration. Use for ontology modelling and traversal. For natural-language questions over a Power BI report use fabriciq.