Monte Carlo Performance Diagnosis Skill
This skill helps diagnose data pipeline performance issues using Monte Carlo's cross-platform observability data. It works across Airflow, dbt, Databricks, and warehouse query engines to find bottlenecks, detect regressions, and identify root causes.
Monte Carlo tool routing (required): Always call Monte Carlo MCP tools through this plugin's
bundled server, whose fully-qualified tool names are
mcp__plugin_mc-agent-toolkit_monte-carlo-mcp__<tool> (e.g.
mcp__plugin_mc-agent-toolkit_monte-carlo-mcp__get_alerts). Bare tool names used in this skill
(get_alerts, search, get_table, …) refer to that bundled server. If the session also has a
separately-configured monte-carlo-mcp server, do not route to it — it may point at a
different endpoint or credentials.
Reference files live next to this skill file. Use the Read tool (not MCP resources) to access them:
- Tiered investigation approach:
references/investigation-tiers.md (relative to this file)
- Query analysis patterns:
references/query-analysis.md (relative to this file)
When to activate this skill
Activate when the user:
- Asks about slow pipelines, jobs, or queries
- Wants to find expensive or costly queries
- Mentions performance regressions or degradation
- Asks "why is this pipeline slow?" or "what's using the most compute?"
- Wants to compare performance over time or find bottleneck tasks
- Asks about failed or futile query patterns
When NOT to activate this skill
Do not activate when the user is:
- Investigating data quality issues (use the prevent skill)
- Looking at storage costs (use the storage-cost-analysis skill)
- Creating monitors (use the monitoring-advisor skill)
- Just querying data or exploring table contents
Prerequisites
The following MCP tools must be available (connect to Monte Carlo's MCP server):
Discovery tools (Tier 1):
get_jobs_performance -- find slow/failing jobs across Airflow, dbt, Databricks
get_top_slow_queries -- find slowest query groups by total runtime
Bridge tool:
get_tables_for_job -- convert job MCONs to table MCONs
Diagnosis tools (Tier 2):
get_tasks_performance -- drill into a job's individual tasks
get_change_timeline -- unified timeline of query changes, volume shifts, Airflow/dbt failures
get_query_rca -- root cause analysis for failed/futile queries
get_query_latency_distribution -- latency trend over time
get_asset_lineage -- trace upstream/downstream impact
Supporting tools:
get_warehouses -- list available warehouses
Workflow
Step 1: Identify the scope
Determine what the user wants to investigate:
- Specific job/pipeline: User mentions a job name or pipeline
- Specific table: User mentions a table that's slow to update
- General discovery: User wants to find what's slow
Call get_warehouses to list available warehouses. Match the user's context to a warehouse.
Step 2: Tier 1 -- Discovery
If you don't have specific MCONs to investigate, start with discovery:
Find slow jobs: Call get_jobs_performance with optional integration_type filter (AIRFLOW, DATABRICKS, DBT) if the user specifies a platform.
- Results include: job name, average duration, trend (7-day), run count, failure rate
- Look for: high
avgDuration, negative runDurationTrend7d, high failure rates
Find expensive queries: Call get_top_slow_queries with optional warehouse_id and query_type ("read" for SELECTs, "write" for INSERT/CREATE/MERGE).
- Results include: query hash, total runtime, average runtime, run count
- Look for: queries with high total runtime or high individual execution time
Present the top findings to the user before drilling deeper. A typical investigation needs only 3-7 tool calls.
If both discovery tools return no results: Tell the user no performance issues were found in the current time window. Suggest broadening the scope (different warehouse, longer time range, or a different platform filter).
Step 3: Bridge -- Job to Tables
After Tier 1 identifies problematic jobs, convert to table MCONs:
Call get_tables_for_job(job_mcon=..., integration_type=...) using the integration_type from the job performance results.
This gives you the table MCONs needed for Tier 2 investigation.
Step 4: Tier 2 -- Diagnosis
Now drill into root causes using the MCONs from discovery or the bridge:
Task bottleneck: Call get_tasks_performance to find which specific task in a job is the bottleneck.
What changed? Call get_change_timeline -- this is your most powerful tool. It returns a unified timeline of:
- Query text changes (schema modifications, new JOINs, filter changes)
- Volume shifts (row count spikes/drops)
- Airflow task failures
- dbt model failures
All in one call. Look for correlations: "query changed on day X, runtime doubled on day X+1."
Why are queries failing? Call get_query_rca to get root cause analysis:
- Failed queries: errors, timeouts, permission issues
- Futile queries: queries that run but produce no useful output
- Patterns are pre-computed -- the tool groups failures by cause
Is latency degrading? Call get_query_latency_distribution to see the trend:
- Compare p50 vs p95 -- if p95 >> p50 (>5x), the problem is outlier queries
- Look for step-changes in latency (sudden increase = regression)
- For step-change / regression-time-localization use cases, pass
bucket="1h". The default downsamples to daily on windows ≥ 3 days, which hides hour-level steps.
Trace impact: Call get_asset_lineage with direction="DOWNSTREAM" to see what's affected by a slow table, or direction="UPSTREAM" to find what feeds it.
Step 5: Present findings
Structure your response as:
- Problem summary: What's slow and by how much (with exact numbers from tools)
- Root cause: What changed or what's causing the issue
- Impact: What downstream systems are affected
- Recommendations: Specific actions to fix the issue
Important rules
- Quote tool numbers exactly. If a tool returns "1282 runs, avg 22.5s", say exactly that. Never round, estimate, or fabricate numbers.
- Always compare to baselines. Use 7-day trend data (
runDurationTrend7d) to distinguish regressions from normal variance. Flag if trend data has less than 0.1 confidence.
- Stop when you have a root cause. 3-7 tool calls is typical. More than 10 means you're over-investigating.
- Read vs write queries: When the user asks about "reads" or "read queries", filter with
query_type="read". When they ask about "writes", use query_type="write". Do NOT mix them.
- Never expose MCONs, UUIDs, or internal identifiers to the user. Use human-readable names.
- Cross-platform: This skill works across Airflow, dbt, and Databricks. Note which platform each finding comes from.
Example
User request:
Diagnose why this pipeline became slow, identify the bottleneck from the available telemetry, and propose the smallest verified fix.
Limitations
- Use this skill only when the task clearly matches its upstream source and local project context.
- Verify commands, generated code, dependencies, credentials, and external service behavior before applying changes.
- Do not treat examples as a substitute for environment-specific tests, security review, or user approval for destructive or costly actions.
1---2name: monte-carlo-performance-diagnosis3description: Diagnoses pipeline performance issues -- slow jobs, expensive queries, latency trends -- using Monte Carlo's cross-platform observability. Uses a tiered investigation approach: discover problems, bridge to affected tables, then drill into root causes.4license: Apache-2.05---67# Monte Carlo Performance Diagnosis Skill89This skill helps diagnose data pipeline performance issues using Monte Carlo's cross-platform observability data. It works across Airflow, dbt, Databricks, and warehouse query engines to find bottlenecks, detect regressions, and identify root causes.1011> **Monte Carlo tool routing (required):** Always call Monte Carlo MCP tools through this plugin's12> bundled server, whose fully-qualified tool names are13> `mcp__plugin_mc-agent-toolkit_monte-carlo-mcp__<tool>` (e.g.14> `mcp__plugin_mc-agent-toolkit_monte-carlo-mcp__get_alerts`). Bare tool names used in this skill15> (`get_alerts`, `search`, `get_table`, …) refer to that bundled server. If the session also has a16> separately-configured `monte-carlo-mcp` server, do **not** route to it — it may point at a17> different endpoint or credentials.1819Reference files live next to this skill file. **Use the Read tool** (not MCP resources) to access them:2021- Tiered investigation approach: `references/investigation-tiers.md` (relative to this file)22- Query analysis patterns: `references/query-analysis.md` (relative to this file)2324## When to activate this skill2526Activate when the user:2728- Asks about slow pipelines, jobs, or queries29- Wants to find expensive or costly queries30- Mentions performance regressions or degradation31- Asks "why is this pipeline slow?" or "what's using the most compute?"32- Wants to compare performance over time or find bottleneck tasks33- Asks about failed or futile query patterns3435## When NOT to activate this skill3637Do not activate when the user is:3839- Investigating data quality issues (use the prevent skill)40- Looking at storage costs (use the storage-cost-analysis skill)41- Creating monitors (use the monitoring-advisor skill)42- Just querying data or exploring table contents4344## Prerequisites4546The following MCP tools must be available (connect to Monte Carlo's MCP server):4748**Discovery tools (Tier 1):**49- `get_jobs_performance` -- find slow/failing jobs across Airflow, dbt, Databricks50- `get_top_slow_queries` -- find slowest query groups by total runtime5152**Bridge tool:**53- `get_tables_for_job` -- convert job MCONs to table MCONs5455**Diagnosis tools (Tier 2):**56- `get_tasks_performance` -- drill into a job's individual tasks57- `get_change_timeline` -- unified timeline of query changes, volume shifts, Airflow/dbt failures58- `get_query_rca` -- root cause analysis for failed/futile queries59- `get_query_latency_distribution` -- latency trend over time60- `get_asset_lineage` -- trace upstream/downstream impact6162**Supporting tools:**63- `get_warehouses` -- list available warehouses6465## Workflow6667### Step 1: Identify the scope6869Determine what the user wants to investigate:70- **Specific job/pipeline**: User mentions a job name or pipeline71- **Specific table**: User mentions a table that's slow to update72- **General discovery**: User wants to find what's slow7374Call `get_warehouses` to list available warehouses. Match the user's context to a warehouse.7576### Step 2: Tier 1 -- Discovery7778If you don't have specific MCONs to investigate, start with discovery:79801. **Find slow jobs**: Call `get_jobs_performance` with optional `integration_type` filter (AIRFLOW, DATABRICKS, DBT) if the user specifies a platform.81 - Results include: job name, average duration, trend (7-day), run count, failure rate82 - Look for: high `avgDuration`, negative `runDurationTrend7d`, high failure rates83842. **Find expensive queries**: Call `get_top_slow_queries` with optional `warehouse_id` and `query_type` ("read" for SELECTs, "write" for INSERT/CREATE/MERGE).85 - Results include: query hash, total runtime, average runtime, run count86 - Look for: queries with high total runtime or high individual execution time8788Present the top findings to the user before drilling deeper. A typical investigation needs only 3-7 tool calls.8990**If both discovery tools return no results:** Tell the user no performance issues were found in the current time window. Suggest broadening the scope (different warehouse, longer time range, or a different platform filter).9192### Step 3: Bridge -- Job to Tables9394After Tier 1 identifies problematic jobs, convert to table MCONs:9596Call `get_tables_for_job(job_mcon=..., integration_type=...)` using the `integration_type` from the job performance results.9798This gives you the table MCONs needed for Tier 2 investigation.99100### Step 4: Tier 2 -- Diagnosis101102Now drill into root causes using the MCONs from discovery or the bridge:1031041. **Task bottleneck**: Call `get_tasks_performance` to find which specific task in a job is the bottleneck.1051062. **What changed?** Call `get_change_timeline` -- this is your most powerful tool. It returns a unified timeline of:107 - Query text changes (schema modifications, new JOINs, filter changes)108 - Volume shifts (row count spikes/drops)109 - Airflow task failures110 - dbt model failures111 All in one call. Look for correlations: "query changed on day X, runtime doubled on day X+1."1121133. **Why are queries failing?** Call `get_query_rca` to get root cause analysis:114 - **Failed** queries: errors, timeouts, permission issues115 - **Futile** queries: queries that run but produce no useful output116 - Patterns are pre-computed -- the tool groups failures by cause1171184. **Is latency degrading?** Call `get_query_latency_distribution` to see the trend:119 - Compare p50 vs p95 -- if p95 >> p50 (>5x), the problem is outlier queries120 - Look for step-changes in latency (sudden increase = regression)121 - For step-change / regression-time-localization use cases, pass `bucket="1h"`. The default downsamples to daily on windows ≥ 3 days, which hides hour-level steps.1221235. **Trace impact**: Call `get_asset_lineage` with `direction="DOWNSTREAM"` to see what's affected by a slow table, or `direction="UPSTREAM"` to find what feeds it.124125### Step 5: Present findings126127Structure your response as:1281291. **Problem summary**: What's slow and by how much (with exact numbers from tools)1302. **Root cause**: What changed or what's causing the issue1313. **Impact**: What downstream systems are affected1324. **Recommendations**: Specific actions to fix the issue133134### Important rules135136- **Quote tool numbers exactly.** If a tool returns "1282 runs, avg 22.5s", say exactly that. Never round, estimate, or fabricate numbers.137- **Always compare to baselines.** Use 7-day trend data (`runDurationTrend7d`) to distinguish regressions from normal variance. Flag if trend data has less than 0.1 confidence.138- **Stop when you have a root cause.** 3-7 tool calls is typical. More than 10 means you're over-investigating.139- **Read vs write queries**: When the user asks about "reads" or "read queries", filter with `query_type="read"`. When they ask about "writes", use `query_type="write"`. Do NOT mix them.140- **Never expose MCONs, UUIDs, or internal identifiers** to the user. Use human-readable names.141- **Cross-platform**: This skill works across Airflow, dbt, and Databricks. Note which platform each finding comes from.142143## Example144145**User request:**146147> Diagnose why this pipeline became slow, identify the bottleneck from the available telemetry, and propose the smallest verified fix.148149## Limitations150151- Use this skill only when the task clearly matches its upstream source and local project context.152- Verify commands, generated code, dependencies, credentials, and external service behavior before applying changes.153- Do not treat examples as a substitute for environment-specific tests, security review, or user approval for destructive or costly actions.