Skip to main content
Glama

Server Details

Ask your Rent Manager portfolio anything: live, read-only financials, rent roll, leasing.

Ownership verified
Status
Healthy
Uptime
2.2% over 64 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

B3.1/5.0

Scored across 82 tools

Disambiguation3/5

Many analytics and reporting tools overlap substantially (P&L/NOI variants, rent roll vs. rent composition vs. loss-to-lease, vacancy vs. availability vs. occupancy, work orders vs. service issues vs. resident concerns). The descriptions do a good job cross-referencing and giving selection rules, which keeps the set usable, but with 82 tools misselection remains a real risk.

Naming Consistency4/5

Most tools follow a predictable snake_case verb_noun convention with clear prefixes like analyze_, get_, list_, and download_. A handful of noun-only names (trial_balance, lease_expirations, make_ready_summary, vendor_compliance, move_ins_outs) break the pattern, but they remain readable and mostly self-explanatory.

Tool Count1/5

At 82 tools, this server is far beyond the practical 3-15 range and crosses the rubric's 50+ extreme-mismatch threshold. Even though the domain is broad, the sheer count makes tool selection expensive and increases the chance that an agent picks a plausible-but-wrong analytics wrapper or report tool.

Completeness4/5

Read/reporting coverage is extensive: financials, AR/AP, tenants, leases, prospects, units, vendors, work orders, inspections, violations, attachments, meters, reports, and connection switching are all represented. If the domain is meant to be read-only Q&A, this is close to complete; the main gaps are write/CRUD operations and a few single-entity detail tools.

Available Tools

82 tools
analyze_aged_payablesAnalyze Aged PayablesA
Read-onlyIdempotent
Inspect

Accounts-payable aging snapshot (AgedPayables, 79).

AP by aging bucket (Current / 1-30 / 31-60 / 61+), top GL accounts owed, and a focused list of GL accounts with 61+ day balances. Mirror image of analyze_aged_receivables. Scope to a single park or portfolio with portfolio / property_ids — the report honors PropertyIDs even though its CSV has no Property column for client-side filtering.

SLOW when UNSCOPED — a portfolio-wide first call takes 1-3 minutes, so BEFORE calling without a scope send the user a one-liner: 'This report takes 1-3 minutes to generate, I'll have results shortly.' Scoping to a park or portfolio returns in seconds. Follow-up queries within 5 minutes are cached and return instantly.

Args: portfolio: Portfolio name or 3-letter prefix. property_ids: Comma-separated property IDs. Use this OR portfolio. as_of_date: MM/DD/YYYY for the as-of snapshot. Defaults to today. top_n: Number of top GL accounts to list (default 10, max 50).

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
portfolioNo
as_of_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, but the description adds genuinely non-derivable behavior: 1-3 minute latency when unscoped, seconds when scoped, 5-minute result caching, and the caveat that PropertyIDs are honored even though the CSV has no Property column. That last point prevents a client-side filtering mistake.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the report contents, then scope, then the performance warning, then args — a sensible priority order with no filler. The trailing Args block partially restates the inline scoping prose, a minor redundancy, but nothing is wasted overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is unnecessary, and annotations cover the safety profile. Everything an agent needs to call this correctly — scope semantics, latency expectation, caching, all four parameter formats — is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does. It defines portfolio format (name or 3-letter prefix), property_ids format (comma-separated) with the OR relationship, as_of_date format (MM/DD/YYYY) and default, and top_n default plus max (50), which the schema does not state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource and enumerates the actual output (AP by aging bucket, top GL accounts owed, 61+ day GL accounts), then names the sibling it mirrors ('Mirror image of analyze_aged_receivables'). An agent can distinguish it from the other ~60 analyze_* tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use guidance: scope with portfolio/property_ids for fast returns, and the exact prompt to send the user before an unscoped call. Also states the mutually exclusive relationship ('Use this OR portfolio') and the caching window, which changes how an agent should sequence calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_aged_receivablesAnalyze Aged ReceivablesA
Read-onlyIdempotent
Inspect

Aged receivables (30 / 31-60 / 61-90 / 91+) for a portfolio.

Pulls AgedReceivables (78), aggregates per property, ranks delinquent tenants. Answers: 'who's most past-due', 'how much is 90+ days old', 'what's our total AR for the GSP portfolio'.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
portfolioNo
as_of_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety is covered. The description still adds real behavioral content beyond that: the underlying data source (AgedReceivables report 78) and the transformation performed (aggregation per property, ranking of delinquent tenants). It does not mention constraints such as permissions or row limits, keeping it at 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the aging buckets, then one sentence on processing, then example questions. Compact and every line is relevant, though the fragmented multi-line formatting is slightly choppier than a single tight paragraph would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and annotations fully cover the safety profile. What remains is mostly adequate for a read-only analytical tool with all-optional parameters, though the unexplained as_of_date and property_ids scoping leaves a modest gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry all four parameters. It only illuminates 'portfolio' (via 'for a portfolio' and the GSP example) and weakly implies 'top_n' through ranking. The critical 'as_of_date' for an aging analysis and the 'property_ids' scoping parameter are entirely unexplained in both description and schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (aged receivables), the exact aging buckets (30 / 31-60 / 61-90 / 91+), the scope (a portfolio), and the processing (aggregates per property, ranks delinquent tenants). An agent can immediately distinguish this from the payables counterpart, analyze_aged_payables, and from general AR tools like analyze_rent_roll.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The three example questions ('who's most past-due', 'how much is 90+ days old', 'what's our total AR for the GSP portfolio') give concrete invocation contexts that map directly onto the tool's output. It stops short of naming alternatives or stating when not to use it (e.g., versus analyze_delinquency), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_autopay_adoptionAnalyze Autopay AdoptionA
Read-onlyIdempotent
Inspect

Autopay / ePay enrollment — how many residents are on automatic payments.

