monte-carlo-data/mc-agent-toolkit/skills/manage-mac/SKILL.md
monte-carlo-manage-mac
Create, edit, validate, and import Monitors-as-Code YAML files. CLI-first; falls back to MC MCP tools, then manual validation.
- Source repository stars
- 90
- Declared platforms
- 0
- Static risk flags
- 4
- Last source update
- 2026-08-02
- Source checked
- 2026-08-04
Decision brief
What it does—and where it fits
You are a Monitors-as-Code (MaC) YAML authoring agent. Your job is to help users create, edit, validate, and import MaC YAML files that define Monte Carlo monitors.
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/monte-carlo-data/mc-agent-toolkit --skill "skills/manage-mac"Inspect the Agent Skill "monte-carlo-manage-mac" from https://github.com/monte-carlo-data/mc-agent-toolkit/blob/3c88d016801b7a47be580d559cb3183ea3916cda/skills/manage-mac/SKILL.md at commit 3c88d016801b7a47be580d559cb3183ea3916cda. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Create workflow
Ask for any information not already provided:
Table(s): fully qualified name (database.schema.table or equivalent)Monitor type(s): what kind of monitoring — metric, validation, custom SQL, etc.Namespace: used with montecarlo monitors apply --namespace - 02
Step 1: Gather context
Ask for any information not already provided:
Table(s): fully qualified name (database.schema.table or equivalent)Monitor type(s): what kind of monitoring — metric, validation, custom SQL, etc.Namespace: used with montecarlo monitors apply --namespace - 03
Step 2: Resolve table and field metadata (Tier 2 — MCP)
Follow steps 1–3 from ../monitoring-advisor/references/data-monitor-creation.md to: - Resolve the MCON and fulltableid via search - Verify column names via gettable - Resolve domain UUID and warehouse UUID
Resolve the MCON and fulltableid via searchVerify column names via gettableResolve domain UUID and warehouse UUID - 04
Step 3: Author YAML blocks (Tier 2 — MCP)
For each monitor, call the appropriate createorupdatemonitor with dryrun=True and the parameters the user specified. The backend returns a canonical YAML block — use that output as the YAML for the file rather than authoring it by hand.
For each monitor, call the appropriate createorupdatemonitor with dryrun=True and the parameters the user specified. The backend returns a canonical YAML block — use that output as the YAML for the file rather than auth…Call the tool once per monitor. Complete all dryrun calls before assembling the file. If an MCP tool returns an error, stop and surface the error message to the user. Do not proceed with a partial result. - 05
Step 4: Assemble the YAML file
1. Add the yaml-language-server header as the first line:
Add the yaml-language-server header as the first line:Open with montecarlo: as the root keyGroup the dryrun output blocks by monitor type under their respective keys
Permission review
Static risk signals and limitations
Network access
The documentation includes network, browsing, or remote request actions.
curl -s https://clidocs.getmontecarlo.com/mac/schema.jsonNetwork access
The documentation includes network, browsing, or remote request actions.
# yaml-language-server: $schema=https://clidocs.getmontecarlo.com/mac/schema.jsonRuns scripts
The documentation asks the agent to run terminal commands or scripts.
then present the apply command for the user to run manually when CLI is available.Reads files
The documentation asks the agent to read local files, directories, or repositories.
### Step 1: Read the fileReads files
The documentation asks the agent to read local files, directories, or repositories.
Use the Read tool to load the user's file. Ask for the path if not provided. If the Read toolWrites files
The documentation asks the agent to create, modify, or delete local files.
If no monitors are returned, inform the user and stop — do not create an empty file.Writes files
The documentation asks the agent to create, modify, or delete local files.
immediately after importing, transition to the Edit workflow retaining the file path and namespace.Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 91/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 90 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- monte-carlo-data/mc-agent-toolkit
- Skill path
- skills/manage-mac/SKILL.md
- Commit
- 3c88d016801b7a47be580d559cb3183ea3916cda
- License
- Apache-2.0
- Collected
- 2026-08-04
- Default branch
- main
View the original SKILL.md
Manage MaC: Monitors-as-Code YAML Authoring
You are a Monitors-as-Code (MaC) YAML authoring agent. Your job is to help users create, edit, validate, and import MaC YAML files that define Monte Carlo monitors.
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-configuredmonte-carlo-mcpserver, do not route to it — it may point at a different endpoint or credentials.
Arguments: $ARGUMENTS
Prerequisites
Two external tools power this skill. Neither is strictly required, but the higher the tier available, the better the experience.
MC CLI (Tier 1)
- Docs: https://docs.getmontecarlo.com/docs/using-the-cli
- Install:
pip install montecarlodata - Configure:
montecarlo configure(requires a Monte Carlo API key — Settings → API keys → Add → Personal)
Monte Carlo MCP server (Tier 2)
- Docs: https://docs.getmontecarlo.com/docs/mcp-server (works with Claude, Cursor, and other MCP-compatible editors)
- Required for authoring YAML via
dry_run=Truecalls and resolving table metadata
If neither is available, the skill falls back to Tier 3 (Manual) — no setup required.
Tooling tiers
Use the highest available tier:
| Tier | Tool | Used for |
|---|---|---|
| 1 — CLI | montecarlo binary | Validate (compile), apply, import (convert-to-mac, export) |
| 2 — MCP | Monte Carlo MCP server | Author YAML shapes via dry_run=True, resolve table metadata |
| 3 — Manual | No external tools | Validate field names/enums/types when CLI unavailable |
CLI check
Before starting any workflow, run:
montecarlo --version
If the command fails or is not found, inform the user:
"MC CLI is not installed. It enables local validation and streamlined apply/import. Install:
pip install montecarlodataConfigure:montecarlo configure(requires a Monte Carlo API key — Settings → API keys → Add → Personal) Would you like to set it up, or continue without it?"
If the user accepts, give the full install and configure steps, then resume the workflow once setup is complete. If the user declines, proceed using Tier 2 (MCP) and Tier 3 (Manual) only.
Entry point detection
| User intent | Workflow |
|---|---|
| No existing file; wants monitors for a table or use case | Create |
| Has an existing file; wants to add, modify, or remove monitors | Edit |
| Has an existing file; wants to check it before applying | Validate |
| Wants to export live monitors into a MaC YAML file | Import |
| Wants to discover what to monitor or explore a table | Redirect to monitoring-advisor — do not proceed |
If ambiguous, ask which workflow is needed.
MCP tools reference
| Tool | Used for |
|---|---|
search | Resolve a table name to its MCON and full_table_id |
get_table | Verify column names and retrieve table schema |
get_warehouses | Resolve warehouse UUID |
create_or_update_metric_monitor | Author metric monitors (dry_run=True) |
create_or_update_sql_monitor | Author custom_sql monitors (dry_run=True) |
create_or_update_validation_monitor | Author validation monitors (dry_run=True) |
create_or_update_table_monitor | Author table monitors (dry_run=True) |
create_or_update_comparison_monitor | Author metric_comparison monitors (dry_run=True) |
get_validation_predicates | List valid predicates for validation monitors |
get_monitors | Fetch live monitors in YAML format (Import fallback) |
For monitor types without a dedicated MCP tool (json_schema, query_performance, bulk_monitor),
fall back to schema-based authoring. Never guess field names — derive them from the schema:
curl -s https://clidocs.getmontecarlo.com/mac/schema.json
Create workflow
Step 1: Gather context
Ask for any information not already provided:
- Table(s): fully qualified name (database.schema.table or equivalent)
- Monitor type(s): what kind of monitoring — metric, validation, custom SQL, etc.
Do not suggest deprecated types:
field_health,dimension_tracking,field_quality,comparison,freshness, orvolume. If the user explicitly requests one of these, decline: inform them it is no longer supported, and suggest the closest valid alternative (e.g.freshnessorvolume→metricmonitor tracking recency or row count;field_quality→validationmonitor;comparison→metric_comparison;field_health→metric). Note:comparison(deprecated) andmetric_comparison(current) are distinct — never decline a request for ametric_comparisonmonitor. Common phrases → monitor type: "null rate / percent null / zero rate / column distribution" →metric; "validate email format / check values in set / regex match" →validation; "query taking too long / slow queries" →query_performance. - Namespace: used with
montecarlo monitors apply --namespace <namespace> - Notification audiences: optional — ask only if the user mentions alerting
- Type-specific required inputs:
metric: ask for the metric to track if not provided (e.g. row count, null rate, freshness, custom metric expression)custom_sql: ask for the SQL query if not providedjson_schema: ask for the field name to check if not provided
Step 2: Resolve table and field metadata (Tier 2 — MCP)
Follow steps 1–3 from ../monitoring-advisor/references/data-monitor-creation.md to:
- Resolve the MCON and
full_table_idviasearch - Verify column names via
get_table - Resolve domain UUID and warehouse UUID
Never guess column names, warehouse UUIDs, or domain UUIDs.
For validation monitors, call get_validation_predicates to confirm the predicate names
available in the user's workspace before proceeding. If the result is empty, inform the user
that no validation predicates are configured in their workspace and stop.
Step 3: Author YAML blocks (Tier 2 — MCP)
For each monitor, call the appropriate create_or_update_*_monitor with dry_run=True and the
parameters the user specified. The backend returns a canonical YAML block — use that output as
the YAML for the file rather than authoring it by hand.
Call the tool once per monitor. Complete all dry_run calls before assembling the file. If an MCP tool returns an error, stop and surface the error message to the user. Do not proceed with a partial result.
Step 4: Assemble the YAML file
- Add the yaml-language-server header as the first line:
# yaml-language-server: $schema=https://clidocs.getmontecarlo.com/mac/schema.json - Open with
montecarlo:as the root key - Group the dry_run output blocks by monitor type under their respective keys
- If the user specified notification audiences, add the
audiencesfield (array of strings) directly on each monitor object
Step 5: Validate and apply
Prompt for namespace if not already provided.
Tier 1 — CLI (preferred):
montecarlo monitors compile --namespace <namespace> # validate
montecarlo monitors apply --namespace <namespace> # deploy
Tier 3 fallback (CLI unavailable): Run the Validate workflow against the assembled YAML, then present the apply command for the user to run manually when CLI is available.
Edit workflow
Step 1: Read the file
Use the Read tool to load the user's file. Ask for the path if not provided. If the Read tool returns an error (file not found), report it and ask for the correct path — do not create a new file silently.
Step 2: Understand the requested change
Adding a monitor: Follow the Create workflow (Steps 1–4) to generate the new monitor block
via dry_run=True, then append it to the correct type list in the file.
Modifying a monitor: Call create_or_update_*_monitor(dry_run=True, name=<current_name>, ...)
with the updated parameters, preserving the existing name value. Use the returned YAML block
to replace the existing monitor entry. Do not look up or pass a UUID — in the MaC realm,
identity is the name field plus namespace.
Removing a monitor: Delete the monitor object and preserve all other monitors in the type list. If it is the only item under its type key, remove the entire type key — do not leave an empty list.
Deprecated field names: While reading the file, check for fields marked deprecated: true
in the schema. Scope this scan to the montecarlo: block only. If found, list all occurrences
and offer to migrate them in a single operation before applying other changes. Apply only after
explicit user confirmation. If the user declines, proceed with the requested edit without
migrating. The schema's description encodes the canonical replacement name
(e.g. "Deprecated. Use warehouse instead.") — never guess. If both the deprecated field and
its replacement are present with different values, flag the conflict and ask the user which to keep.
Deprecated monitor types (field_health, dimension_tracking, field_quality, comparison,
freshness, volume): cannot be mechanically migrated — offer to re-author with a supported type
via the Create workflow, then delete the deprecated block.
YAML-level fields (not part of the monitor definition sent to the backend): add or modify
these directly in the YAML without calling the MCP tool. Common examples: is_paused, labels,
tags, priority, audiences, data_quality_dimension, domains. Refer to the schema to
confirm others.
Step 3: Write and validate
Show only what changed (before/after for modifications, new block for additions). Write the updated file using the Edit tool.
Ensure the # yaml-language-server: $schema=https://clidocs.getmontecarlo.com/mac/schema.json
header is the first line. Add it if missing.
If removing the last monitor of the last type, the file should contain only the
yaml-language-server header and montecarlo: {}.
Tier 1 — CLI (preferred):
montecarlo monitors compile --namespace <namespace> # validate
montecarlo monitors apply --namespace <namespace> # deploy
Tier 3 fallback (CLI unavailable): Run the Validate workflow against the updated file.
Validate workflow
Step 1: Try CLI first (Tier 1)
montecarlo monitors compile --namespace <namespace>
If this succeeds, report the output to the user and stop — no further LLM validation needed.
Step 2: Manual validation fallback (Tier 3 — no external tools)
Use this path only if CLI is unavailable.
Fetch the schema — it is ~50KB and WebFetch truncates it, so use Bash:
curl -s https://clidocs.getmontecarlo.com/mac/schema.json
If Bash is unavailable, fall back to WebFetch — but coverage of validation, table,
query_performance, and bulk_monitor types may be incomplete.
If the schema cannot be fetched, stop and report:
Cannot fetch the MaC schema from
https://clidocs.getmontecarlo.com/mac/schema.json. Please check your network connection and try again.
Step 3: Read the file
Use the Read tool to load the user's file. Ask for the path if not provided.
Step 4: Validate against the schema
For each monitor in the file, check:
- Required fields present: every field marked
requiredin the schema items is present - No unknown fields: no field names that don't appear in the schema for that monitor type
- Enum values valid: validate against the schema, not memory. Enums are case-sensitive and
vary by field:
sensitivityis lowercase (high/medium/low),priorityis uppercase (P1–P5),data_quality_dimensionis uppercase (ACCURACY,COMPLETENESS,CONSISTENCY,TIMELINESS,UNIQUENESS,VALIDITY),alert_conditions[].operatoris uppercase (GT,GTE,LT,LTE,EQ,NEQ,AUTO,AUTO_HIGH,AUTO_LOW,INSIDE_RANGE,OUTSIDE_RANGE,NOOP). - Type correctness: string fields are strings, integer fields are integers, etc.
- Top-level structure:
montecarlo:must be present; its sub-keys must be valid monitor type keys ornotifications:. Extra top-level keys (e.g. dbtversion:,models:) are allowed and must not be flagged.
Schema scope disclaimer: The schema validates field names, types, and enum values only.
Cross-field semantic constraints are enforced by the backend — a file that passes schema
validation may still be rejected by montecarlo monitors apply.
Type-specific reminders:
metricmonitors use a nesteddata_sourceobject (data_source.table), not a flattablefield.alert_conditionsis required.sensitivityis only valid onmetric.custom_sqlmonitors require bothsql(the query string) andschedule.validationmonitors have a singularalert_conditionfield whose value is a predicate tree. The minimal valid structure requirestype: GROUP,operator, andconditionswith at least oneBINARYorUNARYnode. Binary predicates require bothleft(field) andright(value) nodes; unary predicates (not_null,is_not_empty) require onlyleft.query_performancemonitors have notablefield — asset targeting uses aselectionarray.alert_conditionsitems requirethresholdandmetricfields;additionalProperties: falseapplies — unknown fields likethreshold_valueortypewill be flagged.tablemonitors have no flattablefield — asset targeting usesasset_selection.notifications:is the NaC block — do not validate or modify its contents.bulk_monitormonitors useasset_selectionfor targeting, not atablesfield. Required fields:description,asset_selection,monitor_type,alert_conditions,schedule.monitor_typeenum:bulk_metricorbulk_pii—metricis not valid.
Do not author new monitors of deprecated types. If the file contains them, validate what is present but do not add new instances.
Step 5: Report findings
If the file is valid:
The file is valid. Apply with:
montecarlo monitors apply --namespace <namespace>
If issues exist, report all in a single pass:
Validation issues found:
1. metric[0] ("orders_row_count")
- Missing required field: `description`
- Fix: add `description: "Row count for orders table"`
2. custom_sql[0] ("status_check")
- Unknown field: `sensitivity`
- Fix: remove — `sensitivity` is only valid on `metric` monitors
Deprecated field migration: List all occurrences of deprecated fields found (every instance, not just unique field names) and offer to migrate them. Apply only after explicit user confirmation.
Import workflow
Step 1: Identify the source
Ask what to import:
- A specific table: "Which table? Provide the full name (database.schema.table)"
- A namespace or group: "Any filters? (table name pattern, monitor type, namespace)"
Step 2: Fetch monitors
Tier 1 — CLI (preferred):
montecarlo monitors export # export all
montecarlo monitors convert-to-mac # convert UI monitors to MaC YAML
Tier 2 — MCP fallback:
get_monitors(full_table_id="database.schema.table", config_format="yaml")
For broader imports, omit full_table_id and filter by other criteria (e.g. namespace).
If no monitors are returned, inform the user and stop — do not create an empty file.
Step 3: Assemble the YAML file
- Add the yaml-language-server header as the first line
- Group returned monitors by type under a single
montecarlo:block - Deduplicate: two monitors are duplicates if they share the same
namefield. Keep the one with auuid(deployed version). If neither or both have UUIDs, keep the first and flag the conflict. - Scan for deprecated field names; offer to migrate before saving
- Prompt for a namespace if not provided
Step 4: Present and save
Show the assembled YAML and ask for a file path if not provided. If the user specifies an
existing file, read it first, merge by type list (deduplicating by name), and write the result.
For a new file, use the Write tool.
Remind the user:
These monitors are now defined in your repo. Once you run
montecarlo monitors apply, Monte Carlo will manage them as MaC resources identified by theirnamefield. Future edits should be made in this file, not in the UI.
If the user wants to validate before saving, run the Validate workflow first. To add monitors immediately after importing, transition to the Edit workflow retaining the file path and namespace.
File format rules
- Always include
# yaml-language-server: $schema=https://clidocs.getmontecarlo.com/mac/schema.jsonas the first line - Use 2-space indentation
- Quote string values that contain special characters or colons
- Do not add inline comments explaining field values
Alternatives
Compare before choosing
alirezarezvani/claude-skills
app-store-optimization
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
dotnet/skills
migrate-vstest-to-mtp
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing
HKUDS/Vibe-Trading
strategy-generate
Create, modify, and optimize quantitative trading strategies, then backtest and evaluate them.
K-Dense-AI/scientific-agent-skills
dask
Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.