{"id":68326,"plugin_id":"plugin_asdk_app_6ad62fc9c0208191b0683a6b5829d0a8","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-28T13:14:26.032Z","digest":"cfe2ad42effbad1c3c96ddfd290101f4fe34cb2d5ad95977473378c79a3b77ac","against":null,"payload":{"description":"Route debt, loan, collateral, covenant, and hedge questions to Yardi Virtuoso Debt Management (yardi-virtuoso) MCP tools. Use this skill whenever someone asks about loans, loan balances, maturity dates, borrowers, lenders, collateral, LTV, NOI, occupancy, covenants, reminders, hedges, interest rate caps, swaps, or any debt portfolio data. Also trigger when the user mentions \"asset loan\", \"liability loan\", \"line of credit\", \"capital stack\", \"syndication\", \"SOFR\", \"rate table\", \"funding status\", \"debt analytics\", \"adhoc debt report\", or \"debt dataset\". Do NOT use for vendor/payables data (use P2P Manager), GL financial reports (use GL Manager), or property KPIs (use Performance Manager).","included_files":[],"name":"virtuoso-debt-manager","skill_md_contents":"---\r\nname: virtuoso-debt-manager\r\ndescription: Route debt, loan, collateral, covenant, and hedge questions to Yardi Virtuoso Debt Management (yardi-virtuoso) MCP tools. Use this skill whenever someone asks about loans, loan balances, maturity dates, borrowers, lenders, collateral, LTV, NOI, occupancy, covenants, reminders, hedges, interest rate caps, swaps, or any debt portfolio data. Also trigger when the user mentions \"asset loan\", \"liability loan\", \"line of credit\", \"capital stack\", \"syndication\", \"SOFR\", \"rate table\", \"funding status\", \"debt analytics\", \"adhoc debt report\", or \"debt dataset\". Do NOT use for vendor/payables data (use P2P Manager), GL financial reports (use GL Manager), or property KPIs (use Performance Manager).\r\n---\r\n\r\n# Virtuoso Debt Manager\r\n\r\nRoutes debt portfolio questions to Yardi Virtuoso's Debt Management tools via the\r\n**yardi-virtuoso** connection, authenticated with OAuth dynamic client registration.\r\n\r\n## Tool Map\r\n\r\n| Domain | Search tool | Column catalog | Detail tool |\r\n|--------|------------|----------------|-------------|\r\n| Loans | `dmx_loan_search_loans` | `dmx_loan_search_loans_columns` | `dmx_loan_get_loan_details` |\r\n| Collateral | `dmx_collateral_search_collateral` | `dmx_collateral_search_collateral_columns` | — |\r\n| Covenants | `dmx_covenant_search_covenants` | `dmx_covenant_search_covenants_columns` | — |\r\n| Hedges | `dmx_hedges_search_hedges` | `dmx_hedges_search_hedges_columns` | — |\r\n| Debt analytics | `dmx_debtadhoc_debt_search_query` | `dmx_debtdataset_get_debtdataset_config` | — |\r\n\r\n**Column catalog tools** — call the matching `_columns` tool before adding a `Columns`\r\nparameter you haven't used before; invalid column names silently drop data.\r\n\r\n---\r\n\r\n## Data Model\r\n\r\n`search_loans` is the **spine** of the debt data model. Every collateral record, covenant,\r\nand hedge is linked to a loan via a shared loan code. The enrichment tools return\r\ndomain-specific detail that `search_loans` does not carry:\r\n\r\n| Tool | What it adds that `search_loans` doesn't have |\r\n|------|------------------------------------------------|\r\n| `search_collateral` | Property-level values, occupancy %, NOI, LTV inputs |\r\n| `search_covenants` | Compliance reminders, due dates, status, assigned users |\r\n| `search_hedges` | Hedge type, counterparty, notional, termination date |\r\n| `debt_search_query` | **Historical and point-in-time values** (month granularity). The only tool that can answer date-specific or comparative questions. Results link to other tools via loan code. |\r\n\r\nUse the loan code returned by `search_loans` to join or correlate results across tools\r\nwhen presenting combined data to the user.\r\n\r\n---\r\n\r\n## Default Query Strategy\r\n\r\n1. **If the question involves a specific date, a historical value, or a comparison across\r\n   time periods — route to `debt_search_query` first.** It is the only tool that returns\r\n   data as of a point in time (month granularity). All other search tools reflect current\r\n   values only. Examples that trigger this path:\r\n   - \"What was the balance in January 2024?\"\r\n   - \"Compare our debt exposure this year vs last year\"\r\n   - \"How has the balance changed over the last 6 months?\"\r\n   Always call `get_debtdataset_config` before `debt_search_query` to get valid\r\n   `dataset_Id` and `measures` values — never guess them.\r\n   If not all measures or columns are found in this tool start with the `search_loans` tool to \r\n   find additional detail using the loan code to link the data\r\n\r\n2. **For current-state questions, start with `search_loans`** to establish the loan\r\n   universe. It covers the majority of what users need: balances, parties, maturity,\r\n   rate, and status.\r\n\r\n3. **Call an enrichment tool only if the user's question requires detail that\r\n   `search_loans` cannot provide** — collateral metrics, covenant compliance, or hedge\r\n   exposure. Do not call enrichment tools speculatively.\r\n\r\n4. **Correlate on loan code** when combining results across tools. The loan code is the\r\n   common key across `search_loans`, `search_collateral`, `search_covenants`,\r\n   `search_hedges`, and `debt_search_query`.\r\n\r\n5. **For a single loan**, call `get_loan_details` instead of an enrichment tool when the\r\n   user just wants \"everything about this loan\" — it returns the fullest single-loan\r\n   payload without requiring a join.\r\n\r\n---\r\n\r\n## Routing & Sequencing\r\n\r\n**Loans — list or filter**\r\n→ `search_loans` (defaults: `LoanStatus: \"0\"`, `SyndicationType: \"2\"`, `FundingStatusTypes:\"funded\",\"default\"`)\r\n\r\n**Loans — single loan detail**\r\n→ `search_loans` to get the integer `id` → `get_loan_details`\r\n\r\n**Collateral / LTV / occupancy / NOI**\r\n→ `search_collateral` (`LoanTypeFilter` is required)\r\n\r\n**Covenants / compliance / reminders**\r\n→ `search_covenants`\r\n\r\n**Hedges / rate caps / termination dates**\r\n→ `search_hedges`\r\n\r\n**Debt metrics over time or as of a date**\r\n→ `get_debtdataset_config` first (never guess `dataset_Id` or `measures`) → `debt_search_query`\r\n\r\n---\r\n\r\n## Business Rules\r\n\r\n- **`LoanStatus`** defaults to `\"0\"` (Active). Ask only if the user wants inactive or all.\r\n- **`SyndicationType`** defaults to `\"2\"` (Whole Loans) to avoid double-counting.\r\n- **`FundingStatusTypes`** defaults to `\"funded, default\"` unless the user specifies otherwise.\r\n- **Name filters** (`LenderIds`, `BorrowerIds`, `EntityIds`, `PropertyList`) use built-in\r\n  autocomplete — pass plain names like `\"Wells Fargo\"`, never raw IDs.\r\n- **`get_loan_details`** requires an integer `id` from a prior `search_loans` call.\r\n- **`debt_search_query` charts** must use Chart.js (vanilla JS) only — no recharts, no D3.\r\n\r\n---\r\n\r\n## Presentation Guidelines\r\n\r\n- Lead with portfolio totals (count, aggregate balance, nearest maturity), then detail.\r\n- Proactively flag risk: maturities within 90 days, past-due covenants, expiring hedges.\r\n- For time-series results (3+ periods), prefer a Chart.js bar or line chart over a raw table.\r\n- Cite Yardi Virtuoso as the data source.\r\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}