Runs TenantAutoPayConfiguration (report 553): count enrolled, active this month, and breakdowns by payment type (Total vs Current Balance Due vs fixed amount), frequency, and payment-day spread. A collections-efficiency lever. Use for "how many residents are on autopay", "autopay adoption", "ePay enrollment breakdown". Portfolio-wide only (RM doesn't expose a property column on this report).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior context: it runs a specific report (553) and is portfolio-wide only because RM does not expose a property column. That limitation is valuable and not derivable from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded — purpose first, then report mechanics and breakdowns, then usage examples, then the scope caveat. Mostly every sentence earns its place, though 'A collections-efficiency lever' is mild filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. The description covers what it computes, the underlying report, the dimension breakdowns, and the portfolio-wide constraint — everything an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description's note that results are portfolio-wide reinforces that no filtering argument exists, which is consistent with the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line states a specific resource and metric — autopay/ePay enrollment, how many residents are on automatic payments — and grounds it in a concrete artifact (TenantAutoPayConfiguration, report 553). It is clearly distinguishable from siblings like analyze_payment_trends or analyze_rent_composition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger phrasings ('how many residents are on autopay', 'autopay adoption', 'ePay enrollment breakdown') and states a scope limitation ('Portfolio-wide only'). However, it never names a sibling alternative or a when-not-to-use condition, so the agent must infer routing on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_availabilityAnalyze AvailabilityA
Read-onlyIdempotent
Inspect

Available (vacant) inventory + exposure by property and unit type.

Runs RM's ReportWriter 'Available Inventory Summary' (RW 107): per-property vacancy rate, count of available units by unit type (MH Lot, RV, Apt, DOH, ...), and average days vacant per type. Use for "what's our available inventory / exposure", "vacancy rate by property", "which parks have the most vacant lots". Scope to a portfolio/property set for a fast answer (unscoped is ~2 min). For a unit-level vacant list use analyze_vacancy.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
portfolioNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description earns credit by adding runtime behavior instead: unscoped queries take ~2 minutes, and it discloses the source report (ReportWriter RW 107) and the computed fields. Missing only things like rate limits or connection requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the definition ('Available (vacant) inventory + exposure by property and unit type') and every following sentence carries information – the report source, the example queries, the scoping/time note, and the alternative. Slightly dense but no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no prose, and the description still supplies the report identity, scoping/time guidance, and the sibling disambiguation. The remaining gap is parameter-level semantics (top_n, property_ids format), which is a real but secondary omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning, but it only partially does: it explains that portfolio/property scoping is a performance tradeoff, yet leaves top_n and the format of property_ids (comma-separated IDs? names?) entirely undefined. Partial compensation over a bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (analysis of available/vacant inventory and exposure) scoped by property and unit type, and explicitly distinguishes itself from the sibling analyze_vacancy ('For a unit-level vacant list use analyze_vacancy'). It also names the underlying report (RW 107), which pins down exactly what is computed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete trigger phrases ('what's our available inventory / exposure', 'vacancy rate by property', 'which parks have the most vacant lots'), names the alternative (analyze_vacancy) with the condition that selects it, and explains when to scope (portfolio/property set for speed). This is explicit when-to-use and when-to-use-something-else guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_balance_sheetAnalyze Balance SheetA
Read-onlyIdempotent
Inspect

Balance sheet (Assets / Liabilities / Equity) as of a date.

Downloads BalanceSheet (report 38) CSVs in parallel per property. With no portfolio/property_ids, pulls the company-wide balance sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
portfolioNo
as_of_dateNo
show_detailNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: parallel per-property CSV downloads and the company-wide fallback when no portfolio/property_ids are supplied. No rate-limit or output-shape notes, but the output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences with no filler; the resource definition leads and the scoping rule follows. Efficient, though the parenthetical acronym breakdown is minor padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described. The description covers the read-only analysis, its data source and its scoping behavior adequately; only the show_detail flag and property_ids format remain undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for 4 parameters, so the description must compensate. It implicitly covers as_of_date ('as of a date'), portfolio and property_ids (via the company-wide default sentence), but says nothing about show_detail or the expected format of property_ids, leaving one parameter and one format question unanswered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Downloads BalanceSheet (report 38) CSVs') with a clear scope qualifier ('as of a date', 'per property' vs 'company-wide'). The resource name distinguishes it from the many analyze_* financial siblings, but it never explicitly contrasts itself with adjacent tools such as analyze_financials or trial_balance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'With no portfolio/property_ids, pulls the company-wide balance sheet' tells the agent what happens by default, which is useful implied guidance. It does not state when to prefer this tool over analyze_financials/trial_balance or any explicit exclusions, so guidance remains implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_cash_flowAnalyze Cash FlowB
Read-onlyIdempotent
Inspect

Indirect-method cash flow per property (CashFlow, report 54).

Net Income, total adjustments, net change in cash. Adjustments bucketed by Account Type (Other Current Asset/Liability, Fixed Asset, Long Term Liability, Equity). show_detail=True breaks out per-property adjustment lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
portfolioNo
start_dateNo
show_detailNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful output context (net income, total adjustments, net change in cash, bucketing by Account Type, and what show_detail=True changes), but says nothing about permissions, rate limits, or per-property scope behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the report identity and scope, then the returned figures, then the detail flag. It is dense but every clause conveys content; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and readOnly annotations cover safety. However, the date filters, portfolio selection, and property_ids are undocumented anywhere, which is a real gap for a 5-parameter analytical tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description carries the full burden. It only explains show_detail's behavior; end_date, start_date, portfolio, and property_ids are never addressed (no date format, no portfolio vs property_ids relationship), leaving most parameters ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource ('Indirect-method cash flow per property') and anchors it to a concrete report (CashFlow, report 54), which is more precise than most siblings. It does not, however, distinguish itself from related financial siblings like analyze_noi, analyze_financials, or analyze_balance_sheet.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no alternative tool is named. The agent must infer from the name that this is the cash-flow report rather than the P&L, NOI, or balance-sheet analyses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_delinquencyAnalyze DelinquencyA
Read-onlyIdempotent
Inspect

Delinquency by tenant + charge type (rent / utilities / late / other).

Pulls Delinquency (85). Complement to analyze_aged_receivables — same data sliced by charge category instead of aging bucket. Answers: 'who's behind on rent vs utilities', 'how much in late fees', 'top 10 delinquent tenants broken down by charge type'.

Output includes a footer note: Rent Manager's API for this report excludes tenants who have a balance but no current unit (orphaned late fees from former tenants, etc.). The RM UI version includes those. Customers cross-checking the two may see a small delta — typically 1-2 tenants / $50-200. Pass this along when relevant.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
portfolioNo
as_of_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read/idempotent/non-destructive, so the bar is lower, and the description adds real behavioral context: the API excludes tenants with a balance but no current unit, so results may differ from the RM UI by 1-2 tenants / $50-200. This is a substantive data-completeness caveat beyond what annotations provide, though nothing is said about pagination or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first line, followed by sibling differentiation, example questions, and the footer caveat. Efficient overall, though the trailing footer paragraph could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and it covers purpose, sibling routing, and a key data caveat. The main gap is parameter documentation, which the low schema coverage leaves unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters, so the description must carry the load, but it only hints at top_n via the phrase 'top 10' and the charge-type dimension. portfolio, as_of_date, and property_ids remain entirely undocumented in both the schema and the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope ('Delinquency by tenant + charge type') and immediately differentiates itself from the closest sibling by naming analyze_aged_receivables and contrasting the slice (charge category vs aging bucket). An agent can tell exactly what this returns without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative (analyze_aged_receivables) and explains the distinction, plus lists concrete questions it answers ('who's behind on rent vs utilities', 'top 10 delinquent tenants'). That is clear contextual routing, though there is no explicit when-not/exclusion guidance to reach a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_evictionsAnalyze EvictionsA
Read-onlyIdempotent
Inspect

Open evictions for a portfolio (OpenEvictions, report 971).

Per-property count, total balance at risk, average/oldest days in stage, reason histogram, and top-N oldest open cases. Answers: 'how many open evictions', 'total balance at risk', 'which evictions have been stuck the longest', 'breakdown of eviction reasons'.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
portfolioNo
as_of_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open-world), so the bar is lower. The description adds genuine value by disclosing the analytical shape of the response (histogram, top-N, averages) and the upstream report ID, though it omits potentially useful traits such as whether results are scoped to currently-open cases only or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then outputs, then the questions it answers—a sensible order with little waste. It is slightly list-like, but every clause adds selection value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and read-only annotations, the description needn't detail return values, and it nonetheless characterizes them. The main residual gap is the undocumented parameters (as_of_date, property_ids), which the schema does not compensate for.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning, and it largely doesn't. It hints at top_n ('top-N oldest cases') and portfolio ('for a portfolio'), but as_of_date and property_ids are never mentioned, and no formats, defaults, or filtering semantics are given for any of the four.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (analyze) and resource (open evictions) with scope ('for a portfolio') and even cites the source report. The enumerated outputs (per-property count, balance at risk, days in stage, reason histogram, top-N oldest) let an agent distinguish it from sibling analyze_* tools like analyze_delinquency without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Answers:' clause gives concrete question patterns (count of open evictions, balance at risk, longest-stuck cases, reason breakdown) that clearly signal when to reach for this tool. It stops short of naming alternatives or exclusions, so it's clear context without explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_financialsAnalyze FinancialsA
Read-onlyIdempotent
Inspect

Detailed single-period financial breakdown with per-account line items (when show_detail=True). Pulls the standard ProfitLoss report (report 43).

Use this ONLY when the user explicitly wants line-item detail for a single period, an audit-style breakdown, or specifically references "the standard P&L statement" / "the regular P&L". For any general "P&L", "Profit and Loss", or "T12" request, prefer analyze_pl_trend — that wrapper runs the 12-month recap report (ProfitLossRecapMonth) which is the default P&L view for this product.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
portfolioNo
start_dateNo
show_detailNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds value beyond that by disclosing which underlying report it runs (report 43) and the conditional behavior of line items when show_detail=True. It does not cover auth needs or return/pagination behavior, but the output schema exists, so this is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded: the first sentence states the deliverable and report, then the routing guidance follows. It is somewhat long, but each sentence (what it pulls, when to use it, which sibling to prefer otherwise) earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and annotations carry the read-only/idempotent profile. The description routes correctly and defines the report precisely. The main residual gap is parameter documentation, which neither the schema nor the description supplies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the schema provides no meaning and the description must compensate. The description only addresses show_detail (per-account line items when True) and says nothing about end_date, portfolio, start_date, or property_ids — formats, filters, or date-range semantics remain undocumented. This is a significant shortfall against a 0% coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('pulls the standard ProfitLoss report (report 43)') and defines the deliverable ('detailed single-period financial breakdown with per-account line items'). It explicitly distinguishes itself from the sibling analyze_pl_trend by naming that tool and its report (ProfitLossRecapMonth).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use conditions ('ONLY when the user explicitly wants line-item detail for a single period, an audit-style breakdown, or specifically references "the standard P&L statement"') and when-not ('For any general "P&L"... prefer analyze_pl_trend'). Names the alternative and the condition that selects it, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_home_salesAnalyze Home SalesA
Read-onlyIdempotent
Inspect

Park-owned-home (POH/DOH) sales pipeline — for sale, priced, aging.

Runs RM's Available Inventory Report (ReportWriter 106), the park/dealer- owned-home inventory, and summarizes the sales pipeline: count by status (For Sale / Coming Soon / Order Pending / Rented / not listed), total and average list price of for-sale homes, days on market, and a per-park breakdown. Use for "how many park-owned homes are for sale", "total list value of our for-sale homes", "which homes are aging on the market". The MHP home-sale revenue view the rent-roll tools miss. Scope to a portfolio/ park for speed (unscoped is fanned out in batches).

ParametersJSON Schema
NameRequiredDescriptionDefault
portfolioNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds genuinely new behavior: the exact source report, and the performance note that unscoped calls are 'fanned out in batches.' It omits anything about pagination or result size, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose in the first sentence, then layers report detail, use cases, sibling differentiation, and a performance tip. Every sentence adds value; the use-case list is slightly dense but earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and complexity is moderate. The description covers purpose, use cases, and key behaviors well; the only gap is parameter format detail, which is minor against the rest of the coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the two parameters (portfolio, property_ids), so the description carries the burden. It hints at portfolio/park scoping ('Scope to a portfolio/park for speed') but never explains the format of property_ids or how portfolio relates to property_ids, so it only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (summarizes park-owned-home sales pipeline), names the underlying report (Available Inventory Report / ReportWriter 106), and enumerates the exact metrics produced. It even differentiates itself from siblings with 'The MHP home-sale revenue view the rent-roll tools miss,' so an agent can separate it from analyze_rent_roll without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit trigger phrases ('how many park-owned homes are for sale', 'total list value...', 'which homes are aging') and frames the rent-roll tools as the tools it complements. It stops short of naming a specific alternative tool to use instead when the question is about leased-unit revenue, so it is one notch below full when/alternatives coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_inspectionsAnalyze InspectionsB
Read-onlyIdempotent
Inspect

Inspection compliance + action items (InspectionActivity, 273).

Per-property inspection counts, open vs closed, action / severe / review-needed item totals, ranked by severity. Surfaces the worst inspections by severe-item count and an inspector leaderboard. Answers: 'which properties have open inspections', 'which inspections flagged the most severe items', 'how many inspections happened this quarter'.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
end_dateNo
portfolioNo
start_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered and the bar is lower. The description adds the shape of the result (severity-ranked lists, leaderboard, open/closed split), but withholds operational traits such as pagination, permission requirements, or how the ranking tie-breaks. Useful but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then the metric breakdown, then example questions — a logical flow with no filler sentences. The parenthetical '(InspectionActivity, 273)' is opaque internal shorthand that costs a line without helping the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not required, and the safety profile is fully annotation-covered. However, five parameters at 0% coverage with no description-level semantics leaves a genuine gap: an agent knows what the tool answers but not how to scope it by portfolio, property set, or date range.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, yet it never mentions top_n, start_date, end_date, portfolio, or property_ids. The 'how many inspections happened this quarter' example only vaguely hints at date scoping and does not explain the date format, portfolio scoping, or that top_n controls ranking depth.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (inspection compliance and action items) and enumerates concrete outputs: per-property counts, open vs closed, severity ranking, worst inspections, inspector leaderboard. An agent can tell this is the inspections-analytics tool. It does not explicitly differentiate itself from any sibling, and the potentially confusable 'inspect_property_api' is never addressed, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Answers:' clause gives three concrete query shapes ('which properties have open inspections', 'which inspections flagged the most severe items', 'how many inspections happened this quarter'), which effectively tells the agent when to reach for this tool. It offers no exclusions or named alternatives among the many analyze_* siblings, so no 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_loss_to_leaseAnalyze Loss to LeaseA
Read-onlyIdempotent
Inspect

Loss to lease — gap between market rent and in-place rent on occupied units.

Runs SummaryRentRoll (report 69) over a full month and sums RM's Loss to Lease for occupied units by unit type, with market rent, in-place rent, the loss, and loss-as-%-of-market. The #1 multifamily revenue-capture metric: how far below market in-place rents sit and the renewal upside. Use for "what's our loss to lease", "how far below market are we", "which unit types have the biggest market gap". Requires market rent set on units. Always uses the full calendar month of as_of_date (defaults to the current month).

ParametersJSON Schema
NameRequiredDescriptionDefault
portfolioNo
as_of_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, openWorld. The description goes beyond them by disclosing the underlying report (SummaryRentRoll #69), the aggregation grain (by unit type), the time window (full calendar month of as_of_date, defaulting to current month), and a hard data prerequisite (market rent on units). It adds real invocation context rather than restating the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the metric definition, then the computation, then usage examples, then the prerequisite and time-window caveat — a logical order with little waste. The 'The #1 multifamily revenue-capture metric' line is mild marketing filler, keeping it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description covers computation, grain, timing, and prerequisites adequately. The only real hole is scope-parameter semantics (portfolio vs property_ids), which leaves an agent unsure how to target a subset of properties.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for three parameters, so the description carries the full burden. It explains as_of_date well (full calendar month, defaults to current month) but says nothing about what 'portfolio' or 'property_ids' accept, their format, or how they interact — two of three parameters remain semantically opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific metric and defines it inline ('gap between market rent and in-place rent on occupied units'), then states exactly how it is computed (SummaryRentRoll / report 69, summed by unit type). This clearly differentiates it from near siblings like analyze_rent_roll and analyze_rent_composition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete trigger phrases ('what's our loss to lease', 'how far below market are we', 'which unit types have the biggest market gap') and a prerequisite (market rent must be set on units). It does not explicitly name a competing sibling to use instead when that prerequisite fails or when a raw rent roll is wanted, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_lost_prospectsAnalyze Lost ProspectsA
Read-onlyIdempotent
Inspect

Lost-lead funnel analysis (LostProspectBreakdown, 687).

Breakdown of where in the funnel prospects are getting lost (Inquired / Application / Denied / etc.), agents with the most lost leads, properties with the worst conversion, and a recent lost-prospect timeline. Defaults to the trailing ~90 days. Complements analyze_prospect_pipeline (which counts everything coming in); this counts everything that drops out.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
end_dateNo
portfolioNo
start_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so safety is covered. The description adds real behavioral context: the default trailing ~90-day window and the semantic scope (everything that drops out vs everything coming in). Doesn't mention pagination or result size, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the report identifier and purpose, then progressively more detail. Every sentence adds information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be described. However, for a 5-parameter analytical tool with 0% schema coverage, the description leaves the parameter surface entirely unexplained, which is a meaningful completeness gap for an agent trying to invoke it with the right arguments.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, and the description only obliquely touches the date window via the ~90-day default. It never explains top_n, portfolio, or property_ids, so it fails to compensate for the total lack of parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('lost-lead funnel analysis') and enumerates the concrete outputs: funnel-stage breakdown, agents with lost leads, properties with worst conversion, timeline. It explicitly contrasts with the sibling analyze_prospect_pipeline, so an agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative (analyze_prospect_pipeline) and the selecting condition: that tool counts inbound leads, this one counts dropouts. Also gives the default time window (~90 days). It lacks explicit when-not-to-use guidance, but the alternative contrast is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_move_ins_outsAnalyze Move-Ins and Move-OutsA
Read-onlyIdempotent
Inspect

Move-in / move-out turnover summary (MoveInMoveOut, 77).

Per-property move-in / move-out / net counts over a window (default trailing 30 days). Surfaces top movers and the most- recent move-outs list. Analytics complement to the existing move_ins_outs listing tool — adds aggregates and rankings.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
end_dateNo
portfolioNo
start_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, openWorld, so safety is covered. The description adds behavioral context beyond that: a default trailing-30-day window and what the output surfaces (top movers, most-recent move-outs). This is useful, though it doesn't discuss pagination or ranking tie-breaking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and appropriately short. The '(MoveInMoveOut, 77)' token is unexplained internal jargon that adds noise without meaning for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is unnecessary, and the description conveys the aggregate nature of the tool. However, with 5 undocumented parameters and no guidance on scoping fields, an agent lacks enough to construct calls confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for 5 parameters, so the description must carry the burden and largely fails to. It indirectly covers the date window ('default trailing 30 days') and alludes to top_n via 'top movers', but says nothing about portfolio, property_ids, date format, or how the two scoping fields interact or are mutually exclusive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (move-in/move-out turnover summary) with explicit scope: per-property counts over a window, top movers, and recent move-outs. It also names the sibling listing tool (move_ins_outs) and how it differs ('adds aggregates and rankings'), so an agent can distinguish it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly routes between this tool and move_ins_outs: use this one for aggregates/rankings, the sibling for raw listing. That is clear context for selection, though it does not spell out a true when-not condition or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_noiAnalyze Net Operating IncomeA
Read-onlyIdempotent
Inspect

Compute Net Operating Income (NOI) for a single period — Operating Income minus Operating Expenses, non-operating items excluded.

Use this ONLY when the user specifically asks about NOI as a single aggregate number for a period. For any general "P&L", "Profit and Loss", or "T12" request, prefer analyze_pl_trend — that wrapper runs the 12-month recap report (ProfitLossRecapMonth) which is the default P&L view for this product.

Args: portfolio: Named portfolio or 3-letter prefix. property_ids: Comma-separated IDs. Use this OR portfolio. start_date: MM/DD/YYYY. Defaults to Jan 1 of current year. end_date: MM/DD/YYYY. Defaults to Dec 31 of current year.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
portfolioNo
start_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds domain-specific behavior beyond annotations: NOI excludes non-operating items, the tool reports a single aggregate period, and default start/end dates are Jan 1 and Dec 31. It does not cover authentication or rate limits, but those are less critical for a read-only analytical tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the computation, followed by the critical usage restriction and alternative, then a compact parameter list. Every sentence adds necessary routing, scope, or parameter information without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the financial-analysis context, four parameters, 0% schema coverage, and an existing output schema, the description supplies everything needed to call correctly: the formula, single-period scope, sibling routing, mutual-exclusivity rule for portfolio vs property_ids, and date formats. Return values can remain in the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description fully compensates by explaining all four parameters: 'portfolio' as a named portfolio or 3-letter prefix, 'property_ids' as comma-separated IDs with an explicit 'Use this OR portfolio' rule, and both dates with MM/DD/YYYY format and their defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Compute Net Operating Income (NOI) for a single period — Operating Income minus Operating Expenses, non-operating items excluded.' It also explicitly distinguishes itself from the closest sibling by naming analyze_pl_trend for general P&L/T12 requests.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: 'Use this ONLY when the user specifically asks about NOI as a single aggregate number for a period.' It then names the alternative, analyze_pl_trend, and states the condition ('general P&L, Profit and Loss, or T12 request') that should route there instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_occupancy_trendAnalyze Occupancy TrendA
Read-onlyIdempotent
Inspect

12-month physical occupancy trend — monthly occupied % across the year.

Runs RM's ReportWriter '12-Month Vacancy/Occupancy Report' (RW 111), a per-unit Occupied/Vacant matrix, rolled up to a monthly occupancy rate for the portfolio and per property. Use for "occupancy trend this year", "is occupancy improving month over month", "which parks drag occupancy down". Scope to a portfolio/property set — this report times out across every property at once (unscoped is fanned out in batches, slower). Months after the current one are forward-looking (scheduled move-ins/outs).

ParametersJSON Schema
NameRequiredDescriptionDefault
portfolioNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive behavior. The description adds substantial operational context: the report source, rollup mechanics, timeout/fan-out behavior when unscoped, and the forward-looking nature of post-current months.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the metric definition, then report source, use cases, and operational caveats. It is somewhat long but each section is relevant for an analytical report with performance constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations carry the safety profile. The description supplies data source, scope caveat, and forward-looking semantics, though parameter usage remains thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and neither portfolio nor property_ids is described in the schema. The phrase 'Scope to a portfolio/property set' only vaguely implies both parameters, leaving format, delimiter, and usage details undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: a 12-month physical occupancy trend with monthly occupied percentage. It also names the underlying RM ReportWriter report RW 111 and clarifies the per-unit-to-monthly rollup, though it does not explicitly distinguish itself from siblings like analyze_vacancy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete usage examples such as 'occupancy trend this year', month-over-month improvement, and identifying parks that drag occupancy down. It also gives scope guidance and a timeout caveat, but does not explicitly state when to choose an alternative sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_pl_multi_yearAnalyze Multi-Year P&LA
Read-onlyIdempotent
Inspect

Multi-year P&L by account (ProfitLossRecapYear, report 201).

Year-matrix per account across the requested date range, ranked by absolute total. Defaults to a 3-year window if no dates given. Answers: 'how has revenue moved across 3 years', 'which accounts have grown the most', 'multi-year trajectory'.

For year-over-year deltas use analyze_pl_yoy; for monthly trajectory use analyze_pl_trend.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
end_dateNo
portfolioNo
start_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety profile is covered. The description adds real behavioral context beyond that: the default 3-year window when no dates are given, and the ranking rule (absolute total). It doesn't mention pagination or granularity limits, so a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the report identity and output shape, then defaults, then the routing sentence. Every line earns its place with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and annotations cover the safety profile. The description is nearly complete; the only gap is the undocumented portfolio and property_ids parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 5 parameters, so the description must carry the load. It clarifies date behavior (defaults to a 3-year window) and implies top_n via 'ranked by absolute total', but leaves portfolio, property_ids, top_n semantics, and date format entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Multi-year P&L by account'), names the underlying report (ProfitLossRecapYear, report 201), and describes the output shape (year-matrix per account ranked by absolute total). It clearly distinguishes itself from the two nearest siblings by naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'For year-over-year deltas use analyze_pl_yoy; for monthly trajectory use analyze_pl_trend', and provides sample questions ('how has revenue moved across 3 years') that anchor when to reach for this tool. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_pl_trendAnalyze P&L TrendA
Read-onlyIdempotent
Inspect

DEFAULT P&L / Profit and Loss / T12 tool — runs the 12-month recap report (ProfitLossRecapMonth, report 45) and returns COMPUTED TEXT, not a file.

Use this for ANY general "show me / give me" P&L request: "show me a P&L", "give me the profit and loss", "T12 for SCE", "trailing 12-month financials", "how has NOI moved", "which month did expenses spike". This is the correct default — NOT analyze_financials (single-period line-item detail) and NOT analyze_noi (single aggregate NOI number).

DOWNLOAD REQUESTS — do NOT use this wrapper. When the user asks for "the P&L in PDF / Excel / XLSX" or says "download the P&L", call run_report(report_id=45, format='pdf'|'xlsx', ...) instead. Rent Manager produces the formatted file natively; we return a signed URL. Never call this wrapper and then synthesize a PDF from the numbers — that produces an unauthorized, differently-formatted document.

Output: a single COMBINED Income / Expenses / NOI series with one column per month over the requested range (all requested parks rolled into one statement, the way Rent Manager shows it natively), plus the list of parks included. Issues one RM call regardless of park count. To see a single park, scope with portfolio or property_ids.

Args: portfolio: Portfolio name or 3-letter prefix. property_ids: Comma-separated property IDs. start_date: MM/DD/YYYY. Defaults to Jan 1 of current year. end_date: MM/DD/YYYY. Defaults to today.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
portfolioNo
start_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial value beyond them: it discloses the return is COMPUTED TEXT rather than a file, that it issues a single RM call regardless of park count, and warns that synthesizing a PDF from the numbers produces an unauthorized document. This is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the DEFAULT designation and the routing rules, and every block (purpose, alternatives, download exclusion, output, args) earns its place. It is longer than strictly minimal – the multiple quoted example queries are somewhat redundant – but the length is justified by genuine routing stakes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter, read-only analysis tool, the description covers routing, exclusions, output shape (combined Income/Expenses/NOI series, one column per month, park list), and call efficiency, and an output schema exists to carry return detail. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and all four properties are bare strings with empty defaults, so the description must compensate and does: it gives portfolio ('name or 3-letter prefix'), property_ids (comma-separated), and MM/DD/YYYY formats plus semantic defaults (Jan 1 of current year / today) for the date range. Also explains scoping to a single park via portfolio or property_ids.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('runs the 12-month recap report (ProfitLossRecapMonth, report 45)') and explicitly names itself as the DEFAULT P&L/T12 tool. It distinguishes itself from siblings analyze_financials and analyze_noi by parenthetical contrast, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use triggers ('show me a P&L', 'T12 for SCE', 'how has NOI moved'), names the two near-sibling alternatives and what distinguishes them, and adds an explicit when-NOT-to-use rule routing download requests to run_report(report_id=45). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_pl_yoyAnalyze P&L Year Over YearA
Read-onlyIdempotent
Inspect

Year-over-year P&L comparison (ProfitLossComparePreviousYear, 144).

Period 1 = requested range; Period 2 = same range prior year. Shows income / expense / NOI / net-income deltas + percentages per property, with combined totals and top-mover lists for income gains, income losses, and expense increases. Answers: 'how's NOI tracking vs last year', 'what's driving income growth', 'which expenses are up the most YoY'.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
portfolioNo
start_dateNo
top_moversNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety bar is met structurally. The description adds genuine behavioral context beyond that: it defines how the two comparison periods are derived, what is returned (per-property deltas + percentages, combined totals, top-mover lists), and which movers are surfaced. It omits rate limits or empty-result behavior, keeping it at 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the report name/ID and the crucial Period-1/Period-2 semantics before any detail. Every sentence earns its place: report identity, period derivation, returned metrics, then concrete user questions. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be re-explained, and annotations cover the safety profile. The description supplies the analysis semantics and example intents. The only real hole is parameter meaning for a 5-param, 0%-coverage schema, which keeps it from 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description carries the full burden. It only indirectly hints at the date-range parameters ('requested range') and top_movers ('top-mover lists'); it says nothing about portfolio vs property_ids, their relationship or exclusivity, date formats, or the meaning of the defaults. Two filter parameters remain entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (analyze/comparison), resource (P&L year-over-year), and even the underlying report ID (ProfitLossComparePreviousYear, 144). The definition of Period 1 vs Period 2 makes the exact computed semantics unambiguous and differentiable from siblings like analyze_pl_trend and analyze_pl_multi_year.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Example questions ('how's NOI tracking vs last year', 'what's driving income growth', 'which expenses are up the most YoY') give clear situational context for when to reach for this tool, and the Period-2 definition implicitly scopes it to YoY questions. It never names the alternative sibling reports (analyze_pl_trend, analyze_pl_multi_year) or states exclusions, so it stops short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_prospect_pipelineAnalyze Prospect PipelineB
Read-onlyIdempotent
Inspect

Leasing activity by agent + inquiry source (ProspectBoxScore, 21).

Portfolio-wide (this report doesn't filter by property). Surfaces top agents by total prospects, source-mix percentages (Web vs Call vs Walk-In vs ...), and an application-rate proxy. Answers: 'which agents handled the most leads', 'what sources are driving pipeline', 'what's our application rate'.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
end_dateNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the useful behavioral fact that results are aggregated portfolio-wide with no property filtering, plus the report identifier (ProspectBoxScore, 21). It does not disclose any aggregation thresholds, tenant/connection scoping, or rate-limit behavior beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The report's subject is front-loaded in the first sentence, the portfolio-wide scoping caveat follows immediately, and the question list is compact and information-dense. No filler, though splitting the content across three short paragraphs slightly fragments the read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description does convey what the report contains. The gap is parameter behavior: a date-ranged, top-n report with three completely undocumented parameters leaves the agent guessing how to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and none of the three parameters (top_n, start_date, end_date) are mentioned anywhere in the description, so an agent gets no field-level meaning: is top_n applied per agent, per source, or per portfolio? Are dates inclusive and in what format? Nothing compensates for the empty schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific analysis: leasing activity broken out by agent and inquiry source, portfolio-wide, with top agents, source-mix percentages, and an application-rate proxy. That is far more than a restatement of the tool name. It stops short of naming any sibling (e.g. lead_source_summary or analyze_lost_prospects, which overlap in subject matter), so it does not fully differentiate itself within the crowded analyze_* family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Answers: ...' framing implies the kinds of questions this report serves, which gives an agent some selection signal, and the note that it is portfolio-wide (not property-filtered) is a genuine usage constraint. However there is no explicit when-not-to-use guidance and no named alternative for the overlapping source-mix / lost-prospect reports, so routing must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_renewalsAnalyze RenewalsA
Read-onlyIdempotent
Inspect

Lease renewal + below-market rent gap analysis (LeaseExpiration, 76).

Per-property active/m2m/renewed/on-notice counts, expirations in next 30/60/90 days, and the total market-rent-vs-current-rent gap. Plus top-N below-market rents (renewal pricing opportunities) and top-N upcoming expirations. Distinct from lease_expirations (which is API-based and lighter) — this one adds the market-rent column, which is the actual signal needed for pricing decisions.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
end_dateNo
portfolioNo
as_of_dateNo
start_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful content about what it computes (the market-rent signal) but discloses nothing about rate limits, auth, or data freshness beyond the annotation set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and the sibling differentiator, and every clause adds signal. The cryptic parenthetical '(LeaseExpiration, 76)' is dead weight but minor.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained and the description's output enumeration is bonus. However, with 6 undocumented parameters at 0% coverage and no usage prerequisites, the definition is not complete enough for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 6 parameters (top_n, dates, portfolio, property_ids), so the description must carry the burden. It only loosely implies 'top-N' and date windows; it never explains start_date/end_date/as_of_date formats, portfolio, or property_ids. Significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Lease renewal + below-market rent gap analysis') and enumerates the concrete outputs (active/m2m/renewed/on-notice counts, 30/60/90-day expirations, market-vs-current rent gap, top-N lists). It also names the sibling it differs from, so an agent can distinguish it from lease_expirations without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly contrasts with lease_expirations ('API-based and lighter') and explains the differentiator (market-rent column for pricing decisions). That routes the agent well, though it stops short of stating when-not-to-use or other alternatives among the many analyze_* siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_rent_compositionAnalyze Rent CompositionA
Read-onlyIdempotent
Inspect

Scheduled-rent composition by unit type — lot rent vs park-owned-home rent.

Breaks the rent roll (report 69) down by unit type so you can see how much scheduled income is lot/space rent on tenant-owned homes (e.g. "MH") vs park/dealer-owned-home rent ("DOH") vs RV vs apartments, and splits base rent from misc/utility/fee charges, each as a share of total. Use for "how much of our rent is lot rent vs home rent", "revenue mix by unit type", "base rent vs misc charges". The defining mobile-home-park revenue question.

ParametersJSON Schema
NameRequiredDescriptionDefault
portfolioNo
as_of_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the description only needs to add analytical context – which it does by disclosing the data source (report 69), the unit-type dimensions, and that values are expressed as shares of total. Nothing about auth, rate limits, or pagination is mentioned, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the key split are front-loaded in the first sentence, and the example queries are compact and useful. Slightly verbose between the header line and the examples, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the analytical framing is solid. However, the complete absence of parameter documentation for a zero-coverage schema leaves an agent unable to construct a well-formed call without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three parameters (portfolio, as_of_date, property_ids), so the description carries the full burden of explaining them. It says nothing about accepted formats, whether ids are comma-separated, or the default date behavior, leaving a real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Scheduled-rent composition by unit type') plus the exact analytical split it performs (lot rent vs DOH vs RV vs apartments, base rent vs misc charges). This clearly differentiates it from sibling analyze_rent_roll, which supplies the underlying report 69.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger phrases ('how much of our rent is lot rent vs home rent', 'revenue mix by unit type') and names the source report, which implicitly routes agents away from analyze_rent_roll. It stops short of an explicit when-not-to-use or a named alternative for raw rent-roll data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_rent_rollAnalyze Rent RollB
Read-onlyIdempotent
Inspect

Occupancy + scheduled rent summary for a portfolio.

Uses SummaryRentRoll (report 69) which includes all units, occupied and vacant, so space counts and occupancy rates are accurate.

ParametersJSON Schema
NameRequiredDescriptionDefault
portfolioNo
as_of_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the full safety profile (readOnly, idempotent, non-destructive, openWorld), so the description's job is to add context beyond that. It does: it names the underlying report (SummaryRentRoll, report 69) and explains that vacant units are included so space counts and occupancy rates are accurate, which is genuinely useful for interpreting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler, and the core purpose is front-loaded before the implementation detail about report 69. Nothing is wasted, though the second sentence borders on implementation trivia.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be described, and annotations cover the safety profile. The remaining gap is parameter documentation: three inputs with 0% schema coverage and no format guidance leaves the agent guessing at call syntax.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across all three parameters, so the description must compensate and largely does not. Only 'for a portfolio' loosely hints at the portfolio parameter; there is no guidance on the format of as_of_date or how property_ids should be supplied (comma-separated? list string?).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific output (occupancy + scheduled rent summary) for a specific scope (a portfolio), which is a clear verb+resource pairing. It does not, however, differentiate itself from overlapping siblings such as analyze_occupancy_trend, analyze_vacancy, or analyze_rent_composition, so the agent must still infer which is appropriate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says what the tool produces but gives no when-to-use, when-not-to-use, or named alternative. With many adjacent analytical siblings, an explicit routing hint between this and analyze_occupancy_trend / analyze_rent_composition is exactly what is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_security_depositsAnalyze Security DepositsA
Read-onlyIdempotent
Inspect

Security deposit liability snapshot (SecurityDeposit, 83).

Total deposits currently held (active liability), lifecycle totals (charged / received / refunded), per-property breakdown ranked by held balance, and top largest individual deposits. Useful for 'how much in deposits are we sitting on' and per-property liability questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
portfolioNo
as_of_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety profile is covered. The description adds the scope of returned content but says nothing about how as_of_date affects the snapshot, portfolio scoping behavior, or result limits. With annotations carrying the behavioral load, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool returns, followed by usage framing; two tight sentences with little waste. The parenthetical '(SecurityDeposit, 83)' is cryptic code-like noise that doesn't earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover safety. The remaining gap is parameter documentation: with four undocumented parameters at 0% schema coverage, an agent lacks guidance on filtering and date scoping.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all four parameters, so the description must carry the burden and largely does not. 'Top largest individual deposits' hints at top_n and 'per-property breakdown' hints at property_ids, but portfolio and as_of_date are never mentioned, leaving their meaning and format unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (SecurityDeposit) and enumerates exactly what the snapshot contains: total held liability, lifecycle totals (charged/received/refunded), per-property breakdown, and top deposits. No sibling tool covers deposits, so an agent can route to it without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete use-case framing ('how much in deposits are we sitting on', per-property liability questions), which tells the agent when this tool is the right pick. It stops short of naming alternatives or stating exclusions (e.g., a date-range caveat).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_service_issuesAnalyze Service IssuesA
Read-onlyIdempotent
Inspect

Work-order / service-issue backlog summary (FilteredIssueList, 112).

Portfolio-wide (this report has no Property column on RM's side). Summarizes total / open / closed counts, age distribution of open issues, breakdown by status / category / priority, and lists the oldest open issues. Supports category / priority / status filters. Answers: 'how many open work orders', 'how stale is the backlog', 'what's open by category', 'oldest unresolved issues'.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
statusNo
categoryNo
end_dateNo
priorityNo
open_onlyNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real value beyond that by disclosing the scope constraint that this report has no Property column and is portfolio-wide, which is exactly the kind of behavioral caveat an agent needs to avoid misusing it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the report is and its scope caveat, followed by output contents, filters, and example questions. No redundant sentences; the parenthetical report code is compact metadata.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, and it covers scope, filters, and content well. The one gap is that two date parameters are undocumented anywhere, leaving the time-window semantics for an agent to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters, so the description carries the burden. It mentions category/priority/status filters, implies open_only via 'age distribution of open issues', and implies top_n via 'lists the oldest open issues', but says nothing about start_date/end_date or the default of open_only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete deliverable (work-order/service-issue backlog summary) and names the underlying report and its portfolio-wide scope, which clearly differentiates it from the sibling get_work_orders list tool. An agent can tell exactly what this produces without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Answers:' block gives explicit question-shaped triggers ('how many open work orders', 'how stale is the backlog', 'oldest unresolved issues') that map well to when to invoke it. It stops short of naming the alternative (get_work_orders) for row-level lookups, so it is clear context without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_user_activityAnalyze User ActivityA
Read-onlyIdempotent
Inspect

Rent Manager user login activity and concurrent-user counts (UserLog, 3).

Use for questions like:

  • "How many users were logged in at one time yesterday?"

  • "What's our peak concurrent user count this week / last week?"

  • "How many people logged into Rent Manager on Monday?"

  • "Show me failed login attempts"

Returns total sessions, distinct users, failed login attempts, the PEAK number of users logged in simultaneously (with timestamp), and either a per-day peak table (multi-day range) or an hourly concurrency profile (single-day range). Org-wide by nature — there is no property scope.

Caveat (include when relaying results for a range that includes today): RM records a session only at LOGOUT, so users currently logged in are not in the log yet — today's recent hours UNDERSTATE true concurrency. Completed (past) days are accurate.

Args: start_date: MM/DD/YYYY. Defaults to 6 days ago (a 7-day window). end_date: MM/DD/YYYY. Defaults to today.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely non-obvious behavior: RM logs a session only at LOGOUT, so today's hours understate concurrency while completed days are accurate. That caveat — plus the per-day-peak vs hourly-profile return shape and the org-wide scoping constraint — is exactly the kind of context structured fields cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose, then a scannable bulleted example block, then returns, then the caveat, then the args. Length is justified by the amount of genuinely useful information; every sentence contributes routing or invocation value with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although an output schema exists (so return values need not be explained), the description still summarizes the key outputs, then covers scope, the today-incompleteness caveat, and both argument formats/defaults. For a zero-required-param, zero-coverage-schema analysis tool, nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and it does: both parameters are documented with their MM/DD/YYYY format and their defaults (start_date = 6 days ago / 7-day window, end_date = today). No ambiguity remains about how to supply the arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource ('Rent Manager user login activity and concurrent-user counts') and even cites the underlying source (UserLog, 3). It also declares the scope boundary ('Org-wide by nature — there is no property scope'), which sharply separates it from property-scoped analyses like analyze_occupancy_trend or analyze_rent_roll in the sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Four concrete example user questions ('How many users were logged in at one time yesterday?', 'peak concurrent user count this week', 'failed login attempts') give an agent strong routing signal for when to pick this tool. It does not, however, name an alternative sibling or an explicit when-not condition, so it falls just short of the 5 bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_vacancyAnalyze VacancyA
Read-onlyIdempotent
Inspect

Vacancy snapshot per property (Vacancy, report 74).

Per-property vacant count, average and oldest days-vacant, total foregone monthly rent. Plus a 0-30/31-60/61-90/91+ aging histogram, unit-type breakdown, and top-N longest-vacant units. Point-in-time snapshot, not a time-series.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
portfolioNo
as_of_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description's job is to add context beyond that. It does: it discloses the snapshot-vs-time-series nature of the result and the composition of the payload (aging buckets, unit-type breakdown), which tells the agent what it will actually get. It stops short of noting rate limits, pagination, or scoping behavior for portfolio/property filters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information: identity, metric list, payload composition, and the temporal caveat. It is front-loaded with the core purpose and has no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be documented, yet the description still usefully previews them. The tool's scope and data shape are clear; the only real gap is that none of the four inputs (especially as_of_date and the portfolio/property filters) are described, which matters for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters, so the description must compensate and largely does not. 'Top-N longest-vacant units' loosely maps to top_n and 'per property' loosely hints at property_ids/portfolio, but as_of_date and the semantics of the filter strings are never explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific analysis ('Vacancy snapshot per property') and enumerates the exact outputs: vacant count, average/oldest days-vacant, foregone monthly rent, aging histogram, unit-type breakdown, and top-N longest-vacant units. It also cites the underlying report (74), and the 'point-in-time snapshot, not a time-series' line distinguishes it from trend-oriented siblings such as analyze_occupancy_trend.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer this is the tool for vacancy-level analysis, and the 'not a time-series' note implicitly points to trend tools for temporal questions. However, no sibling is named and there are no explicit when-to-use/when-not conditions, so the routing burden falls on the reader.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_vendor_spendAnalyze Vendor SpendA
Read-onlyIdempotent
Inspect

Vendor spend / AP outflows (PayablesByAccount, 183).

Per-property and per-vendor spend over a window. Defaults to the trailing 30 days. Surfaces top vendors by gross spend, per-property totals, and largest individual bills. VOIDs are excluded by default (set include_voids=True to net them in).

SLOW for long date ranges (90+ days returns ~5800 rows / 30 days and can take 1-3 minutes). BEFORE calling with a window longer than the default 30 days, or against a large portfolio, send the user a one-liner: 'This report can take 1-3 minutes for long windows, I'll have results shortly.' Follow-up queries within 5 minutes are cached.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
end_dateNo
portfolioNo
start_dateNo
property_idsNo
include_voidsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: VOIDs are excluded by default with include_voids=True to net them in, long ranges (90+ days) can take 1-3 minutes and return ~5800 rows, and follow-up queries within 5 minutes are cached. These performance, default-filtering, and caching traits are exactly what an agent needs and are not covered by the readOnly/idempotent hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool reports and its defaults, then covers performance caveats. The slow-range warning and the scripted user one-liner are slightly verbose but each earns its place by preventing a bad UX on long queries.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the description covers scope, defaults, void handling, and performance. It is nearly complete; only the scoping parameters (portfolio vs. property_ids) lack clarifying semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden. It explains include_voids well, implies top_n ('top vendors') and the date window defaults, but leaves portfolio vs. property_ids semantics and expected string formats (e.g. comma-separated IDs) undocumented, so it only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Vendor spend / AP outflows') and details the exact output surfaces: top vendors by gross spend, per-property totals, and largest individual bills. This scope is specific enough to distinguish it from sibling payables tools like analyze_aged_payables or get_bills without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its usage domain (AP outflows over a window, trailing 30-day default) and gives operational guidance about when to warn the user on long windows. However, it never explicitly routes the agent away from or toward alternatives such as analyze_aged_payables, get_bills, or vendor_compliance, so the 'vs alternatives' dimension is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_water_consumptionAnalyze Water ConsumptionC
Read-onlyIdempotent
Inspect

Reconcile master-meter water/sewer consumption against tenant sub-meter totals.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
portfolioNo
start_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds no behavioral context beyond the purpose statement — it does not say what the reconciliation output contains, whether missing meter data is surfaced, or how partial periods are treated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or repetition. It is efficient, though at the cost of the detail needed for the four undocumented parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the read-only annotations cover the safety profile. However, with 0% parameter coverage and no usage guidance, the definition is thin for a tool that takes a date range and property/portfolio scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters (start_date, end_date, portfolio, property_ids), and the description supplies no date format, no hint that portfolio and property_ids are alternative scoping mechanisms, and no statement that all parameters are optional. The description does not compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource pair ("Reconcile ... water/sewer consumption") and adds the comparison being performed — master-meter totals against tenant sub-meter totals. That is concrete and distinct from the other analyze_* siblings, none of which touch utilities, though it never explicitly states how it differs from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites (e.g., that meter reads or rate cards must exist first), and no alternative tool is named. An agent knows what the tool does but not under what circumstances to choose it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_attachmentDownload AttachmentA
Read-onlyIdempotent
Inspect

Download and READ a Rent Manager attachment by FileID.

Use this for lease documents and other files attached to a record. PDFs are rendered page-by-page so their contents can actually be read, not just saved — which is the only way to read a scanned signed lease.

Get the FileID from get_tenant_notes (leases are usually filed on tenant History/Notes), get_check_attachments / get_credit_card_attachments / get_journal_attachments (invoice scans filed on a payment or GL entry), get_tenant_udfs, or get_property_udfs. When the FileID did not come from a listing earlier in this conversation, also name its parent record with tenant_id, check_id, bill_id, credit_card_transaction_id, or journal_id.

For a long document, read it in chunks with pages="1-40", then pages="41-80", and so on — the result says which pages came back and what to request next.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNo
bill_idNo
file_idNo
save_asNo
check_idNo
as_imagesNo
max_pagesNo
tenant_idNo
journal_idNo
credit_card_transaction_idNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive), and the description adds real behavioral context on top: PDFs are rendered page-by-page so contents are readable rather than merely saved, the response reports which pages came back and what to request next, and a parent identifier is required when the FileID wasn't sourced from a listing in the current conversation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action ('Download and READ ... by FileID') and organized into purposeful paragraphs covering purpose, sources, prerequisites, and paging. The framing is slightly conversational ('which is the only way to read a scanned signed lease') and could be tightened, but no paragraph is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, no-required-argument tool with no output schema, the description covers the essential call path and return behavior (page reporting) plus annotations handle safety. The remaining gap is the file-output semantics — whether save_as writes to disk and what as_images=true returns — which an agent must currently infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage the description carries the load, and it does document file_id's provenance, the five parent-record IDs, and pages syntax ('1-40'). It leaves save_as, as_images, and max_pages unexplained — and max_pages=10 by default is in mild tension with the advice to request 40-page chunks, which is exactly the kind of interaction an agent needs clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Download and READ a Rent Manager attachment by FileID') and scopes it to record-level attachments filed on tenants, payments, and GL entries. The list of source tools and parent-record IDs (tenant_id, check_id, bill_id, credit_card_transaction_id, journal_id) effectively separates it from download_property_attachment, download_unit_attachment, and download_invoices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternatives it draws FileIDs from (get_tenant_notes, get_check_attachments, get_credit_card_attachments, get_journal_attachments, get_tenant_udfs, get_property_udfs) and the condition under which the parent record must also be supplied. It also prescribes the chunking workflow for long documents, so an agent knows both when to call it and how to iterate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_invoicesDownload InvoicesC
Read-onlyIdempotent
Inspect

Download vendor-invoice attachments into the per-tenant FileStore.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
vendorNo
end_dateNo
portfolioNo
start_dateNo
property_idsNo
return_imagesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety and repeatability profile is covered. The description adds only the destination detail (per-tenant FileStore) and says nothing about pagination, batch limits, overwrite behavior, or what happens on re-runs against an idempotent tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and free of filler, which is good, but for a tool with seven undocumented parameters it is undersized rather than appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, but the description leaves the seven input filters, the meaning of return_images, and the scope of limit completely unaddressed. An agent cannot confidently call this tool with correct arguments.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Seven parameters exist at 0% schema description coverage, and the description mentions none of them: limit, vendor, start_date/end_date, portfolio, property_ids, and return_images are entirely undocumented anywhere. The description does no work to compensate for this gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (download) and resource (vendor-invoice attachments) plus the destination (per-tenant FileStore), which distinguishes it from generic siblings like download_attachment and download_property_tax_bill. It stops short of explicitly naming or contrasting those siblings, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool versus the other download_* siblings, nor any prerequisites, exclusions, or filtering context. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_property_attachmentDownload Property AttachmentB
Read-onlyIdempotent
Inspect

Pull a file attached to a property UDF (W9, COI, license, etc.) into FileStore.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idNo
save_asNo
udf_nameNo
shortnameNo
property_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the useful side-effect context that the file is placed into FileStore, but says nothing about permissions, rate limits, or overwrite behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb and resource up front and zero wasted words. It is appropriately terse, though it could have carried a few more bytes of routing or parameter detail at little cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and annotations carry the safety profile. However, with five undocumented parameters and no when-to-use guidance against three similarly named download siblings, the definition is only minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across five parameters, so the description must compensate. It only loosely hints at udf_name ('property UDF') and save_as ('into FileStore'), leaving file_id, shortname, and property_id completely unexplained in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: pulling a file attached to a property UDF into FileStore, with concrete examples (W9, COI, license). It is clear what the tool does, though it does not explicitly distinguish itself from close siblings like download_attachment, download_unit_attachment, or download_property_tax_bill.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool rather than download_attachment, download_unit_attachment, or get_property_udfs. No prerequisites, no exclusions, and no mention of required vs optional params are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_property_tax_billDownload Property Tax BillC
Read-onlyIdempotent
Inspect

Pull the tax-bill PDF/image from the AP bill that hits a GL account.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
gl_codeNo
gl_nameNoProperty Tax
end_dateNo
portfolioNo
start_dateNo
latest_onlyNo
property_idsNo
return_imagesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds that the artifact comes from an AP bill linked to a GL account and that the return can be a PDF or an image. It says nothing about behavior when no bill matches, or about volume/size limits for image returns, which would have been valuable given openWorldHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is arguably too sparse for a 9-parameter tool, but it wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 undocumented parameters, 0% schema coverage, and an output schema that removes the need to explain return values, the description should still clarify how to scope the lookup (date range, portfolio, property IDs, latest-only behavior). It does not, leaving an agent guessing on nearly every input.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 9 parameters, so the description carries the full burden and largely fails: it hints at gl_code/gl_name and return_images, but leaves year, start_date, end_date, portfolio, property_ids and latest_only completely unexplained. No formats, no defaults rationale, no indication that latest_only defaults to true.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (pull the tax-bill PDF/image) and the source (the AP bill that hits a GL account), which separates it from download_attachment, download_invoices and download_property_attachment. The phrasing 'hits a GL account' is jargon but does convey scope. Clear, though it never explicitly names a sibling it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites (must the GL account be resolved first via list_gl_accounts?), and no direction on which download sibling to pick when the user just says 'get the bill'. The agent must infer everything from the one-line description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_unit_attachmentDownload Unit AttachmentA
Read-onlyIdempotent
Inspect

Download and READ a file attached to a unit's UDF.

The unit equivalent of download_property_attachment: titles, certificates of occupancy, inspection reports and anything else filed on a unit's File-type UDFs. PDF pages are rendered so the contents can be read, not just saved. When the unit holds exactly one file, udf_name is optional.

For unit PHOTOS — the IMAGES tab or image UDFs — use get_unit_images.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNo
file_idNo
save_asNo
unit_idNo
udf_nameNo
as_imagesNo
max_pagesNo
shortnameNo
unit_nameNo
property_idNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so safety is covered. The description adds genuine behavioral context beyond that: 'PDF pages are rendered so the contents can be read, not just saved', plus the conditional that 'udf_name is optional' when a unit holds exactly one file. It does not cover rate limits or the return format, but adds meaningful value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and is reasonably compact, but the 'unit equivalent of download_property_attachment' framing and the photo-exclusion sentence add lines that could be tighter. Every sentence earns its place by routing or clarifying, but it is not maximally lean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, no required parameters, and 10 undocumented inputs, the description does the conceptual heavy lifting well but leaves the parameters opaque. For a tool with this many optional knobs (pages, save_as, as_images, etc.), an agent cannot fully determine correct invocation from the description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 10 parameters, so the description must carry the burden. It clarifies only udf_name (optional when one file exists) and gestures at page rendering; the remaining parameters (pages, max_pages, as_images, save_as, shortname, unit_name, unit_id, property_id, file_id) are undocumented anywhere, leaving most semantics unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Download and READ a file attached to a unit's UDF') and immediately positions it as 'The unit equivalent of download_property_attachment'. It distinguishes the tool from the photo path by naming get_unit_images, so an agent can tell it apart from siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit context ('titles, certificates of occupancy, inspection reports and anything else filed on a unit's File-type UDFs') and one clear exclusion with the alternative named: 'For unit PHOTOS ... use get_unit_images.' It does not address the generic download_attachment sibling, so guidance is strong but not fully comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dump_all_rate_cardsExport All Rate CardsB
Read-onlyIdempotent
Inspect

Build a multi-sheet XLSX of every meter type's rate card → FileStore.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNo
max_workersNo
sample_consumptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description does add genuinely new behavioral information — that output lands in FileStore as a multi-sheet XLSX — but says nothing about how the file is retrieved, how long a full-fleet export takes, or the effect of max_workers/sample_consumption on cost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the output artifact and destination stated first; nothing is padded. The arrow shorthand is slightly telegraphic but costs no extra tokens.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not needed. However, for a fan-out export tool with a concurrency knob and a sampling knob, the definition omits parameter meaning, any warning about scale/runtime, and any hint of how the resulting FileStore object is consumed — leaving the agent under-informed on the parts that matter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across all three parameters, so the description carries the full burden — and it contributes nothing. 'active_only' and 'max_workers' are guessable from their names, but 'sample_consumption' (default 1,000,000) is opaque and its units, purpose, and impact on accuracy are undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb ('Build'), a concrete artifact ('multi-sheet XLSX of every meter type's rate card'), and the destination ('FileStore'). It implicitly distinguishes itself from the sibling get_meter_rate_card by covering 'every' meter type, but it never names that sibling or any other alternative, so the differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the word 'every' — an agent can infer this is the bulk-export counterpart to the single-card reader. There is no explicit when-to-use, when-not-to-use, or named alternative, and no prerequisite (permissions, connection, expected runtime) is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_billsGet BillsC
Read-onlyIdempotent
Inspect

List vendor bills (AP invoices) for one or more properties.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
vendorNo
end_dateNo
portfolioNo
start_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered without the description. The description adds nothing behavioral beyond that: no pagination or limit semantics, no date-window behavior, no scoping rules for the optional filters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, which is good structure. It is arguably too terse for a six-parameter tool with no schema documentation, but there is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover safety. However, with six undocumented filter parameters and no usage guidance, the description leaves genuinely needed call-time information (date filtering, vendor matching, limit behavior) unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across six parameters, so the description carries the full burden and largely fails. 'One or more properties' loosely hints that property_ids/portfolio are filtering inputs, but vendor, start_date, end_date, and limit are never explained — an agent cannot tell date format, whether vendor is exact-match, or how limit interacts with defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('List vendor bills'), and the parenthetical '(AP invoices)' disambiguates it from sales/AR invoices and other financial siblings. It states the scope ('for one or more properties') but does not explicitly differentiate itself from neighbors like analyze_aged_payables or download_invoices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as analyze_aged_payables for aging analysis or download_invoices for attachments. The agent must infer usage purely from the name and the surrounding tool list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_check_attachmentsGet Check AttachmentsA
Read-onlyIdempotent
Inspect

List invoice scans attached to CHECKS, with their FileIDs.

Use this when a vendor was paid by check with no AP bill record — the scan hangs off the check, so get_bills/download_invoices cannot reach it (those rows show with no BillID). Search by date range, payee, or amount, then pass a FileID to download_attachment to read the document.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
payeeNo
amountNo
check_idNo
end_dateNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds genuine workflow behavior: this is a two-step flow whose results must be handed to download_attachment, and it explains why the sibling tools cannot reach these rows. It does not mention pagination or rate limits, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight paragraphs: purpose and output front-loaded, then the usage condition and next step. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and annotations carry the safety profile. The description covers purpose, routing, and the follow-up workflow; the only gap is the undocumented check_id and limit parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It names the conceptual search axes ('date range, payee, or amount'), covering start_date/end_date, payee, and amount, but omits check_id and limit entirely and gives no format details for dates or amounts. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List invoice scans attached to CHECKS, with their FileIDs') and immediately scopes it against siblings by naming the exact situation (checks with no AP bill record). An agent can distinguish this from get_bills and download_invoices without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('when a vendor was paid by check with no AP bill record'), names the alternatives that fail (get_bills, download_invoices) and why ('those rows show with no BillID'), and prescribes the follow-up step (pass FileID to download_attachment). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_credit_card_attachmentsGet Credit Card AttachmentsA
Read-onlyIdempotent
Inspect

List invoice/receipt scans attached to CREDIT CARD transactions.

Purchases put on a company card often carry the invoice as an attachment on the card transaction rather than on an AP bill, which puts them out of reach of the bill and check tools. Search by date range, vendor, amount, or card, then pass a FileID to download_attachment to read the document.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
payeeNo
amountNo
end_dateNo
start_dateNo
credit_card_idNo
transaction_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower. The description adds real context beyond them: where these attachments physically live in the data model and that the result feeds download_attachment via FileID. It does not mention pagination behavior, which is a minor omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, purpose front-loaded, no filler. The middle sentence explaining the data-model quirk is long but earns its place by justifying the tool's existence and its distinctness from the bill/check tools.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and the read-only annotations handle safety. It covers the discovery scenario and the download handoff well; the remaining gap is filter semantics for transaction_id and limit, which no structured field documents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and all seven parameters carry only generic titles, so the burden is on the description. It names the filter dimensions (date range, vendor, amount, card), which maps to start_date/end_date, payee, amount, and credit_card_id, but transaction_id and limit go unmentioned, and the 'vendor' wording does not match the 'payee' parameter name, risking a mismatch.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'List invoice/receipt scans attached to CREDIT CARD transactions.' It draws the boundary against the nearest siblings by noting these attachments live on card transactions and are 'out of reach of the bill and check tools,' which separates it from get_bills, get_check_attachments, and get_journal_attachments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies the discovering scenario (card purchases whose invoices attach to the card transaction, not an AP bill) and the search facets, plus the follow-on step of passing a FileID to download_attachment. It does not state an explicit exclusion or fallback for the case where the document is actually on a bill, but the routing context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_journal_attachmentsGet Journal AttachmentsA
Read-onlyIdempotent
Inspect

List invoice/receipt scans attached to JOURNAL (GL) entries.

Charges posted straight to the general ledger — including credit card purchases entered as journal entries rather than as card transactions — carry their documentation here, out of reach of the bill, check, and card tools. Search by date range, memo, or amount, then pass a FileID to download_attachment to read the document.

ParametersJSON Schema
NameRequiredDescriptionDefault
memoNo
limitNo
amountNo
end_dateNo
journal_idNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that — the documents are scans tied to GL entries and the returned FileID is the input to download_attachment — but it omits pagination/limit behavior and any auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the purpose, then the disambiguation, then the search/next-step guidance. The middle sentence is slightly long but each sentence carries distinct information, so there is little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained, and annotations cover the safety profile. The description is complete enough to select and call the tool, with the only real gap being the undocumented limit and journal_id parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden. It names 'date range, memo, or amount' (covering start_date/end_date, memo, amount) but says nothing about limit or journal_id, leaving two of six parameters undocumented anywhere. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('invoice/receipt scans attached to JOURNAL (GL) entries'), and explicitly distinguishes itself from the sibling attachment tools by noting the documentation is 'out of reach of the bill, check, and card tools.' An agent can tell it apart from get_check_attachments and get_credit_card_attachments without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the scenario that selects this tool (charges posted straight to the GL, including credit card purchases entered as journal entries rather than card transactions) and the alternative attachment tools it is not. It also gives the follow-up path: 'pass a FileID to download_attachment to read the document.' When-to-use and the next step are both explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_lease_violationsGet Lease ViolationsA
Read-onlyIdempotent
Inspect

Lease / community-rule violations — open compliance items by property.

Runs TenantViolationsListing (report 637): each violation's tenant, unit, date, code (Yard Appearance, Vehicle Violation, ...), status (Open/Closed), stage (Warning / Fine / Stage N), and description. Use for "what violations are open at ", "compliance issues", "who has an open violation". open_only (default True) hides closed items; scope via portfolio/ property_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
open_onlyNo
portfolioNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only/idempotent/open-world, so the description's added value is the report backing it and the fact that 'open_only' (default True) hides closed items and that scoping is done via portfolio/property_ids. That is genuine behavioral context beyond the annotations, though return shape and pagination are left to the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the definition and purpose, then enumerates returned fields, then usage cues, then parameter behavior. Dense and mostly waste-free, though the field enumeration is list-like and slightly padded relative to the two sentences that actually drive selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and it supplies purpose, scope, and the key filtering semantics. The only material gaps are the meaning/format of 'limit' and the string format expected for portfolio/property_ids.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It explains open_only (default True, hides closed) and the portfolio/property_ids scoping concept, but says nothing about 'limit' and gives no format hints for the id/portfolio strings, leaving one of four parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('lease/community-rule violations — open compliance items by property') and even names the underlying report (TenantViolationsListing, report 637) plus the exact fields returned. No sibling in the list covers violations/compliance for tenants, so an agent can route here unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete triggering phrasings — 'what violations are open at <park>', 'compliance issues', 'who has an open violation' — which map user intent onto the tool. It never names a competing tool to avoid (e.g. get_resident_concerns or analyze_evictions), so it stops short of explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_marketing_udfsGet Marketing UDFsB
Read-onlyIdempotent
Inspect

Property-level UDFs filtered to the marketing allow-list.

ParametersJSON Schema
NameRequiredDescriptionDefault
shortnameNo
property_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds the marketing allow-list scoping trait, which is useful, but it says nothing about pagination, result size, or the openWorld behavior implied by the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or repetition. It is telegraphic to the point of being a fragment, but every word carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations cover the safety profile. Still, for a two-parameter tool with 0% schema coverage and three closely related UDF siblings, the description leaves usage and parameter meaning unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two parameters. The description's phrase 'property-level' loosely maps to property_id, but 'shortname' is entirely unexplained and no format, default behavior, or interaction between the two params is given, so the description does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (property-level UDFs) and a scope qualifier (filtered to the marketing allow-list), which is enough to distinguish it from the tenant/unit/property UDF siblings. However, it never names get_property_udfs, so the agent must infer the distinction from the scope phrase alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance. With get_property_udfs, get_tenant_udfs, and get_unit_udfs in the sibling list, an agent calling this tool has no stated rule for choosing it over the unfiltered variant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_meter_rate_cardGet Meter Rate CardB
Read-onlyIdempotent
Inspect

Pull and pretty-print one meter type's rate card from Report 514.

ParametersJSON Schema
NameRequiredDescriptionDefault
meter_type_idYes
sample_consumptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that output is pretty-printed and sourced from Report 514, which is useful framing, but it says nothing about auth, rate limits, or what happens if the meter_type_id is unknown.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the action first and the source last; no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and annotations cover the safety profile. The remaining gap is the undocumented sample_consumption parameter, which the description should have clarified given zero schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so neither parameter is documented anywhere. The description does not explain meter_type_id or, more importantly, sample_consumption, which defaults to 1,000,000 and whose purpose and unit are entirely opaque to a caller.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (pull and pretty-print) and resource (one meter type's rate card), and the singular scope implicitly distinguishes it from the dump_all_rate_cards sibling. It stops short of naming that alternative, so the differentiation is inferable rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use, when-not-to-use, or named alternative. The phrase 'one meter type's' hints that dump_all_rate_cards handles the bulk case, but the description never states the selection condition, leaving the agent to infer it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_meter_readsGet Meter ReadsC
Read-onlyIdempotent
Inspect

Individual sub-meter readings per billing cycle from Report 104.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitNo
tenantNo
end_dateNo
portfolioNo
start_dateNo
property_idsNo
exception_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the useful context that results are individual sub-meter readings tied to billing cycles and sourced from Report 104, but says nothing about pagination, volume, or formatting behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and free of padding, which is good. But for a 7-parameter tool it is under-specified rather than genuinely concise, so the brevity reflects missing information rather than efficient editing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. However, an agent still lacks usage context, sibling differentiation, and any documentation for seven undocumented parameters, leaving the definition incomplete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters (unit, tenant, start_date, end_date, portfolio, property_ids, exception_only), and the description supplies no parameter meaning at all. An agent cannot tell what 'exception_only' toggles, what format the dates take, or whether property_ids is a list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (individual sub-meter readings) and scoping (per billing cycle) plus the data source (Report 104), so the purpose is discernible. However, it does not distinguish this tool from close siblings like get_meter_rate_card, list_meter_types, or analyze_water_consumption, leaving an agent to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no naming of alternatives among the ~70 sibling tools. The 'Report 104' note implies a reporting origin but does not tell an agent when to prefer this over the rate card or water consumption tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_property_home_inventoryGet Property Home InventoryC
Read-onlyIdempotent
Inspect

Build a one-row-per-unit home-inventory table across all home UDFs.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNo
shortnameNo
property_idNo
only_with_dataNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the useful output-shape fact that results are one row per unit, but says nothing about scope limits, performance, or how 'all home UDFs' interacts with property scoping.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficiently written, though the brevity stems partly from under-specification rather than from trimming redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, but the description still leaves four undocumented parameters, no usage context, and no explanation of how UDF selection or property scoping works. For a 4-parameter tool with 0% schema coverage, this is inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters (fields, shortname, property_id, only_with_data), and the description documents none of them. It only hints at the UDF domain, which loosely relates to 'fields', leaving property_id scoping and the only_with_data filter entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action and output shape: 'Build a one-row-per-unit home-inventory table across all home UDFs.' This is distinguishable from siblings like get_property_udfs or analyze_rent_roll, but the term 'home-inventory table' is domain jargon that leaves the actual content somewhat opaque.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of how this differs from get_property_udfs, get_unit_udfs, or the many analyze_* siblings. The agent must guess at the intended scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_property_locationsGet Property LocationsC
Read-onlyIdempotent
Inspect

Table of park addresses with state/city filters and a state summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
stateNo
portfolioNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered without the description. The description adds only that a 'state summary' accompanies the table, which is behaviorally marginal and overlaps with the output schema. No rate limits, auth, or pagination context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no filler, and the core output description comes first. Slightly under-specified rather than bloated, so it earns its brevity but adds little substance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter tool with zero schema description coverage, the description should clarify what portfolio and property_ids accept and how the filters combine. The presence of an output schema means return values need not be explained, but the parameter gaps leave the definition incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all four parameters. The description mentions state and city filters, which partially covers two of them, but portfolio and property_ids are entirely undocumented in both the schema and the description, leaving half the inputs opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (park/property addresses) and the output shape (a table plus a state summary), so an agent can form a rough idea of what it returns. However, there is no clear verb and no differentiation from the many sibling get_* / list_* tools, and 'park addresses' is loose phrasing for property locations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when this tool should be chosen over alternatives such as list_properties, list_property_units, or get_property_udfs. The only usage-relevant information is that state/city filters exist, which is inferred from the schema anyway.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_property_udfsGet Property UDFsB
Read-onlyIdempotent
Inspect

List all UDF values for a property, including file attachments.

ParametersJSON Schema
NameRequiredDescriptionDefault
shortnameNo
property_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds one useful piece of context beyond that — that file attachments are included in the result — but says nothing about scope, permissions, or result size for what could be an attachment-heavy response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The resource and the one notable result detail (attachments) lead the sentence, and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described. The remaining gaps are parameter semantics and sibling differentiation, which I penalized in their own dimensions; for a simple two-parameter read-only list tool this is close to adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two parameters (shortname and property_id), so the description must compensate and does not — neither parameter is mentioned, and their mutual relationship, default empty values, and required-less invocation are unexplained. The agent cannot tell whether shortname or property_id is preferred, or what an empty shortname does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List all UDF values for a property'. However, the sibling set contains get_tenant_udfs, get_unit_udfs, and get_marketing_udfs, and the description makes no attempt to distinguish this property-scoped variant from those, leaving the agent to infer the distinction from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the three sibling UDF tools, nor any stated prerequisites about needing a property identifier or shortname. The agent must infer usage context entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_prospectGet ProspectB
Read-onlyIdempotent
Inspect

Full detail for one prospect: contact info, lead source, status, dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
prospect_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered externally. The description's only added behavioral value is the shape of what comes back ('full detail'), which is largely superseded by the existing output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; every clause earns its place by naming the resource and the payload contents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with an output schema and full annotation coverage, the description covers the essentials, but it omits the only thing an agent must reason about: how to obtain a valid prospect_id, which the sibling list_prospects would provide.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the lone parameter prospect_id carries only a title with no type guidance or source. The description never mentions the identifier at all, so it fails to compensate for the schema gap on the one input that must be supplied correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Full detail for one prospect') and enumerates the returned fields (contact info, lead source, status, dates), which distinguishes it from list_prospects and the analyze_* siblings that aggregate rather than retrieve. It stops short of naming a sibling alternative, but the singular-record scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'one prospect' implies the single-record lookup case, which is a weak usage cue at best. There is no statement of when to prefer this over list_prospects or analyze_prospect_pipeline, and no prerequisite (e.g. where the prospect_id comes from) is mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_resident_concernsGet Resident ConcernsA
Read-onlyIdempotent
Inspect

Open resident complaints WITH the resident's name, email, and phone.

Unlike analyze_service_issues (a portfolio summary from report 112, which carries no resident or contact data), this pulls the "Resident Concern" issues straight from the /ServiceManagerIssues endpoint with the linked tenant, unit, property, and the full complaint text — everything needed to draft a reply to each resident. Newest first. Optional filters: property (name or short code), status, priority, and an opened-date window (start_date / end_date, M/D/YYYY or ISO). Answers: 'show me open resident complaints', 'who complained at and how do I reach them', 'pull the latest resident concerns to respond to'.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statusNo
end_dateNo
priorityNo
propertyNo
open_onlyNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: the underlying endpoint, the returned linked entities (tenant, unit, property, full complaint text), the 'Resident Concern' issue scoping, and the newest-first ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core capability and the sibling contrast, then filters, then example queries. Slightly long, but each block—contrast, data payload, filters, triggers—carries distinct information, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value detail is not needed, and annotations cover the safety profile. The description supplies source, payload contents, ordering, and filter semantics, leaving only the limit param unexplained—a minor gap for a 7-param, read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the parameter burden and mostly delivers: it explains property (name or short code), status, priority, and the start_date/end_date window with accepted formats (M/D/YYYY or ISO). It only leaves limit and the open_only toggle unaddressed, though 'open resident complaints' hints at open_only's default behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (open resident complaints) and immediately distinguishes itself from key sibling analyze_service_issues by data source (report 112 vs. /ServiceManagerIssues) and by carrying resident contact data. An agent can tell them apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative (analyze_service_issues) and the reason to prefer this one (contact data for drafting replies), and seeds concrete trigger questions like 'who complained at <park> and how do I reach them'. When-to-use and when-not are both covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tenantGet TenantB
Read-onlyIdempotent
Inspect

Full detail for one tenant: contacts, phones, addresses, lease history.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenant_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds which data categories are returned, which is useful, but says nothing about authorization scope, missing-tenant behavior, or freshness of lease history.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded clause with no padding; the payload list is the highest-value information and comes first. Slightly terse to the point of being a fragment rather than a sentence, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return structure needn't be re-explained, and the annotations cover the safety profile. What remains missing is parameter guidance and any usage context against list_tenants and the other get_tenant_* tools, leaving the definition minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single required tenant_id, and the description never mentions it — no id format, source, or lookup semantics. The phrase 'one tenant' weakly implies an identifier is needed but adds no meaning beyond the schema's type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb+resource ('Get Tenant') and enumerates the payload (contacts, phones, addresses, lease history), which distinguishes it from scalar getters like get_tenant_notes or get_tenant_udfs. It does not explicitly name list_tenants as the plural counterpart, so sibling differentiation is only implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Full detail for one tenant' implies the single-entity lookup case versus the list_tenants / get_tenant_* siblings, but no explicit when-to-use, when-not, or alternative is stated. Usage is inferable rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tenant_ledgerGet Tenant LedgerA
Read-onlyIdempotent
Inspect

A resident's charge / payment / credit history with their current balance.

Use for "show this resident's payment history", "what has this tenant been charged", "what does tenant X currently owe", "ledger for tenant X". Pulls the tenant's transaction ledger and renders it newest-first with per-period subtotals (charged / paid / credits), plus Rent Manager's authoritative current balance. Find the TenantID with list_tenants. Optional start_date / end_date (MM/DD/YYYY) window the history; limit caps the lines shown (default 40, max 200).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
end_dateNo
tenant_idYes
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read profile (readOnlyHint, idempotentHint, destructiveHint=false), so the description is free to add behavioral detail instead — and it does: results render newest-first with per-period charged/paid/credit subtotals plus Rent Manager's authoritative balance. It omits pagination/rate-limit behavior, and the output schema covers the return shape, so the remaining gap is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-line purpose, then usage examples, then the prerequisite and parameter constraints. No filler sentences — every clause (date format, limit bounds, subtotal rendering) adds callable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only ledger tool with an output schema already documenting return values and annotations covering the safety profile, the description supplies everything else an agent needs: what it returns and how it's shaped, the ID prerequisite, and all parameter formats and bounds.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry all parameter meaning and it does: tenant_id (obtained via list_tenants), start_date/end_date (MM/DD/YYYY, window the history), and limit (default 40, max 200). Every one of the four parameters is given semantics the bare schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Pulls the tenant's transaction ledger') and scopes it precisely against the large sibling set: this is a per-tenant charge/payment/credit history with current balance, not one of the many analyze_* aggregate reports. An agent can distinguish it from get_tenant, list_tenants, and analyze_payment_trends without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger phrases ('show this resident's payment history', 'what does tenant X currently owe') and a prerequisite routing step ('Find the TenantID with list_tenants'). It stops short of naming an alternative or stating when NOT to use it (e.g. versus analyze_payment_trends for portfolio-level trends), so it is clear context without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tenant_notesGet Tenant NotesA
Read-onlyIdempotent
Inspect

History notes logged on a tenant — the running staff commentary.

Pulls /Tenants/{id}/HistoryNotes (rent-increase notices, payment arrangements, manager comments) newest-first — context not visible elsewhere. Find the TenantID with list_tenants. limit caps the notes shown (default 30, max 200).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
tenant_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the source endpoint, newest-first ordering, and the confidence that notes are not surfaced by other tools. No auth or rate-limit detail, but nothing misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences that are front-loaded with what the tool is, then where the data comes from, then the parameter constraint. No filler, no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be described. Between the annotations (safety), the description (source, ordering, content, limit bounds, prerequisite), and the schema, an agent has everything needed to select and call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does: 'limit' is explained with default 30 and max 200, and tenant_id is given a discovery path via list_tenants. tenant_id's own semantics (integer key) remain implicit, but the practical guidance is present.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('History notes logged on a tenant') and enumerates the content type (rent-increase notices, payment arrangements, manager comments), which distinguishes it from financial tenant tools like get_tenant_ledger. It does not name a sibling explicitly, but 'context not visible elsewhere' differentiates it at a conceptual level.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear usage context ('context not visible elsewhere') and a prerequisite workflow ('Find the TenantID with list_tenants'), which tells the agent how to obtain the required input. It stops short of explicit when-not-to-use guidance or naming an alternative tenant-note/resident-concern source.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tenant_udfsGet Tenant UDFsC
Read-onlyIdempotent
Inspect

List all UDF values for a tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenant_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds nothing beyond that: no note on what a UDF is, whether values are per-tenant overrides, or any auth/scope caveat. With a lowered bar due to annotations, this is still thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the scope front-loaded and zero filler. It is efficient, though its brevity edges toward under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, but the description never clarifies the 'UDF' concept, its tenant-vs-property-vs-unit granularity, or why an agent would pick it over the three sibling UDF tools. Given one undocumented parameter, this is inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single required tenant_id has only the auto-generated title 'Tenant Id'. The phrase 'for a tenant' loosely identifies the parameter's role but adds no format, source, or identifier-type detail the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb (List) and resource (UDF values) scoped to a tenant, which distinguishes it from the sibling property/unit/marketing UDF tools. However, 'UDF' is never expanded (user-defined fields), leaving the resource somewhat ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of the near-identical siblings get_property_udfs, get_unit_udfs, and get_marketing_udfs that an agent must choose between. The tenant scoping implies usage but nothing is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_unit_imagesGet Unit ImagesA
Read-onlyIdempotent
Inspect

Photos filed on one unit in Rent Manager.

Covers the Home > Property > Unit > IMAGES path from the RM desktop client — the unit photos site managers upload from the RM mobile app — and also photos filed on the unit's UDFs, which is where some operators keep them. Name the property by shortname (or property_id) and the unit by its label (or unit_id): get_unit_images(shortname="CAPEFEAR", unit_name="Lot 24").

Photos come back for the assistant to look at AND are saved to the file store, so they can be assembled into a PDF or attached to an email. For a non-photo file on a unit UDF (a title, an inspection), use download_unit_attachment.

ParametersJSON Schema
NameRequiredDescriptionDefault
unit_idNo
as_imagesNo
shortnameNo
unit_nameNo
max_imagesNo
property_idNo
include_udfsNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuinely non-obvious behavior: results are both returned to the assistant and persisted to the file store, and the data comes from two distinct sources (unit photos vs. unit UDF photos). It does not disclose the effect of max_images or whether results are paged.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and the data-source scope, then the routing rule. The RM-desktop path narration ('Covers the Home > Property > Unit > IMAGES path...') is flavorful but slightly over-elaborate for an agent-selection description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 params, 0% schema coverage, and no output schema, the description should explain the remaining controls. It handles nomenclature and destination well but omits the image cap/limit behavior and what as_images=false produces, leaving real gaps for a multi-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 7 params, so the description must carry the burden. It explains the shortname/property_id and unit_name/unit_id alternatives with an example, but says nothing about as_images, include_udfs, or the default max_images=6 — a behaviorally significant cap left undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Photos filed on one unit') and enumerates the exact data sources covered — unit IMAGES plus unit UDFs. It also names the sibling it is not: download_unit_attachment for non-photo files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the when-not condition ('For a non-photo file on a unit UDF ... use download_unit_attachment') and a concrete invocation example with real argument values. The only unaddressed sibling is get_vacant_unit_images, which is a minor omission.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_unit_udfsGet Unit UDFsC
Read-onlyIdempotent
Inspect

Home-info UDFs for one unit (Year, Manufacturer, Serial/VIN, Payoff, ...).

ParametersJSON Schema
NameRequiredDescriptionDefault
unit_idNo
shortnameNo
unit_nameNo
property_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the useful detail that these are home-info UDFs (Year, Manufacturer, Serial/VIN, Payoff), but says nothing about auth requirements, missing-unit behavior, or which identifier wins when several are supplied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence, front-loaded with the resource and scope. The trailing ellipsis in the examples adds little but costs almost nothing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, but the definition leaves the identifying-parameter question unanswered and provides no routing to sibling UDF tools, which is the main thing an agent needs for a four-optional-parameter lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and all four parameters (unit_id, shortname, unit_name, property_id) carry no descriptions. The description adds no parameter meaning at all, and critically no guidance on which of these optional-looking identifiers actually identifies the unit. With four competing lookup keys and zero required parameters, this is a real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (unit-level UDFs) and scopes it with 'for one unit', which implicitly separates it from get_property_udfs, get_tenant_udfs, and get_marketing_udfs. The parenthetical examples (Year, Manufacturer, Serial/VIN, Payoff) make the domain concrete, though the verb 'get' is only implied by the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this versus the other *_udfs siblings, no prerequisites, and no note on how to identify the target unit. The agent must infer everything from the resource noun alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vacant_unit_imagesGet Vacant Unit ImagesA
Read-onlyIdempotent
Inspect

Unit photos for every VACANT unit in a property — a make-ready review.

Use this for "show me photos of the vacant units at " or to build a vacant-unit review PDF for an owner. Finds the vacant units, pulls the photos off each one's IMAGES tab, and returns them grouped by unit, with a list of which vacant units have no photos uploaded yet.

For a single unit, use get_unit_images instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_imagesNo
max_unitsNo
shortnameNo
property_idNo
include_udfsNo
max_images_per_unitNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the description only needs to add operational context, which it does well: it fans out across units, pulls from each unit's IMAGES tab, groups results by unit, and reports vacant units with no photos. It omits that results are capped by max_units (12) and max_images_per_unit (3), so silent truncation is undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short blocks: what it does, when to use it, and the alternative. Front-loaded, zero filler, and the sibling exclusion sits at the end where it belongs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description does describe the return shape (grouped by unit, plus a no-photo list), which is a real strength. But for a six-parameter tool with no schema documentation, missing coverage of the truncation limits and of how shortname vs property_id select the property leaves the agent guessing on invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across six parameters, and the description supplies no meaning for any of them — not as_images, max_units, max_images_per_unit, include_udfs, nor the shortname-vs-property_id choice. With zero coverage the description carries the full burden and it fails to, leaving only the bare property names to guess from.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus a scope qualifier (VACANT units only) and a framing (make-ready review). It immediately distinguishes itself from get_unit_images, which is named as the single-unit alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger phrasing ("show me photos of the vacant units at <park>") and a named downstream use case (vacant-unit review PDF for an owner), plus an explicit when-not with the alternative get_unit_images. That is exactly the routing information an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_work_ordersGet Work OrdersA
Read-onlyIdempotent
Inspect

Service Manager work orders / maintenance issues across EVERY category.

The general maintenance board (not just resident complaints — use get_resident_concerns for those). Pulls /ServiceManagerIssues directly with category, status, priority, open/close dates, property/unit, and detail. Set open_only=False to include closed orders and an average open→close turnaround stat. Filter by property, category, status, priority, or an opened-date window. Answers: 'what work orders are open', 'maintenance turnaround at ', 'show closed work orders this month'.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statusNo
categoryNo
end_dateNo
priorityNo
propertyNo
open_onlyNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. The description adds real behavioral context beyond them: open_only defaults to open orders, and setting open_only=False both includes closed orders and returns an average open→close turnaround stat. It does not mention pagination or the meaning of 'limit'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then disambiguation, data source, behavior, filters, and example queries — a logical structure. Slightly long, and the filter-list sentence partially restates parameter names already visible in the schema, but nothing is egregiously wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and annotations cover the safety profile. For an 8-param read-only query tool, the description supplies purpose, disambiguation, filter scope, and the key open_only behavior — sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 8 params, so the description carries real weight — it explains open_only's default semantics and turnaround side-effect, and enumerates the filter dimensions (property, category, status, priority, opened-date window). However it omits date format for start_date/end_date, valid status/category values, and the role of limit, leaving several params under-specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource ('Service Manager work orders / maintenance issues across EVERY category') drawn from a named data source (/ServiceManagerIssues). It explicitly distinguishes itself from the sibling get_resident_concerns, so an agent can tell them apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative tool and the condition that selects it ('not just resident complaints — use get_resident_concerns for those'). Adds concrete example questions ('what work orders are open', 'maintenance turnaround at <property>') that map user intents to this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_property_apiInspect Property API FieldsB
Read-onlyIdempotent
Inspect

Dump raw API fields for a property — debugging aid.

ParametersJSON Schema
NameRequiredDescriptionDefault
property_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, open-world, and non-destructive traits. The description adds that output is raw API fields and that this is a debugging tool, which is useful context but does not disclose auth needs, rate limits, or exactly what 'raw' entails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with no filler; the purpose is front-loaded. It is appropriately terse for a simple tool, though the brevity contributes to the parameter gap.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema available and full annotation coverage, the description needn't explain return values. However, for a tool with a parameter that has zero schema description, the description does not compensate, leaving a gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single property_id parameter, and the description only implies it by saying 'for a property.' It does not explain the integer type, the default value 0, or whether the default triggers different behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Dump') and resource ('raw API fields for a property') plus its role as a debugging aid. It is distinguishable from the many analyze_* and get_* siblings, though it doesn't explicitly name an alternative tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'debugging aid' implies usage in troubleshooting, but there are no explicit when-to-use conditions, exclusions, or named alternative tools. An agent gets a hint, not firm guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lead_source_summaryLead Source SummaryA
Read-onlyIdempotent
Inspect

LEAD SOURCE BREAKDOWN — counts of prospects by lead source for a property or portfolio over a date window.

Use this whenever the user asks for "lead sources", "lead source breakdown", "where are prospects coming from", "marketing channel ROI", "how did this park's leads find us", etc. ONE call returns the full breakdown — do NOT loop over get_prospect.

Args: start_date: YYYY-MM-DD. Defaults to 90 days ago when omitted. end_date: YYYY-MM-DD. Defaults to today when omitted. property_id / shortname / portfolio / property_ids: scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
portfolioNo
shortnameNo
start_dateNo
property_idNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real behavior beyond that: a single call returns the complete breakdown and should not be decomposed into per-prospect calls. It does not discuss return shape or empty-result behavior, but an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with a bolded one-line summary, followed by trigger phrases and an args block; nothing is buried. The phrase list is slightly long but each example maps to a distinct user utterance, and the whole thing stays scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the description covers purpose, triggers, aggregation behavior, and every parameter. The one gap is that it never says how simultaneous scope arguments (property_id vs shortname vs portfolio vs property_ids) interact or which wins.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the entire burden — and it does: it explains the YYYY-MM-DD format and the effective date defaults (90 days ago / today), which the schema only shows as empty strings. All six scope and date parameters are accounted for, including the four scope identifiers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and output form ('counts of prospects by lead source') plus the scope (property or portfolio, date window) in the first sentence. An agent can distinguish it from get_prospect, analyze_prospect_pipeline, and analyze_lost_prospects without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists the user phrasings that should trigger it ('lead sources', 'where are prospects coming from', 'marketing channel ROI') and names the alternative to avoid ('do NOT loop over get_prospect'). Both the when and the when-not are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lease_expirationsLease ExpirationsC
Read-onlyIdempotent
Inspect

Leases expiring within the next within_days days, bucketed 30/60/90.

ParametersJSON Schema
NameRequiredDescriptionDefault
portfolioNo
shortnameNo
property_idNo
within_daysNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so the safety profile is covered. The description adds the genuinely useful disclosure that results are bucketed 30/60/90, but says nothing about filtering semantics, scoping, or result size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though the terse 'bucketed 30/60/90' phrasing is slightly compressed at the cost of clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, but a five-parameter, fully optional-filter tool with 0% schema coverage needs far more than one sentence. The agent is left guessing about filter semantics and how the parameters combine.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, yet it only explains within_days. The four remaining filters (portfolio, shortname, property_id, property_ids) — including the ambiguous overlap between property_id and property_ids — are left entirely undefined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (leases), the operation (expiring within a window), and a distinctive behavior (bucketed 30/60/90). An agent can tell this apart from generic list_leases or analyze_renewals, though it never explicitly says it returns a report/list versus a count.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, when-not-to-use, or alternative routing is given. Siblings such as analyze_renewals and list_leases clearly overlap in the lease-expiration space, and the description offers no way to choose between them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_credit_cardsList Credit CardsA
Read-onlyIdempotent
Inspect

List the credit cards defined on this Rent Manager database.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description contributes only the scope detail that the cards are 'defined on this' database, implying connection-specific results, but says nothing about result volume, pagination, or auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. Every word (verb, resource, scope) earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and with no parameters there is nothing else to describe. The scope note about the current database is helpful given the switch_rm_connection sibling, but the description could still say a little more about how results are bounded.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description adds no parameter information, which is acceptable because there is nothing to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('credit cards'), scoped to 'this Rent Manager database', which is enough to separate it from the similarly named get_credit_card_attachments. It does not, however, explicitly contrast itself with any sibling, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus related tools such as get_credit_card_attachments, switch_rm_connection, or the report/analysis siblings. Usage is only implied by the 'list' naming convention, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_gl_accountsList GL AccountsA
Read-onlyIdempotent
Inspect

List the Rent Manager chart of accounts (GL accounts), grouped by type.

Use this to answer "what GL accounts / chart of accounts do we have", to find an account's number/ID, or before drilling into financials. Filter by account_type (e.g. "income", "expense") or name_filter (matches name or account number); active_only hides inactive accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNo
name_filterNo
account_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuine context beyond that: results are grouped by account type, and active_only hides inactive accounts (a behavior with data-visibility consequences). It doesn't discuss result size or pagination, but the output schema exists to cover return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-line purpose, then a compact usage/parameter block. Every sentence earns its place, though the parenthetical '(GL accounts)' and repeated 'chart of accounts' phrasing is mildly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, zero-required-parameter list tool with an output schema and full annotation coverage, the description supplies everything needed: what it returns, how it's grouped, and what each filter controls. No material gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden — and it does document all three parameters: account_type (with examples 'income', 'expense'), name_filter (matches name OR account number, a non-obvious behavior), and active_only (hides inactive). It falls short of listing the full valid set of account_type values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the Rent Manager chart of accounts (GL accounts)') plus a defining behavior ('grouped by type'). This clearly distinguishes it from analysis siblings like analyze_balance_sheet or trial_balance, which consume this data rather than enumerate it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names three triggering scenarios: answering 'what GL accounts do we have', finding an account's number/ID, and as a prerequisite before drilling into financials. It does not name an alternative tool to use instead for related tasks, so it stops short of the when-not guidance a 5 requires.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_leasesList LeasesB
Read-onlyIdempotent
Inspect

List leases for a property or portfolio.

active_on='YYYY-MM-DD' (or 'today') filters to leases active on that date.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onNo
portfolioNo
shortnameNo
property_idNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, covering the safety profile. The description adds the active_on filtering behavior, but does not disclose result scope, pagination, or what happens when multiple scoping params are combined.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short lines, front-loaded with the purpose and then the one filtering note. No wasted words, though the active_on detail is placed where a scoping-parameter explanation would be more valuable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. However, with 5 undocumented parameters and an ambiguous set of scoping options, the description is only marginally sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description must carry the load. It explains active_on format (YYYY-MM-DD or 'today') well, but says nothing about the crucial portfolio vs shortname vs property_id vs property_ids distinction, leaving the scoping parameters ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'List leases for a property or portfolio.' An agent knows the operation, but the description does not distinguish it from nearby siblings such as lease_expirations or get_lease_violations, which also touch lease data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance. The agent must infer that this is the general lease-listing tool versus lease_expirations or get_lease_violations, and no prerequisites or alternative routing is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_meter_typesList Meter TypesC
Read-onlyIdempotent
Inspect

List meter types defined in Rent Manager.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNo
name_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds nothing beyond those hints — notably it does not disclose that active_only defaults to true, so inactive meter types are silently excluded by default.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no wasted words and the resource front-loaded, which is structurally fine. But it is under-specified rather than genuinely concise given the available filter parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, but for a 2-parameter tool with zero schema coverage the description should at minimum explain the default active_only behavior. It leaves the agent guessing about filtering semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two parameters, so the description must carry the burden of explaining active_only and name_filter. It says nothing about either, leaving the agent unaware that filtering and a default-exclusion flag exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'List meter types defined in Rent Manager' tells the agent it retrieves configured meter-type definitions. However it does nothing to distinguish this from closely related siblings like get_meter_rate_card or get_meter_reads, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is offered: nothing says whether this is for populating a filter, cross-referencing meter reads, or configuration lookup. No alternatives or prerequisites are mentioned despite nearby meter-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ownersList OwnersA
Read-onlyIdempotent
Inspect

List property owners and the ownership map — who owns what, and what %.

Use for "who are the owners / investors", "who owns and what percentage", "which parks does have a stake in", or any ownership-breakdown question — essential for third-party / fee-managed portfolios where each property is held by multiple investor trusts/IRAs. Built on RM's OwnerList report (113) + the /Owners roster. Filter by owner_filter / property_filter (case-insensitive substrings); group_by is "owner" (default) or "property".

Note: owner DISTRIBUTION/payment and owner-STATEMENT reports require an RM user privilege the API account may not hold (owner-banking) — those are not exposed here. This tool covers the ownership roster and percentages.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_byNoowner
owner_filterNo
property_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuine value beyond that: it discloses the underlying data source (RM OwnerList report 113 + /Owners roster), the privilege limitation of the API account, filter matching behavior (case-insensitive substrings), and the group_by options. Missing only return-shape/pagination details, which the output schema partly covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then use cases, then mechanics, then caveats — a logical flow. It is somewhat dense but nearly every clause (filters, group_by, privilege caveat, backing report) earns its place, so no major trimming is warranted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values needn't be described, and the description covers purpose, triggers, parameters, data provenance, and access caveats. It is essentially complete for an agent to call the tool correctly, with only minor gaps around output detail that the schema supplies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it does: it explains that owner_filter/property_filter are case-insensitive substrings and that group_by takes 'owner' (default) or 'property'. This meaningfully documents all three parameters despite the schema being bare, though it stops short of format examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List property owners and the ownership map — who owns what, and what %'), which is unambiguous and cannot be confused with any sibling tool, none of which address ownership. The scope is precise and immediately readable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides multiple explicit trigger phrasings ('who are the owners / investors', 'who owns <park> and what percentage', 'which parks does <owner> have a stake in') and frames the context where it matters most (third-party/fee-managed portfolios). It also delineates what it does NOT cover (owner distribution/payment and statement reports requiring the owner-banking privilege), giving a clear when-not boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_portfoliosList PortfoliosB
Read-onlyIdempotent
Inspect

Show named portfolios + auto-detected dash-prefix portfolios.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered structurally. The description does add one genuinely useful behavioral fact beyond the annotations: results include auto-detected dash-prefix portfolios, not just explicitly named ones. It says nothing about scope, permissions, or ordering, so it stays at 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the primary content ('named portfolios') front-loaded and the secondary category appended. Nothing is wasted, though the terse '+' phrasing reads more like a note than a description and leaves 'dash-prefix' unexplained.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list tool with a full output schema and safety annotations, little prose is required, so the description is close to adequate. However, the unexplained 'dash-prefix' concept and the absence of any routing guidance against the many sibling list_* tools leave gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics for the description to clarify; the baseline for a no-param tool is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (portfolios) and even scopes it to two distinct categories: named portfolios and auto-detected dash-prefix portfolios. That distinguishes it from siblings like list_properties or list_owners, though it never explicitly names an alternative, and the weak verb 'Show' plus the undefined term 'dash-prefix' keep it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of when another listing tool (e.g. list_properties, list_property_groups) would be preferred. Usage is only implied by the verb 'Show'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_propertiesList PropertiesA
Read-onlyIdempotent
Inspect

List all properties with IDs, short names, and full names.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered. The description adds the return shape (IDs, short names, full names), which is useful but modest additional context; it says nothing about pagination or result size despite an open-world listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; every clause earns its place by naming the resource and the returned fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool with full annotation coverage and an output schema present, the description is nearly complete. The only gaps are pagination/result-size behavior and any relationship to sibling listing tools, which are minor given the structured data supplied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema is empty, so there is nothing for the description to disambiguate. Baseline 4 applies: the description correctly implies an unfiltered, no-argument listing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('properties') and even names the fields returned (IDs, short names, full names). It is clearly distinguishable from action-oriented siblings like analyze_* or get_property_udfs, though it does not explicitly differentiate itself from near-neighbors such as list_property_groups or list_portfolios.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. With dozens of list_* siblings (list_owners, list_portfolios, list_property_groups, list_property_units), an agent gets no help on scope or ordering constraints; the 'list everything' semantics must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_property_groupsList Property GroupsA
Read-onlyIdempotent
Inspect

List the Property Groups saved inside Rent Manager (Properties → Property Groups), with each group's member properties.

These are RM-native, user-created groups — distinct from the dash-prefix portfolios returned by list_portfolios. Pass embeds="" to skip resolving member properties for a faster, names-only listing.

ParametersJSON Schema
NameRequiredDescriptionDefault
embedsNoProperties

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. The description adds a real behavioral trade-off beyond that: the default resolves member properties while embeds="" skips that resolution for a faster, names-only listing. It doesn't mention pagination or result limits, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: identity/location first, sibling disambiguation second, performance option last. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value explanation is correctly omitted. For a single-optional-parameter read tool, the description covers what it lists, how it differs from the nearest sibling, and the one meaningful parameter behavior. Only the full set of valid 'embeds' values is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the single 'embeds' parameter has no description, so the description must carry the meaning — and it does, explaining that embeds="" skips member resolution and implying the default populates members. It doesn't enumerate other accepted values or confirm the exact default string, leaving a small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the Property Groups saved inside Rent Manager'), gives the UI location for grounding, and explicitly distinguishes the result set from the sibling tool list_portfolios. An agent can pick this over list_portfolios without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when this tool is the right choice versus the alternative ('distinct from the dash-prefix portfolios returned by list_portfolios'), and gives a concrete condition for the faster path (embeds="" for names-only). It stops short of stating when NOT to use the tool or any prerequisite/connection requirements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_property_unitsList Property UnitsB
Read-onlyIdempotent
Inspect

List all units (lots/spaces) in a property with UnitID and Name.

ParametersJSON Schema
NameRequiredDescriptionDefault
shortnameNo
property_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds only that each unit carries UnitID and Name, which is largely duplicated by the existing output schema, so net added context is thin. No pagination, volume, or scope caveats are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, and the key scope constraint ('in a property') appears early. It is perhaps over-terse for the ambiguity it leaves behind, but structurally it earns its words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema means return values need not be explained, so restating UnitID/Name is not required. However, for a two-parameter tool where neither parameter is required and neither is documented, the description leaves the caller guessing how to scope the query, which is a real completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only gestures at 'in a property' without naming property_id and never explains shortname. With both parameters defaulting (property_id=0, shortname=''), an agent cannot tell which one to supply or what happens when both are empty.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (units/lots/spaces) scoped to a property, which is enough to separate it from list_properties. It clarifies that units are the units within a property rather than properties themselves, but does not explicitly name a sibling to differentiate against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this over list_properties or the unit-level get_unit_* tools, and no precondition stated (e.g. that a property_id is required to get meaningful results even though the schema has no required parameters). Usage must be inferred entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_prospectsList ProspectsC
Read-onlyIdempotent
Inspect

List prospects (leads) for a property or portfolio.

status: 'Prospect' | 'Customer' | 'Lost' | 'All' (default).

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoAll
portfolioNo
shortnameNo
property_idNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the status enumeration values ('Prospect' | 'Customer' | 'Lost' | 'All'), which is real, non-redundant context, but says nothing about result volume, pagination, or scoping behavior across the four selector parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence is short and front-loaded, but the trailing 'status:' fragment is structurally detached and reads like schema prose pasted into the description rather than an integrated part of the tool's documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With five loosely typed selector parameters, no required fields, and 0% schema coverage, the description would need to explain how to target a single property versus a portfolio versus multiple properties. It covers only status; an output schema exists, so return values need not be described, but the input ambiguity is unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, yet it explains only one of five parameters. The status enum values are a genuine addition the schema lacks, but portfolio, shortname, property_id, and property_ids are left entirely undefined, including how the single-id and multi-id forms relate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource ('List prospects (leads)') and the scoping dimension ('for a property or portfolio'). It does not distinguish itself from nearby siblings such as get_prospect, analyze_prospect_pipeline, or analyze_lost_prospects, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no statement of when an alternative like get_prospect (single prospect) or the pipeline analysis tools is preferable, and no prerequisites. Only the status default is mentioned, which is parameter documentation rather than usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_reportsList ReportsA
Read-onlyIdempotent
Inspect

List all available Rent Manager reports with their IDs and names.

Reads from the per-tenant catalog snapshot when present (instant). Pass live=True to bypass the catalog and hit the live RM API — use that after RM admins add new ReportWriter reports.

ParametersJSON Schema
NameRequiredDescriptionDefault
liveNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds genuinely new behavior: a per-tenant catalog snapshot cache with instant reads versus a live RM API call that can be forced via live=True. That latency/caching distinction is not derivable from any structured field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, and the core purpose plus returned fields are front-loaded before the caching detail and the live override. Every sentence adds information an agent needs to call the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return format needn't be described, and the catalog/live split is fully covered. The remaining gap is the downstream relationship to run_report — the description implies IDs are the payload but never says these IDs feed run_report, which is the primary reason an agent would call this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter has no description of its own, so the description carries the full burden and does: live=True bypasses the catalog and hits the live RM API, live=False/default reads the snapshot. The semantics and the trade-off are both explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all available Rent Manager reports') plus the returned fields (IDs and names), which cleanly separates it from run_report (executes a report) and refresh_reports_catalog (updates the catalog). An agent can pick this out of a sibling list dominated by analyze_* and get_* tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to set live=True: after RM admins add new ReportWriter reports, because the default path reads a cached catalog snapshot. What's missing is an explicit routing statement to the named alternatives (run_report to execute, refresh_reports_catalog to rebuild the snapshot), so the 'when not to use' half is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_rm_connectionsList Rent Manager ConnectionsA
Read-onlyIdempotent
Inspect

