# Workflows & Recipes > The repeatable patterns that combine the five tools: discover, resolve, and run. The five tools combine into a small number of repeatable patterns. In practice you rarely think about them — you ask a question and the assistant follows the right pattern — but understanding them helps you phrase requests well and know what to expect. ## The golden path: discover then run Almost every request follows two steps: find the report with `visualone_discover_reports`, then run it with `visualone_get_reports`. ``` // 1. Discover { "tool": "visualone_discover_reports", "arguments": { "query": "enterprise storage summary" } } // 2. Run the proc_name returned above { "tool": "visualone_get_reports", "arguments": { "action": "run_get", "proc_name": "enterprise_summary_proc" } } ``` `client_id` and `period_id` are auto-resolved. Done. ## Drilldown path: discover, list, run When the report targets a specific entity, insert a lookup step to resolve the exact name. ``` // 1. Discover the drilldown report { "tool": "visualone_discover_reports", "arguments": { "query": "device capacity plan" } } // proc_name: device_capacity_plan_proc, requires navigation param device_name // 2. Resolve the exact device name { "tool": "visualone_list_units", "arguments": { "unit_type": "devices", "search": "dallas" } } // device_name: ARRAY-DAL-01 // 3. Run with the resolved name { "tool": "visualone_get_reports", "arguments": { "action": "run_get", "proc_name": "device_capacity_plan_proc", "device_name": "ARRAY-DAL-01" } } ``` ## Deep drilldown: progressive resolution For nested entities (vCenter → cluster → ESX host → VM), resolve names step by step, filtering each lookup by the level above it. ``` // 1. vCenter { "unit_type": "vcenters", "search": "prod" } // 2. Cluster within that vCenter { "unit_type": "clusters", "vcenter_name": "prod-vcenter.corp" } // 3. ESX host within that cluster { "unit_type": "esx_hosts", "vcenter_name": "prod-vcenter.corp", "cluster_name": "PROD-CL01" } // 4. Run the drilldown report with all resolved names { "tool": "visualone_get_reports", "arguments": { "action": "run_get", "proc_name": "virtual_datastore_history_for_esx_host_proc", "vcenter_name": "prod-vcenter.corp", "cluster_name": "PROD-CL01", "esx_host_name": "esx-07.prod.corp" } } ``` ## Choosing a grouping Some reports expose several stored procedures — one per way of slicing the data. Pick the `proc_name` that matches the grouping you want. ``` // "Storage by Group" returns multiple procs: // enterprise_storage_by_data_center_proc // enterprise_storage_by_device_type_proc // enterprise_storage_by_tier_proc <- choose this one // enterprise_storage_by_application_proc // enterprise_storage_by_classification_proc { "tool": "visualone_get_reports", "arguments": { "action": "run_get", "proc_name": "enterprise_storage_by_tier_proc" } } ``` ## Getting data for charts or export Request JSON when the result will be computed on, charted, or exported rather than just read. ``` { "tool": "visualone_get_reports", "arguments": { "action": "run_get", "proc_name": "enterprise_trend_v2_proc", "response_format": "json" } } ``` ## Super-user: query another client If your session `role` is `super_user`, pass `client_id` to run a report on behalf of a different tenant. Standard users can omit it (and cannot override it). ``` { "tool": "visualone_get_reports", "arguments": { "action": "run_get", "proc_name": "enterprise_summary_proc", "client_id": "5678" } } ``` ## Quick reference | You want to… | Pattern | | --- | --- | | Run an enterprise / summary report | discover → run | | Report on a specific device / VM / switch / DB | discover → list_units → run | | Report on a deeply nested entity | discover → list_units (progressive) → run | | Slice a report a particular way | discover → pick the matching proc_name → run | | Feed a chart or export | run with response_format json | | Report for another tenant (super users) | run with explicit client_id | --- Source: https://visualoneintelligence.com/docs/voi-mcp-workflows/