Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ The toolkit bundles the following capabilities as a single **mc-agent-toolkit**

| Feature | Description | Details |
|---|---|---|
| **Asset Health** | Checks the health of a data table — surfaces last activity, alerts, monitoring coverage, importance, and upstream dependency health. | [README](skills/asset-health/README.md) |
| **Monitor Creation** | Guides AI agents through creating monitors correctly — validates tables, fields, and parameters before generating monitors-as-code YAML. | [README](skills/monitor-creation/README.md) |
| **Prevent** | Surfaces lineage, alerts, and blast radius before code changes. Generates monitors-as-code and targeted validation queries to prevent data incidents. | [README](skills/prevent/README.md) |
| **Generate Validation Notebook** | Generates SQL validation notebooks for dbt model changes, with targeted queries comparing baseline and development data. | [README](skills/generate-validation-notebook/README.md) |
Expand Down
2 changes: 1 addition & 1 deletion plugins/claude-code/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mc-agent-toolkit",
"version": "1.0.1",
"version": "1.1.0",
"description": "Monte Carlo Agent Toolkit — data observability skills and enforcement hooks for AI coding agents.",
"author": {
"name": "Monte Carlo",
Expand Down
1 change: 1 addition & 0 deletions plugins/claude-code/skills/asset-health
2 changes: 1 addition & 1 deletion plugins/codex/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mc-agent-toolkit",
"version": "1.0.1",
"version": "1.1.0",
"description": "Monte Carlo Agent Toolkit — data observability skills and enforcement hooks for AI coding agents.",
"author": {
"name": "Monte Carlo",
Expand Down
1 change: 1 addition & 0 deletions plugins/codex/skills/asset-health
2 changes: 1 addition & 1 deletion plugins/copilot/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mc-agent-toolkit",
"version": "1.0.1",
"version": "1.1.0",
"description": "Monte Carlo Agent Toolkit — data observability for AI coding agents.",
"author": {
"name": "Monte Carlo",
Expand Down
1 change: 1 addition & 0 deletions plugins/copilot/skills/asset-health
2 changes: 1 addition & 1 deletion plugins/cursor/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mc-agent-toolkit",
"version": "1.0.1",
"version": "1.1.0",
"description": "Monte Carlo Agent Toolkit — data observability skills and enforcement hooks for AI coding agents.",
"author": {
"name": "Monte Carlo",
Expand Down
1 change: 1 addition & 0 deletions plugins/cursor/skills/asset-health
1 change: 1 addition & 0 deletions plugins/opencode/skills/asset-health
1 change: 1 addition & 0 deletions skills/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Skills are platform-agnostic instruction sets that tell an AI coding agent what

| Skill | Description |
|---|---|
| **[Asset Health](asset-health/)** | Checks the health of a data table — surfaces last activity, alerts, monitoring coverage, importance, and upstream dependency health from Monte Carlo. |
| **[Monitor Creation](monitor-creation/)** | Guides AI agents through creating monitors correctly — validates tables, fields, and parameters before generating monitors-as-code YAML. |
| **[Prevent](prevent/)** | Surfaces Monte Carlo context (lineage, alerts, blast radius) before code changes, generates monitors-as-code, and produces targeted validation queries. |
| **[Generate Validation Notebook](generate-validation-notebook/)** | Generates SQL validation notebooks for dbt model changes, with targeted queries comparing baseline and development data. |
Expand Down
48 changes: 48 additions & 0 deletions skills/asset-health/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Monte Carlo Asset Health Skill

Check the health of a data table using Monte Carlo — surfaces last activity, active alerts, monitoring coverage, importance, tags, and upstream dependency health in a single structured report.

## Editor & Stack Compatibility

The skill works with any AI editor that supports MCP and the Agent Skills format — including Claude Code, Cursor, and VS Code.

All warehouses supported by Monte Carlo work with this skill.

## Prerequisites

- Claude Code, Cursor, VS Code or any editor with MCP support
- Monte Carlo account with Viewer role or above

## Setup

### Via the mc-agent-toolkit plugin (recommended)

Install the plugin for your editor — it bundles the skill, MCP server, and permissions automatically. See the [main README](../../README.md#installing-the-plugin-recommended) for editor-specific instructions.

### Standalone

1. Configure the Monte Carlo MCP server:
```
claude mcp add --transport http monte-carlo-mcp https://integrations.getmontecarlo.com/mcp
```

2. Install the skill:
```bash
npx skills add monte-carlo-data/mc-agent-toolkit --skill asset-health
```

Or copy directly:
```bash
cp -r skills/asset-health ~/.claude/skills/asset-health
```

## Usage

Ask about the health or status of any table:

- "How is table orders_status doing?"
- "Check health of dim_customers"
- "What's the status of raw_events?"
- "Check on volume_change table"

The skill will produce a structured health report with metrics, active alerts, monitor status, and upstream dependency health.
172 changes: 172 additions & 0 deletions skills/asset-health/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
---
name: monte-carlo-asset-health
description: |
Check the health of a data table/asset using Monte Carlo. Use when the user
asks "how is table X", "check health of X", "is X healthy", "status of X",
"check on X table", or any question about the health, status, or reliability
of a data asset. This is NOT the explore-table skill — use this skill for
health checks, not profiling.
version: 1.0.0
---

# Monte Carlo Asset Health Skill

This skill checks the health of a data asset using Monte Carlo's observability
platform. It produces a structured health report covering freshness, alerts,
monitoring coverage, importance, and upstream dependency health.

## REQUIRED: Read reference files before executing

**You MUST read both reference files using the Read tool before making any MCP
tool calls.** These files are the source of truth for tool calls, parameters,
and response interpretation. This file only defines when to activate and how to
format the output.

1. `references/workflows.md` (relative to this file) — exact tool calls, phases, and execution order
2. `references/parameters.md` (relative to this file) — parameter conventions and field details

**Do NOT make any MCP tool calls until you have read both files.**

## When to activate this skill

Activate when the user:

- Asks about health: "how is table X doing?", "check health of X", "is X healthy?"
- Asks about status: "what's the status of X?", "status of orders table"
- Asks to check on a table: "check on X table", "check on X"
- Asks about reliability, freshness, or quality of a specific asset
- References a table in context of incident triage or change planning

## When NOT to activate this skill

- **Profiling or exploring table data** (row counts, column stats, distributions) → use `explore-table`
- **Creating or suggesting monitors** → use `monitor-creation`
- **Active incident triage** (investigating root cause of a firing alert) → use prevent skill Workflow 3

## Health report format

**CRITICAL: Only report data returned by the tools defined in `references/workflows.md`.
Do NOT call additional tools, do NOT infer or fabricate metrics. Each row below
specifies exactly which tool provides its value.**

**All sections (Active Alerts, Monitors, Upstream Issues, Recommendations) must
always appear with their heading.** Never omit a section — if there is no data,
show the empty-state text defined below.

**Never use emoji shortcodes** (like `:warning:` or `:arrow_up:`). Use Unicode
emoji characters directly (like ⚠️) or plain text. Shortcodes render as raw text
in the terminal.

**Always display URLs as bare URLs**, never as markdown links (e.g., `[text](url)`).

**`{MC_WEBAPP_URL}` appears throughout this template.** Every occurrence must be
replaced with the actual value returned by calling `get_mc_webapp_url()`. Never
hardcode or guess this URL — it varies by environment.

Present results in this structure:

```
## Health Check: <table_name>

**Tags:** `tag1:value1`, `tag2:value2` (or "None" if no tags)
**Link:** {MC_WEBAPP_URL}/assets/{mcon}
**Warehouse:** snowflake-prod (Snowflake)
**Status: 🟢 Healthy / 🟡 Degraded / 🔴 Unhealthy** | **Importance:** 0.85 (key asset ⭐️)
**Avg Reads/Day:** ~538 | **Avg Writes/Day:** ~12

| Metric | Value | Signal |
|---------------|--------------------------------|--------|
| Last Activity | Apr 6, 2025 | 🟢 Recent |
| Alerts | 2 active | 🔴 Has alerts |
| Monitoring | 3 active monitors | 🟢 Monitored |
| Upstream | 1/3 sources unhealthy | 🔴 Issues |

### Active Alerts

| Date | Type | Priority | Status | Link |
|-------|----------------|----------|------------------|---------------------------------------------------------|
| Apr 8 | Metric anomaly | P3 | Not acknowledged | {MC_WEBAPP_URL}/alerts/{alert_uuid} |
| Apr 7 | Freshness | P2 | Acknowledged | {MC_WEBAPP_URL}/alerts/{alert_uuid} |

If there are more than 5 active alerts, display only 5. Do NOT put the overflow
message inside the table as a row. Instead, put it as plain text on the line
immediately after the table:

There are N more alerts not shown for brevity

If there are zero active alerts, show:
No active alerts in the last 7 days.

### Monitors

| Type | Name | Incidents (7d) | Status |
|-------------|-----------------------------------------|----------------|---------------------|
| TABLE | Orders freshness and schema | 3 | Running hourly |
| METRIC | Revenue row count | 0 | Never executed |
| BULK_METRIC | Warehouse volume check | 21 | ⚠️ 1 table has errors |

If there are zero monitors, show:
No monitors configured for this table.

### Upstream Issues
- raw_orders — FRESHNESS alert: not updated in 8h
- raw_payments — healthy
- dim_customers — healthy

> Want me to check further upstream for **raw_orders**?

If there are no upstream dependencies, show:
No upstream dependencies found.

### Recommendations
- Investigate upstream raw_orders freshness — likely root cause of this table's staleness
- Acknowledge or investigate the 2 active alerts

If there are no recommendations, show:
No recommendations — table looks healthy.

```

### Metric definitions — exact data sources

Each metric row MUST use only the specified data source. Do not add, infer, or
embellish values beyond what the tool returns.

| Metric | Data source | What to show | Signal |
|--------|------------|-------------|--------|
| **Last Activity** | `getTable` → `last_activity` | Date of last activity (e.g., "Apr 6, 2025") | 🟢 Recent (within 7 days) / 🟡 Stale (older than 7 days) |
| **Alerts** | `getAlerts` → count | "N active" or "No active alerts" | 🔴 Has alerts / 🟢 No alerts |
| **Monitoring** | `getMonitors` → count where `is_paused` is false | "N active monitors" or "0 active monitors (M paused)". Include relevant details from monitor fields (incident counts, error counts, types). | 🟢 Monitored (≥1 active) / 🔴 Unmonitored (0 active) |
| **Upstream** | `getAssetLineage` (upstream) + Phase 3 checks | "N/M sources unhealthy" or "All N sources healthy" | 🔴 Issues (any unhealthy) / 🟢 Healthy (all healthy) |

**Importance** is shown next to the Status line (not in the metrics table). Source:
`getTable` → `importance_score` + `is_important`. Show "X.XX (key asset ⭐️)" if
key asset or importance > 0.8, otherwise just "X.XX".

**Avg Reads/Day** and **Avg Writes/Day** are shown below the Status line. Source:
`getTable` → `table_stats.avg_reads_per_active_day` and `table_stats.avg_writes_per_active_day`.

**Do NOT include downstream data.** This skill only queries upstream lineage.

### Status determination

- **🔴 Unhealthy:** Any non-resolved alerts on the asset (from `getAlerts` with statuses `[null, "ACKNOWLEDGED", "WORK_IN_PROGRESS"]` — see `parameters.md`)
- **🟡 Degraded:** No active alerts, but 0 active monitors on a high-importance
asset (importance > 0.8 or key asset)
- **🟢 Healthy:** No active alerts and has at least 1 active monitor

### Tags

Display tags from the `search` tool's `properties` field. Show as inline badges:
`key:value`. If no tags exist, show "None". Always include the Tags line.

### Warehouse

Display the warehouse name and type from the `search` result. Always include this line.

### Recommendations

Only include recommendations derivable from collected data:
- Upstream health issues that may be root causes
- Active alerts that need acknowledgment or investigation
- Do NOT recommend specific monitor types — that is outside this skill's scope
Loading
Loading