List the Rent Manager databases YOU can connect to, and show which one is currently active.

Use this when the user has more than one Rent Manager database (e.g. a consultant or owner managing several companies) and asks "which databases can I see?" or before switching. Returns each connection's label, base URL, and RM username, plus the organization default. Manage the list at /auth/account/connection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: it scopes results to the caller's own connections and enumerates the returned fields (label, base URL, RM username, org default). It does not discuss pagination, but with an output schema present and a zero-param read, that gap is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and scope, followed by usage conditions and return fields. The closing pointer to /auth/account/connection is useful but sits slightly outside the invocation path, keeping it just under maximum.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-param, read-only list tool with an output schema and full annotation coverage, nothing an agent needs to call it correctly is missing. The description even pre-summarizes return fields and explains the multi-database context, so it is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to clarify and the baseline of 4 applies. The description instead documents output shape, which is helpful but outside this dimension's core concern.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (Rent Manager databases YOU can connect to), and adds scope plus an active-connection indicator. An agent can distinguish it immediately from switch_rm_connection and the list_* catalog tools without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the trigger conditions ('user has more than one Rent Manager database', asks 'which databases can I see?') and the pre-switch scenario, which routes the agent toward switch_rm_connection. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tenantsList TenantsB
Read-onlyIdempotent
Inspect

List tenants for a property or portfolio.

status filter: 'Current' | 'Past' | 'All'. include_contacts embeds contact records (slower; surfaces primary email/phone).

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoAll
portfolioNo
shortnameNo
property_idNo
property_idsNo
include_contactsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so the safety profile is covered. The description adds genuinely useful behavior: include_contacts is slower and surfaces primary email/phone. It still says nothing about pagination or result volume.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, followed by two tight, information-dense lines on the status enum and the contacts flag. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, but with 0% schema coverage and only two of six parameters addressed, plus no sibling routing, the definition is only adequate for a multi-parameter list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and there are 6 parameters. The description only documents two of them (status with its enum values, and include_contacts), leaving portfolio, shortname, property_id, and property_ids completely undescribed in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List tenants') and scopes it to a property or portfolio. It is distinguishable from single-record siblings like get_tenant and from list_leases, though it never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource, and the note that include_contacts is slower hints at tradeoffs, but there is no explicit when-to-use guidance or exclusion versus get_tenant, get_tenant_ledger, or list_leases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_vendorsList VendorsA
Read-onlyIdempotent
Inspect

List the AP vendor master — who our vendors are, category, 1099 status.

Sourced from /Vendors. Complements analyze_vendor_spend (payment totals) and vendor_compliance (insurance/COI expiry) with the roster: vendor names, categories, whether each has a Tax ID on file (1099-ready), active status. Use for "list our vendors", "which vendors do we have", "vendors in the plumbing category", "which vendors are missing a W-9/Tax ID". Filter by name_filter / category_filter; active_only hides inactive vendors.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNo
name_filterNo
category_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds real value beyond that: the source endpoint (/Vendors) and the semantics of active_only ('hides inactive vendors'). It stops short of describing pagination or sort order, so a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the resource and contents, then provenance, then sibling differentiation, then use cases, then filters. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value explanation is unnecessary, and the description covers scope, source, sibling boundaries, and filters. The only gap is filter matching behavior, which is minor given the otherwise complete coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the burden, and it does name all three params semantically and note active_only's hide behavior. However it never clarifies matching semantics for name_filter/category_filter (substring vs exact, case sensitivity), leaving real ambiguity for two of three params.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (list the AP vendor master) and enumerates the payload: vendor names, categories, Tax ID/1099 readiness, active status. It explicitly contrasts itself with analyze_vendor_spend and vendor_compliance, so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the sibling tools it complements and their differing scopes (payment totals, COI expiry), then gives concrete trigger phrases ('list our vendors', 'vendors in the plumbing category', 'missing a W-9/Tax ID'), covering when to use it and implicitly when not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

make_ready_summaryMake Ready SummaryB
Read-onlyIdempotent
Inspect

Units currently in turnover (Make Ready Summary, report 719).

Per-property count + average/oldest age, stage breakdown, top-N oldest stuck units. Answers: 'how many turnovers in flight', 'what's the oldest stuck unit', 'which turnovers already have a next move-in'.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
portfolioNo
as_of_dateNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description earns credit for disclosing the report's actual content shape (per-property count, average/oldest age, stage breakdown, top-N stuck units), which annotations do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core scope, then a compact inventory of report contents and example questions. No filler, though the trailing quoted-question list is slightly verbose relative to the info it adds.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the annotations cover the safety profile. However, with four entirely undocumented parameters and no guidance on filtering scope, an agent lacks enough to call it precisely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and all four parameters (top_n, portfolio, as_of_date, property_ids) carry only titles and defaults. The description hints at top_n via 'top-N oldest stuck units' but says nothing about portfolio, as_of_date, or property_ids, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope ('Units currently in turnover') and pins it to a concrete artifact (Make Ready Summary, report 719), then enumerates the report's contents. It is clear what the tool produces, though it never explicitly contrasts itself with siblings like analyze_move_ins_outs or run_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The quoted example questions ('how many turnovers in flight', 'what's the oldest stuck unit', 'which turnovers already have a next move-in') imply when the tool fits, but there is no explicit when-not-to-use or alternative routing among the many analyze_*/run_report siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_ins_outsMove-Ins and Move-OutsC
Read-onlyIdempotent
Inspect

Tenants who moved in or moved out in a YYYY-MM-DD date window.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
portfolioNo
shortnameNo
start_dateYes
property_idNo
property_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a safe read (readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true), so the safety profile is covered. The description adds only the date-window scoping, which is essentially restated from the required parameters, and says nothing about result volume, pagination, or how move-ins and move-outs are separated in the output. With annotations doing most of the work, this is below the bar for added behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single efficient sentence with no filler and the scope is front-loaded. It is appropriately sized, though its brevity comes at the cost of completeness rather than being lean by design.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values legitimately need not be described. But with six parameters at 0% schema coverage and a near-duplicate sibling (analyze_move_ins_outs) competing for the same request, the description omits the two things the agent most needs: parameter meaning and sibling differentiation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across six parameters. The description clarifies only the date window (start_date/end_date), leaving portfolio, shortname, property_id, and property_ids — several with default empty/zero values that imply optional filtering — completely undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete resource and scope — tenants who moved in or out within a YYYY-MM-DD window — which is more specific than a tautology. However, it fails to distinguish this tool from its near-identical sibling analyze_move_ins_outs, leaving the agent guessing whether this is a raw listing or an analysis. The verb is also absent (no 'list'/'get'), so the operation type is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no exclusions, and no mention of alternatives. Crucially, the sibling analyze_move_ins_outs is not referenced, so the agent has no basis for routing between two tools with effectively the same subject matter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_reports_catalogRefresh Reports CatalogA
Idempotent
Inspect

Snapshot live /Reports + /ReportWriterReports into the per-tenant catalog file. Returns a diff (added / removed / renamed) vs the prior snapshot. Run after RM admins add or rename reports.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write/idempotent/non-destructive/open-world profile, so the bar is lower. The description adds real context beyond them: it snapshots into a per-tenant catalog file and returns a diff (added/removed/renamed) against the prior snapshot, which is meaningful behavioral disclosure for a mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and followed by the return behavior and the trigger condition. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the return value need not be documented, and the description nonetheless characterizes the diff. For a zero-parameter tool the definition is essentially complete, though it omits any note on required permissions or scope of the catalog write.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the baseline is 4. Schema coverage is 100% and there is nothing for the description to clarify about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Snapshot) and precise resources (/Reports + /ReportWriterReports) and the destination (per-tenant catalog file). This clearly distinguishes it from list_reports (reads the catalog) and run_report (executes a report).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: 'Run after RM admins add or rename reports.' It establishes clear context for invocation but names no alternative tool and offers no when-not-to-use condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_reportRun ReportA
Read-onlyIdempotent
Inspect

Download any Rent Manager report.

Format selection rules — IMPORTANT: • PDF is the default for downloads. If the user says "download the report", "send me the report", "give me a copy of X", "I want X for my records", or any similar phrasing without naming a format → leave format unset (defaults to pdf). • For ANY Excel-related request, use xls (NOT xlsx). This includes: "Excel file", "spreadsheet", "in Excel", ".xls", "Microsoft Excel", "give me an XLS", "Excel version", and any similar phrasing. Rent Manager renders xls with much nicer formatting (column widths, headers, group totals) than xlsx, so xls is the preferred Excel format for this product. • Only use xlsx when the user explicitly types "xlsx" — e.g. "download the P&L as xlsx" or "give me the .xlsx file". Any other Excel phrasing → xls. • csv (or json / txt / html / xml) only when the user wants to see the data in chat — those small text formats are inlined into the response so the model can read them directly. Phrasings like "show me", "display", "what's in X", "summarize X" → csv.

Available formats: pdf (default), xls, xlsx, excel (alias → xls), spreadsheet (alias → xls), csv, json, txt, html, xml.

Output behavior by format: • csv / json / txt / html / xml — small files (≤1 MiB) are ALSO inlined in the response so the model can read the contents directly. • pdf / xlsx / xls — saved to the per-tenant file store and returned as a signed /files/<id>?sig=... URL the user can click directly in chat.

For analytical questions prefer the analyze_* wrappers — they're faster and return computed answers directly. For any P&L / Profit and Loss / T12 request use analyze_pl_trend (12-month recap report, the default P&L view).

Custom ReportWriter reports: set report_writer=True to download a custom report from RM's ReportWriter (the IDs shown as kind "rw" in list_reports(live=True)). These live in a separate ID namespace that collides with the canned reports, so the flag is required to disambiguate. They carry their own saved filters and run portfolio-wide; pass any ad-hoc parameters via extra_params. (The start_date/end_date/ property_id/portfolio scoping args do NOT apply to ReportWriter reports.)

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNopdf
combinedNo
end_dateNo
portfolioNo
report_idNo
start_dateNo
property_idNo
report_nameNo
extra_paramsNo
property_idsNo
report_writerNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: output behavior differs by format (small text formats inlined vs pdf/xls/xlsx saved to file store and returned as signed URLs), and the ReportWriter flag lives in a colliding ID namespace that requires disambiguation. These are exactly the behavioral facts an agent could not infer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with a one-line purpose, then well-organized bulleted sections. It is long, but the format-ambiguity rules earn their space; a few format-rule restatements could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by explaining return behavior per format. For an 11-param, 0%-coverage tool it covers the highest-risk decisions well, but under-documents the remaining scoping params (combined, property_ids, report_name).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It fully explains format values and aliases, report_writer, and extra_params, and warns that start_date/end_date/property_id/portfolio do NOT apply to ReportWriter. However, it never explains combined, property_ids, report_name, or report_id outside the RW context, leaving several of the 11 params undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Download any Rent Manager report') and explicitly differentiates itself from the many analyze_* siblings by routing analytical/P&L questions to analyze_pl_trend and the analyze_* wrappers. An agent can tell what this does and what it is not for without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use rules (download vs in-chat viewing), names alternatives (analyze_* wrappers, analyze_pl_trend for P&L/T12), and provides detailed format-decision rules including the crucial xls-vs-xlsx distinction. Leaves little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

switch_rm_connectionSwitch Rent Manager ConnectionA
Idempotent
Inspect

Switch which Rent Manager database your questions run against.

Pass the connection's label (e.g. "Texas") as shown by list_rm_connections, or "org default" to go back to the organization connection. The change persists for your account and takes effect on your next question. Note: it affects every AI client you've connected, not just this chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (non-destructive, idempotent). The description goes beyond them by disclosing that the change persists for the account, takes effect on the next question, and affects every connected AI client — valuable scope and timing context an agent could not infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose in the first sentence, then adds only relevant operational details. Appropriately sized with no wasted sentences, though the line-broken formatting is slightly less compact than it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described. For a single-parameter state-changing tool the description covers purpose, parameter semantics, persistence, and cross-client scope — essentially complete, missing only explicit auth or error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load — and it does, explaining the label parameter with a concrete example ("Texas"), the source of valid values (list_rm_connections), and the special 'org default' value. Minor gap: no note on matching or case sensitivity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Switch which Rent Manager database your questions run against.' This is unmistakably distinct from the many analyze_*/get_*/list_* siblings and instantly identifies it as the connection-switching tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for use — pass a connection label or 'org default' to revert — and routes the agent to the sibling list_rm_connections for valid label values. It lacks an explicit when-not-to-use or prerequisite statement, but the operating condition is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trial_balanceTrial BalanceA
Read-onlyIdempotent
Inspect

Trial balance — every GL account's debit/credit activity and ending balance.

Runs RM's TrialBalanceActivity (report 617) with a built-in balance check (total debits = total credits; ending balances sum to ~0 for a full scope). Use for "show the trial balance", "ending balance per GL account", "are the books in balance / do debits equal credits". Scopes via PropOwnerIDs (portfolio or property_ids). Defaults to YTD; override with start_date/ end_date (MM/DD/YYYY). Filter with account_filter; nonzero_only hides no-activity zero-balance accounts. Pairs with list_gl_accounts. For transaction-level GL detail, download report 51 (GeneralLedger) via run_report.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
portfolioNo
start_dateNo
nonzero_onlyNo
property_idsNo
account_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower. The description still adds real behavior: it runs a specific activity with a built-in balance check (debits = credits, ending balances ~0) and discloses defaults for date range and nonzero_only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core definition and the balance-check behavior, then usage phrases, then scope/date/filter mechanics, then alternatives. Dense but every sentence adds operational information; slightly packed rather than wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a report-style read tool with an output schema already present, the description supplies everything else an agent needs: purpose, scope, default range, override format, filtering, and the alternative tool for related data. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden and largely does: it explains PropOwnerIDs scoping, start_date/end_date format (MM/DD/YYYY), account_filter, and what nonzero_only hides. It does not clarify precedence when both portfolio and property_ids are supplied, a minor residual gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: every GL account's debit/credit activity and ending balance, plus the underlying report (TrialBalanceActivity, report 617). It explicitly routes adjacent needs to siblings (list_gl_accounts for accounts, run_report 51 for transaction-level GL detail), so it is distinguishable without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger phrases ('show the trial balance', 'are the books in balance'), states scope mechanics (PropOwnerIDs / portfolio or property_ids), default range (YTD) with override, and names the alternative tool for transaction-level detail. When-to-use and when-to-use-something-else are both explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unit_marketing_statusUnit Marketing StatusC
Read-onlyIdempotent
Inspect

Per-unit marketing/occupancy status for a property.

ParametersJSON Schema
NameRequiredDescriptionDefault
shortnameNo
property_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered. The description adds nothing beyond that: no indication of what is returned, whether results are scoped per property or per unit, or what happens with the default empty shortname/property_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with no filler, so nothing needs trimming. Conciseness is achieved, but partly through under-specification rather than efficient precision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers return values, so the description needn't explain them. But with two undocumented, defaulted parameters and zero usage guidance in a crowded sibling space, the description is not complete enough for an agent to invoke the tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions the two parameters (shortname and property_id), so both remain undocumented. The phrase 'for a property' faintly hints at a property selector, but it does not explain shortname, its empty-string default, or how the two identifiers interact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource ('per-unit marketing/occupancy status for a property'), which is more specific than a bare title restatement. However, it uses no verb ('get/retrieve') and does not distinguish itself from nearby siblings like analyze_occupancy_trend, analyze_vacancy, or analyze_availability, all of which plausibly cover occupancy status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus the many occupancy/marketing siblings, no prerequisites, and no exclusions. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vendor_complianceVendor ComplianceA
Read-onlyIdempotent
Inspect

Vendors with expired or soon-to-expire insurance / workers-comp coverage.

Runs VendorExpirationListing (report 194) and flags every vendor whose general-liability insurance or workers-comp policy is already expired or expires within days_ahead days (default 60). Use for "which vendors have expired insurance", "vendor COI compliance", "whose workers comp is lapsing", before clearing a vendor to work on site. include_missing also lists vendors with no policy date on file.

ParametersJSON Schema
NameRequiredDescriptionDefault
days_aheadNo
name_filterNo
include_missingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive, open-world behavior, so the bar is lower. The description adds real value beyond them: it discloses the underlying report (194), the flagging logic (expired or expiring within days_ahead), and the include_missing side effect of surfacing vendors with no policy date on file.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core outcome in the first sentence, then mechanics and usage. Each sentence earns its place; the formatting is a bit loose but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. Purpose, usage contexts, and two of three parameters are covered; the only material omission is any description of name_filter's matching behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains days_ahead (threshold window, default 60) and include_missing (also lists vendors with no policy date on file), covering two of three parameters. name_filter is never mentioned, leaving one gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line states a specific resource (vendors) and condition (expired or soon-to-expire insurance / workers-comp coverage), and the body names the exact report (VendorExpirationListing, report 194). This clearly separates it from siblings like list_vendors or analyze_vendor_spend.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger scenarios with example queries ('which vendors have expired insurance', 'vendor COI compliance', 'whose workers comp is lapsing') and a concrete decision context (before clearing a vendor to work on site). It does not name an alternative tool or state when NOT to use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 82 tool updates
    • First observedanalyze_aged_payables
    • First observedanalyze_aged_receivables
    • First observedanalyze_autopay_adoption
    • First observedanalyze_availability
    • First observedanalyze_balance_sheet
    • First observedanalyze_cash_flow
    • First observedanalyze_delinquency
    • First observedanalyze_evictions
    • First observedanalyze_financials
    • First observedanalyze_home_sales
    • First observedanalyze_inspections
    • First observedanalyze_loss_to_lease
    • First observedanalyze_lost_prospects
    • First observedanalyze_move_ins_outs
    • First observedanalyze_noi
    • First observedanalyze_occupancy_trend
    • First observedanalyze_payment_trends
    • First observedanalyze_pl_multi_year
    • First observedanalyze_pl_trend
    • First observedanalyze_pl_yoy
    • First observedanalyze_prospect_pipeline
    • First observedanalyze_renewals
    • First observedanalyze_rent_composition
    • First observedanalyze_rent_roll
    • First observedanalyze_security_deposits
    • First observedanalyze_service_issues
    • First observedanalyze_user_activity
    • First observedanalyze_vacancy
    • First observedanalyze_vendor_spend
    • First observedanalyze_water_consumption
    • First observeddownload_attachment
    • First observeddownload_invoices
    • First observeddownload_property_attachment
    • First observeddownload_property_tax_bill
    • First observeddownload_unit_attachment
    • First observeddump_all_rate_cards
    • First observedget_bills
    • First observedget_check_attachments
    • First observedget_credit_card_attachments
    • First observedget_journal_attachments
    • First observedget_lease_violations
    • First observedget_marketing_udfs
    • First observedget_meter_rate_card
    • First observedget_meter_reads
    • First observedget_property_home_inventory
    • First observedget_property_locations
    • First observedget_property_udfs
    • First observedget_prospect
    • First observedget_resident_concerns
    • First observedget_tenant
    • First observedget_tenant_ledger
    • First observedget_tenant_notes
    • First observedget_tenant_udfs
    • First observedget_unit_images
    • First observedget_unit_udfs
    • First observedget_vacant_unit_images
    • First observedget_work_orders
    • First observedinspect_property_api
    • First observedlead_source_summary
    • First observedlease_expirations
    • First observedlist_credit_cards
    • First observedlist_gl_accounts
    • First observedlist_leases
    • First observedlist_meter_types
    • First observedlist_owners
    • First observedlist_portfolios
    • First observedlist_properties
    • First observedlist_property_groups
    • First observedlist_property_units
    • First observedlist_prospects
    • First observedlist_reports
    • First observedlist_rm_connections
    • First observedlist_tenants
    • First observedlist_vendors
    • First observedmake_ready_summary
    • First observedmove_ins_outs
    • First observedrefresh_reports_catalog
    • First observedrun_report
    • First observedswitch_rm_connection
    • First observedtrial_balance
    • First observedunit_marketing_status
    • First observedvendor_compliance

Publisher details

Operator
Not available
Vendor relationship
Not available
Trust center
Not available
Restrictions
Not available

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables interaction with Appfolio Property Manager through the Reporting API, allowing property management tasks and data retrieval via natural language commands.
    47
    10 npm
    10
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to operate property management systems via natural language, covering repair orders, owner info, payments, notices, and inspections. Features a full agentic workflow with human-in-the-loop and observability.
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    Enables interaction with Buildium property management software through natural language, supporting operations on associations, leases, rentals, tenants, and more.
    81
    7
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides Claude and any MCP client with live access to property management data, enabling operations on properties, units, leases, tenants, work orders, vendors, accounting, and file attachments through natural language.
    25
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources