Skip to main content
Glama
vikranthviki

Causal Decision Agent

by vikranthviki

Causal Decision Agent

CI Python Version License: MIT Code Style: Black

An AI decision-analysis agent that takes a business question, connects it to experiment and metric data, investigates using statistical tools, and produces an evidence-backed decision (rollout | hold | investigate) with a reproducible audit trace.


πŸ›οΈ Project Architecture & Layout

CausalAI/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ stat_runtime/              # Pure statistical execution engine (Numbers only, no verdicts)
β”‚   β”‚   β”œβ”€β”€ data/
β”‚   β”‚   β”‚   β”œβ”€β”€ schema.py          # Data profiles & column metadata
β”‚   β”‚   β”‚   └── profiling.py       # Data-type detection & variable association profiling
β”‚   β”‚   β”œβ”€β”€ experiment/
β”‚   β”‚   β”‚   β”œβ”€β”€ srm.py             # Sample Ratio Mismatch (SRM) Chi-Square test
β”‚   β”‚   β”‚   β”œβ”€β”€ balance.py         # Standardized Mean Difference (SMD) covariate balance
β”‚   β”‚   β”‚   β”œβ”€β”€ ab_test.py         # Welch's t-test A/B estimation with robust CIs
β”‚   β”‚   β”‚   └── cuped.py           # Pre-experiment variance reduction (CUPED)
β”‚   β”‚   β”œβ”€β”€ causal/
β”‚   β”‚   β”‚   β”œβ”€β”€ did.py             # Difference-in-Differences (DiD) regression
β”‚   β”‚   β”‚   β”œβ”€β”€ dml.py             # Double Machine Learning (Chernozhukov et al.)
β”‚   β”‚   β”‚   └── refutation.py      # Placebo treatment & bootstrap stability refuters
β”‚   β”‚   β”œβ”€β”€ metrics/
β”‚   β”‚   β”‚   └── definitions.py     # Aggregations, windows, and guardrail definitions
β”‚   β”‚   └── provenance/
β”‚   β”‚       └── artifact.py        # Reproducible execution & audit trace capture
β”‚   β”‚
β”‚   └── causal_agent/              # Agent logic, decision layer, and protocol interfaces
β”‚       β”œβ”€β”€ data/
β”‚       β”‚   β”œβ”€β”€ base.py            # DataSource abstract interface
β”‚       β”‚   └── duckdb_source.py   # DuckDB canonical schema implementation
β”‚       β”œβ”€β”€ evidence/
β”‚       β”‚   └── state.py           # EvidenceState (findings, warnings, unresolved, estimates)
β”‚       β”œβ”€β”€ decision/
β”‚       β”‚   └── engine.py          # DecisionEngine (rollout | hold | investigate + guardrail priority)
β”‚       β”œβ”€β”€ planner/
β”‚       β”‚   β”œβ”€β”€ base.py            # AnalysisPlan & AnalysisPlanner interface
β”‚       β”‚   └── deterministic.py   # Rule-based planner batching runtime calls
β”‚       β”œβ”€β”€ eval/
β”‚       β”‚   β”œβ”€β”€ synthetic_data.py  # Canonical benchmark scenarios generator (10 scenarios)
β”‚       β”‚   └── harness.py         # Scoring harness (minimizes false-positive rollouts)
β”‚       └── server/
β”‚           └── mcp_server.py      # Business-level MCP server interface
β”‚
β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ unit/                      # Fast unit tests for statistical routines & engine
β”‚   β”œβ”€β”€ eval/                      # Benchmark evaluation suite
β”‚   └── conftest.py                # Pytest fixtures
β”‚
β”œβ”€β”€ plan.md                        # Master system design & engineering plan
β”œβ”€β”€ pyproject.toml                 # Package configuration & test runners
β”œβ”€β”€ requirements.txt               # Core production dependencies
β”œβ”€β”€ requirements-dev.txt           # Testing & linting dependencies
└── .gitignore                     # Ignore files for Python, DuckDB, and IDEs

Related MCP server: AI Agent Release Assurance MCP

⚑ Core Invariants & Principles

  1. LLM never computes statistics: All numerical computations occur inside stat_runtime.

  2. Tools return measurements, not verdicts: Structured JSON with numbers, p-values, and bounds.

  3. Guardrails take precedence: A statistically significant regression on a guardrail forces HOLD regardless of primary metric lift.

  4. False-Positive Rollout Minimization: The harness explicitly optimizes for 0% false-positive rollouts on corrupted, underpowered, or mismatched experiments.


πŸš€ Getting Started

1. Activate Environment

.\.venv\Scripts\Activate.ps1

2. Run Tests

.\.venv\Scripts\pytest

3. Run Benchmark Harness

.\.venv\Scripts\python -m pytest tests/eval/test_eval_scenarios.py -s

🀝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for development guidelines, testing instructions, and pull request workflow.

Please also review our Code of Conduct.


πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

Available Tools

548 tools
absorb_olsB
Read-only

OLS with absorbed high-dimensional fixed effects (reghdfe-style).

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesRegressors *excluding* the absorbed FEs and the constant (the constant is absorbed by any FE dimension).
yYesOutcome variable column name or outcome array.
feYesFixed-effect columns.
tolNoDemean convergence controls.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
slopesNoslopes parameter (Optional[Sequence[SlopeSpec]]).
solverNoWithin-transformation backend. See :class:`Absorber`.map
clusterNoOne-way or multi-way cluster variables for robust SEs. If provided, returns cluster-robust SEs (one-way: Liang-Zeger sandwich; multi-way: inclusion-exclusion Cameron-Gelbach-Miller).
maxiterNoDemean convergence controls.
weightsNoObservation weights.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
drop_singletonsNodrop_singletons parameter (bool).
return_absorberNoIf True, also return the ``Absorber`` object for reuse.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, and the description does not contradict them. The reghdfe-style reference adds minimal algorithmic identity (within-transformation/demeaning), but the description itself discloses little beyond what the annotations and schema already 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?

Eight words with zero padding, and the core method is front-loaded in the first clause. It is efficient, though it leaves spare capacity that could have held a one-line usage hint without bloat.

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 and exhaustive parameter documentation cover return values and arguments, so those gaps are closed. The main missing piece is selection context among the roughly 70 siblings, which matters for a complex 17-parameter estimation 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 description coverage is 100% and the schema is exceptionally rich, covering token budgets for detail, SE formulas for cluster, solver backends, and chaining via as_handle/result_id. The description contributes no parameter-level meaning, so the schema-carrying baseline of 3 applies.

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: OLS with absorbed high-dimensional fixed effects, anchored by the well-known 'reghdfe-style' reference. It is clear what the tool computes, but it does not explicitly differentiate itself from close siblings like hdfe_ols, feols, or demean.

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 is given on when to use absorb_ols versus alternatives such as regress, hdfe_ols, feols, feglm, fepois, or ppmlhdfe. There are no exclusions, preconditions, or context cues beyond the name itself, leaving tool selection to inference.

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

adjust_pvaluesB
Read-only

Adjust p-values for multiple comparisons. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoAdjustment method. One of: - ``'bonferroni'`` -- Bonferroni correction. - ``'holm'`` -- Holm (1979) step-down. - ``'bh'`` or ``'fdr'`` -- Benjamini-Hochberg FDR. For Romano-Wolf or Westfall-Young adjustments (which require the original data and bootstrap), use :func:`romano_wolf` directly.holm
pvaluesYesUnadjusted p-values.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

The readOnlyHint annotation already covers the safety profile. The description adds only a cryptic 'Validation: certified parity evidence' quality claim, which hints at trustworthiness but does not describe output behavior, edge cases, or handling of invalid inputs. No contradiction with 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?

Two short sentences with the core purpose front-loaded. The validation sentence is concise, though its jargon ('certified parity evidence') is under-specified; overall there is no padding.

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 and detailed parameter schema cover return values and most invocation details. Still, with eight parameters and several method-specific siblings, the description would benefit from orienting the agent on when to call this generic tool rather than bonferroni/holm/romano_wolf, and from clarifying the expected pvalues format.

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 100%, so the baseline applies. The description adds no parameter-specific meaning; the method field's schema text already enumerates accepted methods and points to romano_wolf where appropriate.

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 operation ('adjust p-values') and the context ('multiple comparisons'), so an agent can tell what the tool does. It does not, however, differentiate this generic adjustment tool from method-specific siblings like bonferroni, holm, or benjamini_hochberg.

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 appears in the description. It does not mention that method-specific corrections exist or that romano_wolf is the right tool for resampling-based methods; the method parameter schema supplies some of this, but the tool description itself offers no routing.

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

aftB
Read-only

Fit an Accelerated Failure Time model by MLE. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
familyNofamily parameter (AFTFamily).weibull
formulaYes``"duration + event ~ x1 + x2"``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds a cryptic 'Validation: certified parity evidence' note but does not explain what it means or what behaviors to expect beyond fitting. No contradiction with annotations is present.

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 short and front-loaded with the core purpose. The 'Validation: certified parity evidence' sentence is somewhat vague but still adds a distinct behavioral claim without bloating the text.

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 presence of an output schema and a fully documented input schema reduce the burden on the description. However, the description omits usage context, such as when AFT is preferable to similar survival models, leaving the agent to infer tool selection.

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 100%, and the parameter descriptions themselves are detailed. The tool description does not add parameter semantics beyond the schema, but with full schema coverage the baseline of 3 is appropriate.

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: 'Fit an Accelerated Failure Time model by MLE.' This clearly identifies the tool's purpose and method. It does not explicitly distinguish AFT from close survival-model siblings such as survreg or cox, which costs a point.

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 about when to use this tool versus alternatives. Although many sibling tools include survival models and related diagnostics, the description never mentions when AFT is appropriate or when to prefer another tool. This leaves the agent without routing context.

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

aggteA
Read-only

Aggregate Callaway-Sant'Anna group-time ATTs into interpretable summaries -- overall ATT, event-study by relative time, group-specific ATT(g), or calendar-time ATT(t). Inference uses the multiplier bootstrap on the pre-stored influence functions, so SEs are correct under clustering at the unit level. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Same identifying assumptions as the source estimator (parallel trends, no anticipation, SUTVA); For dynamic aggregation: balanced panel within the requested event-time window (use balance_e). Pre-conditions: result was produced by sp.callaway_santanna or sp.did with staggered=True; result.detail contains the per-(g, t) ATT estimates and their influence functions. Failure modes: result.detail is empty or missing influence functions -> Re-run sp.callaway_santanna; aggte requires the per-(g,t) influence functions; Empty event-time aggregation (no overlapping cohorts) -> Widen the (min_e, max_e) window or drop balance_e. Alternatives: sp.callaway_santanna, sp.sun_abraham, sp.did_imputation. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoAggregation typesimple
alphaNoSignificance level for confidence intervals and tests.
cbandNoUniform confidence band
max_eNomax_e parameter (float).
min_eNomin_e parameter (float).
na_rmNoDrop ATT(g,t) cells with missing / infinite SE before aggregating
bstrapNobstrap parameter (bool).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
resultYesOutput of sp.callaway_santanna or sp.did with staggered=True
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
balance_eNoFor dynamic: cap event time at +/-balance_e for balanced panel
boot_typeNoBootstrap variantmultiplier
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the multiplier bootstrap inference, unit-level clustering behavior, dynamic-balancing requirement, and failure modes involving missing influence functions. There is no contradiction with the read-only annotation.

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 core purpose, then organized into clearly labeled sections: assumptions, preconditions, failure modes, alternatives, and typical minimum N. It is dense but well-structured, with each section adding actionable 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 complex 18-parameter tool with an output schema, this description supplies the missing context an agent needs: assumptions, valid inputs, likely failure modes, alternatives, and an operating constraint. Nothing essential for correct invocation 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 coverage is 100%, so the schema already documents every parameter. The description adds operational meaning beyond the schema by explaining what result.detail must contain, when balance_e is needed, and how min_e/max_e relate to empty event-time aggregation.

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 opens with a specific verb and resource: 'Aggregate Callaway-Sant'Anna group-time ATTs into interpretable summaries' and enumerates the four aggregation modes. It also names alternatives, so the tool is distinguishable from source estimators like sp.callaway_santanna.

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 preconditions: the result must come from sp.callaway_santanna or sp.did with staggered=True and must contain per-(g,t) influence functions. It also documents failure modes and corrective actions, making when-to-use and alternatives clear.

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

aggte_from_influenceA
Read-only

Aggregate Callaway-Sant'Anna group-time ATTs directly from an influence-function export (DataFrame or file path from sp.influence_functions) -- event-study, group, calendar, or overall summaries with multiplier-bootstrap inference, no refit and no original data required. The post-hoc half of the Stata csdid saverif() workflow. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Pre-conditions: source was produced by sp.influence_functions. Failure modes: influence frame is missing required columns -> Re-export with sp.influence_functions(result, path). Alternatives: sp.aggte, sp.influence_functions. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoAggregation typesimple
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
sourceYesFrame from sp.influence_functions, or path to one (.parquet or CSV)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The readOnlyHint annotation already signals a safe read operation; the description adds valuable context beyond that: it states no refit occurs, no original data is needed, and it lists failure modes and validation tiers. It also explains the workflow linkage to influence_functions, giving the agent a clear mental model of side-effect-free operation. No contradiction with annotations.

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 dense but every sentence earns its place: it front-loads the core action, then adds pre-conditions, failure modes, alternatives, and a typical N in a compact, scannable format. There is no filler or redundant restating of the tool name. The structure uses clear separators (periods, hyphens) that aid parsing.

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?

Given the tool's complexity, the description covers the essential context: pre-conditions, failure modes, alternatives, and typical sample size. An output schema exists, so return-value details are not needed. It leaves out explicit pagination or caching behavior, but the as_handle parameter description in the schema covers that, and the annotation covers safety. Overall, it is sufficiently complete for an agent to call it correctly.

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?

The input schema has 100% description coverage for all parameters, including the 'type' enum and 'source' format details. The description mentions the summary types and the source provenance, but this largely mirrors schema content. It does not add deeper semantics about parameter interactions or format specifics beyond what the schema already documents, so it holds at the baseline 3.

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 opens with a specific verb-resource pair ('Aggregate Callaway-Sant'Anna group-time ATTs') and enumerates the exact summary types (event-study, group, calendar, overall) and inference method (multiplier-bootstrap). It names direct siblings (sp.aggte, sp.influence_functions) and distinguishes itself by stating 'no refit and no original data required', making the tool's scope unmistakable.

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 provides explicit pre-conditions ('source was produced by sp.influence_functions'), failure modes ('missing required columns -> Re-export'), and alternatives ('Alternatives: sp.aggte, sp.influence_functions'). It frames itself as 'the post-hoc half of the Stata csdid saverif() workflow', which clearly indicates when to use it. It stops short of an explicit 'do not use when...' clause, but the context strongly implies it.

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

aipwA
Read-only

Augmented inverse-probability weighting (AIPW) -- the canonical doubly-robust ATE estimator. Cross-fits an outcome regression and a propensity model and combines them via the efficient-influence-function formula, so the estimate is consistent if either nuisance is correctly specified (Robins, Rotnitzky & Zhao 1994). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness conditional on covariates (Y(0), Y(1) perp D | X); Overlap / common support: 0 < e(X) < 1 for all X with positive density; SUTVA. Pre-conditions: binary treatment column with both arms present; covariates must contain all confounders for unconfoundedness; no perfect overlap violations (0 < propensity < 1 in support). Failure modes: Propensity scores cluster near 0 or 1 -> Trim to overlap region with sp.trimming() or switch to overlap-weighted ATE; Cross-fit estimate has very wide CI -> Increase n_folds or reduce covariate dimension; check for near-empty propensity strata. Alternatives: sp.ipw, sp.dml, sp.tmle, sp.matching. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
treatYesBinary treatment (0/1)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_foldsNoCross-fitting folds (>= 2)
estimandNoTarget estimandATE
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesConfounders to adjust for
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description richly discloses behavior: cross-fitting, double robustness, formal assumptions (unconfoundedness, overlap, SUTVA), failure modes such as propensity scores near 0/1, and practical remedies like trimming or switching estimands. This gives the agent realistic expectations about when results may be unreliable.

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 dense but well-structured, front-loading the core definition before assumptions, pre-conditions, failure modes, and alternatives. The only mild excess is the generic 'Validation: validated evidence tier' sentence, which contributes little to invocation decisions.

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 13-parameter schema, output schema, and read-only annotation, the description covers everything an agent needs: estimand semantics, assumptions, preconditions, failure-mode handling, and alternatives. An agent can decide whether to call this tool and how to interpret borderline cases without further round-trips.

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 100%, so the baseline is 3, but the description adds meaningful parameter-level context: covariates must contain all confounders, treatment must be binary with both arms present, and overlap must not be badly violated. It also connects n_folds to the failure mode of very wide confidence intervals.

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 identifies AIPW as the canonical doubly-robust ATE estimator and explains its mechanism: cross-fitting an outcome regression and propensity model combined via the efficient-influence-function formula. This clearly distinguishes it from nearby siblings such as ipw, dml, tmle, and matching, and names alternatives explicitly.

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 gives clear usage context through pre-conditions, failure modes, typical minimum N, and an explicit alternatives list (sp.ipw, sp.dml, sp.tmle, sp.matching). It stops short of fully articulating when to prefer AIPW over each alternative, so it is not a complete decision rule, but the guidance is strong.

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

anderson_rubin_ciB
Read-only

Anderson-Rubin confidence set -- re-export of Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
exogNoexog parameter (Optional[Union[np.ndarray, pd.DataFrame, List[str]]]).
endogYesendog parameter (Union[np.ndarray, pd.Series, str]).
levelNoConfidence level or reporting level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_gridNoNumber of grid.
add_constNoadd_const parameter (bool).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
beta_gridNoGrid of beta values to evaluate.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
instrumentsYesinstruments parameter (Union[np.ndarray, pd.DataFrame, List[str]]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so the agent knows this is a read-only computation. The description adds the 're-export of Validation: certified parity evidence' context, which is a useful behavioral note about provenance and reliability. However, it does not disclose what the confidence set is based on, how the grid is used, or what the output contains; the output schema presumably covers the return shape, so a 3 is fair.

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 a single compact sentence that front-loads the core purpose and adds a provenance note. It is not bloated, though it is terse enough that it could have included a bit more functional detail without becoming verbose.

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 tool with 14 parameters, 3 required, and a large sibling list, the description is too thin. It does not explain the statistical context (instrumental variables, weak-instrument robust inference), when the confidence set is appropriate, or how it relates to anderson_rubin_test. The output schema exists, so return values are covered, but the missing usage context is a significant gap.

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 100%, so the schema already documents all 14 parameters. The description adds no parameter-level meaning beyond the schema. Baseline 3 is appropriate because the schema carries the burden and the description does not need to repeat it.

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 statistical object (Anderson-Rubin confidence set) and notes it is a re-export of Validation with certified parity evidence. It does not explicitly say 'computes' or 'constructs', but the name plus 'confidence set' conveys the purpose. It is distinguishable from the sibling anderson_rubin_test, which is a test rather than a confidence set, though the description does not explicitly draw that contrast.

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 such as anderson_rubin_test, liml, or ivreg. The description does not state conditions, exclusions, or prerequisites. The only hint is the name itself, which is not enough for an agent to choose among many IV-related siblings.

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

anderson_rubin_testB
Read-only

Anderson-Rubin (1949) test -- size-correct under weak instruments. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
h0NoNull hypothesis value for the endogenous coefficient.
exogNoIncluded exogenous controls.
vcovNoVariance estimator used for the Olea-Pflueger effective F reported alongside AR.HC1
alphaNoSignificance level.
endogYesEndogenous regressor (single).
absorbNoHigh-dimensional fixed effects to partial out of ``y``, the endogenous regressor, the instruments and the controls before the test -- the same residualisation ``sp.iv(absorb=...)`` performs.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster the AR statistic. Switches from the homoskedastic F-form to the (multiway) cluster-robust quadratic form ``(Z'e)' Omega^-1 (Z'e)`` with ``Omega`` the cluster-sum variance of the moment vector, referred to ``F(k_z, G-1)``. Without this, a panel AR test over-rejects exactly as a homoskedastic t-test
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
instrumentsYesExcluded instruments.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

The description adds that the test is size-correct under weak instruments and claims 'certified parity evidence' for validation, while readOnlyHint=true already covers the absence of side effects. It does not describe the returned statistic or decision rule, but the output schema is available and the safety profile is carried by 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.

Conciseness3/5

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

The text is short and front-loads the main identification ('Anderson-Rubin test ... size-correct under weak instruments'). However, 'Validation: certified parity evidence' is a cryptic fragment that does little to help an agent select or invoke the tool, and the overall description is under-sized relative to the tool's complexity.

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?

Between the detailed schema and the one-line purpose, a knowledgeable agent can assemble the required inputs (data_path, y, endog, instruments) and infer this is a weak-instrument-robust IV test. Missing explicit guidance on when to prefer it over siblings such as 'anderson_rubin_ci' or 'ivreg' leaves clear gaps, but they are not fatal given the schema richness.

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 100%, so all 15 parameters are already documented in the input schema, including details like h0's null hypothesis value and cluster's robust quadratic form. The description itself adds no parameter-level meaning, so it sits at the baseline for schema-covered tools.

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 exact procedure ('Anderson-Rubin (1949) test') and gives a meaningful property ('size-correct under weak instruments'), so an agent can identify it as a weak-instrument-robust IV hypothesis test. It does not explicitly contrast it with the sibling 'anderson_rubin_ci' or other IV estimators, but the core purpose is reasonably clear.

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 'size-correct under weak instruments' is an implicit usage signal: use this test when weak-instrument robustness matters. However, it does not say when not to use it, name alternatives such as 'anderson_rubin_ci' or 'ivreg', or state prerequisites, so the guidance remains implied rather than explicit.

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

arimaB
Read-only

Fit ARIMA(p,d,q) or SARIMAX. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
autoNoIf True, select (p, d, q) by AICc grid search (ignores ``order``).
exogNoExogenous regressors (ARIMAX).
max_dNoBounds for the auto search.
max_pNoBounds for the auto search.
max_qNoBounds for the auto search.
orderNoorder parameter (Tuple[int, int, int]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimation convention. ``'statespace'`` keeps the default exact Kalman/SARIMAX likelihood. ``'css_ml'`` is retained as a compatibility alias for ``'innovations_mle'``. The innovations-MLE path uses statsmodels' stationary/invertible exact-MLE parameterization, matching ``stats::arima(method='ML')`` and tightly converged Stata ``arima`` coefficient conventions for pure ARMA models.statespace
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
seasonal_orderNoseasonal_order parameter (Optional[Tuple[int, int, int, int]]).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations provide readOnlyHint=true and openWorldHint=false, so the description is not burdened with declaring that fitting is a read-only computation. The description adds only the vague phrase 'certified parity evidence,' which does not clarify what is validated or against which reference. No contradiction with annotations exists.

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 description is very short and front-loads the core purpose. However, the second sentence, 'Validation: certified parity evidence,' is cryptic and does not earn its place because it is not actionable or clearly explained.

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 15-parameter fitting tool with auto-search, exog, seasonal_order, method variants, and handle-based caching, the description is thin. The rich schema and output schema compensate for invocation details, but the description alone gives an agent little context about when this tool is the right choice or what 'certified parity evidence' means.

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 100%, so the parameter meanings are already fully documented in the schema. The description adds no parameter semantics beyond hinting at SARIMAX, which maps to the seasonal_order parameter already described. A baseline score of 3 is appropriate.

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 action and resource: 'Fit ARIMA(p,d,q) or SARIMAX.' This is clear and distinguishes the tool from the many non-time-series siblings. However, it does not explicitly contrast with close model-fit siblings like garch or var, so it stops short of full differentiation.

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 alternatives, nor any indication of prerequisites or preferred workflows. The cryptic 'Validation: certified parity evidence' does not help an agent decide when to call arima instead of garch, var, or regress.

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

assumption_auditC
Read-only

Comprehensive assumption audit for any estimated model.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesEstimated model result.
verboseNoPrint summary automatically.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds no behavioral context beyond a vague promise of 'comprehensive' analysis, but it does not contradict annotations. It would be helpful to note that no model mutation occurs, but the annotation already does that implicitly.

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

Conciseness2/5

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

The description is a single sentence with no waste, but it is under-specified for a tool with 9 parameters. It fails to front-load key information such as what an assumption audit actually does, what types of inputs are accepted, or how the output is structured. Conciseness here reads as deficiency, not efficiency.

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?

Given the high complexity (9 parameters, extensive sibling list), the description is incomplete. It does not explain the core function, what 'result' means as an estimated model, or how this tool differs from other audit/diagnostic tools. The existence of an output schema is helpful, but the description still leaves an agent with insufficient understanding to invoke the tool appropriately.

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 100%, so all parameters are documented with types, defaults, and constraints. The description adds no extra semantic meaning beyond the schema, which is acceptable given the baseline. It doesn't, for example, explain the relationship between 'result', 'data_path', and 'result_id', but the schema descriptions cover the basics.

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 clear verb+resource ('audit assumptions') and specifies 'any estimated model,' but it does not differentiate this from many sibling tools like 'audit' or 'diagnose_result.' It is not a tautology but lacks the specificity that would let an agent pick it among alternatives.

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 usage guidance is provided. There is no mention of when to use this tool vs alternatives like 'audit' or 'robustness_report,' nor any exclusions or prerequisites. The description offers no context beyond 'for any estimated model,' which is too broad for an agent to decide correctly.

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

auditA
Read-only

Reviewer-grade audit on a result. Returns the literature checklist (parallel-trends test, honest-DID, Bacon decomposition, placebo, balance, ...) with status per item and the concrete suggest_function to call to fill any missing high-importance check.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoResult handle. Required unless you also pass a fitted result via the result kwarg (programmatic use).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description is consistent with that. The description adds value beyond annotations by specifying the behavioral output shape: a literature checklist with per-item status and a concrete suggested function for missing checks. This is useful context for an agent planning next steps.

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 sentences with no filler. The first sentence states the function and scope, and the second explains the output contract. Every sentence earns its place and the key idea is front-loaded.

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 and rich parameter descriptions, the description does not need to restate parameter or return details. It is adequate but minimal: it lacks workflow context such as 'call after fitting a result' and does not distinguish audit from semantically overlapping siblings, leaving selection among similar tools partially unresolved.

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 100%, and the individual parameter descriptions (detail levels, as_handle caching, data_path formats, result_id, projection, sampling) already carry the semantic load. The description adds no parameter-level detail, but it does not need to compensate because the schema is thorough. Baseline 3 is appropriate.

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 clearly states the tool performs a 'reviewer-grade audit on a result' and enumerates concrete checks (parallel-trends, honest-DID, Bacon decomposition, placebo, balance) plus the output form (status per item, suggested follow-up function). However, it does not explicitly differentiate itself from closely related siblings like audit_result, assumption_audit, diagnose, or robustness_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 phrase 'audit on a result' implies the tool is used after a fitted result exists, and the mention of 'suggest_function to fill any missing high-importance check' hints at a follow-up workflow. But there is no explicit when-to-use guidance, prerequisites, or exclusion of alternatives, and the large sibling list makes this omission more costly.

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

audit_resultA
Read-only

Reviewer-grade audit on a previously-fitted result. Pass the result_id returned by an earlier tool call (with as_handle=true). Returns the same checklist sp.audit() produces -- every robustness check the literature expects for the design, with status='present|missing|run' and concrete suggested_function names for the missing ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idYesHandle returned by an earlier estimator call. Must be in the server result cache (LRU-evicted; refit if missing).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already signal a read-only operation, so the description adds useful behavior beyond that: it returns status values of 'present|missing|run' and suggested_function names for missing checks. It also indicates output scope ('every robustness check the literature expects'), giving the agent a clear expectation of payload content.

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 sentences, front-loaded with the core purpose, followed by the essential input requirement and return behavior. Every clause earns its place; there is no filler or repetition of schema content.

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 rich input schema, output schema, and readOnlyHint annotation, the description covers what the agent needs to invoke the tool correctly: the required handle, how to obtain it, and what the response will contain. The optional parameters are adequately documented in the schema.

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 100%, so the schema already documents all six parameters. The description adds workflow-critical meaning around result_id by instructing that it must come from an earlier call made with as_handle=true, which is not fully obvious from the schema alone.

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 ('audit'), a specific resource ('previously-fitted result'), and the required input ('result_id returned by an earlier tool call'). It distinguishes itself from a plain design audit by emphasizing that it operates on a fitted result and returns the same checklist sp.audit() produces with status flags and suggested functions.

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 an explicit precondition: pass the result_id produced by an earlier tool call with as_handle=true. This tells the agent when the tool can be invoked, though it does not explicitly name alternatives or state when not to use it (e.g., for a design not yet fitted).

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

augsynthA
Read-only

Augmented Synthetic Control with ridge bias correction (Ben-Michael et al. 2021). Validation: certified parity evidence. Do NOT use when: pre-treatment fit from plain sp.synth is already good -- the ridge augmentation mainly buys bias correction for poor fit and adds a tuning parameter to justify; many treated units -- use sp.gsynth or sp.sdid. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect...

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
backendNoComputation backend: native or augsynth/R bridge backendnative
outcomeYesOutcome variable column name or outcome array.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitYestreated_unit parameter (str).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYestreatment_time parameter (int).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses modeling assumptions (SUTVA, no anticipation), preconditions, and failure modes such as large pre-treatment RMSPE and non-extreme placebo estimates. It does not contradict the annotations. The truncated final failure-mode sentence and the unexplained 'certified parity evidence' line prevent 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.

Conciseness3/5

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

The description is organized with labeled sections and is mostly front-loaded, but it runs long and includes unhelpful or redundant content ('Validation: certified parity evidence', and suggesting augsynth within augsynth's own failure mode). It is also cut off mid-sentence at 'the effect...'.

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 complex estimator, the description covers assumptions, preconditions, failure modes, and alternatives; the output schema relieves it from describing return values. Completeness is slightly undercut by the truncated final sentence and the opaque validation line, but the core information an agent needs to call it correctly is present.

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 100%, so the baseline applies; most parameter descriptions are adequate and data_path is detailed. The tool description adds context about data shape (donor pool, pre-treatment window) but does not deepen the meaning of specific params like treated_unit or treatment_time beyond their 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 a specific estimator ('Augmented Synthetic Control with ridge bias correction') with a citation, and contrasts it with plain synth and other panel estimators, so an agent can identify what the tool does. It lacks a direct action verb like 'estimate' or 'fit', and the 'Validation: certified parity evidence' line does not clarify purpose.

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?

The description explicitly gives negative usage conditions ('Do NOT use when: pre-treatment fit ... is already good', 'many treated units') and names alternatives (sp.gsynth, sp.sdid). It also states assumptions and pre-conditions, making it clear when the tool is appropriate.

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

auto_cateA
Read-only

Race several meta-learners and return a scored leaderboard + winner. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness given the covariates; Overlap / positivity across the covariate space; Nuisance functions are estimated consistently; cross-fitting controls overfitting bias. Pre-conditions: Covariates, a treatment indicator, and an outcome for each unit; Enough data to fit flexible nuisance models with sample-splitting / cross-fitting. Failure modes: CATE estimates are unstable or extrapolate beyond the covariate support -> Restrict to the overlap region, increase data, or use a doubly-robust learner (DR-/R-learner). Alternatives: sp.dml, sp.causal_forest, sp.tmle. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column name.
alphaNoSignificance level for both learner confidence intervals and the BLP-beta1 acceptance region used by the selection rule.
scoreNoCurrently only ``'r_loss'`` is implemented. Reserved for future expansion.r_loss
treatYesBinary treatment column name (values in {0, 1}).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_foldsNoNumber of folds used for both the shared nuisance cross-fit and each learner's honest CATE prediction.
learnersNoShort codes of the meta-learners to race. Duplicates are ignored.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
cate_modelNoOverride the default gradient-boosting models used for nuisance and final CATE fitting.
covariatesYesEffect-modifier columns used as features for every nuisance and CATE model.
n_bootstrapNoBootstrap iterations for ATE standard error on non-DR learners (passed through to ``metalearner``).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoSeed for all K-fold splits.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
outcome_modelNoOverride the default gradient-boosting models used for nuisance and final CATE fitting.
propensity_modelNoOverride the default gradient-boosting models used for nuisance and final CATE fitting.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With readOnlyHint=true and openWorldHint=false already provided, the description adds meaningful behavioral context: assumptions, preconditions, failure modes, and the leaderboard+winner output. It does not contradict the annotations, and the extra context about unstable CATE estimates and overlap support is genuinely useful.

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 well structured with labeled sections: purpose, validation, assumptions, preconditions, failure modes, alternatives, and minimum N. It is information-dense but every section earns its place, and the core purpose is front-loaded.

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 18-parameter complexity and the presence of an output schema, the description covers selection-relevant and invocation-relevant context: when it applies, what data it needs, what can go wrong, and how to react. Nothing essential for an agent 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.

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all 18 parameters thoroughly. The description adds only indirect parameter context by naming covariates, treatment, and outcome as preconditions. That meets the baseline but does not go beyond what the schema provides.

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 states a specific verb ('Race'), resource ('meta-learners'), and deliverable ('scored leaderboard + winner'). This clearly distinguishes auto_cate from single-learner tools like metalearner or dml. The rest of the description reinforces the scope without blurring 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?

The description gives clear context through assumptions, pre-conditions, failure modes, and a typical minimum N. It names alternatives (sp.dml, sp.causal_forest, sp.tmle), though it does not spell out exactly when to choose one over this tool or mention closely related siblings like auto_cate_tuned.

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

auto_cate_tunedA
Read-only

Optuna-tuned CATE learner race -- nuisance, per-learner, or both. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness given the covariates; Overlap / positivity across the covariate space; Nuisance functions are estimated consistently; cross-fitting controls overfitting bias. Pre-conditions: Covariates, a treatment indicator, and an outcome for each unit; Enough data to fit flexible nuisance models with sample-splitting / cross-fitting. Failure modes: CATE estimates are unstable or extrapolate beyond the covariate support -> Restrict to the overlap region, increase data, or use a doubly-robust learner (DR-/R-learner). Alternatives: sp.dml, sp.causal_forest, sp.tmle. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
tuneNoTuning regime: - ``'nuisance'`` -- tune the shared outcome / propensity GBMs against held-out R-loss, then hand them to ``auto_cate``. (v0.9.5 behaviour.) - ``'per_learner'`` -- keep default nuisance models; for each learner, tune its final-stage CATE model against held-out R-loss. - ``'both'`` -- run ``'nuisance'`` first, then ``'per_learner'`` using the tuned nuisance. Most expensive; most thorough.nuisance
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_foldsNoNumber of cross-fitting or cross-validation folds.
samplerNosampler parameter (Optional[Any]).
timeoutNoWall-clock limit per study (seconds).
verboseNoverbose parameter (bool).
learnersNolearners parameter (LearnersArg).
n_trialsNoBudget for the nuisance-tuning study (ignored when ``tune == 'per_learner'``).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
n_bootstrapNoNumber of bootstrap replications.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
search_spaceNoOverride default spaces. See :data:`DEFAULT_SEARCH_SPACE` and :data:`DEFAULT_PER_LEARNER_SEARCH_SPACE`. Passed through / see :func:`auto_cate`.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
n_trials_per_learnerNoBudget for each per-learner study. Defaults to ``max(5, n_trials // 3)``.
per_learner_search_spaceNoOverride default spaces. See :data:`DEFAULT_SEARCH_SPACE` and :data:`DEFAULT_PER_LEARNER_SEARCH_SPACE`. Passed through / see :func:`auto_cate`.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already mark the tool read-only, and the description consistently adds behavioral context: required causal assumptions, cross-fitting, failure modes around instability/extrapolation, and validation tiers. This goes beyond the annotation without contradicting it.

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 compact and front-loaded with the core action, then uses labeled sections for validation, assumptions, pre-conditions, failure modes, alternatives, and sample size. A few phrases are slightly redundant (e.g., 'validated evidence tier'), but overall every section 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?

For a tool with 22 parameters and an output schema, the description covers the high-level conceptual context an agent needs: assumptions, preconditions, failure modes, and alternatives. It does not need to repeat return values because an output schema exists, though it could have been slightly more explicit about when to prefer this over auto_cate.

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 100%, so the schema fully documents all 22 parameters. The description only echoes the tune enum in its first sentence and adds no parameter-level detail beyond what the schema already provides, so the baseline 3 is appropriate.

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 opens with a specific action: an Optuna-tuned CATE learner race with three tuning regimes. This clearly identifies the tool's function, but it does not explicitly contrast it with the closest sibling auto_cate or with metalearner/compare_metalearners, so differentiation is left mostly to the word 'tuned'.

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 provides explicit pre-conditions, assumptions, a typical minimum N of 500, and failure-mode guidance (e.g., restrict overlap, use a DR-/R-learner). It lists alternatives (sp.dml, sp.causal_forest, sp.tmle) but does not give decision rules for choosing among them, so it stops short of full when/when-not guidance.

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

auto_didB
Read-only

Run several staggered-DiD estimators side by side.

ParametersJSON Schema
NameRequiredDescriptionDefault
gYesFirst-treatment-period column (0 or NaN for never-treated).
iYesUnit identifier column.
tYesCalendar time column.
xNoCovariates (used by CS / SA / BJS where supported).
yYesOutcome column.
alphaNoSignificance level for reported CIs.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodsNoSubset of ``{'cs', 'sa', 'bjs'}``. Defaults to all three.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
select_byNoHow to pick the winner. ``'median'`` returns the candidate with the median point estimate across successes. A method name returns that specific candidate (useful for forcing a baseline).median
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so the description doesn't need to cover safety. The description adds no behavioral context beyond the schema, such as how 'side by side' manifests in output or whether results are cached. With annotations already covering the safety profile and an output schema present, a neutral score 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?

The description is a single, focused sentence that front-loads the core purpose. It avoids fluff and is appropriately terse given the rich schema. It could be slightly more informative about usage, but for conciseness it earns a high score.

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?

Despite the presence of an output schema, the description is too brief for a tool with 14 parameters and multiple estimation methods. It fails to explain when to prefer this over running estimators individually, how to interpret the 'side by side' comparison, or what the 'agent' detail level entails. For such a complex tool, a one-sentence description is inadequate.

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 100%, so all 14 parameters are documented in the input schema. The description adds no additional parameter semantics beyond what the schema provides. Baseline 3 is correct when the schema carries the parameter documentation burden.

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 clear verb and resource: 'Run several staggered-DiD estimators side by side.' It conveys that the tool compares multiple estimators, which distinguishes it from single-estimator siblings like 'did' or 'staggered_cs'. However, it doesn't explicitly name those alternatives or the specific estimators (cs, sa, bjs) beyond what the schema provides, so it stops short of full differentiation.

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 provides no guidance on when to use this tool versus alternatives. It doesn't mention that it should be used when comparing multiple staggered DiD estimators, or that it supersedes running them individually. With dozens of DiD-related siblings, the lack of usage context leaves the agent to infer applicability from the schema alone.

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

auto_ivA
Read-only

Race 2SLS, LIML, and JIVE on a single-endogenous IV spec.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column.
exogNoExogenous controls (included in all requested IV estimators).
alphaNoSignificance level for confidence intervals and tests.
endogYesSingle endogenous regressor column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoForwarded to each estimator where supported.nonrobust
clusterNoForwarded to each estimator where supported.
methodsNoSubset of ``{'2sls', 'liml', 'jive'}``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
select_byNoselect_by parameter (str).median
instrumentsYesInstrument(s). A scalar is promoted to a one-element list.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true. The description adds no behavioral detail beyond that – it does not mention selection logic, caching via as_handle, or any side effects. Since the description carries some burden even with annotations, this sparse disclosure falls short.

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?

One concise sentence that is front-loaded with the core action. Every word contributes meaning; no filler or repetition. For a tool with a rich schema, this is appropriately terse.

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 schema provides thorough parameter documentation and there is likely an output schema, so the description can afford to be minimal. However, the key term 'Race' is undefinedβ€”what does running all three produce, and how does select_by decide? This leaves a meaningful gap in understanding the tool's full behavior.

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 100%, so the parameter descriptions already document each field. The description itself adds no extra parameter meaning; its reference to 'single-endogenous' aligns with the `endog` and `instruments` parameters but does not elevate beyond the schema 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?

The description uses a specific verb ('Race') and clearly enumerates the estimators (2SLS, LIML, JIVE) and the target specification (single-endogenous IV). It differentiates itself from single-estimator siblings like `jive`, `liml`, and `ivreg` by signaling a combined comparison/selection 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?

Usage is implied ('race' suggests comparing estimators), but there is no explicit guidance on when to prefer this over `ivreg` or `liml`, nor any conditions or exclusions. No alternatives are named, leaving the agent to infer the appropriate context.

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

available_methodsA
Read-only

Return list of all registered decomposition method names.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes this is a safe read operation. The description adds minimal behavioral context beyond 'returns a list', and there is no mention of output size, runtime, or whether any state changes occur. It does not contradict 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.

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. Every word contributes to the core purpose, and it is appropriately sized for a simple registry-listing tool.

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 covers return values and the annotations cover safety, so the simple core purpose is addressed. However, the six-parameter input schema includes data_path, data_sample_n, and result_id, which are not connected to the act of listing registered method names, leaving an agent unsure whether data-related arguments affect the returned list.

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 100%, so the input schema already documents all six parameters in detail. The tool description adds no parameter-specific meaning. With full schema coverage, a baseline of 3 is appropriate even though the description does not compensate further.

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 ('Return') and a precise resource ('list of all registered decomposition method names'). 'Decomposition' narrows the resource and differentiates it from the broad field of sibling tools, so an agent can understand the tool's role 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 Guidelines3/5

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

The description implies the tool is the go-to for discovering available decomposition methods, but it provides no explicit when-to-use/when-not-to-use guidance or alternatives. It does not mention that it should be called before selecting a method, nor how it relates to sibling tools like 'decompose' or 'methods_appendix'.

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

average_treatment_effectA
Read-only

Aggregate CATE predictions into ATE/ATT/ATC/ATO targets. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness given the covariates; Overlap / positivity; Honesty: separate subsamples are used to choose splits and to estimate effects. Pre-conditions: Covariates, treatment, and outcome with enough data to grow an honest forest. Failure modes: Calibration test rejects -- the forest's heterogeneity is not well calibrated -> Increase the sample / number of trees, or fall back to a doubly-robust learner. Alternatives: sp.dml, sp.auto_cate, sp.tmle. Typical minimum N: 1000.

ParametersJSON Schema
NameRequiredDescriptionDefault
TNoT parameter (Optional[np.ndarray]).
XNoFeature matrix or covariate DataFrame.
clipNoPropensity scores are clipped to ``[clip, 1-clip]`` before the inverse-propensity term to stabilise the score under near-overlap violations.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
forestYesforest parameter ('CausalForest').
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
target_sampleNotarget_sample parameter (str).all

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations include readOnlyHint=true, so the description does not need to restate that. It adds substantial behavioral context: assumptions (unconfoundedness, overlap, honesty), failure modes (calibration test rejects) with remediation steps, and validation tier. This exceeds the bar set by annotations.

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 structured with labeled sections (validation, assumptions, pre-conditions, failure modes, alternatives, typical N), is front-loaded with the core purpose, and every sentence contributes useful information without redundancy.

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 complex tool with 12 parameters and an output schema, the description covers purpose, assumptions, pre-conditions, failure modes, alternatives, and sample size guidance. An agent has sufficient information to decide when to call it and how to handle common issues.

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 100%, so all 12 parameters are already documented in the schema. The description does not add parameter-specific details beyond what the schema provides, so the baseline 3 is appropriate.

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 (aggregate) and resource (CATE predictions into ATE/ATT/ATC/ATO targets), and distinguishes from siblings by naming alternatives. The purpose is unambiguous and agent-actionable.

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 context: pre-conditions (requires a forest) and typical minimum N, plus alternatives. It does not explicitly state when NOT to use this tool versus the alternatives, but the pre-condition implies you need a CausalForest, which is a clear usage signal.

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

bacon_decompositionA
Read-only

Goodman-Bacon (2021) decomposition: breaks the two-way fixed-effects DID estimator into its 2x2 comparison weights. Reveals whether treated-vs-treated comparisons (which can have negative weights) dominate the estimate. Run this before trusting a TWFE-DID point estimate. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYes
idYes
timeYes
treatYes
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already establish readOnlyHint=true and openWorldHint=false, so the description does not need to restate safety. It adds useful behavioral context by warning about negative weights and by noting 'certified parity evidence,' which signals implementation validation. No contradiction with annotations.

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 compact and front-loaded: it states the method, the key output, the risk it addresses, and when to run itβ€”all in three sentences plus a short validation phrase. Every sentence 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?

Given the output schema, annotations, and standard DID parameter names, the description is largely complete for invoking the tool correctly. It is missing only explicit guidance about closely related sibling tools like bacon_plot or twfe_decomposition, and a direct parameter role mapping.

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 60%, so the four required parameters id, time, treat, and y lack explicit schema descriptions. The tool description provides methodological context that implies their roles but does not explicitly define them. This is adequate for a DID-savvy agent but not strongly compensating.

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 estimator (Goodman-Bacon 2021) and states precisely what the tool does: decomposes a TWFE-DID estimator into 2x2 comparison weights and exposes potentially negative treated-vs-treated comparisons. This clearly distinguishes it from generic decomposition or plotting siblings.

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 an explicit decision rule: 'Run this before trusting a TWFE-DID point estimate.' This tells the agent when the tool is appropriate. It stops short of a 5 by not stating when not to use it or naming an alternative such as bacon_plot/twfe_decomposition.

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

bacon_plotC
Read-only

Scatter plot of Goodman-Bacon decomposition.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
titleNotitle parameter (Optional[str]).
colorsNoMap comparison type -> color. Defaults provided.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
figsizeNofigsize parameter (Tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
bacon_resultYesOutput from ``bacon_decomposition()``. Must contain ``'decomposition'`` DataFrame and ``'beta_twfe'``.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so the description carries little additional burden. However, it discloses nothing about what the scatter plot contains, whether it renders interactively, returns a figure object, or requires any side effects. It adds no behavioral context beyond what annotations imply.

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 sentence with no filler, and the core resource is front-loaded. It is appropriately terse, though it borders on under-specification. Still, every word earns its place.

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?

Given 11 parameters, a required bacon_result object with specific required keys ('decomposition' DataFrame and 'beta_twfe'), and a workflow chaining from bacon_decomposition, this description is too thin. It does not explain what the plot shows, how to chain calls, or what the required input structure guarantees. The output schema helps with return values, but the usage context is largely missing.

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 100%, so all parameters are documented structurally. The description itself adds no parameter semantics beyond naming the bacon_result input, which is already present in the schema. Baseline 3 applies since the schema does the heavy lifting.

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 ('Scatter plot') and resource ('Goodman-Bacon decomposition'), cleanly identifying it as the visualization of output from bacon_decomposition. It does not explicitly distinguish it from sibling plot tools, but the resource reference is sufficient to know what it operates on.

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. It does not mention that bacon_result should come from bacon_decomposition() first, nor does it contrast with other plotting tools like plot_from_result or did_plot. Usage is only implied by the resource name.

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

balance_diagnosticsB
Read-only

Unified balance diagnostics for matching and weighting estimators.

ParametersJSON Schema
NameRequiredDescriptionDefault
psNoPropensity scores. If omitted, estimated with ``method``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoPropensity-score model when ``ps`` is not supplied.logit
weightsNoObservation weights after matching/weighting. If omitted, ATE inverse-propensity weights are computed from ``ps``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
thresholdNoBalance threshold for absolute standardized mean differences.
treatmentYesBinary treatment indicator.
covariatesYesCovariates to audit.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint annotation already covers the read-only safety profile, lowering the burden on the description. The description adds the estimator scope ('matching and weighting estimators') but does not disclose behavioral details such as what diagnostics are included, whether it is a composite call, or any side effects beyond 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?

The description is a single concise sentence that names the tool's domain without filler. It is not verbose, though it may be too terse to fully orient an agent among the many sibling balance-related tools.

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 rich input schema and output schema carry substantial explanatory weight, and annotations confirm read-only behavior. However, for a tool with 12 parameters and many related siblings, the one-line description does not fully contextualize when this 'unified' diagnostic should be invoked versus alternatives like ps_balance or balance_panel.

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 100%, so the input schema already documents all 12 parameters in detail, including the meaning of 'weights', 'ps', 'method', and 'detail'. The description itself adds no parameter-level meaning beyond mapping the tool to matching/weighting contexts, so the baseline score of 3 is appropriate.

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 identifies the tool as providing 'balance diagnostics' for 'matching and weighting estimators', which clearly indicates its subject area. It lacks an explicit verb and does not differentiate itself from sibling tools like balance_panel, ps_balance, or balanceplot, so it cannot earn 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 Guidelines3/5

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

The phrase 'for matching and weighting estimators' gives an implied usage context: call this after matching or weighting-based estimation to check balance. However, there is no explicit guidance about when to choose this tool over sibling diagnostics, nor any when-not-to-use exclusions.

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

balance_panelB
Read-only

Balance a panel by keeping only units observed in every time period. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
entityYesEntity (unit) identifier column.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, and the description consistently conveys a read-only filtering operation. It adds the specific rule about time periods, but the 'Validation' clause is unexplained, leaving ambiguity about what evidence is required or produced.

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 short and front-loads the primary purpose in its first sentence. The second sentence is cryptic but does not add length or complexity that obscures the purpose, so it earns a concise structure score.

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?

While the schema is rich and an output schema exists, the description fails to provide usage context or explain the validation clause. An agent selecting among many panel-related tools has no cues for when this tool is appropriate, leaving the description incomplete.

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 100%, so each parameter is fully documented in the schema. The description contributes no additional parameter meaning, leaving the baseline of 3 appropriate.

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 ('balance') and resource ('panel') with a concrete method ('keeping only units observed in every time period'). This clearly distinguishes it from siblings like balance_diagnostics or balanceplot.

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 provides no guidance on when to use this tool versus alternatives. It does not mention typical workflows, prerequisites, or exclusions. The cryptic 'Validation: certified parity evidence' offers no contextual help either.

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

balanceplotB
Read-only

Love plot: covariate balance visualization (SMD dot plot).

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from ``match()`` or ``ebalance()``.
figsizeNoHeight auto-scales with number of covariates if None.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
thresholdNoSMD threshold lines.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the safety profile is known. The description adds one useful behavioral detail: it produces a dot plot of standardized mean differences. It does not describe output or side-effect behavior further, but the annotations and output schema carry most of that burden.

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 a single compact sentence with no filler words; it front-loads the core purpose and visualization format. It is concise without being padded, though it is slightly too terse to carry full usage context.

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 structured fields are rich: full parameter descriptions, an output schema, and read-only annotations. The main gap is prose context about the match()/ebalance() workflow and how to choose this over love_plot, which the schema cannot fully compensate for.

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 100%, so all 11 parameters already have descriptions. The tool description adds no parameter-level semantics, which is acceptable under the high-coverage baseline.

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 clearly identifies the tool as a covariate balance visualization and specifies the x-axis metric as SMD, making it distinct from generic plotting or regression tools. However, it does not differentiate balanceplot from the sibling love_plot, which appears to serve the same purpose.

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 gives no explicit guidance on when to use this tool, and it does not mention alternatives such as love_plot or balance_diagnostics. The phrase 'covariate balance visualization' only implies a post-matching/weighting diagnostic context without saying so.

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

bartikA
Read-only

Bartik / shift-share IV estimator (Adao-Kolesar-Morales 2019; Borusyak-Hull-Jaravel 2022). Uses pre-period industry / group shares x exogenous shocks as an instrument for local outcome exposure. Assumptions: Exogeneity of shocks conditional on pre-period exposure structure (Borusyak-Hull-Jaravel); Shock-level IV: shocks are independent of region-level unobserved trends; Asymptotic framework: many shocks (L -> inf) -- check via sp.ssaggregate Herfindahl. Pre-conditions: pre-period shares are pre-determined (measured strictly before the outcome window); shocks are as-good-as-random conditional on unit-level controls; >= 50 regions for AKM shift-share SE to be well-sized. Failure modes: Herfindahl of shares too concentrated (one industry dominates) -> Shift-share SE unreliable -- use Adao-Kolesar-Morales shock-level SE via sp.shift_share_se; First-stage F < 10 -> Shares don't predict exposure enough -- report weak-IV-robust CI (sp.anderson_rubin_ci); Shocks correlate with pre-trends -> Shock exogeneity fails -- drop the violating shock dimension or add trend controls. Alternatives: sp.iv, sp.shift_share_se, sp.shift_share_political, sp.shift_share_political_panel. Typical minimum N:...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome (e.g. local wage growth)
endogYesEndogenous local exposure being instrumented (e.g. employment growth)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
sharesYesPre-period share column (e.g. industry share)
shocksYesShock column (e.g. industry-level change)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

The annotations declare readOnlyHint=true, so the agent knows this is a read-only estimation operation. The description adds substantial behavioral context beyond the annotations: it discloses the asymptotic framework (many shocks, L -> inf), the minimum sample size requirement (>=50 regions), and specific failure modes with their consequences. It doesn't describe the output format in detail, but the output schema exists and covers that. The only minor gap is not explicitly stating that this is a read-only operation, but the annotation covers 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 description is dense and information-rich, covering assumptions, pre-conditions, failure modes, and alternatives in a compact format. It's front-loaded with the core definition. However, it's quite long and the 'Typical minimum N:...' sentence is cut off, which is a minor structural flaw. The density is justified by the complexity of the tool, but the truncation prevents a 5.

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 complex econometric estimator, the description is remarkably complete: it covers the estimator's mechanism, assumptions, pre-conditions, failure modes with remedies, and alternatives. The output schema exists, so return values are documented. The only missing piece is the truncated 'Typical minimum N' sentence, but the >=50 regions condition is already stated. An agent has everything needed to decide whether to use this tool and how to interpret its results.

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 100%, so the schema already documents all 11 parameters. The description adds context for the key parameters (shares, shocks, endog, y) by explaining the econometric mechanism, but doesn't add syntax or format details beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.

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 clearly identifies the tool as a Bartik/shift-share IV estimator, names the specific econometric references (Adao-Kolesar-Morales 2019; Borusyak-Hull-Jaravel 2022), and explains the core mechanism: pre-period shares x exogenous shocks as an instrument for local outcome exposure. This is a specific verb+resource combination that distinguishes it from the many sibling tools.

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?

The description provides extensive usage guidance: explicit assumptions (exogeneity of shocks, shock-level IV, many shocks asymptotic framework), pre-conditions (pre-determined shares, as-good-as-random shocks, >=50 regions), and failure modes with specific remedies (Herfindahl concentration -> use sp.shift_share_se; weak first stage -> sp.anderson_rubin_ci; pre-trend correlation -> drop shock or add controls). It also names alternatives (sp.iv, sp.shift_share_se, sp.shift_share_political, sp.shift_share_political_panel). This is exemplary.

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

basque_terrorismC
Read-only

Basque Country terrorism dataset (simulated).

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true, and the description adds only that the dataset is 'simulated', which is a property of the data, not the tool's behavior. It does not disclose what happens when the tool is called, how the dataset is accessed, or any side effects beyond the read-only guarantee.

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 a single short sentence with no redundant words. It is efficiently front-loaded with the dataset name and the simulated nature. However, its brevity borders on under-specification, though not for lack of conciseness per se.

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?

Despite having six optional parameters and a rich output schema, the description provides almost no operational context. It does not explain what the tool actually does (e.g., returns a dataset, supports subsetting) or how the parameters relate to the dataset, so an agent cannot predict the tool's role within the large sibling set.

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?

The input schema provides detailed descriptions for all six parameters (100% coverage), including enums, defaults, and explanations. The description adds no parameter-level information, so it does not compensate for anything missing in the schema, matching the baseline of 3.

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 a specific resource ('Basque Country terrorism dataset'), which distinguishes it from the statistical analysis siblings, but it lacks a verb or action. It does not state whether the tool loads, previews, or processes the data, leaving the agent to infer the tool's function from its 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 Guidelines1/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of use cases, exclusions, or relationship to sibling tools, so an agent receives no help in selecting it.

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

bauer_sinningB
Read-only

Bauer-Sinning (2008) nonlinear Oaxaca-Blinder decomposition with Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
groupYesGroup or cohort identifier.
modelNoModel variant or parameterisation to fit.logit
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
variantNovariant parameter (str).yun
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
referenceNoreference parameter (int).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, so the read-only safety profile is covered. The description adds that the decomposition includes validation and 'certified parity evidence,' implying the output contains a parity-validation component, but it does not clarify what that evidence is or how it appears in the result. With annotations carrying the safety burden, the additional context earns partial but not full credit.

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 a single dense sentence with no filler, and the method name plus the distinguishing validation feature are front-loaded. It would be a 5 with an explicit functional verb (e.g., 'Estimates...' or 'Decomposes...'), but it remains efficient and easy to scan.

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?

Given a rich input schema (100% parameter coverage), output schema, and safety annotations, the description does not need to restate parameters or returns. However, for a complex estimator with many decomposition siblings, the missing 'when to use' context and the ambiguous 'certified parity evidence' leave selection partially to inference, so the description is minimally adequate but not complete.

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?

The input schema has 100% description coverage across all 12 parameters, so the schema already documents parameter meaning and the description need not repeat it. The description itself adds no parameter-level detail, which is acceptable under the baseline but yields no extra credit.

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 identifies a specific estimator (Bauer-Sinning 2008 nonlinear Oaxaca-Blinder decomposition) and a distinguishing feature ('Validation: certified parity evidence') that separates it from generic oaxaca or yun_nonlinear. However, it lacks an explicit verb and a plain-language statement of what the tool returns, so it does not fully earn 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?

The description gives no guidance on when to prefer this tool over similar decomposition tools (oaxaca, melly_decompose, yun_nonlinear, fairlie) or what conditions make the validation/certified-parity feature necessary. The phrase 'with Validation' hints at a niche but never states exclusions, prerequisites, or alternatives.

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

bcfA
Read-only

Estimate heterogeneous treatment effects using Bayesian Causal Forest. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness and overlap; The BART/forest priors are appropriate for the outcome scale. Pre-conditions: Covariates, treatment, and outcome; a propensity model is fit internally to limit regularization-induced confounding. Failure modes: MCMC diagnostics fail to converge, or estimates are sensitive to the prior -> Increase draws/tuning, re-scale the outcome, and report posterior diagnostics. Alternatives: sp.dml, sp.auto_cate, sp.causal_forest. Typical minimum N: 250.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
alphaNoSignificance level.
treatYesBinary treatment variable (0/1).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_foldsNoCross-fitting folds for propensity estimation.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate names.
n_trees_muNoNumber of trees for the prognostic function mu(X).
n_bootstrapNoBootstrap iterations for uncertainty quantification.
n_trees_tauNoNumber of trees for the treatment effect function tau(X). Fewer trees = stronger shrinkage toward homogeneous effects.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the read-only nature is known. The description adds valuable behavioral context beyond that: it discloses failure modes (MCMC non-convergence, prior sensitivity), preconditions (internal propensity model to limit confounding), and guidance for remediation (increase draws, re-scale outcome, report diagnostics). This is strong additional transparency, though it could also mention the output format or side effects, but since output schema exists, a 4 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?

The description is a single dense paragraph that front-loads the purpose and then systematically covers validation, assumptions, pre-conditions, failure modes, alternatives, and typical N. Each sentence serves a purpose. While packed, it is organized and efficient, earning a 4 rather than a 5 because it is somewhat dense and could be slightly more scannable with bullet points.

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?

Given the tool's complexity (15 parameters, Bayesian estimation), the description covers essential context: assumptions, preconditions, failure modes, alternatives, and sample size guidance. An output schema exists, so return values are covered. It does not mention specific details like expected runtime or data formatting beyond what schema lists, but for the agent to call it correctly, the description is largely sufficient. A 4 is justified.

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?

The input schema covers 100% of parameters with descriptions, so the baseline is 3. The tool description does not add parameter-specific detail beyond what the schema already provides (e.g., it doesn't explain nu_mu vs nu_tau semantics). However, the schema descriptions are adequate on their own. The description adds contextual meaning about the overall method but not per-parameter, so 3 is correct.

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: 'Estimate heterogeneous treatment effects using Bayesian Causal Forest.' It clearly distinguishes BCF from sibling tools like sp.dml, auto_cate, and causal_forest by naming them as alternatives. The purpose is unambiguous and actionable.

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?

The description provides explicit pre-conditions (covariates, treatment, outcome), assumptions (unconfoundedness and overlap, prior appropriateness), and names alternatives (sp.dml, sp.auto_cate, sp.causal_forest). It also gives a typical minimum N (250), which helps the agent decide when the tool is appropriate. This is clear and actionable guidance.

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

bcf_factor_exposureA
Read-only

BCF on PCA-factor scores of a high-dimensional exposure vector (arXiv:2601.16595, 2026). Compresses exposures via SVD or user-supplied loadings, then fits one BCF per factor. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness and overlap; The BART/forest priors are appropriate for the outcome scale. Pre-conditions: Covariates, treatment, and outcome; a propensity model is fit internally to limit regularization-induced confounding. Failure modes: MCMC diagnostics fail to converge, or estimates are sensitive to the prior -> Increase draws/tuning, re-scale the outcome, and report posterior diagnostics. Alternatives: sp.dml, sp.auto_cate, sp.causal_forest. Typical minimum N: 250.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
binarizeNobinarize parameter (str).median
loadingsNoloadings parameter (DataFrame).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
exposuresYesexposures parameter (list).
n_factorsNoNumber of factors.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
n_bootstrapNoNumber of bootstrap replications.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true and openWorldHint=false. The description goes well beyond these by disclosing failure modes (MCMC diagnostics failing, prior sensitivity), validation tiers, internal propensity model fitting, and diagnostics recommendations. It also mentions the compression via SVD or loadings, which is a behavioral detail not in annotations. No contradiction with annotations.

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 well-structured with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). It is concise for the complexity, each sentence adds value, and the core purpose is front-loaded. No wasted words.

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?

The description covers purpose, validation, assumptions, pre-conditions, failure modes, alternatives, and typical sample size. Given the tool's complexity (14 parameters) and that an output schema exists, this is complete for an agent to decide when to call and what to expect. It does not explain return values, but the output schema covers that.

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 100%, so all parameters have descriptions. The tool description adds minor context: it mentions 'user-supplied loadings' and 'SVD' which clarifies the 'loadings' parameter, and 'PCA-factor scores' clarifies 'n_factors'. However, it does not deeply elaborate on each parameter beyond what the schema provides, so the baseline of 3 is appropriate.

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 clearly states the tool's purpose: it applies BCF to PCA-factor scores of a high-dimensional exposure vector, using SVD or user-supplied loadings, then fits one BCF per factor. This distinguishes it from siblings like bcf, bcf_longitudinal, and bcf_ordinal, which likely handle different structures. The verb 'fits' and resource 'BCF' are specific.

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 provides pre-conditions (covariates, treatment, outcome), assumptions (unconfoundedness, overlap), and typical minimum N. It lists alternatives (sp.dml, sp.auto_cate, sp.causal_forest) but does not explicitly contrast with the bcf family (e.g., when to use bcf vs bcf_factor_exposure). This is a minor gap but the intended use case is implied by the title.

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

bcf_longitudinalA
Read-only

Hierarchical Bayesian Causal Forest for longitudinal data (BCFLong) -- allows mu_t(X), tau_t(X) to evolve across time with unit-level random intercepts. Assumptions: Unconfoundedness and overlap; The BART/forest priors are appropriate for the outcome scale. Pre-conditions: Covariates, treatment, and outcome; a propensity model is fit internally to limit regularization-induced confounding. Failure modes: MCMC diagnostics fail to converge, or estimates are sensitive to the prior -> Increase draws/tuning, re-scale the outcome, and report posterior diagnostics. Alternatives: sp.dml, sp.auto_cate, sp.causal_forest. Typical minimum N: 250.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable column name or outcome array.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesTreatment indicator, treatment variable, or treatment array.
covariatesYesCovariate matrix, DataFrame, or column names.
n_trees_muNoNumber of trees mu.
n_bootstrapNoNumber of bootstrap replications.
n_trees_tauNoNumber of trees tau.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses that 'a propensity model is fit internally to limit regularization-induced confounding' β€” an internal behavior that affects how estimates should be interpreted β€” and lists concrete failure modes with remediation: 'MCMC diagnostics fail to converge... -> Increase draws/tuning, re-scale the outcome, and report posterior diagnostics.' This is substantial behavioral context that annotations alone do not provide. No contradiction with 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?

Roughly 90 words organized into labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), with the model identity front-loaded. Every section earns its place and the structure is highly parseable for an agent. The only arguable waste is the sp.*-prefixed alternative names, which look inconsistent with the sibling namespace.

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 complex Bayesian tool with an output schema and fully-described parameters, the description covers the modeling context β€” assumptions, pre-conditions, internal behavior, failure modes with remediation, alternatives, and minimum sample size. The 'Typical minimum N: 250' guidance is slightly underspecified (units vs. observations) and alternative routing is thin, but nothing critical for invoking the tool correctly is missing.

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 100%, so the baseline of 3 applies; every parameter already carries a description in the schema. The tool description adds no parameter-level detail β€” the hint to 'Increase draws/tuning' refers conceptually to the n_trees_*/n_bootstrap tuning parameters but never names or maps them to specific schema fields.

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 opens with a specific definition β€” 'Hierarchical Bayesian Causal Forest for longitudinal data (BCFLong)' β€” and states exactly what the model does: 'allows mu_t(X), tau_t(X) to evolve across time with unit-level random intercepts.' The 'longitudinal data' qualifier differentiates it from sibling BCF variants (bcf, bcf_ordinal, bcf_factor_exposure) without requiring the agent to open their 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 gives applicability context β€” assumptions (unconfoundedness, overlap), pre-conditions (covariates, treatment, outcome), and a 'Typical minimum N: 250.' It names alternatives (sp.dml, sp.auto_cate, sp.causal_forest) but attaches no selection conditions; there is no explicit statement of when to prefer this tool over bcf or causal_forest, and no exclusions. Usage is implied rather than stated.

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

bcf_ordinalA
Read-only

Bayesian Causal Forest for ordered / dose-level treatment (Zorzetto et al. 2026). Estimates cumulative dose-response curves via chained BCF between consecutive levels. Assumptions: Unconfoundedness and overlap; The BART/forest priors are appropriate for the outcome scale. Pre-conditions: Covariates, treatment, and outcome; a propensity model is fit internally to limit regularization-induced confounding. Failure modes: MCMC diagnostics fail to converge, or estimates are sensitive to the prior -> Increase draws/tuning, re-scale the outcome, and report posterior diagnostics. Alternatives: sp.dml, sp.auto_cate, sp.causal_forest. Typical minimum N: 250.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_foldsNoNumber of cross-fitting or cross-validation folds.
baselineNobaseline parameter (str).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
n_trees_muNoNumber of trees mu.
n_bootstrapNoNumber of bootstrap replications.
n_trees_tauNoNumber of trees tau.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so the agent knows this is a read-only estimation call. The description adds valuable behavioral context beyond annotations: it discloses that a propensity model is fit internally to limit regularization-induced confounding, that MCMC diagnostics may fail to converge, and that estimates may be prior-sensitive. It also describes the chained-BCF estimation strategy. It does not detail output structure, but the output schema exists and the detail parameter covers payload depth.

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 dense but well-organized with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Every sentence carries information. It is somewhat long, but the complexity of a BCF tool with MCMC diagnostics justifies the length. The most important identifying information (ordered/dose-level, cumulative dose-response) is front-loaded.

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?

Given the tool's complexity (16 params, MCMC, BCF), the description covers the key contextual needs: what it estimates, assumptions, pre-conditions, failure modes, alternatives, and sample size guidance. The output schema and detail parameter handle return-value expectations. It could be more complete with explicit guidance on which parameters to tune when diagnostics fail, but the failure-mode section already points to draws/tuning and outcome rescaling.

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 100%, so the schema already documents all 16 parameters. The description adds context for the treatment variable (ordered/dose-level) and mentions internal propensity fitting, which helps interpret treat and covariates. However, it does not add meaning beyond the schema for most parameters (e.g., n_trees_mu, n_trees_tau, n_bootstrap, alpha, baseline). Baseline 3 is appropriate given full schema coverage.

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 clearly identifies the tool as a Bayesian Causal Forest for ordered/dose-level treatment, specifies the method (chained BCF between consecutive levels), and states the estimand (cumulative dose-response curves). It distinguishes itself from siblings like bcf, bcf_factor_exposure, bcf_longitudinal, and causal_forest by the ordered/dose-level focus.

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 provides explicit pre-conditions (covariates, treatment, outcome; propensity model fit internally), assumptions (unconfoundedness, overlap, BART priors appropriate), and failure-mode guidance (increase draws/tuning, re-scale outcome, report diagnostics). It names alternatives (sp.dml, sp.auto_cate, sp.causal_forest) and gives a minimum N of 250. It does not explicitly state when NOT to use this tool versus those alternatives, but the context is strong.

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

benjamini_hochbergB
Read-only

Benjamini-Hochberg (1995) FDR correction. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
pvaluesYesUnadjusted p-values.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so the agent knows this is a read-only calculation. The description adds little behavioral context beyond naming the procedure; it doesn't disclose output shape, assumptions, or side effects. Since the annotation already covers the safety profile, 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?

The description is two short sentences and contains no wasted words. The core identity is front-loaded; the validation note is second. It's appropriately minimal for a self-explaining statistical procedure.

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 simple FDR-correction function with only one required parameter (pvalues) and full schema coverage, the description plus schema are mostly sufficient. The main gap is that it doesn't relate to or distinguish the tool from the multiple-adjustment siblings (bonferroni, holm, romano_wolf), and it doesn't mention whether adjusted p-values are sorted or returned in original order. But output schema exists and the operation is a narrow read-only calculation.

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 100%, so all parameters are already documented in the schema. The description adds no parameter-specific meaning, but with full coverage the baseline of 3 applies. The detail parameter in the schema already explains payload depth options well.

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 Benjamini-Hochberg (1995) FDR correction, which is a specific verb+resource combination. It is distinguishable from siblings like romano_wolf, holm, and bonferroni because it names the exact procedure. However, it doesn't explicitly contrast with those FDR-adjustment siblings, so it loses the fifth point on sibling differentiation.

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 states what the tool is but not explicitly when to use it compared to alternatives. The 'Validation: certified parity evidence' line hints at a use case (validated parity with an established implementation) but doesn't say where it fits among the many multiple-testing siblings. The detail parameter does explain when different payload depths are appropriate, providing a moderate usage signal.

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

betaregC
Read-only

Beta regression (Ferrari & Cribari-Neto 2004). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoRegressors for the mean equation.
yNoOutcome in (0, 1).
zNoRegressors for the precision equation. If None, constant precision.
tolNoNumerical convergence tolerance.
linkNoLink for mean: 'logit', 'probit', 'cloglog'.logit
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoRobust standard-error or covariance estimator option.nonrobust
clusterNoCluster identifier column for clustered standard errors.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior1/5

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

The annotations declare readOnlyHint=true and openWorldHint=false, so the tool is known to be read-only. The description adds only a validation claim ('certified parity evidence') but discloses no behavioral aspects such as computational cost, assumptions, or response structure. It does not contradict annotations, but adds negligible behavioral transparency beyond them.

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

Conciseness2/5

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

The description is extremely brief (two short sentences), but the brevity is under-specification rather than efficient conciseness. The first sentence simply restates the tool's name in a verbose form, and the second is a vague validation claim. It does not provide essential information in a structured or front-loaded manner.

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

Completeness1/5

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

For a tool with 15 parameters and no required ones, the description is grossly inadequate. It does not explain the overall workflow, expected inputs, output format, or how it relates to similar tools. Despite the schema having descriptions, the high-level context is missing, leaving an agent unable to determine when or how to invoke it effectively.

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?

The input schema has 100% description coverage for all 15 parameters, so the schema already documents each parameter. The description adds no additional meaning or context about parameters, such as the role of 'x', 'y', and 'z' or the 'detail' levels. Given the high schema coverage, a baseline of 3 is appropriate, but the description does not enhance understanding beyond the schema.

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 clearly states the tool performs beta regression and cites the reference (Ferrari & Cribari-Neto 2004). It identifies the method and its intended use for bounded outcomes. However, it does not differentiate from other regression siblings like 'glm' or 'logit', relying on the name alone to imply the distinction.

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

Usage Guidelines1/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 beta regression versus alternatives. The description does not mention conditions such as outcome in (0,1) or when to prefer it over other models, nor does it exclude any scenarios. An agent would have to infer from the name and schema that it is for bounded continuous outcomes.

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

beyond_average_lateA
Read-only

Beyond-average LATE (Xie-Wu 2025). Identifies the entire treatment-effect distribution among compliers under incomplete compliance, not just its mean. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Selection-on-observables (unconfoundedness + overlap) or, for IV variants, instrument validity; For IV-QTE: rank invariance / rank similarity (monotonicity of the structural quantile function). Pre-conditions: Covariates, treatment, and outcome; for IV-quantile methods, a valid instrument; Enough data to estimate the outcome distribution across quantiles. Failure modes: Estimated conditional quantiles cross (non-monotone), or tail quantiles are unstable -> Use rearrangement / monotonization and avoid extreme quantiles where data are sparse. Alternatives: sp.qte, sp.iv, sp.dml. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoQuantiles tau at which to evaluate QTE (default 0.1..0.9 step 0.1)
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
instrumentYesinstrument parameter (str).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses failure modes (quantile crossing, unstable tail quantiles), assumptions (unconfoundedness, instrument validity, rank invariance), pre-conditions, and a typical minimum N of 500. This goes well beyond the readOnlyHint annotation, which only signals no side effects. No contradiction with 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?

The description is well-structured with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, min N) and front-loads the purpose. However, the Validation sentence ('validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact)') is somewhat boilerplate and not directly actionable for invoking the tool, so it doesn't fully earn its place.

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 complex econometric tool, the description covers the full decision surface: purpose, assumptions, pre-conditions, failure modes, alternatives, and data-size guidance. The output schema exists, so return-value details are secondary. Nothing an agent needs to select and invoke the tool correctly is missing.

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?

The input schema has 100% description coverage, so the schema carries the burden. The description does not add parameter-level detailβ€”it only lists generic pre-conditions (covariates, treatment, outcome, instrument) without mapping them to schema fields. The weak schema entry for 'instrument' (just 'instrument parameter (str).') is not compensated by 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?

The description opens with a clear verb+resource: 'Identifies the entire treatment-effect distribution among compliers under incomplete compliance, not just its mean.' It names the specific method (Xie-Wu 2025) and explicitly contrasts with the mean-based LATE, which distinguishes it from standard LATE tools and sibling quantile-treatment-effect tools.

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?

The description ends with 'Alternatives: sp.qte, sp.iv, sp.dml', explicitly routing an agent to sibling tools. It also gives assumption-based selection guidance ('Selection-on-observables... or, for IV variants, instrument validity') and failure-mode remediation ('Use rearrangement / monotonization'), so an agent knows both when and when not to use this tool.

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

bias_factorC
Read-only

Confounding bias factor B (Ding & VanderWeele 2016).

ParametersJSON Schema
NameRequiredDescriptionDefault
rr_euYesrr_eu parameter (float).
rr_udYesrr_ud parameter (float).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

The readOnlyHint annotation already covers the safety profile, so the description does not need to belabor non-mutation. The description adds conceptual context by naming the Ding & VanderWeele bias factor, but it does not disclose behavioral details such as formula interpretation, numerical range, or how optional data/result parameters interact with the required rr_eu and rr_ud arguments.

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 description is very short and free of filler, which is efficient. However, for a tool with 8 parameters and a statistical concept, a single noun-phrase fragment is under-specified rather than ideally concise; it does not provide the structure an agent needs to use the tool safely.

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 description is incomplete relative to the tool's context: it omits usage guidance, fails to explain how the optional data_path/result_id parameters relate to the two required risk-ratio inputs, and gives no interpretive context for the returned bias factor. The output schema may cover return shape, but the surrounding call context is still too sparse.

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 100%, so the baseline is 3 even though the parameter descriptions are thin ('rr_eu parameter (float)'). The description itself adds no semantic meaning beyond the formula reference; rr_eu and rr_ud remain cryptic and are not connected to the bias-factor calculation.

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 identifies the object as the confounding bias factor B and cites Ding & VanderWeele (2016), making the core purpose reasonably clear. However, it uses a noun phrase rather than a verb like 'computes/returns, and it does not differentiate this tool from nearby sensitivity siblings such as sensitivity_rr, evalue_rr, or sensitivity_from_result.

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 alternative sensitivity analyses, and no mention of what inputs are expected beyond the schema. The description does not explain whether rr_eu and rr_ud are risk ratios, nor does it give any exclusion or alternative-selection hints.

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

bib_forC
Read-only

Top-level structured citation for a fitted result.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesAny fitted result object exposing a ``.cite()`` method.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, so the description adds no behavioral nuance. It doesn't mention the caching behavior via as_handle, the effect of detail levels, or any side effects. Since annotations carry the safety profile, the description fails to add 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.

Conciseness3/5

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

The description is a single sentence, which is concise and front-loaded, but it is too sparse to be useful for an agent. For a tool with seven parameters and meaningful choices (detail levels, as_handle), a bit more guidance would be warranted without becoming verbose. It is not wordy, but it under-delivers.

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?

Given the tool's many parameters and the sibling context (e.g., bibtex), the description is incomplete. It doesn't explain when to use this vs. bibtex, nor the significance of detail levels or as_handle. While an output schema exists (so return values needn't be described), an agent still lacks guidance on invocation choices.

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?

All seven parameters are described in the schema (100% coverage), so the baseline is 3. The description adds no information about parameters itself, but the schema does the heavy lifting. The description's brevity doesn't detract from parameter clarity.

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 clear action: providing a structured citation for a fitted result. It identifies the resource (fitted result) and the output (citation). However, 'top-level' is ambiguous and doesn't distinguish well from sibling tools like bibtex, which may also generate citations. Still, it conveys the core purpose unambiguously.

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 alternatives (e.g., bibtex, brief_result). No mention of entry conditions, required prior steps, or when the different detail levels would be appropriate. The description is purely a statement of what it does, lacking any 'when' or 'when not' context.

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

bibtexA
Read-only

Return verified BibTeX entries from paper.bib (StatsPAI's single source of truth for citations). Pass one or more bib keys (e.g. 'callaway2021difference'). NEVER invent citations -- call this tool instead. Unknown keys return an empty entry plus a list of close matches.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysYesBib keys to look up. Most estimators advertise their key in agent_card.reference.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds valuable behavioral context: it confirms it returns verified entries, warns against inventing citations, and specifies that unknown keys produce an empty entry plus close matches. This goes beyond the annotations and helps the agent handle edge cases.

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 sentences with zero filler. The core purpose and usage are front-loaded, the warning about inventing citations is prominent, and the unknown-key behavior is stated concisely. Every sentence earns its place.

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 simple lookup tool with an output schema (not shown) and read-only annotations, the description covers the essential aspects: what it returns, how to invoke it (with an example), and the edge-case behavior. 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.

Parameters4/5

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

Schema coverage is 100%, so the schema already documents all parameters. The description adds an example bib key ('callaway2021difference') and clarifies that multiple keys can be passed, which reinforces the keys parameter. It does not explain the other parameters (detail, as_handle, etc.), but they are well-documented in the schema, so the description adds marginal value.

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 clearly states a specific verb ('Return'), a precise resource ('verified BibTeX entries from paper.bib'), and includes an example key. It is unambiguously distinct from the statistical siblings; the only related tool, bib_for, is not mentioned, but the description's citation-specific scope makes it stand apart.

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 a strong usage directive: 'NEVER invent citations -- call this tool instead.' This tells the agent exactly when to use it (whenever a citation is needed) and implies when not to (do not fabricate). It also mentions the behavior for unknown keys, which guides error handling. It does not name an alternative tool, but the context is clear.

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

bidirectional_pciA
Read-only

Bidirectional proximal causal inference (Min, Zhang & Luo 2025). Solves for both outcome and treatment bridges simultaneously in a single two-way regression system. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: The proxies are valid negative controls (relevant to the confounder, excluded from the causal channel); A bridge function exists (completeness conditions hold). Pre-conditions: Treatment-inducing and outcome-inducing proxy variables (negative controls) for the unobserved confounder. Failure modes: Proxies are weak or invalid -- the bridge function is poorly identified -> Test proxy relevance, select stronger proxies, or fall back to sensitivity analysis. Alternatives: sp.select_pci_proxies, sp.dml. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
proxy_wYesproxy_w parameter (list).
proxy_zYesproxy_z parameter (list).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark readOnlyHint=true, and the description adds non-obvious context: proxy validity and completeness assumptions, failure modes for weak/invalid proxies, an evidence tier, and a minimum N warning. This goes well beyond the annotations and helps an agent anticipate poor identification.

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 organized into focused sections (validation, assumptions, pre-conditions, failure modes, alternatives, N) with no repetition of schema fields or filler. The core identification is front-loaded and each section 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?

For a complex estimator, it supplies assumptions, pre-conditions, failure modes, alternatives, evidence tier, and sample-size guidance, and an output schema exists so return details need not be repeated. The main gap is the missing explicit W/Z role mapping and a more precise contrast with the proximal/proximal_regression siblings.

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 100%, so the baseline is 3. The description adds meaning to the proxy parameters by defining them as treatment-inducing and outcome-inducing negative controls relevant to the confounder and excluded from the causal channel. However, it never explicitly maps proxy_w to treatment-inducing and proxy_z to outcome-inducing, which prevents a higher score.

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 opens with a specific method ('Bidirectional proximal causal inference (Min, Zhang & Luo 2025)') and a precise action: solves both outcome and treatment bridges simultaneously in a two-way regression system. This distinguishes it from univariate proximal regression, select_pci_proxies, and DML even 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?

Pre-conditions state when the method is applicable (valid negative-control proxies, bridge function/completeness), failure modes say what to do if assumptions fail, and the Alternatives line points to sp.select_pci_proxies and sp.dml. It lacks an explicit 'use X instead when Y' contrast, so it is not a full 5.

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

biprobitC
Read-only

Bivariate probit model. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesRegressors for equation 1.
x2NoRegressors for equation 2. If None, same as x1.
y1YesFirst binary outcome.
y2YesSecond binary outcome.
tolNoNumerical convergence tolerance.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoRobust standard-error or covariance estimator option.nonrobust
clusterNoCluster identifier column for clustered standard errors.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

With readOnlyHint=true in annotations, the safety profile is already known, so the description does not need to restate that. However, the description adds no useful behavioral context: it does not explain what 'certified parity evidence' means, what the fitting process returns, or any assumptions or side effects. There is no contradiction with annotations.

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

Conciseness2/5

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

The description is very short, but this is under-specification rather than effective conciseness. It contains no front-loaded action, no selection-relevant details, and the 'Validation' fragment is vague and does not earn its place.

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 complex 15-parameter estimator with multiple optional features (x2, cluster, robust, detail, as_handle), the description is far too thin. The rich schema covers parameters, but the description leaves the tool's purpose, relationship to siblings, and validation semantics unexplained.

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 100%, with every parameter already documented in detail. The description itself contributes nothing beyond the tool name, so the baseline of 3 is appropriate: the schema carries the semantic burden.

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

Purpose2/5

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

The description only restates the tool name ('Bivariate probit model') without an explicit action verb like 'estimate,' 'fit,' or 'test.' It does not distinguish biprobit from the sibling 'probit' tool or other discrete-choice estimators, leaving the agent uncertain about the tool's exact role.

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 biprobit should be chosen over alternatives such as probit, panel_probit, or ivreg. The cryptic phrase 'Validation: certified parity evidence' does not explain use conditions, prerequisites, or when not to use this tool.

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

bjsA
Read-only

Borusyak, Jaravel & Spiess (2024) imputation DID estimator. Do NOT use when: no never-treated or not-yet-treated observations remain -- the imputation model cannot be fit; the design is a simple 2x2 -- use sp.did(method='2x2'). Assumptions: Conditional parallel trends between treated and comparison groups absent treatment; No anticipation of treatment before its onset; Treatment effects may be heterogeneous across cohorts and time (no homogeneity required). Pre-conditions: Panel or repeated cross-section with a unit (or group) identifier and a time identifier; At least one never-treated or not-yet-treated comparison group; Pre-treatment periods to assess parallel trends. Failure modes: Pre-treatment event-study coefficients are jointly non-zero (pre-trend violation) -> Use honest DiD bounds to quantify robustness to trend violations, or condition on covariates; Two-way fixed-effects estimate is contaminated by 'forbidden' comparisons / negative weights -> Use a heterogeneity-robust estimator (Callaway-Sant'Anna, Borusyak et al., Gardner two-stage). Alternatives: sp.callaway_santanna, sp.did, sp.honest_did. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable name.
feNoWhich fixed effects the Y(0) model carries, replacing the default two-way ``unit + time``. Mirrors Stata ``did_imputation``'s ``fe()``. Each entry is one fixed effect, written either as a bare column or Stata-style with ``#`` for the interacted cell:: fe=['time'] # period FE only fe=['unit', 'state#year'] # unit FE + state-by-year FE fe=[] # no fixed effects at all Levels are factorized over the whole panel, so a cell seen only among treated rows still gets a column and is imputed rather than silently absorbing the reference level.
vceNoStandard-error mode for the overall ATT. ``'analytic'`` is the exact Borusyak--Jaravel--Spiess variance: the estimator is linear in the outcome, so its weights are computed rather than approximated, and the result reproduces Stata ``did_imputation`` and R ``didimputation`` to ~5e-8. Before v1.23.0 this path used an approximation that was materially anti-conservative (18-36% too small on the harness fixtures); see MIGRATION.md. Measured, not asserted. On a homogeneous-effect design with a never-treated half, 400-800 replications per cell: =========== ========== ==================== clusters coverage mean SE / sd(est) =========== ========== ==================== 30 0.925 0.985 60 0.938 0.936 120 0.948 0.978 240 0.935 1.007 480 **0.950** 0.983 =========== ========== ==================== Two things to read off it. The ratio sits at 1 throughout, so the variance formula carries no systematic bias -- the approximation it replaced ran 18-36% low. And coverage reaches nominal by 480 clusters, so the shortfall at 60 is a small-cluster effect rather than a missing term: there the standard error is simply *noisy* (dispersion 9.2% against 3.2% at 480), which fattens the studentised distribution (sd(t) = 1.04 against 1.007). A ``t(G-1)`` critical value barely helps (0.938 to 0.941 at G = 60) because the problem is the variability of the standard error, not the degrees of freedom. ``vce='bootstrap'`` is the remedy in small designs, and ``se_method='auto'`` selects it below 30 clusters. ``'bootstrap'`` resamples whole clusters and re-runs the full imputation estimator. Point estimates are identical either way; per-horizon event-study SEs are unaffected.analytic
timeYesTime period column.
alphaNoSignificance level for confidence intervals.
groupYesUnit identifier column.
hetbyNoStata ``did_imputation, hetby(varname)``: report heterogeneous overall ATTs by the levels of a **time-invariant** unit-level variable. Results land in ``model_info['hetby']`` (one row per
min_nNoStata ``did_imputation, minn(#)``: drop event-study horizons with fewer than ``min_n`` treated observations (they are noisy and dominated by a single cohort). Dropped horizons are listed in a warning and excluded from the pre-trend test.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of cluster-bootstrap replications when ``vce='bootstrap'``.
clusterNoVariable for cluster-robust standard errors. Defaults to ``group`` (unit-level clustering).
horizonNoRelative time periods for event study estimates, e.g. ``list(range(-5, 6))``. If ``None``, reports only the overall ATT (no event study disaggregation).
projectNoproject parameter (Optional[List[str]]).
balancedNoStata ``did_imputation, hbalance``: keep only eventually-treated units observed at *every* requested horizon, so the event-study composition is stable across ``k`` (no cohort churn). Never-treated units are always kept. Requires ``horizon`` (or ``pretrends``). Warns with the number of units dropped.
controlsNoContinuous time-varying controls, entering the Y(0) model additively. Stata ``did_imputation``'s ``controls()``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
boot_seedNoSeed for the cluster bootstrap (deterministic results).
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
pretrendsNoStata ``did_imputation, pretrends(k)``: estimate the ``k`` pre-treatment placebo coefficients (horizons ``-k .. -1``, added to ``horizon`` if not already requested) and report their joint Wald test in ``model_info['pretrend_test']``. Under the default ``pretrend_method='bjs'`` the test uses the full cluster-robust covariance of the auxiliary lead regression; under the other conventions it assumes the lead estimates are uncorrelated (valid but conservative), and :func:`statspai.bjs_pretrend_joint` gives the covariance-aware cluster-bootstrap version.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
se_methodNoShared DiD spelling for ``vce=`` -- ``'analytic'``, ``'bootstrap'`` (also ``'cluster'``, ``'pairs'``) or ``'auto'``. Passing both raises. ``'auto'`` picks the cluster bootstrap when the design has at most 30 clusters (Cameron, Gelbach & Miller 2008) and the analytic BJS variance otherwise: with few clusters the cluster-score sum behind any sandwich is itself noisy, which is a small-cluster problem rather than a defect in the formula.
first_treatYesColumn indicating the period of first treatment. Use ``np.inf``, ``np.nan``, or ``0`` for never-treated units.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
save_weightsNoStata ``did_imputation, saveweights()``: store the exact estimation weights ``w`` such that ``ATT = w'y`` in ``model_info['estimation_weights']`` (aligned with the rows of ``data``). Treated rows get ``1/N1``; untreated rows get the (negative) imputation weights implied by the FE projection -- useful for diagnosing which comparisons drive the estimate.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
save_residualsNoStata ``did_imputation, saveresid()``: store the untreated-fit residuals ``y - y0`` in ``model_info['residuals']`` (aligned with the rows of ``data``; ``NaN`` on treated rows, whose ``y - y0`` is the treatment effect, not a residual).
pretrend_methodNoHow the **pre-treatment** event-study coefficients are built. The post-treatment coefficients are imputation residuals either way; only the leads differ, and the difference is visible in the plot rather than in the ATT. - ``'bjs'`` -- the convention of Stata ``did_imputation, pretrends(k)``: an auxiliary dynamic TWFE regression on the untreated observations, with all relative times earlier than the requested leads pooled into the omitted category. Reproduces Stata's coefficients and standard errors. Not available with ``fe=``, ``unit_covariates=`` or ``time_covariates=``. - ``'in-sample'`` -- average the imputation residuals at pre-treatment relative times, as ``fect`` and ``did2s`` do. These are in-sample prediction errors: in a non-staggered design they equal the symmetric benchmark times the untreated unit share ``N0/N``, so they understate pre-trends, severely when most units are treated. This was StatsPAI's behaviour before v1.23.0. - ``'symmetric'`` -- Roth's (2026) repair, which uses the average of the pre-treatment periods as the reference for both halves of the path, so the plot matches a dynamic TWFE event study up to a common vertical shift and the usual visual heuristics apply. Non-staggered balanced designs without covariates only; raises otherwise rather than applying an unverified factor. The chosen convention and its caveat are recorded in ``model_info['pretrend_method']`` and ``model_info['event_study_convention']``.bjs
time_covariatesNoControls interacted with the **period** fixed effects, i.e. one coefficient per period. Stata's ``timecontrols()``. Typically a time-invariant unit characteristic whose effect is allowed to move over calendar time.
unit_covariatesNoControls interacted with the **unit** fixed effects, i.e. one slope per unit. Stata's ``unitcontrols()``. The canonical use is ``unit_covariates=[time_col]``, which makes Y(0) carry unit-specific linear trends. Identification bites hard here: a unit-specific slope needs at least two untreated periods for that unit, so early-treated cohorts can lose their imputation entirely.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true and openWorldHint=false, and the description does not contradict them. Beyond that, it discloses key behavioral properties: failure modes (pre-trend violations, TWFE contamination), the imputation model's requirements, and assumptions like no anticipation and heterogeneous effects. This gives the agent a clear picture of how the estimator behaves and where it breaks.

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?

While long, the description is tightly organized into labeled sections (Do NOT use, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) with no filler. The most decision-relevant information is front-loaded, and every sentence contributes to correct tool selection and invocation.

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 tool's complexity (29 parameters, 5 required, rich output schema), the description supplies the essential selection criteria, assumptions, failure modes, and alternatives. It does not need to describe return values because an output schema exists and is rich. The description is complete enough for an agent to decide whether and when to call this 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 description coverage is 100%, so the input schema already documents all parameters in detail. The tool-level description adds general pre-conditions and failure modes but does not elaborate on individual parameters beyond what the schema already provides. This matches the baseline of 3 where the schema carries the parameter-semantics burden.

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 the estimator explicitly ('Borusyak, Jaravel & Spiess (2024) imputation DID estimator') and clarifies it is a DiD estimator, so an agent knows exactly what resource this tool targets. It also distinguishes itself from alternatives and states specific exclusions (e.g., simple 2x2 designs should use sp.did), making it easy to differentiate from siblings.

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?

The description gives explicit 'Do NOT use when' conditions, enumerates assumptions and pre-conditions, names alternatives such as sp.callaway_santanna and sp.honest_did, and even specifies a typical minimum N. This is comprehensive guidance for when to select this tool versus other DiD estimators.

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

bjs_pretrend_jointC
Read-only

Cluster-bootstrap joint Wald test for BJS pre-treatment coefficients.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
seedNoRNG seed for reproducibility.
timeYesTime period column.
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoCluster-bootstrap replications. Clusters are sampled with replacement; unit ids are reassigned in the resampled frame so BJS refits cleanly.
resultYesOutput of :func:`did_imputation` on ``data`` with a non-trivial ``horizon`` that covers negative values. Only its ``model_info['event_study']`` frame is consulted, to look up the observed pre-period point estimates that we re-test with a covariance-aware statistic. Same arguments you passed to the original :func:`did_imputation` call. Needed to re-run BJS on each cluster-bootstrap resample.
clusterNoCluster identifier column for clustered standard errors.
horizonNoIf omitted, inferred from ``result.model_info['event_study']``.
controlsNoControl-variable column names.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
first_treatYesfirst_treat parameter (str).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds only the methodological label (cluster-bootstrap, joint Wald) but no behavioral context beyond annotationsβ€”no mention of data requirements, failure modes, output structure, or anything the agent should expect at runtime.

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 a single, front-loaded sentence with no filler. It is concise, but it achieves brevity by omitting important context, so it is not ideal despite being efficient.

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 tool with 16 parameters, 6 required, and dependence on a prior did_imputation result, a one-sentence description is inadequate. The output schema covers return values, but the description does not explain prerequisites, workflow, or the role of the `result` parameter, forcing the agent to infer critical context from parameter metadata alone.

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 100%, so the baseline is 3. The description itself adds no parameter meaning beyond the schema, and it does not compensate for the complexity of the required `result` and `data_path` relationship.

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 uses a specific verb-noun structure: 'cluster-bootstrap joint Wald test' targeting 'BJS pre-treatment coefficients'. It clearly identifies the statistical procedure and resource, though it does not explicitly contrast with siblings such as bjs or pretrends_test.

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 is given on when to use this tool versus alternatives like pretrends_test or event_study. The description also omits prerequisites such as requiring a previously fitted did_imputation result, leaving the agent without routing or sequencing information.

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

blp_testA
Read-only

Best Linear Predictor (BLP) test for CATE heterogeneity. Assumptions: Unconfoundedness given the covariates; Overlap / positivity across the covariate space; Nuisance functions are estimated consistently; cross-fitting controls overfitting bias. Pre-conditions: Covariates, a treatment indicator, and an outcome for each unit; Enough data to fit flexible nuisance models with sample-splitting / cross-fitting. Failure modes: CATE estimates are unstable or extrapolate beyond the covariate support -> Restrict to the overlap region, increase data, or use a doubly-robust learner (DR-/R-learner). Alternatives: sp.dml, sp.causal_forest, sp.tmle. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome and treatment column names.
alphaNoSignificance level.
treatYesOutcome and treatment column names.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from ``metalearner()``.
n_foldsNoFolds for propensity cross-fitting.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The annotations declare readOnlyHint=true, which matches the test nature of the tool. The description adds substantial context: assumptions, cross-fitting, overlap requirements, failure modes, and recommended mitigations. No contradiction with annotations.

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 well-organized into labeled sections: assumptions, pre-conditions, failure modes, alternatives, and minimum N. Every sentence adds useful information and the content is front-loaded with the core purpose.

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?

The description covers assumptions, data requirements, failure modes, alternatives, and sample-size guidance. Combined with the rich schema and output schema, it gives an agent everything needed to decide whether and how to invoke the 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?

The input schema covers 100% of parameters with meaningful descriptions, including defaults and special behavior like as_handle and data_sample_n. The description does not need to repeat schema details; it adds context about the test's role but does not clarify individual parameters further. Baseline 3 is appropriate.

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 method ('Best Linear Predictor (BLP) test for CATE heterogeneity') and clearly distinguishes it from alternatives like sp.dml, sp.causal_forest, and sp.tmle. The purpose is unambiguous and uses a specific verb-resource pairing.

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?

The description provides explicit pre-conditions, assumptions, failure modes, and a list of alternative tools. It tells an agent when the tool is appropriate and when to consider other methods, which is strong guidance.

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

bonferroniB
Read-only

Bonferroni correction: p_adj = min(p * S, 1). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
pvaluesYesUnadjusted p-values.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes the safety profile, and the formula adds a precise behavioral description of the correction. The sentence 'Validation: certified parity evidence' gestures at validation behavior but is cryptic, so it only partially discloses what the agent can expect.

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 core formula is front-loaded in a very short description, which is efficient. However, the second sentence, 'Validation: certified parity evidence,' is opaque and does not clearly earn its place, so the description is not quite top-tier in structure.

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 tool is simple, has an output schema, and carries a read-only annotation, so the description need not exhaustively document return values. Still, it omits when-to-use guidance and leaves S and the validation claim unexplained, making it adequate but not complete.

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 100%, so the baseline of 3 applies even though the description adds little parameter-level detail. The formula introduces S without defining it or explaining how it is derived from pvalues or data_path, so it cannot be credited with stronger semantic guidance.

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 precise operation, Bonferroni correction, and supplies the formula p_adj = min(p * S, 1), so an agent can tell exactly what transformation is applied. It does not explicitly contrast itself with sibling p-value adjustment tools like adjust_pvalues, holm, or benjamini_hochberg, so it misses the top score.

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 about when to use this tool versus sibling multiple-testing adjustments, nor any exclusion like 'use Benjamini-Hochberg when controlling FDR.' The intended context is only implied by the tool's name and formula, not stated.

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

bootstrapA
Read-only

General bootstrap inference: nonparametric, cluster, block. Percentile/BCa/normal CIs. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Observations (or clusters/blocks) are exchangeable under the resampling scheme used; cluster= resamples whole clusters, block= preserves within-block ordering for serial dependence; The statistic callable is a smooth, well-defined functional of the data so its sampling distribution is approximable by resampling; BCa intervals further assume an estimable bias/acceleration; percentile/normal CIs assume approximate pivotality of the resampled distribution. Pre-conditions: statistic is a deterministic callable returning a finite scalar on any resampled DataFrame; Enough independent resampling units (rows, clusters, or blocks) to populate n_boot replicates; Specify cluster= or block= when data are clustered/serially dependent rather than iid. Failure modes: Few clusters yields anti-conservative CIs / wildly unstable bootstrap distribution -> Use a wild cluster bootstrap with Rademacher weights when the number of clusters is small (<~40); Statistic raises or returns NaN on a resample (e...

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
clusterNoCluster variable for cluster bootstrap
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
ci_methodNoCI methodpercentile
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
statisticYesFunction f(df) -> float
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses key behaviors beyond the readOnlyHint annotation: assumptions (exchangeability, smooth functional, pivotality), pre-conditions (deterministic callable, enough resampling units), and failure modes (anti-conservative CIs with few clusters, NaN resamples). These are not inferable from the schema or annotations alone.

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 core purpose ('General bootstrap inference: nonparametric, cluster, block...') followed by clearly labeled sections (Validation, Assumptions, Pre-conditions, Failure modes). Each sentence carries technical content without fluff, though the description is long and ends mid-sentence ('e...') due to truncation.

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-value documentation is not required. The description covers validation tiers, assumptions, pre-conditions, and failure modes, which is thorough for a complex inference tool. The notable gap is the block-mode mismatch: the description repeatedly tells the agent to specify cluster= or block=, but the schema only offers cluster, which could confuse an agent attempting to use block.

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 100%, so baseline is 3, but the description adds meaningful semantics: it clarifies what cluster does ('resamples whole clusters') and what block would do ('preserves within-block ordering'), and defines constraints on statistic ('deterministic callable returning a finite scalar'). However, it references a 'block' mode that does not appear in the input schema, which slightly reduces the added value.

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 'General bootstrap inference: nonparametric, cluster, block' with explicit CI methods (percentile/BCa/normal). This clearly identifies the tool's purpose and distinguishes it from related siblings like wild_cluster_bootstrap, especially since the failure modes section references that alternative directly.

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 states 'Specify cluster= or block= when data are clustered/serially dependent rather than iid' and gives failure-mode guidance: 'Few clusters yields ... -> Use a wild cluster bootstrap with Rademacher weights when the number of clusters is small (<~40)'. This tells an agent exactly when to use this tool vs alternatives.

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

borusyak_jaravel_spiessA
Read-only

Borusyak, Jaravel & Spiess (2024) imputation DID estimator. Do NOT use when: no never-treated or not-yet-treated observations remain -- the imputation model cannot be fit; the design is a simple 2x2 -- use sp.did(method='2x2'). Assumptions: Conditional parallel trends between treated and comparison groups absent treatment; No anticipation of treatment before its onset; Treatment effects may be heterogeneous across cohorts and time (no homogeneity required). Pre-conditions: Panel or repeated cross-section with a unit (or group) identifier and a time identifier; At least one never-treated or not-yet-treated comparison group; Pre-treatment periods to assess parallel trends. Failure modes: Pre-treatment event-study coefficients are jointly non-zero (pre-trend violation) -> Use honest DiD bounds to quantify robustness to trend violations, or condition on covariates; Two-way fixed-effects estimate is contaminated by 'forbidden' comparisons / negative weights -> Use a heterogeneity-robust estimator (Callaway-Sant'Anna, Borusyak et al., Gardner two-stage); Pre-trend joint test p < 0.05 (or underpowered at 0.10) -> Use sp.sensitivity_rr (Rambachan & Roth honest CI) or switch to sp.callaway...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable name.
feNoWhich fixed effects the Y(0) model carries, replacing the default two-way ``unit + time``. Mirrors Stata ``did_imputation``'s ``fe()``. Each entry is one fixed effect, written either as a bare column or Stata-style with ``#`` for the interacted cell:: fe=['time'] # period FE only fe=['unit', 'state#year'] # unit FE + state-by-year FE fe=[] # no fixed effects at all Levels are factorized over the whole panel, so a cell seen only among treated rows still gets a column and is imputed rather than silently absorbing the reference level.
vceNoStandard-error mode for the overall ATT. ``'analytic'`` is the exact Borusyak--Jaravel--Spiess variance: the estimator is linear in the outcome, so its weights are computed rather than approximated, and the result reproduces Stata ``did_imputation`` and R ``didimputation`` to ~5e-8. Before v1.23.0 this path used an approximation that was materially anti-conservative (18-36% too small on the harness fixtures); see MIGRATION.md. Measured, not asserted. On a homogeneous-effect design with a never-treated half, 400-800 replications per cell: =========== ========== ==================== clusters coverage mean SE / sd(est) =========== ========== ==================== 30 0.925 0.985 60 0.938 0.936 120 0.948 0.978 240 0.935 1.007 480 **0.950** 0.983 =========== ========== ==================== Two things to read off it. The ratio sits at 1 throughout, so the variance formula carries no systematic bias -- the approximation it replaced ran 18-36% low. And coverage reaches nominal by 480 clusters, so the shortfall at 60 is a small-cluster effect rather than a missing term: there the standard error is simply *noisy* (dispersion 9.2% against 3.2% at 480), which fattens the studentised distribution (sd(t) = 1.04 against 1.007). A ``t(G-1)`` critical value barely helps (0.938 to 0.941 at G = 60) because the problem is the variability of the standard error, not the degrees of freedom. ``vce='bootstrap'`` is the remedy in small designs, and ``se_method='auto'`` selects it below 30 clusters. ``'bootstrap'`` resamples whole clusters and re-runs the full imputation estimator. Point estimates are identical either way; per-horizon event-study SEs are unaffected.analytic
timeYesTime period column.
alphaNoSignificance level for confidence intervals.
groupYesUnit identifier column.
hetbyNoStata ``did_imputation, hetby(varname)``: report heterogeneous overall ATTs by the levels of a **time-invariant** unit-level variable. Results land in ``model_info['hetby']`` (one row per
min_nNoStata ``did_imputation, minn(#)``: drop event-study horizons with fewer than ``min_n`` treated observations (they are noisy and dominated by a single cohort). Dropped horizons are listed in a warning and excluded from the pre-trend test.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of cluster-bootstrap replications when ``vce='bootstrap'``.
clusterNoVariable for cluster-robust standard errors. Defaults to ``group`` (unit-level clustering).
horizonNoRelative time periods for event study estimates, e.g. ``list(range(-5, 6))``. If ``None``, reports only the overall ATT (no event study disaggregation).
projectNoproject parameter (Optional[List[str]]).
balancedNoStata ``did_imputation, hbalance``: keep only eventually-treated units observed at *every* requested horizon, so the event-study composition is stable across ``k`` (no cohort churn). Never-treated units are always kept. Requires ``horizon`` (or ``pretrends``). Warns with the number of units dropped.
controlsNoContinuous time-varying controls, entering the Y(0) model additively. Stata ``did_imputation``'s ``controls()``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
boot_seedNoSeed for the cluster bootstrap (deterministic results).
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
pretrendsNoStata ``did_imputation, pretrends(k)``: estimate the ``k`` pre-treatment placebo coefficients (horizons ``-k .. -1``, added to ``horizon`` if not already requested) and report their joint Wald test in ``model_info['pretrend_test']``. Under the default ``pretrend_method='bjs'`` the test uses the full cluster-robust covariance of the auxiliary lead regression; under the other conventions it assumes the lead estimates are uncorrelated (valid but conservative), and :func:`statspai.bjs_pretrend_joint` gives the covariance-aware cluster-bootstrap version.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
se_methodNoShared DiD spelling for ``vce=`` -- ``'analytic'``, ``'bootstrap'`` (also ``'cluster'``, ``'pairs'``) or ``'auto'``. Passing both raises. ``'auto'`` picks the cluster bootstrap when the design has at most 30 clusters (Cameron, Gelbach & Miller 2008) and the analytic BJS variance otherwise: with few clusters the cluster-score sum behind any sandwich is itself noisy, which is a small-cluster problem rather than a defect in the formula.
first_treatYesColumn indicating the period of first treatment. Use ``np.inf``, ``np.nan``, or ``0`` for never-treated units.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
save_weightsNoStata ``did_imputation, saveweights()``: store the exact estimation weights ``w`` such that ``ATT = w'y`` in ``model_info['estimation_weights']`` (aligned with the rows of ``data``). Treated rows get ``1/N1``; untreated rows get the (negative) imputation weights implied by the FE projection -- useful for diagnosing which comparisons drive the estimate.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
save_residualsNoStata ``did_imputation, saveresid()``: store the untreated-fit residuals ``y - y0`` in ``model_info['residuals']`` (aligned with the rows of ``data``; ``NaN`` on treated rows, whose ``y - y0`` is the treatment effect, not a residual).
pretrend_methodNoHow the **pre-treatment** event-study coefficients are built. The post-treatment coefficients are imputation residuals either way; only the leads differ, and the difference is visible in the plot rather than in the ATT. - ``'bjs'`` -- the convention of Stata ``did_imputation, pretrends(k)``: an auxiliary dynamic TWFE regression on the untreated observations, with all relative times earlier than the requested leads pooled into the omitted category. Reproduces Stata's coefficients and standard errors. Not available with ``fe=``, ``unit_covariates=`` or ``time_covariates=``. - ``'in-sample'`` -- average the imputation residuals at pre-treatment relative times, as ``fect`` and ``did2s`` do. These are in-sample prediction errors: in a non-staggered design they equal the symmetric benchmark times the untreated unit share ``N0/N``, so they understate pre-trends, severely when most units are treated. This was StatsPAI's behaviour before v1.23.0. - ``'symmetric'`` -- Roth's (2026) repair, which uses the average of the pre-treatment periods as the reference for both halves of the path, so the plot matches a dynamic TWFE event study up to a common vertical shift and the usual visual heuristics apply. Non-staggered balanced designs without covariates only; raises otherwise rather than applying an unverified factor. The chosen convention and its caveat are recorded in ``model_info['pretrend_method']`` and ``model_info['event_study_convention']``.bjs
time_covariatesNoControls interacted with the **period** fixed effects, i.e. one coefficient per period. Stata's ``timecontrols()``. Typically a time-invariant unit characteristic whose effect is allowed to move over calendar time.
unit_covariatesNoControls interacted with the **unit** fixed effects, i.e. one slope per unit. Stata's ``unitcontrols()``. The canonical use is ``unit_covariates=[time_col]``, which makes Y(0) carry unit-specific linear trends. Identification bites hard here: a unit-specific slope needs at least two untreated periods for that unit, so early-treated cohorts can lose their imputation entirely.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark the tool readOnlyHint=true, so the description doesn't need to repeat that. It adds behavioral context: the imputation model cannot be fit without a comparison group, pre-trend violations invalidate the estimate, and forbidden TWFE comparisons motivate switching estimators. This goes beyond annotations and helps the agent anticipate failure modes.

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 description is long but organized into 'Do NOT use when', 'Assumptions', 'Pre-conditions', and 'Failure modes' sections, front-loading the most decision-relevant information. However, it ends with a trailing ellipsis ('sp.callaway...'), suggesting truncation, and the density is high enough that an agent must parse a wall of text.

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 complex estimator with 29 parameters, the description covers when to use, when not, assumptions, pre-conditions, and failure-mode remedies. It doesn't describe return values, but an output schema exists, and the schema covers all parameters. The only gap is that it doesn't give a minimal invocation example or explain the payload structure, but that's covered elsewhere.

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?

All 29 parameters have schema descriptions (100% coverage), so the baseline is 3. The tool description itself does not describe any parameters; it focuses on estimator selection and diagnostics. It doesn't compensate for parameter semantics, but it doesn't need to given the 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 description opens by naming the estimator precisely ('Borusyak, Jaravel & Spiess (2024) imputation DID estimator'), and the 'Do NOT use when' block immediately contrasts it with sp.did(method='2x2') and other heterogeneity-robust estimators. This gives an agent a clear, distinct purpose even among many DiD siblings.

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 states when not to use the tool (no never-treated/not-yet-treated observations, simple 2x2) and names alternatives (sp.did(method='2x2'), honest DiD bounds, Callaway-Sant'Anna, Gardner two-stage, sp.sensitivity_rr, sp.callaway). It also lists assumptions and pre-conditions, so an agent can verify suitability before calling.

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

boundary_rdA
Read-only

User-friendly alias for :func:sp.rd2d (boundary discontinuity design). Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoBandwidth used for local smoothing or kernel weighting.
pNop parameter (int).
yYesOutcome variable column name or outcome array.
x1Yesx1 parameter (str).
x2Yesx2 parameter (str).
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
n_evalNoNumber of eval.
approachNoapproach parameter (str).distance
boundaryNoboundary parameter (Optional[Callable]).
bwselectNobwselect parameter (str).mserd
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesTreatment indicator, treatment variable, or treatment array.
eval_pointsNoeval_points parameter (Optional[numpy.ndarray]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

The annotations already declare readOnlyHint=true, so the description carries no contradiction. It adds substantial behavioral context: assumptions (continuity, no manipulation, monotonicity), pre-conditions (continuous running variable, sufficient N), failure modes (density jumps, bandwidth sensitivity) with recommended next steps (rdplotdensity, bandwidth-sensitivity curve), and a typical minimum N of 500. This goes well beyond the structured 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?

The description is long but structured with clear sections (Assumptions, Pre-conditions, Failure modes, Alternatives) and is front-loaded with the alias and purpose. Every section adds actionable information; there is no fluff. It is dense but appropriately so for a complex econometric tool.

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 tool with 19 parameters and an output schema, the description covers the essential context: assumptions, pre-conditions, failure modes with remedies, alternatives, and minimum sample size. It does not explain return values, but the output schema is present. This is complete for an agent to correctly invoke the tool and interpret results in context.

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 100%, so the schema already documents all parameters. The description adds value by advising on bandwidth selection ('use a data-driven MSE-optimal bandwidth') and referencing the bandwidth parameter (h) and bwselect, but it does not elaborate on most parameters. It provides meaningful guidance for key parameters without repeating schema text.

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 it is a 'User-friendly alias for sp.rd2d (boundary discontinuity design)', which is a specific verb-resource combination. It clearly identifies the underlying method and names distinct alternatives (sp.rdrobust, sp.rdrandinf, sp.rdbwselect), so an agent can differentiate it from siblings.

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 provides explicit alternatives and lists pre-conditions and failure modes that guide when to use the tool. However, it does not give explicit conditions for choosing between this and the alternatives (e.g., when to prefer rdrobust over boundary_rd). The guidance is strong but not exhaustive on selection criteria.

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

breakdown_frontierA
Read-only

Masten-Poirier (2021) breakdown frontier for qualitative conclusions. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Only weak (set-identifying) assumptions are imposed; the result is an interval, not a point; Lee bounds add monotonicity of selection; Oster's delta adds proportional selection on observed vs. unobserved. Pre-conditions: The data needed for the point-identifying analysis, plus the weakest credible identifying restriction; For Lee bounds: a binary selection/attrition indicator. Failure modes: Bounds are too wide to be informative -> Add a credible auxiliary restriction (monotone treatment response, instrument) to tighten the bounds. Alternatives: sp.oster_delta, sp.lee_bounds, sp.manski_bounds. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
seYesStandard error of the estimate.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_gridNoGrid resolution for the frontier.
estimateYesPoint estimate of the treatment effect.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
assumptionNoLabel for the identifying assumption being relaxed. Currently supports a generic linear violation model applicable to ``'parallel_trends'``, ``'exclusion_restriction'``, or ``'selection_on_observables'``.parallel_trends
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
max_violationNoMaximum magnitude of the assumption violation to explore.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses key behavioral traits: the result is an interval, not a point; assumptions are weak; failure modes are described (bounds too wide); and typical minimum N is noted. This gives the agent a clear picture of what the tool returns and when it may be uninformative, without contradicting 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?

The description is well-structured with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and front-loads the core purpose. Each section provides useful information, but the text is somewhat dense; a few details (e.g., validation tiers) could be trimmed without loss of essential guidance.

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 high schema coverage, the description provides sufficient context: purpose, assumptions, pre-conditions, failure modes, alternatives, and minimum sample size. It covers the domain-specific knowledge an agent needs to call the tool correctly, though it does not go into error-handling or output interpretation (covered by schema).

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?

The input schema has 100% description coverage, so the baseline is 3. The description does not directly map parameters (e.g., assumption, n_grid, detail) to the full schema, but it does provide conceptual context around the identifying assumption and pre-conditions. It adds some semantic value but does not compensate beyond the schema's thorough documentation.

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 method (Masten-Poirier breakdown frontier) and its purpose (qualitative conclusions), and explicitly lists sibling alternatives (sp.oster_delta, sp.lee_bounds, sp.manski_bounds), making it distinguishable. It does not include an explicit verb like 'computes' or 'calculates', but the tool name and context clearly imply the action.

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 provides clear context by detailing assumptions (weak set-identifying, interval result, Lee/Oster additions), pre-conditions (data for point-identifying analysis, binary selection for Lee bounds), and failure modes (bounds too wide -> add auxiliary restriction). It names alternatives and their distinguishing properties, but does not explicitly state 'use this when X' or 'use alternative Y instead when Z', leaving some inference to the agent.

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

breakdown_mB
Read-only

Compute the breakdown value of M. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Conditional parallel trends between treated and comparison groups absent treatment; No anticipation of treatment before its onset; Treatment effects may be heterogeneous across cohorts and time (no homogeneity required). Pre-conditions: Panel or repeated cross-section with a unit (or group) identifier and a time identifier; At least one never-treated or not-yet-treated comparison group; Pre-treatment periods to assess parallel trends. Failure modes: Pre-treatment event-study coefficients are jointly non-zero (pre-trend violation) -> Use honest DiD bounds to quantify robustness to trend violations, or condition on covariates; Two-way fixed-effects estimate is contaminated by 'forbidden' comparisons / negative weights -> Use a heterogeneity-robust estimator (Callaway-Sant'Anna, Borusyak et al., Gardner two-stage). Alternatives: sp.callaway_santanna, sp.did, sp.honest_did. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
eNoRelative time period.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimator or algorithm variant to use.smoothness
resultYesDID result with event study.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

The description adds substantial context beyond the readOnlyHint annotation: it details validation tiers, assumptions, pre-conditions, and failure modes, including explicit remedies. This helps the agent understand what the tool checks and what might invalidate its output. It does not contradict annotations and provides real behavioral insight into the tool's internal logic.

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 well-structured with clearly labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical N) and is front-loaded with the core purpose. While it is relatively long, every section contributes useful operational context, and there is no filler or repetition.

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 tool with 10 parameters and an output schema, the description covers a great deal of necessary context: validation standards, assumptions, pre-conditions, failure modes, alternative estimators, and a minimum sample size. The only notable gap is the undefined term 'M', which could affect an agent's understanding of when this tool is applicable, but this is more a purpose-clarity issue than a completeness gap.

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?

The input schema already provides 100% coverage with descriptions for every parameter, so the baseline is 3. The description does not add any additional meaning to the parametersβ€”for example, it does not explain what the 'method' variants (smoothness vs. others) imply for the breakdown calculation, nor does it clarify the role of 'e' (relative time period) in the computation.

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 states a clear action ('Compute the breakdown value of M') but never defines what M represents, leaving the agent without the key semantic context. It also does not differentiate this tool from its sibling 'breakdown_frontier' or other robustness/sensitivity tools, which could lead to mis-selection.

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?

Pre-conditions and failure modes imply when the tool is appropriate (it requires a DID result with an event study, never-treated comparison groups, pre-treatment periods, etc.), but the description does not explicitly state when to choose this tool over its named alternatives (sp.callaway_santanna, sp.did, sp.honest_did). Those alternatives are presented only as responses to specific failure modes, not as general guidance on tool selection.

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

bridgeA
Read-only

Unified dispatcher for six causal-inference bridging theorems (2025-2026): DiD==SC (Shi-Athey), EWM==CATE (Ferman), IPW==DR==CB (Zhao-Percival), Bunching==RDD (Lu-Wang-Xie), DR-via-Calibration (Zhang), Long-term-surrogate==PCI (Imbens-Kallus-Mao-Wang). Reports both path estimates + doubly-robust recommendation. Assumptions: The two estimation paths being bridged target the same causal estimand under the chosen bridging theorem (e.g., DID = synthetic control for kind='did_sc'); Each path's own identification holds (parallel trends / SC convex-hull / proximal completeness, depending on kind), so a non-rejected agreement test is meaningful; The doubly-robust combined estimate is consistent if at least one of the two bridged paths is correctly specified. Pre-conditions: kind is one of the supported bridges and the matching per-bridge kwargs are supplied; Panel/data shape matches the chosen bridge (e.g., did_sc needs unit, time, treated_unit, treatment_time); Both paths are estimable on the same sample so the agreement test is well-defined. Failure modes: Agreement test rejects: the two paths give materially different estimates -> Treat divergence as evidence one bridging assumption fa...

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesWhich bridge to invoke
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint annotation by disclosing assumptions (e.g., target estimand must match), pre-conditions (data shape, kwargs), and failure modes (agreement test rejection implies assumption violation). It also mentions the doubly-robust property of the combined estimate. This is rich behavioral disclosure that helps an agent anticipate outcomes.

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 longer than the minimal ideal but each section (purpose, assumptions, pre-conditions, failure modes) earns its place for a complex dispatcher. It is front-loaded with the core purpose and then abuts relevant usage constraints. Slightly verbose but not 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?

Given the tool's complexity and the presence of an output schema, the description is comprehensive: it lists all six bridge types, specifies assumptions and pre-conditions, and mentions failure modes. It does not need to explain return values because the output schema exists. It equips an agent with enough to invoke the tool 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 coverage is 100%, so the baseline is 3. The description adds valuable parameter-related context, such as the meaning of the 'kind' values (mapping theorem pairs) and giving an example of required columns for 'did_sc'. This goes beyond the schema's 'Which bridge to invoke' and helps agents map inputs to the correct bridge.

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?

Clearly states it is a 'unified dispatcher' for six specific causal-inference bridging theorems, naming each pairing (e.g., 'DiD==SC', 'IPW==DR==CB'). The verb 'bridge' and resource are specific, and the description distinguishes it from single-estimator siblings by focusing on path estimates plus a doubly-robust recommendation.

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 clear context on when it applies: it enumerates the six bridge types, states pre-conditions (per-bridge kwargs, panel shape) and references failure modes. It does not explicitly name alternative tools to use instead when one only needs a single estimator, but the specification of bridging targets implicitly guides selection.

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

briefA
Read-only

One-line agent-friendly brief for a fitted result. Cheaper than calling brief_result if you already have the result object in scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNo
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so no mutation warning is needed. The description adds useful cost/behavior context ('Cheaper', 'one-line') and a scope prerequisite, but does not disclose deeper behavior such as caching, data loading, or failure modes, which matters given the tool can also accept data_path and result_id.

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 two sentences with no filler. It front-loads what the tool does, then adds the key comparative guidance about cost and alternative. Every sentence serves a distinct purpose.

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 description is adequate for a tool with rich parameter schemas and an output schema, but it leaves ambiguity around what 'result object in scope' means operationally and how an agent should invoke the tool to access that object. The contrast with brief_result helps, but the core prerequisite is not fully specified.

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 83%, so the parameter documentation already carries most of the burden. The description adds little about parameters, mainly the 'result object in scope' context, which is not directly mapped to any schema property. This is a typical baseline where the schema already explains parameters adequately.

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 clearly states the tool produces a 'one-line agent-friendly brief for a fitted result' and explicitly contrasts it with the sibling 'brief_result', including the condition that selects between them. This is enough for an agent to understand the tool's role and distinguish it from related tools.

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 names the alternative 'brief_result' and gives a concrete condition: use this tool when you already have the result object in scope because it is cheaper. It implies the alternative for other cases, but does not explicitly spell out when not to use it, so it is clear but slightly implicit.

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

brief_resultA
Read-only

Return the one-line agent-friendly brief for a fitted result. Uses sp.brief(). Useful when an agent wants to summarise a chained workflow without paying for the full JSON payload again.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idYesHandle to a previously-fitted result.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With readOnlyHint=true, the annotation already covers the safety profile. The description adds some useful contextβ€”'one-line', 'agent-friendly', and avoiding a full JSON payloadβ€”but it does not go much beyond that. It also does not mention the optional caching side effect of as_handle, which is documented only in the 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?

The description is compact and front-loaded. The first sentence states the core purpose, and the second adds the implementation detail plus the key usage scenario. No unnecessary repetition or 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 selection and invocation, the description is sufficient: it names the required result_id concept, the one-line output, and the chaining use case. The rich schema covers the parameters and the output schema covers return shape. However, the description does not explain why data_path, data_columns, and data_sample_n appear on a tool that reads fitted results, which could confuse an agent.

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 100%, and the parameter descriptionsβ€”especially detail with token estimates and as_handle with chaining behaviorβ€”are rich. The tool description itself adds little parameter-level meaning beyond framing result_id as a 'previously-fitted result', so the schema carries the weight.

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 clearly states a specific action and resource: 'Return the one-line agent-friendly brief for a fitted result.' It also signals the output format and context, and distinguishes itself from the broader 'brief' sibling by focusing on fitted results and agent-friendly summaries.

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 provides a clear use case: 'Useful when an agent wants to summarise a chained workflow without paying for the full JSON payload again.' This tells the agent when to call the tool, though it does not explicitly name alternative tools or state when not to use it.

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

bunchingA
Read-only

Estimate bunching at a policy threshold. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: The counterfactual density would be smooth through the threshold absent the policy; Excess mass at the threshold reflects the behavioural elasticity of interest; No other discontinuity coincides with the threshold. Pre-conditions: A behavioural choice variable (earnings, hours, ...) with a known kink or notch in the budget/choice set; A visible empirical density of the running variable around the threshold. Failure modes: Round-number heaping or a coincident policy contaminates the bunching mass -> Exclude heaping points, widen the excluded region, and test the counterfactual polynomial order. Alternatives: sp.rdrobust, sp.rkd. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
dtNoChange in marginal tax rate at the kink (for elasticity). E.g., 0.10 for a 10pp increase.
alphaNoSignificance level.
designNo'kink' or 'notch'.kink
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_binsNoNumber of bins on each side of the threshold.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bin_widthNoWidth of bins. If None, computed from data range / n_bins.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
thresholdYesPolicy threshold (kink/notch point).
poly_orderNoOrder of the counterfactual polynomial.
n_bootstrapNoBootstrap iterations for standard errors.
running_varYesName of the running variable (e.g., income).
bunch_regionNo(lower, upper) bounds of the bunching region. If None, uses [threshold - 2*bin_width, threshold + 2*bin_width].
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
exclude_regionNoSame as bunch_region unless otherwise specified.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description adds significant behavioral context: validation tier, key assumptions about the counterfactual density and excess mass, pre-conditions, and failure modes with remediation steps. This goes well beyond what annotations alone provide and does not contradict them.

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 well-structured with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Every sentence contributes new information; there is no padding. It is appropriately sized for a complex econometric tool with 18 parameters.

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?

The description covers validation evidence, assumptions, pre-conditions, failure modes with concrete remedies, alternatives, and sample size guidance. An output schema exists, so return values need not be re-described. An agent has what it needs to decide whether to call this tool and how to interpret potential issues.

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 100%, so the schema already documents every parameter. The description does not add parameter-level detail beyond the schema, but it does provide general context (e.g., typical N, failure modes). Since the schema carries the burden, per calibration guidelines the baseline of 3 applies.

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 opens with a clear, specific verb and resource: 'Estimate bunching at a policy threshold.' It also names alternatives (sp.rdrobust, sp.rkd), which distinguishes this tool from related siblings without opening their schemas. The 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 Guidelines4/5

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

Pre-conditions and typical minimum N give concrete context for when the tool is appropriate. Alternatives are named, but the description does not explicitly state the deciding factors for choosing this tool over sp.rdrobust or sp.rkd. It implies use when the pre-conditions hold but stops short of 'use X if Y, otherwise Z.'

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

bvarC
Read-only

Bayesian VAR with Minnesota (Litterman) prior. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
lagsNolags parameter (int).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
lambda1NoOverall tightness (smaller = stronger shrinkage toward RW).
lambda2NoCross-variable shrinkage relative to own-lag.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

The description adds nothing about runtime behavior, side effects, or computational load beyond the readOnlyHint annotation. The 'validated evidence tier' note is about the tool's validation status, not its behavioral characteristics, so the agent gains no new disclosure.

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 a single sentence with no fluff, earning high marks for brevity. However, it is so sparse that it under-specifies the tool's purpose and behavior, so it does not fully earn its place as a standalone description.

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 complex Bayesian VAR with 9 parameters and an output schema (content unknown), the description is inadequate. It does not mention output interpretation, convergence diagnostics, or when to prefer this over simpler alternatives. The agent would need to inspect the schema or rely on prior knowledge.

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?

The input schema already provides 100% coverage of all 9 parameters with descriptions. The tool description adds no extra context about parameter interactions, typical ranges, or how lambda1/lambda2 affect the prior. Baseline 3 is appropriate given full schema coverage.

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 clearly identifies the tool as fitting a Bayesian VAR with a Minnesota (Litterman) prior, which is a specific model and distinguishes it from the frequentist 'var' sibling. However, it omits what the tool actually produces (e.g., coefficient estimates, forecasts) and gives no hint of typical use cases.

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 bvar versus other time-series tools like var, arima, or irf. No mention of alternatives, exclusions, or conditions that would make bvar the preferred choice.

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

calibrate_confounding_strengthD
Read-only

Calibrate the strength of an unobserved confounder required to

ParametersJSON Schema
NameRequiredDescriptionDefault
seYesse parameter (float).
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
estimateYesestimate parameter (float).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
target_estimateNoEffect value to explain away.
observed_r2_outcomeYesPartial-R2 of the observed covariate(s) with Y (resp. D). Used to benchmark "1x as confounding as observed" / "2x" etc.
observed_r2_treatmentYesPartial-R2 of the observed covariate(s) with Y (resp. D). Used to benchmark "1x as confounding as observed" / "2x" etc.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.7/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true, so the agent knows it is a read-only computation. The description adds nothing beyond that, not even that it takes a fitted result or data path, or how as_handle caching works. It does not contradict annotations, but it also fails to disclose any behavioral nuance beyond what annotations already provide.

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

Conciseness1/5

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

The description is a single incomplete sentence that ends abruptly. This is not conciseness but under-specification; it provides no usable structure and fails to deliver a complete thought.

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

Completeness1/5

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

For a tool with 12 parameters and a sensitivity-analysis purpose, this description is grossly incomplete. Even though an output schema exists, the agent cannot know the full purpose, what the tool returns, or how to chain it with other tools. The truncated text makes the definition nearly unusable.

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 100%, so all 12 parameters are documented in the schema. The description adds no parameter-specific meaning, and with high coverage the baseline of 3 is appropriate. The truncated description doesn't help clarify which parameters are essential or how they interact.

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

Purpose2/5

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

The description starts with a clear verb and resource ('Calibrate the strength of an unobserved confounder') but is truncated mid-sentence ('required to'), leaving the purpose incomplete. It does not fully state what the tool does or how it differs from the many sensitivity-related siblings (sensemakr, oster_bounds, sensitivity).

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

Usage Guidelines1/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 alternatives, no prerequisites (e.g., needing a fitted model or result_id), and no exclusionary statements. The description is a fragment and gives no usage context.

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

calibration_testA
Read-only

BLP-of-CATE calibration test (Chernozhukov-Demirer-Duflo-Fernandez-Val 2020). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness given the covariates; Overlap / positivity; Honesty: separate subsamples are used to choose splits and to estimate effects. Pre-conditions: Covariates, treatment, and outcome with enough data to grow an honest forest. Failure modes: Calibration test rejects -- the forest's heterogeneity is not well calibrated -> Increase the sample / number of trees, or fall back to a doubly-robust learner. Alternatives: sp.dml, sp.auto_cate, sp.tmle. Typical minimum N: 1000.

ParametersJSON Schema
NameRequiredDescriptionDefault
TNoIf not given, the forest's stored training arrays are used.
XNoIf not given, the forest's stored training arrays are used.
YNoIf not given, the forest's stored training arrays are used.
alphaNoSignificance level for reported CIs.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
forestYesforest parameter ('CausalForest').
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description goes beyond this by detailing validation tiers, assumptions, failure behavior (rejection), and typical minimum N. This adds meaningful behavioral context without contradicting 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?

The description is structured with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), making it scannable and information-dense. It is not overly verbose and gets to the point quickly with the method name up front.

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?

Given the tool's complexity, the presence of an output schema, and readOnly annotation, the description covers the essential statistical context (assumptions, failure modes, sample size guidance). It does not explain generic parameters like as_handle or data_path, but those are handled by the schema and are common across tools.

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 100%, so the baseline is 3. The description mentions 'forest' and covariates/treatment/outcome, which slightly reinforces the schema's param descriptions, but it does not add new meaning to any individual parameter beyond what the schema already states.

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?

Description states a specific verb and resource ('BLP-of-CATE calibration test') and references the 2020 paper, making the core function clear. However, it does not explicitly distinguish itself from close sibling tools like 'test_calibration' or 'blp_test', leaving some ambiguity for tool selection.

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 assumptions, pre-conditions, failure modes, and alternatives, which gives an agent strong context on when to use the tool and how to react to output. It lacks an explicit 'use this when...' statement or exclusions, but the pre-conditions and mass of guidance make usage conditions reasonably clear.

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

california_prop99C
Read-only

California Proposition 99 tobacco control dataset.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

The description adds no behavioral information beyond what the annotations already state (readOnlyHint=true). It does not explain what happens when the tool is called, whether it returns a dataset object, how it interacts with data_path/result_id, or any side effects. It neither contradicts the annotations nor enriches them.

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

Conciseness2/5

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

The description is short, but this is under-specification rather than useful conciseness. It contains no actionable structure, no purpose statement, and no information that helps the agent call the tool correctly.

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 tool with six optional parameters and an output schema, the description is far too thin. It does not state what variables or time period the dataset contains, how to access the built-in data, or why an agent would choose this tool over similar dataset or analysis tools. The output schema does not compensate for the lack of context about the dataset itself.

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 100%, with detailed parameter descriptions for detail, as_handle, data_path, result_id, data_columns, and data_sample_n. The description itself adds no parameter-level meaning, so the baseline of 3 applies.

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

Purpose2/5

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

The description is a noun phraseβ€”'California Proposition 99 tobacco control dataset'β€”that essentially restates the tool name without a verb or operation. It does not tell the agent whether this tool loads, returns, summarizes, or processes the dataset, nor does it distinguish it from the sibling 'california_tobacco'.

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 many sibling data/estimation tools. No context is given about use cases, alternatives, or exclusions, so the agent must infer from the name alone.

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

california_tobaccoB
Read-only

California Proposition 99 tobacco dataset (simulated, extended).

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

The readOnlyHint=true annotation already covers the safety profile, so the description carries a lighter burden. It adds useful context that the data is simulated and extended, which matters for interpretation, but it does not disclose loading behavior, return shape, or any caching semantics beyond what the schema already provides.

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 a single, waste-free sentence with the key resource name and qualifiers front-loaded. It is not overly verbose, though the noun-phrase structure leaves the action implicit and sacrifices some helpfulness for brevity.

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 and fully documented parameter schema reduce the burden on the description, and readOnlyHint covers side-effect concerns. However, the description does not say what columns, years, or units the dataset contains, nor exactly how the 'extended' simulated version differs from california_prop99, which is central to selecting this data 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 description coverage is 100%, so all six parameters are already documented in the schema. The tool description itself adds no parameter-specific meaning, which is acceptable given the baseline of 3 when the schema does the heavy lifting.

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 identifies a specific resource: the California Proposition 99 tobacco dataset, with the qualifiers 'simulated, extended'. Although it is a noun phrase rather than an action verb like 'Loads' or 'Returns', it clearly distinguishes this tool from the sibling california_prop99 by signaling that the data is synthetic and expanded.

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 california_prop99 or other dataset loaders. The qualifiers 'simulated, extended' imply it is meant for scenarios needing synthetic or expanded data, but no alternatives, exclusions, or conditions are stated.

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

callaway_santannaA
Read-only

Staggered DID (Callaway-Sant'Anna 2021): group-time ATT with doubly-robust, IPW, or regression-adjusted estimators. Robust to heterogeneous treatment effects where TWFE fails. Requires a cohort column g (first-treatment period; 0 = never-treated). Validation: certified evidence with scoped limitations. Known limitations: clustervars is not yet supported with bstrap=False; the analytic standard errors do not account for within-cluster dependence, so the multiplier bootstrap is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
gYesFirst-treatment-period cohort column (0 for never-treated).
iYesUnit ID column
tYesTime column
yYes
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
estimatorNodr
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
control_groupNonevertreated
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description's burden is reduced, but it adds value by disclosing specific limitations: clustervars not supported with bstrap=False, analytic standard errors ignoring cluster dependence, and the necessity of multiplier bootstrap. This goes beyond the annotations and helps the agent anticipate constraints. The vague 'Validation: certified evidence' line is a minor detractor.

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 a single, compact sentence that front-loads the core method and purpose, then tacks on necessary limitations and requirements. It avoids redundancy with the schema for most parameters. The 'Validation: certified evidence' phrase is filler but not harmful. Overall, it's appropriately sized and efficient.

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?

Given the tool's complexity (12 parameters, DID estimation) and the presence of an output schema, the description covers the essential method, required inputs (g, i, t, y implied), and known limitations. It does not explain the detail parameter's role in payload depth, but that is in the schema. The description, combined with a rich schema and annotations, is adequate for an agent to call the tool correctly.

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 75%, which is below the 80% threshold, so the description should compensate for undocumented parameters. It does explain the g parameter's role (cohort column) and the estimator options (dr/ipw/reg), but it offers no additional meaning for other parameters like detail, as_handle, or control_group. The schema already covers most of g and estimator, so the description adds marginal value beyond the schema.

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 clearly identifies the tool as a Callaway-Sant'Anna staggered DID estimator computing group-time ATTs with three estimator options (doubly-robust, IPW, regression-adjusted). It states the method's advantage over TWFE, which helps disambiguate from many DID siblings. However, it does not explicitly name any sibling (e.g., staggered_cs, stacked_did) to differentiate from, so it's not a perfect 5.

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 usage when TWFE fails or heterogeneous treatment effects are present ('Robust to heterogeneous treatment effects where TWFE fails'), but it does not explicitly state when not to use it or name alternative tools. The 'Requires a cohort column g' is a prerequisite but not a usage guideline. This falls under implied usage rather than explicit routing.

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

cardinality_matchB
Read-only

Cardinality matching -- maximise the number of matched pairs subject Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness: treatment is as-good-as-random given the measured covariates; Overlap / common support: every unit has a non-degenerate probability of each treatment; The covariate set blocks all back-door paths. Pre-conditions: Pre-treatment covariates measured for treated and control units; A binary (or low-cardinality) treatment indicator; Sufficient covariate overlap between treatment arms. Failure modes: Poor overlap -- extreme propensity scores or few acceptable matches -> Trim or restrict to the common-support region and report the discarded units; Covariate imbalance remains after matching/weighting -> Re-specify the balancing model (CBPS, entropy balancing) and re-check standardized mean differences. Alternatives: sp.propensity_score, sp.cbps, sp.ebalance, sp.dml. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable column name or outcome array.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesTreatment indicator, treatment variable, or treatment array.
covariatesYesCovariate matrix, DataFrame, or column names.
time_limitNotime_limit parameter (float).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
smd_toleranceNosmd_tolerance parameter (float).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds meaningful behavioral context: assumptions, pre-conditions, failure modes with concrete remedies (trim/restrict common support, re-specify balancing model), and a typical minimum N. It also references a validation tier, which hints at output behavior beyond what annotations alone provide. No contradiction exists.

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 description uses labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), which helps navigation. However, it is dense, the opening sentence is grammatically broken ('subject Validation:'), and the 'Validation' line is cryptic and not clearly valuable. It is structured but not as concise or well front-loaded as it could be.

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?

Given the rich input schema and presence of an output schema, the description need not explain return values. It covers assumptions, preconditions, failure modes, alternatives, and sample-size guidance. However, it does not explain what makes cardinality matching different from sibling methods, so an agent lacks enough contextual information to decide when this tool is the right choice.

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 100%, so the schema already documents all parameters. The description adds little about parameters beyond reiterating conditions like 'pre-treatment covariates measured for treated and control units' and 'binary (or low-cardinality) treatment indicator', which loosely map to covariates and treatment but do not meaningfully enhance parameter-level understanding.

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 cardinality matching as 'maximise the number of matched pairs' but does not state in a clear verb+resource form what the tool does. It distinguishes itself from some matching alternatives by name, but the opening sentence is incomplete and the method is not explicitly defined, leaving the agent to infer the core operation.

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?

Pre-conditions (pre-treatment covariates, binary/low-cardinality treatment, overlap) and alternatives (propensity_score, cbps, ebalance, dml) imply when the tool may be used, but no explicit guidance is given for choosing cardinality_match over those alternatives. It does not say when this tool should be avoided or which sibling is preferable in a given scenario.

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

cate_by_groupA
Read-only

Group-level average treatment effects. Assumptions: Unconfoundedness given the covariates; Overlap / positivity across the covariate space; Nuisance functions are estimated consistently; cross-fitting controls overfitting bias. Pre-conditions: Covariates, a treatment indicator, and an outcome for each unit; Enough data to fit flexible nuisance models with sample-splitting / cross-fitting. Failure modes: CATE estimates are unstable or extrapolate beyond the covariate support -> Restrict to the overlap region, increase data, or use a doubly-robust learner (DR-/R-learner). Alternatives: sp.dml, sp.causal_forest, sp.tmle. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
byYesColumn name to group by, or 'cate' to group by CATE quartiles.
alphaNoSignificance level for CIs.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from ``metalearner()`` / ``tarnet()``, a fitted ``causal_forest()`` model, or a raw array of per-unit CATE estimates.
n_groupsNoNumber of quantile groups when ``by='cate'`` or when the grouping variable is continuous.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description builds on that by explaining assumptions like unconfoundedness and overlap, as well as failure modes such as unstable estimates or extrapolation beyond covariate support. It also discloses that cross-fitting is used to control overfitting bias, which is useful behavioral context beyond 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?

The description is compact and front-loaded with the core purpose, followed by assumptions, preconditions, failure modes, and alternatives. It is dense but efficient; a small deduction is warranted because some content, such as the specific alternative tool names, could be more actionable.

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?

The input schema and output schema already cover parameter semantics and return value shape, so the description does not need to repeat them. The description usefully adds assumptions, preconditions, failure modes, and a sample-size guideline. It is slightly incomplete in not giving clearer guidance for selecting among the many sibling CATE-related tools.

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?

The input schema has 100% description coverage, so the baseline of 3 applies. The main description does not add parameter-level detail beyond what the schema already documents, but the schema itself clearly explains 'by', 'result', 'detail', and the other parameters.

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 'Group-level average treatment effects,' which clearly identifies the resource and the operation domain. It is understandable on its own, but it lacks an explicit verb such as 'estimates' or 'computes,' and it does not explicitly distinguish this from sibling tools like cate_summary, cate_plot, or cate_group_plot.

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 provides assumptions, preconditions, failure modes, and a typical minimum N, which give useful context for when the tool is appropriate. However, it never explicitly states when to choose this tool over alternatives, and the Alternatives line lists names without conditions and with names ('sp.dml', etc.) that do not match the provided sibling tool list.

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

cate_evalA
Read-only

Evaluate any CATE estimator via RATE / AUTOC / Qini (Yadlowsky 2025). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness given the covariates; Overlap / positivity across the covariate space; Nuisance functions are estimated consistently; cross-fitting controls overfitting bias. Pre-conditions: Covariates, a treatment indicator, and an outcome for each unit; Enough data to fit flexible nuisance models with sample-splitting / cross-fitting. Failure modes: CATE estimates are unstable or extrapolate beyond the covariate support -> Restrict to the overlap region, increase data, or use a doubly-robust learner (DR-/R-learner). Alternatives: sp.dml, sp.causal_forest, sp.tmle. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
TYesObserved outcome and binary treatment.
XNoRequired if any of ``e_hat / m_hat / mu1_hat / mu0_hat`` is None; cross-fit nuisances are estimated with GBM defaults.
YYesObserved outcome and binary treatment.
cateYesEstimated CATE :math:`\hat\tau(X_i)` from any estimator.
clipNoPropensity clip.
alphaNoSignificance level for confidence intervals and tests.
e_hatNoPre-computed nuisance predictions (e.g., from the same estimator that produced ``cate``). If provided, no internal cross-fitting runs.
m_hatNoPre-computed nuisance predictions (e.g., from the same estimator that produced ``cate``). If provided, no internal cross-fitting runs.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
q_gridNoGrid of q values to evaluate.
targetNoWhich scalar headline to emit; both are computed and returned.AUTOC
mu0_hatNoPre-computed nuisance predictions (e.g., from the same estimator that produced ``cate``). If provided, no internal cross-fitting runs.
mu1_hatNoPre-computed nuisance predictions (e.g., from the same estimator that produced ``cate``). If provided, no internal cross-fitting runs.
n_foldsNoNumber of cross-fitting or cross-validation folds.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With readOnlyHint=true already covering the non-destructive nature, the description still adds substantial value: it discloses validation evidence tiers, statistical assumptions, cross-fitting requirements, and failure-mode responses. This goes well beyond the annotations alone.

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 compact and well-sectioned, front-loading the core purpose before assumptions, preconditions, and failure modes. The 'Typical minimum N: 500' line is slightly extraneous but not wasteful, and the label-based structure makes the information easy to scan.

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?

Given the tool's complexity β€” 20 parameters, an output schema, and many siblings β€” the description covers the essential non-schema context: assumptions, evidence validation, preconditions, and failure handling. It does not need to explain return values because an output schema exists, though it could have explicitly mapped parameter names like T and Y to treatment/outcome roles.

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 100%, so the baseline is 3 even without parameter details in the description. The description mentions treatment, outcome, covariates, and nuisance functions generically, but it does not disambiguate the schema's confusingly identical T and Y descriptions. It neither harms nor meaningfully enriches the schema's parameter explanations.

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 first sentence states a specific action and resource: 'Evaluate any CATE estimator via RATE / AUTOC / Qini.' This clearly distinguishes it from estimation-focused siblings like sp.causal_forest or tmle, while the alternatives section reinforces its evaluation role.

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 provides clear context: use this after obtaining CATE estimates, with pre-conditions such as covariates, treatment, outcome, and sufficient data. It names alternatives (sp.dml, sp.causal_forest, sp.tmle) but does not explicitly state when to choose them over cate_eval, so it falls just short of full routing guidance.

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

cate_group_plotB
Read-only

Plot group-level CATEs with confidence intervals.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
colorNocolor parameter (str).#2C3E50
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
figsizeNofigsize parameter (tuple).
group_dfYesOutput from ``cate_by_group()``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the description need not restate that this is a safe read operation. The description adds minimal context: it indicates the plot includes confidence intervals, which is helpful but does not disclose behavioral traits like what happens with missing data, how the plot is returned, or whether it caches results. Since annotations cover the safety profile, a score of 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.

Conciseness5/5

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

The description is a single sentence with no filler or redundant information. It is front-loaded with the primary purpose and does not waste tokens. This is an exemplary level of conciseness.

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?

Despite having an output schema and comprehensive parameter descriptions, the main description is too sparse to provide adequate context for an 11-parameter visualization tool. It does not mention the relationship to cate_by_group, how to interpret the output, or any usage scenario. While the schema carries some burden, the description should at least orient the agent on when and how to use the tool; it currently leaves too much implicit.

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 100%, so all 11 parameters are documented in the schema. The description itself adds no parameter-specific meaning beyond the schema. According to the calibration, with high schema coverage the baseline is 3, and the description does not enhance or clarify parameters further.

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 ('Plot') and resource ('group-level CATEs with confidence intervals'), which clearly conveys the tool's function. It does not explicitly distinguish it from siblings like cate_plot or plot_from_result, but the 'group-level' qualifier provides some differentiation. The purpose is not a tautology and is understandable.

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 offers no guidance on when to use this tool versus alternatives such as cate_plot or plot_from_result. It does not mention prerequisites (e.g., that group_df must come from cate_by_group), nor does it describe any context for choosing this tool over others. The schema parameter description for group_df mentions this dependency, but the main description itself provides no usage direction.

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

cate_plotB
Read-only

Plot the CATE distribution.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
kindNo'hist' for histogram, 'kde' for kernel density, 'both'.hist
colorNocolor parameter (str).#2C3E50
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from ``metalearner()``.
figsizeNofigsize parameter (tuple).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a safe, non-mutating operation, and the description does not contradict it. The description adds little behavioral context beyond the annotationβ€”no mention of output format, side effects, or how the plot is deliveredβ€”but for a read-only plotting tool this is acceptable, not excellent.

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 a single sentence with zero filler and the key action is front-loaded. It is concise to the point of being sparse, but it does not waste 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?

For a tool with 12 parameters, a required 'result' input, and many sibling plotting/search tools, a one-sentence description is not enough. It does not explain the intended pipeline position, distinguish the plot type from cate_group_plot, or describe the output payload, leaving the agent to infer too much from the schema alone.

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 100%, so the parameters are already documented in the input schema. The description itself adds no new meaning about parameters such as 'kind', 'as_handle', or 'detail', so it does not improve on the baseline.

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 uses a specific verb ('Plot') and resource ('CATE distribution'), making the core action clear. However, it does not differentiate this from sibling tools like cate_group_plot or plot_from_result, which could plausibly perform overlapping work.

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 is given on when to use this tool versus alternatives such as cate_group_plot, cate_summary, or the generic plot_from_result. The required 'result' parameter hints at a metalearner dependency through the schema, but the description itself provides no usage context or exclusions.

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

cate_summaryC
Read-only

Descriptive statistics of the CATE distribution.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from ``metalearner()`` containing ``model_info['cate']``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is known. The description only restates the core purpose and adds no additional behavioral contextβ€”it does not mention that as_handle caches results on the server, that result_id allows reuse of a previous fit, or that data loading may occur via data_path. With annotations taking care of side effects, the description fails to disclose these operational behaviors.

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 a single, front-loaded sentence with no fillerβ€”every word earns its place. It is crisp and efficient, though perhaps too terse for a tool with seven parameters magazine; it is appropriately sized for a concise purpose statement but could benefit from expansion. A 4 reflects solid concision without perfection.

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?

Despite an output schema and 7 parameters, the description gives no overview of how cate_summary fits into a causal inference workflow. It does not mention that result comes from metalearner(), that as_handle enables chaining, or how it differs from sibling summary tools like rd_cate_summary. The agent is left to infer the tool's role and usage from parameter descriptions alone, which is insufficient given the tool's complexity.

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 100%, so all seven parameters are individually documented. The main description adds nothing about parametersβ€”it does not explain the relationship between result and data_path, nor the purpose of detail levels. The schema carries the burden, so baseline 3 is appropriate.

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 'Descriptive statistics of the CATE distribution' uses a clear noun phrase that identifies the tool as a summarizer of CATE distributions without an imperative verb. It is unambiguous about the core function but does not explicitly differentiate from similar siblings like rd_cate_summary or cate_eval, so it loses a point.

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 is provided on when to choose this tool over alternatives such as rd_cate_summary, cate_eval, or focal_cate. It does not mention prerequisites (e.g., that result must come from metalearner()) or whether it can operate on raw data via data_path. The only usage-related hint lies in the detail parameter description, which addresses payload depth rather than tool selection.

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

causalA
Read-only

End-to-end causal workflow: diagnose -> recommend estimator -> fit -> run robustness -> return result. The one-shot entry point that lets an agent analyse a dataset in a single call without orchestrating stages itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYes
idNo
timeNo
cohortNo
designNo
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentNo
covariatesNo
instrumentNo
running_varNo
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With readOnlyHint=true already covering the safety profile, the description adds the key orchestration behavior: automatic diagnosis, estimator recommendation, fitting, robustness checks, and result return. It does not mention caching side effects, but as_handle's own parameter description covers that, and there is no conflict with 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.

Conciseness5/5

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

The description is two tight sentences with the pipeline front-loaded and no filler. Every phrase earns its place by specifying what the tool does and when to use it.

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 15-parameter orchestration tool, the description is a good overview but does not state the minimum invocation pattern (e.g., data_path or result_id plus y and treatment) or that results can be chained via result_id. The output schema and parameter descriptions fill some gaps, but the main text leaves invoke-critical prerequisites implicit.

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 only 40% and the description contributes no parameter-level semantics. Parameters like y, treatment, design, cohort, time, and id are left to inference from names, and the description does not clarify which inputs are essential or how they combine. With low schema coverage, the description fails to compensate.

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 end-to-end workflow ('diagnose -> recommend estimator -> fit -> run robustness -> return result') and explicitly labels itself the one-shot entry point. This distinguishes it from stage-level siblings like diagnose or recommend without needing to inspect 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?

It clearly communicates to use this tool when the agent wants the full causal pipeline in a single call, framing the alternative as manually orchestrating stages. It does not name specific sibling tools or give exclusion criteria, but the one-shot phrasing provides enough context for selection.

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

causal_discoveryD
Read-only

Causal-discovery dispatcher -- article-facing alias.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimator or algorithm variant to use.notears
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
variablesNovariables parameter (Optional[List[str]]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.9/5.0
Behavior2/5

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

Annotations provide readOnlyHint=true and openWorldHint=false, so the safety profile is already known. The description adds no behavioral context beyond a vague 'dispatcher' label; there is no mention of caching, handle behavior, output structure, or side effects.

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

Conciseness2/5

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

The description is extremely short, but this is under-specification rather than useful conciseness. The single phrase conveys almost no actionable information and does not front-load a clear purpose or usage rule.

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

Completeness1/5

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

Given eight parameters, a large sibling set, and an output schema, the description is far too thin. It does not explain what causal-discovery task is performed, what inputs are expected, what the result means, or how it relates to alternative causal tools.

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 100%, so the schema itself documents all parameters thoroughly. The description adds nothing about parameters, but the baseline of 3 applies because the schema carries the full semantic load.

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

Purpose2/5

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

The description says only 'Causal-discovery dispatcher -- article-facing alias.' It restates the tool name without stating a concrete verb or deliverable. It does not say what the tool computes, returns, or how it differs from siblings like notears, pc_algorithm, or causal_impact.

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

Usage Guidelines1/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 dozens of causal siblings. 'Article-facing alias' hints at some routing role but gives no conditions, alternatives, or exclusions, leaving an agent unable to choose it confidently.

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

causal_dqnA
Read-only

Causal deep Q-network (Li, Zhang, Bareinboim 2025, arXiv:2510.21110) for offline policy learning under unobserved confounding. Learns a confounding-robust Q-function via bootstrap data augmentation. Assumptions: Sequential ignorability: no unobserved confounders of actions and outcomes; Positivity: the behaviour policy explores all evaluated actions; The environment satisfies the assumed (Markov) dynamics. Pre-conditions: Logged trajectories (states, actions, rewards) from a known or estimable behaviour policy. Failure modes: Poor behaviour-policy coverage -- the target policy queries unseen state-action regions -> Use offline-safe / pessimistic methods and report effective sample size of the importance weights. Alternatives: sp.offline_safe_policy, sp.policy_value. Typical minimum N: 1000.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYesState column(s)
actionYesaction parameter (str).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_iterNoFitted-Q iterations
rewardYesreward parameter (str).
discountNoDiscount factor
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
next_stateYesNext-state column(s)
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, establishing the tool as non-mutating. The description adds valuable behavioral context: lists assumptions (sequential ignorability, positivity, Markov dynamics), pre-conditions (logged trajectories from a known behaviour policy), and failure modes. It does not contradict annotations and goes beyond them with actionable caveats.

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 dense but well-structured: starts with the core purpose, then assumptions, pre-conditions, failure modes, alternatives, and typical N. Each sentence contributes useful guidance. Slightly long but efficiently organized 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?

For a complex tool with 12 parameters and no nested objects, the description covers assumptions, failure modes, alternatives, and sample-size guidance. It does not explain return values, but an output schema exists. The description is complete enough for an agent to decide when to use it and what to expect at a high level.

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 100%, with each of the 12 parameters having a descriptive comment. The tool description adds no parameter-specific details beyond the schema, so it meets the baseline 3 for a fully documented schema. It does not repeat or override schema information.

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 clearly states the tool's function: learns a confounding-robust Q-function via bootstrap data augmentation for offline policy learning under unobserved confounding. It explicitly distinguishes itself from alternatives like offline_safe_policy and policy_value, making its specific role unambiguous.

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?

The description provides explicit usage guidance: it names alternatives (sp.offline_safe_policy, sp.policy_value), specifies failure modes (poor coverage) and recommends switching to offline-safe methods, and gives a typical minimum sample size (1000). This gives an agent clear decision rules for when to invoke this tool.

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

causal_forestA
Read-only

Causal Forest for heterogeneous treatment effect estimation (CATE). Validation: certified evidence with scoped limitations. Known limitations: The AIPW ATE/ATT are validated against grf on clean-overlap designs only; under severe propensity-overlap loss the AIPW influence function inflates the standard error (conservative, over-covering inference), so inspect the sp.audit overlap diagnostic before interpreting the ATE on that kind of sample. Assumptions: Unconfoundedness: Y(d) perp D | X; Overlap: 0 < P(D=1 | X) < 1 for the estimand support; Honest splitting: splits and estimates use disjoint samples (enforced by default). Pre-conditions: formula uses pipe separator: 'y ~ treatment | x_1 + x_2 + ...'; treatment is binary 0/1 (use sp.multi_arm_forest for multi-valued); covariates are numeric; encode categoricals beforehand. Failure modes: Calibration test (sp.calibration_test) rejects -> CATE predictions are miscalibrated -- increase n_trees, add variables, or switch to a DR-Learner; Variance of CATE estimates too large to be useful -> Need more observations or narrower conditioning set; consider GATE on discrete subgroups; Extreme propensity scores in part of the covariate space -...

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
formulaYes'y ~ treatment | x1 + x2' (pipe separates covariates)
n_treesNoNumber of trees.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses validation scope ('validated against grf on clean-overlap designs only'), a known limitation (inflated standard error under severe propensity-overlap loss), statistical assumptions, and failure modes. It even tells the agent to inspect the overlap diagnostic before interpreting the ATE. No contradiction with 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?

The description is dense but organized into labeled sections (Validation, Known limitations, Assumptions, Pre-conditions, Failure modes), with the purpose front-loaded. Some phrasing is jargon-heavy and the failure-modes list is long, but nearly every sentence carries decision-relevant 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 complex causal-estimation tool with an output schema and read-only annotation, the description covers what is estimated, required assumptions, formula syntax, known inference limitations, and failure responses. This is sufficient for an agent to decide whether and how to call the tool 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 coverage is 100%, so the baseline is 3. The description adds value by specifying the formula contract: pipe separator, binary treatment, numeric covariates, and encoded categoricals. It also connects n_trees to calibration-failure remediation ('increase n_trees'), going beyond the schema descriptions without restating every parameter.

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 opens with a specific estimator and target: 'Causal Forest for heterogeneous treatment effect estimation (CATE).' It also disambiguates scope by stating that treatment must be binary and pointing to sp.multi_arm_forest for multi-valued treatments, which helps distinguish this tool from related CATE and forest-family tools.

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?

The Pre-conditions section gives explicit exclusion criteria and a named alternative: 'treatment is binary 0/1 (use sp.multi_arm_forest for multi-valued)'. The Failure modes section adds remedial routing: switch to a DR-Learner if calibration fails, or consider GATE on discrete subgroups when variance is too large. This is concrete when/alternative guidance.

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

causal_impactA
Read-only

Bayesian structural time series for causal impact analysis. Assumptions: No simultaneous shocks affect treated and control series differently at intervention; Pre-period relationship extrapolates into the post-period absent treatment. Pre-conditions: Observed time series has a clearly defined intervention date; Pre-intervention period is long enough to fit the counterfactual model. Failure modes: Poor pre-period fit or unstable posterior predictive interval -> Add controls, lengthen the pre-period, or use synthetic control as a robustness check. Alternatives: sp.synth, sp.sequential_sdid, sp.local_projections. Typical minimum N: 30.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome time-series column
timeYesTime / date column
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
intervention_timeYesDate/index of intervention

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Assumptions about simultaneous shocks and pre/post relationship extrapolation clarify the causal identification logic. Failure modes (poor pre-period fit, unstable posterior predictive interval) plus suggested actions (add controls, lengthen pre-period, synthetic control) disclose behavior beyond the readOnlyHint annotation. No contradiction with 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?

The description uses labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) to organize dense information efficiently. It is longer than some but every sentence earns its place; no fluff.

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 complex causal inference tool, the description covers assumptions, preconditions, failure modes, alternatives, and sample-size guidance. With an output schema present, return-value details are unnecessary. The description is complete for an agent to decide when to call it and what inputs are required.

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 100%, so every parameter is already documented in the schema (e.g., intervention_time, y, time). The description adds no parameter-specific syntax or format details beyond the schema. Baseline 3 applies.

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 method ('Bayesian structural time series') and its purpose ('causal impact analysis'). It names three alternatives (sp.synth, sp.sequential_sdid, sp.local_projections), distinguishing it from sibling tools. This meets the 5 criterion: specific method + resource and sibling differentiation.

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?

Pre-conditions define when the tool is appropriate: a clearly defined intervention date and a long enough pre-intervention period. Failure modes and recommended remedies give further situational guidance. However, alternatives are merely listed without explicit conditions for choosing among them, 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.

causal_rl_benchmarkA
Read-only

Generate a synthetic causal-RL benchmark dataset. Assumptions: Sequential ignorability: no unobserved confounders of actions and outcomes; Positivity: the behaviour policy explores all evaluated actions; The environment satisfies the assumed (Markov) dynamics. Pre-conditions: Logged trajectories (states, actions, rewards) from a known or estimable behaviour policy. Failure modes: Poor behaviour-policy coverage -- the target policy queries unseen state-action regions -> Use offline-safe / pessimistic methods and report effective sample size of the importance weights. Alternatives: sp.offline_safe_policy, sp.policy_value. Typical minimum N: 1000.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo'confounded_targeting', 'confounded_routing'}confounded_bandit
seedNoRandom seed for reproducible stochastic steps.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
n_episodesNoNumber of episodes.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
confounding_strengthNoMagnitude of unmeasured confounding U -> (action, reward).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

The description discloses key assumptions (sequential ignorability, positivity, Markov dynamics), pre-conditions, failure modes, and typical sample sizes. These go well beyond the sparse annotations (only readOnlyHint), giving the agent a clear picture of the tool's behavior and limitations. It does not contradict 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?

The description is a single dense paragraph but efficiently packs useful information: purpose, assumptions, pre-conditions, failure modes, and alternatives. It is front-loaded with the primary purpose and avoids fluff. A more structured format (bullets) might improve scannability, but the current length is justified.

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 does not need to detail return values. It covers critical contextual aspectsβ€”assumptions, failure modes, and typical Nβ€”that help an agent decide when and how to use the tool. It also hints at chaining via as_handle (indirectly) but that is covered by the schema.

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 100% with each parameter described, so the baseline is 3. The description adds general guidance like 'Typical minimum N: 1000' but does not elaborate on individual parameters beyond what the schema already provides, so it neither enhances nor detracts from parameter understanding.

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 clearly states a specific verb ('Generate') and resource ('synthetic causal-RL benchmark dataset'), making the tool's purpose obvious. It distinguishes itself from the many analysis-focused siblings by being a data-generation tool, though it does not explicitly contrast with other benchmark generators like recommend_benchmark or verify_benchmark.

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 provides pre-conditions (logged trajectories), typical minimum N, and failure modes with alternative tools (sp.offline_safe_policy, sp.policy_value). However, it does not explicitly state when to use this tool over other dataset generators, and the alternatives are framed as responses to failure rather than as direct alternative choices for the same task.

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

cbpsA
Read-only

Covariate-Balancing Propensity Score estimator (Imai-Ratkovic 2014). Validation: certified parity evidence. Assumptions: Unconfoundedness: treatment is as-good-as-random given the measured covariates; Overlap / common support: every unit has a non-degenerate probability of each treatment; The covariate set blocks all back-door paths. Pre-conditions: Pre-treatment covariates measured for treated and control units; A binary (or low-cardinality) treatment indicator; Sufficient covariate overlap between treatment arms. Failure modes: Poor overlap -- extreme propensity scores or few acceptable matches -> Trim or restrict to the common-support region and report the discarded units; Covariate imbalance remains after matching/weighting -> Re-specify the balancing model (CBPS, entropy balancing) and re-check standardized mean differences. Alternatives: sp.propensity_score, sp.cbps, sp.ebalance, sp.dml. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column.
seedNoRandom seed for reproducible stochastic steps.
trimNoOptional pscore clip for stability.
alphaNoSignificance level for confidence intervals and tests.
treatYesBinary 0/1 treatment column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
variantNo'exact': just-identified CBPS (only balance moments). 'over': over-identified CBPS (MLE + balance, solved via two-step GMM).over
estimandNoestimand parameter (Literal['ATE', 'ATT']).ATE
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariates entering the logit score.
n_bootstrapNoNumber of bootstrap replications.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
add_interceptNoPrepend a constant to the covariate matrix.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true and openWorldHint=false, so the description adds substantial behavioral context: unconfoundedness/overlap assumptions, pre-conditions, failure modes, and suggested remedies. It also notes a typical minimum sample size of 200 and mentions trimming/re-specification. It does not contradict the read-only hintβ€”estimation is a read operationβ€”and adds value beyond 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?

The description is dense but organized with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), making it scannable. The opening sentence identifies the estimator immediately. Some content, such as 'Validation: certified parity evidence,' is vague and does not clearly earn its place, preventing 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?

For a causal estimator with 16 parameters and no nested objects, the description covers the essential usage context: identification assumptions, data pre-conditions, failure modes with remedies, alternatives, and a sample size guideline. Since an output schema exists, return-value details are not required. Missing is an explicit statement of what the tool returns (e.g., ATE estimate, balance diagnostics), but the parameter names and schema largely cover that.

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 100%, so the schema already documents every parameter, including enum meanings (detail, variant, estimand). The tool description adds general context (overlap, trimming, alternatives) but does not add parameter-level semantics beyond what the schema provides. Baseline 3 is appropriate because the schema carries the burden.

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 exact estimator ('Covariate-Balancing Propensity Score estimator') and cites the method (Imai-Ratkovic 2014), so an agent can identify what this tool implements. However, it never states the primary verb/outcome explicitlyβ€”it does not say it estimates an average treatment effect, propensity scores, or balance weights, leaving that to inference from the parameter names (treat, y, estimand). This is clear but not maximally explicit.

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 provides concrete pre-conditions (pre-treatment covariates, binary treatment, sufficient overlap) and failure-mode guidance (trim to common support, re-specify balancing model), which tells an agent when the tool is appropriate and what to do when assumptions fail. It lists alternatives (propensity_score, ebalance, dml) but does not give explicit 'use this instead when X' routing, 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.

cfm_decomposeC
Read-only

Chernozhukov-Fernandez-Val-Melly (2013) counterfactual decomposition.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
ks_testNoks_test parameter (bool).
n_threshNoNumber of thresh.
tau_gridNoGrid of tau values to evaluate.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
referenceNoSame convention as ``machado_mata`` / ``melly_decompose``: ``reference=0`` builds the counterfactual from A's distribution regression coefficients applied to B's X (F_{Y<0|1>}), opposite to the reweighting convention in ``dfl_decompose``.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.1/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is known. However, the description adds no behavioral context beyond what annotations and schema provide β€” no mention of caching, output handling, or computational expectations. With annotations present, the description should still contribute some behavioral insight, but it contributes none.

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

Conciseness2/5

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

The description is a single sentence, but the brevity is under-specification rather than conciseness. It provides only the method name and citation, adding no functional detail. The description is not front-loaded with key information; it only restates the name.

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

Completeness1/5

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

With 13 parameters, 4 required, and many sibling decomposition tools, the description is grossly insufficient. It does not explain the method's purpose, data requirements, or how it relates to other decompositions. Even though an output schema exists, the description should at least state what the tool does and when it is appropriate; it does neither.

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 100%, so every parameter already has a structured description. The tool description itself adds no extra semantic context for parameters, but per the baseline rule, 100% coverage warrants a score of 3 even without description-level parameter info.

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

Purpose2/5

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

The description is a noun phrase citing the estimator, e.g., 'Chernozhukov-Fernandez-Val-Melly (2013) counterfactual decomposition.' It does not use an action verb like 'computes' or 'decomposes,' and it fails to distinguish this tool from sibling decomposition methods such as melly_decompose and dfl_decompose. It essentially restates the tool name with a literature reference, making it tautological.

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 in the description about when to choose cfm_decompose over other counterfactual decomposition tools. The only comparison hint appears inside the schema's reference parameter description ('Same convention as machado_mata / melly_decompose'), not in the tool description. This leaves the agent without direction on selection criteria.

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

cgs_continuous_didA
Read-only

Callaway, Goodman-Bacon & Sant'Anna (2024) DiD with a CONTINUOUS treatment. A dose has no single ATT: the TWFE coefficient averages the 0.2-dose and 0.8-dose comparisons with weights that can be negative. Reports ATT(d) and its derivative ACRT(d) -- the causal response at dose d, which is what a marginal-dose question asks -- from a B-spline regression of the outcome change on the dose. Validation: certified evidence with scoped limitations. Known limitations: standard errors come from the per-cell influence function; contdid routes its own through the pte aggregation layer, which is not implemented here; staggered designs aggregate cells with StatsPAI's own treated-count weights; only the per-cell estimator is pinned against the reference; the cck (nonparametric) dose estimator is not implemented. Assumptions: Parallel trends in the untreated potential outcome; Strong parallel trends for ATT(d) to be the effect of dose d; No anticipation. Pre-conditions: panel with a continuous dose and some zero-dose units; at least one period before each treated cohort. Failure modes: No zero-dose units in a cell -> ATT(d) is levelled against the zero-dose group. Use control_group='notyettreate...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
doseYesTreatment intensity (0 = untreated)
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for confidence intervals and tests.
knotsNoExplicit interior knots
cohortYesFirst-treatment period (0 = never treated)
degreeNoB-spline degree; degree=1 with no knots gives a constant ACRT, the 'effect per unit of dose' reading
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
dose_gridNoDoses to report the curves at (default: 10th-99th pct)
num_knotsNoInterior knots at dose quantiles; more buys flexibility at the cost of variance and there is no auto-selector
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
curve_basisNo'fitted' evaluates the curves on the basis they were fitted on; 'reference' re-anchors to the dose grid to reproduce contdid 0.1.1's reported curves, which are a rescaled version of the fitted responsefitted
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
control_groupNocontrol_group parameter (str).nevertreated
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, consistent with an estimation tool. The description adds rich behavioral detail: standard errors from per-cell influence function, how staggered designs aggregate cells with StatsPAI weights, which estimators are pinned against the reference, and that the cck dose estimator is not implemented. It also lists assumptions and failure modes, going well beyond what annotations provide.

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 long but structured logically: core purpose, validation, limitations, assumptions, pre-conditions, failure modes. It front-loads the main purpose and then details constraints. While verbose, it is organized and every section adds value for an econometric tool with this complexity.

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 18 parameters (6 required) and an output schema present, the description covers limitations, assumptions, pre-conditions, and failure modes. It does not explain every parameter but relies on the schema for that. For a complex estimator, it is reasonably complete, though it could explicitly mention how to handle the no-zero-dose case beyond the truncated control_group hint.

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 100%, so all 18 parameters have descriptions. The tool description adds some conceptual framing (e.g., what ACRT means, the role of dose) but does not add significant meaning beyond the schema. Baseline 3 is appropriate.

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 clearly states the tool implements Callaway, Goodman-Bacon & Sant'Anna (2024) DiD for continuous treatments, explains the key concepts (dose, ATT(d), ACRT(d)) and the B-spline regression method. It differentiates itself by focusing on the causal response at dose d, distinguishing it from sibling tools like continuous_did or dose_response.

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 pre-conditions (panel with continuous dose, zero-dose units, at least one period before each treated cohort), assumptions, and failure modes (no zero-dose units in a cell, use control_group='notyettreate...'). It gives context on when the tool is appropriate but does not explicitly name alternative tools to use instead, relying on the description's specificity to guide selection.

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

check_absorbingA
Read-only

Detect non-absorbing (reverting) treatment in a panel. Cohort-based DiD estimators (callaway_santanna, sun_abraham, did_imputation, etwfe, stacked_did) represent treatment by the first-treated period, which is lossless only when treatment never turns off. Under reversal they treat post-reversal periods as still-treated and are biased toward zero -- on a 150-unit panel with a third of units reverting, callaway_santanna returns 0.71 against a true ATT of 1.5, silently, because it never sees the time-varying indicator. Run this on the raw panel before picking an estimator. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Pre-conditions: long panel with unit x time x time-varying treatment; treatment column is numeric (0/1). Alternatives: sp.did_multiplegt, sp.lp_did, sp.did_multiplegt_dyn.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime column
unitYesUnit id column
treatYesTime-varying 0/1 treatment indicator. A cohort / first-treatment column cannot express reversal, so passing one makes the check meaningless.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
strictNoRaise MethodIncompatibility instead of returning when treatment reverts; use as a guard in front of a cohort-based estimator.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description aligns with that by describing a detection/check operation. The description adds valuable behavioral context beyond the annotation: it explains that cohort-based estimators silently return biased estimates (0.71 vs true ATT of 1.5) under reversal, that the tool 'never sees the time-varying indicator' in those estimators, and that it can raise MethodIncompatibility when strict=true. It also discloses validation evidence tier and pre-conditions. Minor gap: it doesn't explicitly state the return shape, but an output schema exists, so that burden is reduced.

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 dense but well-organized: it front-loads the core purpose, then provides a concrete failure example, then usage guidance, validation, pre-conditions, and alternatives. Every sentence adds information. It is longer than the typical description, but the length is justified by the complexity of the statistical concept and the need to warn against silent bias. Slight deduction for densityβ€”an agent may need to parse carefullyβ€”but no wasted words.

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 tool's complexity (10 params, output schema present, subtle statistical failure mode), the description is remarkably complete. It covers what the tool does, why it matters, when to run it, what inputs are valid, what alternatives exist, and what validation evidence supports it. The output schema handles return-value documentation, so the description doesn't need to. An agent has everything needed to decide whether and how to call this 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 100%, so the schema already documents all 10 parameters. The description adds crucial semantic context for the key parameter 'treat': it explains that a cohort/first-treatment column cannot express reversal and passing one makes the check meaningless. It also clarifies the meaning of 'detail' levels in terms of token payloads and downstream planning. This goes beyond the schema's field-level descriptions, though the schema already does most of the work.

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 opens with a specific verb and resource: 'Detect non-absorbing (reverting) treatment in a panel.' It clearly distinguishes itself from sibling DiD estimators by explaining that cohort-based estimators are lossless only when treatment never turns off, and that this tool checks for reversal. It also names the exact estimators it guards against (callaway_santanna, sun_abraham, etc.), making its purpose unmistakable.

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?

The description explicitly states when to use the tool: 'Run this on the raw panel before picking an estimator.' It also lists pre-conditions (long panel with unit x time x time-varying treatment; numeric 0/1 treatment) and names alternatives (sp.did_multiplegt, sp.lp_did, sp.did_multiplegt_dyn). It even explains the failure mode it prevents, so an agent knows exactly when this check is needed versus when it is not.

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

check_identificationA
Read-only

Design-level identification diagnostics: bad controls, overlap, cohort sizes, IV first-stage F, clustering. Run BEFORE fitting any estimator to surface design problems.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYes
idNo
timeNo
cohortNo
designNo
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
strictNoRaise IdentificationError on BLOCKERS.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentNo
covariatesNo
instrumentNo
running_varNo
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark it readOnlyHint=true, and the description adds behavioral context: it is a pre-fit design check, not an estimator, and it surfaces design problems. It does not disclose error behavior or output structure, but the output schema exists and the read-only semantics are already captured.

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 sentences, no filler, with the most important guidance front-loaded: what it does, what it checks, and when to run it. Every word 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?

Given the output schema and the descriptive parameter comments for data_path, detail, strict, as_handle, data_columns, data_sample_n, and result_id, the description is largely complete for a pre-estimation diagnostic tool. The main gap is that it does not clarify which design-specific parameters are needed for each check, but the overall usage context is well established.

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 only 44%, with many core causal parameters (y, id, time, cohort, design, treatment, covariates, instrument, running_var) undocumented. The description's checklist ('bad controls, overlap, cohort sizes, IV first-stage F, clustering') provides conceptual hints that map loosely to these parameters, but it does not explain individual parameter roles clearly enough to fully compensate for the low coverage.

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 action ('design-level identification diagnostics') and concrete check dimensions: bad controls, overlap, cohort sizes, IV first-stage F, clustering. It is clear what the tool does and ties to the tool name, but it does not explicitly contrast with sibling diagnostic tools like iv_diag or balance_diagnostics, so it misses the top mark.

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 line 'Run BEFORE fitting any estimator to surface design problems' gives an explicit temporal placement and intended use. It does not state when not to use it or name alternatives, but the placement guidance is strong enough for an agent to know when to invoke it.

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

chilean_householdsC
Read-only

Chilean-style household income with urban/rural gap.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNon parameter (int).
seedNoRandom seed for reproducible stochastic steps.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. However, the description adds no behavioral context beyond that. It does not state what the tool returns, whether it generates synthetic data, whether it accepts inputs like data_path, or any other runtime behavior. The minimal one-liner leaves the agent guessing about the actual operation.

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 description is very concise (one short sentence), which is good for brevity but not for effectiveness. It lacks a verb or any structural guidance, making it more under-specified than efficiently front-loaded. It does not earn its place as a complete guide.

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?

Despite having an output schema and complete parameter descriptions, the tool description is too sparse. It does not explain what kind of data is produced, how it should be used, or why it differs from other dataset tools. An agent would need to open the schema or call the tool to understand its purpose, which is a significant gap for a tool with 8 parameters and a rich output schema.

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 100%, so the input schema already documents all 8 parameters. The description adds no parameter-specific meaning, but the baseline of 3 applies because the schema handles the heavy lifting.

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 'Chilean-style household income with urban/rural gap' is a noun phrase that identifies the subject but lacks an explicit verb. It vaguely suggests this tool provides or generates household income data, but does not clearly state an action like 'generate', 'load', or 'return'. It adds a distinguishing feature (urban/rural gap) but does not clearly differentiate from sibling dataset tools like 'cps_wage' or 'basque_terrorism'.

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 alternatives. The description does not mention comparisons, alternatives, or conditions for use. An agent browsing the large sibling list would not know why to pick chilean_households over other dataset tools.

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

cicA
Read-only

Changes-in-Changes (Athey & Imbens 2006). Nonparametric quantile DiD that identifies the full counterfactual outcome distribution for treated units, not just the mean. Reports quantile treatment effects (QTE) via empirical-CDF transformation; bootstrap SE. Validation: certified parity evidence. Assumptions: Rank-invariance of untreated potential outcomes across periods; Time-invariant group-level production technology (distributional DiD); SUTVA. Pre-conditions: continuous-ish outcome with sufficient support overlap between treated and control; 2 periods, 2 groups. Failure modes: Discrete outcome with few support points -> CIC quantile transformation degenerates; use sp.qte or sp.drdid for mean effects. Alternatives: sp.qte, sp.drdid, sp.did_2x2. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
timeYesPeriod indicator (0=pre, 1=post)
alphaNoSignificance level for confidence intervals and tests.
groupYesTreatment-group indicator (0/1)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
n_gridNoGrid size for inverse-CDF mapping
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoQuantile grid (default: deciles)
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariates for the Athey-Imbens (2006 p.466) two-step estimator; 'C(col)' / 'i.col' terms are absorbed as fixed effects
first_stageNoFirst-stage residualizer (only 'feols' supported)feols
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations mark the tool as read-only, and the description adds substantial behavioral and methodological context beyond that: it reports QTEs via empirical-CDF transformation with bootstrap SE, states modeling assumptions, preconditions, failure modes, and a typical minimum sample size. This gives the agent a strong sense of what the tool does and how it behaves.

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 dense but well organized, front-loading the core method and then covering assumptions, preconditions, failure modes, and alternatives with minimal fluff. Each section earns its place given the complexity of the estimator.

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 complex estimator, the description supplies the essential selection context: estimand, assumptions, data requirements, failure mode, alternative tools, and sample-size guidance. The input schema covers all parameters and an output schema exists, so the description does not need to restate return structure.

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 100%, so the baseline is 3 even though the description does not repeat parameter-level details. The description adds useful high-level context (continuous outcome, two groups/two periods) but does not explain individual parameters beyond what the schema already provides.

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 clearly identifies CIC as a nonparametric quantile difference-in-differences estimator that recovers the full counterfactual outcome distribution and reports QTEs. It distinguishes itself from mean-effect estimators with 'not just the mean' and explicitly names alternative tools.

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?

The description gives explicit when-to-use guidance: full distributional counterfactuals, continuous-ish outcomes, sufficient support overlap, and a 2-period/2-group design. It also states a clear when-not-to-use case (discrete outcomes with few support points) and routes to alternatives: sp.qte, sp.drdid, and sp.did_2x2.

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

clogitB
Read-only

McFadden's conditional (fixed-effect) logit for choice data. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoAlternative-specific (and/or individual-specific interacted with alternative dummies) covariates.
yNoBinary indicator: 1 = chosen, 0 = not chosen.
tolNoNumerical convergence tolerance.
alphaNoSignificance level for confidence intervals and tests.
groupNoVariable identifying the choice set / decision-maker.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoRobust standard-error or covariance estimator option.nonrobust
clusterNoCluster identifier column for clustered standard errors.
formulaNoFormula ``"chosen ~ price + quality"``.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

The description adds no operational behavior beyond the model name; the 'Validation: certified parity evidence' sentence is a trust claim, not a disclosure of what the tool does at runtime. Annotations already provide readOnlyHint, so the safety profile is covered, but the description itself contributes little 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?

The description is very short and front-loads the model identity in the first sentence. The second sentence is not actionable for tool selection, but the overall size is economical and not padded.

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 15-parameter estimator the description is minimal, but the input schema and output schema are rich, so the agent can recover parameter semantics and return structure. It still lacks guidance on required inputs and how to choose this over sibling choice models, leaving clear gaps.

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 100%, with every parameter documented, including defaults and enums. The description adds no parameter-level meaning, so it earns the baseline 3 rather than higher.

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 estimator, McFadden's conditional (fixed-effect) logit, and the target data type, choice data, which distinguishes it from plain logit, cloglog, and panel logit siblings. It lacks an explicit action verb such as 'estimate' or 'fit', so it is clear but not maximally explicit.

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?

'For choice data' plus 'conditional (fixed-effect)' provides a clear context for when to select this tool. It does not name alternatives or exclusion criteria, so it falls short of explicit when-to-use/when-not-to-use guidance.

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

cloglogC
Read-only

Complementary log-log regression via maximum likelihood. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoRegressor names (alternative to formula).
yNoDependent variable name (alternative to formula).
tolNoConvergence tolerance on log-likelihood change.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNo``'nonrobust'`` for MLE SE, ``'hc1'`` / ``'robust'`` for sandwich SE.nonrobust
clusterNoColumn name for clustered standard errors.
formulaNoFormula like ``"y ~ x1 + x2"``.
maxiterNoMaximum Newton-Raphson iterations.
weightsNoColumn name for frequency/analytic weights.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
at_valuesNoVariable values for ``marginal_effects='at'``.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
marginal_effectsNo``'average'`` (AME), ``'mean'`` (MEM), or ``'at'`` (MER).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, and the description adds little beyond that: 'via maximum likelihood' names the fitting method but not what the call returns, caches, or how it handles failures. 'Validation: certified parity evidence' is too vague to inform agent behavior and reads as a quality claim rather than an operational disclosure.

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 main purpose sentence is short and front-loaded, which is good. However, the second sentence is cryptic and uninformative, so not every sentence earns its place; a 17-parameter tool needs a bit more orientation than this.

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 rich input schema and output schema cover invocation mechanics, and the read-only annotation covers safety. But the description omits any guidance on required inputs (data_path plus formula/x/y are not marked required) and on how this model relates to the many regression siblings, so it is only minimally complete.

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 100%, so the parameter descriptions already carry the semantic load, making 3 the baseline. The tool description itself says nothing about parameters and does not compensate with guidance such as 'supply either formula or x/y plus data_path'.

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 first sentence names a specific estimator ('Complementary log-log regression') and estimation principle ('via maximum likelihood'), so an agent can distinguish it from logit/probit at a glance. It stops short of 5 because it never explicitly contrasts itself with similarly named siblings such as clogit, and the 'Validation: certified parity evidence' sentence is not purpose-related.

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 choose cloglog over logit, probit, clogit, or glm, and no exclusions or prerequisites are given. The only hint about usage is the 'detail' parameter's guidance about sub-step calls, which concerns output size, not tool selection.

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

cluster_cateA
Read-only

Cluster-based CATE estimator. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness given the covariates; Overlap / positivity across the covariate space; Nuisance functions are estimated consistently; cross-fitting controls overfitting bias. Pre-conditions: Covariates, a treatment indicator, and an outcome for each unit; Enough data to fit flexible nuisance models with sample-splitting / cross-fitting. Failure modes: CATE estimates are unstable or extrapolate beyond the covariate support -> Restrict to the overlap region, increase data, or use a doubly-robust learner (DR-/R-learner). Alternatives: sp.dml, sp.causal_forest, sp.tmle. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
n_clustersNoNumber of K-means clusters.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true and openWorldHint=false, so the description carries the burden of behavioral context. It adds substantive detail about assumptions (unconfoundedness, overlap, consistent nuisance estimation, cross-fitting), failure modes, and a minimum sample size, which goes well beyond the structured annotations. It does not describe output side effects or edge-case return behavior, but the output schema covers those.

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 well structured with labeled segments (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) that make it scannable. It is dense but every segment earns its place for a complex estimator, and the core purpose is front-loaded in the first phrase.

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 high-complexity tool with 12 parameters, 4 required fields, and an output schema, the description covers assumptions, preconditions, failure modes, alternatives, and minimum sample size. Nothing essential for an agent to decide whether and how to invoke this tool is missing.

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 100%, so the baseline is 3 even without extra parameter details in the description. The description's preconditions broadly map to required parameters (covariates, treatment, outcome, data) but do not add syntax or formatting guidance beyond the schema. It does not fully compensate for parameter meaning, but the schema already does that work.

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 opens with 'Cluster-based CATE estimator,' which clearly identifies the operation as estimating conditional average treatment effects and distinguishes it from sibling CATE/ML tools via the 'cluster-based' qualifier. It lacks an explicit verb-form statement like 'Estimates...' and relies on the noun phrase to convey purpose, 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 description provides pre-conditions, failure modes, typical minimum N, and explicitly names alternatives (sp.dml, sp.causal_forest, sp.tmle). It does not fully spell out when to choose cluster_cate over those alternatives, though the preconditions and failure-mode guidance make the intended context reasonably clear.

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

cluster_cross_interferenceA
Read-only

Cluster-randomised trial under cross-cluster interference (Ding et al. 2025). Estimates direct + spillover effects when treatment of one cluster affects outcomes in adjacent clusters. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Partial interference: spillovers operate within clusters but not across cluster boundaries; Exposure mapping correctly captured by neighbour_treat_share (user-precomputed share of treated neighbours); Cluster-level treatment is binary and randomized (cluster RCT). Pre-conditions: Cluster identifier column plus individual-level outcome; Cluster-level binary treatment column; Precomputed neighbour_treat_share column from spatial/network adjacency. Failure modes: neighbour_treat_share missing or not a valid 0-1 share -> Precompute the treated-neighbour share per cluster from your adjacency matrix before calling; Too few clusters for cluster-robust inference -> Increase the number of clusters or use a design with weaker cluster requirements. Alternatives: sp.inward_outward_spillover, sp.network_hte, sp.interference, sp.spillover. Typical minimum N: 30.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterYesCluster identifier column for clustered standard errors.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
neighbour_treat_shareYesColumn with neighbours' treatment share

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With annotations only providing readOnlyHint and openWorldHint, the description carries the transparency burden. It discloses modeling assumptions (partial interference, exposure mapping), failure modes, and pre-conditions. It does not describe the return structure or any side effects, but for a read-only estimator this is strong disclosure.

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 longer than average but well-organized into labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives). It front-loads the core purpose and method citation, and each labeled block earns its place by providing actionable guidance.

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 complex estimator with 10 parameters, assumptions, and failure modes, the description covers the essentials: what it does, when to use it, what inputs are required, and what can go wrong. The output schema covers return values, and remaining gaps (e.g., precise statistical formula details) are not necessary for correct invocation.

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 100%, which sets a baseline of 3. The description adds value by clarifying the key parameter's role ('user-precomputed share of treated neighbours') and the requirement that treatment is cluster-level and binary, helping the agent understand how cluster, treat, and neighbour_treat_share relate.

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: 'Estimates direct + spillover effects when treatment of one cluster affects outcomes in adjacent clusters' under cluster-randomised interference. It cites the method (Ding et al. 2025) and explicitly lists alternatives, distinguishing it from siblings like sp.inward_outward_spillover and sp.spillover.

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 provides explicit pre-conditions (cluster column, binary treatment, precomputed neighbour_treat_share), failure modes with remediation (precompute share, increase number of clusters), and a named alternatives list. This leaves little ambiguity about when to use this tool versus related tools.

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

cluster_robust_seB
Read-only

Return cluster-robust standard errors (diagonal sqrt of vcov). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesFeature matrix or covariate DataFrame.
residYesresid parameter (np.ndarray).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clustersYesCluster labels for clustered inference.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

The description adds a useful detail about the output (sqrt of vcov) and the validation tier, which goes beyond the readOnlyHint annotation. However, it does not disclose other behavioral aspects like input requirements or edge cases, though the annotation already signals a non-destructive read operation.

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 concise with two sentences, front-loading the purpose. No unnecessary text, though it could have briefly mentioned key inputs or output format.

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 description is adequate for a straightforward statistical function, especially since the schema fully documents parameters and an output schema exists. It does not explain the validation tier meaning, but that is not critical for calling the 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 description coverage is 100%, so the schema already documents all parameters thoroughly. The description does not add any parameter-specific information, but the baseline of 3 applies when the schema carries the load.

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 the action ('Return cluster-robust standard errors') and clarifies the exact output ('diagonal sqrt of vcov'), which is specific and clear. It does not explicitly distinguish it from sibling tools like twoway_cluster or cr2_se, but the purpose 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?

No guidance is provided on when to use this tool versus alternatives (e.g., twoway_cluster, cr2_se, or multiway_cluster_vcov). The description does not mention contexts or exclusions, leaving the agent to infer suitability.

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

cohort_anchored_event_studyA
Read-only

Cohort-anchored event study. Instead of averaging across cohorts at each relative-time bin (which can contaminate leads / lags with other cohorts' dynamics), estimates separate event-study paths per cohort and then aggregates with cohort weights. Standard errors are cluster-robust and carry no protection against parallel-trends violations: this is the cohort-anchored estimator Liu (2025) starts from, NOT that paper's block-bias robust-inference procedure, which is not implemented. For parallel-trends sensitivity use sp.honest_did. Assumptions: Parallel trends hold within each treatment cohort relative to never-treated units (cohort-anchored, not pooled TWFE); No anticipation: outcomes in pre-event periods unaffected by future treatment; Treatment is an absorbing first-treatment event (staggered adoption, treat encodes first period, 0 = never-treated). Pre-conditions: Long-format balanced/unbalanced panel with id and time columns; treat column gives first-treatment period per unit (0 = never-treated), with at least one never-treated cohort; Enough pre/post periods to fill the requested leads/lags event-time window. Failure modes: All units treated in same period / no never-treated...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
idYesUnit, subject, or panel identifier column.
lagsNolags parameter (int).
timeYesTime period column.
alphaNoSignificance level for confidence intervals and tests.
leadsNoleads parameter (int).
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster identifier column for clustered standard errors.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses key behavioral details: cluster-robust standard errors with no parallel-trends protection, cohort-anchored rather than pooled TWFE identification, and explicit assumptions such as no anticipation and absorbing treatment. It also lists failure modes, giving the agent useful information about when results will be invalid.

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 dense but organized into purpose, contrast with alternatives, assumptions, pre-conditions, and failure modes. Every section adds actionable information, and the core purpose is front-loaded before the assumptions and constraints.

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 estimator's complexity and the crowded event-study sibling space, the description covers what the tool does, what it is not, when to use an alternative, assumptions, data pre-conditions, and failure modes. The output schema exists, so return-value description is not required, and the input schema covers parameters.

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?

Input schema coverage is 100%, so the baseline is 3, but the description adds real parameter meaning: it clarifies that treat encodes the first treatment period with 0 = never-treated, that id and time define a long-format panel, and that leads/lags define a requested event-time window. This goes beyond the schema's generic descriptions.

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 opens with the specific estimator name and explains exactly what it computes: separate event-study paths per cohort aggregated with cohort weights, explicitly contrasted with averaging across cohorts at each relative-time bin. It distinguishes itself from Liu (2025)'s robust-inference procedure and from honest_did, so an agent can differentiate it from closely related siblings.

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?

The description gives explicit when/when-not guidance: it is the cohort-anchored starting estimator, not the block-bias robust-inference procedure, and for parallel-trends sensitivity the agent should use sp.honest_did. Assumptions and pre-conditions further constrain when the tool is appropriate, including never-treated cohorts and absorbing first-treatment events.

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

cohort_event_study_plotC
Read-only

Per-cohort event study plot (overlay).

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
ciNoShow confidence intervals for each cohort.
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from ``callaway_santanna()`` or ``did(method='cs')``. Must have ``detail`` with 'group', 'relative_time', 'att' columns, and ``model_info['event_study']`` for aggregate.
figsizeNofigsize parameter (Tuple[float, float]).
paletteNoColors for each cohort. Auto-generated if None.
ci_alphaNoCI band transparency.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
show_aggregateNoOverlay the aggregate event study line.
aggregate_colorNoColor for aggregate line.#2C3E50

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already establish readOnlyHint=true, and the description adds only the weak visual trait 'overlay'. It does not explain aggregate handling, required input provenance, or other behavioral details, so the description adds little beyond 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.

Conciseness3/5

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

The description is short and free of filler, but for a 15-parameter function it is under-specified rather than efficiently structured. It offers no context to help an agent prioritize or interpret the schema.

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?

Although the schema is rich and an output schema exists, the description is too thin to locate this among many similar plotting tools. It never mentions the required `result` provenance or clarifies when this plot is preferred over nearby event-study plot siblings.

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 100%, so the baseline is 3. The description contributes no parameter-level meaning beyond what the schema already provides.

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 phrase 'Per-cohort event study plot (overlay)' names a specific visualization resource and granularity ('per-cohort', 'overlay'), and it adds display characteristics rather than purely restating the tool name. However, it does not explicitly distinguish it from closely-related siblings such as enhanced_event_study_plot or group_time_plot.

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 exclusions, and no pointer to alternatives despite a large cluster of event-study/plot siblings. The intended selection context is left entirely to inference.

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

compare_estimatorsC
Read-only

Run multiple estimators on the same data and compare.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
idNoPanel unit ID.
timeNoTime variable.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodsNoEstimators to compare. Default auto-selects based on data. Classical options: ``'ols'``, ``'matching'``, ``'ipw'``, ``'aipw'``, ``'dml'``, ``'g_computation'``, ``'causal_forest'``, ``'did'``, ``'panel_fe'``. Hint-driven Sprint-B options (require ``method_hints``): ``'proximal'``, ``'msm'``, ``'principal_strat'``, ``'mediate'``, ``'mediate_interventional'``, ``'front_door'``. Each needs method-specific kwargs the shared signature does not expose (proxy_z/proxy_w, time_varying, strata, mediator, etc.) -- pass them through ``method_hints``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesTreatment variable (binary).
covariatesNoCovariate matrix, DataFrame, or column names.
instrumentNoinstrument parameter (Optional[str]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
method_hintsNoPer-method keyword overrides, merged with the shared kwargs when dispatching each estimator. Structure:: {'proximal': {'proxy_z': ['z'], 'proxy_w': ['w']}, 'msm': {'time_varying': ['L_lag']}, 'principal_strat': {'strata': 's'}} **Collision rule** (docs/ROADMAP.md Section 6): per-method hints take precedence over the shared kwargs for the method they name. If the top-level ``covariates=['age']`` disagrees with ``method_hints={'proximal': {'covariates': ['age', 'educ']}}``, proximal uses the hint and every other method uses the shared arg. A ``UserWarning`` fires on conflict so the override is visible in the log.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With readOnlyHint=true, the annotation already tells the agent this is a safe read/compute operation. The description adds no behavioral detail beyond the name's implication, such as caching via as_handle, method auto-selection, or the fact that hints control advanced estimators. Since it adds no context beyond the annotation, a low score is warranted.

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 single-sentence description is extremely concise and front-loaded, with no filler. For a 15-parameter tool, however, it is almost too terse; the schema must do all the explanatory work. It earns a high but not top score.

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 tool has a rich schema, an output schema, and a readOnlyHint, so the description does not need to explain return values or side effects. Still, it omits high-level context about auto-selected methods, the comparison output structure, and when this tool is the right choice among many siblings. The one-line description plus schema is minimally viable but not complete for an agent facing a large toolbox.

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 100%, so the baseline is 3. The description itself mentions 'same data' and 'multiple estimators', which loosely maps to data_path and methods, but adds no parameter details beyond the schema. The rich per-parameter descriptions carry the semantic load.

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?

Description uses a clear verb ('Run') and object ('multiple estimators') and states the purpose 'compare'. It is unambiguous about the core function. However, it does not differentiate from siblings like compare_metalearners or panel_compare, which also involve running and comparing estimators, 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?

The description gives no indication of when to prefer this tool over alternatives such as compare_metalearners or panel_compare. There are no exclusion criteria, no mention of the auto-selection of methods, and no guidance on prerequisites. An agent must infer usage from the parameter schema.

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

compare_event_study_conventionsA
Read-only

Run several DiD estimators on one non-staggered panel and measure how far each event-study path departs from the dynamic TWFE benchmark. Splits the difference into a common vertical shift within each half of the path and a residual, so a symmetric estimator scores zero asymmetry while the kink (Callaway-Sant'Anna varying base period), the jump (BJS pre-trend convention) and the N0/N attenuation (fect / did2s in-sample residuals) each get their own signature. Warns when the recorded convention disagrees with what the data show. Assumptions: The comparison is descriptive: it measures construction differences, not which estimator is correct. Pre-conditions: panel with unit x time x outcome; exactly one treated cohort (non-staggered design); at least one never-treated unit. Failure modes: Staggered adoption (more than one treated cohort) -> Restrict to one cohort plus never-treated units; with staggered timing a gap against TWFE mixes the reference convention with forbidden comparisons; No never-treated units -> The TWFE benchmark path needs untreated units. Alternatives: sp.event_study_convention, sp.bacon_decomposition. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column
unitYesUnit identifier
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
windowNoRelative-time window; defaults to the widest the panel supports.
clusterNoCluster identifier column for clustered standard errors.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
toleranceNoThreshold for the matches_twfe verdict; defaults to a scale-free 1e-6 * max(1, max|beta_twfe|).
estimatorsNoRegistry keys to run; defaults to every estimator with a runner.
first_treatYesFirst-treatment period; 0 = never-treated
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint=true annotation, the description discloses the decomposition into vertical shift and residual, the distinct signatures of kink/jump/N0-N attenuation, and the warning behavior when recorded convention disagrees with data. This tells the agent what the tool computes and what kind of output to expect without contradicting 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.

Conciseness5/5

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

Although long, the description is structured into Assumptions, Pre-conditions, Failure modes, and Alternatives, and every sentence adds distinct information. The core purpose is front-loaded, and the technical decomposition detail justifies the length for a complex comparison tool.

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 tool's complexity, the 14-parameter schema, annotations, and output schema, the description provides all selection-relevant context: data requirements, failure modes, alternatives, and minimum sample size. Nothing an agent needs to decide whether and how to call it is missing.

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 100% and the schema already documents all 14 parameters in detail, so the baseline applies. The description adds preconditions about the data (one treated cohort, never-treated units) but does not add parameter-level details beyond the 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 description opens with a specific verb and resource: 'Run several DiD estimators on one non-staggered panel and measure how far each event-study path departs from the dynamic TWFE benchmark.' It identifies the analyzed object (event-study conventions) and names alternatives (sp.event_study_convention, sp.bacon_decomposition), so an agent can distinguish this tool from sibling comparison tools.

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 explicitly states assumptions ('not which estimator is correct'), pre-conditions (non-staggered panel, exactly one treated cohort, at least one never-treated unit), failure modes with remedies (restrict staggered adoption; require never-treated units), and alternatives. This is the strongest possible guidance for when to call it vs. other estimators.

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

compare_metalearnersA
Read-only

Fit multiple meta-learners and compare their ATE estimates. Assumptions: Unconfoundedness given the covariates; Overlap / positivity across the covariate space; Nuisance functions are estimated consistently; cross-fitting controls overfitting bias. Pre-conditions: Covariates, a treatment indicator, and an outcome for each unit; Enough data to fit flexible nuisance models with sample-splitting / cross-fitting. Failure modes: CATE estimates are unstable or extrapolate beyond the covariate support -> Restrict to the overlap region, increase data, or use a doubly-robust learner (DR-/R-learner). Alternatives: sp.dml, sp.causal_forest, sp.tmle. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
treatYesBinary treatment variable (0/1).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
learnersNoWhich learners to compare. Default: all five ('s','t','x','r','dr').
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate / effect modifier variables.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare the tool read-only)Skip, and the description adds valuable behavioral context: statistical assumptions (unconfoundedness, overlap, consistent nuisance functions), failure modes (unstable or extrapolating CATE estimates), and practical guidance (minimum N=500). This goes beyond the structured annotations.

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 well-structured with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Each sentence carries distinct, non-redundant information, and the most critical contrasts (alternatives) are included 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?

For a complex tool that fits multiple meta-learners, the description covers assumptions, pre-conditions, failure modes, alternatives, and minimum sample size. An output schema exists, so return values are already handled. The agent has everything needed to decide when to call and what to expect.

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 100%, so the baseline is 3. The description does not add parameter-specific meaning beyond the schema, but it implicitly signals the role of covariates, treatment, and outcome via its pre-conditions and assumptions.

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 ('fit') and resource ('multiple meta-learners' and 'ATE estimates'), making the tool's purpose immediately clear. It also names alternatives (sp.dml, sp.causal_forest, sp.tmle), which helps distinguish it from sibling causal-inference tools.

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 lists alternatives and provides pre-conditions and assumptions that define when the tool is appropriate. However, it does not give explicit criteria for choosing among the named alternatives, leaving some selection inference to the agent.

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

conditional_lr_ciD
Read-only

Moreira (2003) CLR confidence set -- re-export of Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
exogNoexog parameter (Optional[Union[np.ndarray, pd.DataFrame, List[str]]]).
endogYesendog parameter (Union[np.ndarray, pd.Series, str]).
levelNoConfidence level or reporting level.
n_simNoNumber of sim.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_gridNoNumber of grid.
add_constNoadd_const parameter (bool).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
beta_gridNoGrid of beta values to evaluate.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
instrumentsYesinstruments parameter (Union[np.ndarray, pd.DataFrame, List[str]]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.7/5.0
Behavior1/5

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

Annotations indicate readOnlyHint=true, so the agent knows it is a non-mutating operation, but the description adds no behavioral context beyond that. It does not explain what output is produced, how the confidence set is constructed, what inputs affect behavior, or any side effects. The 're-export... certified parity evidence' wording is obscure and not informative.

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

Conciseness2/5

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

The description is short and front-loaded with the method name, but the 're-export of Validation: certified parity evidence' fragment is filler that obscures rather than clarifies. Although concise, it sacrifices substance for brevity.

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

Completeness1/5

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

For a tool with 16 parameters, 3 required inputs, an output schema, and many statistical siblings, this description is severely incomplete. It fails to state what the CLR confidence set is for, what inputs mean in context, what the output contains, or how it relates to alternative IV inference tools.

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 100%, so the schema already documents all 16 parameters. The description itself adds no parameter-specific meaning, but because the schema carries full parameter explanations, the baseline of 3 is appropriate.

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

Purpose2/5

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

The description mainly restates the tool name ('Moreira (2003) CLR confidence set') with a citation, but lacks an explicit verb and resource description such as 'Compute a confidence set...'. The phrase 're-export of Validation: certified parity evidence' is cryptic and conveys no functional meaning, making it hard for an agent to know precisely what action this tool performs.

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

Usage Guidelines1/5

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

There is no guidance about when to use this tool versus alternatives such as anderson_rubin_ci or other IV confidence-set tools. The description provides no context, prerequisites, or exclusions, leaving the agent to guess the appropriate invocation scenario.

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

conformalB
Read-only

Unified conformal causal inference dispatcher. kind= selects the estimator: 'cate' / 'counterfactual' / 'ite' (Lei-Candes 2021 base) / 'weighted' (TBCR 2019 primitive) / 'density' / 'multidp' / 'debiased' / 'fair' (2025-2026 frontier) / 'continuous' (dose-response) / 'interference' (cluster-exchangeable). Kwargs pass through to the target function; see sp.conformal_family guide. Assumptions: Exchangeability of calibration and test points (base case); For kind='weighted': known or estimable density ratio between calibration and test; For kind='cate' / 'ite': selection-on-observables with correct propensity / outcome model. Pre-conditions: calibration sample disjoint from training sample (auto-split or user-supplied); exchangeability between calibration and test distributions (weighted variants for covariate shift); for CATE / ITE variants: unconfoundedness + overlap on covariates. Failure modes: Calibration and test distributions differ (covariate shift) -> Use kind='weighted' with estimated density ratios; Calibration set too small -- intervals wide -> Increase calibration sample or raise alpha; coverage gets loose below ~100; Miscalibrated nuisance (propensity / outcome) for CATE...

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoConformal estimator -- call sp.conformal_available_kinds() for the full list.cate
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior1/5

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

The description says 'Kwargs pass through to the target function,' implying that additional/unlisted arguments are accepted, while the annotations set openWorldHint=false, indicating a closed-world parameter set. This is a direct contradiction, so the description fails behavioral transparency despite providing useful failure-mode context.

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 opening sentence is strong and front-loaded, and the enumerations are valuable. However, the final failure-mode passage is a long run-on that ends with '...' without completing the miscalibrated-nuisance sentence, making the structure feel unfinished rather than intentionally concise.

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?

Given the tool's complexity, the description covers assumptions, preconditions, and failure modes, and the schema-plus-output-schema combination covers parameters and return structure. It is nearly complete, but it relies on an external guide for kwargs and leaves the failure-mode list truncated, preventing a 5.

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 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema for the central parameter `kind`, listing estimator families and linking assumptions/failure modes to specific choices. Other parameters like `detail` and `as_handle` are already well documented in the schema, so no further description is needed.

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 role ('Unified conformal causal inference dispatcher') and enumerates the estimator kinds it can select, so an agent can tell what the tool computes. It does not explicitly differentiate itself from sibling tools such as conformal_ite, conformal_fair_ite, or conformal_synth beyond the word 'unified.'

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 gives explicit when-to-use guidance for estimator variants: e.g., covariate shift should use kind='weighted' with estimated density ratios, and small calibration sets should be addressed by increasing calibration sample or alpha. It does not discuss when to use this dispatcher versus the conformal-specific sibling tools, but it covers the internal kind-selection decision well.

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

conformal_fair_iteA
Read-only

Counterfactual-fair conformal prediction for ITE (2025). Wraps standard conformal ITE intervals with a demographic-parity adjustment, giving distribution-free coverage under protected-attribute shifts. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Exchangeability for conformal coverage, applied within protected-group strata; Counterfactual fairness: protected attribute excluded from the outcome regression (used only for stratified calibration); ITE ignorability / overlap so the treated and control nuisances are identified. Pre-conditions: DataFrame with y, treat, predictive covariates, and a categorical protected column; Calibration set per protected stratum for group-wise conformal coverage; Optional test_data to emit fair ITE intervals on. Failure modes: A protected stratum has too few calibration rows for valid group-wise quantiles -> Collapse sparse protected categories or pool strata before calibration; protected column accidentally leaks into covariates, breaking counterfactual fairness -> Remove the protected attribute from covariates; pass it only via the protected argument. Alternatives: sp.conformal,...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
protectedYesProtected-attribute column
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark the tool as read-only, and the description adds substantial context beyond that: explicit statistical assumptions (exchangeability, counterfactual fairness, ITE ignorability/overlap), failure modes for sparse strata and protected-column leakage, and a validation evidence tier. There is no contradiction with readOnlyHint=true since the operation is pure computation.

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 long but well-organized into labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives), with the core purpose front-loaded in the first sentence. Every section contributes operational value and earns its place for a tool with 11 parameters.

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 description. The definition covers prerequisites, assumptions, failure modes, and alternatives, making it nearly complete for an agent to decide when and how to call it. The only gaps are the truncated alternatives list and the phantom test_data reference, which keep it from a perfect score.

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 100%, so the baseline is 3. The description adds pre-conditions about calibration sets and protected-stratum grouping, but it also references an 'optional test_data' parameter that does not appear in the input schema, which could mislead an agent. No additional meaning is provided for alpha, detail, as_handle, or the other schema-documented parameters.

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 method ('Counterfactual-fair conformal prediction for ITE') and immediately differentiates it from siblings like conformal_ite and conformal_synth by the demographic-parity adjustment. The verb 'wraps' and the outcome ('distribution-free coverage under protected-attribute shifts') make the function's role unmistakable.

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?

Pre-conditions clearly state the required data shape (y, treat, predictive covariates, protected column) and the calibration-set prerequisite, and failure modes give actionable remediation steps. However, the description never explicitly tells the agent when to choose this tool over conformal_ite or other conformal variants; the alternatives line is truncated ('sp.conformal,...'), leaving the selection rule implied rather than stated.

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

conformal_iteD
Read-only

Conformal ITE -- article alias for :func:conformal_cate. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesFeature matrix or covariate DataFrame.
dYesd parameter (str).
yYesOutcome variable column name or outcome array.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.9/5.0
Behavior2/5

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

The readOnlyHint annotation already tells the agent this is a safe read operation. The description adds only the phrase 'Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact)', which is a cryptic reference to evidence tiers and does not disclose what happens during execution, how validation works, or what inputs are expected.

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

Conciseness2/5

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

The description is short, but brevity here comes from under-specification rather than efficient communication. The first clause restates the tool name, and the validation clause is jargon-heavy without explaining the validation concept.

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

Completeness1/5

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

With 9 parameters, a rich output schema, and dozens of sibling tools, this description provides almost no actionable context. An agent cannot determine what conformal_ite does, what data it expects, how it relates to conformal_cate, or when to prefer it over conformal_fair_ite or conformal_synth. The output schema covers return values, but the core operational purpose remains unknown.

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 100%, so the agent already has complete parameter documentation in the schema. The description itself adds no parameter meaning, but per the calibration baseline, when the schema covers all parameters, a score of 3 is appropriate.

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

Purpose2/5

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

The description says 'Conformal ITE -- article alias for conformal_cate', which identifies it as an alias but never states what the tool computes or what conformal_cate does. 'Conformal ITE' is essentially a rebranding of the name, and the sibling list contains conformal, conformal_fair_ite, and conformal_synth, so the agent cannot distinguish this tool from those alternatives.

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

Usage Guidelines1/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 conformal, conformal_fair_ite, conformal_synth, or any other sibling. The phrase 'article alias' hints at a publication-oriented use case, but it does not state conditions, prerequisites, or alternatives.

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

conformal_synthA
Read-only

Conformal inference for synthetic control. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable name.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
grid_sizeNoNumber of points in the hypothesis grid for CI inversion.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
grid_rangeNo(min, max) of the hypothesis grid. If None, auto-determined from pre-treatment residual scale.
scm_methodNoWhich SCM variant to use for weight estimation. Currently supports 'classic' (constrained) and 'ridge'.classic
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
penalizationNoRidge penalty (used when scm_method='ridge').
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

The description goes well beyond the sparse readOnlyHint annotation by disclosing identifying assumptions (SUTVA, no anticipation), preconditions, and failure modes such as large pre-treatment RMSPE and non-extreme placebo estimates. It tells the agent what can go wrong and what actions to take. No contradiction with annotations is present.

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 compact for the amount of content it carries, with labeled sections for Assumptions, Pre-conditions, Failure modes, Alternatives, and typical N. It is front-loaded with the purpose, and each segment adds decision-relevant information without 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?

For a 16-parameter, method-heavy tool with an output schema, this description provides the assumptions, prerequisites, failure handling, alternatives, and sample-size rule of thumb an agent needs before calling. The schema and output schema cover the mechanical parameters, so nothing essential appears missing.

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 descriptions cover 100% of parameters, so the description is not required to repeat parameter details. It does conceptually contextualize donor weights, pre-period length, treated unit, and treatment time, but it adds no direct syntax or format guidance beyond the schema. Baseline 3 is appropriate.

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 opens with the specific method ('Conformal inference for synthetic control') and then details assumptions, preconditions, failure modes, and alternatives. It clearly identifies what the tool computes and distinguishes it from sibling SCM tools, though it uses a noun phrase rather than an explicit verb such as 'estimates'.

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?

Pre-conditions spell out the data requirements (treated unit plus donor pool, panel, long pre-period), and failure modes advise when the estimate is unreliable and mention bias-corrected alternatives sd and augsynth. Alternative tools are listed, though the mapping of when to prefer each alternative over conformal_synth is not fully specified.

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

conleyA
Read-only

Compute Conley (1999) spatial -- and optionally spatio-temporal -- HAC Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Cost: Sparse and scale-safe: a scipy cKDTree ball query enumerates only observation pairs within dist_cutoff, so memory is O(n + pairs-within-cutoff) rather than O(n^2). This is the recommended Conley path on large samples -- unlike feols(vce='conley') / hdfe_ols(vce='conley'), which are dense. Cost still grows with dist_cutoff: a cutoff large enough to link most observations recovers the quadratic pair count.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesColumn name for latitude.
lonYesColumn name for longitude.
timeNoColumn name holding the time period. Must be integer-valued. Requires ``lag_cutoff`` and ``unit``.
unitNoColumn name identifying the panel unit. Enables panel de-duplication: the spatial neighbour search runs on the distinct unit coordinates rather than on every row, so a unit observed T times costs one point in the KD-tree instead of T.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoSpatial kernel: ``"uniform"`` (indicator) or ``"bartlett"`` (linearly declining weight ``1 - d/h``).uniform
resultYesFitted OLS result. Must have ``data_info`` containing ``'X'`` (design matrix), ``'y'`` (response), and ``'residuals'``.
distanceNo``"haversine"`` uses great-circle distance on a sphere of radius 6371 km, and is symmetric. ``"planar"`` reproduces ``acreg``'s convention exactly: 111 km per degree of latitude and ``cos(lat_ref) * 111`` km per degree of longitude, anchored at the *reference* point, which makes the distance asymmetric; the resulting covariance is symmetrised the same way ``acreg`` does (Mata ``_makesymmetric``, which mirrors the lower triangle). Choose ``"planar"`` for bit-level ``acreg`` parity, ``"haversine"`` for a proper great-circle metric.haversine
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
lag_cutoffNoSerial-correlation bandwidth in periods, for pairs within the same unit. Requires ``time``.
dist_cutoffYesDistance cutoff *h* in kilometres. Pairs farther apart than this receive zero weight.
time_kernelNoTime kernel: ``"bartlett"`` (``1 - |dt| / (lag_cutoff + 1)``, the Newey-West convention, matching ``acreg``'s ``hac bartlett``) or ``"uniform"`` (indicator, matching ``acreg`` without ``hac``).bartlett
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
lag_cutoff_crossNoTime bandwidth for pairs drawn from *different* units -- ``acreg``'s ``lagdist()``. Defaults to ``0`` (``acreg``'s default), i.e. contemporaneous cross-unit correlation only.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is known. The description adds valuable behavioral context: memory complexity (O(n + pairs-within-cutoff) vs O(n^2)), scaling with dist_cutoff, and the nature of the output (validated evidence tier). No contradiction with 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?

The description is moderately long but each sentence carries purpose: purpose, cost, differentiation, and scaling behavior. It is front-loaded with the main action, and the comparison to alternatives is placed after the core purpose. No wasted words, though it could be slightly tighter.

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?

Given the tool's complexity (18 params, 5 required) and the existence of an output schema, the description covers the key contextual elements: what it computes, cost behavior, and when to use it. It doesn't mention edge cases or prerequisites beyond what the schema already documents, but the output schema fills the return-format gap. A strong overall package.

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 100%, so each parameter is already documented in detail (e.g., distance, kernel, time_kernel). The tool description adds no new parameter-level semantics beyond what the schema provides; it only ties dist_cutoff to cost, which is more behavioral than parameter meaning. Baseline 3 applies.

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 ('Compute') and resource (Conley HAC) with scope (spatial and spatio-temporal), and explicitly names the validation output tier. It differentiates from siblings by mentioning feols(vce='conley') and hdfe_ols(vce='conley') as dense alternatives, so an agent can distinguish it without inspecting 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?

The description gives a clear recommendation: 'This is the recommended Conley path on large samples' and contrasts it with dense alternatives. It also explains the cost trade-off with dist_cutoff. However, it doesn't explicitly state when to prefer the alternatives (e.g., small samples or exact parity needs), leaving some inference.

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

continuous_didA
Read-only

DiD with continuous treatment intensity. Four modes: (i) 'twfe' TWFE with dosexpost interaction; (ii) 'att_gt' dose-quantile group-time ATT versus the untreated (dose=0) arm with bootstrap SE (heuristic); (iii) 'dose_response' local-linear regression of DeltaY=Y_post-Y_pre on baseline dose; (iv) 'cgs' Callaway-Goodman-Bacon-Sant'Anna (2024) ATT(d|g,t) MVP -- 2-period design, OR only, bootstrap SE, [pending verification] markers on paper formulas. Full CGS parity (cohort aggregation, DR/IPW, analytical IF variance) is on the roadmap -- see docs/rfc/continuous_did_cgs.md. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Known limitations: method='cgs' is an MVP -- 2-period design, OR only, bootstrap SE; full CGS parity (cohort aggregation, DR/IPW, analytical IF variance) is on the roadmap (see docs/rfc/continuous_did_cgs.md). Other modes (twfe / att_gt / dose_response) are stable. Assumptions: Parallel trends in potential outcomes across dose levels; No anticipation of treatment; Strong parallel trends (CGS 2024) required for ATT(d|g,t) interpretation in att_gt mode. Pre-conditions: panel data with unit x time x outcome x contin...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable
idYesUnit identifier
doseYesContinuous treatment / dose variable
postNoBinary post-treatment indicator (inferred from t_pre / t_post if omitted)
seedNoRandom seed for reproducible stochastic steps.
timeYesTime period column
alphaNoSignificance level for confidence intervals and tests.
t_preNoLast pre-treatment period
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimation modeatt_gt
n_bootNoBootstrap replications for SE
t_postNoFirst post-treatment period
clusterNoCluster variable for SE (TWFE mode)
controlsNoControl variables
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
n_quantilesNoNumber of dose quantiles for discretisation
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

The description substantially enriches the readOnlyHint annotation by disclosing that cgs is an MVP with pending verification, that other modes are stable, that bootstrap SEs are heuristic, and that full CGS parity is on the roadmap. It also lists model assumptions and pre-conditions, giving an agent a realistic sense of the tool's reliability and scope.

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 description is front-loaded with purpose and mode names, but it is verbose and contains redundancy: the CGS MVP limitation and roadmap reference appear twice in nearly identical phrasing. The density of caveats is useful, but tighter editing would make it more effective.

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 complex econometric tool with 20 parameters and an output schema, the description is largely complete: it covers modes, assumptions, pre-conditions, known limitations, and validation status. It lacks an explicit comparison to sibling tools, but the output schema and rich schema descriptions fill most structural 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?

Schema coverage is 100%, so the baseline is 3, but the description adds useful meaning beyond the schema by explaining what the method parameter values actually compute, such as 'TWFE with dosexpost interaction' and 'local-linear regression of DeltaY=Y_post-Y_pre on baseline dose.' It does not systematically document all 20 parameters, but the additional method-level semantics justify a small uplift.

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 clearly states the tool's purpose as 'DiD with continuous treatment intensity' and enumerates four distinct estimation modes, giving a specific verb and resource. It does not explicitly differentiate itself from siblings such as cgs_continuous_did or did, despite overlapping method names in the sibling list, so it falls short of full sibling differentiation.

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 provides clear context on when the tool applies: it requires panel data with continuous treatment and lists pre-conditions, assumptions, and stable versus MVP modes. It does not explicitly say when to use another sibling tool instead, but it does give enough method-selection and caveat guidance to be useful.

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

continuous_iv_lateA
Read-only

LATE with a continuous instrument (Xie et al. 2025). Estimates the LATE on the maximal complier class via quantile-bin Wald ratios, weighted by the bin-pair with the largest first-stage response. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Instrument relevance (non-zero first stage); Exclusion restriction: the instrument affects the outcome only through the treatment; Independence/exogeneity of the instrument; for LATE, monotonicity (no defiers). Pre-conditions: An instrument plausibly affecting treatment, an endogenous treatment, and an outcome; A strong first stage (assess instrument strength before interpreting estimates); formula includes the (endog ~ instruments) parenthesised block. Failure modes: Weak first stage -- biased point estimates and unreliable conventional SEs -> Report first-stage F / effective F and use weak-IV-robust inference (Anderson-Rubin); First-stage F < 10 (Stock-Yogo 5% bias) -> Use weak-IV-robust inference (Anderson-Rubin) or LIML; Over-identification test rejects (sp.estat 'overid') -> At least one instrument is invalid; drop instruments or switch to just-identified LIML. Alterna...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
instrumentYesContinuous instrument
n_quantilesNoNumber of instrument quantile bins
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description does not contradict this. It adds behavioral context beyond annotations by documenting assumptions, validation tier, and failure modes such as weak first stage and over-identification. No destructive behavior is claimed, so no additional safety disclosure is needed.

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 description is front-loaded and uses labeled sections (Validation, Assumptions, Pre-conditions, Failure modes), which aids scanning. However, it is long and ends abruptly at 'Alterna...', indicating truncated content, and includes some boilerplate ('validated evidence tier') that may not be tool-specific.

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 complex estimator with an output schema and 13 documented parameters, the description covers assumptions, preconditions, and failure modes, which is useful. It is incomplete because the alternatives section is truncated and the formula-related precondition does not map cleanly onto the parameterized interface.

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 100%, so the schema already documents all 13 parameters; baseline is 3. The description's only parameter-adjacent note, the '(endog ~ instruments)' formula block, is a precondition rather than an explanation of the actual data_path/instrument/treat/y parameters. Thus it adds little beyond the schema.

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?

Description opens with a specific method statement: 'LATE with a continuous instrument (Xie et al. 2025)' and then defines the estimator as 'Estimates the LATE on the maximal complier class via quantile-bin Wald ratios, weighted by the bin-pair with the largest first-stage response.' This clearly identifies the operation and resource. It does not explicitly name a sibling tool for contrast, so it falls just short of full differentiation.

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?

Lists explicit pre-conditions (instrument plausibly affecting treatment, endogenous treatment, outcome, strong first stage) and assumption requirements (relevance, exclusion restriction, independence, monotonicity). Failure modes give conditional guidance ('First-stage F < 10 -> Use weak-IV-robust inference...'). It lacks explicit 'use X instead of Y' sibling comparisons, so not a 5.

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

contrastB
Read-only

Compute contrasts of predictive margins across levels of a variable. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoContrast type: - ``'r'`` (reference): each level vs *reference* level. - ``'ar'`` (adjacent): each level vs the previous level. - ``'gw'`` (grand-mean weighted): each level vs the weighted grand mean of all levels.r
resultYesFitted model result.
variableYesCategorical variable whose levels are contrasted.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
referenceNoReference level when ``method='r'``. Defaults to the smallest observed level.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With readOnlyHint=true, the safety profile is covered by annotations, but the description adds little behavioral context. The cryptic validation sentence ('validated evidence tier...') is not clearly behavioral and does not explain what the tool returns, how it chains with fitted results, or how as_handle affects 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 first sentence is concise and useful, but the second sentence is a disjointed fragment that reads as metadata rather than guidance, meaning not every sentence earns its place. Overall the description is short but contains unnecessary ambiguity.

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?

Despite the detailed parameter schema and existing output schema, the description omits critical context for a post-estimation tool: it does not state that a fitted model result is required, how it relates to 'margins', or any chaining/prerequisite behavior. An agent might not know how to invoke this correctly after obtaining margins.

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 100%, so the baseline is 3. The description does not add meaning beyond the schema; it only loosely aligns with the 'variable' parameter by mentioning 'levels of a variable', but provides no extra semantics.

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 uses a specific verb ('Compute') and names the precise output ('contrasts of predictive margins across levels of a variable'). It clearly distinguishes this from related tools like 'margins' by focusing on contrasts, and the scope is explicit.

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: an agent can infer this tool is for contrasting predictive margins across levels, but there is no explicit guidance on when to prefer it over alternatives such as margins, pwcompare, or lincom, nor any stated prerequisites or exclusions.

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

copula_sensitivityB
Read-only

Gaussian-copula sensitivity to unobserved confounding.

ParametersJSON Schema
NameRequiredDescriptionDefault
seYesse parameter (float).
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
sigma_uNoStandard deviations of the latent confounder and the outcome. With default values the bias coefficient is numerically equal to ``rho``, matching Chernozhukov-Cinelli-Hazlett's "percentile scaling."
sigma_yNoStandard deviations of the latent confounder and the outcome. With default values the bias coefficient is numerically equal to ``rho``, matching Chernozhukov-Cinelli-Hazlett's "percentile scaling."
estimateYesestimate parameter (float).
rho_gridNoCorrelation grid. Defaults to ``np.linspace(-0.5, 0.5, 21)``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so the agent knows this is a read-only analysis. The description adds the Gaussian-copula modeling assumption, which is useful behavioral context beyond the annotation. However, it does not disclose what the output contains (e.g., bias-adjusted estimates, confidence intervals, plots) or whether it returns a fitted object, despite the output schema existing. No contradiction with 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?

The description is a single, compact sentence that conveys the core method and target. It is front-loaded and free of fluff. It could add a bit more context without becoming verbose, but as written it is appropriately concise.

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?

Given the tool has 12 parameters, a rich schema, and an output schema, the description is minimally adequate but leaves gaps. It does not explain what the tool returns, how to interpret the sensitivity results, or when to choose it over the many sibling sensitivity tools. The schema covers parameters, but the description does not help an agent decide whether this is the right tool for a given confounding problem.

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 100%, so the schema already documents all 12 parameters. The description adds no parameter-level meaning beyond the schema. The schema itself provides rich detail (e.g., 'detail' levels, sigma_u/sigma_y percentile scaling, as_handle caching), so the baseline 3 is appropriate.

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 'Gaussian-copula sensitivity to unobserved confounding' identifies a specific statistical method (Gaussian copula) and its purpose (sensitivity analysis for unobserved confounding). It is clear enough to distinguish from generic 'sensitivity' tools, though it does not explicitly name sibling alternatives or state what the tool produces (e.g., a sensitivity table, plot, or bounds).

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 provides no guidance on when to use this tool versus alternatives like 'sensitivity', 'sensemakr', 'evalue', 'unified_sensitivity', or 'synth_sensitivity'. It does not state prerequisites (e.g., needing a fitted model, estimate, and standard error) or what kind of confounding scenario it addresses. The agent must infer usage from the name and parameters.

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

coxC
Read-only

Cox Proportional Hazards model via partial likelihood. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoCovariate column names (overrides formula RHS).
tiesNoTie-handling method: ``'efron'`` or ``'breslow'``.efron
alphaNoSignificance level for confidence intervals.
eventNoColumn name for event indicator (1 = event, 0 = censored).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNo``'hc0'`` for sandwich SE.nonrobust
strataNoColumn name for stratification variable.
clusterNoColumn name for cluster-robust SE.
formulaNoFormula of the form ``'duration ~ x1 + x2'``. If given, ``duration`` is inferred from the LHS.
durationNoColumn name for follow-up time (overrides formula LHS).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
hazard_ratioNoIf True, report hazard ratios in the summary alongside coefficients.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the safety profile is covered. The description adds the estimation method ('via partial likelihood'), which is a useful behavioral detail, but the 'Validation: certified parity evidence' phrase is vague and does not meaningfully disclose behavior such as output structure, censoring handling, or default settings.

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 description is very short and front-loaded with the model type, which is good. However, the sentence 'Validation: certified parity evidence.' is cryptic and does not clearly earn its place, and the overall terseness leaves out useful framing for an agent.

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 complex 16-parameter survival model, the description is too thin. It does not explain when Cox regression is appropriate, how it relates to censoring and duration/event columns, or why an agent should choose this over cox_frailty, aft, or survreg. The schema fills parameter details, but the high-level modeling context is missing.

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 100%, so the input schema already documents all 16 parameters and their roles. The description itself adds no parameter-level meaning beyond identifying the model type, matching the baseline for high schema coverage.

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 identifies the tool as a Cox Proportional Hazards model via partial likelihood, which clearly indicates the modeling approach and target resource. However, it lacks a specific verb like 'fit' or 'estimate', and it does not differentiate this tool from related siblings such as cox_frailty, aft, or survreg.

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 provides no guidance on when to use this tool versus alternatives like aft, cox_frailty, or survreg. There are no exclusion criteria, no prerequisites, and no mention of suitable data scenarios, so the agent receives no usage direction beyond the tool's name.

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

cox_frailtyB
Read-only

Cox proportional hazards with shared gamma frailty. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
tolNoNumerical convergence tolerance.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterYesColumn identifying clusters (e.g. hospital, site).
formulaYes``"duration + event ~ x1 + x2"`` (like R's ``Surv(time, event) ~ x``).
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=trueched, and the description adds little beyond that. The validation-tier note mentions reliability but does not disclose what the tool returns, how the fit is performed, or any side effects. For a model-fitting tool with no mutation, the description does not carry additional 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?

The description is short and front-loaded with the essential purpose. The first sentence is crisp hole; but the second sentence about validation tier is tangential and may not help an agent decide to invoke the tool. It is not verbose, but the validation sentence adds little operational value.

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?

Given the tool's sophistication (Cox frailty) and a rich schema with 100% coverage, the description is mostly complete for parameter usage. However, it lacks context on when this model is chosen over simpler Cox or shared-frailty alternatives, and does not mention outputs or assumptions. Since an output schema exists, return values are covered, but the absence of usage context keeps this at a minimum viable level.

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 100%, so the schema fully documents all 11 parameters. The description itself does not add any parameter-level meaning (e.g., the meaning of 'cluster' or 'formula' is left to the schema). Hence, a baseline score of 3 is appropriate.

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 clearly states the tool fits a Cox proportional hazards model with shared gamma frailty, immediately distinguishing it from plain Cox (cox) and other survival models like survival. It names the specific method and the resource it operates on.

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 is given about when to use this tool versus its siblings (e.g., cox, survreg, aft, logrank_test). It does not mention prerequisites, data requirements, or situations where a different survival tool would be appropriate. The only added sentence concerns validation tier, which is not a usage qualifier.

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

cps_wageC
Read-only

CPS-style wage data with a gender gap.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNon parameter (int).
seedNoRandom seed for reproducible stochastic steps.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so the safety profile is known. However, the description adds almost no behavioral context: it does not explain what happens with n/seed, whether data_path overrides built-in data, or what kind of payload is returned beyond the enum on detail. This is not a contradiction, but it is a missed opportunity.

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

Conciseness2/5

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

The description is very short, but this is under-specification rather than useful conciseness. A one-line tagline that lacks a verb does not give the agent enough actionable information.

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 8 optional parameters, an output schema, and a huge sibling list, the description is far too sparse. The agent cannot determine the tool's primary behavior, expected output, or how to chain it with as_handle/result_id. The description is inadequate for correct selection and 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 100%, so the schema fully documents every parameter. The baseline of 3 applies. The description adds nothing about how the parameters relate to the 'gender gap' or the wage data, but it does not need to repeat the schema.

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

Purpose2/5

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

The description is a noun phrase ('CPS-style wage data with a gender gap') rather than a statement with a verb. It roughly restates the tool name and adds one attribute, but never says whether the tool generates, loads, returns, or fits this data. It also does not distinguish cps_wage from related data-oriented siblings like mincer_wage_panel.

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 alternatives, no exclusions, and no prerequisites. The agent is left to infer the intended scenario from the name and schema alone.

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

cr2_seA
Read-only

CR2 bias-corrected cluster-robust standard errors (Bell & McCaffrey 2002). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesA fitted regression result from ``sp.regress()``.
clusterYesName of the cluster variable in ``data``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

The readOnlyHint annotation already signals this is a safe read operation. The description adds context about the specific CR2 bias correction and validation evidence, which is useful, but it does not disclose behavior such as required cluster sizes, output structure, or limitations beyond what the annotation and schema already provide.

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 very short: two sentences that front-load the estimator identity and citation. It contains no fluff and earns its place, though it is terse enough that a bit more usage context could fit without harm.

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?

Given the read-only annotation, 100% schema coverage, and the presence of an output schema, the description is largely sufficient for an agent to invoke the tool correctly. It could add guidance on when CR2 is preferred over alternative cluster-robust methods, but nothing critical is missing.

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 100%, so all nine parameters are documented in the input schema itself. The tool description adds no additional parameter-level meaning beyond that baseline, so the appropriate score is 3.

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 clearly identifies the tool as computing CR2 bias-corrected cluster-robust standard errors, citing Bell & McCaffrey 2002. The 'CR2' qualifier differentiates it from sibling tools like cluster_robust_se and cr3_jackknife_vcov, though it does not explicitly name them.

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 states what the tool computes but provides no explicit guidance on when to choose CR2 over alternative cluster-robust estimators such as CR1 or CR3. The validation note hints at reliability but does not give selection criteria or exclusion conditions.

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

cr3_jackknife_vcovB
Read-only

CR3 cluster-jackknife variance (delete-one-cluster). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesFeature matrix or covariate DataFrame.
yYesOutcome variable column name or outcome array.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterYesCluster identifier column for clustered standard errors.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description need not repeat safety. It adds the methodological detail of 'delete-one-cluster,' which is useful. It does not describe output format, but an output schema exists. No contradiction with annotations.

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 first sentence is concise and effective. The second sentence about validation evidence tier is tangential and may mislead an agent into thinking the tool is about validation rather than estimation. It adds noise without operational value, so the structure is only partially effective.

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?

Despite the rich schema and output schema, the description fails to explain when CR3 jackknife should be chosen over other cluster-robust or jackknife methods. With over 100 siblings, this omission is significant; an agent lacks decision guidance for tool selection.

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 100% with detailed descriptions for all 9 parameters, including the 'detail' enum and as_handle behavior. The description's reference to 'delete-one-cluster' aligns with the cluster parameter but adds no new information beyond the schema, so the baseline of 3 is appropriate.

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 clearly states the tool computes CR3 cluster-jackknife variance using delete-one-cluster. This is specific enough to distinguish it from siblings like cr2_se, jackknife_se, and cluster_robust_se. The validation sentence is extraneous but does not obscure the core purpose.

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 is provided on when to use this tool versus the many similar alternatives (cr2_se, jackknife_se, cluster_robust_se, multiway_cluster_vcov). An agent would have to infer the appropriate context from the name alone, which is insufficient given the large sibling set.

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

cross_validateA
Read-only

Cross-validate ONE estimand across INDEPENDENT engines (StatsPAI, pyfixest, linearmodels, DoubleML, R's fixest, Stata) and report whether they agree (AGREE / PARTIAL / DISAGREE / INSUFFICIENT). Use this to honour the cross-package reproducibility rule: trust a number only when >=2 independent implementations reproduce it. Needs a data_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
gNoDiD only: cohort / first-treatment period (0 = never treated).
iNoDiD only: unit-id column.
tNoDiD only: time column.
yNoOutcome column.
vcovNo
endogNoEndogenous regressors (IV).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
enginesNoEngines to run, e.g. ['statspai','R::fixest','pyfixest','Stata']. Omit for 'auto' (all installed + applicable).
formulaNofixest-style 'y ~ x | fe | endog ~ z'.
estimandYesModel family to fit in every engine.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentNoFocal regressor (reconciled coefficient).
covariatesNo
instrumentsNo
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
fixed_effectsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=false. The description adds the key behavioral trait: it runs multiple independent engines and reports an agreement verdict, plus the rule for trusting a number. It does not contradict annotations. It does not detail the exact response structure beyond the enum, but the output schema (present) covers that. Overall it provides meaningful behavioral context beyond 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.

Conciseness5/5

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

The description is a compact three sentences with zero waste. The purpose is front-loaded, the usage guidance follows immediately, and the data_path requirement is stated last. Every sentence 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?

Given the tool's complexity (19 parameters, 6 estimand types) and the existence of an output schema, the description covers the essential context: what it does, when to use it, and the key requirement (data_path). It does not explain the meaning of each estimand or the exact output fields, but the schema and output schema handle that. It is complete enough for an agent to decide and call it correctly.

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 79%, so the schema already documents most parameters. The description only adds a note about data_path being needed, which is redundant with the required list (though data_path is not required, only estimand is required). It does not add meaningful semantic detail beyond the schema for the parameters. Baseline 3 is appropriate.

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 ('cross-validate'), a specific resource ('ONE estimand across INDEPENDENT engines'), and enumerates the engines (StatsPAI, pyfixest, linearmodels, DoubleML, R's fixest, Stata). It also names the output categories (AGREE / PARTIAL / DISAGREE / INSUFFICIENT), making the tool's function unambiguous and distinct from the many siblings that focus on single estimators or diagnostics.

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 gives explicit when-to-use guidance: 'Use this to honour the cross-package reproducibility rule: trust a number only when >=2 independent implementations reproduce it.' It also notes the need for data_path. It does not explicitly name alternatives for when not to use it, but the context is clear enough to route an agent correctly.

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

cs_reportC
Read-only

One-call staggered-DID workflow following Baker et al. (2026).

ParametersJSON Schema
NameRequiredDescriptionDefault
gNoOutcome / cohort / time / unit id columns (required when ``data_or_result`` is a DataFrame).
iNoOutcome / cohort / time / unit id columns (required when ``data_or_result`` is a DataFrame).
tNoOutcome / cohort / time / unit id columns (required when ``data_or_result`` is a DataFrame).
xNoCovariates for conditional parallel trends.
yNoOutcome / cohort / time / unit id columns (required when ``data_or_result`` is a DataFrame).
alphaNoSignificance level for confidence intervals and tests.
max_eNoEvent-time window passed to the dynamic aggregation.
min_eNoEvent-time window passed to the dynamic aggregation.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoMultiplier-bootstrap replications for :func:`aggte`.
balanceNobalance parameter (bool).
save_toNoWhen set, treats the value as a *path prefix* and writes the report in every supported format in one call: - ``<prefix>.txt`` -- fixed-width plain-text report - ``<prefix>.md`` -- GitHub-flavoured Markdown - ``<prefix>.tex`` -- booktabs LaTeX fragment - ``<prefix>.xlsx`` -- multi-sheet workbook - ``<prefix>.png`` -- 2x2 summary figure (only if matplotlib is installed; silently skipped otherwise) Missing parent directories are created on the fly.
verboseNoIf ``True``, print the report before returning.
weightsNoUnit weights omega. Changes the target parameter, not just precision -- see :func:`statspai.did.callaway_santanna`.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
estimatorNoestimator parameter (str).dr
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
rr_methodNoSensitivity restriction handed to :func:`breakdown_m`.smoothness
triangulateNoAlso fit the other covariate strategies (regression adjustment, IPW, doubly robust) and report them side by side, as in the paper's Table 7 / Figure 4. Only meaningful with covariates.
anticipationNoanticipation parameter (int).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoSeed for the bootstrap (set to ``None`` for non-reproducibility).
control_groupNocontrol_group parameter (str).nevertreated
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
data_or_resultYesEither a long-format panel (then ``y, g, t, i`` are required and :func:`callaway_santanna` is run first), or an already-fitted :func:`callaway_santanna` result.
functional_formNofunctional_form parameter (bool).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so the description need not repeat that. However, it adds no behavioral context: it does not disclose that the tool prints a report (verbose parameter), can save files (save_to), or returns a structured payload. For a tool with 27 parameters and an output schema, this is a significant gap beyond what annotations cover.

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 description is a single, concise sentence that is front-loaded with the main purpose. However, it is under-specified to the point of being unhelpful for a complex tool. Conciseness is good, but it sacrifices necessary detail.

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

Completeness1/5

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

Given the tool has 27 parameters, an output schema, and a rich set of siblings (callaway_santanna, aggte, did, etc.), the description is severely incomplete. It does not explain what the report contains, how the workflow operates, or how it relates to other DID tools. An agent would struggle to decide when to invoke this and what to expect.

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 100%, so all parameters have individual descriptions. The description itself does not add any parameter-level meaning or relationships (e.g., that data_or_result can be a DataFrame or result handle, or that y,g,t,i are required together). It meets the baseline but adds no extra value.

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 states the tool is a 'One-call staggered-DID workflow' referencing Baker et al. (2026), which conveys the method and that it is a complete pipeline. However, it does not explicitly say it produces a report, nor does it differentiate from closely related siblings like callaway_santanna, aggte, or staggered_cs. The purpose is clear enough but lacks precision.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus alternatives. The description does not mention prerequisites, typical scenarios, or exclusions. An agent would have to infer usage from the schema and sibling names, which is insufficient.

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

cumincC
Read-only

Cumulative incidence functions for competing risks (Aalen-Johansen). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for the confidence bands.
eventYesColumn name for the event indicator. ``0`` = censored; ``1, 2, ...`` = competing causes.
groupNoColumn name for a grouping variable. When supplied, CIFs are estimated per group and Gray's K-sample test is reported per cause.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
durationYesColumn name for the follow-up time.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true, so the safety profile is covered. The description adds a 'Validation' tier line, but it is cryptic and does not disclose concrete behavioral traitsβ€”such as returned objects, use of grouping for Gray's test, or caching behavior via as_handle. It does not contradict 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.

Conciseness2/5

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

The first sentence is concise, but the second sentence about 'Validation: validated evidence tier' is vague and does not help an agent invoke the tool. It adds confusion rather than actionable context, so it does not earn its place.

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?

Despite full schema documentation and an output schema, the description lacks context that matters for correct selection: when to prefer cuminc over kaplan_meier or finegray, and what the validation tier means for interpreting output. For a 10-parameter competing-risks tool, this is insufficient.

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?

All 10 parameters have schema descriptions, including event coding, data path formats, and the detail enum. The description itself adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.

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 the resource and method clearly: cumulative incidence functions for competing risks using Aalen-Johansen. It differentiates from siblings like kaplan_meier and finegray via the competing-risks framing, though it lacks an explicit verb like 'estimates'.

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 is provided on when to choose cuminc over closely related tools such as kaplan_meier, finegray, or survival_sensitivity. The description does not mention typical use cases, data requirements, or prerequisites beyond what the schema lists.

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

cusum_testC
Read-only

CUSUM test for parameter stability. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoRegressors.
yYesDependent variable.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

The readOnlyHint annotation already establishes that no data mutation occurs; the description itself adds no behavioral context beyond that. It also does not mention the as_handle server-side caching behavior or what the validated-evidence sentence means operationally.

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

Conciseness2/5

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

The first sentence is tight, but the second sentence ('Validation: validated evidence tier ...') is a low-value, near-templated clause that does not help a caller understand or invoke the tool. It is not wrong enough to be misinformation, but it wastes space.

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?

Combined with the detailed 9-parameter schema and the presence of an output schema, an agent can likely invoke the basic CUSUM test from the first sentence alone. However, the description is silent on relationships to structural_break/reset_test and on the meaning of the validation tier, so completeness is only adequate.

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 100%, so the parameter definitions already carry the meaning. The description contributes nothing extra to parameter semantics; under the rubric, baseline 3 applies when the schema does the heavy lifting.

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 first sentence names the exact test (CUSUM) and its purpose (parameter stability), which lets an agent infer this is a structural-change diagnostic. It does not explicitly contrast with nearby siblings such as structural_break or reset_test, so it stops short of full differentiation.

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 sentence tells the agent when to choose cusum_test over alternative stability or misspecification tests, nor are any prerequisites or exclusions given. The only hint is the implied statistical setting from 'parameter stability,' which is not explicit guidance.

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

dagA
Read-only

Declare a causal DAG and perform identification analysis: backdoor/frontdoor adjustment sets, d-separation, path enumeration, bad controls detection, variable role classification, do-operator. Assumptions: The graph is acyclic and contains the relevant common causes; Adjustment-set validity depends on the supplied graph being substantively correct. Pre-conditions: Nodes and directed edges encode a substantive causal model; Treatment and outcome nodes are named consistently. Failure modes: No valid adjustment set or cycle detected -> Inspect graph structure, remove cycles, or use sensitivity analysis for unobserved common causes. Alternatives: sp.identify, sp.dag_recommend_estimator, sp.swig. Typical minimum N: 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
specYesEdge spec: "Z -> X; Z -> Y; X -> Y"
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark this readOnlyHint=true, and the description adds substantial behavioral context beyond that: acyclicity assumptions, dependence on substantive correctness of the graph, preconditions about node encoding, and concrete failure modes with remediation steps. It does not contradict 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?

The purpose is front-loaded and each section (assumptions, preconditions, failure modes, alternatives) earns its place. It is somewhat dense, but the structure makes it scannable and the brevity is appropriate for a tool with many capabilities.

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 complex DAG-identification tool, the description covers the key contextual needs: when assumptions fail, what preconditions must hold, what to do on failure, and where to look for alternatives. The output schema handles return-value expectations, so nothing essential is missing for correct invocation.

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 100% and the parameter descriptions are already detailed (edge spec syntax, detail payload depths, caching behavior). The description adds extra semantic guidance on what the graph content should encode: treatment/outcome node naming consistency and availability of relevant common causes, which helps an agent form a correct spec.

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 verb ('Declare') and a specific resource ('a causal DAG'), then enumerates concrete capabilities: backdoor/frontdoor adjustment sets, d-separation, path enumeration, bad controls detection, variable role classification, and do-operator. This is far more specific than the tool name 'dag' alone and distinguishes it from generic causal tools.

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 includes explicit alternatives (sp.identify, sp.dag_recommend_estimator, sp.swig) and a failure-mode hint to use sensitivity analysis for unobserved common causes, which is useful guidance. However, it never states when to prefer this tool over those alternatives or when not to use it, so the agent must infer the routing from context.

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

dag_exampleB
Read-only

Load a classic textbook DAG: confounding, collider, mediation, discrimination, movie_star, police, frontdoor, bad_control_earnings, m_bias.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExample name, e.g. 'discrimination'
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the description need not restate read-only behavior. However, the description adds no behavioral traits beyond listing example names; it does not contradict 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.

Conciseness5/5

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

One front-loaded sentence with a clear verb and object, followed by a compact comma-separated list of example names. No filler or redundant content.

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 description is adequate for a simple call using the required 'name' parameter, and the output schema plus annotations cover return values and safety. However, it does not clarify how 'name' relates to the generic optional parameters such as data_path, result_id, or as_handle, which may confuse an agent trying to decide whether to supply them.

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 100%, so the baseline is 3. The description adds real value for the 'name' parameter by listing the complete set of valid example names, going beyond the schema's single example 'discrimination'. Other parameters are left to the schema.

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 clear verb and resource: 'Load a classic textbook DAG' and enumerates the specific example names. It is distinguishable from the sibling 'dag' tool as a loader of prebuilt examples, though it does not explicitly name the alternative.

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 sibling tools like 'dag', 'llm_dag_propose', or 'frontdoor', and no exclusions or conditions are stated. The only hint is 'classic textbook', implying pedagogical/reference use.

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

das_guptaC
Read-only

Das Gupta (1993) multi-factor decomposition. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
byNoColumn(s) identifying the stratum of each row, used to pair the rows of ``data_a`` and ``data_b``. Both frames must contain the same strata. Without ``by`` the rows are paired by position, which requires equal lengths.
data_aYesOne row per stratum (e.g. age group). The aggregate for each population is ``R = sum_i prod_f factor_{f,i}``; with a single row it is simply ``prod_f factor_f``.
data_bYesOne row per stratum (e.g. age group). The aggregate for each population is ``R = sum_i prod_f factor_{f,i}``; with a single row it is simply ``prod_f factor_f``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
factor_namesYesfactor_names parameter (Sequence[str]).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), and the description does not contradict them. The only added behavioral content is the cryptic 'Validation: certified parity evidence,' which does not explain what is validated, how, or what output to expect. It adds noise rather than useful behavioral disclosure beyond 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.

Conciseness3/5

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

The description is short and front-loaded with the method name, which is efficient. However, the second fragment 'Validation: certified parity evidence' is a cryptic aside that does not earn its place β€” it could mislead an agent rather than clarify behavior. This is under-specification dressed as conciseness.

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?

Despite 100% schema coverage and an output schema, the description is too terse for a 10-parameter decomposition tool in a crowded sibling environment. It never explains what the decomposition produces, how factor_names map to the analysis, or how it differs from oaxaca/melly_decompose/kitagawa_decompose. An agent would need deep schema study to invoke it correctly.

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 100%, so all ten parameters are documented in the schema itself. The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies; there is no extra value nor any gap to compensate for.

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 method (Das Gupta 1993) and labels it a 'multi-factor decomposition,' giving a verb+resource. However, it never states what is being decomposed β€” the schema's data_a/data_b/factor_names imply a two-population factor decomposition, but the description leaves that to inference. Among roughly fifteen decomposition siblings (oaxaca, melly_decompose, kitagawa_decompose, yun_nonlinear, etc.) it differentiates only by the method citation, not by what it computes or how it differs.

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 is provided, and no alternative decomposition tools are named. An agent must infer from the schema that it compares two populations with factor contributions; nothing in the description helps select this tool over the crowded decomposition sibling set.

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

dddA
Read-only

Triple Differences (DDD) estimator. Adds a within-treatment-group subgroup that is unaffected by treatment as an additional control dimension, relaxing parallel trends from 'same trend across groups' to 'same differential trend across subgroups within groups'. Validation: certified parity evidence. Assumptions: Parallel trends in the DDD differential (weaker than DID PT); No anticipation; SUTVA. Pre-conditions: treat x time x subgroup variation exists; subgroup is binary and meaningful within treatment group. Failure modes: Staggered adoption with heterogeneous effects -> Textbook DDD can have negative weights with staggered timing. The Olden-Men (2022) / Strezhnev (2023) heterogeneity-robust DDD is on the roadmap (see docs/rfc/did_roadmap_gap_audit.md Section 4). Alternatives: sp.did_2x2, sp.callaway_santanna. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column.
alphaNoSignificance level for confidence intervals and tests.
treatYesPrimary treatment indicator
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoRobust standard-error or covariance estimator option.
clusterNoCluster identifier column for clustered standard errors.
weightsNoObservation weights.
subgroupYesWithin-group subgroup (1=affected, 0=not)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so the agent knows this is a read-only estimation operation. The description adds substantial behavioral context beyond that: it discloses the weaker parallel-trends assumption, the no-anticipation and SUTVA assumptions, the negative-weights failure mode under staggered adoption, and the roadmap for a heterogeneity-robust variant. It also gives a typical minimum N of 100. The only minor gap is not describing the return payload structure, but the output schema exists and the detail parameter documents payload depths.

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 dense but well-organized: definition, validation, assumptions, pre-conditions, failure modes, alternatives, and minimum N. Every sentence carries information. It is longer than typical but justified by the methodological complexity of DDD. The structure is logical, moving from what it is to when to use it to when not to use it.

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 complex causal-inference estimator with 15 parameters and a rich output schema, the description covers all critical decision points: identification assumptions, pre-conditions, failure modes, alternatives, and sample size guidance. The output schema and detail parameter handle return-value documentation. Nothing an agent needs to decide whether to call this tool and how to interpret its results is missing.

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 100%, so the baseline is 3. The description does not add parameter-level detail beyond the schema, but it does contextualize the key parameter 'subgroup' by explaining its role in the DDD design ('within-treatment-group subgroup that is unaffected by treatment'). The pre-conditions also clarify what values subgroup must take. This is adequate given full schema coverage.

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 opens with a precise definition: 'Triple Differences (DDD) estimator' and immediately explains the methodological mechanism ('Adds a within-treatment-group subgroup that is unaffected by treatment as an additional control dimension'). This clearly distinguishes it from DID estimators and other causal inference tools. The verb 'estimates' is implicit but the resource and scope are unambiguous.

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?

The description provides explicit when-to-use guidance: it relaxes parallel trends from 'same trend across groups' to 'same differential trend across subgroups within groups'. It lists pre-conditions (treat x time x subgroup variation exists; subgroup is binary and meaningful), failure modes (staggered adoption with heterogeneous effects), and names alternatives (sp.did_2x2, sp.callaway_santanna). This is exemplary routing guidance.

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

ddd_heterogeneousA
Read-only

Heterogeneity-robust triple differences (DDD) for staggered adoption. Decomposes DDD into per-(cohort, time) cells via a Callaway-Sant'Anna-style aggregation, with the unaffected subgroup's DID as a placebo. Avoids the negative-weight issue that textbook TWFE DDD inherits from TWFE DID (Goodman-Bacon 2021 analogue). Validation: certified evidence with scoped limitations. Known limitations: the placebo joint test is only produced on the bootstrap path; se='analytic' reports None for it, because that test needs the joint covariance of the placebo arms rather than of the DDD; control_group='notyettreated' is only partially comparable to triplediff 0.2.4: its per-control-cohort estimates agree exactly, but the reference misindexes the influence functions it combines, so the combined numbers differ by convention on cells where the comparison does not span the whole panel; the aggregation convention differs from triplediff::agg_ddd(type='simple'): the default weights cohorts by treated-eligible units; pass weight_by='cohort' to match the R package. Assumptions: Parallel trends relaxed to: same differential trend across treated vs never-treated, within both affected and unaffected subgro...

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoBase-period covariates; identification becomes CONDITIONAL DDD parallel trends
yYesOutcome variable column name or outcome array.
seNo'analytic' influence-function variance (exact, and what triplediff reports) or 'bootstrap' clustered on unit (the only path that fills in placebo_joint_test). Defaults to bootstrap without covariates, analytic with them
seedNoRandom seed for reproducible stochastic steps.
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for confidence intervals and tests.
cohortYesFirst-treatment period (never_value = never-treated)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
subgroupYesBinary within-group subgroup indicator (1=affected, 0=placebo)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
weight_byNoAggregation weights: 'eligible' (treated units in the affected subgroup) or 'cohort' (whole cohort, both subgroups -- reproduces triplediff::agg_ddd)eligible
est_methodNoNuisance combination: doubly robust, inverse probability weighting, or outcome regressiondr
never_valueNoValue in cohort for never-treated units
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
control_groupNoControl units: never-treated, or not-yet-treated cohorts combined by minimum distance (see the docstring warning -- that path deliberately diverges from triplediff 0.2.4, which misindexes its influence functions there)nevertreated
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=false. The description adds substantial context on known limitations, including placebo test availability and differences from triplediff. It does not contradict annotations, and it adds value beyond the schema by detailing edge cases.

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 description is information-dense but long and somewhat unstructured. It front-loads the main purpose well, but then goes into a long list of limitations and comparisons that could be better organized. Every sentence adds value, but the density may overwhelm an agent.

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?

Given the tool's complexity (20 parameters, 6 required, multiple enums, output schema present), the description covers the key methodological nuance, the placebo test behavior, and the differences from R. The description is complete enough for an agent to understand the tool's role and call it correctly, though it assumes prior knowledge of DDD.

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 input schema provides descriptions for all 20 parameters (100% coverage), so the baseline is 3. The tool description adds meaning by explaining how parameters like weight_by and control_group affect behavior and when they matter, which is not in the schema. It provides normative guidance on defaults and by mentioning conditional DDD for x.

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 clearly states the tool computes heterogeneity-robust triple differences (DDD) for staggered adoption, breaking it into per-cohort-time cells and using a placebo test. It distinguishes itself from textbook TWFE DDD, and the title and siblings (ddd, aggte) suggest this is a specialized variant.

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 explains when to use this tool (for heterogeneity-robust DDD in staggered adoption) and contrasts with TWFE DDD plus the R package triplediff. It gives a specific alternative (weight_by='cohort' to match R), but does not explicitly mention when NOT to use it or which sibling tools to choose over it.

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

decomposeA
Read-only

Unified entry point for all decomposition methods. Validation: certified parity evidence. Assumptions: Overlapping support of covariates across groups (reweighting / RIF methods are invalid outside overlap); Linearity assumption holds for Oaxaca-Blinder-type decompositions; non-linear methods (FFL/DFL/Machado-Mata) relax this; Conditional independence of group membership for causal interpretation (otherwise: descriptive decomposition only). Pre-conditions: Data contains a binary or categorical group indicator with both groups represented; Outcome and covariates are numeric (or properly encoded) and finite; Sample sizes per group are large enough to estimate group-specific moments (rule of thumb: each group >= 100). Failure modes: Trimming warning at common-support boundaries -> Inspect propensity-score support; restrict the analysis sample or use bounds; RIF coefficients explode at distribution tails -> Use higher-bandwidth kernel density, restrict quantile range, or switch to FFL. Alternatives: sp.dfl_decompose, sp.ffl_decompose, sp.oaxaca, sp.rif_decomposition. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodYesOne of the methods listed in ``available_methods()``. Aliases are supported (e.g. 'mm' -> 'machado_mata').
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true and openWorldHint=false, and the description adds substantial behavioral context beyond those: assumptions about overlap and linearity, pre-conditions on group sizes, failure modes with remediation steps, and a typical minimum N of 200. This goes well beyond the structured annotation data.

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 dense but well-structured with labeled sections: Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum N. Every sentence adds actionable information, and the core purpose is front-loaded in the first sentence.

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 tool's complexity, the description covers assumptions, preconditions, failure modes, alternatives, and sample-size guidance. An output schema exists, so return-value details are not required. The description provides everything an agent needs to decide whether and how to invoke decompose.

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 100%, so the schema already documents all 7 parameters including method aliases, detail levels, and data_path formats. The description does not add parameter-level meaning beyond the schema, so the baseline score of 3 is appropriate.

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 clearly identifies this as the unified entry point for all decomposition methods, which is a specific resource and scope. It distinguishes itself from the specialized sibling tools by naming them in the Alternatives section, so an agent can tell it apart from sp.dfl_decompose, sp.ffl_decompose, sp.oaxaca, and sp.rif_decomposition.

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?

The description provides explicit when-to-use guidance via the 'Unified entry point' framing and lists specific alternatives. It also includes conditional guidance in failure modes, e.g., 'RIF coefficients explode at distribution tails -> switch to FFL,' and assumption-based exclusions such as reweighting/RIF being invalid outside overlap.

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

demeanC
Read-only

Return the within-transformed x and the singleton keep mask. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
feYesfe parameter (Union[pd.DataFrame, np.ndarray, None]).
tolNoNumerical convergence tolerance.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
slopesNoslopes parameter (Optional[Sequence[SlopeSpec]]).
solverNosolver parameter (str).map
maxiterNomaxiter parameter (int).
weightsNoObservation weights.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
drop_singletonsNodrop_singletons parameter (bool).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, covering the safety profile. The description adds only the cryptic 'Validation: certified parity evidence' which is unclear and does not disclose any behavioral trait beyond what annotations provide. No contradiction.

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 extremely concise with no wasted words, and the main purpose is front-loaded. It is appropriately short, though it borders on 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?

Given the tool's complexity (14 parameters, many siblings) and the presence of an output schema, the description is inadequate. It fails to explain when to use this transformation, what the 'singleton keep mask' means, or how it fits into a causal inference pipeline. An agent would struggle to know when to invoke this 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 description coverage is 100%, so each parameter is already documented. The description adds no parameter-specific meaning, and the baseline of 3 applies because the schema does the heavy lifting.

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 ('Return') and resource (within-transformed x and singleton keep mask), making the core function clear to a technical audience. However, it uses jargon ('within-transformed', 'singleton keep mask') without explaining the econometric context, and it does not differentiate from closely related tools like absorb_ols or feols.

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

Usage Guidelines1/5

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

The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusion criteria. With over 500 sibling tools, the lack of any usage context leaves an agent unable to decide if demeaning is the right step.

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

demeaned_synthA
Read-only

De-meaned / De-trended Synthetic Control Method. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable name.
placeboNoRun in-space placebo inference.
variantNo* ``'demeaned'`` -- subtract unit-level pre-treatment means. * ``'detrended'`` -- subtract unit-level linear time trends.demeaned
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoAdditional covariates to match on.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
penalizationNoRidge penalty on weights.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period (inclusive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses methodological assumptions (SUTVA, no anticipation) and failure modes, which inform the agent about the tool's limitations and expected behavior. It also clarifies the de-meaning/de-trending operation tied to the variant parameter. No contradiction with 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?

The description is organized into labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), making it scannable and well-structured. Every sentence contributes actionable information, though it is somewhat long. It is appropriately sized for a complex causal inference tool.

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?

It covers assumptions, data requirements, failure modes with remedies, alternatives, and a minimum N heuristicβ€”comprehensive for tool selection and invocation. With an output schema present, it does not need to describe return values. A minor omission is an explicit statement of the estimand (e.g., ATT), but that is implicit for synthetic control methods.

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 100%, so all 16 parameters are already documented in the schema. The description adds no parameter-specific details beyond the implied variant from 'De-meaned / De-trended', which the schema already covers. It meets the baseline but does not go beyond it.

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 it is a 'De-meaned / De-trended Synthetic Control Method', clearly identifying the tool's purpose. It also lists assumptions and pre-conditions that further clarify what it does. However, it does not explicitly differentiate itself from sibling synthetic-control tools beyond naming alternatives.

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?

The description provides explicit pre-conditions (e.g., pre-treatment window long enough, outcome observed for every unit) and failure modes with concrete remedies (e.g., add donors or use sdid/augsynth). It also names alternative tools and gives a 'Typical minimum N' heuristic, giving an agent strong guidance on when to use this tool versus others.

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

design_intakeD
Read-only

Route design facts to a method-selection status.

ParametersJSON Schema
NameRequiredDescriptionDefault
needsNoneeds parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
controlsNoControl-variable column names.
estimandNoestimand parameter (Optional[str]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
assignmentNoassignment parameter (Optional[str]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
data_topologyNodata_topology parameter (Optional[str]).
identification_supportNoidentification_support parameter (Optional[str]).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.9/5.0
Behavior2/5

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

The annotations declare readOnlyHint=true, so the tool is read-only knowledge, but the description itself adds nothing beyond that. It does not disclose any behavioral specifics (e.g., whether it caches results, requires prior calls, or returns a method recommendation). No contradiction, but the description is too vague to provide meaningful transparency.

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

Conciseness2/5

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

The description is extremely short, but this is under-specification rather than conciseness. It uses one sentence but conveys almost no information, so it does not earn credit for being well-structured or efficient.

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

Completeness1/5

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

Given the tool has 12 parameters, no required fields, and an extensive sibling list, the description is completely inadequate. It does not explain the tool's purpose, when to invoke it, or what the output schema offersholistically. Even though an output schema exists, the description itself provides no grounding context for an agent to select it correctly.

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 100% for all 12 parameters, so the schema fully documents each parameter. The description does not add any parameter-level meaning, but with full coverage the baseline of 3 is appropriate.

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

Purpose2/5

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

The description 'Route design facts to a method-selection status' contains a verb ('route') and a resource ('design facts'), but it is highly abstract and does not specify what action is performed, what 'design facts' are, or what 'method-selection status' means. It fails to distinguish this tool from the hundreds of siblings in the list.

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

Usage Guidelines1/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, what prerequisites exist, or how it differs from alternatives. The sibling list is large, but the description does not mention any other tool or conditions for selection.

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

design_robust_event_studyA
Read-only

Design-robust event study with explicit negative-weight diagnostics per cohort x relative-time cell. Reports which event-study coefficients receive negative weights in TWFE and flags the affected horizons. Assumptions: Parallel trends across cohorts; treatment effects may be heterogeneous across cohort and time; No anticipation prior to the event time; Implicit TWFE comparison weights are non-negative (negative-weight contamination is diagnosed, not assumed away). Pre-conditions: Long-format panel with y, treat, time, id (same conventions as callaway_santanna); Staggered/variable treatment timing so the per-(cohort, time) weight diagnostic is meaningful; Event-time window (leads, lags) contained within observed pre/post coverage. Failure modes: model_info weights show large negative TWFE weights flagging forbidden comparisons -> Drop already-treated controls and use a heterogeneity-robust staggered estimator instead of TWFE; Too few treated units per cohort-time cell to identify weights or SEs -> Coarsen the event-time window or pool cohorts to raise per-cell counts. Alternatives: sp.sun_abraham, sp.bacon_decomposition, sp.cohort_anchored_event_study, sp.callaway_santanna. Typical...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
idYesUnit, subject, or panel identifier column.
lagsNolags parameter (int).
timeYesTime period column.
alphaNoSignificance level for confidence intervals and tests.
leadsNoleads parameter (int).
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster identifier column for clustered standard errors.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses key behavioral assumptions (parallel trends, heterogeneity, no anticipation), explains that negative-weight contamination is diagnosed rather than assumed away, and details failure modes with concrete remedial actions. This is substantial transparency about how the tool behaves and what its outputs imply.

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 well-structured with clear Assumptions, Pre-conditions, Failure modes, and Alternatives sections. It is dense but relevant. The main flaw is the trailing incomplete 'Typical...' section, which slightly weakens the structure and leaves an unfinished thought.

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 complex estimator with 14 parameters, the description covers assumptions, data requirements, failure modes, and next-step alternatives. Since an output schema exists, the description does not need to restate return fields. The tool is described thoroughly enough for an agent to invoke it correctly and plan subsequent actions.

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 input schema already describes all 14 parameters with 100% coverage, so the baseline is 3. The description adds meaningful extra context by tying y, treat, time, and id to callaway_santanna conventions and by explaining why leads/lags and cohort-time cell sizes matter for the diagnostics. It does not add per-parameter detail for every field, but it compensates where it matters most.

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 opens with a specific purpose: a design-robust event study that reports negative-weight diagnostics per cohort x relative-time cell and flags affected horizons. This is a concrete verb+resource statement that clearly differentiates the tool from generic event-study or TWFE tools by its diagnostic focus.

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 provides explicit pre-conditions (long-format panel, staggered treatment timing, event-time window coverage) and lists relevant alternatives such as sun_abraham and callaway_santanna. It also gives failure-mode routing advice. It does not fully spell out when each alternative should be chosen over this tool, but it gives enough contextual guidance for a capable agent.

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

detect_designA
Read-only

Auto-detect the study design (panel / cross-section / RD / IV-style) from column shapes and types. Returns the guessed design plus the columns that drove the inference. Call this BEFORE recommend() when the user pastes a CSV with no context.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
id_col_hintNo
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
time_col_hintNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, so the read-only behavior is covered. The description adds that it 'Returns the guessed design plus the columns that drove the inference,' which is useful, but it does not disclose other behavioral traits such as performance, failure modes, or constraints beyond what the annotations and schema already provide. With annotations present, this is adequate 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.

Conciseness5/5

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

The description is two sentences with no filler. It front-loads the core function, lists the design categories, states the return value, and gives the usage rule with a sibling reference. Every sentence earns its place.

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 presence of a detailed input schema, an output schema, and annotations, the description is complete enough for an agent to decide when and how to invoke the tool. It states the trigger condition, the call ordering relative to recommend(), and what the tool returns, so no critical contextual information is missing.

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 75%, so the schema carries most of the parameter meaning. The description adds little beyond implying column inspection ('from column shapes and types'), and it does not clarify the purpose of the undocumented id_col_hint or time_col_hint parameters. This matches the baseline for high schema coverage.

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 ('Auto-detect'), a specific resource ('study design'), and the types of design detected ('panel / cross-section / RD / IV-style'). It also explicitly differentiates itself from recommend() by saying 'Call this BEFORE recommend()', which allows an agent to distinguish it from a key sibling 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?

The description gives a clear, explicit usage context: 'Call this BEFORE recommend() when the user pastes a CSV with no context.' This is strong guidance, but it does not mention when not to use the tool or name alternative detection/design-intake siblings such as design_intake. It provides clear context without full exclusions.

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

dfl_decomposeA
Read-only

DFL (1996) reweighting decomposition at a chosen distributional statistic. Validation: certified parity evidence. Assumptions: DiNardo-Fortin-Lemieux reweighting: ignorable group assignment given covariates; Propensity-score model is correctly specified for the reweighting kernel; Common support across groups (no extrapolation beyond observed covariate range). Pre-conditions: Binary group indicator with sufficient overlap on covariates; Outcome distribution to decompose is continuous (typically log-wage). Failure modes: Extreme propensity-score weights inflate variance -> Trim or stabilize weights, or restrict to the common-support region. Alternatives: sp.ffl_decompose, sp.oaxaca, sp.machado_mata. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
tauNoQuantile level or target treatment-effect index.
seedNoRandom seed for reproducible stochastic steps.
statNostat parameter (str).mean
trimNotrim parameter (float).
alphaNoSignificance level for confidence intervals and tests.
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
weightsNoObservation weights.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
inferenceNoinference parameter (str).analytical
referenceNo- 0: reweight Group B to look like A's X (default). The counterfactual is F_{Y<1|0>} -- A's X distribution with B's outcome structure. - 1: reweight Group A to look like B's X. The counterfactual is F_{Y<0|1>} -- B's X distribution with A's outcome structure. .. warning:: ``reference`` has different economic semantics across method families. In DFL, ``reference=0`` yields cf = *A's X, B's beta* (reweighting approach). In ``machado_mata`` / ``melly`` / ``cfm``, ``reference=0`` yields cf = *A's beta, B's X* (coefficient-substitution approach). These are **opposite** counterfactual constructions. Within each method labels are internally consistent (DFL structure = A - cf; MM composition = A - cf). When comparing estimates across methods, read the per-method docstrings carefully.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
quantile_gridNoIf provided, also compute quantile-process decomposition on this grid.
stat_conventionNoWeighted variance / quantile definition for the reweighted counterfactual (see ``_common.statistic_value``). ``'hmisc'`` reproduces ``ddecompose::dfl_decompose``, which uses ``Hmisc::wtd.var`` and ``Hmisc::wtd.quantile``; the reweighting itself is identical under both. ``stat='gini'`` is the exact plug-in Gini either way; ``ddecompose`` integrates the Lorenz curve numerically and differs from it in the fourth significant digit.statspai

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

The description discloses assumptions (ignorability, propensity-score specification, common support), failure modes, and recommended remedies, which go beyond the readOnlyHint annotation. It also mentions validation and typical minimum N, adding useful behavioral context without contradicting 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?

The description is front-loaded with the core purpose and then organized into labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). It is somewhat long but every section contributes actionable information for tool selection and correct invocation.

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 complex decomposition tool with 20 parameters, the description covers decisive context: assumptions, preconditions, failure modes, alternatives, and minimum sample size. The output schema handles return-value documentation, so the absence of output details is not a gap. It is complete enough for an agent to decide whether and how to use the 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?

Since schema description coverage is 100%, the baseline is 3. The description only loosely references the distributional statistic but does not add parameter-level meaning; the schema already fully explains parameters like stat, reference, and trim.

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 clearly states it performs DFL (1996) reweighting decomposition at a chosen distributional statistic, which identifies the method and resource. It names alternatives (sp.ffl_decompose, sp.oaxaca, sp.machado_mata) but does not explicitly differentiate its scope from them, leaving some ambiguity for agents unfamiliar with these methods.

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 provides concrete pre-conditions (binary group indicator, continuous outcome, common support) and failure modes (extreme propensity-score weights) that help an agent decide when this tool is appropriate. However, it does not explicitly state when to choose DFL over the listed alternatives, so the guidance is context-rich but lacks explicit exclusion criteria.

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

diagnoseC
Read-only

Comprehensive regression diagnostics in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesIndependent variable names (excluding constant).
yYesDependent variable name.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
print_resultsNoPrint formatted output.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the safety profile is known. The description adds no behavioral context beyond the annotationβ€”it does not mention that the tool fits a regression model, what diagnostics are computed, whether it caches results (as as_handle suggests), or any side effects. This is a significant gap for a tool with many parameters.

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

Conciseness2/5

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

The single sentence is brief but under-specifiedβ€”it reads as a tagline rather than a useful description. The structure is minimal and does not front-load key information. This is closer to under-specification than genuine conciseness.

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?

Given the tool's 9 parameters, complex output schema, and a very large sibling set, the description is far too thin. It fails to explain the tool's unique role, when to reach for it, or what diagnostics are included. An agent cannot reliably select or invoke this tool based on the description alone.

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 100%, so individual parameters are fully documented in the schema. The description adds no additional meaning beyond the schema, making the baseline score of 3 appropriate.

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 states the tool performs 'regression diagnostics' with a general 'comprehensive' modifier, identifying the resource and action but not specifics such as which tests, model types, or output formats are included. It does not differentiate from numerous sibling diagnostic tools (e.g., assumption_audit, robustness_report, forest_diagnostics), leaving ambiguity.

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 is provided on when to use this tool versus alternatives. There is no mention of typical use cases, prerequisites, or exclusions. An agent is left to infer the tool's purpose solely from the name and schema, which is insufficient.

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

diagnose_resultA
Read-only

Method-aware diagnostic battery: auto-selects tests by model type (OLS/DID/RDD/IV/SCM). Assumptions: The result object carries a recognizable method_type so the correct diagnostic battery can be routed; Each sub-check (e.g. parallel-trends, weak-IV, overid, balance) is only valid under that method's own identifying assumptions; Tests use the supplied alpha as the significance threshold; p-values are interpreted, not corrected for multiplicity. Pre-conditions: A fitted EconometricResults or CausalResult from a StatsPAI estimator; The estimator must expose enough fitted internals (residuals, first-stage, design info) for its checks. Failure modes: Passed a raw DataFrame, dict, or estimate float instead of a fitted result object -> Fit an estimator first and pass the returned result object, not the input data; Method type is unrecognized so no diagnostic battery applies and 'checks' comes back empty -> Run the method-appropriate standalone diagnostic directly instead of the router. Alternatives: sp.unified_sensitivity, sp.sensemakr, sp.oster_bounds, sp.spec_curve. Typical minimum N: 30.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesFitted result from any StatsPAI estimator
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only carry readOnlyHint=true and openWorldHint=false. The description goes far beyond this by disclosing the auto-selection logic, the assumption that result carries method_type, the validity condition for sub-checks, the use of alpha as significance threshold, and the fact that p-values are not multiplicity-corrected. It also exposes failure modes, including empty 'checks' for unrecognized methods. This is rich behavioral disclosure with no contradiction.

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 long but well-structured with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). The core purpose is front-loaded in the first sentence, and every section adds operational value for a complex router tool. No filler or repetition.

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 complex diagnostic router with 7 parameters, an output schema, and many siblings, the description covers purpose, assumptions, pre-conditions, failure modes, alternatives, and a typical minimum N. The output schema exists, so return values need not be spelled out. The description leaves little an agent would need to ask about.

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 100%, and the schema already provides detailed descriptions for all seven parameters (e.g., detail payload depths, data_path formats, as_handle caching). The description adds no parameter-specific meaning beyond the schema; it mentions 'supplied alpha' but alpha is not a parameter in the schema. Baseline 3 is appropriate.

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 purpose: a method-aware diagnostic battery that auto-selects tests by model type (OLS/DID/RDD/IV/SCM). It clearly identifies the resource (fitted result object) and the action (diagnostics), but does not explicitly distinguish itself from sibling tools like diagnose, assumption_audit, or forest_diagnostics, leaving some differentiation 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 Guidelines4/5

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

The description provides concrete context: pre-conditions (fitted estimator with exposed internals), failure modes (raw data or unrecognized method type), and explicit alternatives (unified_sensitivity, sensemakr, oster_bounds, spec_curve). It tells the agent to run a standalone diagnostic when the method type is unrecognized, which is a clear when-not. It doesn't give a crisp positive selection rule beyond being a router, but the guidance is solid.

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

didA
Read-only

Fit a classic 2-period 2-group difference-in-differences. Pass treatment / time / post column names. For staggered adoption across many cohorts use callaway_santanna instead. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column
postNoBinary post-treatment period indicator
timeYesTime column
treatYesBinary treatment-group indicator
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=false, so the safety profile is already covered. The description adds the validation evidence tier context ('known-truth, reference, external-parity, or Monte Carlo artifact'), which is useful behavioral context beyond the annotations. It doesn't describe output details, but the output schema exists and the annotations cover the read-only nature.

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 sentences with zero waste. The core purpose is front-loaded, the alternative is named in the second sentence, and the validation context is a compact final sentence. Every sentence 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?

For a 10-parameter tool with 100% schema coverage, an output schema, and read-only annotations, the description is largely complete. The only minor gap is that it doesn't explain what the returned result contains, but the output schema presumably covers that. The validation tier mention adds useful context for an agent deciding whether to trust the result.

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 100%, so the schema already documents all 10 parameters. The description adds the conceptual role of the columns (treatment / time / post) but doesn't add meaning beyond what the schema provides. Baseline 3 is appropriate since the schema does the heavy lifting.

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 ('Fit') and resource ('classic 2-period 2-group difference-in-differences'), and explicitly names the required column roles (treatment / time / post). It also distinguishes itself from callaway_santanna for staggered adoption, which is a clear sibling differentiation.

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?

The description explicitly says to use callaway_santanna instead for staggered adoption across many cohorts, giving a clear when-not-to-use condition. It also tells the agent to pass treatment / time / post column names, which is direct usage guidance.

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

did_2stageA
Read-only

Gardner (2021) two-stage DID estimator. Assumptions: Conditional parallel trends between treated and comparison groups absent treatment; No anticipation of treatment before its onset; Treatment effects may be heterogeneous across cohorts and time (no homogeneity required). Pre-conditions: Panel or repeated cross-section with a unit (or group) identifier and a time identifier; At least one never-treated or not-yet-treated comparison group; Pre-treatment periods to assess parallel trends. Failure modes: Pre-treatment event-study coefficients are jointly non-zero (pre-trend violation) -> Use honest DiD bounds to quantify robustness to trend violations, or condition on covariates; Two-way fixed-effects estimate is contaminated by 'forbidden' comparisons / negative weights -> Use a heterogeneity-robust estimator (Callaway-Sant'Anna, Borusyak et al., Gardner two-stage); Pre-trend joint test p < 0.05 (or underpowered at 0.10) -> Use sp.sensitivity_rr (Rambachan & Roth honest CI) or switch to sp.callaway_santanna. Alternatives: sp.callaway_santanna, sp.did, sp.honest_did, sp.sun_abraham. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column name.
vceNoStandard-error mode. ``'analytic'`` clusters the Stage-2 residuals (fast) but ignores the variance from estimating the Stage-1 fixed effects and is **anti-conservative** (empirically ~0.78 coverage at a nominal 95% level); a ``UserWarning`` recommends ``'bootstrap'``. ``'bootstrap'`` resamples whole clusters and re-runs the full two-step procedure (Gardner 2021 / ``did2s``), substantially improving coverage (~0.90 vs ~0.78 in simulations; it approaches nominal as the number of clusters grows). Point estimates are identical either way.analytic
timeYesTime column.
alphaNoTwo-sided CI level.
groupYesUnit (panel-id) column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of cluster-bootstrap replications when ``vce='bootstrap'``.
clusterNoCluster variable for Stage-2 SEs. Defaults to ``group``.
horizonNoRelative-time leads/lags to report when ``event_study=True``; defaults to ``range(-5, 6)`` intersected with available support.
controlsNoAdditional covariates included in both stages.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
boot_seedNoSeed for the cluster bootstrap (deterministic results).
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
event_studyNoIf True, Stage 2 reports coefficients by relative time ``k = t - first_treat_i``.
first_treatYesFirst-treatment-period column. Never-treated units should be encoded as ``0``, ``NaN``, or ``+inf``.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only provide readOnlyHint=true and openWorldHint=false. The description goes far beyond that by disclosing statistical assumptions (conditional parallel trends, no anticipation), pre-conditions, typical minimum N, and failure modes with remedial actions. It also warns about anti-conservative standard errors in the vce parameter description, adding transparency about inference quality. All of this enriches the agent's understanding of the tool's behavior without contradicting annotations.

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 long but every sentence is substantive: it introduces the estimator, lists assumptions, pre-conditions, failure modes with decision rules, alternatives, and a sample-size heuristic. It is clearly structured with labelled sections (Assumptions, Pre-conditions, Failure modes, Alternatives), and the first sentence immediately identifies the tool. No filler or redundancy; the length is justified by the complexity of the econometric method.

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 tool's complexity (18 parameters, 5 required, output schema present), the description covers the essential context: what the estimator does, when it is valid, what to do if assumptions fail, and which sibling tools to fall back on. It even provides a minimum N heuristic ('Typical minimum N: 100') that is not available elsewhere. The output schema and parameter schema cover the remaining mechanical details, so nothing critical is missing.

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 100%, so the baseline is 3. The description itself does not mention any parameter names or semantics; all parameter-level meaning is carried by the input schema, which is already detailed (e.g., vce explains anti-conservative behavior, bootstrap alternatives; detail explains token payloads). The description adds no extra parameter insight beyond what the schema provides, so a 3 is appropriate.

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 opens with 'Gardner (2021) two-stage DID estimator', which names a specific verb–resource pair. It further differentiates itself from siblings by explicitly listing alternatives (sp.callaway_santanna, sp.did, sp.honest_did, sp.sun_abraham) and stating its unique assumptions (heterogeneous effects allowed). An agent can easily distinguish this from other DiD tools 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?

The description gives explicit when-to-use guidance by enumerating failure modes and directing to alternatives: pre-trend violations β†’ honest DiD bounds or covariates; TWFE contamination β†’ heterogeneity-robust estimators; significant pre-trend test β†’ sensitivity_rr or callaway_santanna. It also states pre-conditions (panel/repeated cross-section, never-treated group, pre-treatment periods). This is exactly the 'when/when-not/alternatives' level of guidance.

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

did_2x2A
Read-only

Canonical 2x2 DID: two groups (treated / control) x two periods (pre / post). Point estimate via either group-means differencing or OLS on the treat x post interaction; optional covariates, robust / cluster SE, and sample weights. Validation: certified parity evidence. Do NOT use when: treatment timing is staggered across units -- the TWFE 2x2 estimate is a negative-weighted mix (Goodman-Bacon 2021); use sp.callaway_santanna, sp.sun_abraham or sp.did_imputation. Assumptions: Parallel trends; No anticipation; SUTVA (no spillovers). Pre-conditions: data has exactly two time periods (pre, post); treat is 0/1 constant within unit (unit-level, not time-varying); at least a handful of treated and control units. Failure modes: Staggered timing (> 2 periods with varying treat start) -> Use sp.callaway_santanna / sp.sun_abraham / sp.did_imputation; Very few clusters at the group level -> Use wild cluster bootstrap via sp.wild_cluster_bootstrap; Pre-trend joint test p < 0.05 (or underpowered at 0.10) -> Use sp.sensitivity_rr (Rambachan & Roth honest CI) or switch to sp.callaway_santanna. Alternatives: sp.drdid, sp.did_analysis, sp.callaway_santanna, sp.sun_abraham. Typical minimum N: 30.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable
timeYesTime / period indicator
alphaNoSignificance level for confidence intervals and tests.
treatYesBinary treatment-group indicator (0/1)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoHeteroskedasticity-robust SE when no cluster provided
clusterNoColumn for cluster-robust SE (defaults to treat)
weightsNoOptional column name for sampling weights
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariates included additively; for DR use sp.drdid
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With readOnlyHint=true already covering the safety profile, the description goes beyond annotations by disclosing estimator mechanics, assumptions (parallel trends, no anticipation, SUTVA), and failure modes such as negative-weighted TWFE mixes in staggered designs. It also adds 'Validation: certified parity evidence' as an extra behavioral signal without contradicting 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?

The text is front-loaded with the core definition and sectioned for skimmability, but it is long and contains some redundancy β€” the staggered-timing exclusion and the same alternatives appear in both the 'Do NOT use' block and the 'Failure modes' section. Still, nearly every clause carries diagnostic value.

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?

The definition covers purpose, exclusions, assumptions, preconditions, failure-mode routing, alternatives, and sample-size guidance, and an output schema exists so return values do not need to be explained in prose. For a 2x2 DID tool embedded in a large sibling family, this is complete enough for an agent to decide and invoke 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 100%, so the baseline is 3; the description adds meaningful method-level semantics by requiring exactly two periods, a unit-constant 0/1 treat, and by summarizing covariates, robust/cluster SE, and weights. It does not enumerate every parameter, but the schema already handles that burden.

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 specifies a precise estimator β€” 'Canonical 2x2 DID: two groups (treated/control) x two periods (pre/post)' β€” and details how the point estimate is computed via group-means differencing or OLS on the treat x post interaction. It also distinguishes itself from siblings by explicitly rejecting staggered-timing designs and naming the alternatives.

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?

The description gives explicit when-to-use conditions ('exactly two time periods', unit-level 0/1 treat) and explicit when-not-to-use conditions with named replacements for staggered timing, few clusters, and pre-trend failures. It also lists alternatives and a typical minimum N, leaving little to inference.

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

did_analysisA
Read-only

Workflow wrapper that runs a full DiD pipeline: auto-detects 2x2 vs. staggered, runs the right estimator (CS by default), optionally runs Bacon decomposition, event study, and Rambachan-Roth sensitivity, and aggregates into a DIDAnalysis report object. Assumptions: Parallel trends between treated and control (2x2) or across cohorts (staggered) after any covariate adjustment; No anticipation: pre-treatment outcomes unaffected by future treatment; SUTVA / no interference across units; correct design auto-detection (2x2 vs staggered). Pre-conditions: Panel or repeated cross-section with y, treat, time; id required for staggered designs; treat is binary 0/1 for 2x2, or first-treatment period (0 = never-treated) for staggered; event_window within observed periods when run_event_study is enabled. Failure modes: Staggered design detected but no id column supplied, so cohorts cannot be formed -> Pass the unit identifier via id= so first-treatment cohorts can be inferred; Event-study pre-trend test rejects parallel trends in the bundled report -> Inspect the included honest_did sensitivity output and report bounds rather than the point ATT; Requested method incompatible with the detected d...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
idYesUnit, subject, or panel identifier column.
timeYesTime period column.
treatYesBinary treatment or first-treat column
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimator selectionauto
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
run_baconNorun_bacon parameter (bool).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
run_event_studyNorun_event_study parameter (bool).
run_sensitivityNorun_sensitivity parameter (bool).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the read-only annotation, the description discloses auto-detection behavior, default estimator selection, optional pipeline components, the aggregated report object, key assumptions, and failure-mode reactions. It also warns that an incompatible requested method is a failure mode, which is not visible from the schema or annotations. No contradiction with readOnlyHint=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?

The description is long but front-loaded with the core purpose and organized into Assumptions, Pre-conditions, and Failure modes. The length is justified for a complex 14-parameter wrapper, though the final failure-mode sentence is cut off and some pre-conditions echo schema requirements.

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 complex orchestration tool with an output schema, the description provides enough context to call it correctly: purpose, assumptions, pre-conditions, key parameter semantics, and failure-mode remedies. Return-value details are covered by the output schema, so their absence here is not a gap.

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 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining how treat encodes 2x2 binary vs. staggered first-treatment period, that id is required for staggered designs, and that event_window must be within observed periods when the event study is enabled. It does not restate every parameter, but the schema already documents those.

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 opens with a specific verb and resource: 'runs a full DiD pipeline' and 'aggregates into a DIDAnalysis report object.' It distinguishes itself from sibling tools by naming auto-detection of 2x2 vs. staggered designs, default CS estimation, and optional Bacon/event-study/sensitivity components.

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?

Pre-conditions and failure modes give concrete conditional guidance, such as requiring id for staggered designs and directing the agent to inspect honest_did sensitivity output when pre-trend tests reject. It does not explicitly name sibling tools to use instead for single-estimator tasks, but the 'workflow wrapper' framing makes the overall usage context clear.

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

did_balanceA
Read-only

Covariate balance for a DiD design, in the shape Baker et al. (2026, Table 4) report it: Imbens-Rubin normalized differences computed twice -- once on baseline covariate LEVELS and once on covariate CHANGES across the treatment date -- optionally weighted and unweighted side by side. The changes panel is the informative half: DiD identifies off trends, so a covariate that is balanced in levels can still be moving differentially, and imbalances routinely flip sign between the two panels. Flags |norm. diff| > 0.25. Evidence about whether UNCONDITIONAL parallel trends is plausible; it cannot test parallel trends itself. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Known limitations: pooled multi-cohort balance is not implemented: one table per treated cohort only, because the normalized difference is a two-group statistic; only the reliability-weight variance correction is implemented for the weighted panel; survey-design (replicate-weight) variances are not supported; inference is not implemented: the normalized difference is reported as a descriptive effect size with no standard error or test, by design; the weighted denomi...

ParametersJSON Schema
NameRequiredDescriptionDefault
gYesFirst-treatment period (0 = never treated)
iYesUnit identifier
tYest parameter (str).
cohortNoTreated cohort to audit (default: the largest)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
weightsNoUnit weights; when given, weighted and unweighted statistics are reported side by side because they describe different populations
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
thresholdNoImbens & Rubin (2015, p. 277) rule of thumb
covariatesYesColumns to audit in levels and in changes
base_periodNoPre-treatment period for the levels panel (default g-1)
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
control_groupNoMust match the comparison group of the estimator you intend to runnevertreated
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
comparison_periodNoSecond period for the changes panel (default g)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=true, openWorldHint=false), the description discloses extensive behavioral details: it computes normalized differences twice, flags |norm. diff| > 0.25, reports weighted and unweighted side by side, and lists limitations (pooled multi-cohort not implemented, only reliability-weight variance correction, no survey-design variances, no inference). No contradiction with 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?

The description is dense and front-loaded with the core purpose, but it is long and somewhat rambling (e.g., the truncated 'the weighted denomi...' and the validation tier aside). All sentences carry relevant information, but it could be more tightly structured. Not a tautology, but not as crisp as a two-sentence definition.

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 tool's complexity (16 parameters, output schema present), the description is exceptionally complete: it explains the method, the interpretation of the changes panel, the flagging rule, the evidence tier, and all major limitations. The output schema covers return structure, so the description does not need to detail return values. Very thorough.

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 100% and each parameter already has a detailed description (e.g., detail, weights, threshold, control_group). The tool description adds overall methodological context (why changes panel is informative) but does not add parameter-specific meaning beyond the schema, so baseline 3 is appropriate.

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: it computes Imbens-Rubin normalized differences for covariate balance in a DiD design, with levels and changes panels and optional weighting. This clearly distinguishes it from generic balance tools like love_plot or balance_diagnostics by tying it to DiD and the specific two-panel structure.

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 gives clear when-to-use context: it provides 'Evidence about whether UNCONDITIONAL parallel trends is plausible' and explicitly states it 'cannot test parallel trends itself,' implying a test tool is needed for that. However, it does not name specific sibling tools like did_test or parallel_trends_test, so the exclusion is implicit rather than explicitly routed.

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

did_bcfA
Read-only

Bayesian Causal Forests DiD. Fits a BART-style ensemble with treatment and prognostic terms on the DiD residuals, providing heterogeneous treatment-effect posterior draws per unit. Useful for machine-learning DiD with covariates. Assumptions: Parallel trends: treated and control groups would have followed the same trajectory absent treatment; No anticipation: outcomes in pre-treatment periods are unaffected by future treatment; SUTVA: no spillovers between units. Pre-conditions: data is panel or repeated cross-section with a time column; treat column is binary (0/1) for 2x2, or first-treatment-period (int) for staggered; at least one pre-treatment period (>= 2 periods for 2x2; >= 3 recommended for event study). Failure modes: Pre-trend joint test p < 0.05 (or underpowered at 0.10) -> Use sp.sensitivity_rr (Rambachan & Roth honest CI) or switch to sp.callaway_santanna; Staggered treatment timing with TWFE method -> TWFE can give negative weights; use Callaway-Sant'Anna, Sun-Abraham, or BJS imputation; Pre-trend test underpowered (Roth 2022) -> Check sp.pretrends_power -- if low, report honest CI via sp.sensitivity_rr. Alternatives: sp.did_imputation, sp.drdid, sp.callaway_santanna,...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
idYesUnit, subject, or panel identifier column.
seedNoRandom seed for reproducible stochastic steps.
timeYesTime period column.
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_treesNoNumber of trees.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations mark this as read-only, and the description complements that by explaining what the tool estimates, what assumptions it relies on, and what failure modes may invalidate it. It adds practical behavioral context beyond the annotations without contradicting them.

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 long but well-structured with clear labeled sections for assumptions, pre-conditions, failure modes, and alternatives. Most sentences carry substantive guidance; only the trailing alternative list is somewhat redundant with the sibling tool list.

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 complex DiD estimator with 14 parameters, an output schema, and strong assumptions, the description is comprehensive. It covers model mechanics, data requirements, validity conditions, common failure modes, and fallback methods, so an agent has what it needs to invoke the tool 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 coverage is 100%, so the schema already documents all parameters. The description adds useful semantic guidance on key inputs, for example that treat is 'binary (0/1) for 2x2, or first-treatment-period (int) for staggered' and that at least one pre-treatment period is required, which goes beyond the schema's terse descriptions.

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 uses a specific verb ('Fits') and a specific resource ('a BART-style ensemble with treatment and prognostic terms on the DiD residuals') and states the output ('heterogeneous treatment-effect posterior draws per unit'). It clearly differentiates did_bcf from sibling BCF tools by emphasizing the DiD residual construction, and it names alternatives.

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?

The description gives explicit when-to-use context via assumptions, pre-conditions, and failure-mode triggers, such as 'Pre-trend joint test p < 0.05 -> Use sp.sensitivity_rr...' and 'Staggered treatment timing with TWFE method -> use Callaway-Sant'Anna, Sun-Abraham, or BJS imputation.' It also names concrete alternative tools, so an agent can route correctly.

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

did_cluster_diagnosticsA
Read-only

Count the clusters treatment is assigned at and grade the count against the simulation grid of Ulloa-Perez et al. (2025), who found that at 30 clusters every modern staggered DiD estimator they evaluated under-covered a nominal 95% interval, with coverage improving as clusters accumulated. Thirty is the smallest cell they ran, so fewer clusters is reported as outside their evidence rather than as merely worse. Also reports clusters per cohort, since a group-time effect rests on the clusters in its own cohort. Assumptions: The grading reports what published simulation evidence exists at this cluster count; it is not a power calculation for this design or estimator. Pre-conditions: panel with unit and cohort columns. Failure modes: Cluster column empty or absent -> Check that the cluster column is populated. Alternatives: sp.wild_cluster_bootstrap, sp.ri_test, sp.conley.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitYesUnit identifier
warnNoWarn when the design sits in or below the weakest cell of the reference grid.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoLevel treatment is assigned at (state, provider group, district). Defaults to unit with a warning: the two coincide only under independent unit-level assignment, and assuming so is the optimistic error.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
first_treatYesFirst-treatment period; 0 = never-treated
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint annotation by explaining what the tool reports, how it grades cluster counts, the '30 clusters' boundary behavior, and per-cohort reporting. It also discloses failure modes and assumptions, which is exactly the kind of behavioral context annotations do not capture.

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 longer than average, but it earns its length with labeled sections for assumptions, pre-conditions, failure modes, and alternatives. The core purpose is front-loaded in the first sentence, and the organization makes the content easy to parse.

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 tool's complexity, the robust output schema, and the readOnlyHint annotation, the description is complete. It covers what the tool does, how to interpret the grading, preconditions, common failure modes, and alternatives, leaving no critical gap for an agent deciding whether and how to call it.

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 100%, so the schema already documents all parameters in detail. The description adds some context around 'cluster column' and 'unit and cohort columns', but it does not materially extend the parameter semantics beyond what the schema provides.

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 starts with a specific, active behavior: 'Count the clusters treatment is assigned at and grade the count against the simulation grid', and then explains the citation and evidence basis. It also names alternatives at the end, so an agent can distinguish this diagnostic tool from related inference tools.

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 provides explicit assumptions, pre-conditions, failure modes, and a list of alternatives. It clearly says the tool is not a power calculation, which helps prevent misuse. However, it does not give conditions for choosing between this tool and its named alternatives, so the routing guidance is slightly incomplete.

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

did_design_contractA
Read-only

Report which of Baker, Callaway, Cunningham, Goodman-Bacon & Sant'Anna's (2026) eight forward-engineering steps a fitted DiD result actually pins down: target parameter, identifying assumption, estimation strategy, inference frame, estimate, sensitivity, heterogeneity. A slot the result cannot determine is reported as undetermined rather than filled with a default, because an unstated choice is still a choice the write-up owes the reader. Assumptions: Reports what the result object records; it cannot verify that a recorded assumption is true of the data. Pre-conditions: a fitted DiD result object. Failure modes: Result carries no model_info -> Every step is reported undetermined, which is the informative answer. Alternatives: sp.audit_result, sp.assumption_audit, sp.cs_report.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesOutput of a DiD estimator
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

The description goes beyond the readOnlyHint by explaining the tool's epistemic limits: it reports what the result object records and 'cannot verify that a recorded assumption is true of the data.' It also documents the failure mode ('Result carries no model_info -> Every step is reported undetermined'), which is genuinely useful behavioral disclosure.

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 compact and well-structured, using labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives) to pack substantial context without rambling. Every sentence serves a distinct purpose, and the main scoping statement is front-loaded.

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?

The description provides essential usage contextβ€”pre-conditions, failure modes, and alternativesβ€”and the existence of an output schema means return-value details are handled elsewhere. It doesn't clarify whether data_path can substitute for `result`, but the schema descriptions cover the input options; overall it's complete for an agent to decide whether to call it.

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?

All 7 parameters already have schema descriptions (100% coverage), so the description adds no new parameter-specific semantics. The description's pre-condition loosely aligns with the `result` parameter but doesn't elaborate on `detail`, `as_handle`, or `data_path`. Baseline 3 is appropriate because the schema does the heavy lifting.

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 uses a specific verb ('Report') with a precise resource ('which of Baker, Callaway, Cunningham, Goodman-Bacon & Sant'Anna's (2026) eight forward-engineering steps a fitted DiD result actually pins down') and enumerates the steps (target parameter, identifying assumption, estimation strategy, etc.). It distinguishes itself from siblings by explicitly naming alternatives later in the description.

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 states a clear pre-condition ('a fitted DiD result object') and lists explicit alternatives ('sp.audit_result, sp.assumption_audit, sp.cs_report'), which routes an agent away from this tool when those are more appropriate. It does not, however, spell out the exact selection criteria between this tool and each alternative, so it falls just short of full guidance.

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

did_estimateA
Read-only

R-style alias: synthdid::did_estimate. Assumptions: Parallel trends in the absence of treatment, after the synthetic/DiD weighting; No anticipation and no interference between units (SUTVA); The control pool's outcome process is stable around the intervention. Pre-conditions: Panel with treated and control units and a clear treatment date; Pre-treatment periods available to assess comparability of trends. Failure modes: Weighted pre-treatment trends still diverge between treated and synthetic control -> Inspect the unit/time weights and pre-trend fit; consider event-study DiD with honest bounds. Alternatives: sp.synth, sp.augsynth, sp.callaway_santanna, sp.gardner_did. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column.
unitYesUnit identifier column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treat_timeYestreat_time parameter.
treat_unitYestreat_unit parameter.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description doesn't need to repeat safety. It adds valuable behavioral context: statistical assumptions (parallel trends, SUTVA, stability), failure modes (weighted pre-trend divergence) with a suggested remedy, and a typical minimum N of 15. This goes beyond what annotations provide and helps an agent anticipate pitfalls.

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 structured into clear labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Each sentence conveys distinct information, though the opening 'R-style alias' is meta and not essential. It is not overly verbose and is easy to scan.

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?

Given the complexity of synthetic DiD, the description covers assumptions, preconditions, failure modes with remediation, and alternatives. It does not explain the output format, but an output schema exists. It also does not elaborate on parameters, but the schema does. The description provides enough for an agent to decide when to use it and what to expect statistically.

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 100%, so all 11 parameters have descriptions in the input schema. The tool description adds no parameter-specific detail (e.g., how treat_unit or treat_time should be formatted), only general context about the estimator. Per the rubric, with full schema coverage the baseline is 3, and the description does not exceed that.

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 tool as an R-style alias for synthdid::did_estimate but never explicitly states that it estimates a synthetic difference-in-differences treatment effect. It focuses on assumptions, preconditions, and failure modes rather than a crisp verb+resource statement. The purpose is implied by the name and alias, but not directly articulated.

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 lists clear preconditions (panel with treated/control units, treatment date, pre-treatment periods) and names specific alternatives (sp.synth, sp.augsynth, sp.callaway_santanna, sp.gardner_did). It also gives a failure-mode response suggesting event-study DiD with honest bounds. This effectively tells an agent when to use the tool and what else to consider.

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

did_hadC
Read-only

Heterogeneous-adoption DiD using quasi-untreateded groups. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesColumn names. ``treat`` is the dose, not an indicator.
timeYesColumn names. ``treat`` is the dose, not an indicator.
alphaNo1 - alpha confidence level.
groupYesColumn names. ``treat`` is the dose, not an indicator.
treatYesColumn names. ``treat`` is the dose, not an indicator.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoDefault epanechnikov, matching ``did_had``.epanechnikov
dynamicNoScale effect l by the average **cumulative** dose from F to ``F-1+l`` instead of the dose at ``F-1+l``. The current-dose normalization is right under a static model, the cumulative one under a dynamic model where past treatment still matters.
effectsNoNumber of event-study effects. Effect l is the effect at period ``F-1+l``, i.e. l periods after adoption.
placeboNoNumber of placebo estimates, built symmetrically: the ``F-1`` to ``F-1+l`` evolution is replaced by ``F-1`` to ``F-1-l``, with the dose taken from the matching post period.
yatchewNoReport the Yatchew differencing test alongside each horizon. Effects are tested for **linearity** in the dose (order 1), placebos for **mean independence** of the pre-period evolution from the future dose (order 0). Theorem 5 of the paper: with (quasi-)untreated groups, plain OLS of the evolution on the dose is unbiased for the same estimand *iff* that conditional expectation is linear. Failing to reject therefore licenses the far simpler estimator; rejecting says the nonparametric machinery is doing real work.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoBandwidth for the local polynomial fit at dose zero -- one value, or one per reported horizon (placebos first, then effects). **Required for now.** Stata's default ``bw_method('mse-dpi')`` selector is not yet implemented; see Notes.mse-dpi
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
trends_linNoAllow group-specific linear trends, estimated from each group's ``F-2`` to ``F-1`` evolution and subtracted. Costs one placebo, and needs at least three pre-treat periods.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior3/5

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

Annotations provide readOnlyHint=true, so the agent already knows this is a safe read-only estimation call. The description adds little beyond the 'quasi-untreated groups' method label and a vague validation-tier statement. It does not disclose behavioral details like required bandwidth, caching via as_handle, or failure modes; however, it does not contradict the annotations either.

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

Conciseness2/5

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

The description is short but not effectively concise: it contains a typo ('quasi-untreateded') and the 'Validation: validated evidence tier' sentence reads as truncated metadata rather than useful guidance. It front-loads a method name but wastes the second sentence on a status label. Every sentence should earn its place; neither sentence fully does.

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?

This is an 18-parameter estimator with 5 required parameters and no description of its output semantics. The description does not warn that bandwidth must be supplied even though the Stata default is not implemented, does not explain the quasi-untreated assumption well enough for an LLM to confirm data eligibility, and gives no sense of what the returned result contains. The schema is rich, but the description leaves too much context 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 coverage is 100%, and the schema itself already gives rich per-parameter descriptions for dynamic, placebo, yatchew, detail, bandwidth, and trends_lin. The description's one useful addition is framing 'treat' as a dose rather than an indicator, which reinforces the schema note. Since the description itself adds little beyond the schema, I cannot give 5, but the schema carries the burden well.

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

Purpose2/5

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

The description names a method ('Heterogeneous-adoption DiD using quasi-untreateded groups') but never states a clear verb + resource or what the tool actually returns. The typo 'quasi-untreateded' and the stilted 'Validation: validated evidence tier' phrase add confusion. With 50+ DiD siblings, this does nothing to distinguish did_had from did, did_estimate, harvest_did, gardner_did, or did_multiplegt.

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 gives no guidance about when to use this tool versus the many DiD alternatives. It does not mention the quasi-untreated assumption as a selection criterion, name any sibling, or state any exclusions. The 'validated evidence tier' note sounds like metadata about the tool's trust level, not usage direction.

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

did_imputationA
Read-only

Borusyak-Jaravel-Spiess (2024) imputation DiD. Fits a TWFE model on untreated observations only, imputes counterfactual Y(0) for treated obs, and averages the imputation residuals. Efficient under no-anticipation + parallel trends; analytical SE via bjs_inference. Validation: certified evidence with scoped limitations. Known limitations: R/Stata parity is for the documented untreated-only TWFE and simple ATT aggregation convention only; event-study and SE rows are backend-specific diagnostics. Do NOT use when: there is no never-treated (or not-yet-treated) group to fit the untreated-potential-outcome model on -- imputation has no estimation sample; the design is a simple 2x2 -- sp.did(method='2x2') is the same estimand and far cheaper; pre-trends are visibly non-parallel -- BJS imputes Y(0) from a two-way model that assumes them away, so violations are absorbed silently rather than surfaced. Cost: Fits the untreated two-way model once, then imputes; cheap in memory. vce='bootstrap' multiplies total runtime by n_boot -- budget accordingly before raising n_boot. Assumptions: Parallel trends in absolute levels; No anticipation (no pre-treatment reaction); SUTVA. Pre-conditions: panel...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
feNoFixed effects in the Y(0) model, replacing the default unit+time. Stata's fe(): entries are column names or 'a#b' interacted cells; [] means no fixed effects.
vceNoStandard-error mode for the overall ATT. 'analytic' is fast but anti-conservative (~0.87 coverage); 'bootstrap' resamples clusters.analytic
timeYesTime period column
alphaNoSignificance level for confidence intervals and tests.
groupYesUnit identifier
hetbyNoReport heterogeneous ATTs by a time-invariant unit-level variable (Stata: hetby())
min_nNoDrop event-study horizons with fewer treated observations (Stata: minn())
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoCluster-bootstrap replications when vce='bootstrap'.
clusterNoCluster identifier column for clustered standard errors.
horizonNoRelative-time leads / lags (default: all available)
projectNoRegress the imputed treatment effects on these covariates and report constant plus slopes. Stata's project(); mutually exclusive with hetby.
balancedNoKeep only eventually-treated units observed at every non-negative requested horizon (Stata: hbalance)
controlsNoControl-variable column names.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
boot_seedNoSeed for the cluster bootstrap (deterministic results).
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
pretrendsNoEstimate k placebo pre-trend coefficients (-k..-1) and report their joint Wald test (Stata: pretrends(k))
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
se_methodNoShared DiD spelling for vce=: 'analytic', 'bootstrap' or 'auto'. Passing both raises.
first_treatYesFirst-treatment period; 0 = never-treated
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
save_weightsNoStore exact estimation weights w with ATT = w'y in model_info (Stata: saveweights())
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
save_residualsNoStore untreated-fit residuals in model_info (Stata: saveresid())
pretrend_methodNoReference convention for the PRE-treatment event-study coefficients. 'bjs' matches Stata did_imputation, 'in-sample' is the fect/did2s residual average (attenuated by N0/N), 'symmetric' is Roth's (2026) TWFE-comparable repair for non-staggered designs. Post-treatment coefficients are identical under all three.bjs
time_covariatesNoControls interacted with the period fixed effects (one coefficient per period). Stata's timecontrols().
unit_covariatesNoControls interacted with the unit fixed effects (one slope per unit). Stata did_imputation's unitcontrols(); unit_covariates=[time] gives unit-specific trends.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, so the description need not repeat safety. It adds valuable context: limitations (R/Stata parity scope), silent absorption of pre-trend violations, cost (fits once, cheap), and bootstrap runtime multiplication. This goes beyond annotations without contradicting them.

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 long but well-structured with clear sections (Validation, Known limitations, Do NOT use when, Cost, Assumptions, Pre-conditions). The core purpose is front-loaded. While lengthy, it's appropriately detailed for a complex econometric tool and contains 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?

Covers purpose, usage, limitations, cost, assumptions, and pre-conditions. An output schema exists, so return format is covered. However, the pre-conditions section is truncated ('Pre-conditions: panel...'), leaving it incomplete. This minor gap prevents a 5.

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 100%, so baseline is 3, but the description adds meaningful context for several parameters: vce ('analytic' is anti-conservative ~0.87 coverage), pretrend_method (explains reference conventions), and detail levels (token counts and intended use). This enriches understanding beyond schema descriptions.

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 clearly identifies the tool as Borusyak-Jaravel-Spiess imputation DiD, explaining the exact methodology (fits TWFE on untreated obs, imputes Y(0), averages residuals). It distinguishes from siblings by mentioning sp.did(method='2x2') as an alternative and highlighting the need for a never-treated group.

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 three conditions where the tool should NOT be used, each with a specific reason and an alternative (e.g., no never-treated group β†’ imputation has no estimation sample; simple 2x2 β†’ use sp.did(method='2x2')). It also mentions cost implications for bootstrap, giving clear guidance on when to use it.

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

did_misclassifiedA
Read-only

Staggered DiD robust to treatment-timing misclassification and anticipation. Adjusts the CS-style aggregation for a user-supplied misclassification probability pi_misclass and a known anticipation horizon. Use when first-treat dates are noisy (e.g., survey-reported). Assumptions: Parallel trends: treated and control groups would have followed the same trajectory absent treatment; No anticipation: outcomes in pre-treatment periods are unaffected by future treatment; SUTVA: no spillovers between units. Pre-conditions: pi_misclass is between 0 and 0.5 (else identification flips); Known anticipation horizon; data is panel or repeated cross-section with a time column. Failure modes: Pre-trend joint test p < 0.05 (or underpowered at 0.10) -> Use sp.sensitivity_rr (Rambachan & Roth honest CI) or switch to sp.callaway_santanna; Staggered treatment timing with TWFE method -> TWFE can give negative weights; use Callaway-Sant'Anna, Sun-Abraham, or BJS imputation; Pre-trend test underpowered (Roth 2022) -> Check sp.pretrends_power -- if low, report honest CI via sp.sensitivity_rr. Alternatives: sp.callaway_santanna, sp.sun_abraham, sp.did_imputation, sp.sdid. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
idYesUnit, subject, or panel identifier column.
timeYesTime period column.
alphaNoSignificance level for confidence intervals and tests.
treatYesFirst-treatment period (possibly noisy)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster identifier column for clustered standard errors.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
pi_misclassNoP(observed treat != true treat) -- between 0 and 1
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
anticipation_periodsNoanticipation_periods parameter (int).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses assumptions (parallel trends, no anticipation, SUTVA), pre-conditions (pi_misclass range, anticipation horizon), and failure modes (pre-trend test results, TWFE issues). This goes far beyond the minimal annotations (readOnlyHint, openWorldHint), which only indicate non-mutating behavior. No contradiction with annotations.

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?

Though long, it is efficiently structured: purpose, when to use, assumptions, pre-conditions, failure modes, alternatives, typical N. Every sentence adds value and the critical info is front-loaded. No fluff.

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 complex tool with 14 params, 5 required, and an output schema, the description covers the use case, data requirements, assumptions, failure modes, and fallbacks. It also provides typical minimum N. The output schema covers return format, so nothing essential 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 has 100% coverage, so baseline is 3. The description adds crucial context for pi_misclass (range 0-0.5) and anticipation_periods, and explains their role in the method. While it doesn't detail every parameter, it enriches the key ones beyond schema descriptions.

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?

Clearly states it is a Staggered DiD robust to misclassification and anticipation, adjusting CS-style aggregation. It specifies the exact resource and method, and distinguishes itself from generic DiD tools by its niche. The description names alternatives, so an agent can differentiate it from siblings like callaway_santanna or sun_abraham.

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 states 'Use when first-treat dates are noisy' and provides failure-mode routing (e.g., switch to sensitivity_rr or callaway_santanna). It also lists explicit alternatives, giving the agent clear decision rules for when to choose this tool vs others.

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

did_multiplegtA
Read-only

de Chaisemartin & D'Haultfuille (2020) DID_M estimator. Weighted average of consecutive-period DID cells where treatment 'switchers' are compared to 'stayers'. Handles treatments that switch on AND off (unlike Callaway-Sant'Anna which assumes staggered adoption). Supports placebo lags, dynamic horizons, cluster bootstrap SE, joint placebo test and average-cumulative-effect summary from dCDH (2024). The heteroskedastic-weights variant and full dCDH (2024) intertemporal event-study (did_multiplegt_dyn Stata) are on the roadmap -- see docs/rfc/multiplegt_dyn.md. Validation: certified parity evidence. Assumptions: Parallel trends between switchers and stayers; Stable treatment effects across consecutive periods (for the DID_M weighted average interpretation); No anticipation. Pre-conditions: long-format panel with one row per unit x period; treatment is binary (0/1) and may vary over time within a unit; at least two periods observed per unit so a first difference can be computed. Failure modes: No switching cells (nobody changes treatment) -> did_multiplegt identifies effects only from treatment switches. Fall back to callaway_santanna if the design is staggered adoption; Joint placeb...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable
seedNoRandom seed for reproducible stochastic steps.
timeYesTime period column
alphaNoSignificance level for confidence intervals and tests.
groupYesUnit identifier
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoCluster-bootstrap replications
clusterNoCluster variable for bootstrap (defaults to group)
dynamicNoNumber of post-treatment dynamic horizons
placeboNoNumber of pre-treatment placebo lags
controlsNoControls residualised via first differences
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary current-treatment indicator (may switch on and off)
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
placebo_signNoPlacebo sign convention. dCDH's own Stata and R packages disagree: on did::mpdta both give |placebo_1| = 0.024269 with identical effects, but opposite signs. Default keeps Stata'sstata
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true and openWorldHint=false; the description adds substantial behavioral context: assumptions (parallel trends, stable effects, no anticipation), preconditions on data structure, failure modes when nobody switches treatment, and the limitation that switching both on and off is handled. It also flags roadmap items and validation evidence, exceeding what annotations alone provide.

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 long but organized with labeled sections (assumptions, pre-conditions, failure modes, validation). All information is relevant, though the truncation at 'Joint placeb...' and the roadmap detour add slight noise. It is front-loaded with the estimator definition and remains scannable.

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 complex estimator with 18 parameters, an output schema, and read-only hints, the description covers the estimator's mechanics, scope, assumptions, prerequisites, failure modes, and alternatives. The output schema covers return values, and the schema covers parameter details, so the description completes the contextual picture without redundant repetition.

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 100%, so the baseline is 3. The description adds value by clarifying the treatment variable must be binary and time-varying, requiring a long-format panel with at least two periods per unit, and by explaining that placebo/dynamic/boostrap features are supported. This goes beyond the schema's bare parameter descriptions without duplicating them.

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 estimator (DID_M), gives the intuition as a weighted average of consecutive-period DID cells comparing switchers to stayers, and explicitly differentiates it from Callaway-Sant'Anna. An agent can immediately identify what this tool computes and how it differs from closely related siblings.

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 states when the estimator is appropriate: treatments that switch on and off, and explicitly says to fall back to callaway_santanna for staggered-adoption designs. Pre-conditions (long panel, binary treatment, β‰₯2 periods) and failure modes (no switching cells) give clear guidance on when this tool should and should not be used.

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

did_multiplegt_dynC
Read-only

[experimental] dCDH (2024) intertemporal event-study DiD (MVP -- see docs/rfc/multiplegt_dyn.md). At each horizon l in {-placebo, ..., dynamic}, compares Y_{F+l} - Y_{F-1} between units first switching at F and a not-yet-treated or never-treated control set held stable across the horizon. MVP caveats: analytical influence-function variance [pending verification] is not yet implemented (SE via cluster bootstrap); switch-off events are ignored; heteroskedastic-weights variant pending. Validation status: experimental. Known limitations: switch-off events are handled, but the heteroskedastic-weights variant (dCDH 2023 EJ survey) is not implemented; se_method='analytic' is available but the paper's own variance formula is not implemented: it is not pinned to DIDmultiplegtDYN and runs about 1% below its reported SEs; the headline aggregation convention differs from DIDmultiplegtDYN's Av_tot_eff: the default weights horizons equally; pass aggregation='switchers' to match the R package. Cost: Bootstrap inference dominates: total runtime is roughly n_boot x (one full estimation pass). The default n_boot is fine for a final table but expensive inside a search loop -- lower it while iter...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
timeYesTime period column.
alphaNoSignificance level for confidence intervals and tests.
groupYesUnit identifier
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
clusterNoCluster column (defaults to group)
controlNoControl groupnot_yet_treated
dynamicNoNumber of post-treatment dynamic horizons
placeboNoNumber of pre-treatment placebo horizons
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
se_methodNo'bootstrap' resamples clusters; 'analytic' uses the influence functions (~100x faster, but NOT pinned to DIDmultiplegtDYN -- about 1% below its reported SEs)bootstrap
switchersNoEstimate on switch-in ('in') or switch-out ('out') events only. Stata's switchers(); default pools both.
treatmentYesBinary treatment (0/1), switch-on only in MVP
aggregationNoHeadline weighting over dynamic horizons: 'simple' (equal weight) or 'switchers' (weight by switchers per horizon -- reproduces DIDmultiplegtDYN's Av_tot_eff)simple
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
effects_equalNoTest H0 that the dynamic effects are all equal. True tests every effect; a (lower, upper) pair tests that horizon range. Stata's effects_equal().
same_switchersNoRestrict the treated arm to switchers observed at every requested horizon, holding the composition fixed across relative time. Stata's same_switchers.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

The description is transparent about experimental status, bootstrap cost, and SE caveats, which the readOnlyHint alone would not convey. However, it contains internal contradictions: switch-off events are both 'ignored' and 'handled', and analytic variance is both 'not yet implemented' and 'available', undermining trust in the behavioral disclosure.

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

Conciseness2/5

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

The description is long, repeats caveats, and ends mid-sentence ('lower it while iter...'). Bold section labels help, but redundancy and internal contradiction mean not every sentence earns 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?

For a complex experimental estimator, the description covers many operational concerns: validation status, variance implementation, aggregation convention, and cost. Completeness is undercut by contradictory switch-off and variance statements and by the lack of a clear use-vs-alternative statement.

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 100%, so the baseline is 3. The description adds value by explaining the n_boot runtime tradeoff and clarifying that aggregation='switchers' reproduces DIDmultiplegtDYN's Av_tot_eff, though much of the se_method and aggregation detail is already in the schema.

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 identifies the estimator precisely: an intertemporal event-study DiD following dCDH (2024), with a concrete comparison formula across horizons. It is specific enough to distinguish from generic DiD tools, though it never explicitly names a sibling alternative such as did_multiplegt.

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 gives caveats and limitations but no explicit guidance on when to choose this tool over alternatives or when not to use it. The contradictory statements about switch-off events ('ignored' vs 'handled') make usage guidance unreliable.

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

did_plotB
Read-only

Classic DID diagram showing treatment effect with counterfactual.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
axNoax parameter.
timeYesTime period variable.
titleNotitle parameter (Optional[str]).
treatYesBinary treatment group indicator (0/1).
colorsNo(treatment, control, counterfactual) colors.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
labelsNoCustom labels: ``{'treat': ..., 'control': ..., 'counterfactual': ...}``.
figsizeNofigsize parameter (Tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treat_timeNoTreatment onset time. If None, inferred as the midpoint.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
annotate_effectNoAnnotate the treatment effect arrow on the plot.
show_counterfactualNoDraw the dashed counterfactual line.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true (it creates a plot, which is read-like) and openWorldHint=false (likely a closed set of options). The description adds the key behavior of showing 'treatment effect with counterfactual' and implies it produces a diagram. It does not contradict annotations. However, it doesn't disclose details like whether the plot is displayed or saved, or how the counterfactual is computed.

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 a single sentence, concise and to the point. It front-loads the core purpose. However, it is so brief that it misses opportunities to add value beyond the schema, but it is not verbose or wasteful.

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?

Given the tool's moderate complexity (17 params, 4 required, but no nested objects beyond a colors array), the description provides only the basic purpose. The schema is rich, but the description doesn't guide the agent on what inputs are essential or typical (e.g., it doesn't emphasize that data_path, time, treat, y are required). With no output schema described in the prompt, the description should mention what the output looks like, which it doesn't.

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 input schema has 17 parameters with 100% coverage, each with descriptions (e.g., 'time' as 'Time period variable', 'treat' as 'Binary treatment group indicator'). The description adds no additional parameter semantics beyond the schema, but the schema is fully descriptive. Given high coverage, a baseline of 3 is appropriate, and the description's mention of 'counterfactual' aligns with the show_counterfactual parameter, slightly enhancing understanding.

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 states it creates a 'Classic DID diagram showing treatment effect with counterfactual.' This is somewhat specific but could be confused with other DID plotting tools like did_summary_plot, event_study_plot, or bacon_plot. The description does not explicitly distinguish it from these siblings, and the name 'did_plot' is also somewhat generic.

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 provides no guidance on when to use this tool versus alternatives. It doesn't mention when to prefer this over other DID-related plotting tools, nor does it describe any prerequisites or typical workflows. It is clear that it plots a DID diagram, but there is no context on selection criteria or exclusions.

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

did_reportB
Read-only

DID report bundle: fits selected methods and writes report artifacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesSame as :func:`did_summary`.
timeYesSame as :func:`did_summary`.
alphaNoSame as :func:`did_summary`.
groupYesSame as :func:`did_summary`.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoSame as :func:`did_summary`.
methodsNoSame as :func:`did_summary`.auto
save_toYesDirectory path. Created if it does not exist.
verboseNoPrint progress lines.
controlsNoSame as :func:`did_summary`.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
first_treatYesSame as :func:`did_summary`.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
plot_sort_byNoSort the forest plot by estimate ascending.estimate
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_sensitivityNoWhether to run Rambachan-Roth breakdown M*. Defaults to ``True`` in ``did_report`` (vs ``False`` in ``did_summary``) because a report is expected to be comprehensive.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and openWorldHint=false, so the safety posture is known. The description adds the useful behavioral fact that the tool writes report artifacts, which is more than the annotations alone convey. It does not mention server-side caching or other side effects, though these are hinted at in the schema; there is no clear contradiction with 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.

Conciseness5/5

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

The description is a single efficient sentence with no filler: it states both what the tool fits and what it writes. Every clause carries information, and the structure is front-loaded with the key purpose.

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 input schema and output schema carry most of the burden, documenting 18 parameters and return structure. Yet for a complex reporting tool with many sibling tools, the description omits the relationship to did_summary, what a report bundle contains, and the intended workflow. It is minimally viable but not richly contextual.

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 100%, so the baseline is 3 even if the tool description adds no parameter detail. The description only gestures at 'selected methods,' which weakly maps to the methods parameter. Many parameter descriptions defer to did_summary, which is not self-contained, but they still exist and cover the fields.

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 concrete action ('fits selected methods') and a concrete output ('writes report artifacts'), so it is not a mere tautology of the tool name. It conveys that this is a report-producing wrapper rather than a simple estimation or plot tool. However, it does not explicitly differentiate from close siblings like did_summary or did_plot, leaving the exact contents of the 'bundle' somewhat vague.

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 guidance about when to choose did_report over did_summary, did_plot, or other report-oriented siblings. The phrase 'report bundle' implies a use case, and the schema references did_summary several times, but the description itself provides no when-to-use/when-not-to-use direction.

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

did_summaryA
Read-only

One-call method-robustness comparison for staggered DID.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
timeYesTime / period variable (integer-valued).
alphaNoSignificance level for confidence intervals.
groupYesUnit identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster variable for SE (defaults to ``group`` in each sub-method).
methodsNoMethods to run. Valid keys: ``'cs'``, ``'sa'``, ``'bjs'``, ``'etwfe'``, ``'stacked'``, or ``'all'`` / ``'auto'`` for all.auto
verboseNoPrint progress for each method.
controlsNoTime-varying covariates passed to methods that support them.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
first_treatYesFirst-treatment period per unit; NaN (or 0) for never-treated.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_sensitivityNoIf ``True`` and ``'cs'`` is among the methods fit, compute the Rambachan-Roth (2023) *breakdown M\** -- the largest relative violation of parallel trends under which the treatment effect is still significantly different from zero. The value is added to ``model_info['breakdown_m']`` and to the ``breakdown_m`` column of ``detail`` (CS row only; other methods leave ``NaN``).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

The readOnlyHint annotation already signals this is a safe read operation. The description adds the behavioral fact that it performs a multi-method robustness comparison in one call, but provides no additional detail about internal execution, side effects, or requirements. The output schema covers return values, so this is adequate 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.

Conciseness5/5

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

The description is a single, focused phrase with no filler or redundant content. It is front-loaded and every word contributes to the core purpose.

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 input and output schemas are rich, covering parameters and return structure, which reduces the burden on the description. However, the description leaves 'method-robustness comparison' undefined and does not help an agent choose among the many DID-related siblings, leaving meaningful gaps for a complex 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 description coverage is 100%, so all 16 parameters are documented in the input schema itself. The tool description adds no parameter-specific meaning, which matches the baseline of 3 for high schema coverage.

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 identifies a specific action (comparison) and resource (staggered DID methods), which goes beyond a tautology. However, it does not explicitly distinguish itself from sibling tools like did_summary_plot or did_report, so it lacks full sibling differentiation.

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 'one-call' implies a convenience use case for running multiple robustness checks in a single invocation, but there is no explicit statement of when to use this tool versus alternatives or any exclusions. Usage guidance is only implied.

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

did_summary_plotB
Read-only

Forest plot of DID method-robustness summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoExisting axes to draw on. If ``None`` a new figure is created.
colorNoColor for point estimates and CIs.#2C3E50
titleNoPlot title. Defaults to ``"DID Method-Robustness Summary"``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesOutput of :func:`did_summary`. Must have a ``detail`` DataFrame with columns ``estimate``, ``ci_low``, ``ci_high``, and either ``method`` or ``estimator``.
figsizeNoFigure size when creating a new figure.
sort_byNoIf ``'estimate'``, sort methods by point estimate ascending. Otherwise keep the order in ``result.detail``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
referenceNoHorizontal reference value (e.g. 0 for 'no effect'). Defaults to ``0``.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
highlight_colorNoColor for the cross-method mean line.#C0392B

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint and openWorldHint annotations already signal a safe read-only operation, and the description does not contradict them. The phrase 'of DID method-robustness summary' adds a little consumption context, but the description does not mention behaviors such as as_handle server-side caching or figure persistence; the annotations lower the burden.

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 a single, direct sentence with no filler or repetition of the tool name. It front-loads the plot type and the input scope, which is ideal for a simple visualization tool.

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?

The 100% schema coverage, output schema, and read-only annotations make the one-sentence description sufficient for invoking the tool correctly. It still lacks explicit sibling differentiation and chaining advice, so it is not a 5.

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 100%, and the result parameter itself is well documented as the output of did_summary with the required detail DataFrame columns. The high-level description adds no parameter-level detail, so it is at the baseline.

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 deliverableβ€”a forest plotβ€”and scopes it to a DID method-robustness summary, matching the result parameter's did_summary origin. This is clear enough to separate it from generic plotting tools, though it never names a sibling alternative.

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 invoke this tool rather than did_plot, forest_diagnostics, or enhanced_event_study_plot, and no exclusions or chaining notes. The intended use is only implied by the name and the result parameter schema.

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

did_summary_to_latexB
Read-only

Render a :func:did_summary result as a LaTeX

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoLaTeX label for the table.tab:did_summary
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
digitsNoDecimal precision.
resultYesOutput of :func:`did_summary`.
captionNoLaTeX caption.DID method-robustness summary.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
include_ciNoInclude the 95 % CI column.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_breakdownNoInclude the Rambachan-Roth breakdown M* column when sensitivity was requested.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds no behavioral context beyond rendering, but the schema's detail parameter explains payload depth and as_handle explains caching behavior. The description itself doesn't disclose side effects, but none are expected given readOnlyHint.

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 a single concise sentence that front-loads the core function. It's minimal but sufficient, though it could benefit from a brief note about the output format.

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 tool has an output schema and 100% schema coverage, so the description doesn't need to explain return values. However, given the large sibling list and the existence of did_summary_to_markdown, a brief usage note would improve completeness. The description is adequate but not rich.

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 100%, so the schema already documents all 12 parameters. The description adds no parameter-level meaning beyond the schema. Baseline 3 is appropriate.

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 ('Render') and resource (a :func:`did_summary` result as LaTeX), which clearly identifies the tool's function. It doesn't explicitly distinguish from the sibling did_summary_to_markdown, but the format (LaTeX vs Markdown) is implied by the name and description.

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 usage: it takes a did_summary result and renders it as LaTeX. It doesn't explicitly state when to use this vs did_summary_to_markdown or synth_to_latex, but the format target is clear. No exclusions or alternatives are named.

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

did_summary_to_markdownA
Read-only

Render a :func:did_summary result as a GitHub-Flavoured Markdown table.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
digitsNoDecimal precision for numeric columns.
resultYesOutput of :func:`did_summary`.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
include_ciNoInclude the 95 % CI column.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_breakdownNoInclude the Rambachan-Roth breakdown M* column (CS row only, blank for others). Ignored if sensitivity was not requested.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is non-destructive, and the description adds that this is a formatting/rendering operation rather than a modeling operation. It does not detail the returned payload or file-writing behavior, but for a read-only renderer the annotations lower the burden.

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 verb, input, and output format are all present. Nothing could be removed without losing meaning.

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 a rich input schema, an output schema, and a readOnlyHint annotation, the description does not need to explain return values or safety. It states the tool's role clearly, though it could optionally note that this is the Markdown-specific sibling of did_summary_to_latex.

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 100%, so the schema already documents all 10 parameters, including the required `result` and the `detail`/`digits` formatting options. The description only restates that `result` comes from did_summary, adding no new parameter-level semantics beyond the 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 description names a specific verb ('Render'), a precise input (a :func:`did_summary` result), and an exact output format (GitHub-Flavoured Markdown table). This is enough to distinguish it from siblings like did_summary_to_latex and did_summary_plot, even though no sibling is named explicitly.

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 clearly implies the correct context: after obtaining a did_summary result, use this tool when a Markdown table is wanted. It does not explicitly name alternatives or exclusions, but the output-format qualifier gives the agent the main selection cue.

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

did_timevarying_covariatesA
Read-only

DiD with time-varying covariates frozen at baseline (Caetano, Callaway, Payne & Rodrigues 2022 [pending verification]). Avoids the bad-controls bias that arises when treatment affects the covariates: freezes X at period g + baseline_offset (default g-1) per cohort and uses the frozen values as controls in a per-(g, t) outcome-regression DiD. Aggregates via cohort-size weights. Assumptions: Conditional parallel trends given frozen baseline X; No anticipation; SUTVA. Pre-conditions: staggered adoption with >= 1 never-treated unit; covariates column(s) exist for the baseline period per cohort; integer-valued time column. Failure modes: No observation at baseline period for some units -> Fallback uses the first observed period; review detail coverage; Covariate measured with error or missing -> Impute (sp.mice_impute) or restrict to a complete sub-sample before calling; Pre-trend joint test p < 0.05 (or underpowered at 0.10) -> Use sp.sensitivity_rr (Rambachan & Roth honest CI) or switch to sp.callaway_santanna. Alternatives: sp.callaway_santanna, sp.drdid, sp.wooldridge_did, sp.sun_abraham. Typical minimum N: 150.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for confidence intervals and tests.
cohortYesFirst-treatment period (never_value = never-treated)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesTime-varying covariates to freeze at baseline
never_valueNonever_value parameter.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
baseline_offsetNoOffset relative to first-treatment period for freezing

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, so no contradiction. The description adds substantial behavioral context beyond the annotations: it explains that covariates are frozen at baseline per cohort, describes the aggregation via cohort-size weights, discloses failure modes and fallback behavior when baseline observations are missing, and warns about covariate measurement error. This goes far beyond what the annotations reveal.

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 long but dense and well-structured, front-loading the core mechanism before moving to assumptions, pre-conditions, failure modes, and alternatives. Every section earns its place given the tool's complexity, though the 'pending verification' citation and typical minimum N are minor extras that could be trimmed without losing essential guidance.

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 complex econometric estimator, the description covers the identification strategy, assumptions, pre-conditions, failure modes with fallback behavior, suggested remedies, alternative tools, and a sample-size guideline. Combined with the output schema and full parameter documentation, this is complete enough for an agent to decide when to call the tool and how to handle common failures.

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 100%, so the schema already documents all parameters. The description nonetheless adds meaning for the key parameters: covariates and baseline_offset are explained through the formula 'freezes X at period g + baseline_offset (default g-1)', which clarifies their joint behavior beyond the schema field descriptions. Generic parameters like data_path and seed do not need further elaboration.

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 estimator ('DiD with time-varying covariates frozen at baseline'), states the exact resource it acts on, and distinguishes it from siblings by naming alternatives like sp.callaway_santanna and sp.sun_abraham. It is immediately clear what this tool does and how it differs from related DiD tools.

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?

The description provides explicit when-to-use guidance: it names the bad-controls problem motivating the method, lists pre-conditions such as staggered adoption and never-treated units, and gives failure-mode-specific actions such as using sp.mice_impute for missing covariates or sp.sensitivity_rr for pre-trend violations. It also enumerates alternative tools, making selection guidance concrete and actionable.

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

direct_methodA
Read-only

Direct outcome regression (plug-in Q-model) OPE. Assumptions: Plug-in outcome regression (Q-model) is correctly specified; No unmeasured confounding in the logged data. Pre-conditions: X (context), A (logged action), R (reward) are available to fit the outcome model. Failure modes: Model misspecification bias -- the Q-model extrapolates outside the logged action support -> Prefer the doubly-robust estimator, which is robust to Q-model misspecification. Alternatives: sp.doubly_robust, sp.ips, sp.snips. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
AYesA parameter (np.ndarray).
RYesR parameter (np.ndarray).
XYesFeature matrix or covariate DataFrame.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
n_actionsNoNumber of actions.
pi_targetYespi_target parameter.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, so the description does not need to repeat safety. It adds valuable behavioral context: the estimator's dependence on correct Q-model specification, the extrapolation risk outside logged action support, and the recommended alternative under misspecification. It does not contradict the annotations, and the added failure-mode detail goes beyond what structured fields provide.

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 well-structured with clear labels (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and is front-loaded with the core purpose. Each section adds useful information, though the density is high and the 'Typical minimum N' could be seen as non-essential. Overall, it is appropriately sized for the tool's complexity.

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 12-parameter OPE tool, the description covers the method, assumptions, preconditions, failure modes, alternatives, and sample size guidance. However, it does not explain key parameters like pi_target (the target policy probabilities), n_actions, or how data is mapped to X/A/R, which an agent would need for correct invocation. The output schema exists but is not sufficient to fill these 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?

Schema description coverage is 100%, but most parameter descriptions are tautological ('A parameter (np.ndarray).', 'pi_target parameter.'). The tool description compensates by clarifying that X is context, A is logged action, and R is reward, which is meaningful semantic enrichment. However, pi_target and n_actions remain unexplained, so the description does not fully compensate for the weak 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 clearly identifies the tool as 'Direct outcome regression (plug-in Q-model) OPE', which is specific enough for an expert to know it performs off-policy evaluation via a plug-in outcome model. It also names alternatives, distinguishing it from doubly robust, IPS, and SNIPS estimators. However, there is no explicit verb like 'estimate' or 'evaluate', relying on the OPE acronym to convey the action.

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?

The description explicitly states assumptions (correct Q-model specification, no unmeasured confounding), pre-conditions (X, A, R available), and failure modes (model misspecification bias). It directly instructs the agent to prefer the doubly-robust estimator in the failure case and lists alternatives (sp.doubly_robust, sp.ips, sp.snips), giving clear when-to-use and when-not-to-use guidance.

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

discosA
Read-only

Distributional Synthetic Controls (Gunsilius 2023). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed (currently unused; reserved for bootstrap extensions).
timeYesTime period column name.
unitYesUnit identifier column name.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo``'mixture'``: constrained (omega >= 0, Sigmaomega = 1) -- minimises the L2-Wasserstein distance between quantile functions. ``'quantile'``: unconstrained quantile-on-quantile regression.mixture
outcomeYesOutcome variable column name.
placeboNoRun in-space placebo permutation tests for inference.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
n_quantilesNoNumber of quantile grid points on (0, 1).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitYesValue in *unit* that identifies the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst period of treatment (inclusive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark the operation as read-only, and the description adds meaningful behavioral context: SUTVA/no-anticipation assumptions, data preconditions, and failure modes with suggested remedies. It does not describe return behavior, but this is partly covered by the output schema and schema parameter descriptions.

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 dense but well-structured with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), making it scannable despite its length. Each section adds relevant information without redundancy.

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 complex econometric tool, this description covers assumptions, preconditions, failure modes, alternatives, and minimum sample size. Combined with the rich parameter schema and output schema, the agent has enough context to decide when and how to invoke the tool correctly.

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 100%, so the parameters are already well documented. The description adds method-level context (convex donor combination, pre-treatment window, placebo inference) but does not meaningfully elaborate on specific parameter semantics beyond what the schema already provides.

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?

Clearly identifies the method (Distributional Synthetic Controls, Gunsilius 2023) and communicates its intent through assumptions and preconditions. It does not use an explicit verb phrase like 'estimates the distributional treatment effect' and does not distinguish itself from closely related siblings such as discos_plot or discos_test.

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 alternatives (sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna), explicit preconditions, and failure-mode guidance such as switching to bias-corrected estimators when pre-treatment RMSPE is large. It lacks a clear when-not-to-use statement that would make routing among alternatives unambiguous.

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

discos_plotC
Read-only

Visualise distributional synthetic control results.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoPre-existing axes for the plot.
typeNodefault 'quantile_effect' ``'quantile_effect'``: treatment effect Delta(tau) across quantiles with CIs. ``'quantile_comparison'``: overlay treated vs. counterfactual quantile functions. ``'gap'``: gap plot (treated - synthetic) over time. ``'weights'``: horizontal bar chart of donor weights.quantile_effect
colorNoPrimary plot colour.#2C3E50
titleNoPlot title override.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesOutput from ``discos()`` or ``qqsynth()``.
figsizeNoFigure size.
ci_alphaNoTransparency for CI band.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With readOnlyHint=true already declared, the description adds no additional behavioral context. It does not mention plot types, caching via as_handle, or data loading via data_path. It is consistent with the annotation but adds no value beyond it.

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 a single short sentence, which is concise and front-loaded. However, it is so minimal that it may under-specify the tool's scope, though the name and schema compensate.

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?

Despite having a rich schema and output schema, the description gives no context on prerequisites (e.g., needing a fitted result from discos()/qqsynth()), no guidance on plot type selection, and no mention of the wide range of parameters. An agent would need to rely entirely on the schema and name, making the description inadequate for a tool of this complexity.

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 100%, so all parameters are documented. The description itself adds no parameter-specific meaning, but the baseline of 3 is appropriate because the schema handles the semantics.

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 clear action ('Visualise') and a specific resource ('distributional synthetic control results'), which aligns with the tool's name. However, it does not explicitly mention the source functions (discos/qqsynth) or distinguish from generic plotting tools like plot_from_result, though the name largely conveys that.

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 provides no guidance on when to use this tool versus alternatives such as plot_from_result, synthplot, or qqsynth. It does not mention that this requires a result from discos() or qqsynth(), nor any exclusions or fallback tools.

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

discos_testA
Read-only

Test for distributional treatment effects. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
testNo``'ks'``: two-sample Kolmogorov-Smirnov test comparing treated and counterfactual quantile functions. ``'cvm'``: Cramer-von Mises test statistic (permutation-based). ``'stochastic_dominance'``: first-order stochastic dominance test.ks
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesOutput from ``discos()`` or ``qqsynth()``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description does not contradict that. The description adds valuable behavioral context about assumptions (SUTVA, no anticipation) and failure modes, which goes beyond the safety profile. It doesn't describe side effects because there are none, consistent with read-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?

The description is long but densely packed: each sentence adds value (assumptions, pre-conditions, failure modes, alternatives, N). It is well-structured with clear sections, though slightly verbose for a test tool.

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 tool's statistical complexity and that the output schema exists, the description is remarkably complete. It covers assumptions, prerequisites, common pitfalls, remedial actions, alternatives, and sample size guidance – 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.

Parameters3/5

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

Schema description coverage is 100%, so all 8 parameters are already documented in the schema. The description does not add extra meaning or clarify parameter usage beyond what the schema provides. Baseline 3 applies because the schema does the heavy lifting.

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 clearly states 'Test for distributional treatment effects' – a specific verb and resource. It does not explicitly differentiate from sibling tools like discos_plot, but the core purpose 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 Guidelines4/5

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

Provides pre-conditions (panel structure, pre-treatment window), failure modes (large RMSPE) with remediation steps, and alternatives (sp.sdid, sp.augsynth, etc.). This effectively tells the agent when the tool is appropriate, though it doesn't give explicit 'when-not' versus each sibling.

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

disparity_decomposeC
Read-only

Jackson & VanderWeele (2018) causal disparity decomposition.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
mediatorYesmediator parameter (str).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
target_levelNoValue at which to fix mediator for the "initial" counterfactual.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2/5.0
Behavior2/5

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

The annotations declare readOnlyHint=true, so there is no contradiction, but the description itself discloses no behavioral traits: no mention of side effects, caching via as_handle, data-loading behavior, or output format. An agent must infer all behavior from the schema rather than from the description.

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 description is admirably short and front-loaded, with no filler or repetition. However, it is terse to the point of under-specification: a citation alone does not convey enough operational information, so the conciseness does not earn a higher score.

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

Completeness1/5

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

For a complex causal decomposition tool with 11 parameters and a large sibling family of decomposition methods, a one-line citation is grossly incomplete. It does not explain what inputs are required, what the result represents, how to interpret the output, or when the Jackson & VanderWeele approach is appropriate.

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?

The input schema provides detailed, self-sufficient descriptions for all parameters, including file formats for data_path, the meaning of detail levels, and the as_handle/result_id chaining mechanism. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.

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

Purpose2/5

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

The description is a noun phrase that essentially restates the tool name ('causal disparity decomposition') and adds a citation, but it does not state what the tool computes, returns, or how it differs from sibling decomposition tools such as mediation_decompose, oaxaca, or yu_elwert_decompose. An agent could guess the general topic but not the specific operation or output.

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

Usage Guidelines1/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 instead of the many decomposition-related siblings, and no prerequisites, exclusions, or context cues are given. The only hint of usage is the 'detail' parameter's description of payload depth, which concerns output verbosity rather than when to select this tool.

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

disparity_panelC
Read-only

Synthetic disparity panel with treatment, mediator, outcome.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNon parameter (int).
seedNoRandom seed for reproducible stochastic steps.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so no safety-warning burden falls on the description. The description adds the useful behavioral fact that the output is synthetic, not real data. It does not describe generation mechanics, caching behavior around as_handle, or any side effects, but the schema and annotations cover much of that ground. No contradiction with annotations 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?

The description is extremely concise, with no filler words, and front-loads the core fact that this is a synthetic panel. It is appropriately sized for a simple data-generation tool, though the noun-phrase construction instead of a full instruction prevents a perfect score.

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?

Given the presence of a full output schema, 100% parameter documentation, and read-only annotations, the minimal description is partially sufficient. However, with 8 parameters, 0 required, and many related siblings, an agent still lacks context about what the panel represents, when to call it, or how its output feeds downstream tools. The core idea is present, but meaningful gaps remain.

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 100%, and each parameter, especially `detail`, carries a rich explanation including token estimates and use cases. The tool description itself adds no parameter-level meaning, but the baseline of 3 is appropriate because the schema does the heavy lifting.

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 as a 'synthetic disparity panel' with treatment, mediator, and outcome components, which implies generation of simulated data. However, it lacks an explicit verb like 'generate' or 'simulate,' and does not distinguish itself from the many sibling decomposition and panel-analysis tools. It is more than a tautology but not a precise operational statement.

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 alternatives such as disparity_decompose or mediation_decompose. The word 'synthetic' hints at usage for testing or demonstration, but no explicit when-to-use, when-not-to-use, or alternative-selection guidance is provided.

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

dist_ivA
Read-only

Distributional IV: the complier LATE at each quantile of y. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Selection-on-observables (unconfoundedness + overlap) or, for IV variants, instrument validity; For IV-QTE: rank invariance / rank similarity (monotonicity of the structural quantile function); Relevance: instruments predict the endogenous regressor (first-stage F >= 10 rule of thumb). Pre-conditions: Covariates, treatment, and outcome; for IV-quantile methods, a valid instrument; Enough data to estimate the outcome distribution across quantiles; formula includes the (endog ~ instruments) parenthesised block. Failure modes: Estimated conditional quantiles cross (non-monotone), or tail quantiles are unstable -> Use rearrangement / monotonization and avoid extreme quantiles where data are sparse; First-stage F < 10 (Stock-Yogo 5% bias) -> Use weak-IV-robust inference (Anderson-Rubin) or LIML; Over-identification test rejects (sp.estat 'overid') -> At least one instrument is invalid; drop instruments or switch to just-identified LIML. Alternatives: sp.qte, sp.iv, sp.dml, sp.deepiv. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome, binary treatment, binary instrument.
seNo``'auto'`` picks ``'analytic'`` without covariates and ``'bootstrap'`` with them (the analytic influence function treats ``pi(X)`` as known).auto
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
treatYesOutcome, binary treatment, binary instrument.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoBootstrap replications when ``se='bootstrap'``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoDefaults to ``(0.1, 0.25, 0.5, 0.75, 0.9)``.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoConditioning set for ``P(Z=1|X)``. Unlike versions <= 1.20.0 (which accepted and silently ignored this argument) it now changes the estimate.
instrumentYesOutcome, binary treatment, binary instrument.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Although annotations already mark the tool as read-only, the description adds substantial behavioral context: assumptions, relevance checks, over-identification testing, quantile-crossing failure modes, weak-IV remedies, typical minimum N, and validation evidence tiers. This goes well beyond what the annotations alone 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?

The description is long but organized into labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) β€” every section earns its place for a complex estimator. It is somewhat dense, but it is structured well and front-loads the core estimand.

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 complex distributional IV-QTE tool with 15 parameters, 4 required fields, an output schema, and rich annotations, the description is remarkably complete. It covers validity conditions, failure modes, alternative methods, sample-size guidance, and failure remedies, leaving little an agent would need to infer on its own.

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 100% and individual parameter descriptions already carry meaning (defaults, enum behavior, payload depth, caching semantics). The description adds some context, such as the parenthesized endog ~ instruments block and the relevance condition, but many parameter-level details are left to the schema. Baseline 3 is appropriate.

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 opens with a precise estimand β€” "complier LATE at each quantile of y" β€” which identifies the method and its target. It names alternatives (sp.qte, sp.iv, sp.dml, sp.deepiv), helping an agent distinguish it from closely related IV and QTE tools.

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 provides explicit pre-conditions, assumptions (e.g., rank invariance, valid instrument, first-stage F >= 10), and failure-mode remedies, giving the agent clear context for when the tool applies. It names alternatives but does not explicitly state when to prefer one sibling over another, so it falls just short of full routing guidance.

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

distributional_didA
Read-only

Treatment effect on the distribution of the outcome, bin by bin. Bins the outcome, runs Callaway-Sant'Anna on each bin indicator, and reports the effect on P(Y in bin). The per-bin effects sum to zero by construction -- treatment redistributes probability mass, it does not create it -- so the content is the SHAPE: which parts of the outcome distribution gained and which lost. A mean ATT of zero is perfectly consistent with large offsetting movements in the tails, and this is what shows them. R didFF::distDD. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Known limitations: reports point estimates and standard errors only; the reference runs no test here and neither does this; simultaneous (uniform) confidence bands over bins are not implemented; the standard errors are pointwise only, so reading several bins at once overstates joint confidence. Assumptions: parallel trends for each bin indicator; no anticipation. Pre-conditions: panel with at least one treated cohort and a comparison group; outcome takes at least two distinct values. Alternatives: sp.functional_form_test, sp.qdid, sp.cic, sp.panel_qtet. Typical minimum N:...

ParametersJSON Schema
NameRequiredDescriptionDefault
gYesFirst-treatment period (0 = never treated)
iYesUnit identifier
tYest parameter (str).
xNoPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
max_eNomax_e parameter (float).
min_eNomin_e parameter (float).
panelNopanel parameter (bool).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_binsNoEqual-width bins, or 'auto' for the didFF rule. Bins span the WHOLE panel here (unlike functional_form_test, which bins untreated rows only): the estimand is about where treated mass ended upauto
weightsNoSampling-weight column
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
balance_eNobalance_e parameter (int).
binpointsNoExplicit bin edges
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
estimatorNoestimator parameter (str).dr
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
aggregationNoWhich aggte aggregation defines the per-bin effectgroup
anticipationNoanticipation parameter (int).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
control_groupNocontrol_group parameter (str).nevertreated
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
allow_unbalanced_panelNoallow_unbalanced_panel parameter (bool).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

The description adds substantial context beyond the readOnlyHint annotation: it discloses known limitations (pointwise standard errors only, no tests, no uniform confidence bands), assumptions (parallel trends for each bin, no anticipation), pre-conditions, and validation tier. It also clarifies that per-bin effects sum to zero by construction. No contradiction with 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?

The description is dense with high-value information: purpose, interpretation, validation, limitations, assumptions, pre-conditions, and alternatives. It is front-loaded with the core purpose)Skip. However, it ends with an incomplete 'Typical minimum N:...' and includes minor redundancy (e.g., 'bin by bin' repeated), yet every other sentence earns its place.

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 tool’s complexity (24 parameters) and the presence of an output schema and readOnlyHint, the description covers essential operational context: what the tool does, how to interpret output, known limitations, assumptions, pre-conditions, and alternatives. Nothing critical for an agent to select and invoke the tool correctly appears missing.

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?

The input schema has 100% description coverage, so the schema carries the parameter documentation burden. The main description supplements methodology (e.g., explaining binning and the interpretation of per-bin effects) but does not add specific parameter-level details beyond what the schema already provides. Baseline 3 is appropriate.

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 precise verb+resource: 'Treatment effect on the *distribution* of the outcome, bin by bin.' It details the method (bins outcome, runs Callaway-Sant'Anna per bin) and the specific estimand (P(Y in bin)). It distinguishes itself from mean ATT and explicitly names sibling alternatives (sp.functional_form_test, sp.qdid, sp.cic, sp.panel_qtet), making its scope unambiguous.

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 implies when to use this tool ('A mean ATT of zero is perfectly consistent with large offsetting movements in the tails, and this is what shows them') and lists alternatives, but it does not explicitly state the conditions that would favor an alternative over this tool. Pre-conditions (panel, treated cohort, outcome takes at least two distinct values) provide some guidance.

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

distributional_teA
Read-only

Estimate distributional treatment effects. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Selection-on-observables (unconfoundedness + overlap) or, for IV variants, instrument validity; For IV-QTE: rank invariance / rank similarity (monotonicity of the structural quantile function). Pre-conditions: Covariates, treatment, and outcome; for IV-quantile methods, a valid instrument; Enough data to estimate the outcome distribution across quantiles. Failure modes: Estimated conditional quantiles cross (non-monotone), or tail quantiles are unstable -> Use rearrangement / monotonization and avoid extreme quantiles where data are sparse. Alternatives: sp.qte, sp.iv, sp.dml. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimator or algorithm variant to use.ipw
n_bootNoNumber of bootstrap replications.
n_gridNoNumber of grid.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoquantiles parameter (Optional[List[float]]).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYes0-3 group encoding for CiC).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Even though readOnlyHint=true is already supplied, the description adds substantial behavioral context: validation evidence tiers, failure modes such as crossing quantiles or unstable tails, and concrete remedies like rearrangement/monotonization and avoiding sparse extreme quantiles. It also states a typical minimum N of 500, which is useful operational guidance an agent would not otherwise know.

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 dense but well-structured with clear labeled sections: Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum N. The most important sentence is front-loaded. It is longer than minimal, but the added content is substantive and relevant rather than 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 complex causal-estimation tool, the description covers assumptions, prerequisites, failure modes, alternatives, and sample-size expectations. The main missing piece is guidance on choosing among the schema's method variants (ipw, dr, cic) and reconciling the description's mention of IV variants with a schema that does not expose an instrument parameter or an IV method option.

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 100%, so the schema carries most parameter documentation. The description contributes domain-level context like 'avoid extreme quantiles where data are sparse' and the need for enough data across quantiles, but it does not provide specific parameter-by-parameter guidance beyond what the schema already says.

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 opening sentence states a specific verb and resource: 'Estimate distributional treatment effects.' It also lists alternatives (sp.qte, sp.iv, sp.dml), which helps an agent separate it from related tools. However, it does not explicitly explain how distributional_te differs from close siblings like qte or distributional_did.

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 gives clear context through assumptions (selection-on-observables, IV validity, rank invariance) and preconditions (covariates, treatment, outcome, enough data), so an agent can infer when the tool is appropriate. It names alternatives but does not spell out the conditional logic for when to choose one over another, stopping short of a full 5.

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

diversity_indexA
Read-only

Species-diversity indices from record-level or count data: Shannon entropy, species richness, Pielou evenness, the Simpson family (concentration / Gini-Simpson / inverse) and Hill numbers of any order. Accepts long-format sighting records or a site-by-species matrix and groups straight onto a panel index, so an ecological outcome can be built inside the same pipeline that estimates on it. min_records makes the small-sample filter explicit rather than a footnote.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoHill number order
byNoGrouping keys, typically the panel index
baseNoLog base for Shannon
countNoAbundance column; omit when one row is one record
indexNoIndex/indices to compute, or 'all'shannon
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
speciesNoSpecies column (required for long-format input)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
min_recordsNoGroups below this many records return NaN
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

readOnlyHint=true already signals a read-only operation, and the description complements this by disclosing behavior: it accepts two input shapes, groups onto a panel index, and applies an explicit min_records small-sample filter. There is no contradiction with 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.

Conciseness5/5

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

Three sentences with no filler: the indices are named up front, input formats and pipeline integration follow, and the min_records note ends with a useful detail. The description is front-loaded and every sentence 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?

For a 13-parameter tool with a rich output schema and read-only annotation, the description covers the essential modes: record-level data, count data, matrix input, grouping, and small-sample filtering. An explicit pointer to when related inequality measures should be used instead would make it fully complete.

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 100%, and the schema already documents parameters like q, index, detail, and data_path with meaningful descriptions. The description's only parameter-level addition is highlighting min_records as a small-sample filter, which is useful but not essential for calling the tool correctly.

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: it computes species-diversity indices and enumerates exactly which ones (Shannon, richness, Pielou, Simpson family, Hill numbers). This makes the tool instantly distinguishable from broad siblings like regress or inequality_index.

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?

It gives useful input-mode context (long-format sighting records vs site-by-species matrix) and mentions grouping onto a panel index, so an agent can infer common use cases. However, it never explicitly contrasts it with related distributional tools such as inequality_index or states when not to use it, leaving selection partially to inference.

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

dl_propensity_scoreA
Read-only

Neural-net propensity score estimator (arXiv:2404.04794, 2024). Assumptions: Unconfoundedness / selection on observables: treatment is conditionally independent of potential outcomes given covariates; Overlap (positivity): 0 < e(X) < 1 for all units (scores are clipped to [0.02, 0.98]); Covariates are pre-treatment and the MLP correctly approximates e(X) = P(T=1 | X). Pre-conditions: Cross-sectional or pooled DataFrame with a binary treatment column and numeric covariate columns; No missing values in the covariate matrix passed to the network; Enough observations per treatment arm to fit a small MLP without overfitting. Failure modes: Heavy clipping at 0.02/0.98 indicates near-deterministic treatment and positivity violation -> Trim or restrict to the region of common support before using the scores in a weighted estimator; torch absent and sklearn MLP fails to converge in max_iter with lbfgs -> Increase max_iter, scale covariates, or shrink hidden_sizes for a simpler network. Alternatives: sp.overlap_weighted_did, sp.drdid, sp.did. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesTreatment indicator, treatment variable, or treatment array.
covariatesYesCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
hidden_sizesNohidden_sizes parameter (list).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description discloses score clipping to [0.02, 0.98], positivity-violation signals, sklearn/torch convergence failure modes, and typical minimum N. No contradiction with annotations is present: the default path is a non-mutating estimator.

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 dense but well-structured with labeled sections: Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum N. Every sentence earns its place and the most identifying content is front-loaded.

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 9-parameter estimator with an output schema, the description covers validity assumptions, failure modes, remediations, sample-size guidance, and alternatives. Anything omitted, like data_path formats, is already documented in the input schema.

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 100%, so the baseline is 3, but the description adds genuine meaning: treatment must be binary, covariates must be numeric and missing-free, and hidden_sizes should be shrunk for simpler networks. This goes beyond the schema's generic 'parameter (list)' text.

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 'Neural-net propensity score estimator' and defines the estimand as e(X)=P(T=1|X), making the operation and resource unmistakable. The arXiv reference and 'propensity score estimator' wording clearly separate it from siblings like propensity_score or DID-focused tools.

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?

Assumptions and pre-conditions state when the estimator is valid, and failure modes give concrete corrective actions such as trimming or shrinking hidden_sizes. Alternatives are named explicitly, but without sharp decision rules for choosing sp.overlap_weighted_did, sp.drdid, or sp.did over this tool.

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

dmlA
Read-only

Double/Debiased Machine Learning for treatment effect estimation. Supports partially linear (PLR), interactive regression (IRM, binary D), partially linear IV (PLIV), and interactive IV (IIVM, binary D/binary Z -> LATE). Validation: certified parity evidence. Assumptions: Unconfoundedness: Y(d) perp D | X (conditional ignorability); Overlap: 0 < P(D=1 | X) < 1 for the estimand support (strong for IRM); Nuisance-function estimators converge at op(n^{-1/4}) -- fast enough that orthogonal moments give sqrtn CATE. Pre-conditions: data is tabular (DataFrame); covariates include all confounders conditional on which unconfoundedness holds; cross-fitting folds >= 2 (default 5) -- more folds -> lower variance, higher compute; for irm / iivm: treatment (and for iivm: instrument) is binary 0/1. Failure modes: Extreme propensity scores (~ 0 or 1) -> Trim sample to 0.05 < e(x) < 0.95 or use overlap weights (sp.overlap_weights); Nuisance models cross-val R2 near zero -> Nuisances not learnable -- DML bias guarantees don't apply; re-featurize or pick a different model family; Large Monte-Carlo variance across folds (n_rep > 1) -> Increase n_rep to 10+ and aggregate by median; check for leakage....

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome
modelNoDML model familyplr
n_repNoRepeated cross-fitting splits (median aggregation)
scoreNoOrthogonal score variant (DoubleML-compatible). PLR: 'partialling out' (default) or 'IV-type'. IRM: 'ATE' (default) or 'ATTE'. None selects the model default; defaults reproduce historical output exactly.
treatYesTreatment variable
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_foldsNoCross-fitting folds
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesList of control variable names
instrumentNoInstrument (required for pliv/iivm)
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
normalize_ipwNoSelf-normalize the inverse-propensity weights for the IPW models (irm/iivm); matches DoubleML's normalize_ipw. Rejected for plr/pliv.
trimming_thresholdNoSymmetric propensity clip [t, 1-t] for irm/iivm (DoubleML trimming_rule='truncate'). Default 0.01 = historical clip.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true; the description adds statistical behavior: op(n^{-1/4}) convergence requirement, trimming recommendations, leakage warning, and cross-fitting variance behavior. This goes well beyond the annotation safety profile without contradicting it.

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?

Dense but organized into definition, validation, assumptions, pre-conditions, and failure modes. The length is justified by the tool's complexity, though it runs long and ends with an ellipsis signalling truncation.

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?

Covers supported models, statistical assumptions, input pre-conditions, failure modes, and remedies. With an output schema present and every parameter described in the schema, the description is sufficiently complete for correct invocation; only a short example is absent.

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 100%, so baseline is 3. The description adds meaning to model families (binary D for IRM/IIVM, binary Z for IIVM->LATE), n_rep (median aggregation), and n_folds (variance/compute tradeoff), plus overlap/trimming context tied to the trimming_threshold parameter.

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 opens with 'Double/Debiased Machine Learning for treatment effect estimation' and enumerates the four supported model families (PLR, IRM, PLIV, IIVM), giving a clear resource and scope. It does not explicitly name sibling tools like dml_panel or dml_sensitivity, so some differentiation is left to the name and context.

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?

Includes explicit assumptions (unconfoundedness, overlap), pre-conditions (tabular data, folds >= 2, binary treatment for IRM/IIVM), and failure-mode remedies (trim extreme propensities, increase n_rep, re-featurize). It names an alternative (sp.overlap_weights) for extreme propensities but does not contrast with sibling DML-family tools.

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

dml_diagnosticsA
Read-only

Build a :class:DMLDiagnostics report from a DML CausalResult. Assumptions: Unconfoundedness (IRM/PLR) or instrument validity (IIVM/PLIV) given the covariates; Overlap / positivity; Neyman-orthogonal score plus cross-fitting; nuisance estimators converge fast enough (o(n^-1/4)). Pre-conditions: Covariates, treatment, and outcome with enough data for cross-fitted machine-learning nuisances; For instrumented variants (PLIV / IIVM): an instrument as well. Failure modes: Propensity scores near 0/1 -- overlap failure inflates variance and bias -> Trim extreme scores, restrict the estimand to the overlap region, or report sensitivity (dml_sensitivity). Alternatives: sp.tmle, sp.auto_cate, sp.causal_forest. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
clipNoFor IRM-style overlap: count units with propensity within ``[0, clip] [1-clip, 1]`` as overlap-violating.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult returned by :func:`statspai.dml.dml`. Must include the post-fit residuals (``model_info['_y_resid']``, ``model_info['_d_resid']``); for IRM, additionally the propensity ``model_info['diagnostics']['pscore_min']`` etc. are surfaced.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description discloses statistical assumptions (unconfoundedness, overlap, Neyman-orthogonal scores, cross-fitting, nuisance convergence rates) and failure modes (propensity near 0/1 inflates variance/bias). This adds substantial behavioral context about what the report validates and what can go wrong.

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 core action and then organizes assumptions, preconditions, failure modes, alternatives, and sample-size guidance into clearly labeled segments. It is dense but each sentence contributes substantive context; 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?

For a diagnostics tool with 8 parameters, an output schema, and complete schema coverage, the description covers the surrounding context well: assumptions, data requirements, failure handling, alternatives, and minimum sample size. Nothing essential for correct invocation 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 coverage is 100%, so the baseline is 3. The description adds real value by specifying what the 'result' parameter must contain (post-fit residuals, propensity diagnostics for IRM), which goes beyond the schema description. Other parameters are not individually enriched, but the schema already documents them adequately.

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 opens with a specific verb and resource: 'Build a DMLDiagnostics report from a DML CausalResult.' This clearly states what the tool does and what input it consumes, and it distinguishes itself by listing alternatives (sp.tmle, sp.auto_cate, sp.causal_forest). It is not a tautology because it adds the source object type and report deliverable.

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 provides concrete conditions for use: preconditions (covariates, treatment, outcome; instrument for PLIV/IIVM), failure-mode handling with a pointer to dml_sensitivity for overlap violations, and a 'Typical minimum N: 500' guideline. However, the three alternatives (sp.tmle, sp.auto_cate, sp.causal_forest) are named without explicit when-to-choose conditions, so guidance is clear but not exhaustive.

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

dml_model_averagingA
Read-only

Model-averaging DML (PLR) per Ahrens et al. (2025, JAE). Fits DML-PLR under multiple candidate nuisance learners and reports a risk-weighted (or equal/single-best) average of their theta estimates with a covariance-adjusted SE. Assumptions: Unconfoundedness (IRM/PLR) or instrument validity (IIVM/PLIV) given the covariates; Overlap / positivity; Neyman-orthogonal score plus cross-fitting; nuisance estimators converge fast enough (o(n^-1/4)). Pre-conditions: Covariates, treatment, and outcome with enough data for cross-fitted machine-learning nuisances; For instrumented variants (PLIV / IIVM): an instrument as well. Failure modes: Propensity scores near 0/1 -- overlap failure inflates variance and bias -> Trim extreme scores, restrict the estimand to the overlap region, or report sensitivity (dml_sensitivity). Alternatives: sp.tmle, sp.auto_cate, sp.causal_forest. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment column
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_foldsNoNumber of cross-fitting or cross-validation folds.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
candidatesNoList of (ml_g, ml_m, label) sklearn triples; defaults to Lasso/Ridge/RF/GBM
covariatesYesCovariate columns X
weight_ruleNoWeighting of candidate estimatorsshort_stacking
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Since annotations already declare readOnlyHint=true, the safety profile is covered; the description adds valuable behavioral detail such as cross-fitting, Neyman-orthogonal scores, nuisance convergence rates, and the overlap-failure mode with mitigations. It does not mention that as_handle=true can cache a fitted result server-side, but that is communicated in the schema rather than hidden.

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 dense yet well organized: method first, then assumptions, preconditions, failure modes, alternatives, and min N. Every section earns its place and no filler or repetition of schema content appears.

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 14 parameters, a full schema, and an output schema, the description covers the key contextual gaps: statistical assumptions, data requirements, failure modes, mitigations, alternatives, and sample-size guidance. Nothing essential for an agent to decide whether to invoke this tool is missing.

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 100%, so the baseline is 3. The description reinforces the meaning of candidate nuisance learners and weight_rule options, but it does not add significant parameter-level guidance beyond what the schema already documents for data_path, n_folds, detail, or seed.

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 opens with a specific method name and citation, then states the exact action: 'Fits DML-PLR under multiple candidate nuisance learners and reports a risk-weighted (or equal/single-best) average of their theta estimates with a covariance-adjusted SE.' This clearly distinguishes it from plain DML, sensitivity tools, and causal-forest alternatives.

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 lists assumptions, preconditions, failure modes, a minimum sample size, and even names alternatives such as 'sp.tmle, sp.auto_cate, sp.causal_forest' and 'dml_sensitivity' for overlap problems. However, it never explicitly states when to choose this tool over those alternatives, so the decision rule is implied rather than spelled out.

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

dml_panelA
Read-only

Long-panel Double/Debiased ML for static panel models with fixed effects (Clarke & Polselli 2025, simplified). Absorbs unit (and optional time) fixed effects via within-transform, cross-fits ML nuisance learners with folds that split units, and reports cluster-robust SE at the unit level. PLR moment (continuous or binary treatment). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Conditional unconfoundedness within unit: E[epsilon_it | X_it, alpha_i, lambda_t] = 0; Strict exogeneity conditional on covariates (weaker than standard FE); Nuisance learners converge fast enough (op(n^{-1/4})) after within-transform. Pre-conditions: long panel: at least unit and outcome columns; include_time_fe=True needs time column; enough units (clusters) for cluster-robust SE -- >= 30 ideally; enough periods per unit for within-transform to leave variation in the treatment. Failure modes: Few units (< 30) -- cluster-robust SE under-coverage -> Use wild cluster bootstrap (sp.wild_cluster_bootstrap) or CR3 jackknife; Within-unit variation in treatment is near zero -> Unit FE absorbs almost all treatment variation -- switch to between...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column
ml_gNoOutcome nuisance learner
ml_mNoTreatment nuisance learner
seedNoRandom seed for reproducible stochastic steps.
timeNoTime column (required if include_time_fe)
unitYesUnit ID column (FE + clustering)
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment column
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_foldsNoNumber of cross-fitting or cross-validation folds.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate columns X_it
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_time_feNoWhether to include time fe.
binary_treatmentNobinary_treatment parameter (bool).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Despite readOnlyHint=true already signaling a read-only operation, the description adds substantial behavioral context beyond annotations: it details the estimation mechanics (within-transform, cross-fitting, cluster-robust SE), explicit statistical assumptions, and failure modes. This is precisely the kind of context that helps an agent anticipate edge cases and interpret results, and no contradiction with annotations exists.

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 description is organized into purpose, assumptions, pre-conditions, and failure modes, which is structured. However, it is verbose and includes a truncated final sentence ('switch to between...') that breaks flow and leaves a recommendation incomplete. Some phrases like 'Validation: validated evidence tier' are opaque and add little value, making the description longer than needed.

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 complex estimation tool, the description covers key contextual areas: assumptions, preconditions, failure modes, and alternatives. The output schema exists, so return values don't need explanation. The only meaningful gap is the truncated 'switch to between...' instruction, which would have completed the failure-mode guidance. Overall, it is comprehensive but not flawless.

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 100%, so the baseline is 3. The description does not go into per-parameter detail beyond the schema; it mentions include_time_fe needs a time column, but that is already in the schema. It adds some context about n_folds implicitly via cross-fitting, but no substantive new parameter semantics beyond the structured 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 description explicitly identifies the tool as 'Long-panel Double/Debiased ML for static panel models with fixed effects', naming the method, resource, and scope. It distinguishes itself from the generic sibling 'dml' by mentioning within-transform, cross-fitting with folds that split units, and cluster-robust SE at the unit level. The PLR moment and treatment types are also specified, leaving no ambiguity about what the tool does.

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?

Pre-conditions are clearly listed, including required panel structure, minimum cluster count (>=30), and the need for within-unit variation in treatment. Failure modes are explicitly linked to alternatives: 'Few units (< 30) ... Use wild cluster bootstrap (sp.wild_cluster_bootstrap) or CR3 jackknife' and 'switch to between...' for near-zero within-unit variation. This gives the agent concrete decision rules for when to use this tool versus others.

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

dml_sensitivityA
Read-only

Compute DML-OVB sensitivity for a fitted DML CausalResult. Validation: certified parity evidence. Assumptions: Unconfoundedness (IRM/PLR) or instrument validity (IIVM/PLIV) given the covariates; Overlap / positivity; Neyman-orthogonal score plus cross-fitting; nuisance estimators converge fast enough (o(n^-1/4)). Pre-conditions: Covariates, treatment, and outcome with enough data for cross-fitted machine-learning nuisances; For instrumented variants (PLIV / IIVM): an instrument as well. Failure modes: Propensity scores near 0/1 -- overlap failure inflates variance and bias -> Trim extreme scores, restrict the estimand to the overlap region, or report sensitivity (dml_sensitivity). Alternatives: sp.tmle, sp.auto_cate, sp.causal_forest. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoBias threshold as a fraction of |theta|. ``q=1`` => confounder needed to shrink estimate to zero; ``q=0.5`` => half the estimate.
k_dNoMultipliers for the benchmark strengths.
k_yNoMultipliers for the benchmark strengths.
cf_dNoHypothesized partial-R2 of an unobserved confounder with the residualised outcome and treatment. If both are given, the report includes a bias bound and adjusted-estimate range.
cf_yNoHypothesized partial-R2 of an unobserved confounder with the residualised outcome and treatment. If both are given, the report includes a bias bound and adjusted-estimate range.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesresult parameter.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
benchmark_covariatesNoSubset of the original covariates to benchmark against. For each ``X_k``, the benchmark sets ``cf_y_bench, cf_d_bench`` to the partial R2 that ``X_k`` itself contributes (multiplied by ``k_y, k_d`` to express "what if a confounder were kx as strong as ``X_k``?").

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, so the safety profile is covered. The description adds substantial behavioral context beyond that: assumptions (unconfoundedness, overlap, Neyman-orthogonality, nuisance convergence), failure modes (overlap failure inflating variance/bias), and explicit pre-conditions. This goes far beyond the minimal read-only hint, providing actionable behavior expectations.

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 organized with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), which makes it scannable and front-loaded with the core purpose. It is relatively long, but each section adds essential information and there is minimal redundancy. A minor deduction for length and the somewhat cryptic 'Validation: certified parity evidence' sentence, which adds little clarity.

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 complexity of a DML sensitivity tool, the description is remarkably complete. It covers assumptions, pre-conditions, failure modes, alternatives, and a sample size guideline. Since an output schema exists, return values are covered. There is nothing an agent needs to know to invoke this tool correctly that is missing.

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 100%, so every parameter is documented in the input schema. The main description does not add any parameter-level semantics beyond what the schema already provides; it mentions q and cf in the context of the sensitivity logic, but that information is already present in the schema. The description thus adds no extra value for parameters, so the baseline 3 applies.

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 ('Compute') and resource ('DML-OVB sensitivity') targeted at a 'fitted DML CausalResult', which is precise and distinguishes it from the many sibling sensitivity tools (e.g., sensitivity, sensitivity_dashboard, sensemakr). It clearly conveys the tool's core function 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 Guidelines5/5

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

The description provides explicit pre-conditions (covariates, treatment, outcome, instrument for IV variants), failure modes (overlap failure near 0/1 propensity) with remedies, and names alternatives (sp.tmle, sp.auto_cate, sp.causal_forest). It also gives a typical minimum N, giving the agent clear signals on when and when not to use this tool.

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

dose_responseA
Read-only

Dose-response function for a continuous treatment under unconfoundedness. Uses generalised propensity-score weighting or double ML for the conditional expectation E[Y(d)]. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Weak unconfoundedness: Y(d) perp D | X for each d; Generalised overlap: positive conditional density of D at each evaluated dose; Smoothness of dose-response function (for local-polynomial / kernel smoothing). Pre-conditions: treat is continuous (numeric, not binary); covariates comprise the confounding set; n >= 1000 for stable dose-response curves. Failure modes: Sparse data at extreme doses -> Narrow dose_range; CIs at tails will be wide and uninformative; Heavy-tailed generalised propensity weights -> Use stabilised weights or restrict to common-support dose window. Alternatives: sp.dml, sp.metalearner, sp.causal_forest. Typical minimum N: 1000.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
treatYesContinuous treatment / dose
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
dose_rangeNo(lo, hi) over which to evaluate dose-response
n_bootstrapNoNumber of bootstrap replications.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
n_dose_pointsNoNumber of dose points.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With readOnlyHint=true already present, the description still adds substantial behavior: the estimation method (generalised propensity-score weighting or double ML), explicit assumptions, pre-conditions, and concrete failure modes such as sparse extreme-dose data and heavy-tailed propensity weights. No contradiction with 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?

The description is organized with clear labels (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives) and is front-loaded with purpose. It is dense and mostly useful, though the 'Typical minimum N' repeats the earlier n >= 1000 precondition and the Validation line is somewhat opaque.

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 12-parameter tool, the description covers the key statistical assumptions, data requirements, failure modes, and alternatives, while the input schema and output schema handle parameter details and return structure. Nothing critical is missing for an agent deciding whether and how to call it.

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 100%, but the description adds meaning beyond the schema: treat must be continuous, covariates must be the confounding set, and dose_range is connected to sparse-tail failure modes. Not every parameter is elaborated, but the most important substantive ones gain extra context.

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: estimates a dose-response function for a continuous treatment under unconfoundedness. It also names concrete alternatives (sp.dml, sp.metalearner, sp.causal_forest), distinguishing it from nearby siblings in a very large tool 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?

Provides explicit context for use: continuous treatment, unconfoundedness, confounding-set covariates, and n >= 1000. It lists alternatives but does not give explicit 'use X when Y' routing conditions, so it falls just short of full guidance.

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

double_negative_controlA
Read-only

Double negative control estimator (Miao et al. 2018; Shi et al. 2020). Assumptions: Two valid proxies of the hidden confounder U: a treatment-confounding proxy and an outcome-confounding proxy; Negative-control exposure has no causal effect on Y given (U, X) -- exclusion restriction on the NCE arm; Negative-control outcome is not caused by the treatment D given (U, X). Pre-conditions: data has columns for outcome, treatment, a negative-control exposure (nce) and a negative-control outcome (nco); nce and nco share the unmeasured confounder but satisfy the respective exclusion restrictions. Failure modes: Weak proxy: NCE barely correlated with NCO (weak-instrument analogue) -- unstable ATE -> Use stronger proxies or the doubly-robust regression-based estimator instead of just-identified 2SLS; A proxy violates its exclusion restriction (direct effect on Y or caused by D) -- biased ATE -> Validate the negative controls separately or fall back to a sensitivity analysis. Alternatives: sp.proximal, sp.proximal_regression, sp.frontdoor. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
nceYesnce parameter (str).
ncoYesnco parameter (str).
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

With readOnlyHint=true already covering the read-only safety profile, the description adds substantial behavioral context: the statistical assumptions under which the estimate is valid, two distinct failure modes (weak proxy β†’ unstable ATE; exclusion violation β†’ biased ATE), fallback recommendations, and a typical minimum N of 200. Nothing contradicts the annotations (an estimator is read-only), and the added failure-mode and fallback details go well beyond the 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.

Conciseness3/5

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

The content is genuinely information-dense (assumptions, pre-conditions, failure modes, alternatives, minimum N), but it is delivered as one long unbroken paragraph, which hurts scannability. It front-loads the estimator identity well, yet the enumeration of assumptions and failure modes reads as a wall of text rather than structured guidance. The detail justifies length, but structure could be improved.

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 complex causal-inference estimator with 12 parameters and an output schema, the description is remarkably complete: assumptions for validity, preconditions on the data, two failure modes with mitigations, alternatives, and a minimum sample size. The output schema covers return values, so nothing an agent needs to decide whether to call this tool is missing.

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 100%, so every parameter is already documented in the input-schema. The description adds useful conceptual framing β€” it connects nce and nco to 'negative-control exposure' and 'negative-control outcome' and states the proxy-assumption context β€” but it does not add syntax, defaults, or format details beyond the schema. Baseline 3 is appropriate when the schema carries the 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?

The description identifies a specific estimator ('Double negative control estimator') anchored to two citations (Miao et al. 2018; Shi et al. 2020), and names the alternatives (sp.proximal, sp.proximal_regression, sp.frontdoor) it is not. An agent can distinguish this from the proxy/frontdoor siblings without inspecting their schemas. The purpose 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 Guidelines4/5

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

Pre-conditions are explicit (data must have outcome, treatment, nce, nco columns), and failure modes provide clear when-not guidance ('Weak proxy: NCE barely correlated with NCO... use stronger proxies or the doubly-robust regression-based estimator'). However, the named alternatives (proximal, proximal_regression, frontdoor) are listed without explicit selection criteria for choosing one over this tool. The guidance is strong on when-not but weaker on why-this-over-that.

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

doubly_robustA
Read-only

Doubly-robust OPE (Dudik et al. 2011). Assumptions: Doubly robust: consistent if EITHER the outcome (Q) model OR the logging propensity model is correctly specified; Positivity / common support holds; No unmeasured confounding in the logged data. Pre-conditions: X, A, R, logging propensities and a fitted Q-model (or its predictions) are available. Failure modes: Both nuisance models misspecified -- DR guarantee is lost and the estimate is biased -> Cross-fit the nuisances or validate the Q-model and propensity fit separately. Alternatives: sp.ips, sp.snips, sp.direct_method. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
AYesA parameter (np.ndarray).
RYesR parameter (np.ndarray).
XYesFeature matrix or covariate DataFrame.
clipNoclip parameter (float).
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
n_actionsNoNumber of actions.
pi_targetYespi_target parameter.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
pi_behaviorNopi_behavior parameter (Optional[np.ndarray]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already mark this read-only, and the description adds the statistical behavior that matters: the double-robustness consistency condition, the failure mode (biased estimate when both nuisance models are misspecified), and a mitigation (cross-fit or validate each nuisance separately). No contradiction with readOnlyHint=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?

The description is organized into labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and is front-loaded with method identity. It is dense and the failure-mode sentence is a run-on, but every section earns its place for an estimator with strong statistical assumptions.

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 14-parameter estimator with an output schema (so return values need no explanation), the description covers validity conditions, prerequisites, failure modes, alternatives, and a sample-size rule of thumb. The main gap is the absence of explicit guidance on when to prefer IPS/SNIPS/DM over DR.

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 100%, so the schema already documents all 14 parameters and the baseline is 3. The description adds limited mapping context β€” pre-conditions mention X, A, R, logging propensities, and a fitted Q-model β€” which helps interpret pi_behavior and pi_target conceptually, but it does not detail parameter formats or interactions beyond that.

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 opens with 'Doubly-robust OPE (Dudik et al. 2011)', naming a specific, citable estimator, and explains its defining property: consistent if either the outcome or propensity model is correctly specified. The verb and resource are somewhat implied by the method name rather than stated explicitly, and sibling differentiation comes only later via the Alternatives line.

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 sibling estimators (sp.ips, sp.snips, sp.direct_method) and lists validity assumptions (positivity, no unmeasured confounding) along with pre-conditions, which together delineate when the estimate is trustworthy. It stops short of an explicit when-to-use-this-versus-that contrast, so the agent must infer the decision rule among alternatives.

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

drdidA
Read-only

Doubly-robust DiD (Sant'Anna & Zhao 2020). Combines outcome regression with IPW; consistent if either model is correct. Primary estimator for 2x2 DiD with covariates. Validation: certified parity evidence. Assumptions: Conditional parallel trends given X; Overlap / positivity: 0 < P(D=1|X) < 1; Correct specification of at least one nuisance model. Pre-conditions: panel or repeated cross-section with 2 periods; group is a binary unit-level treatment indicator; covariates have non-zero variance and overlap. Failure modes: Propensity score near 0/1 (overlap violation) -> Trim extreme propensity scores or use sp.ipw_trim. Alternatives: sp.did_2x2, sp.callaway_santanna, sp.wooldridge_did. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable
idNoUnit identifier for true two-period panel DR-DID
seedNoRandom seed for reproducible stochastic steps.
timeYesTime period column
alphaNoSignificance level for confidence intervals and tests.
groupYesUnit-level treatment indicator (0/1)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoNuisance estimators for est_method='dr' (R DRDID::drdid(estMethod=)): 'imp' uses inverse probability tilting + odds-weighted least squares so the DR moment is Neyman-orthogonal by construction; 'trad' uses plain logit + OLS with the estimation effects propagated. Ignored unless est_method='dr'.imp
n_bootNoDeprecated / inert: standard errors come from the Sant'Anna-Zhao influence function on every path.
weightsNoObservation weights column (R DRDID i.weights), renormalised to mean one.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariates X
est_methodNoEstimator family. With method/normalized/locally_efficient and id=, this reaches all 14 R DRDID 1.2.3 estimators: dr -> drdid_[imp_]panel / drdid_[imp_]rc[1]; ipw -> [std_]ipw_did_panel|rc; reg -> reg_did_panel|rc; twfe -> twfe_did_panel|rc. 'twfe' is for comparison, not recommendation: with covariates it is the specification Sant'Anna-Zhao and Caetano-Callaway warn about.dr
normalizedNoest_method='ipw' only. True = Hajek-normalised (std_ipw_did_*), control arm divided by its own weight mass. False = Abadie (2005) (ipw_did_*), both arms sharing the denominator E[D].
trim_levelNoDrop control units whose propensity score reaches this cutoff (DRDID trim.level). 1.0 disables.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
locally_efficientNoest_method='dr' on repeated cross-sections only. False drops the semiparametric-efficiency terms, giving drdid_rc1 / drdid_imp_rc1, which avoid fitting outcome regressions on the treated cells. Both are consistent.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, and the description does not contradict this. It goes beyond annotations by detailing assumptions (conditional parallel trends, overlap, correct nuisance model), failure modes, and validation status. This provides comprehensive behavioral context for an estimation 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 well-organized into labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), front-loads the core purpose, and every sentence contributes meaningful information. No fluff or redundancy.

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 tool's complexity (20 parameters, 4 required) and the existence of an output schema, the description covers all necessary operational context: assumptions, preconditions, failure modes, alternatives, and even sample size guidance. Nothing critical is missing for correct usage.

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 100%, so parameters are already well-documented. The description adds marginal context like 'combines outcome regression with IPW' which hints at the estimation method, but does not elaborate on parameter-specific behavior beyond what the schema provides. This meets the baseline for high schema coverage.

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 clearly states the tool performs doubly-robust DiD (Sant'Anna & Zhao 2020) combining outcome regression with IPW, and explicitly identifies it as the primary estimator for 2x2 DiD with covariates. It also names specific alternatives, distinguishing it from sibling tools like did_2x2, callaway_santanna, and wooldridge_did.

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 explicit pre-conditions (panel or repeated cross-section with 2 periods, binary treatment indicator, covariates with variance and overlap) and failure modes with remedies (trimming extreme propensity scores or using ipw_trim). Also lists alternative tools for different scenarios, giving clear when-to-use and when-not-to-use guidance.

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

ebalanceB
Read-only

Hainmueller (2012) entropy balancing. Targets the ATT by exactly balancing covariate means across treatment groups. No propensity-score model specification needed. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYes
treatYes
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
momentsNoMax moment balanced (1=means, 2=vars).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYes
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, and the description adds the methodological note that no propensity-score model is needed. However, it does not describe what the output contains or how the validation evidence is produced, leaving some behavioral aspects under-specified.

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 two sentences and front-loads the core purpose efficiently. The final fragment 'Validation: certified parity evidence' is cryptic and may not earn its place for an agent, but overall the text is tight and to the point.

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?

Given the complexity of entropy balancing, the description is somewhat light. It doesn't explain when to choose this over cbps or sbw, nor what the validation output implies. With an output schema present, the return format is covered, but the strategic context for selecting this tool is incomplete.

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 70%, so most parameters like covariates, treat, y, detail, and as_handle already have explanatory descriptions. The tool description itself does not add meaning beyond mentioning 'covariate means', which is generic. At 70% coverage, baseline of 3 is appropriate.

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 clearly identifies the tool as Hainmueller (2012) entropy balancing, specifies the target estimand (ATT), and describes the balancing mechanism (exactly balancing covariate means). This is specific and differentiates it from propensity-score-based approaches, though it does not name sibling tools.

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 usage when the user wants ATT without specifying a propensity-score model, but it provides no explicit 'when to use vs alternatives' or exclusions. The lack of sibling mentions or criteria leaves the agent to infer the appropriate context.

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

effective_f_testC
Read-only

Olea-Pflueger (2013) robust effective F statistic for weak instruments. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
exogNoIncluded exogenous controls (a constant is added automatically).
vcovNoVariance estimator for the first-stage residuals: - ``'classic'`` -- homoskedastic; F_eff equals first-stage F. - ``'HC0'`` -- White heteroskedasticity-robust. - ``'HC1'`` -- HC0 with small-sample correction ``n/(n-k)``. Ignored when ``cluster`` is given.HC1
endogYesEndogenous regressor (single endogenous variable).
absorbNoHigh-dimensional fixed effects to partial out of the endogenous regressor, the instruments and the controls before the first stage -- the same residualisation ``sp.iv(absorb=...)`` performs, so the effective F describes the specification actually fitted. The absorbed degrees of freedom are charged to ``df_resid``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster the first-stage moment variance. ``Omega`` becomes the (multiway, Cameron-Gelbach-Miller) cluster-sum meat with the ``ivreg2`` finite-sample factor ``G_min/(G_min-1) * (n-1)/(n-K)``. This is the right diagnostic whenever the second stage is
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
instrumentsYesExcluded instruments.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already signal read-only behavior, so the description carries a lower bar, but it adds essentially no behavioral context. The 'validated evidence tier' sentence is vague and does not explain what the tool returns, how it behaves across vcov choices, or what edge cases matter.

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 two-sentence description is short and front-loaded with the estimator and purpose. The second sentence about 'validated evidence tier' is low-value metadata noise, but it does not meaningfully bloat the 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?

For a 12-parameter diagnostic tool, the description is thin: it does not explain the first-stage weak-instrument role, how it relates to sibling weak-IV tools, or what inputs are expected beyond the schema. The presence of an output schema partially compensates for the missing return-value discussion.

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 100%, and the parameter descriptions for vcov, absorb, cluster, and detail are quite thorough. The tool description itself adds no parameter-level guidance, so the baseline of 3 applies.

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 identifies a specific estimator (Olea-Pflueger 2013 robust effective F) and its domain (weak instruments), which lets an agent distinguish it from generic IV diagnostics. It lacks an explicit verb like 'computes' or 'returns,' and the 'Validation:' sentence is about provenance rather than purpose.

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?

Aside from the bare phrase 'for weak instruments,' there is no guidance on when to use this tool versus closely related siblings such as zero_first_stage, iv_diag, or weakrobust. No exclusions, prerequisites, or workflow context are provided.

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

engle_grangerC
Read-only

Engle-Granger (1987) two-step cointegration test. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
lagsNoLags for ADF test. If None, uses AIC selection.
alphaNoSignificance level for confidence intervals and tests.
trendNotrend parameter (str).c
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
variablesNoVariables to test (first is dependent).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already mark it read-only, but the description adds no behavioral context beyond that tag, such as the ADF regression on residuals or assumptions about variable integration order. It does not contradict 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.

Conciseness3/5

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

The first sentence is an efficient front-loaded purpose statement. The second sentence about validation evidence is not actionable for a caller and does not earn its place, though the overall length is still short.

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 specialized econometric tool with 10 parameters and a large sibling set, the description leaves out prerequisites and selection context such as needing two or more I(1) variables or using johansen for multiple cointegrating relationships. The output schema covers return values, but the definition is thin for call-time decisions.

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 100%, and the description itself adds no parameter-level meaning. Baseline 3 is appropriate because the schema already documents lags, alpha, trend, detail, and data options in sufficient detail.

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 exact statistical method β€” Engle-Granger (1987) two-step cointegration test β€” so an agent knows the routine performs a specific estimation. It is concise and immediately clear, though it does not differentiate the test from sibling cointegration tools such as johansen.

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, exclusions, or alternatives are given. The only additional sentence is a validation-evidence tag, which says nothing about when to call this tool instead of another test.

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

enhanced_event_study_plotB
Read-only

Enhanced event study plot with pre/post shading and significance coloring.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
colorNoDefault color for estimates.#2C3E50
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
markerNomarker parameter (str).o
resultYesDID result with event study in ``model_info['event_study']``.
figsizeNofigsize parameter (Tuple[float, float]).
ci_alphaNoConfidence band transparency.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
pre_colorNoPre-treatment shading color.#EBF5FB
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
shade_preNoShade pre-treatment region.
show_zeroNoShow horizontal zero line.
sig_colorNoColor for significant estimates. None disables coloring.#E74C3C
markersizeNomarkersize parameter (int).
post_colorNoPost-treatment shading color.#FDEDEC
shade_postNoShade post-treatment region.
alpha_levelNoalpha_level parameter (float).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

The readOnlyHint annotation already discloses the safety profile, so the description is not burdened with that. It adds context about the plot's visual features (shading, significance coloring) but does not clarify whether the tool creates a new figure, modifies an existing ax, or returns anything beyond the plot.

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 a single sentence with no fluff, efficiently naming the tool type and its key visual enhancements. While it is short, it avoids unnecessary elaboration.

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?

Given the presence of a rich schema and output schema, the description need not explain return values or parameter details. However, it omits any guidance on when this tool is the right choice relative to many sibling event-study and plotting tools, leaving a significant contextual gap for an agent deciding between them.

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 100%, so the schema already documents all 21 parameters. The description mentions pre/post shading and significance coloring, which map to parameters like shade_pre, shade_post, and sig_color, but adds no new meaning beyond the schema's own 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 states a specific resource (event study) and the tool's action (produces a plot), and names distinctive features (pre/post shading, significance coloring). However, it does not differentiate from sibling plot tools like did_plot or cohort_event_study_plot, 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 guidance on when to use this tool versus alternatives with similar names (e.g., event_study, did_plot, cohort_event_study_plot). The description does not provide context or exclusions, leaving the selection decision to the agent without support.

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

estatC
Read-only

Unified post-estimation diagnostics dispatcher.

ParametersJSON Schema
NameRequiredDescriptionDefault
lagsNoNumber of lags for the Breusch-Godfrey test.
testNoName of the diagnostic test. One of ``'hettest'``, ``'white'``, ``'reset'``, ``'ovtest'``, ``'bgodfrey'``, ``'dwatson'``, ``'vif'``, ``'ic'``, ``'linktest'``, ``'normality'``, ``'leverage'``, ``'endogenous'``, ``'overid'``, ``'firststage'``, ``'all'``.all
alphaNoSignificance level for interpretation strings.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
powersNoHighest power of y-hat for the RESET test.
resultYesA fitted result object with ``params``, ``data_info``, etc.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
print_resultsNoIf True, print a formatted table to stdout.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safe-read behavior is covered by structured data. The description adds no behavioral specifics beyond the label 'dispatcher'; it does not disclose chaining/caching behavior, result format, or side-effect profile, though annotations cover the main safety trait.

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 a single, front-loaded noun phrase with no wasted words. It is concise, though arguably under-specified; still it earns a high conciseness score for efficiency.

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?

Despite a complete schema and output schema, the tool is complex (12 parameters, 15 possible tests) and the description provides almost no contextual guidance, such as when to use this dispatcher vs. sibling diagnostics or how tests are selected. This is insufficient for a tool of this complexity.

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 100%, so all 12 parameters are individually described in the input schema. The description itself contributes no parameter semantics, but the baseline of 3 applies because the schema carries the full documentation burden.

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?

Description identifies the tool as a unified dispatcher for post-estimation diagnostics, which is a clear functional category, but it is vague: it names no specific diagnostic tests and does not distinguish this tool from sibling-specific test tools like reset_test or vif. It is more than a tautology but lacks a specific verb/resource.

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 usage guidance is provided. The description does not state when to invoke this dispatcher versus individual sibling diagnostic tools, nor any prerequisites or conditions. An agent must rely on the schema and sibling names to infer applicability.

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

etableA
Read-only

Display a pyfixest-style regression table for StatsPAI results.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kwargsNoPassed to ``pyfixest.etable()``.
resultsNoOne or more fitted results.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

The description is consistent with readOnlyHint=true and 'Display' implies a read-only operation, so there is no annotation contradiction. It adds only the 'pyfixest-style' cue and leaves behaviors like server-side caching and chaining to the `as_handle`/`result_id` schema entries. With annotations already covering the safety profile, this is adequate but not information-rich.

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 a single front-loaded sentence with no filler, no restatement of schema fields, and no redundant detail. It earns its place by naming both the action and the output style in the fewest possible 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 rich schema and output schema compensate considerably, but the description does not specify the valid call shapes for an 8-parameter, all-optional tool: whether the fitted result comes through `results`, `result_id`, or is reconstructed from `data_path` plus `data_columns`. Given the enormous sibling tool list, a one-sentence invocation contract would materially improve the agent's ability to call this tool correctly.

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 100%, so the baseline of 3 applies. The prose description adds no parameter-level meaning beyond what the schema already provides for `detail`, `kwargs`, `results`, `as_handle`, and the optional data-loading fields. An agent would have to rely entirely on the schema to understand parameter semantics.

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 uses a specific verb ('Display') and a concrete resource ('a pyfixest-style regression table'), which makes the core purpose clear and distinguishes it from plotting tools like plot_from_result. However, 'StatsPAI results' is left undefined and the description does not explicitly differentiate it from other reporting or postestimation siblings.

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 itself gives no guidance on when to use etable versus alternatives such as estat, summary, or plot_from_result. Some usage context exists only in the schema's `detail` parameter, which discusses sub-step calls and payload depth, but that is about choosing a detail level, not about tool selection.

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

etregressC
Read-only

Endogenous treatment effects model. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesExogenous regressors.
yYesOutcome variable.
zYesInstruments for the selection equation.
tolNoNumerical convergence tolerance.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo``'mle'`` for full-information maximum likelihood (Stata's default) or ``'twostep'`` for the control-function estimator (Stata's ``twostep`` option). They are different estimators, not two routes to the same numbers.mle
robustNo``'nonrobust'`` (observed information), ``'robust'`` (sandwich, with Stata's ``N/(N-1)`` factor) or ``'cluster'``. Passing ``cluster=`` implies ``'cluster'``. ``vce=`` is accepted as an alias.nonrobust
clusterNoCluster column. Uses Stata's ML cluster factor ``g/(g-1)``.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary treatment variable (0/1, both values present).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true, so the tool's non-mutating nature is known. But the description adds no behavioral detail about what happens during execution, what the returned fit contains, or how the 'certified parity evidence' validation affects results. The second sentence is cryptic and does not clarify runtime behavior.

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

Conciseness2/5

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

The description is short, but the second sentence 'Validation: certified parity evidence' is a confusing non-sequitur that does not earn its place. It distracts from the otherwise simple model label and makes the description feel unpolished.

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?

This is a complex econometric tool with 16 parameters and a rich output schema, yet the description provides only a terse model name. It lacks guidance on use cases, interpretation, relationship to competing estimators, and any orientation to the detailed parameters or return payload.

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 100%, so the parameters are already well-described in the input schema. The description itself adds no parameter-level meaning, but since the schema carries the full burden, a baseline of 3 is appropriate.

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 'Endogenous treatment effects model,' which clearly identifies the statistical domain and distinguishes the tool from generic regress/ivreg/heckman alternatives. However, it lacks an explicit action verb like 'Estimates' or 'Fits,' so the purpose is conveyed by implication rather than direct statement.

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 is provided on when to use this tool versus alternatives, what data prerequisites apply (e.g., binary endogenous treatment, instruments), or what situations call for a different estimator. The description gives no exclusions or context to help the agent choose this tool.

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

etwfeA
Read-only

Extended Two-Way Fixed Effects (Wooldridge 2021). Explicit API mirroring the R etwfe package. The headline reports the treated-observation-weighted simple ATT from etwfe::emfx(type='simple') / Stata jwdid, with cgroup selecting not-yet-treated or never-treated controls. family='poisson'/'logit' switches to Wooldridge (2023) nonlinear ETWFE for count / binary outcomes, reporting the average marginal effect on the response scale. Validation: certified evidence with scoped limitations. Known limitations: cgroup='nevertreated' combined with panel=False (repeated cross-sections) is not yet supported; pass either panel=True with cgroup='nevertreated' or panel=False with cgroup='notyet'; family='poisson'/'logit' with xvar, panel=False, or cgroup='nevertreated' is not yet supported; these raise rather than being silently ignored; family='poisson'/'logit' reports an average marginal effect on the response scale (counts / probability) rather than a link-scale coefficient -- the R etwfe::emfx convention; cgroup='nevertreated' combined with panel=False (repeated cross-sections) is not yet supported. Use panel=True with cgroup='nevertreated' or panel=False with cgroup='notyet'. Do NOT use when...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column.
xvarNoR-style alias for controls
alphaNoSignificance level for confidence intervals and tests.
groupYesGroup or cohort identifier.
panelNoIf False, treat data as repeated cross-section
cgroupNoControl group: 'notyet' (not-yet-treated) or 'nevertreated'. The latter is only supported when panel=True.notyet
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
familyNoOutcome model. None/'gaussian' is the linear ETWFE. 'poisson' (counts) and 'logit' (binary) fit Wooldridge (2023) nonlinear ETWFE by MLE and report the average marginal effect on the response scale, matching R etwfe::emfx. The nonlinear branch requires panel=True, cgroup='notyet', and no xvar.
clusterNoCluster identifier column for clustered standard errors.
controlsNoControl-variable column names.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
first_treatYesfirst_treat parameter (str).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

The description goes well beyond the readOnlyHint and openWorldHint annotations: it discloses that unsupported combinations raise rather than being silently ignored, that nonlinear family reports response-scale average marginal effects rather than link-scale coefficients, and that cgroup='nevertreated' with panel=False is unsupported. It is transparent but not perfect, because the 'Validation: certified evidence with scoped limitations' phrase is vague.

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

Conciseness2/5

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

The description front-loads the estimator identity and headline result, but it is repetitive: the cgroup='nevertreated' combined with panel=False limitation appears twice almost verbatim, and the unsupported-combination/family constraints are stated more than once. The trailing 'Do NOT use when...' fragment also makes the structure feel unfinished.

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 17-parameter tool with rich schema and an output schema, the description covers the headline estimand, nonlinear variants, supported control groups, panel assumptions, and known unsupported combinations. Still, the truncated 'Do NOT use when...' clause and the vague 'certified evidence with scoped limitations' leave gaps in deciding when not to invoke this 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?

The input schema already documents all 17 parameters with 100% coverage, so the baseline is 3. The description adds genuine value by explaining the behavioral meaning of key parameters: cgroup selects not-yet-treated vs never-treated controls, panel=False means repeated cross-sections, and family='poisson'/'logit' switches to Wooldridge (2023) nonlinear ETWFE with AMEs on the response scale.

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 clearly expands the acronym to 'Extended Two-Way Fixed Effects (Wooldridge 2021)' and states the headline estimand: the treated-observation-weighted simple ATT from etwfe::emfx(type='simple') / Stata jwdid, plus the nonlinear family variants. It is specific about what the tool estimates, though it does not explicitly differentiate itself from close siblings like etwfe_emfx or wooldridge_did.

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?

It provides concrete guidance for choosing family and control-group variants: gaussian vs poisson/logit, not-yet-treated vs never-treated, and panel=True vs panel=False constraints. However, it never explicitly names an alternative tool for when this one should not be used, and the final 'Do NOT use when...' sentence is cut off, so the exclusion guidance is incomplete.

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

etwfe_emfxA
Read-only

R etwfe::emfx-style aggregated marginal effects for an ETWFE fit. Validation: certified parity evidence. Assumptions: Conditional parallel trends between treated and comparison groups absent treatment; No anticipation of treatment before its onset; Treatment effects may be heterogeneous across cohorts and time (no homogeneity required). Pre-conditions: Panel or repeated cross-section with a unit (or group) identifier and a time identifier; At least one never-treated or not-yet-treated comparison group; Pre-treatment periods to assess parallel trends. Failure modes: Pre-treatment event-study coefficients are jointly non-zero (pre-trend violation) -> Use honest DiD bounds to quantify robustness to trend violations, or condition on covariates; Two-way fixed-effects estimate is contaminated by 'forbidden' comparisons / negative weights -> Use a heterogeneity-robust estimator (Callaway-Sant'Anna, Borusyak et al., Gardner two-stage). Alternatives: sp.callaway_santanna, sp.did, sp.honest_did. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoAggregation type.simple
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesOutput of :func:`etwfe` or :func:`wooldridge_did`.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
weightingNoAggregation weights for cohort-level marginal effects. ``'treated'`` uses the number of treated post-period observations, matching R ``etwfe::emfx(type='simple')`` and Stata ``jwdid, estat simple``. ``'cohort'`` preserves the historical StatsPAI cohort-share weighting.treated
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_leadsNoFor ``type='event'`` and ``type='calendar'``, whether to include pre-treatment relative times (``rel_time < 0``) in the output. These coefficients identify pre-trends and are informative for parallel-trends inspection. Default ``False`` for backward compatibility with earlier versions; set ``True`` for full event-study output matching the R ``etwfe::emfx(type='event')`` default. ``rel_time = -1`` is always the reference category and is excluded.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description goes far beyond the annotations. It discloses assumptions (parallel trends, no anticipation), pre-conditions (panel structure, comparison groups), failure modes (pre-trend violations, forbidden comparisons), and even typical minimum N. This is rich behavioral context that helps the agent anticipate edge cases. No contradiction with readOnlyHint=true.

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 well-structured with clear sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Every sentence adds value, and the core purpose is front-loaded. Despite its length, it is not verbose; it efficiently packages essential context for a complex tool.

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 tool's complexity (11 params, output schema, multiple enums), the description is exceptionally complete. It covers assumptions, pre-conditions, failure modes, alternatives, and even suggests typical minimum N. The output schema exists, so return values are already documented, and the description fills the remaining gaps 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 100%, so all 11 parameters are already documented. The description does not add parameter-specific details beyond the schema, which is acceptable given the high coverage. The description does mention aggregation types in passing but does not elaborate on parameter semantics, so a baseline 3 is appropriate.

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 clearly states the tool computes 'aggregated marginal effects for an ETWFE fit,' naming a specific verb and resource. It distinguishes itself from siblings by explicitly listing alternatives like sp.callaway_santanna, sp.did, and sp.honest_did, making its role unambiguous.

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?

The description provides explicit when-to-use guidance via pre-conditions and failure modes. It tells the agent when not to use the tool (e.g., pre-trend violations) and points to specific alternatives, such as honest DiD bounds or heterogeneity-robust estimators. This is exactly what usage guidelines should do.

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

evalueA
Read-only

Compute the E-value for sensitivity to unmeasured confounding. Validation: certified parity evidence. Assumptions: VanderWeele-Ding (2017) E-value: quantifies the minimum confounder-exposure and confounder-outcome risk ratios that could explain away an observed association; The estimate is expressed (or convertible) to a risk-ratio scale; OR and HR map to RR via the rare-outcome approximation (rare=True) or the Ding-VanderWeele common-outcome conversion (rare=False, default); MD/SMD/OLS use exp(0.91*d); The E-value bounds joint confounding but assumes no other bias (selection, measurement, model misspecification). Pre-conditions: A point estimate on a supported scale (RR/OR/HR/MD/SMD/OLS); for an exact risk-difference E-value call sp.evalue_rd with the 2x2 cell counts; Either an SE or an explicit CI to obtain the CI E-value (OLS also needs the outcome sd). Failure modes: Ratio estimate <= 0 supplied for measure RR/OR/HR, or risk difference outside [-1, 1] -> Pass a positive ratio for RR/OR/HR or a difference within [-1, 1], matching the measure argument; Reported E-value near 1.0, i.e. trivially weak confounding overturns the result -> Treat the finding as fragile to unmeasured co...

ParametersJSON Schema
NameRequiredDescriptionDefault
ciNoConfidence interval on the ``measure`` scale. Takes precedence over ``se`` for ratio measures.
sdNoOutcome standard deviation, required for ``measure='OLS'`` to standardise the coefficient.
seNoStandard error of ``estimate``. Required for ``MD`` / ``OLS`` to obtain a confidence-interval E-value; for ratio measures it is used (with ``alpha``) to build a CI when ``ci`` is not given.
rareNoFor ``OR`` / ``HR`` only: whether the rare-outcome approximation applies. ``rare=True`` treats OR/HR ~ RR; ``rare=False`` (the default) uses the exact common-outcome conversion to the RR scale (``sqrt(OR)`` for OR; the Ding-VanderWeele formula for HR).
trueNoReference value the confounding would have to move the estimate to. Defaults to the null: 1 for ratio measures, 0 for difference measures. A non-null ``true`` gives a "non-null" E-value.
alphaNoSignificance level used to build a CI from ``se`` when ``ci`` is not supplied (ratio measures).
deltaNoContrast size for ``OLS`` (E-value for a ``delta``-unit change in the exposure).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
measureNoOne of ``'RR'``, ``'OR'``, ``'HR'``, ``'MD'``, ``'SMD'``, ``'OLS'``, ``'DIFF'``, ``'RD'``.RR
estimateYesPoint estimate on the scale given by ``measure``: - ``'RR'`` risk ratio, ``'OR'`` odds ratio, ``'HR'`` hazard ratio (all must be > 0); - ``'MD'`` / ``'SMD'`` standardised mean difference; - ``'OLS'`` raw linear-regression coefficient (supply ``sd``); - ``'DIFF'`` / ``'RD'`` risk difference (approximate scalar path;
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
rare_outcomeNoDeprecated alias for ``rare`` (kept for backwards compatibility).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses key behavioral traits: assumption of rare-outcome approximation, OR/HR conversion logic, MD/SMD/OLS transformations, the assumption of no other bias, and failure modes. It also notes the implication of an E-value near 1.0 for fragility, giving interpretative context that annotations alone do not provide.

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 description is well-structured with clear labels (Validation, Assumptions, Pre-conditions, Failure modes) and front-loaded purpose, but it is quite lengthy and ends abruptly mid-sentence ('fragile to unmeasured co...'), which hurts conciseness. While most sentences carry information, the length and truncation prevent a higher score.

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?

The description covers assumptions, pre-conditions, failure modes, and an alternative tool, and an output schema is present. However, the final advice on interpreting E-value near 1.0 is cut off, leaving that part incomplete. It is thorough overall but not fully complete due to truncation.

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 100%, so the baseline is 3. The description adds meaningful semantic context (e.g., OR/HR map to RR via different conversions, OLS requires sd, rare=True treats OR/HR as RR). This enriches understanding of how parameters interact, beyond the individual schema descriptions.

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 opens with a specific verb and resource: 'Compute the E-value for sensitivity to unmeasured confounding.' It explains the VanderWeele-Ding E-value concept and differentiates from a sibling by directing risk-difference cases to sp.evalue_rd, making the tool's scope unambiguous.

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 explicit pre-conditions (supported scales, SE or CI needed for CI E-value), an explicit alternative (sp.evalue_rd for exact risk differences), and failure modes with corrective guidance. This clearly tells an agent when this tool is appropriate versus alternatives and how to avoid common input errors.

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

evalue_from_resultB
Read-only

Compute an E-value from a StatsPAI CausalResult object.

ParametersJSON Schema
NameRequiredDescriptionDefault
rareNorare parameter (Optional[bool]).
trueNotrue parameter (Optional[float]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from any StatsPAI causal estimator exposing a scalar ``estimate`` (and ideally ``se`` / ``ci``).
measureNoHow to interpret ``result.estimate`` (for ATE/ATT on continuous outcomes ``'SMD'`` is appropriate; pass ``'RR'`` / ``'OR'`` / ``'HR'`` for ratio estimates). Passed through to :func:`evalue`.SMD
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
rare_outcomeNorare_outcome parameter (Optional[bool]).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so there is no contradiction. The description adds a useful behavioral constraintβ€”it operates on a fitted CausalResult rather than raw estimatesβ€”but does not describe side effects, dependencies, errors, or any further runtime behavior.

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 a single, front-loaded sentence with no filler, repetition, or embedded schema noise. It states the operation and the object type efficiently.

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 and 100% parameter coverage, the minimal description is adequate for a simple compute-from-result action. However, for an 11-parameter tool it misses higher-level context such as intended use after estimation, measure defaults, and the relationship to sibling E-value/sensitivity tools.

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?

All 11 parameters have schema descriptions (coverage 100%), so the baseline applies. The tool description adds no parameter-level details; the schema does the work, although some parameter descriptions (e.g. 'true parameter (Optional[float])') are tautological.

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 is a clear imperative with a specific verb ('Compute') and a precise resource/input ('an E-value from a StatsPAI CausalResult object'). It is clear in what it does, though it does not name or differentiate against siblings such as evalue, evalue_rr, or sensitivity_from_result.

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 sentence says when to prefer this tool over evalue/evalue_rr/evalue_rd or after which estimator it applies. The 'from_result' name implies a fitted-result context, but the description itself leaves the alternative selection to inference and does not state exclusions.

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

evalue_rdB
Read-only

Exact E-value for a risk difference from a 2x2 table.

ParametersJSON Schema
NameRequiredDescriptionDefault
n00YesUnexposed cases and unexposed non-cases.
n01YesUnexposed cases and unexposed non-cases.
n10YesExposed cases and exposed non-cases.
n11YesExposed cases and exposed non-cases.
gridNoStep size of the bias-factor grid search for the CI E-value.
trueNoReference risk difference (must be <= the observed RD).
alphaNoSignificance level for the confidence-limit E-value.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true, so no side-effect disclosure is required. The description adds no behavioral detail beyond the core purpose, omitting the grid search behavior, output payload options, and chaining behavior that appear in the 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?

The description is a single front-loaded sentence with no filler or repetition. It communicates the tool's purpose immediately and every word earns its place.

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?

Given 13 parameters, 4 required, and extra generic data-loading arguments, a one-sentence description is insufficient. The output schema covers return values, but the main gapsβ€”cell naming conventions, when to use this versus sibling E-value tools, and how to supply dataβ€”remain unaddressed.

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 100%, so the baseline is 3 even though the tool description says nothing about parameters. However, the required cell descriptions are ambiguous and duplicated (n00/n01 and n10/n11 share the same text), and the description does not clarify the 2x2 cell orientation.

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 operation ('Exact E-value'), the target estimand ('risk difference'), and the required data structure ('2x2 table'). This is specific enough to distinguish it from sibling tools like evalue_rr or general evalue tools, even without 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 Guidelines3/5

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

The phrase 'from a 2x2 table' implies the input context and is a weak usage cue. However, there is no explicit statement of when to prefer this tool over evalue_rr or other E-value/sensitivity tools, and no exclusions or alternatives are given.

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

evalue_rrC
Read-only

E-value computed directly from a risk ratio and its CI bounds. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
rrYesPoint-estimate risk ratio.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
rr_lowerNoOptional confidence-interval bounds on the risk ratio scale.
rr_upperNoOptional confidence-interval bounds on the risk ratio scale.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
rare_outcomeNoPassed through to :func:`evalue` for rare-outcome OR->RR correction.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

The readOnlyHint annotation already signals safety, and the description adds only the direct-computation claim. 'Validation: certified parity evidence' is opaque and does not meaningfully disclose behavior, side effects, output semantics, or limitations.

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 first sentence is front-loaded and concise. However, the second sentence is cryptic and does not clearly earn its place, and the overall terseness comes at the cost of operational 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?

Given the tool has 10 parameters, a rich schema, and many similar siblings, the description is too sparse to orient an agent. It does not explain how the parameters relate to the direct computation, when handle/data parameters are relevant, or what validation parity evidence means.

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 100%, so the schema already documents all parameters. The description only echoes rr and CI bounds and does not add meaningful semantics for detail, data_path, result_id, rare_outcome, or the other optional parameters.

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 the tool computes an E-value directly from a risk ratio and its CI bounds, which names a specific operation and resource. It implicitly differentiates from siblings like evalue_rd or evalue_from_result, but it never explicitly names an alternative.

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 about when to use this tool instead of evalue, evalue_from_result, sensitivity_rr, or other sensitivity siblings. The phrase 'computed directly from a risk ratio and its CI bounds' implies a use case, but no explicit selection criteria or exclusions are provided.

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

event_studyA
Read-only

Traditional OLS event-study with entity and time FEs. Generates relative-time dummies around the treatment date, omits a reference period, and estimates via TWFE + optional clustered SE. Exposed for users who want the classical specification alongside CS / SA / BJS; not robust to staggered-effect heterogeneity -- use sp.sun_abraham for that. Validation: certified parity evidence. Do NOT use when: only one pre-treatment period is available -- there are no leads to test parallel trends with, so the plot cannot support a pre-trend claim; treatment timing is staggered and heterogeneous -- a pooled TWFE event study contaminates leads with other cohorts' treated periods; use sp.sun_abraham or sp.callaway_santanna. Assumptions: Parallel trends across event time; No anticipation beyond window lead; SUTVA. Pre-conditions: panel with unit x time x outcome; treat_time column gives first-treatment period (or 0/NaN). Failure modes: Staggered heterogeneity -- TWFE event-study biased -> Use sp.sun_abraham for contamination-robust event-study coefficients. Alternatives: sp.sun_abraham, sp.callaway_santanna, sp.did_imputation. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column.
unitYesUnit identifier
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
windowNo(lead, lag) horizons
clusterNoCluster identifier column for clustered standard errors.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
ref_periodNoReference relative-time period to omit
treat_timeYesFirst-treatment period column
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description goes well beyond this by disclosing failure modes (TWFE bias under staggered adoption), assumptions (parallel trends, no anticipation, SUTVA), pre-conditions (treat_time column semantics), validation status ('certified parity evidence'), and a typical minimum N. It does not contradict the readOnlyHint 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?

The description is long but organized into labeled sections (Validation, Do NOT use when, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), making it scannable. There is some redundancy β€” the staggered-heterogeneity warning appears three times (intro, Do NOT use, Failure modes) β€” but the complexity of the tool justifies the density.

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 15-parameter estimation tool, the description covers assumptions, pre-conditions, failure modes, alternatives, validation status, and typical minimum N. The output schema exists, so return values need no description. An agent has everything needed to decide whether to call this tool and how to interpret the result.

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 100%, so the baseline is 3 even without parameter info in the description. The description adds small extras β€” the ref_period is 'omitted' and treat_time accepts '0/NaN' conventions β€” but these are marginal beyond the already-detailed schema. This is the weakest dimension, but the schema carries the load.

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 verb ('estimates'), a specific resource (TWFE event-study with entity/time FEs and relative-time dummies), and explicitly contrasts itself with siblings: 'not robust to staggered-effect heterogeneity -- use sp.sun_abraham for that.' An agent can identify what this tool does and how it differs from sun_abraham or callaway_santanna 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?

The description gives explicit when-to-use/when-not-to-use guidance: 'Do NOT use when: only one pre-treatment period is available...' and 'treatment timing is staggered and heterogeneous... use sp.sun_abraham or sp.callaway_santanna.' It also lists alternatives (sp.sun_abraham, sp.callaway_santanna, sp.did_imputation) and states assumptions and pre-conditions. 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.

event_study_conventionA
Read-only

Report how each DiD estimator builds its event-study reference periods. Two implementations can agree on every post-treatment coefficient and still plot different pre-trends, because the leads are a separate construction (Roth 2026). Returns the convention registry: what each half of the path is differenced against, whether the two halves are symmetric, and whether the path coincides with a dynamic TWFE event study in a non-staggered design. Failure modes: Estimator name not in the convention registry -> Call sp.event_study_convention() with no argument to list the recorded estimators. Alternatives: sp.compare_event_study_conventions, sp.event_study.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
estimatorNoRegistry key such as 'callaway_santanna[base_period=varying]', or a bare estimator name for all of its option-specific rows. None returns the whole registry.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations readOnlyHint=true and openWorldHint=false already signal a safe, closed lookup. The description adds behavioral detail by stating the returned object is a registry rather than fitted estimates, describing its fields, and disclosing the unknown-estimator failure mode. That goes beyond the annotations without contradicting them.

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 core claim, then justifies it, lists output contents, and provides failure-mode and alternative actions in a logical order. Every clause earns its place; the Roth citation and registry details are informative, not filler. It is longer than average but tightly 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?

A registered output schema and full schema coverage lower the burden on the description. The description covers what the registry contains, a failure mode, and a recovery action. The main gap is that data_path, data_columns, and data_sample_n appear in the schema without clarification that this tool is a pure metadata lookup, which could mislead an agent into supplying unnecessary data.

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 100%, so all seven parameters are documented in the schema and the description adds no parameter-level meaning. It does not explain, for instance, whether data_path/data_columns are relevant to a registry lookup, which would have added value. Per the baseline rule, 3 is appropriate when the schema does the heavy lifting.

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 opens with a specific verb+resource: 'Report how each DiD estimator builds its event-study reference periods.' It then specifies the exact output (a convention registry) and names two sibling tools, making differentiation effortless. The Roth 2026 aside usefully distinguishes coefficients from leads, reinforcing the tool's unique scope.

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 provides a concrete failure-mode rule: if an estimator name is not in the registry, call with no argument to list recorded estimators. It also names sp.compare_event_study_conventions and sp.event_study as alternatives. It stops short of stating selecting conditions for each alternative, but the failure-mode guidance is unusually actionable.

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

event_study_tableB
Read-only

Adapter that turns an event-study fit into a regtable input.

ParametersJSON Schema
NameRequiredDescriptionDefault
regexNoPattern with one capture group that matches the relative time in coefficient names. Required when the CausalResult fast path is not applicable. Examples: ``r"^tau_(-?\d+)$"``, ``r"^lag(\d+)$"``, ``r"::(-?\d+)$"``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesFitted model. The CausalResult fast path is used automatically when ``model_info['event_study']`` is present.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
label_fmtNoFormat string for the row label of each event-time bin. The ``{t}`` placeholder receives the integer relative time.t={t}
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_referenceNoWhether to render the reference period row (typically ``t=-1``) where the estimate is identically zero.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, so the safety profile is covered by structured metadata. The description adds no behavioral context such as the CausalResult fast path, caching via as_handle, or output conventions, but it does not contradict the annotations either.

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 a single sentence with no filler, and the core conversion purpose is front-loaded. It is concise without being bloated, though it could have been slightly more informative.

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 10-parameter utility with a full output schema and rich parameter documentation, the description is minimally sufficient but leaves the pipeline position implicit. A note about being called after event_study or when a CausalResult fit is available would make it more complete.

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 100% and the parameter descriptions are detailed, including regex examples, detail-level payload sizes, and as_handle chaining behavior. The tool description itself adds no parameter-level meaning, so the baseline of 3 applies.

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 uses a specific verb and resource: it 'turns an event-study fit into a regtable input,' making clear this is a transformation utility rather than an estimation or plotting tool. It does not explicitly contrast with sibling tools like event_study or enhanced_event_study_plot, so it stops short of full differentiation.

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 'event-study fit' implies the tool should be called after fitting an event study and when a regression-table input is needed, but no explicit when-to-use or when-not-to-use guidance is given. Naming an alternative like event_study or enhanced_event_study_plot would have made the usage context sharper.

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

examplesC
Read-only

Return runnable code examples + registry metadata for a function.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCanonical StatsPAI function name (e.g. ``"did"``, ``"regress"``, ``"callaway_santanna"``). Lower-cased and stripped before lookup.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

The annotations readOnlyHint=true and openWorldHint=false already cover safety. However, the description says 'examples + metadata' while the input schema's `detail`, `as_handle`, and `result_id` descriptions describe point estimates, coefficient tables, cached fitted results, and chaining to later calls. The description does not address this apparent mismatch, leaving an agent with potentially wrong expectations about executing functions with `data_path` or caching with `as_handle`.

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 a single, front-loaded sentence with no wasted words. It immediately states the action and object, and every phrase adds useful information.

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 tool whose schema accepts `data_path`, `as_handle`, `result_id`, `data_columns`, and `data_sample_n`, a one-sentence description is insufficient. It does not clarify whether these parameters tailor the example code or actually execute the function, and the schema's parameter descriptions conflict with the 'code examples' framing. The output schema reduces the need to describe return values, but the core behavioral ambiguity remains.

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 100%, so the schema carries the parameter documentation burden, and it does so in detail: canonical name normalization, token budgets for each detail level, supported data formats, and handle chaining. The description itself adds no parameter-level meaning, so the baseline of 3 applies.

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 uses a specific verb and object: 'Return runnable code examples + registry metadata for a function.' This clearly communicates the tool's core purpose and distinguishes it from estimation tools. It does not explicitly contrast with a sibling tool, but the meaning 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?

There is no guidance about when to use `examples` versus the many sibling tools, such as `bibtex`, `available_methods`, or `brief`. The only usage-like information is buried in the `detail` enum description, and that concerns output depth rather than tool selection.

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

fairlieB
Read-only

Fairlie (2005) nonlinear decomposition for binary outcomes. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
groupYesGroup or cohort identifier.
modelNoModel variant or parameterisation to fit.logit
n_simNoNumber of sim.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
referenceNoreference parameter (int).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true, which covers the safety profile. The description adds only a cryptic note about 'validated evidence tier' which does not describe runtime behavior, return format, or potential errors. It does not contradict annotations, but it adds little beyond them, so transparency is limited.

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 description is concise (two sentences) and front-loads the purpose. However, the second sentence about validation is vague and does not aid usage; it could be removed or clarified. The structure is not inefficient, but it does not maximize usefulness for an agent.

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?

Given the tool has 13 parameters and sits among dozens of decomposition tools, the description is inadequate. It lacks usage guidelines, comparison to alternatives, description of output or next steps, and any contextual cues that would help an agent decide to invoke it. The output schema exists but the description does not leverage it.

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 100%, so every parameter is documented in the input schema itself. The tool description provides no additional parameter-level insight. Since the schema does the heavy lifting, the baseline of 3 is appropriate; the description neither adds nor detracts from parameter understanding.

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 clearly states the tool performs a Fairlie (2005) nonlinear decomposition for binary outcomes. This is a specific verb (decompose) applied to a specific method (Fairlie) and outcome type (binary), which distinguishes it from linear (Oaxaca) or distributional (Melly) decomposition tools. It names the method and the context, making its purpose 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?

There is no guidance on when to use this tool versus the many decomposition siblings (e.g., dfl_decompose, oaxaca, melly_decompose). The description does not mention any conditions, prerequisites, or when to avoid it. An agent must rely on the method name alone to decide, which is insufficient given the large family of similar tools.

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

fciA
Read-only

Run FCI. Returns a :class:FCIResult with the learned PAG. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Causal Markov condition and faithfulness (PC/GES/FCI); Causal sufficiency for PC/GES (no latent confounders); FCI relaxes this; Acyclicity; LiNGAM additionally assumes a linear non-Gaussian model. Pre-conditions: Constraint-/score-based discovery needs i.i.d. observational data with enough samples for reliable conditional-independence tests; Invariance-based discovery (ICP) needs data labelled by environment / intervention. Failure modes: Unstable skeleton / many undirected edges -- faithfulness or sample size is the likely culprit -> Increase the sample, relax the CI-test threshold, or switch to FCI if latent confounders are plausible. Alternatives: sp.pc_algorithm, sp.fci, sp.ges, sp.lingam. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for CI tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
ci_testNoOnly Fisher-Z partial-correlation test is supported; extensions (kernel / chi-square) can be added later.fisherz
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
variablesNoColumns to use; defaults to all numeric columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
max_cond_sizeNoMax size of conditioning set.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations (readOnlyHint=true, openWorldHint=false) already signal read-only, closed-world behavior. The description adds substantial behavioral context: return type (FCIResult), validation tiers, assumptions, failure modes with mitigation strategies, and minimum sample size. No contradiction with annotations; 'Run FCI' is consistent with read-only computation.

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 organized with clear labels (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and front-loads the core purpose. Each sentence adds distinct value; no fluff. Despite length, it is dense and well-structured.

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 complex causal discovery algorithm with 10 parameters and an output schema, the description covers return type, assumptions, pre-conditions, failure modes, alternatives, and sample size guidance. The output schema handles return details, so nothing essential is missing. Very complete.

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 100%, so parameters like alpha, ci_test, and data_path are already documented. The description does not add specific parameter meaning beyond the schema; it only indirectly references alpha via 'relax the CI-test threshold.' Baseline 3 is appropriate because schema carries the load.

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 clearly states 'Run FCI' and specifies the output as a `FCIResult` with the learned PAG. It distinguishes FCI from siblings by naming alternatives (sp.pc_algorithm, sp.ges, sp.lingam) and explaining when FCI is preferred (latent confounders). This is specific and non-tautological.

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 explicit when-to-use guidance: assumptions contrast FCI with PC/GES (FCI relaxes causal sufficiency), and failure modes explicitly say 'switch to FCI if latent confounders are plausible.' Also covers pre-conditions (i.i.d. data, enough samples, environment labels for ICP) and typical minimum N=500. This is thorough routing.

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

fectA
Read-only

Counterfactual estimators for time-series cross-sectional data (Liu, Wang and Xu 2024): impute the untreated potential outcome of every treated unit-period from a model fitted on untreated cells only -- two-way fixed effects ('fe', the imputation estimator), interactive fixed effects with r factors ('ife'), or nuclear-norm matrix completion ('mc') -- and average Y - Y(0) over treated cells, with the ATT path by relative period. Native port of the R package fect; handles staggered adoption, many treated units, unbalanced panels and treatment reversals. Validation: certified evidence with scoped limitations. Known limitations: Inference is resampling-only (unit bootstrap or jackknife on request); the default returns point estimates only; r and lam are user-supplied; fect's cross-validated choice of r / lambda is not yet supported. Assumptions: Y(0) follows the chosen model (two-way FE / low-rank factors / low nuclear norm) on untreated cells; No anticipation and no carryover after treatment ends; Strict exogeneity of treatment status conditional on the fixed effects / factors. Pre-conditions: long panel with unit x time x outcome and a 0/1 treatment status; every retained unit has a...

ParametersJSON Schema
NameRequiredDescriptionDefault
rNoNumber of latent factors (method='ife')
yYesOutcome column
lamNoNuclear-norm penalty on fect's raw scale (method='mc'); the result records lambda_norm = lam / largest singular value.
tolNoEM relative convergence tolerance (fect default)
vceNoResampling standard errors over units; None reports point estimates only.
seedNoBootstrap seed
timeYesTime period column
unitYesUnit identifier
alphaNoSignificance level for confidence intervals and tests.
forceNoAdditive fixed effects in the Y(0) model.two-way
treatYes0/1 treatment status in each unit-period (1 = treated)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoY(0) model: 'fe' two-way fixed effects, 'ife' interactive fixed effects with r factors, 'mc' matrix completion with penalty lam.fe
min_t0NoDrop units with fewer untreated periods (fect: 1 for 'fe', 5 otherwise)
n_bootNoBootstrap replications
max_iterNoMaximum EM iterations
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoTime-varying covariates entering the Y(0) model linearly
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

The description is rich with behavioral details: it discloses that inference is resampling-only (bootstrap/jackknife), default returns point estimates, r and lam are user-supplied, and cross-validated selection is unsupported. It also lists assumptions about the Y(0) model. These go well beyond the readOnlyHint annotation and are consistent with it.

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 long but well-structured, with sections for validation, limitations, assumptions, and pre-conditions. It front-loads the core purpose and then provides necessary context. While not minimal, the density is justified by the tool's complexity and the need to convey assumptions and limitations.

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 tool's complexity (22 parameters, multiple methods, assumptions), the description is remarkably complete. It covers the method variants, data requirements, known limitations, and inferential options. The output schema exists, so return values are covered elsewhere. Nothing essential is missing for an agent to call it correctly.

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 100%, meaning every parameter is already documented in the schema. The description does mention r and lam in the context of methods, but this is redundant with the schema. It adds no new parameter semantics beyond what the schema provides, so a baseline score of 3 is appropriate.

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 clearly states the tool's purpose: it imputes untreated potential outcomes and computes ATT for panel data using counterfactual estimators. It names the three methods (fe, ife, mc) and explains the underlying approach. This goes beyond the name and distinguishes it from generic estimation tools.

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 provides explicit pre-conditions (long panel with unit/time/outcome and 0/1 treatment) and assumptions (no anticipation, strict exogeneity) that indicate when the tool is appropriate. It also lists capabilities like staggered adoption and treatment reversals. However, it does not explicitly name alternative tools or state when NOT to use it, leaving some inference to the agent.

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

feglmA
Read-only

Estimate GLM (logit, probit, Gaussian) with high-dimensional fixed effects. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
fmlYespyfixest formula.
seedNoRNG seed for sampled (non-enumerated) ``vce="wild"`` draws.
vcovNoVariance-covariance estimator (``vce=`` is the canonical alias). Also accepts ``vce="CR2"``/``"CR3"``/``"jackknife"`` (with ``cluster=``) for the clubSandwich bias-reduced cluster-robust SEs, and ``vce="wild"`` (with ``cluster=``) for the restricted score wild cluster bootstrap (Kline-Santos 2012; bit-exact vs Stata ``boottest`` in the enumerated regime).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
familyNoGLM family: ``"gaussian"``, ``"logit"``, ``"probit"``.gaussian
clusterNoCluster id column for the extended ``vce=`` menu (also a shorthand for one-way ``{"CRV1": cluster}``).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
wild_repsNoReplications for ``vce="wild"``. When ``2**G <= wild_reps`` the full Rademacher grid is enumerated (deterministic).
conley_latNoconley_lat parameter (Optional[str]).
conley_lonNoconley_lon parameter (Optional[str]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
conley_cutoffNoconley_cutoff parameter (Optional[float]).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
wild_weight_typeNoWild weight distribution (``"rademacher"`` or ``"webb"``).rademacher

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, establishing the safety profile. The description adds a modest quality claim ('certified parity evidence') but does not disclose operational traits such as computational intensity or the optional server-side caching enabled by as_handle. No contradiction with 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?

The description is just two sentences, with the core purpose front-loaded in the first sentence. The second sentence ('Validation: certified parity evidence.') is cryptic and low in actionable value, but it is brief and does not create bloat.

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 rich input schema and presence of an output schema compensate for the brief description, making it adequate for basic invocation. However, the description does not orient the agent to advanced features like the extended vcov menu, wild cluster bootstrap, result chaining, or the meaning of the parity-validation note, which leaves some gaps for a high-complexity 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 100% and all 16 parameters have thorough descriptions in the input schema, so the baseline applies. The description does not add parameter-specific meaning, but it is not required to given the complete schema 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?

The description names a specific verb ('Estimate'), a precise resource (GLM with high-dimensional fixed effects), and enumerates the supported families (logit, probit, Gaussian). This clearly differentiates it from siblings like feols, fepois, and plain glm/logit/probit without needing to name them.

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 intended use is implied by the name and description (GLM with HDFE), but there is no explicit when-to-use guidance, no prerequisites, and no mention of when to prefer this over closely related siblings like feols, fepois, or meglm. An agent must infer the selection criteria.

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

feolsA
Read-only

Estimate OLS / IV with high-dimensional fixed effects via pyfixest. Validation: certified parity evidence. Do NOT use when: vce='conley' on more than ~20,000 rows -- that path is dense O(n^2) (see cost); use sp.conley on the fitted result, which is sparse and scales. Cost: Default (OLS / HC / CRV1) is linear in n. vce='conley' is the exception: it calls conley_vcov_matrix, which materialises several dense n x n float64 arrays (lat/lon differences, distances, the uniform kernel) -- ~0.8 GB at n=10,000, ~80 GB at n=100,000, ~157 GB at n=140,000. Prefer sp.conley (sparse cKDTree) above ~20,000 rows. Assumptions: Strict exogeneity conditional on the absorbed fixed effects; No perfect collinearity after FE absorption (within-transformation rank); Cluster structure for vcov={'CRV1': '...'} matches the relevant dependence. Pre-conditions: Data is a long-format DataFrame; FE columns are categorical or convertible; Every absorbed FE level has more than one observation (singleton dropping behaviour controlled by drop_singletons); Optional IV stage: instruments are at least as many as endogenous regressors. Failure modes: Singleton groups dropped warning -> Aggregate small categories or...

ParametersJSON Schema
NameRequiredDescriptionDefault
fmlYesA pyfixest-style formula. Examples: - ``"Y ~ X1 + X2"`` -- plain OLS - ``"Y ~ X1 | firm + year"`` -- two-way fixed effects - ``"Y ~ 1 | firm | X1 ~ Z1"`` -- IV with fixed effects - ``"Y ~ X1 | csw0(firm, year)"`` -- multiple estimations
sscNoSmall-sample correction via ``pyfixest.ssc()``.
leanNoIf True, drop large intermediate arrays to save memory.
seedNoRNG seed for ``vce="wild"``.
vcovNoVariance-covariance estimator (``vce=`` is the canonical alias). - ``"iid"`` -- classical - ``"HC1"``, ``"HC2"``, ``"HC3"`` -- heteroskedasticity-robust - ``{"CRV1": "firm"}`` -- cluster-robust - ``{"CRV1": "firm + year"}`` -- two-way clustering - ``vce="CR2"`` / ``"CR3"`` / ``"jackknife"`` (with ``cluster=``) -- Pustejovsky-Tipton bias-reduced cluster-robust on the FE-absorbed within design; matches R ``clubSandwich::vcovCR(plm)``. - ``vce="wild"`` (with ``cluster=``) -- WCR wild cluster bootstrap (Cameron-Gelbach-Miller 2008); validated against Stata ``boottest``. - ``vce="conley"`` (with ``conley_lat=/conley_lon=/conley_cutoff=``) -- Conley spatial HAC (Stata ``acreg`` planar-distance convention).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster id column for the extended ``vce=`` menu; also a shorthand for one-way ``{"CRV1": cluster}``.
weightsNoColumn name for regression weights.
fixef_rmNoHow to handle singleton fixed effects: ``"none"`` (keep) or ``"singleton"`` (drop).none
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
wild_repsNoBootstrap replications for ``vce="wild"``.
collin_tolNoCollinearity tolerance.
conley_latNoCoordinate columns (decimal degrees) for ``vce="conley"``.
conley_lonNoCoordinate columns (decimal degrees) for ``vce="conley"``.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
conley_cutoffNoConley distance cutoff in km for ``vce="conley"``.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
wild_weight_typeNoWild weight distribution (``"rademacher"``, ``"webb"``, ``"mammen"``).rademacher

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=trueusters. The description adds substantial behavioral context: computational complexity (dense O(n^2) for conley), concrete memory estimates (~0.8 GB at n=10,000, ~157 GB at n=140,000), statistical assumptions (strict exogeneity, no perfect collinearity), singleton handling, and failure modes. This goes well beyond the annotations and helps the agent anticipate the tool's runtime and correctness 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?

The description is long but well-structured with clear sections (Validation, Do NOT use when, Cost, Assumptions, Pre-conditions, Failure modes). It front-loads the core purpose, then organizes warnings and technical context logically. Each section earns its place; while condensed, it remains actionable for a complex 20-parameter tool.

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 high-dimensional fixed effects estimator with an output schema, the description is remarkably complete: it covers validation evidence, cost and memory behavior, assumptions, pre-conditions, failure modes, and guidance on alternatives for the conley case. The presence of an output schema means return-value details are already structured, and the description fills the behavioral and contextual gaps.

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 100%, so the baseline is 3. The description enriches the vcov parameter with cost/alternative guidance and adds context to the fml parameter about IV requirements. However, it references 'drop_singletons' while the schema defines 'fixef_rm', creating a naming mismatch that could confuse an agent. This prevents it from scoring higher.

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 opens with 'Estimate OLS / IV with high-dimensional fixed effects via pyfixest', which is a specific verb, resource, and method. It clearly distinguishes this tool from generic regression siblings like 'regress' and from Poisson/FE variants such as 'fepois'. It also includes validation parity evidence, reinforcing the purpose.

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 'Do NOT use when' clause explicitly warns against using vce='conley' on large datasets and names the preferred alternative (sp.conley). Pre-conditions further define appropriate contexts (long-format data, categorical FE columns, instrument sufficiency). However, it does not explicitly name sibling tools for the main use case, leaving some routing implicit in the purpose statement.

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

fepoisA
Read-only

Estimate Poisson regression with high-dimensional fixed effects via pyfixest. Validation: certified parity evidence. Assumptions: Conditional mean exponential link: E[y | x, alpha] = exp(x'beta + alpha); Strict exogeneity conditional on the absorbed fixed effects (PPML consistency). Pre-conditions: Outcome is a non-negative count or non-negative continuous variable; Fixed effects columns are categorical; absorbed groups exist. Failure modes: Convergence failure or extreme exponentiated predictions -> Drop large-magnitude regressors, rescale, or switch to OLS on log(1+y) (with caveats); Separation: some FE level perfectly predicts zero outcomes -> Drop perfectly-predicted groups and rerun; document the restriction. Alternatives: sp.feols, sp.regress, sp.panel. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
fmlYespyfixest formula. E.g. ``"Y ~ X1 | firm"``.
sscNoSmall-sample correction.
seedNoRNG seed for sampled (non-enumerated) ``vce="wild"`` draws.
vcovNoVariance-covariance estimator (``vce=`` is the canonical alias). Besides the pyfixest values (``"iid"``, ``"HC1"``, ``{"CRV1": "firm"}``, ...), accepts the extended menu: - ``vce="CR2"`` / ``"CR3"`` / ``"jackknife"`` (with ``cluster=``) -- clubSandwich glm bias-reduced cluster-robust SEs on the FE-as-dummies design; matches R ``clubSandwich::vcovCR(glm)``. - ``vce="wild"`` (with ``cluster=``) -- restricted score wild cluster bootstrap (Kline-Santos 2012) with Stata ``boottest``'s exact studentization; bit-exact vs ``boottest`` in the enumerated regime.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster id column for the extended ``vce=`` menu; also a shorthand for one-way ``{"CRV1": cluster}``.
weightsNoColumn name for regression weights (not supported with the extended ``vce=`` menu).
fixef_rmNoSingleton fixed effect handling.none
iwls_tolNoIWLS convergence tolerance.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
wild_repsNoReplications for ``vce="wild"``. When ``2**G <= wild_reps`` the full Rademacher grid is enumerated (deterministic).
collin_tolNoCollinearity tolerance.
conley_latNoconley_lat parameter (Optional[str]).
conley_lonNoconley_lon parameter (Optional[str]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
iwls_maxiterNoMax IWLS iterations.
conley_cutoffNoconley_cutoff parameter (Optional[float]).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
wild_weight_typeNoWild weight distribution (``"rademacher"`` or ``"webb"``).rademacher

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior5/5

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

Beyond the readOnlyHint/openWorldHint annotations, the description discloses the statistical assumptions (exponential conditional mean, strict exogeneity/PPML consistency), two specific failure modes (convergence failure and separation) with step-by-step remedies, a validation parity claim, and a minimum-N heuristic. This is exactly the behavioral context an agent needs to anticipate and handle estimation failures.

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 is front-loaded and sections are labeled (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives), which aids parsing. However, the description runs roughly 280 words and includes vague entries like 'certified parity evidence' (parity with what?) and 'with caveats' (unspecified), and the alternative names use an 'sp.' prefix inconsistent with the tool registry β€” these ambiguities cost it a point.

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 21-parameter tool with a rich output schema and fully documented parameters, the description covers the important meta-context: assumptions, pre-conditions, failure modes and remedies, alternatives, and sample-size guidance. The remaining gaps β€” e.g., pairing vcov choices with failure scenarios or interpreting the detail levels β€” are minor because the schema and output schema already carry the structured burden.

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 100%, so the baseline of 3 applies; every parameter already has a description in the input schema. The tool description adds no parameter-level meaning β€” it does not clarify fml construction beyond the schema's example, nor does it expand on the extended vce menu interactions, so it neither helps nor hurts.

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 opening sentence states a specific verb and resource: 'Estimate Poisson regression with high-dimensional fixed effects via pyfixest,' which names both the model class and the implementation. It does not explicitly differentiate itself from closely related siblings like feglm, ppmlhdfe, or poisson, though the pyfixest anchor helps an agent distinguish it from those.

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?

Pre-conditions are explicit (non-negative count/continuous outcome, categorical FE columns, absorbed groups exist) and failure modes carry concrete remediation, including when to abandon this estimator in favor of OLS on log(1+y). Alternatives are listed (sp.feols, sp.regress, sp.panel), but without decision criteria for choosing among them, and the 'sp.' prefix does not match the sibling names as they appear in the environment.

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

ffl_decomposeA
Read-only

Firpo-Fortin-Lemieux two-step detailed distributional decomposition. Validation: certified parity evidence. Assumptions: Firpo-Fortin-Lemieux RIF regression: small perturbations to the covariate distribution induce small changes in the distributional statistic; Linear approximation of the recentered influence function is locally valid. Pre-conditions: Outcome is continuous (e.g. log earnings) with adequate distributional support; Covariates explain a non-trivial share of outcome variation across groups. Failure modes: RIF instability at extreme quantiles -> Avoid quantiles below ~0.05 or above ~0.95; widen the kernel bandwidth. Alternatives: sp.dfl_decompose, sp.oaxaca, sp.rif_decomposition. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
tauNoQuantile level or target treatment-effect index.
seedNoRandom seed for reproducible stochastic steps.
statNo'log_var', 'theil_t', 'theil_l', 'atkinson'}quantile
trimNotrim parameter (float).
alphaNoSignificance level for confidence intervals and tests.
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
weightsNoObservation weights.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
inferenceNoinference parameter (str).analytical
referenceNo0: B reweighted to look like A's X (composition = effect of A's X on B's outcomes relative to observed B)
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
quantile_conventionNoQuantile RIF convention (``stat='quantile'`` / ``'iqr'``). ``'rifreg'`` reproduces ``ddecompose`` / ``rifreg``.statspai

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark this as read-only and closed-world, so the description's job is to add non-obvious behavior. It does: RIF regression assumptions, linear approximation validity, quantile instability at extremes, and certified parity evidence. This goes well beyond the structured annotation fields.

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?

Dense but highly structured with labeled sections: Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum N. Every sentence carries substantive guidance and the most important identity information is front-loaded.

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 tool with 19 parameters, 100% schema coverage, and an output schema, the description fills the statistical and decision-making gaps: assumptions, failure modes, preconditions, alternatives, and sample-size guidance. Nothing essential for selecting and invoking the tool correctly 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 coverage is 100%, so the description need not restate parameters. It adds useful semantics for key inputs: tau should avoid quantiles below 0.05/above 0.95, y should be continuous, and x should meaningfully explain outcome variation. It doesn't discuss parameters like stat, inference, or detail, but those already have descriptive schema entries.

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 opens with 'Firpo-Fortin-Lemieux two-step detailed distributional decomposition', naming the estimator, method family, and scope clearly. It further distinguishes itself by listing specific alternatives (sp.dfl_decompose, sp.oaxaca, sp.rif_decomposition), so an agent can separate it from sibling decomposition tools.

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?

The description provides explicit alternative tools to choose instead. It also gives pre-conditions (continuous outcome, non-trivial covariate share), failure-mode guidance (avoid extreme quantiles, widen bandwidth), and a typical minimum N of 500. This is strong when-to-use and when-not-to-use guidance.

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

finegrayB
Read-only

Fine & Gray (1999) proportional subdistribution hazards model. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesCovariate column names.
tolNoNewton-Raphson controls.
alphaNoSignificance level for confidence intervals.
causeNoCause of interest (default ``1``).
eventYesEvent indicator: ``0`` = censored, ``1, 2, ...`` = causes.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
durationYesFollow-up-time column.
max_iterNoNewton-Raphson controls.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

readOnlyHint=true already establishes that this is a safe read-only computation, and the description does not contradict it. The description adds the model-family behavior (subdistribution hazard estimation), but the 'Validation:' sentence reads as a metadata tag and says nothing about output, caching, or other operational 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 first sentence is concise and front-loaded with the model identity, which is good. However, the second sentence 'Validation: validated evidence tier...' is vague and does not help with invocation, so not every sentence earns 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?

With a rich input schema, output schema, and readOnly annotation, the description is minimally sufficient to identify what the tool computes. It remains incomplete for selecting among the many survival siblings, and it omits the competing-risks guidance that would make the tool easy to invoke correctly.

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?

All 13 parameters have schema descriptions, so the baseline is 3; the tool description adds essentially no parameter-level detail. The schema's descriptions of event, cause, detail, and data_path already carry the semantics.

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 an exact statistical procedure, 'Fine & Gray (1999) proportional subdistribution hazards model', which identifies the estimator and separates it from ordinary Cox or parametric survival siblings. It lacks an explicit action verb like 'fits' or 'estimates', and the 'Validation:' tag is confusing, 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 sentence tells an agent when to choose Fine-Gray over alternatives such as cox, cuminc, or survreg, nor does it mention the competing-risks setting that motivates the method. The model name provides only an implicit clue, so an agent must infer usage from domain knowledge.

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

fisher_exactC
Read-only

Fisher's exact randomization test with enhanced features. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable name.
seedNoRandom seed for reproducibility.
alphaNoSignificance level for the Hodges-Lehmann confidence interval.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_permNoNumber of random permutations.
clusterNoVariable for cluster-level randomization (permute by cluster).
controlsNoControl variables for covariate-adjusted inference. When provided, the test statistic is computed on residuals from regressing Y on controls.
stratifyNoVariable for stratified permutation (permute within strata).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
statisticNoTest statistic to use: - ``'ate'``: Average treatment effect (difference in means). - ``'ks'``: Kolmogorov-Smirnov statistic. - ``'rank_sum'``: Wilcoxon rank-sum statistic.ate
treatmentYesBinary treatment variable name (0/1).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, covering the safety profile. The description adds only a cryptic 'Validation: validated evidence tier (...)' fragment that reads like an output-field spec rather than behavioral disclosure β€” it does not explain permutation behavior, defaults, or consequences of the call. No contradiction with annotations, but almost no added value.

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 description is short and front-loaded with the main clause. However, the second sentence is a malformed field-style fragment ('Validation: ...') rather than prose, and 'with enhanced features' is content-free filler, so the brevity is not backed by clean structure.

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?

Despite an output schema and 15 configurable parameters (permutation count, stratification, clustering, statistic choice, controls), the description tells an agent almost nothing beyond the test's name. An agent is left to infer statistical behavior from parameter names, and the confusing validation sentence does not compensate for the missing behavioral and selection context.

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 100%, so the schema fully documents all 15 parameters (defaults, enums, meanings) and earns the baseline. The description contributes nothing about parameters, but with full schema coverage the heavy lifting is already done.

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 statistical procedure β€” Fisher's exact randomization test β€” which is a concrete resource that distinguishes it from most of the ~300 sibling tools. However, it lacks an explicit verb ('performs', 'computes') and makes no direct contrast with near-siblings like ri_test, and 'with enhanced features' is vague filler.

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 is given on when to use this tool versus alternatives such as ri_test, reset_test, or the many other inference/test tools in the sibling list. The second sentence ('Validation: ...') concerns output structure, not usage context, so an agent has no basis for choosing this over similar tests.

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

focal_cateA
Read-only

Functional doubly-robust CATE estimator. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness given the covariates; Overlap / positivity across the covariate space; Nuisance functions are estimated consistently; cross-fitting controls overfitting bias. Pre-conditions: Covariates, a treatment indicator, and an outcome for each unit; Enough data to fit flexible nuisance models with sample-splitting / cross-fitting. Failure modes: CATE estimates are unstable or extrapolate beyond the covariate support -> Restrict to the overlap region, increase data, or use a doubly-robust learner (DR-/R-learner). Alternatives: sp.dml, sp.causal_forest, sp.tmle. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed for reproducible stochastic steps.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
test_dataNoDefaults to ``data``.
y_columnsYesOutcome columns; len = number of function points.
covariatesYesCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Since readOnlyHint=true is already declared, the description adds substantial behavioral context beyond the annotations: unconfoundedness, overlap, consistent nuisance estimation, cross-fitting, failure modes, and a typical minimum N of 500. This is far more than a bare 'estimates CATE' statement and helps the agent anticipate statistical conditions and failure risks.

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 first sentence establishes the estimator's purpose, and the remaining content is organized into scannable labeled sections: Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum N. Every section carries useful information, with no filler or repeated schema content.

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 complex statistical tool with 11 parameters and an output schema, the description covers the statistical assumptions, data requirements, failure modes, alternatives, and sample-size guidance. There is no need to describe return values because an output schema is provided, and annotations already convey the read-only safety profile.

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 100%, so the baseline is 3, but the description adds value by framing the required covariates/treatment/outcome in statistical terms and by giving a concrete 'Typical minimum N: 500' guideline. This goes beyond the schema's field-level descriptions and helps an agent judge whether the data are sufficient.

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 opens with 'Functional doubly-robust CATE estimator,' which precisely identifies the operation and target quantity without being a tautology. It also sets the tool apart by naming alternative estimators (sp.dml, sp.causal_forest, sp.tmle), so an agent can immediately place it among sibling tools.

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 lists explicit alternatives and gives clear preconditions ('Covariates, a treatment indicator, and an outcome for each unit; Enough data to fit flexible nuisance models'). It doesn't provide a detailed decision rule for choosing among the named alternatives, but the assumptions and failure-mode guidance strongly imply when this estimator is appropriate.

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

forest_diagnosticsA
Read-only

Return overlap and CATE-distribution diagnostics for a fitted forest. Assumptions: Unconfoundedness given the covariates; Overlap / positivity; Honesty: separate subsamples are used to choose splits and to estimate effects. Pre-conditions: Covariates, treatment, and outcome with enough data to grow an honest forest. Failure modes: Calibration test rejects -- the forest's heterogeneity is not well calibrated -> Increase the sample / number of trees, or fall back to a doubly-robust learner. Alternatives: sp.dml, sp.auto_cate, sp.tmle. Typical minimum N: 1000.

ParametersJSON Schema
NameRequiredDescriptionDefault
TNoT parameter (Optional[np.ndarray]).
XNoFeature matrix or covariate DataFrame.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
forestYesforest parameter ('CausalForest').
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
propensity_boundsNopropensity_bounds parameter (Tuple[float, float]).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already provide readOnlyHint=true and openWorldHint=false, establishing the safety profile. The description goes further by disclosing behavioral assumptions, failure modes, and corrective actions, which is valuable context beyond what annotations supply. No contradiction with annotations.

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 organized into labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) that front-load the core purpose and then add actionable context. 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.

Completeness5/5

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

For a tool with 10 parameters and an output schema, the description covers purpose, assumptions, preconditions, failure modes, remediation, alternatives, and minimum sample size. Return-value details are handled by the output schema, so nothing an agent needs to select and invoke this tool correctly is missing.

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 100%, so all 10 parameters are documented in the schema. The description does not add parameter-specific meaning beyond naming the fitted-forest resource, but the schema already carries the burden. Baseline 3 is appropriate.

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 opens with a specific verb and resource: 'Return overlap and CATE-distribution diagnostics for a fitted forest.' It clearly distinguishes itself from related causal-forest tools by naming alternatives (sp.dml, sp.auto_cate, sp.tmle), which helps an agent route correctly without inspecting 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?

The description provides explicit when-to-use guidance: assumptions (unconfoundedness, overlap, honesty), pre-conditions (enough data), failure modes with remediation steps (calibration test rejection -> increase sample/trees or fall back to doubly-robust learner), and a typical minimum N of 1000. It also names alternatives, so the agent knows which tools to consider instead.

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

fortified_pciA
Read-only

Fortified proximal causal inference (Yu, Shi & Tchetgen Tchetgen 2025). Adds a bridge-function stability constraint that gives robust ATT under mild misspecification of the outcome/treatment bridge. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: The proxies are valid negative controls (relevant to the confounder, excluded from the causal channel); A bridge function exists (completeness conditions hold). Pre-conditions: Treatment-inducing and outcome-inducing proxy variables (negative controls) for the unobserved confounder. Failure modes: Proxies are weak or invalid -- the bridge function is poorly identified -> Test proxy relevance, select stronger proxies, or fall back to sensitivity analysis. Alternatives: sp.select_pci_proxies, sp.dml. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
proxy_wYesOutcome-side proxies
proxy_zYesTreatment-side proxies
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the description does not need to repeat safety behavior. It adds contextual details about assumptions and failure modes that go beyond annotations, though it does not elaborate on side effects or return semantics (covered by output schema). This is adequate given the annotation coverage.

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 well-structured with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical N) and is front-loaded with the method name and core purpose. It is longer than a typical description but each sentence serves a distinct purpose, and the structure improves scannability.

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 complex causal inference method, the description covers the method, assumptions, pre-conditions, failure modes, alternatives, and typical sample size. An output schema exists, so return details are not required. This is complete for an agent to determine when and how to use the 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 100%, so each parameter is already documented. The description adds meaning by explaining the role of proxies as negative controls in the pre-conditions, which clarifies the purpose of proxy_w and proxy_z beyond the schema's brief descriptions. It does not fully compensate for the schema's brevity on these parameters but adds value.

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 clearly identifies the method (fortified proximal causal inference), states it estimates ATT with a bridge-function stability constraint, and explicitly names alternatives (sp.select_pci_proxies, sp.dml), distinguishing it from sibling tools. The purpose is specific and actionable.

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 provides explicit pre-conditions (treatment-inducing and outcome-inducing proxy variables as negative controls), failure modes with recommended actions (test proxy relevance, select stronger proxies, or fall back to sensitivity analysis), and names alternatives. This gives an agent clear when-to-use and when-not-to-use guidance.

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

fracregC
Read-only

Fractional response model (Papke & Wooldridge 1996). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoRegressors.
yNoOutcome variable in [0, 1].
tolNoNumerical convergence tolerance.
linkNoLink function: 'logit' or 'probit'.logit
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoAlways use robust SE (quasi-MLE).robust
clusterNoCluster variable for clustered SE.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so the description does not need to repeat safety behavior, but it also adds almost no operational context. 'Validation: certified parity evidence' is cryptic and does not explain convergence behavior, quasi-MLE robust errors, caching, or payload-detail behavior. This falls short of even a lowered bar for annotation-covered tools.

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 description is very short and front-loaded with the model name, which is structurally concise. However, the second clause about 'certified parity evidence' is vague and does not clearly earn its place, and the overall brevity leaves important selection and usage information absent.

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?

This is a 14-parameter tool with no required fields, multiple data input modes, and many closely related sibling tools, yet the description provides only a model label. An agent would have to rely entirely on the schema and output schema to understand data requirements, alternatives, and invocation patterns, which is inadequate for the tool's complexity.

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 100%, so every parameter is already documented with types, defaults, and descriptions. The tool description itself adds no parameter-level meaning, which matches the baseline expectation when the schema carries the full burden.

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 model type, 'Fractional response model', with a canonical citation, so an agent can infer the tool estimates a fractional response model. However, there is no explicit verb like 'estimate' or 'fit', and nothing distinguishes fracreg from sibling models such as betareg, logit, or probit for bounded outcomes. The appended 'Validation: certified parity evidence' is not a functional description of the operation.

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 provides no guidance on when to use fracreg versus alternatives like betareg or logit, and no conditions or exclusions are stated. Usage context is only implied by the model name and the outcome range documented in the y parameter schema, not by the description itself.

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

from_rA
Read-only

Translate a single R / fixest / felm / did expression to a verified StatsPAI tool-call payload. Returns the same shape as from_stata. Supported callables: feols / felm / lm / att_gt / did. Pass ONE expression -- no assignment, no piping.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
expressionYesOne R expression, e.g. 'feols(y ~ x | id^year, data=df, cluster="id")'.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds useful behavioral detail: it returns a payload rather than executing, produces the same shape as from_stata, and enforces a single-expression/no-assignment/no-piping rule. No contradictions with annotations.

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 sentences, all dense with information: purpose, output-shape reference, supported callables, and hard constraints. There is no filler or redundant restatement of the tool name.

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 all seven parameters described in the schema, the description is largely complete. It could explicitly direct Stata-style expressions to from_stata, but the tool name, the 'R expression' framing, and the from_stata reference make that inferable.

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 100%, so the schema already documents all parameters. The description adds value by enumerating supported callables ('feols / felm / lm / att_gt / did') and by constraining the expression parameter to a single expression with no assignment or piping, which goes beyond the schema example.

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 ('Translate'), a clear resource ('a single R / fixest / felm / did expression'), and the output ('a verified StatsPAI tool-call payload'). It also names the supported callables and explicitly references from_stata, which distinguishes it from its most likely sibling.

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 gives clear context: it is for R/fixest/felm/did expressions, and it imposes explicit constraints ('Pass ONE expression -- no assignment, no piping'). It stops short of explicitly telling the agent when not to use it or naming from_stata as the alternative for Stata expressions, but the context is strong enough to route correctly.

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

from_stataA
Read-only

Translate a single Stata command to a verified StatsPAI tool-call payload. Returns python_code (string for chat replies) AND arguments (ready-to-dispatch JSON-RPC for tools/call). Tier-1 commands: regress / xtreg / reghdfe / ivreg2 / csdid / did_imputation / synth / rdrobust; count-panel commands include nbreg / xtnbreg / ppmlhdfe. Unrecognised commands return close-match suggestions instead of guessing.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
commandYesOne Stata command, e.g. 'reghdfe y x, absorb(id year) cluster(id)'. Multi-command lines must be split by the caller.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Despite annotations already marking it read-only, the description adds useful behavioral details: it returns a verified payload, never guesses on unrecognised commands, and instead returns close-match suggestions. It also discloses the dual output format (python_code and arguments), which helps the agent understand what the tool actually produces. This goes beyond the minimal annotation signal without contradicting 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?

The description is compact and front-loaded: the first sentence states purpose and output, the second scopes supported commands, and the third explains fallback behavior. Every sentence earns its place, and there is no redundant restating of schema details or annotations.

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?

Given the rich input schema and existing output schema, the description is sufficiently complete for an agent to know what commands are supported, what the tool returns, and what happens for unrecognised input. It lacks an explicit contrast with sibling tools like from_r, but that gap is more about usage guidance than invocation completeness. Overall, the agent has enough context to call the tool correctly in most cases.

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 100%, so the input schema already documents all seven parameters thoroughly. The description adds modest context by listing supported command forms and noting that multi-command lines must be split, but the schema’s command example already conveys this. With full schema coverage, the description does not need to compensate heavily, so the baseline 3 applies.

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 first sentence states a specific verb and resource: translating a single Stata command into a verified StatsPAI tool-call payload, and even distinguishes the output format (python_code and arguments). The Stata focus clearly separates it from sibling tools like from_r and other estimation tools. The list of supported command families further sharpens the purpose.

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 gives implied usage context: it is for Stata commands, especially Tier-1 commands like regress, reghdfe, and rdrobust, and for count-panel commands like nbreg. However, it does not explicitly state when to use this tool instead of from_r or another translation/estimation sibling, nor does it offer exclusions such as 'use from_r for R code'. The supported-command list implies scope but does not fully spell out the alternatives.

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

front_doorA
Read-only

Pearl's front-door adjustment: identifies ATE with unmeasured confounding when a mediator fully transmits the effect of D on Y. Supports binary or continuous mediator; integrate_by controls Pearl (marginal) vs Fulcher et al. (conditional) aggregation. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Sequential exchangeability / no unmeasured confounding at each time point; Positivity: every treatment level is possible given the past; Correct specification of the treatment and/or outcome models. Pre-conditions: Sequentially measured covariates, (time-varying) treatment, and outcome; Models for the treatment process and the outcome (or weights). Failure modes: Stabilized weights have extreme values (positivity near-violation) -> Truncate weights, simplify the treatment model, or use a doubly-robust estimator (TMLE). Alternatives: sp.tmle, sp.g_computation, sp.ipw. Typical minimum N: 300.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome
treatYesBinary treatment (0/1)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
mediatorYesFully-transmitting mediator
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoPre-treatment covariates
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
integrate_byNoMC integration formulation (continuous M only)marginal
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
mediator_typeNoMediator modelauto

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true and openWorldHint=false. The description goes far beyond this: it lists assumptions (sequential exchangeability, positivity, correct specification), failure modes (stabilized weights with extreme values, and specific remedies like truncation, simplification, or TMLE), validation tiers (known-truth, reference, external-parity, Monte Carlo artifact), and a typical minimum N of 300. This rich behavioral context is not present in the annotations and adds real value for an agent deciding whether to trust results or handle failures.

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 dense but every sentence earns its place. It opens with the core purpose, then covers supported mediator types, validation, assumptions, pre-conditions, failure modes, alternatives, and sample size – all in a structured format with explicit labels (Assumptions:, Pre-conditions:, Failure modes:, Alternatives:). It is front-loaded with the most important information and avoids redundancy.

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 tool's complexity (12 parameters, output schema present), the description covers everything an agent needs to call it correctly: purpose, assumptions, pre-conditions, failure modes, alternatives, and typical sample size. The output schema handles return values, so the description need not repeat those. Nothing critical is missing for correct selection and invocation.

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 100%, so the baseline is 3. The description adds interpretation beyond the schema: it explains that integrate_by controls Pearl (marginal) vs Fulcher et al. (conditional) aggregation, and it explains mediator_type supports binary or continuous mediator. These clarify the semantics of the enum parameters. It does not detail every parameter, but the schema already covers them, so the description's added meaning is valuable and pushes the score above 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?

The description opens with a precise statement of what the tool does: 'Pearl's front-door adjustment: identifies ATE with unmeasured confounding when a mediator fully transmits the effect of D on Y.' It names the specific estimator (front-door adjustment), the causal estimand (ATE), and the condition (unmeasured confounding with a fully-transmitting mediator). It also distinguishes from sibling tools like frontdoor and mediation_decompose by naming the mechanism (Pearl vs Fulcher aggregation) and listing alternatives explicitly.

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?

The description gives explicit when-to-use guidance: it is appropriate when there is a mediator that fully transmits the effect of D on Y in the presence of unmeasured confounding. It lists pre-conditions (sequentially measured covariates, treatment, outcome; models for treatment and outcome) and explicitly names alternatives: 'Alternatives: sp.tmle, sp.g_computation, sp.ipw.' This directly routes the agent to the correct tool and away from siblings.

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

frontdoorC
Read-only

Front-door adjustment -- article-friendly alias for Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
XNoFeature matrix or covariate DataFrame.
dYesd parameter (str).
mYesm parameter (str).
yYesOutcome variable column name or outcome array.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

The readOnlyHint annotation already covers the safety profile, so the description's job is to add behavioral context beyond that. It does not describe side effects, output behavior, error cases, or operational constraints; the cryptic 'validated evidence tier' fragment adds little concrete behavioral information.

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

Conciseness2/5

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

The description is short, but brevity here is under-specification rather than effective conciseness. The sentence is front-loaded with the tool name and then trails into an opaque 'Validation' alias phrase that does not earn its place.

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?

Despite the output schema and fully described parameters, the description fails to orient the agent on the core purpose, invocation context, or relationship to sibling tools. For a 10-parameter causal inference tool, this is an inadequate orienting statement.

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 100%, so the schema already documents all parameters and the baseline is 3. The description adds no parameter-level meaning and does not clarify how d, m, and y relate to front-door adjustment.

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

Purpose2/5

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

The description names 'Front-door adjustment' but never states a concrete verb or outcome (e.g., estimate, compute, return). The phrase 'article-friendly alias for Validation: validated evidence tier' is confusing and does not explain what the tool actually does with the supplied d, m, y, and data_path. It also does nothing to distinguish this tool from the similarly named sibling front_door.

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 is provided about when to use this tool versus alternatives such as front_door or other causal inference tools. The 'alias' phrasing hints at naming but gives no actionable selection criteria or exclusions.

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

functional_form_testA
Read-only

Roth & Sant'Anna (2023) test of whether parallel trends can hold for EVERY strictly monotonic transformation of the outcome. Bins the outcome, recovers the counterfactual probability mass the design implies for the treated group in each bin via Callaway-Sant'Anna, and tests the moment inequalities that mass must satisfy to be a density. Rejection means levels and logs are answering different questions, so the functional form is doing identifying work. Validation: certified evidence with scoped limitations. Known limitations: a large p-value is only a failure to reject, not evidence FOR functional-form insensitivity: the test has little power with few units or coarse bins; standard errors and the critical value are asymptotic; a bootstrap variant is not implemented. Assumptions: Callaway-Sant'Anna identification for each binned indicator; No anticipation before g - anticipation. Pre-conditions: staggered or single-cohort panel with never-treated or not-yet-treated controls; outcome with enough support to bin. Failure modes: Every bin has a degenerate influence function -> The binning is finer than the data support. Lower n_bins or supply binpoints; Test rejects -> Parallel trends c...

ParametersJSON Schema
NameRequiredDescriptionDefault
gYesFirst-treatment period (0 = never treated)
iYesUnit identifier
tYest parameter (str).
xNoPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
max_eNoOnly bites under aggregation='dynamic': latest event time entering the aggregate
min_eNoOnly bites under aggregation='dynamic': earliest event time entering the aggregate
panelNopanel parameter (bool).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_binsNoEqual-width outcome bins; too coarse a grid buys a large p-value for nothing. 'auto' follows didFF: an outcome with fewer than 20 distinct untreated values is treated as discrete (one bin per value), otherwise it is cut into min(20, n_distinct) binsauto
n_simsNoDraws behind the least-favourable critical value
weightsNoSampling-weight column; unset weights every unit equally
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
balance_eNoOnly bites under aggregation='dynamic': keep cohorts observed for this many event times
binpointsNoExplicit bin edges, padded to cover the outcome range if they fall short; cannot be combined with n_bins
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
estimatorNoestimator parameter (str).dr
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
aggregationNoWhich aggte aggregation defines the implied densitygroup
anticipationNoanticipation parameter (int).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
control_groupNocontrol_group parameter (str).nevertreated
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
allow_unbalanced_panelNoallow_unbalanced_panel parameter (bool).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already set readOnlyHint=true, but the description goes far beyond that. It discloses known limitations (low power with few units, asymptotic SEs, no bootstrap variant), assumptions (Callaway-Sant'Anna identification, no anticipation), and failure modes (degenerate influence functions). This is exemplary behavioral disclosure beyond the structured fields, with no contradictions.

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 long but well-structured with clear labeled sections (Validation, Known limitations, Assumptions, Pre-conditions, Failure modes). It front-loads the core purpose and then systematically adds operational detail. While it could be trimmed slightly, every sentence earns its place by conveying critical interpretive guidance.

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 tool's complexity (26 parameters, output schema present), the description covers assumptions, pre-conditions, failure modes, limitations, and interpretation caveats. It is fully self-contained for an agent to decide when to call it and how to interpret results. The output schema handles return-value documentation, so nothing essential 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 coverage is 100%, so baseline is 3. The description adds meaningful context for key parameters: n_bins ('too coarse a grid buys a large p-value for nothing' plus the 'auto' rule), binpoints (explicit edges, padded), and detail (payload depth rationale). It does not explain every parameter, but it enhances understanding of the ones most likely to affect results, which lifts it above the 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?

The description states a specific verb ('test'), a precise resource (the functional form of the outcome), and the exact methodological question (whether parallel trends hold for every strictly monotonic transformation). It distinguishes itself from sibling tests by naming the Roth & Sant'Anna (2023) approach and the binned Callaway-Sant'Anna machinery. This is unambiguous and clearly differentiated.

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 provides explicit pre-conditions ('staggered or single-cohort panel with never-treated or not-yet-treated controls; outcome with enough support to bin') and warns against misinterpreting large p-values. It also describes failure modes and how to address them (lower n_bins or supply binpoints). While it does not name alternative tools for the 'when not to use' case, the context is strong enough for an agent to decide applicability. A small deduction for not explicitly comparing to sibling functional-form tests.

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

gap_closingC
Read-only

Counterfactual gap after equalising covariate distributions. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
trimNotrim parameter (float).
alphaNoSignificance level for confidence intervals and tests.
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoAIPW is doubly robust (recommended).aipw
n_bootNoNumber of bootstrap replications.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
inferenceNoinference parameter (str).analytical
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
target_distNo- 1: shift Group A's covariate distribution to match Group B's - 0: shift Group B's to match Group A's
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds a cryptic 'Validation: certified parity evidence' which hints at some validation output but does not explain what it means or what other behaviors to expect (e.g., output format, dependencies). It provides minimal additional context beyond 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.

Conciseness2/5

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

The description is extremely short (a single sentence), which is concise but at the cost of substance. For a tool with 16 parameters and a complex operation, this is under-specification rather than effective conciseness. There is no structure or front-loading of key information; it reads as a cryptic summary.

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?

Given the complexity (16 params, output schema exists), the description is incomplete. It does not explain what the 'counterfactual gap' means, how to interpret results, or what the tool is designed for. The output schema may cover return values, but the purpose and usage context are severely lacking. An agent would struggle to know when and how to call this tool correctly.

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 100%, so all 16 parameters have descriptions in the schema. Per the rubric, the baseline is 3 when the schema covers parameters. The tool description itself adds no parameter-level meaning, but the schema handles that. The description does not clarify how parameters like target_dist or method fit into the overall goal, but this is a minor gap given the schema's thoroughness.

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 states the tool computes a 'counterfactual gap after equalising covariate distributions', which gives a general sense of the operation, but it is vague and does not specify the exact estimator or context (e.g., causal inference, fairness). It is not a tautology, but it lacks precision and does not distinguish it from many sibling tools that also deal with disparities or counterfactuals.

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

Usage Guidelines1/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 alternatives. The description does not mention any conditions, prerequisites, or exclusions. An agent cannot determine when gap_closing is the right choice among the dozens of related tools without further information.

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

garchB
Read-only

Fit GARCH(p,q) by conditional Gaussian MLE. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoNumber of GARCH (lagged sigma2) terms.
qNoNumber of ARCH (lagged epsilon2) terms.
yYesReturn series (or log-return, etc.).
meanNoEstimate a constant mean mu; if False, mu = 0.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds only the estimation method (Gaussian MLE) and a meta-note about validation tiers, which is not behavioral. No contradiction with annotations, but little additional behavioral disclosure.

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 first sentence is crisp and front-loaded with the core purpose. The second sentence about validation tier is tangential and arguably not needed for tool selection, but the overall description remains short and scannable.

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 10 parameters and no explanation of when to use GARCH, prerequisites (e.g., stationary time series), or relationships to sibling volatility models, the description is incomplete for an agent to plan a call confidently. The output schema and annotations cover some gaps, but the usage context is missing.

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 100%, so all parameters are already documented in the schema. The description merely echoes p and q in the model notation and adds no semantic meaning beyond what the schema provides, matching the baseline for full schema coverage.

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 uses a specific verb ('Fit'), resource ('GARCH(p,q)'), and method ('conditional Gaussian MLE'), making the tool's purpose unmistakable. It clearly distinguishes garch from siblings like arima and var without needing to inspect their schemas.

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 GARCH versus alternative time-series tools (e.g., arima, var), no exclusions, and no prerequisites. The description only states what the tool does, not when an agent should choose it.

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

gardner_didA
Read-only

Gardner (2021) two-stage DID. Stage-1 fits two-way FEs on untreated observations; Stage-2 regresses the residualised outcome on treatment dummies (ATT or event study). Numerically close to Borusyak-Jaravel-Spiess imputation with unit-clustered SEs. Validation: certified parity evidence. Assumptions: Conditional parallel trends between treated and comparison groups absent treatment; No anticipation of treatment before its onset; Treatment effects may be heterogeneous across cohorts and time (no homogeneity required). Pre-conditions: Panel or repeated cross-section with a unit (or group) identifier and a time identifier; At least one never-treated or not-yet-treated comparison group; Pre-treatment periods to assess parallel trends. Failure modes: Pre-treatment event-study coefficients are jointly non-zero (pre-trend violation) -> Use honest DiD bounds to quantify robustness to trend violations, or condition on covariates; Two-way fixed-effects estimate is contaminated by 'forbidden' comparisons / negative weights -> Use a heterogeneity-robust estimator (Callaway-Sant'Anna, Borusyak et al., Gardner two-stage). Alternatives: sp.callaway_santanna, sp.did, sp.honest_did. Typical minimum...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column
timeYesTime column
alphaNoSignificance level for confidence intervals and tests.
groupYesUnit/panel-id column
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster variable for Stage-2 SEs (defaults to group)
horizonNoRelative-time leads/lags to report (default range(-5, 6))
controlsNoAdditional covariates
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
event_studyNoIf True, report coefficients by relative time k = t - first_treat
first_treatYesFirst-treatment-period column; 0/NaN/inf = never treated
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, and the description does not contradict that. Beyond the annotations, it discloses the internal procedure (residualization, two-stage estimation), the validation status ('certified parity evidence'), and important model assumptions that affect result interpretation. This adds meaningful context not available from annotations alone, though it does not discuss side effects like caching or resource usage.

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 description is well-structured into sections (Assumptions, Pre-conditions, Failure modes, Alternatives) and packs substantial information, but it is long and ends abruptly mid-sentence ('Typical minimum...'), which suggests incomplete drafting. While the density is justifiable for a complex estimator, the truncation hurts readability and compactness.

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 complex econometric tool with an output schema, the description covers method, use cases, assumptions, failure modes, and alternatives comprehensively. The only notable gap is the truncated final sentence and a lack of mention of parameter interactions (e.g., event_study vs ATT), but those are already defined in the input schema. Overall, an agent has enough context to call this tool correctly.

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 100%, so parameters are fully documented elsewhere. The description adds pre-condition context (e.g., panel structure, never-treated group) that indirectly informs parameter choice, but it does not directly elaborate on any specific parameter beyond the schema. This matches the baseline for high schema coverage with modest descriptive additions.

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 clearly identifies the estimator ('Gardner (2021) two-stage DID'), explains the two stages, and differentiates it from siblings by noting it is 'numerically close to Borusyak-Jaravel-Spiess imputation' and listing explicit alternatives. An agent can understand exactly what this tool computes and how it differs from related estimators.

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?

The description provides explicit pre-conditions, failure modes, and actionable alternatives. It tells the agent when to use this tool (e.g., for heterogeneous treatment effects) and when to switch (e.g., pre-trend violation -> honest_did; negative weights -> heterogeneity-robust estimators). It names specific sibling tools as alternatives, leaving no ambiguity about selection.

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

gate_testA
Read-only

Test for significant heterogeneity across GATE (Group ATE) groups. Assumptions: Unconfoundedness given the covariates; Overlap / positivity across the covariate space; Nuisance functions are estimated consistently; cross-fitting controls overfitting bias. Pre-conditions: Covariates, a treatment indicator, and an outcome for each unit; Enough data to fit flexible nuisance models with sample-splitting / cross-fitting. Failure modes: CATE estimates are unstable or extrapolate beyond the covariate support -> Restrict to the overlap region, increase data, or use a doubly-robust learner (DR-/R-learner). Alternatives: sp.dml, sp.causal_forest, sp.tmle. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
byYesColumn name to group by, or 'cate' for CATE quartiles.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from ``metalearner()``.
n_groupsNoNumber of groups.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, but the description substantially enriches the picture by stating the statistical assumptions (unconfoundedness, overlap, consistent nuisance estimation, cross-fitting), the pre-conditions, and the failure modes. It also gives practical guidance about typical minimum sample size (N=500). This goes far beyond what annotations provide and helps the agent understand the tool's operational constraints and behaviors.

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 moderately long but well-structured with labeled sections: assumptions, pre-conditions, failure modes, alternatives, typical minimum N. Each sentence contributes operational information. It could potentially be tightened (e.g., the assumptions list could be compressed), but it remains concise relative to the complexity of the tool.

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 tool's statistical complexity, the description covers all key contextual elements: purpose, assumptions, required inputs (in prose), failure modes, alternatives, and sample-size guidance. Since the output schema exists, the description does not need to explain return values. Nothing essential for an agent to invoke this tool correctly is missing.

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?

The input schema has 100% parameter description coverage, so each of the 10 parameters is already documented with meaningful detail (e.g., 'by' explains 'cate' option, 'detail' describes payload depths). The description itself adds no parameter-specific information beyond the schema. Per the rubric, the baseline is 3 when schema coverage is high, and the description does not need to compensate.

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 opens with a clear verb and resource: 'Test for significant heterogeneity across GATE (Group ATE) groups.' This specifies exactly what the tool does and differentiates it from the broad set of causal inference siblings by focusing on a test for heterogeneity in GATE groups. While it doesn't name a sibling in the purpose statement, the specificity of 'GATE groups' and the test-oriented intent make its role unambiguous.

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 lists alternatives: 'Alternatives: sp.dml, sp.causal_forest, sp.tmle.' It also provides pre-conditions (covariates, treatment, outcome, enough data) and failure modes that imply when to switch to alternatives (e.g., unstable CATE estimates β†’ use doubly-robust learner). However, it stops short of a precise 'use this when... use alternative when...' decision rule, leaving some inference to the agent.

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

g_computationA
Read-only

Parametric g-formula (standardization) estimator. ATE/ATT for binary D, or dose-response curve for continuous D. Consistent under correctly-specified outcome model; not doubly robust. Validation: certified parity evidence. Assumptions: Sequential exchangeability / no unmeasured confounding at each time point; Positivity: every treatment level is possible given the past; Correct specification of the treatment and/or outcome models. Pre-conditions: Sequentially measured covariates, (time-varying) treatment, and outcome; Models for the treatment process and the outcome (or weights). Failure modes: Stabilized weights have extreme values (positivity near-violation) -> Truncate weights, simplify the treatment model, or use a doubly-robust estimator (TMLE). Alternatives: sp.tmle, sp.g_computation, sp.ipw. Typical minimum N: 300.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome
treatYesTreatment variable
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoBootstrap replications for SE
estimandNoTarget estimandATE
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesBaseline covariates
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treat_valuesNoDose grid (required for dose_response)
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses statistical behavior: consistency under correctly specified outcome model, lack of double robustness, sequential exchangeability and positivity assumptions, preconditions, and a concrete failure mode with recommended remedies. No contradiction with 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?

The description is dense but well structured with labeled sections for assumptions, preconditions, failure modes, alternatives, and sample size. The front-loaded definition is clear. The phrase 'Validation: certified parity evidence' is slightly vague, but overall every major section earns its place.

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 complex estimator with a rich schema and output schema, the description covers identification assumptions, positivity, model specification, preconditions, failure modes, and alternatives. Nothing essential for correct invocation appears missing.

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 100%, so the baseline is 3. The description adds a little context by linking binary D to ATE/ATT and continuous D to dose-response, but it does not substantially enrich parameter understanding beyond what the schema already provides.

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 clearly identifies the tool as a parametric g-formula/standardization estimator and states the exact estimands it produces: ATE/ATT for binary treatment and dose-response curves for continuous treatment. It also distinguishes itself from doubly robust alternatives by explicitly stating it is not doubly robust.

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 gives rich usage context: assumptions, preconditions, failure modes, and named alternatives (sp.tmle, sp.ipw). However, it does not explicitly state a crisp 'use this when X, use TMLE when Y' decision rule; the guidance is largely implicit through the consistency statement and failure-mode recommendation.

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

gelbachC
Read-only

Gelbach (2016) decomposition of omitted variable bias. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable name.
vceNoHeteroskedasticity-robust or homoskedastic covariance, as ``b1x2 ..., robust`` and plain ``b1x2``. Standard errors were a two-term delta method that treated the auxiliary and long-regression estimates as independent; ``b1x2`` keeps their covariance. On ``cps_wage`` that moved the SEs by 0.03%, but the old formula has no guarantee of being that close. Point estimates are unchanged.robust
alphaNoSignificance level.
base_xYesVariables in the base (short) specification.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
added_xYesVariables added to obtain the full (long) specification.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
var_of_interestNoWhich base variable's coefficient change to decompose. Defaults to the first element of ``base_x``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

The annotations already indicate readOnlyHint=true and openWorldHint=false, so the agent knows the tool is read-only. The description adds no behavioral context beyond that, and the vague 'Validation: certified parity evidence' does not explain side effects, required data formats, or any runtime characteristics. No contradiction with annotations.

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 description is short and front-loaded with the method name, but the second sentence ('Validation: certified parity evidence') is cryptic and does not clearly earn its place. It is not wasteful, but it is also not genuinely useful, making the overall structure merely adequate.

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 12-parameter, 4-required-parameter tool with an output schema, the description is too sparse. It lacks any context about when to apply the decomposition, what inputs are expected in terms of model specification, or how to interpret the result. Although the schema and output schema carry some weight, an agent would be poorly equipped to decide when and how to call this tool without richer descriptive guidance.

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 100%, so the input schema fully documents all 12 parameters. The tool description adds no parameter-level information, which is acceptable given the schema's completeness. Baseline 3 applies.

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 method (Gelbach 2016) and its purpose (decomposition of omitted variable bias), which distinguishes it from other decomposition tools like oaxaca or kitagawa_decompose. However, it lacks an explicit verb (e.g., 'computes') and reads as a noun phrase, leaving the action implied 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?

No guidance is given about when to use this tool versus alternatives. The description does not mention prerequisites, model fit requirements, or scenarios where Gelbach decomposition is appropriate. The second sentence about 'certified parity evidence' provides no usage context.

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

general_bunchingA
Read-only

High-order bunching design with bias correction. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: The counterfactual density would be smooth through the threshold absent the policy; Excess mass at the threshold reflects the behavioural elasticity of interest; No other discontinuity coincides with the threshold. Pre-conditions: A behavioural choice variable (earnings, hours, ...) with a known kink or notch in the budget/choice set; A visible empirical density of the running variable around the threshold. Failure modes: Round-number heaping or a coincident policy contaminates the bunching mass -> Exclude heaping points, widen the excluded region, and test the counterfactual polynomial order. Alternatives: sp.rdrobust, sp.rkd. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
cutoffNocutoff parameter (float).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
runningYesRunning variable (e.g. earnings).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoBandwidth used for local smoothing or kernel weighting.
bin_widthNoDefaults to bandwidth / 25.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
polynomial_orderNoOrder of the counterfactual polynomial fit.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses validation tiers, explicit assumptions, failure modes (round-number heaping, coincident policy) and remediation steps (exclude heaping points, widen excluded region, test polynomial order). It also provides a typical minimum N of 500, which is actionable 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?

The description is dense but well-structured with clear labels (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). The first sentence carries the core purpose, and while the text is a wall of semicolon-separated clauses, no sentence 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-value documentation is not required. The description covers what the tool does, its assumptions, prerequisites, failure modes with remedies, alternatives, and sample-size guidance, making it essentially self-contained for correct invocation.

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 100%, so the baseline is 3. The description adds meaning by linking key parameters to the econometric setting: 'running' is a behavioural choice variable, 'cutoff' is the threshold of the kink/notch, and 'counterfactual polynomial order' appears in the failure-mode guidance. This is modest but real added value beyond the 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 sentence states a specific method ('High-order bunching design with bias correction') with a clear verb and object. The labels for Validation, Assumptions, Pre-conditions, Failure modes, and Alternatives distinguish it from generic bunching or RD tools, and it explicitly names alternatives (sp.rdrobust, sp.rkd).

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?

Pre-conditions define the required setting: a behavioural choice variable with a known kink/notch and a visible density around the threshold. The 'Alternatives' line names sp.rdrobust and sp.rkd, but does not give explicit decision rules for when to choose them instead, 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.

genmatchA
Read-only

Genetic Matching for ATT estimation. Validation: certified parity evidence. Cost: Genetic search: population_size x generations full matching + balance evaluations (default 40 x 20 = 800 matching passes), each of which builds a pairwise distance matrix. Budget it as hundreds of sp.match calls, not one. Assumptions: Unconfoundedness: treatment is as-good-as-random given the measured covariates; Overlap / common support: every unit has a non-degenerate probability of each treatment; The covariate set blocks all back-door paths. Pre-conditions: Pre-treatment covariates measured for treated and control units; A binary (or low-cardinality) treatment indicator; Sufficient covariate overlap between treatment arms. Failure modes: Poor overlap -- extreme propensity scores or few acceptable matches -> Trim or restrict to the common-support region and report the discarded units; Covariate imbalance remains after matching/weighting -> Re-specify the balancing model (CBPS, entropy balancing) and re-check standardized mean differences. Alternatives: sp.propensity_score, sp.cbps, sp.ebalance, sp.dml. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoNumber of matches per treated unit.
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
treatYesBinary treatment indicator.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
generationsNogenerations parameter (int).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
mutation_rateNomutation_rate parameter (float).
population_sizeNopopulation_size parameter (int).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Even though annotations declare readOnlyHint=true, the description adds substantial behavioral context: a quantified cost model (40x20=800 matching passes, each building a pairwise distance matrix), assumptions, failure modes, and validation/certification evidence. This far exceeds what annotations provide and helps the agent anticipate runtime and diagnose poor 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?

The description is organized into labeled sections (Validation, Cost, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), making it scannable and front-loaded with the core purpose. It is lengthy but dense with actionable information; however, 'Validation: certified parity evidence' is cryptic and could be clarified, and the three assumptions/back-door bullet could be more compact.

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 15-parameter causal matching tool with 4 required parametersholμ•„ 높은 complexity, the description covers the full usage context: when it is valid (assumptions), what must hold (pre-conditions), what to do when it fails (failure modes), where to go next (alternatives), and expected cost. The presence of an output schema means return values need not be described, so nothing materially missing.

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 100%, and all parameters like population_size, generations, and mutation_rate already have detailed descriptions. The tool description only references defaults already present in the schema (e.g., 'default 40 x 20') without adding new meaning per parameter, so the baseline of 3 is appropriate.

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 opens with 'Genetic Matching for ATT estimation', a specific verb+resource that names the method and estimand. It explicitly contrasts with 'hundreds of sp.match calls' and lists alternatives (sp.propensity_score, sp.cbps, sp.ebalance, sp.dml), so an agent can distinguish it from closely related matching and causal-inference siblings.

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?

Pre-conditions and assumptions (binary treatment, covariate overlap, unconfoundedness) clearly signal when genetic matching is appropriate. Alternates are namedΡ‚Π½Ρ‹Ρ…. However, it does not explicitly state 'use X instead when Y' for each alternative, though failure-mode remedies like 're-specify the balancing model (CBPS, entropy balancing)' imply trade-offs. The guidance is strong but not fully explicit.

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

geographic_rdA
Read-only

User-friendly alias for :func:sp.rdms (multi-score RD). Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
x1Yesx1 parameter (str).
x2Yesx2 parameter (str).
alphaNoSignificance level for confidence intervals and tests.
treatNoTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
cutoff1Nocutoff1 parameter (float).
cutoff2Nocutoff2 parameter (float).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoBandwidth used for local smoothing or kernel weighting.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

The description goes well beyond the read-only annotation by disclosing statistical assumptions, failure modes (density jump, bandwidth sensitivity), and remediation steps (rdplotdensity, bandwidth-sensitivity curve, MSE-optimal bandwidth). This gives the agent a realistic model of when results may be invalid and what to do about 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?

Although dense, every sentence earns its place: alias identity, assumptions, pre-conditions, failure modes, alternatives, and a typical minimum sample size are each compactly grouped. The most important fact (what this tool is an alias for) is front-loaded.

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 complex statistical tool with an output schema, the description supplies assumptions, validity checks, failure diagnostics, alternative tools, and a sample-size guideline. This is unusually complete and leaves an agent well-equipped to decide whether and how to call it.

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 100%, so the schema already documents all 15 parameters. The description does not add parameter-level semantics beyond the schema, but it does provide domain context about cutoffs, running variables, and fuzzy designs that indirectly helps interpret parameters. Baseline 3 is appropriate.

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 the exact function it aliases ('sp.rdms (multi-score RD)') and labels the operation as a user-friendly alias, so an agent immediately knows what resource and method family this belongs to. It also distinguishes itself from related RD tools by naming rdrobust, rdrandinf, and rdbwselect as alternatives.

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?

Assumptions and pre-conditions make the appropriate invocation context explicit: continuous running variable, known cutoff, sharp/fuzzy assignment, and enough observations. It names alternatives such as sp.rdrobust and sp.rdrandinf, but does not give explicit condition-based selection rules for when to choose each alternative over this tool.

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

german_reunificationC
Read-only

German reunification dataset (simulated).

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true, which tells the agent this is a safe read operation. The description adds no behavioral context beyond that: it doesn't disclose what data is returned, whether the result is cached (as_handle suggests so), or any side effects. Since it adds nothing beyond the annotation, it scores low.

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

Conciseness2/5

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

The description is a single sentence, but it is under-specified rather than concise. It provides almost no information about the tool's function. It does not earn its place because it doesn't convey the necessary context to an agent.

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?

Given the tool has an output schema and annotations, the description still fails to explain the core purpose. An agent cannot infer what the 'German reunification dataset' contains or how to invoke the tool correctly. The description is not complete enough for a tool with 6 parameters, even if they are all optional.

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 100% β€” every parameter (detail, as_handle, data_path, result_id, data_columns, data_sample_n) has a description in the schema. The description adds no parameter information, but with full coverage, the baseline of 3 applies. It neither helps nor harms.

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

Purpose2/5

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

The description is a noun phrase: 'German reunification dataset (simulated).' It states the subject but no verb or action. It does not say whether the tool loads, returns, or analyses the dataset, nor does it distinguish it from any sibling. This is vague and leaves the agent guessing what calling the tool actually does.

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

Usage Guidelines1/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 many sibling tools. No context, no alternatives, no exclusion criteria. An agent has no way to know if this is the right tool for a given task, especially given the large number of econometric tools present.

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

gesA
Read-only

Greedy Equivalence Search. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Causal Markov condition and faithfulness (PC/GES/FCI); Causal sufficiency for PC/GES (no latent confounders); FCI relaxes this; Acyclicity; LiNGAM additionally assumes a linear non-Gaussian model. Pre-conditions: Constraint-/score-based discovery needs i.i.d. observational data with enough samples for reliable conditional-independence tests; Invariance-based discovery (ICP) needs data labelled by environment / intervention. Failure modes: Unstable skeleton / many undirected edges -- faithfulness or sample size is the likely culprit -> Increase the sample, relax the CI-test threshold, or switch to FCI if latent confounders are plausible. Alternatives: sp.pc_algorithm, sp.fci, sp.ges, sp.lingam. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
max_iterNoMaximum total edge additions + removals.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior5/5

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

The annotations only declare readOnlyHint=true and openWorldHint=false. The description goes far beyond that by enumerating statistical assumptions (Causal Markov, faithfulness, causal sufficiency, acyclicity), pre-conditions, failure modes with likely causes and remedies, and a typical minimum sample size. This is precisely the kind of behavioral disclosure that helps an agent anticipate edge cases. No contradiction with annotations.

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 description is a single dense paragraph covering validation, assumptions, pre-conditions, failure modes, alternatives, and minimum N. Every sentence carries useful information, but the lack of bullet points or section breaks makes it harder to scan quickly. It is not excessive in length, but structure could be improved.

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 complex causal discovery tool, the description covers validation tier, assumptions, data requirements, failure modes with remedies, and alternative tools. The output schema exists so return values need not be explained. It lacks an example or a more explicit statement of what a typical result looks like, but the provided context is quite complete for an agent to decide whether to call this tool and how to react to common failure modes.

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 100%, so every parameter already has a detailed description in the schema. The tool description does not add parameter-specific semantics beyond the schema; it only mentions sample size requirements in a general way and does not discuss data_path, max_iter, detail, etc. Baseline 3 is appropriate.

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 opens with 'Greedy Equivalence Search', which essentially restates the tool name, and then dives into assumptions and failure modes without ever explicitly stating that this tool performs score-based causal discovery on observational data. An agent familiar with GES may infer the purpose, but there is no direct 'perform GES to estimate a causal DAG' statement, and the differentiation from siblings like pc_algorithm or fci rests on the algorithm name rather than an explicit comparison.

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 provides clear pre-conditions (i.i.d. observational data with enough samples for CI tests; labelled data for invariance-based methods), a typical minimum N, and a concrete conditional alternative: switch to FCI if latent confounders are plausible. It lists alternate tools, but does not explicitly say when to choose GES over PC or LiNGAM. Overall it gives solid context and at least one explicit exclusion, so not quite a full 5.

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

g_estimationA
Read-only

G-estimation for a multi-stage dynamic treatment regime. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Sequential exchangeability / no unmeasured confounding at each time point; Positivity: every treatment level is possible given the past; Correct specification of the treatment and/or outcome models. Pre-conditions: Sequentially measured covariates, (time-varying) treatment, and outcome; Models for the treatment process and the outcome (or weights). Failure modes: Stabilized weights have extreme values (positivity near-violation) -> Truncate weights, simplify the treatment model, or use a doubly-robust estimator (TMLE). Alternatives: sp.tmle, sp.g_computation, sp.ipw. Typical minimum N: 300.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesFinal outcome variable.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentsYesTreatment variables at each stage, in temporal order. E.g., ['A1', 'A2'] for a two-stage DTR.
n_bootstrapNoNumber of bootstrap replications.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
covariates_by_stageYesCovariates (tailoring variables) available at each stage. covariates_by_stage[k] are the variables available when deciding treatment k.
propensity_covariatesNoCovariates for propensity model at each stage. If None, uses covariates_by_stage.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true (read-only) and openWorldHint=false, but the description adds no behavioral context beyond that. It mentions failure modes (extreme stabilized weights) and validation tiers, but for a causal inference tool, the user would need to know more about what the tool actually returns, stability of results, or any side effects. The safety profile is covered by annotations, so the description gets a credit for that, but it doesn't explain what the tool doesn't do or its limitations beyond the assumptions listed.

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 moderately sized but front-loads the core purpose, then clearly structures it into Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum N. It's organized and each section earns its place, though the 'Typical minimum N' is a bit of a tangent but useful for planning. No wasted words.

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?

Given the complexity (multi-stage DTR with 13 parameters), the output schema is present (so return values are likely described there), and the description covers assumptions, pre-conditions, failure modes, alternatives, and sample size. It's quite complete for the agent to decide whether to use the tool and anticipate issues. It doesn't document exact return values, but the output schema likely does that.

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 100%, meaning every parameter has a description in the schema. The description adds no additional parameter semantics beyond what's in the schema. For example, 'covariates_by_stage' is described in the schema as 'Covariates (tailoring variables) available at each stage,' and the description doesn't clarify further. Baseline of 3 is appropriate since the schema handles it.

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 starts with a clear statement: 'G-estimation for a multi-stage dynamic treatment regime.' This identifies the verb (estimating via G-estimation), the resource (multi-stage dynamic treatment regime), and the method. However, it doesn't explicitly distinguish itself from sibling tools like 'g_computation' or 'ipw' beyond listing them as alternatives in the failure-modes section, which only covers when those should be used instead in specific scenarios.

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 provides a 'Pre-conditions' section that clearly states what data and models are needed, which is implicit guidance on when the tool is applicable. It also mentions specific failure modes and suggests alternatives like TMLE when positivity is near-violated, but it doesn't explicitly say 'use this tool when you have ... and use g_computation when ...' The pre-conditions serve as a strong gatekeeper for usage.

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

ggdidC
Read-only

Plot an aggte() result, mirroring R :func:did::ggdid.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesOutput of :func:`aggte`.
figsizeNofigsize parameter (Tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
band_colorNoColours for the pointwise estimate and the uniform band.#F18F01
point_colorNoColours for the pointwise estimate and the uniform band.#2E86AB
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
show_uniformNoDraw uniform band (shaded region).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
show_pointwiseNoDraw pointwise CI lines.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true, and the description adds little beyond that: it mentions 'mirroring R did::ggdid' but does not disclose what the plot displays, whether it requires a fitted result or can compute from data, or how chaining with result_id/as_handle behaves. There is no contradiction with annotations, but the description is mostly silent on 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?

The description is a single 11-word sentence, front-loaded with the action and target. It is concise and free of filler, but its brevity comes at the cost of omitting important contextual information that would have made the tool more usable.

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?

Given the tool has 14 parameters, including data_path, result_id, as_handle, and multiple plotting options, a one-line description is insufficient. The description does not explain how result relates to data_path/result_id, what the plot shows, or when the various toggles are relevant. The output schema exists, but the parameter interaction is too underspecified for reliable 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 100%, so the baseline is 3 despite the main description adding nothing about parameters. However, several schema descriptions are placeholder-level ('ax parameter.', 'title parameter (Optional[str]).'), so the description does not meaningfully compensate for those weak parameter 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 states a specific verb and resource: 'Plot an aggte() result'. This distinguishes it from non-plotting siblings and from plotting tools that target other object types, but it does not describe what the plot shows or how it differs from other plotting tools like did_plot or event_study_plot.

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 provides no guidance on when to use this tool versus alternatives. It only implies usage when an aggte() result exists, with no mention of exclusions, prerequisites, or when another plotting tool would be a better fit.

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

glmC
Read-only

Fit a Generalized Linear Model. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoNames of independent variables (alternative to formula).
yNoName of the dependent variable (alternative to formula).
tolNoConvergence tolerance on the relative change in deviance.
linkNoLink function. If ``None`` the canonical link for the chosen family is used. Options: ``"identity"``, ``"log"``, ``"logit"``, ``"probit"``, ``"inverse"``, ``"cloglog"``, ``"power"``, ``"sqrt"``.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
familyNoDistribution family. One of ``"gaussian"``, ``"binomial"``, ``"poisson"``, ``"gamma"``, ``"inverse_gaussian"``, ``"negative_binomial"``.gaussian
offsetNoVariable name for offset.
robustNoStandard-error type (``"nonrobust"``, ``"hc0"``-``"hc3"``, ``"hac"``).nonrobust
clusterNoVariable name for clustered standard errors.
formulaNoModel formula (e.g. ``"y ~ x1 + x2"``).
maxiterNoMaximum number of IRLS iterations.
weightsNoVariable name for observation weights.
exposureNoVariable name for exposure (``log(exposure)`` is added as offset).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the description need not repeat that. But the description adds no behavioral context beyond a vague 'Validation' phrase, and it fails to mention important side effects like server-side caching via as_handle, or what 'certified parity evidence' actually means.

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 core sentence is concise and front-loaded. However, the second sentence 'Validation: certified parity evidence' is cryptic and does not earn its place; it likely confuses rather than helps an agent.

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 19 parameters, a rich output schema, and dozens of closely related sibling tools, this sparse description is insufficient. An agent cannot determine when to choose this tool, how it relates to alternatives, or what a typical call workflow looks like.

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 100%, so the schema fully documents all 19 parameters. The description itself adds no parameter-level meaning beyond the model name, so the baseline score of 3 is appropriate.

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: 'Fit a Generalized Linear Model.' This clearly identifies the operation. However, it does not differentiate from close siblings like feglm, logit, probit, or regress, so an agent cannot distinguish which estimator to pick without inspecting schemas.

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 many alternative regression/GLM tools in the sibling list, and no mention of prerequisites, exclusions, or fallback conditions. The 'Validation: certified parity evidence' phrase does not provide usage context.

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

gmmB
Read-only

General GMM estimator for arbitrary moment conditions. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
WNoWeighting matrix ``(q, q)`` for the first step. Defaults to the identity. Supplying one and asking for ``se='unadjusted'`` warns unless it happens to be efficient.
seNo``'robust'`` returns the sandwich, valid for any ``W``. ``'unadjusted'`` returns the efficient-GMM variance ``(D'WD)^{-1}/n``, which describes the estimator *only* at the efficient weight; otherwise it warns.robust
tolNoNumerical convergence tolerance.
vcovNoEstimator for the moment covariance ``S``.mds
alphaNoSignificance level for confidence intervals and tests.
centerNoCentre the moments before forming ``S``. ``False`` matches Stata, ``True`` matches R's ``gmm``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimator or algorithm variant to use.twostep
theta0YesStarting values. Also the expansion point for the closed form when the moments are affine.
clusterNoGroup labels, one per moment row. Required when ``vcov='cluster'``.
maxiterNomaxiter parameter (int).
jacobianNo``D(theta, data) -> ndarray`` of shape ``(q, k)``, the derivative of the *average* moment. Supplying it removes finite-difference error from the standard errors and from the affine test.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
moment_fnYes``g(theta, data) -> ndarray`` of shape ``(n, q)``: the moment contribution of each observation.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
param_namesNoparam_names parameter (Optional[List[str]]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
hac_bandwidthNoBartlett bandwidth for ``vcov='hac'``; the kernel vanishes at ``lag == hac_bandwidth``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, so the safety profile is covered and the description does not need to restate it. The description adds one behavioral claim β€” that results carry a validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact) β€” but it is cryptic and unexplained. It does not disclose iteration behavior, warnings for inefficient W, or result_ID caching, though annotations lower the burden. No contradiction with annotations.

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 first sentence is front-loaded and efficient. The second sentence ('Validation: validated evidence tier ...') is a confusing fragment that does not clearly earn its place, and for a 20-parameter general estimator the overall brevity borders on under-specification rather than disciplined conciseness.

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 general-purpose estimator with 20 parameters spanning advanced concepts (W, se, vcov, method variants, jacobian, clustering), the two-sentence description is thin. The output schema and 100% parameter schema coverage handle return values and parameter meaning, but the description provides no orientation to the workflow (supply moment_fn + theta0 + data, choose method/vcov) or to the trade-offs among onestep/twostep/iterative/cue.

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 100% and each of the 20 parameters has a detailed, semantically rich description, so the baseline is 3. The tool description itself adds no parameter-level meaning beyond what the schema already provides.

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 first sentence states a specific verb and resource: a general GMM estimator for arbitrary moment conditions, which differentiates it from the many canned estimators in the sibling list (poisson, logit, feglm, ivreg, etc.). However, no sibling is named explicitly, and the second sentence about validation tiers is a cryptic fragment that detracts from, rather than adds to, purpose clarity.

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?

'Arbitrary moment conditions' implies when to use the tool β€” when the user's identifying assumptions are expressed as custom moment functions rather than a built-in estimator β€” but there are no explicit when/when-not statements, no named alternatives, and no prerequisites beyond what the schema states. Usage guidance is present only by implication.

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

granger_causalityC
Read-only

Granger causality test. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
lagsNoNumber of lags (if fitting new VAR).
causedNoVariable being tested for causation.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
causingNoVariable hypothesized to cause.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
var_resultNoPre-estimated VAR model.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the description need not restate that. However, the description adds little beyond the name; the 'Validation: validated evidence tier...' sentence is cryptic and does not clarify behavior, return format, or side effects.

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 description is short, but the second sentence about 'Validation' is unclear and does not earn its place. The structure is not ideal; it would be better to explain the test or mention output.

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 10 parameters and an output schema present, the description is far too minimal. It does not explain the test's assumptions, when to supply lags vs result_id, or how to interpret results, leaving agents without essential context.

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 100%, so the schema already documents all parameters. The tool description adds no additional meaning or context for any parameter, keeping the score at baseline.

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 clearly states the tool performs a 'Granger causality test' with a specific verb and resource. It is distinct from many sibling tests like engle_granger or johansen, though it does not explicitly differentiate 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?

No guidance is provided on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or conditions that would route an agent to a sibling tool.

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

group_time_plotA
Read-only

Plot group-time ATT estimates from Callaway-Sant'Anna.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
colorNoDefault color for dot plot.#2C3E50
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from ``callaway_santanna()`` or ``did(method='cs')``. Must have ``detail`` DataFrame with 'group', 'time', 'att' columns.
figsizeNofigsize parameter (Tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
plot_typeNo'dot' or 'heatmap'.dot
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
sig_colorNoColor for significant estimates.#E74C3C
alpha_levelNoSignificance threshold.
insig_colorNoColor for insignificant estimates.#BDC3C7
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, and the description's 'Plot' action is consistent with a non-destructive visualization operation. The description adds little behavioral context beyond thatβ€”no mention of return format, display behavior, or server-side cachingβ€”but the annotations and output schema reduce the burden.

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 sentence with no filler, front-loading the verb and object. It is appropriately brief for a purpose-only description and every word earns 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?

The schema and output schema cover inputs and outputs, and annotations cover safety, but the description alone leaves an agent to infer when to choose this over several similar plotting siblings. For a 15-parameter tool with many alternatives, a bit more orientation (e.g., plot_type or post-CS context) would improve completeness.

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 100%, so the schema already documents all 15 parameters. The description adds no parameter-level meaning beyond connecting the tool to Callaway-Sant'Anna results, which the result parameter description already states.

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 ('Plot') and resource ('group-time ATT estimates') tied to Callaway-Sant'Anna, so the core purpose is clear. However, it does not explicitly differentiate this tool from sibling plotting tools like did_plot, ggdid, or cohort_event_study_plot.

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 'from Callaway-Sant'Anna' implies the tool should be used with results from callaway_santanna() or did(method='cs'), and the required 'result' parameter reinforces that. But the description never states when to prefer this over alternative plotting tools or provides exclusions.

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

gsynthA
Read-only

Generalized Synthetic Control via interactive fixed effects. Validation: certified parity evidence. Do NOT use when: there is only one treated unit and a short pre-period -- the interactive fixed-effects factors are not identified; use sp.synth; fewer pre-treatment periods than the number of factors being fit -- factor estimation is degenerate. Cost: Cross-validating n_factors refits the factor model cv_folds x max_factors times, and placebo/bootstrap inference refits again per replication -- runtime is multiplicative in those three knobs. Pin n_factors to skip the CV sweep. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add don...

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed.
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
backendNo``'native'`` uses StatsPAI's Python interactive fixed-effects implementation. ``'gsynth'``/``'r'`` delegates to the R ``gsynth`` package through ``Rscript`` using the Track-A reference specification ``force='two-way'``, ``CV=TRUE``, ``r=c(0, max_factors)``, and ``se=FALSE``. The R backend is intended for exact reference-package parity; the native path remains the dependency-light default.native
outcomeYesOutcome variable name.
placeboNoRun placebo inference.
cv_foldsNoCross-validation folds for factor selection.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
n_factorsNoNumber of latent factors. If None, selected by cross-validation.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoAdditional time-varying covariates.
max_factorsNoMaximum factors to try during CV.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period (inclusive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark the tool read-only, and the description adds substantial behavioral context: cross-validation and placebo runtime costs, factor identification conditions, assumptions like SUTVA and no anticipation, and failure modes such as large pre-treatment RMSPE. This goes well beyond what annotations provide.

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 divided into labeled sections β€” Validation, Do NOT use, Cost, Assumptions, Pre-conditions, Failure modes β€” with the core method and exclusions front-loaded. There is no filler, and the length is justified by the tool's complexity.

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 complex estimator, this is unusually complete: it covers purpose, exclusion conditions, cost, assumptions, pre-conditions, and failure modes, and an output schema exists so return structure need not be restated. It falls slightly short because the final failure-mode bullet is truncated mid-sentence ('Add don...') and the 'certified parity evidence' phrase is unexplained.

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 input schema provides 100% parameter coverage, so the baseline is 3. The description adds value by explaining how n_factors, cv_folds, and max_factors interact multiplicatively and advising to pin n_factors to skip the CV sweep, which helps agents choose among those knobs.

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 that the tool performs Generalized Synthetic Control via interactive fixed effects, which identifies the method and differentiates it from plain synthetic control. However, it lacks an explicit action verb such as 'Estimates' or 'Runs', so the purpose is clear but not maximally crisp.

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 'Do NOT use when' conditions with the underlying identification reasoning and names 'sp.synth' as the alternative. It also adds pre-conditions and assumptions that define the appropriate data setting, giving an agent strong routing guidance.

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

hal_tmleA
Read-only

TMLE with Highly Adaptive Lasso (HAL) nuisance learners (Qian & van der Laan 2025). The stable 'delta' variant plugs HAL into standard TMLE. The reserved 'projection' variant raises NotImplementedError until the Riesz-projection targeting step has reference parity. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Known limitations: variant='projection' raises NotImplementedError -- the Riesz-projection targeting step from Li-Qiu-Wang-vdL (2025) Section 3.2 is not yet ported (the v1.11.x code path was a no-op on the point estimate; see CHANGELOG). The implementation roadmap and parity-test gates are in docs/rfc/hal_tmle_projection.md. Assumptions: Unconfoundedness (sequential exchangeability for longitudinal/LTMLE); Positivity / overlap of treatment given history; At least one nuisance (outcome or treatment) is estimated consistently; the targeting step gives double robustness. Pre-conditions: Covariates, treatment, and outcome (for survival/longitudinal variants: time-to-event and time-varying covariates); Enough data to fit a Super Learner / HAL nuisance library. Failure modes: Near-positivity violations create extreme clever...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
treatYesBinary treatment
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_foldsNoNumber of cross-fitting or cross-validation folds.
variantNoHAL-TMLE variantdelta
estimandNoEstimandATE
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
C_propensityNoInverse L1 penalty for HAL propensity classifier
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
lambda_outcomeNoOutcome L1 penalty; None -> 5-fold CV
max_anchors_per_colNoColumn name for max anchors per.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true and openWorldHint=false, but the description goes well beyond them by detailing known limitations, failure modes, the no-op status of the projection variant at v1.11.x, and the parity-test gates. The only minor gap is the truncated failure-mode sentence, which cuts off before completion.

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 dense and structured with labeled sections (Validation, Known limitations, Assumptions, Pre-conditions, Failure modes), making it scannable. It earns its length because it conveys serious limitations and assumptions. It loses one point because the final sentence is truncated mid-thought, and some redundancy exists around the projection variant.

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?

Given the tool's complexity β€” 17 parameters, two variants, one unusable variant, exposure to assumptions and failure modes β€” the description covers the essential context well and even points to a design doc. It stops short of a full account of expected outputs, but the output schema exists and the description explicitly names failure modes. The truncation of the failure-modes sentence prevents a 5.

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 100%, so the schema already documents all 17 parameters. The description adds very little parameter-level meaning beyond what the schema provides, though it does contextualize the 'projection' variant's relationship to the implementation roadmap. Baseline 3 is appropriate.

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 opens with 'TMLE with Highly Adaptive Lasso (HAL) nuisance learners', naming a specific statistical method, and names two variants ('delta' and 'projection') with their behaviors. It also cites Qian & van der Laan 2025, distinguishing this from siblings like tmle, ltmle, and super_learner.

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 does not explicitly name sibling tools, but it gives strong contextual guidance: it warns that variant='projection' raises NotImplementedError and directs users to docs/rfc/hal_tmle_projection.md, and it lays out assumptions/pre-conditions. It lacks explicit 'use X instead of Y' statements, but for a causal-inference estimator with an obvious family, the implied usage is clear.

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

harvest_didA
Read-only

Harvest every valid 2x2 DID comparison from a staggered panel and aggregate them via precision-weighted / simple / cohort-weighted averages. Agnostic to cohort structure; useful for robustness comparisons against CS / SA / BJS. Assumptions: Parallel trends hold for every valid 2x2 sub-comparison being harvested and aggregated; No anticipation before each cohort's first treated period (reference horizon -1 is clean); Independence across units within each cohort (unit-level cluster-robust SEs); cross-horizon covariance ignored. Pre-conditions: Long-format panel with unit, time, outcome columns; Either a binary treat indicator or a precomputed cohort (first-treatment) column with a never_value marker; Multiple cohorts and overlapping periods so valid 2x2 comparisons exist across the requested horizons. Failure modes: No clean (never-treated or not-yet-treated) controls so no valid 2x2 cells can be harvested -> Add never-treated units or restrict horizons to periods with available clean controls; Precision weighting dominated by one tiny high-variance comparison distorts the aggregate -> Switch weighting to 'equal' or 'n_treated' to down-weight unstable cells. Alternatives: sp.callawa...

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for confidence intervals and tests.
treatNoTime-varying treat indicator (for dynamic harvesting)
cohortNoFirst-treat cohort column (for static harvesting)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable column name or outcome array.
horizonsNohorizons parameter (list).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
referenceNoPre-treatment reference horizon relative to each cohort
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
never_valueNonever_value parameter.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Even though annotations already declare readOnlyHint=true and openWorldHint=false, the description adds substantial behavioral context beyond them: explicit statistical assumptions (parallel trends per 2x2 cell, no anticipation at reference -1, independence across units, cross-horizon covariance ignored), pre-conditions, and two named failure modes with remediation paths. No contradiction with 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?

The description is long but well-structured with clear labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives) and the core purpose is front-loaded in the first sentence. Each section earns its place for a complex 15-parameter estimator, though it is denser than strictly necessary.

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 complex staggered-DID estimator with 15 parameters, an output schema, and annotations, this description covers purpose, assumptions, data requirements, failure modes, and alternatives β€” everything an agent needs to decide whether to call it and how to interpret its behavior. The output schema covers return values, so no description burden there. Only minor loss is the truncated 'Alternatives: sp.callawa...' sentence.

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 100%, so the baseline is 3, but the description adds meaning beyond the schema by clarifying the treat/cohort distinction (dynamic vs static harvesting), explaining never_value as a never-treated marker, and tying reference horizon -1 to the 'clean' anticipation assumption. Minor gap: it references weighting options ('equal', 'n_treated') and 'cohort-weighted' aggregation that do not appear as explicit schema parameters, which could leave an agent unable to act on that guidance.

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: 'Harvest every valid 2x2 DID comparison from a staggered panel and aggregate them via precision-weighted / simple / cohort-weighted averages.' It differentiates from the large DID sibling family by declaring itself agnostic to cohort structure and positioning it as a robustness check 'against CS / SA / BJS', so an agent can distinguish it from callaway_santanna, sun_abraham, staggered_sa, and did_2x2.

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 explicit use-case guidance ('useful for robustness comparisons against CS / SA / BJS'), names alternatives, and gives operational pre-conditions (long-format panel, treat-or-cohort columns, multiple cohorts with overlapping periods) plus failure modes with concrete remedies (add never-treated units, restrict horizons, switch weighting). This is actionable when-to-use and when-not-to-use guidance.

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

hausman_testB
Read-only

Hausman test for FE vs RE in panel data. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesIndependent variables (time-varying).
yYesDependent variable.
idYesUnit identifier.
timeYesTime period identifier.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

The readOnlyHint annotation already covers safety, and the description adds only a cryptic 'Validation: validated evidence tier ...' note rather than useful behavioral details like what the test consumes or produces. It does not contradict the annotations, but it provides limited behavioral transparency beyond them.

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 core purpose sentence is concise and front-loaded, but the second 'Validation: validated evidence tier ...' sentence is jargon-heavy and does not clearly help an agent select or invoke the tool. It reads like a metadata tag rather than guidance, so not every sentence earns 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?

Given the tool is a well-known statistical test with a complete schema and an output schema, the description covers the basic purpose. However, it omits any guidance on interpretation, prerequisites for the Hausman test, or relationship to sibling panel-data tools, and the validation sentence adds confusion rather than completeness.

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 100%, so the input schema fully documents all 11 parameters including required data_path, id, time, x, y, and optional alpha, detail, as_handle, etc. The description adds no parameter-specific meaning, so the baseline score of 3 is appropriate.

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 first sentence names the exact statistical procedure and target comparison ('Hausman test for FE vs RE in panel data'), which is clear and specific. It does not explicitly contrast with any sibling tool, but the FE-vs-RE scope distinguishes it from the many panel estimators and tests in the sibling list.

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 the use caseβ€”choosing between fixed effects and random effects in panel dataβ€”but never states when to prefer this tool over alternatives or when not to use it. There are no explicit exclusions or comparisons to sibling tools such as other panel diagnostics, so the guidance is only implicit.

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

hdfe_olsA
Read-only

reghdfe-style OLS with high-dimensional fixed effects. Validation: certified parity evidence. Do NOT use when: vce='conley' on more than ~20,000 rows -- dense O(n^2) memory (see cost); use sp.conley on the fitted result instead. Cost: Absorption is linear in n. vce='conley' is the exception: the within-transformed design goes through conley_vcov_matrix, which builds dense n x n distance and kernel matrices -- ~80 GB at n=100,000. vce='cr2'/'cr3' are per-cluster and cheap by comparison. Assumptions: Linear conditional mean after absorbing high-dimensional fixed effects (Frisch-Waugh-Lovell); Exogeneity of regressors conditional on the absorbed fixed-effect dimensions; Clustered SEs require enough clusters for asymptotics; multiway cluster needs each dimension well-populated. Pre-conditions: Continuous outcome; Fixed-effect factor variable(s) in the '| fe1 + fe2' part of the formula. Failure modes: Singleton groups absorb their own observations and bias clustered SEs -> Keep drop_singletons=True so singletons are removed before estimation; Alternating-projections absorber does not converge -> Raise maxiter / loosen tol, or reduce the number of FE dimensions; Too few clusters make wi...

ParametersJSON Schema
NameRequiredDescriptionDefault
tolNoNumerical convergence tolerance.
vceNoCanonical SE-menu keyword (matches ``sp.regress`` / ``sp.feols``): - ``"robust"`` / ``"hc1"`` -- heteroskedasticity-robust on the FE-absorbed design with reghdfe's small-sample factor ``N/(N-k-df_a)``; matches Stata ``reghdfe ..., vce(robust)``. - ``"hc0"`` -- no small-sample factor. - ``"CR2"`` / ``"CR3"`` / ``"jackknife"`` -- Pustejovsky-Tipton (2018) bias-reduced cluster-robust on the within design (requires ``cluster=``, one-way); matches R ``clubSandwich::vcovCR(plm)``. - ``"conley"`` -- Conley spatial HAC on the within design (requires ``conley_lat=/conley_lon=/conley_cutoff=``; Stata ``acreg`` planar distance convention). - ``"wild"`` -- shorthand for ``wild=True`` (requires ``cluster=``).
wildNoIf True (and ``cluster`` is given), return wild-cluster-bootstrap p-values / CIs alongside classical cluster SE. Applied variable- by-variable. Only supported with a single cluster column.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoOne-way or multi-way cluster column(s).
formulaYes``"y ~ x1 + x2 | fe1 + fe2 + fe3"``. The ``| fe...`` part is optional. Both sides accept bare names, ``c.x`` / ``i.f``, ``a:b``, ``a*b``, ``f1^f2`` and the varying-slope forms ``i.f#c.x`` / ``i.f##c.x`` / ``f[[x]]`` / ``f[x]`` -- see the module docstring for the full grammar.
maxiterNomaxiter parameter (int).
se_typeNoOverride automatic inference of SE type. Usually inferred from ``cluster`` / ``wild``.
weightsNoObservation weights. Column name or raw array.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
wild_seedNowild_seed parameter (Optional[int]).
conley_latNoCoordinate columns (decimal degrees) for ``vce="conley"``.
conley_lonNoCoordinate columns (decimal degrees) for ``vce="conley"``.
wild_n_bootNoBootstrap replications.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
conley_cutoffNoConley distance cutoff in km for ``vce="conley"``.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
drop_singletonsNodrop_singletons parameter (bool).
wild_weight_typeNowild_weight_type parameter (str).webb

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint/openWorldHint annotations by disclosing concrete behavioral traits: dense O(n^2) memory for vce='conley' (~80 GB at n=100,000), linear-cost absorption, the singleton-group bias mechanism and the drop_singletons mitigation, and a non-convergence failure mode for the alternating-projections absorber with maxiter/tol remedies. This is rich behavioral context an agent needs before calling.

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 long but well-structured with labeled sections (Validation, Cost, Assumptions, Pre-conditions, Failure modes) and front-loads the core purpose before caveats. The cost discussion is slightly verbose, but each sentence carries operational information, and the structure makes it easy to scan.

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 22-parameter econometric tool, the description covers the essential decision factors: memory scalability, statistical assumptions, input pre-conditions, known failure modes with mitigations, and routing guidance for large datasets. Since an output schema exists, the absence of return-value documentation is acceptable, and the mention of suggested_functions in the detail parameter shows awareness of downstream planning.

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 100%, so the baseline for this dimension is 3, but the description adds value beyond the schema by explaining the cost implications of vce='conley', characterizing cr2/cr3 as 'per-cluster and cheap,' and linking drop_singletons, maxiter, and tol to specific failure modes. It does not rename or restate parameter syntax, but the behavioral context for key parameters exceeds what the structured fields provide.

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 opening phrase "reghdfe-style OLS with high-dimensional fixed effects" names a specific verb and resource and clearly identifies it as an OLS estimator with HDFE, which separates it from the many poisson/GLM siblings like feglm, fepois, and ppmlhdfe. It does not explicitly name a sibling tool to differentiate itself, so it falls just short of a 5, but the identity is unmistakable.

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?

The description states explicit when-not-to-use guidance: 'Do NOT use when: vce=conley on more than ~20,000 rows' and names the alternative β€” 'use sp.conley on the fitted result instead.' It also gives conditions for safe use through pre-conditions (continuous outcome, FE factor variables) and warns when to avoid via failure modes.

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

heckmanA
Read-only

Heckman two-step selection model correcting for sample selection bias. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRegressors in the outcome equation
yYesOutcome variable (observed only when select=1)
zYesSelection-equation variables (include exclusion restrictions in z but not x)
alphaNoSignificance level for confidence intervals
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
selectYesBinary selection indicator (1 = observed, 0 = not)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the description carries a lower burden. However, it adds little behavioral context beyond the model type; the phrase 'Validation: certified parity evidence' is cryptic and unexplained, and it does not disclose anything about the fitting process, assumptions, or limitations. It does not contradict 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?

The description is brief (two sentences) and front-loads the primary purpose. However, the second sentence about validation is cryptic and could be omitted or better explained. Overall, it is appropriately sized but not perfectly efficient.

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 complex econometric model with 11 parameters and 5 required, the description is extremely sparse. It does not explain the two-step nature, the need for exclusion restrictions, typical use cases, or any caveats. While the schema covers parameter details and an output schema exists, the description provides no high-level context that would help an agent decide to use this tool or understand what the returned object represents. This is inadequate for a tool of this complexity.

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?

The input schema has 100% coverage for all 11 parameters, including detailed descriptions for each. The tool description adds no additional meaning to any parameter, so it stays at the baseline of 3. It does not hurt, but it also does not help.

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 ('Heckman two-step selection model') and a clear purpose ('correcting for sample selection bias'). This clearly differentiates it from most siblings, which focus on other econometric methods. The validation note is odd but doesn't detract from the primary purpose.

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 when to use the tool (when sample selection bias is a concern) but provides no explicit guidance on when not to use it or how it compares to related tools like tobit or truncreg. No alternatives are named, leaving the agent to infer from the purpose alone.

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

het_testC
Read-only

Breusch-Pagan test for heteroskedasticity. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already indicate read-only behavior, and the description adds no operational detail beyond the test label. The phrase 'Validation: certified parity evidence' reads as a quality claim rather than a disclosure of side effects, assumptions, or behavioral caveats, so the description does not carry its share of transparency.

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 first sentence is concise and front-loaded. The second sentence, 'Validation: certified parity evidence,' is vague and arguably not useful for tool selection or invocation, making the description compact but not fully purposeful.

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 covers return values, the input schema covers parameters, and annotations cover safety, so the description is minimally adequate. It lacks usage guidance and any statement of when Breusch-Pagan is appropriate, which matters given the large set of sibling tools.

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?

All 8 parameters have schema descriptions, so the baseline is 3. The description itself adds no parameter-level meaning beyond the schema, such as how x, y, and data_path relate to the Breusch-Pagan test.

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 identifies the tool as a Breusch-Pagan test and states its target phenomenon, heteroskedasticity, so an agent can infer the operation. It lacks an explicit verb and does not differentiate it from sibling specification tests like reset_test or yatchew_linearity_test, so it is not 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 guidance is given on when to use this test over alternatives, and no exclusions or prerequisites are mentioned. The phrase 'for heteroskedasticity' implies a use case, but among many sibling tests that is insufficient for an agent to choose correctly.

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

holmC
Read-only

Holm (1979) step-down correction. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
pvaluesYesUnadjusted p-values.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true, which covers safety, and the description adds no behavior beyond that. 'Validation: certified parity evidence' is an opaque statement that does not explain what the tool does with inputs, what it returns, or any side effects. No contradiction with annotations exists, but the description contributes almost no 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?

The description is short and front-loaded with the core purpose. The second clause, 'Validation: certified parity evidence,' is cryptic and not obviously actionable, which prevents a 5, but there is no unnecessary verbosity.

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?

Given the tool has seven parameters and a large sibling family, the description is too sparse. The schema covers parameters and an output schema exists, but the description still fails to clarify how this tool fits into a workflow, what 'certified parity evidence' means, or how Holm compares with adjacent corrections. An agent gets the name but not enough context to confidently select it over alternatives.

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 100%, so the input schema already documents all seven parameters clearly. The description itself adds no parameter-level meaning, so the baseline of 3 is appropriate. It neither helps nor hurts beyond the schema.

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, well-known operation: 'Holm (1979) step-down correction.' This is a clear verb+resource pair and identifies the statistical procedure. However, it does not distinguish it from closely related sibling tools such as bonferroni, benjamini_hochberg, or romano_wolf, so it misses the top score.

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 offers no guidance on when to use Holm versus the many alternative multiple-testing corrections in the sibling list. The phrase 'Validation: certified parity evidence' is not usage guidance, and no exclusions or alternatives are mentioned.

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

honest_didA
Read-only

Rambachan-Roth (2023) 'honest' DID sensitivity analysis. Operates on a fitted event-study / DID result: pass result_id from a prior sp.event_study / sp.callaway_santanna / sp.did_imputation / sp.sun_abraham fit run with as_handle=true (or use the honest_did_from_result tool, which auto-extracts the event-study coefficients). Returns honest confidence intervals under varying degrees of parallel-trends violation (smoothness or relative-magnitude restrictions). Call this when a pre-trend test rejects at low power instead of abandoning the design. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
eNoEvent-time period (post-treatment horizon) to build the honest CI for.
alphaNoSignificance level for the honest CI.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
m_gridNoGrid of M bounds on the parallel-trends violation to sweep.
methodNoRestriction family: 'smoothness' (second differences) or 'relative_magnitude'.smoothness
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so no contradiction. The description adds that it operates on a fitted result and returns honest confidence intervals under parallel-trends violations, which is useful context. However, it doesn't clarify whether it requires a pre-existing result, what happens if no result_id is supplied, or the exact meaning of the 'Validation: certified parity evidence' statement, leaving some ambiguity.

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?

Four sentences, reasonably front-loaded with the method and purpose, and the chaining instructions are compact. The final 'Validation: certified parity evidence' sentence is opaque and adds little value, slightly reducing conciseness.

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?

Given the tool's complexity (10 parameters, output schema present, many DID siblings), the description covers the key context: what it does, when to use it, and how to get the needed fitted result. It does not explain how to interpret the outputs or guide parameter choices like m_grid, but the output schema and 100% parameter schema coverage relieve some of that burden. Overall adequate but with room for more practical guidance.

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 100%, so the baseline is 3. The description adds context for result_id (how to obtain it) and mentions smoothness vs relative-magnitude restrictions, which maps to the method parameter. It does not add detail for m_grid, alpha, e, or the common data-loading parameters, but the schema already documents those adequately.

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 clearly identifies the tool as a Rambachan-Roth (2023) 'honest' DID sensitivity analysis that operates on a fitted event-study/DID result and returns honest confidence intervals. It names the specific prior-fit tools and explicitly contrasts itself with honest_did_from_result, so an agent can distinguish it from the many sibling DID-related tools.

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 an explicit trigger: 'Call this when a pre-trend test rejects at low power instead of abandoning the design.' It also tells the agent how to chain inputs (pass result_id from specific prior tools with as_handle=true) and points to honest_did_from_result as an alternative that auto-extracts coefficients. This is clear, though it doesn't enumerate negative cases or alternative sensitivity tools.

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

honest_did_from_resultA
Read-only

Rambachan-Roth (2023) honest CIs on a fitted DID / event-study result. Auto-extracts betas + sigma + pre/post-period counts from the result; the LLM never ferries arrays.

ParametersJSON Schema
NameRequiredDescriptionDefault
eNoRelative event time to audit.
m_barNoBound on deviation magnitude (optional).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoSD = smoothness deviation (Rambachan-Roth default); RM = relative magnitude.SD
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idYesHandle to a DID / event-study result.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the description does not need to cover safety. It adds value by disclosing that betas, sigma, and counts are auto-extracted from the result, and that the LLM does not need to pass arrays – a concrete behavioral detail. It also names the method (Rambachan-Roth 2023). No contradiction with annotations.

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 sentences, both purposeful. The first front-loads the core purpose and the second explains a key convenience (auto-extraction) that shapes how the LLM should call the tool. No wasted words.

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 read-only tool with an output schema, the description covers the essential usage: it operates on a fitted result identified by result_id and auto-extracts necessary components. It does not explicitly state it requires a DID/event-study result type, but that is implied by the name and first sentence. Given the rich schema and output schema, it is adequately complete.

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 descriptions cover 100% of parameters, each with a detailed explanation (e.g., detail levels, method options, data_path formats). The description's note about auto-extracting betas/sigma/counts reinforces the role of result_id but does not add significant meaning beyond the schema. Baseline 3 applies.

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 action (computes honest CIs) on a specific resource (fitted DID/event-study result), and distinguishes itself from siblings like honest_did by emphasizing it works on a fitted result and auto-extracts arrays, so the LLM never ferries arrays. This clearly differentiates it from tools that take raw data.

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 clearly implies it should be used when a fitted DID/event-study result already exists, and that the user should pass a result_id rather than raw data. However, it does not explicitly name alternatives or state when not to use it, leaving some inference to the agent.

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

honest_varianceA
Read-only

Half-sample bootstrap variance of the ATE/GATE estimate. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness given the covariates; Overlap / positivity; Honesty: separate subsamples are used to choose splits and to estimate effects. Pre-conditions: Covariates, treatment, and outcome with enough data to grow an honest forest. Failure modes: Calibration test rejects -- the forest's heterogeneity is not well calibrated -> Increase the sample / number of trees, or fall back to a doubly-robust learner. Alternatives: sp.dml, sp.auto_cate, sp.tmle. Typical minimum N: 1000.

ParametersJSON Schema
NameRequiredDescriptionDefault
XNoFeature matrix or covariate DataFrame.
seedNoRandom seed for reproducible stochastic steps.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
forestYesforest parameter ('CausalForest').
n_splitsNoNumber of random half-sample draws.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior5/5

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

Annotations provide readOnlyHint=true, which the description aligns withβ€”variance computation is read-only. Beyond that, the description adds substantial behavioral context: statistical assumptions (unconfoundedness, overlap/positivity, honesty with separate subsamples), pre-conditions (data requirements), failure modes with concrete recovery actions, and a typical minimum N. This goes well beyond the annotations and gives an agent actionable expectations about when the tool will malfunction and how to respond.

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 description packs a large amount of information into one dense block using labeled segments (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), and the main purpose is front-loaded. However, it is a single unbroken wall of text with no paragraph breaks, and the 'Validation: validated evidence tier' sentence is somewhat cryptic without elaboration. It is economical but would benefit from structural formatting for an agent to parse efficiently.

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 tool's statistical complexity and the presence of a documented output schema, the description is remarkably complete: it covers the validation evidence tier, the three key identifying assumptions, pre-conditions, failure modes with recommended remedies, alternative estimators, and a typical minimum sample size. An agent has enough context to decide whether to call this tool, anticipate failure, and plan the next step without extra round-trips.

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 100%, so the baseline is 3 with no penalty. The description adds only indirect parameter contextβ€”the pre-condition about needing covariates/treatment/outcome maps loosely to X and forest, and the failure-mode advice hints at n_splits/tree countβ€”but it does not enrich any specific parameter beyond what the schema already documents. The schema carries the full parameter-semantics burden, so baseline 3 is appropriate.

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+resource: 'Half-sample bootstrap variance of the ATE/GATE estimate', which identifies the computation clearly. It distinguishes itself from forest-growing tools like causal_forest and from forest_diagnostics by describing its specific estimation technique, and it names sp.dml, sp.auto_cate, and sp.tmle as alternatives. It loses a point because it doesn't explicitly contrast with variance/bootstrap siblings (e.g., bootstrap, jackknife_se, wild_cluster_bootstrap), so some 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?

The description gives implied usage guidance through pre-conditions ('Covariates, treatment, and outcome with enough data to grow an honest forest'), a minimum sample size (N: 1000), and failure-mode recovery actions ('Calibration test rejects -> Increase the sample / number of trees, or fall back to a doubly-robust learner'). However, the alternatives (sp.dml, sp.auto_cate, sp.tmle) are listed without conditions for choosing them, and there are no explicit when-not-to-use statements. Guidance is present but mostly implied.

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

horowitz_manskiA
Read-only

Horowitz-Manski (2000) bounds conditioning on covariates. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Only weak (set-identifying) assumptions are imposed; the result is an interval, not a point; Lee bounds add monotonicity of selection; Oster's delta adds proportional selection on observed vs. unobserved. Pre-conditions: The data needed for the point-identifying analysis, plus the weakest credible identifying restriction; For Lee bounds: a binary selection/attrition indicator. Failure modes: Bounds are too wide to be informative -> Add a credible auxiliary restriction (monotone treatment response, instrument) to tighten the bounds. Alternatives: sp.oster_delta, sp.lee_bounds, sp.manski_bounds. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoBootstrap replications.
y_lowerNoKnown lower bound of Y. Defaults to observed min.
y_upperNoKnown upper bound of Y. Defaults to observed max.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary treatment variable (0/1).
covariatesYesCovariates to condition on (discretised via quartiles for continuous variables).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint, so the description carries the behavioral burden, and it pays it well. It discloses that the output is an interval rather than a point, that bounds can fail by being too wide, that a credible identifying restriction or binary selection/attrition indicator is required, and it even notes typical minimum N and a validation tierβ€”all beyond what annotations provide.

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 text is dense but well organized with labeled sections: Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum N. The method sentence is front-loaded, though small ambiguities like 'validated evidence tier' and the 'sp.' prefix on alternatives keep it from being maximally crisp.

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 14-parameter estimator with an output schema, the description supplies the non-obvious invocation context: identifying assumptions, interval nature, preconditions, failure mode, tightening strategy, alternatives, and sample-size caution. Nothing essential for correct selection and invocation appears to be missing.

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?

The schema already describes all 14 parameters, so the baseline is 3. The description adds only general context about covariates and a selection/attrition indicator for the Lee-bounds alternative; it does not add per-parameter semantics for alpha, n_boot, y_lower/y_upper, as_handle, or result_id beyond what the schema already states.

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 opens with 'Horowitz-Manski (2000) bounds conditioning on covariates,' which identifies the method and its conditioning role, and later clarifies that the result is an interval under weak assumptions. However, it never explicitly names the estimand being bounded (e.g., ATE/ATT), so the agent must infer the precise object from the method name and parameter 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 gives selection-relevant contrast: weak set-identifying assumptions versus Lee bounds' monotonicity and Oster's proportional-selection assumption, plus a named Alternatives list with sp.oster_delta, sp.lee_bounds, and sp.manski_bounds. It stops short of an explicit if-then routing rule like 'use this when only weak assumptions are credible,' but the assumption comparisons give a clear context for choosing among siblings.

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

hurdleB
Read-only

Hurdle (two-part) model for count data. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoRegressors (used for both hurdle and count parts).
yNoDependent variable name.
tolNoNumerical convergence tolerance.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoRobust standard-error or covariance estimator option.nonrobust
clusterNoCluster identifier column for clustered standard errors.
formulaNoPatsy-style formula.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
count_modelNoCount distribution: "poisson" or "negbin".poisson
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already mark the operation as read-only, and the description adds the note 'Validation: certified parity evidence,' which hints at extra validation output. However, this is vague and does not explain what the validation covers or what side effects (e.g., as_handle caching) might occur. With annotations covering safety, the description provides modest additional context 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?

The two-sentence description is front-loaded with the model type and contains no redundant prose. It is slightly terse, but no sentence is wasted.

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 15-parameter model-fitting tool with many related siblings, the description is too thin: it does not explain the hurdle model's data requirements, when it applies, or how it differs from zero-inflated alternatives. The output schema and annotations partially compensate, but an agent still lacks enough context to invoke this tool confidently.

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 100%, so the input schema already documents all 15 parameters. The tool description itself adds no parameter-level information, matching the baseline of 3.

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 identifies the resource as a hurdle two-part model for count data, which clearly separates it from count-model siblings like poisson, nbreg, and zip_model. It lacks an explicit verb like 'fit' or 'estimate', but the model name plus count-data scope is sufficient for an agent to infer the operation.

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 gives no guidance on when to choose a hurdle model over zero-inflated or plain count models, nor does it name any alternative tools. There are no prerequisites or exclusions stated.

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

iccB
Read-only

Intra-class correlation for a fitted mixed model. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRNG seed forwarded to :func:`numpy.random.default_rng`.
alphaNoSignificance level for the confidence interval. Default 0.05.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of parametric bootstrap replicates used to compute the CI. ``0`` (default) uses the delta-method approximation on the log-variance scale, which is faster and usually within a few decimals of the parametric-bootstrap answer for moderate N.
resultYesA ``MixedResult`` returned by :func:`statspai.mixed`.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
componentNoName of the random-effect variance to put in the numerator. Defaults to the random intercept (``"_cons"``)._cons
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=true and openWorldHint=false, so the description need not state read-only. It adds minimal behavioral context: the validation tier mentioned seems irrelevant and confusing. It doesn't disclose the bootstrap process or delta-method behavior, but parameter descriptions in the schema do cover that. No contradiction with 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?

The description is very short, which is concise, but the second sentence about validation is cryptic and wastes valuable space. The first sentence is directly relevant. It could be improved by adding usage guidance without significant length increase.

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?

Given the tool's moderate complexity (11 params, output schema present), the description is sparse. It fails to mention that the tool expects a MixedResult object or handle, and doesn't hint at the bootstrap vs. delta-method trade-off, even though those are in schema. The validation sentence is unclear and doesn't help completeness. Overall, it's minimally complete but leaves the agent to infer key usage context.

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 100%, so the baseline is 3. The description adds some semantic value by indicating the tool operates on a fitted mixed model, which clarifies the 'result' and 'result_id' parameters' context. It also implicitly relates 'component' and 'alpha' to the ICC computation, but doesn't elaborate beyond schema.

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 clearly states the tool computes intra-class correlation for a fitted mixed model, with a specific verb and resource. It distinguishes it from siblings like 'mixed' (which fits the model) and other post-estimation tools, though it doesn't explicitly name a sibling. The validation sentence seems out-of-place and not directly related to the action.

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 does not provide when-to-use guidance or contrast with alternatives. It doesn't mention that it requires a fitted 'MixedResult' from the 'mixed' tool, nor when to choose this over other post-estimation tools. The presence of result_id and result parameters implies a prerequisite, but that's left to the schema.

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

impactplotA
Read-only

Causal Impact visualization (Google-style 3-panel plot).

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoOnly for single-panel types.
typeNo'all': 3-panel (original + pointwise + cumulative). 'original': actual vs counterfactual. 'pointwise': pointwise causal effect. 'cumulative': cumulative effect.all
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from ``causal_impact()``.
figsizeNofigsize parameter (tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so the agent knows this is a read-only visualization. The description adds no extra behavior beyond the schema, but the 'detail' parameter in the schema already explains payload depth for different call contexts (e.g., 'agent' includes violations and next_steps), which is useful behavioral context. Since annotations cover the safety profile, and the schema provides key behavioral detail, the description's limited added value is acceptable.

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 a single clear sentence that front-loads the tool's purpose. It avoids redundancy with the schema and annotations. Extremely concise and to the point, earning the full score.

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?

Given the tool's complexity (11 parameters, 1 required) and the presence of a rich output schema and comprehensive parameters, the description is sufficient. It names the plot type and uses the schema to detail all parameters. The absence of explicit return-value descriptions is compensated by the output schema. The description could mention expected input format for 'result' but the schema's description of 'result' covers that.

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 100%, and the description itself doesn't add much beyond naming the plot type. However, the schema's 'detail' and 'as_handle' parameters are well-described, and the 'type' parameter has clear enum descriptions. The description's mention of '3-panel plot' helps interpret the 'type' parameter's default 'all'. The baseline of 3 is elevated because the schema descriptions are rich, and the description complements them with the plot style.

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 clear verb ('visualization') and resource ('Causal Impact'), explaining it produces a Google-style 3-panel plot. It is distinct from the many sibling plotting tools (e.g., synthplot, did_plot) because it explicitly names 'causal impact' and the Google-style format, though it could be more specific about what makes it unique versus other causal plotting tools.

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 does not mention when to use this tool versus alternatives, but the input schema's 'type' parameter and 'detail' parameter implicitly guide usage (e.g., 'agent' detail for planning next steps). However, there is no explicit guidance on when to choose impactplot over something like synthplot or did_plot. The tool's name and description are self-explanatory for an agent with causal impact context, so this is a minor gap.

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

inequality_indexB
Read-only

Compute a single inequality index. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
epsNoeps parameter (float).
alphaNoSignificance level for confidence intervals and tests.
indexNoatkinson, gini, cv2theil_t
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
weightsNoObservation weights.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, and the description is consistent with that. It adds a vague validation-related behavior, 'certified parity evidence,' but this is too ambiguous to be highly informative. No contradiction with annotations exists.

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 core sentence is short and front-loaded. However, the second sentence, 'Validation: certified parity evidence,' is cryptic and does not clearly earn its place, making the overall structure less effective than it could be.

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?

Given the rich schema, output schema, and annotations, the description is minimally sufficient for a straightforward invocation using defaults. It is not complete enough for nuanced sibling selection or for understanding what 'certified parity evidence' means, but the structured fields cover most invocation needs.

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 100%, so the schema already documents all 11 parameters. The description adds no additional parameter meaning, leaving it at the baseline score of 3.

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: 'Compute a single inequality index.' The word 'single' helps distinguish it from multi-index or decomposing tools, though the supported index types (atkinson, gini, cv2) are only visible in the schema, not the description.

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 alternatives such as diversity_index or shapley_inequality, and no exclusions or preferred scenarios are mentioned. The 'Validation: certified parity evidence' sentence does not provide actionable selection guidance.

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

influence_functionsA
Read-only

Export the per-unit influence functions of a Callaway-Sant'Anna fit as a tidy, self-contained DataFrame (optionally written to disk) -- the StatsPAI equivalent of Stata csdid saverif(). Feed the export to sp.aggte_from_influence for post-hoc custom aggregation without refitting or re-loading the data. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Pre-conditions: result was produced by sp.callaway_santanna. Failure modes: result carries no influence functions -> Fit with sp.callaway_santanna first; other estimators do not store the (g,t) influence-function grid. Alternatives: sp.aggte, sp.aggte_from_influence. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional file path -- .parquet via to_parquet, anything else via to_csv
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesOutput of sp.callaway_santanna
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior1/5

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

The description explicitly states the tool can 'optionally written to disk', a write operation, while the annotations declare readOnlyHint=true. This is a direct contradiction. Although the description adds rich behavioral context (validation tier, failure modes, typical N), the contradiction with the read-only hint is a serious issue that warrants a score of 1.

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 long but well-structured, with sections for purpose, validation, pre-conditions, failure modes, alternatives, and typical N. It front-loads the core action and flows logically. While it's not terse, every sentence contributes useful operational context, making it appropriately concise for a tool with multiple failure modes and pre-conditions.

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 tool's complexity (8 parameters, 1 required, pre-conditions, failure modes, alternatives) and the absence of a visible output schema, the description covers all essential aspects: what it does, when to use it, what prerequisites are needed, what can go wrong, and what to use instead. The typical minimum N adds practical guidance. 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.

Parameters3/5

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

Schema coverage is 100%, so all parameters are already documented in the input schema. The description adds minimal parameter-specific meaning beyond the schemaβ€”it mentions the purpose of the export and the path for writing, but doesn't elaborate on parameter semantics beyond what the schema provides. This matches the baseline for high schema coverage.

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 ('Export'), a precise resource ('per-unit influence functions of a Callaway-Sant'Anna fit'), and the output form ('tidy, self-contained DataFrame'). It also distinguishes itself from siblings by naming alternatives (sp.aggte, sp.aggte_from_influence), making it unmistakable what this tool does and what 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 Guidelines5/5

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

Explicit when-to-use guidance: 'Feed the export to sp.aggte_from_influence for post-hoc custom aggregation without refitting or re-loading the data.' It also lists alternatives and gives pre-conditions (result produced by sp.callaway_santanna) and failure modes (if result lacks influence functions, fit with sp.callaway_santanna first). The agent is told exactly when to choose this over siblings.

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

interactive_feC
Read-only

Interactive fixed effects estimator (Bai 2009). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRegressors.
yYesDependent variable.
idNoUnit identifier.id
tolNoNumerical convergence tolerance.
timeNoTime identifier.time
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo'iterative' (Bai 2009 CCE-type), 'pca' (principal components).iterative
robustNoRobust standard-error or covariance estimator option.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
n_factorsNoNumber of interactive factors (r).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already mark the tool as read-only, and the description adds no behavioral context beyond that: no mention of data requirements, convergence behavior, side effects, caching, or how the fitted result is returned. The 'Validation: validated evidence tier' sentence describes a validation property, not tool 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?

The description is very short with no filler, and the estimator label is front-loaded. The second validation sentence is cryptic and contributes little to invocation, preventing a perfect score.

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 complex 16-parameter estimator, the description leaves out essential context: required panel structure, when interactive fixed effects are appropriate, or how this differs from the many sibling estimators. The detailed schema and output schema compensate for return-value documentation, but not for missing usage and model-selection context.

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 100%, so the schema already documents all 16 parameters, giving a baseline of 3. The description does not add parameter-level context beyond naming the model family, which weakly informs n_factors and method but contributes no concrete parameter semantics.

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 clearly identifies the tool as an interactive fixed effects estimator and anchors it to Bai (2009), which is specific enough to convey the method. However, it is a noun phrase rather than an action statement, and it does not differentiate the tool from closely related siblings such as gsynth or fect.

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 estimator versus alternatives like feols, twoway FE, gsynth, or matrix_completion. The validation-tier sentence is unrelated to selection criteria, so the agent must infer applicability solely from the method name.

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

interferenceA
Read-only

Unified interference / spillover dispatcher. design= selects the estimator: 'partial' (Hudgens-Halloran cluster) / 'network_exposure' (Aronow-Samii HT) / 'peer_effects' (Manski / Bramoulle linear-in-means) / 'network_hte' (Wu & Yuan 2025 orthogonal, arXiv:2509.18484) / 'inward_outward' (directed network; Fang, Airoldi & Forastiere 2025, arXiv:2506.06615) / 'cluster_matched_pair' (Bai 2022) / 'cluster_cross' (Ding et al. 2025) / 'cluster_staggered' (Zhou et al. 2025) / 'dnc_gnn' (Zhao et al. 2026). Kwargs pass through to the target function; see sp.interference_family guide. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Partial interference (within-cluster spillover only) OR an explicit exposure mapping; SUTVA modulo the declared spillover structure; Correctly specified exposure function (e.g. fraction-treated, neighbour-share). Pre-conditions: clustered data OR network / adjacency matrix; treatment varies within cluster (or exposure is well-defined on the network); enough clusters (>= 30) for cluster-robust inference. Failure modes: Few clusters (< 30) with cluster-level inference -> Use wild cluster bootstrap...

ParametersJSON Schema
NameRequiredDescriptionDefault
designNoInterference design -- call sp.interference_available_designs() for the full list.partial
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and the description does not contradict it. The description adds useful behavioral context with validation evidence tiers, assumptions, and failure modes. It leaves some operational details such as response payload behavior to the schema and detail parameter, but that is acceptable given the annotation coverage.

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 long but densely informative, opening with a one-line purpose before enumerating designs, assumptions, and failure modes. The trailing ellipsis suggests possible truncation, and some content overlaps with the structured schema, but for a complex dispatcher tool the length is mostly justified.

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 tool's complexity, 7 parameters, and many design families, the description is highly complete: it covers assumptions, pre-conditions, failure modes, validation, and points to a dedicated guide. Since an output schema is present, detailed return-value documentation is not required in the description. The only notable omission is sibling differentiation, which is more of a usage-guidelines concern.

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 input schema has 100% description coverage, so the baseline is 3, but the description adds meaning by naming concrete design values ('partial', 'network_exposure', 'peer_effects', etc.) and noting that kwargs pass through to the target function. It does not re-document every parameter because the schema already handles those, but the design enumeration goes beyond the schema.

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 clearly identifies a specific verb+resource: a 'Unified interference / spillover dispatcher' that selects among named estimator families. It provides rich detail on what designs are available, but it does not explicitly differentiate itself from closely related sibling tools like network_exposure or cluster_cross_interference.

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 gives concrete pre-conditions (clustered data or network/adjacency matrix, treatment variation, >=30 clusters) and assumptions (SUTVA modulo spillover, correctly specified exposure). It also points to the sp.interference_family guide and recommends wild cluster bootstrap when clusters are few. However, it does not explicitly state when to use this unified dispatcher versus sibling alternatives.

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

interflexA
Read-only

Conditional marginal effects of d across a moderator x Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
dYesOutcome, treatment (binary 0/1 or continuous) and moderator.
xYesOutcome, treatment (binary 0/1 or continuous) and moderator.
yYesOutcome, treatment (binary 0/1 or continuous) and moderator.
zNoAdditional covariates entering linearly.
bwNoKernel bandwidth on the moderator's scale (before the adaptive density scaling). Required for ``estimator='kernel'``; interflex's cross-validated choice is not ported.
vceNoVariance construction. ``'robust'`` is the HC1 sandwich (interflex's default) and ``'homoscedastic'`` the classical covariance for the linear and binning models and the Wald test; ``'bootstrap'`` (kernel estimator only) draws nonparametric bootstrap standard errors, the linear and binning estimators always reporting delta-method SEs.robust
seedNoBootstrap replications and seed.
waldNoReport the Wald and LR tests of the linear interaction against the binning model (``estimator='binning'`` or ``'linear'``).
alphaNoSignificance level for confidence intervals and tests.
nbinsNoNumber of moderator bins (cut at sample quantiles) for the binning estimator; ``cutoffs`` overrides the quantiles.
nevalNoEvaluation points, equally spaced over the moderator's range.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoBootstrap replications and seed.
x_evalNoExplicit evaluation points.
cutoffsNocutoffs parameter (Optional[Sequence[float]]).
weightsNoObservation weights column.
adaptiveNoKernel estimator only. ``True`` scales the bandwidth at each evaluation point by the moderator's density as the R package does (``h(x) = bw * sqrt(geometric-mean density / density(x))``); ``False`` uses the fixed Gaussian kernel ``phi((X - x)/bw)`` of the Stata ``interflex`` command.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
estimatorNoestimator parameter (str).binning
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
wald_testNoReference distribution of the Wald statistic: chi-square (R ``lmtest::waldtest(test = "Chisq")``) or the F distribution with the full model's residual degrees of freedom (Stata interflex).chisq
treat_typeNoInferred from ``d`` when omitted (two distinct values = discrete).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
wald_full_moderateNoWhether the fully interacted model behind the Wald / LR tests also interacts the covariates ``z`` with the bins (R interflex). The Stata command leaves the covariates uninteracted; set ``False`` to reproduce its test.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, meaning no mutation; the description adds behavioral details about estimator variants (binning, linear, kernel), adaptive bandwidth, Wald tests, and a validation parity note. It discloses that interflex's cross-validated bandwidth choice is not ported, and that `bw` is required for kernel. This goes beyond the annotations and gives the agent meaningful operational context.

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 description is a single sentence plus a validation phrase, which is concise. It front-loads the core function. However, it mixes a correctness/parity claim ('Validation: certified parity evidence') into the description without explaining what that means or how it should influence usage. Some space is wasted because the sentence mentions only three params, while the schema already documents them.

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?

Given the tool has 26 params, 5 enums, output schema, and rich sibling context, the description is thin. It does not mention when to use the kernel vs binning estimator, the role of the `detail` parameter, or how this relates to interflex_plot. However, the schema and output schema carry a lot of weight, so it's not critically incomplete, but it's below the complexity level of this 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 description coverage is 100%, so the schema already documents all 26 parameters thoroughly. The description adds little beyond the schema: it names d, x, y but not their distinct roles as outcome/treatment/moderator roles. Many params have good descriptions in schema (e.g., vce, adaptive, detail), and the description references these but doesn't add meaning beyond what schema already provides. Baseline 3 is appropriate.

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 purpose: computing conditional marginal effects of treatment d across moderator x. It names the treatment and moderator variables explicitly, which distinguishes it from generic regression or RD tools. However, it does not explicitly contrast with the sibling interflex_plot (though the name suggests that's plotting), so it falls slightly short of full sibling differentiation.

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 includes Validation: certified parity evidence, which hints at a validation context but doesn't explain when to use this tool versus alternatives like interflex_plot or megamma. There is no explicit when/when-not or alternative naming. The required params d, x, y, data_path imply linear-interaction estimation workflow, but the guidance is minimal.

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

interflex_plotC
Read-only

The interflex figure: marginal effect of d across x with its

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoDraw into an existing axes; a new figure is created otherwise.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesOutput of :func:`interflex`.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
show_histNoAdd the moderator histogram (treated / control) under the curve.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the safety profile is covered. The description adds some useful context by naming the figure and the marginal-effect relationship it displays, but it does not disclose more substantive behaviors such as return/caching behavior or how the figure is produced, and it trails off mid-sentence.

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

Conciseness2/5

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

The description is short but structurally incomplete, ending abruptly with 'with its'. This reads as an under-specified fragment rather than a clean, complete sentence with a front-loaded action and object.

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?

Given 9 parameters, an enum-driven detail payload, and many related plot and estimation tools, a one-line truncated description is not enough context. The output schema may document return values, but the description fails to place the tool in a workflow, such as first fitting interflex and passing its result.

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 100%, so the baseline is 3. The description's references to `d` and `x` add slight meaning about what the plot displays, but it does not elaborate on parameters like result, ax, as_handle, or detail beyond what the schema already states.

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 identifies the tool's output as the interflex figure and names its core content: the marginal effect of `d` across `x`. This makes the purpose reasonably clear and helps distinguish it from generic plotting or estimation siblings like plot_from_result, but the missing verb and truncated 'with its' prevent 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?

The description gives no guidance on when to use this tool, what prerequisite result to supply, or how it relates to alternatives such as interflex or plot_from_result. With a very large sibling list, the absence of any usage or workflow direction is a clear gap.

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

interpret_resultA
Read-only

Natural-language interpretation of a fitted result. When the connected MCP client advertised sampling, this REUSES the agent's own model (no API key) to explain the estimate, its uncertainty, and what the design does / does not identify -- optionally focused by a question and tuned for an audience. With no sampling available it falls back to a deterministic structured brief: it NEVER fabricates a narrative. Every claim is grounded in the result's own numbers -- the model is told not to invent estimates. Pass the result_id from an earlier as_handle=true call.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
audienceNoTone / depth: 'researcher' (precise, names identification assumptions), 'policymaker' (plain, decision-focused), 'general' (no jargon).researcher
questionNoOptional specific question to focus the interpretation (e.g. 'is the effect economically meaningful?').
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idYesHandle to a previously-fitted result.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses rich behavioral traits: it REUSES the agent's own model without an API key when sampling is advertised, falls back to a deterministic structured brief otherwise, NEVER fabricates a narrative, and grounds every claim in the result's own numbers. It also flags the chaining prerequisite (result_id from an as_handle=true call), all of which materially shapes an agent's expectations.

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 purpose and every sentence carries information. There is mild redundancy between 'it NEVER fabricates a narrative' and 'the model is told not to invent estimates' β€” two sentences making the same guarantee β€” but the overall density is high and well organized.

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 tool with 8 parameters, an output schema, and dual-mode behavior, the description covers the essential workflow (chaining, sampling-dependent path, grounding guarantees) while leaving parameter-level detail to the fully documented schema. The detail-level token guidance lives in the schema where it belongs, so the division of labor is appropriate.

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 100%, so the baseline is 3, but the description adds workflow semantics beyond the schema: it ties result_id to a specific earlier call mode (as_handle=true) and explains that question focuses the interpretation while audience tunes it. This connects the parameters to the calling pattern in a way the schema does not.

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 opens with a specific verb+resource ('Natural-language interpretation of a fitted result') and elaborates what the interpretation covers: the estimate, its uncertainty, and what the design does/does not identify. It is clearly distinct from plotting or diagnostic siblings in intent, though it never explicitly names a sibling (e.g., plot_from_result, brief_result) to differentiate from.

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 gives clear context for when and how to use the tool: pass a result_id from an earlier as_handle=true call, and it adapts its behavior based on whether the MCP client advertised sampling. It explains both operating modes (agent-model reuse vs deterministic fallback) but stops short of explicit when-not-to-use guidance or named alternatives among the 240+ siblings.

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

ipsA
Read-only

Inverse propensity score OPE. Assumptions: Logging (behaviour) policy propensities are known or correctly estimated; Positivity / common support: the logging policy assigns positive probability to every action the target policy takes; No unmeasured confounding in the logged data. Pre-conditions: X (context), A (logged action), R (reward) and logging propensities are available. Failure modes: High-variance estimate from extreme importance weights when the target policy diverges from logging -> Use self-normalised IPS (snips) or the doubly-robust estimator to reduce variance. Alternatives: sp.snips, sp.doubly_robust, sp.direct_method. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
AYesA parameter (np.ndarray).
RYesR parameter (np.ndarray).
XYesFeature matrix or covariate DataFrame.
clipNoclip parameter (float).
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
pi_targetYespi_target parameter.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
pi_behaviorNopi_behavior parameter (Optional[np.ndarray]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false; the description adds non-obvious behavior: positivity assumptions, no unmeasured confounding, high-variance failure from extreme importance weights, and a typical minimum N. It does not discuss alpha/confidence-interval behavior, but the output schema exists to carry return-shape information.

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 dense but well-structured with labeled sections: Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum N. Every clause adds information; slight redundancy like repeated 'logging policy' phrasing prevents a 5, but there is 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?

For a 13-parameter OPE tool with an output schema and read-only annotation, the description supplies the key invocation context: required inputs, assumptions, failure modes, how to fall back to alternative estimators, and even a minimum sample-size heuristic. It is complete enough for an agent to invoke correctly without additional round-trips.

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 100%, so the baseline is 3, but the description adds real parameter meaning by clarifying X, A, R as context, logged action and reward, and pointing to logging-policy propensities. It does not elaborate on clip, alpha, detail, or as_handle, though those are already described in the 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 description opens with 'Inverse propensity score OPE,' naming the estimator family and task precisely. It then refers to X/A/R and explicitly lists sibling alternatives like sp.snips, sp.doubly_robust, and sp.direct_method, so an agent can distinguish this tool from closely related tools.

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 failure-modes note gives a concrete rule: when the target policy diverges from logging, prefer snips or doubly-robust to reduce variance, and the Alternatives line names direct_method. It does not give a crisp positive 'use IPS when...' trigger, but the assumptions and preconditions imply the appropriate context.

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

ipwA
Read-only

Inverse Probability Weighting for ATE/ATT/ATC with propensity score trimming. Validation: certified parity evidence. Assumptions: Sequential exchangeability / no unmeasured confounding at each time point; Positivity: every treatment level is possible given the past; Correct specification of the treatment and/or outcome models. Pre-conditions: Sequentially measured covariates, (time-varying) treatment, and outcome; Models for the treatment process and the outcome (or weights). Failure modes: Stabilized weights have extreme values (positivity near-violation) -> Truncate weights, simplify the treatment model, or use a doubly-robust estimator (TMLE). Alternatives: sp.tmle, sp.g_computation, sp.ipw. Typical minimum N: 300.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
trimNoPropensity score trimming threshold
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
estimandNoTarget estimandATE
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description goes beyond by detailing assumptions, pre-conditions, failure modes, and typical minimum N. This adds meaningful context about the tool's internal logic and limitations, which is not captured by annotations alone.

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 information-dense yet well-organized with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical N). The core purpose is front-loaded, and every sentence contributes useful information without unnecessary fluff.

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?

The description covers assumptions, preconditions, failure modes, alternatives, and minimum sample sizeβ€”all critical for a causal inference tool. Combined with the full parameter schema and output schema, the definition is nearly complete. The only gap is explicit when-to-use vs. specific alternatives, but that is partly addressed in the failure modes.

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 100%, so the schema already documents all 11 parameters. The description adds marginal value by contextualizing 'trimming' and the estimand choices, but it does not fundamentally enhance parameter understanding beyond the 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 description states a specific method (Inverse Probability Weighting) and target estimands (ATE/ATT/ATC) with propensity score trimming. It also names alternative tools (sp.tmle, sp.g_computation), though listing sp.ipw as an alternative to itself is slightly confusing. Overall, the purpose is unmistakable.

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 provides assumptions (sequential exchangeability, positivity, model specification) and failure modes with suggested remedies (e.g., use TMLE when weights are extreme), which guide when IPW is appropriate. However, it lacks explicit 'use this when X, use alternative when Y' comparisons beyond the failure-mode hint.

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

irfB
Read-only

Compute impulse response functions from VAR. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
impulseNoImpulse variable (if None, all).
periodsNoNumber of periods for IRF.
responseNoResponse variable (if None, all).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
orthogonalNoOrthogonalized (Cholesky) IRF.
var_resultYesEstimated VAR model.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, and the description's 'Compute' aligns with a read/compute operation, so there is no contradiction. The validation sentence attempts to mention 'validated evidence tier' but is vague and does not explain what the tool actually does with that validation, how it reports it, or any behavioral nuances such as defaults for impulse/response/orthogonalization. It adds little beyond the schema's parameter descriptions.

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 first sentence is concise and front-loaded, stating the core purpose. However, the second sentence about 'Validation: validated evidence tier' is jargon-heavy and arguably waste, since it doesn't specify what evidence tier applies, how validation is performed, or what the agent should do with it. A two-sentence description could be tight, but the second sentence earns little of 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?

For a tool with 11 parameters, an output schema, and full parameter descriptions, the description is passable but leaves gaps. It does not explain that var_result refers to a result from a previous var call, nor does it describe any chaining or ordering context (e.g., fit VAR first, then call irf). The validation sentence hints at some evidence tier but is too vague to be actionable. The output schema exists, so return-value documentation is not required, but usage context is thin.

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 100%, so all parameters are individually documented in the input schema. The description itself adds no parameter-level meaning beyond the schema, which is acceptable under the baseline rule. It does not clarify the relationship between var_result, result_id, and data_path, or how as_handle chaining works, but the schema covers each parameter individually.

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 begins with a clear verb+resource: 'Compute impulse response functions from VAR.' This effectively identifies the operation on a specific model type, distinguishing it from the many sibling tools. However, it lacks explicit differentiation from related time-series tools such as local_projections or var, but the phrase 'from VAR' is reasonably specific.

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 provides no explicit guidance on when to use this tool versus alternatives like var, local_projections, or granger_causality. It implies usage through the name and first sentence, but it does not state prerequisitesβ€”such as first fitting a VAR with the var toolβ€”or explain when one might instead use local_projections for impulse responses. The validation sentence is unclear and doesn't help with tool selection.

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

itsC
Read-only

Segmented regression for interrupted time series. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column.
timeNoTime column. If None, uses row index 0..n-1.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
hac_lagNoNewey-West truncation lag.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
interventionNoTime index (integer row position) at which the intervention begins. Required.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
seasonality_periodNoPeriod P of Fourier seasonal terms (e.g. 12 for monthly data with annual cycle). If None, no seasonality is added.
seasonality_harmonicsNoseasonality_harmonics parameter (int).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

The annotation readOnlyHint=true already indicates a safe read-only operation. The description adds a cryptic validation note about evidence tiers, which does not explain tool behavior, side effects, or requirements. It does not contradict the annotation but adds little beyond it.

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 very brief and front-loaded with the core purpose. The second sentence on validation is concise but its relevance is unclear. Overall, it is efficient with no wasted 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?

For a complex tool with 13 parameters and no explicit output schema explanation, the description is notably thin. It does not explain key concepts like the intervention parameter, the role of time, or how the validation tier affects usage. The description is insufficient for an agent to understand the full scope of the 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 description coverage is 100%, so all 13 parameters are already documented in the schema. The description adds no extra parameter semantics, which aligns with the baseline of 3 when the schema is fully descriptive.

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 clearly identifies the tool as segmented regression for interrupted time series, which is a specific statistical method. It is distinct from many siblings like arima or event_study, though it does not explicitly name alternatives. The purpose is clear but lacks explicit differentiation.

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 is provided on when to use this tool versus alternatives. The description does not mention any conditions, exclusions, or alternative tools. An agent would have to infer usage from the name and general domain knowledge.

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

ivA
Read-only

Unified IV estimation and the entry point for the whole IV family: k-class (2SLS, LIML, Fuller, GMM, JIVE) plus the many-weak-instrument jackknife variants (jive1, ujive, ijive, rjive, jive_mw), rigorous/post-Lasso instrument selection (lasso, rlasso, post_lasso), marginal treatment effects (mte) and their MST sharp bounds (ivmte_bounds), plausibly-exogenous sensitivity (plausibly_exog_ltz / plausibly_exog_uci), nonparametric and ML variants (npiv, kernel, ivdml, deepiv), quantile IV (ivqreg), Bayesian IV (bayes), continuous-instrument LATE (continuous_late), many-weak-IV Anderson-Rubin (many_weak_ar) and shift-share (shift_share). Includes first-stage F, Sargan/Hansen J, Kleibergen-Paap rk, Sanderson-Windmeijer per-endog F and Hausman diagnostics. Validation: certified parity evidence. Assumptions: Relevance: instruments predict the endogenous regressor (first-stage F >= 10 rule of thumb); Exclusion: instruments affect outcome only through the endogenous regressor; Monotonicity (for LATE interpretation under heterogeneous effects). Pre-conditions: formula includes the (endog ~ instruments) parenthesised block; at least as many instruments as endogenous regressors (order condition...

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimation method. The k-class methods (2sls, liml, fuller, gmm, jive) take `formula` + `data`; the rest take their own explicit arguments -- see the target function's docstring. Aliases are case-insensitive and -/_ interchangeable.2sls
robustNoStandard error typenonrobust
clusterNoColumn name for cluster-robust SEs
formulaYesIV formula: 'y ~ (endog ~ instruments) + exog'
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
fuller_alphaNoFuller constant (method='fuller' only)
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

The annotation readOnlyHint=true already declares the operation non-mutating; the description adds substantial context by listing the included diagnostics (first-stage F, Sargan/Hansen J, Kleibergen-Paap rk, Sanderson-Windmeijer, Hausman) and the statement 'Validation: certified parity evidence.' It also documents assumptions and pre-conditions that constrain valid usage. No contradiction with 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?

The description is long but well-structured: purpose first, then the method family list, diagnostics, validation, assumptions, and pre-conditions. The extensive method enumeration is necessary to convey the unified scopeasia. It front-loads the core purpose and avoids redundancy with the schema. A few phrases could be tightened, but overall it earns its length for a tool of this complexity.

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?

Given the tool's complexity and the presence of an output schema, the description is quite complete. It covers the tool's scope, the key methods, diagnostics, validation evidence, statistical assumptions, and pre-conditions for the formula. It points to 'the target function's docstring' for method-specific arguments, which is a reasonable delegation. Missing details like error behavior are not critical for a read-only estimation 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 description coverage is 100%, so the baseline is 3. The description does add some meaning for the `formula` parameter by specifying the parenthesised block syntax, but most parameter details (e.g., `robust`, `cluster`, `detail`) are already fully described in the schema. There is no significant additional semantic value for the parameters beyond what the schema provides.

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 opens with 'Unified IV estimation and the entry point for the whole IV family', clearly stating the verb and resource. It enumerates the specific estimator families (k-class, jackknife, lasso, mte, etc.), distinguishing this tool as the umbrella entry point rather than any one specific method. The phrase 'entry point' differentiates it from sibling tools like ivreg or lasso_iv without needing to open their 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 provides assumptions (relevance, exclusion, monotonicity) and pre-conditions ('formula includes the (endog ~ instruments) parenthesised block; at least as many instruments as endogenous regressors'), which help an agent understand when IV is appropriate. However, it never explicitly says 'use this tool instead of X' or 'for simple 2SLS with one method, consider a more targeted tool'. The routing to alternatives like ivreg or iv_diag is left implicit.

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

iv_boundsA
Read-only

Nevo-Rosen (2012) bounds for LATE under imperfect instruments. Assumptions: Only weak (set-identifying) assumptions are imposed; the result is an interval, not a point; Lee bounds add monotonicity of selection; Oster's delta adds proportional selection on observed vs. unobserved. Pre-conditions: The data needed for the point-identifying analysis, plus the weakest credible identifying restriction; For Lee bounds: a binary selection/attrition indicator. Failure modes: Bounds are too wide to be informative -> Add a credible auxiliary restriction (monotone treatment response, instrument) to tighten the bounds. Alternatives: sp.oster_delta, sp.lee_bounds, sp.manski_bounds. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
controlsNoControl variables (residualized out via OLS).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesEndogenous treatment (binary).
assumptionNo- ``'monotone_iv'``: instrument has same-sign direct effect as through the treatment (Nevo-Rosen Proposition 2). - ``'less_than_late'``: direct effect of Z on Y is weakly less than the indirect effect (tighter).monotone_iv
instrumentYesInstrument variable (binary).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so the safety profile is already known. The description adds meaningful behavioral context beyond that: it states the result is an interval rather than a point, explains that only weak set-identifying assumptions are imposed, and describes failure modes (bounds too wide) with a remedy. It also notes the typical minimum N of 100. This goes beyond what annotations provide.

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 compact and information-dense, with clear labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). It front-loads the core purpose. The only minor inefficiency is that the failure-mode sentence is slightly run-on, but overall every sentence 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?

Given the tool's complexity (14 params, output schema present, many siblings), the description covers the key decision-relevant context: what the tool computes, when to use it, what pre-conditions are needed, and how to respond to uninformative bounds. The output schema handles return-value details. It doesn't explain the 'less_than_late' assumption in depth, but the schema's enum description covers that.

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 100%, so the schema already documents all 14 parameters. The description adds some context for the 'assumption' parameter by explaining the two options ('monotone_iv' vs 'less_than_late') and their relative tightness, which is genuinely useful. However, it doesn't add meaning for most other parameters, so the baseline 3 is appropriate.

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 opens with a specific verb+resource: 'Nevo-Rosen (2012) bounds for LATE under imperfect instruments.' It clearly distinguishes this from point-identifying IV methods and names sibling alternatives (sp.oster_delta, sp.lee_bounds, sp.manski_bounds). The scope is precise: set-identifying bounds, not a point estimate.

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?

The description provides explicit pre-conditions ('data needed for the point-identifying analysis, plus the weakest credible identifying restriction'), a specific condition for Lee bounds (binary selection/attrition indicator), and a failure-mode remedy ('Add a credible auxiliary restriction... to tighten the bounds'). It also names alternatives, giving an agent clear routing guidance.

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

iv_compareA
Read-only

Run several k-class / JIVE estimators on the same IV specification and return a one-row-per-method comparison DataFrame (estimate, SE, CI, first-stage F). Useful as a sensitivity sanity check before reporting. Assumptions: Instrument relevance (non-zero first stage); Exclusion restriction: the instrument affects the outcome only through the treatment; Independence/exogeneity of the instrument; for LATE, monotonicity (no defiers). Pre-conditions: An instrument plausibly affecting treatment, an endogenous treatment, and an outcome; A strong first stage (assess instrument strength before interpreting estimates). Failure modes: Weak first stage -- biased point estimates and unreliable conventional SEs -> Report first-stage F / effective F and use weak-IV-robust inference (Anderson-Rubin). Alternatives: sp.iv, sp.anderson_rubin_ci, sp.dml. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
formulaYesModel formula using patsy/R-style syntax.
methodsNomethods parameter (tuple[str]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
endog_nameNoOverride endogenous-coefficient name lookup
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=false, so the read-only safety profile is already covered. The description adds substantive context beyond annotations: the comparison-DataFrame output structure, the weak-first-stage failure mode with its consequences (biased point estimates, unreliable conventional SEs), the identifying assumptions (relevance, exclusion, exogeneity, monotonicity for LATE), and a typical minimum N of 200.

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 organized into labeled sections β€” purpose, assumptions, pre-conditions, failure modes, alternatives, minimum N β€” and front-loads the core purpose in the first sentence. It is dense but every section earns its place; no filler or repetition of schema content.

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?

The description covers the statistical context an agent needs to use an IV comparison tool correctly: identifying assumptions, the relevance pre-condition, the weak-instrument failure mode with a concrete mitigation, alternatives, and a minimum sample size. An output schema exists, so return-value details are already structured, and nothing critical for selecting or invoking the tool is missing.

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 100%, with all 10 parameters (alpha, detail, formula, methods, as_handle, data_path, result_id, endog_name, data_columns, data_sample_n) already documented in the input schema. The description adds no parameter-level details beyond the schema, so the baseline of 3 applies.

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 opens with a specific verb phrase β€” 'Run several k-class / JIVE estimators on the same IV specification' β€” and states the exact output shape (one-row-per-method DataFrame with estimate, SE, CI, first-stage F). This clearly differentiates it from single-estimator siblings like sp.iv, ivreg, and jive, and the explicit alternatives list reinforces the distinction.

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 explicitly states when to use the tool ('Useful as a sensitivity sanity check before reporting') and names three alternatives (sp.iv, sp.anderson_rubin_ci, sp.dml). The failure-mode section routes to Anderson-Rubin weak-IV-robust inference when the first stage is weak, which effectively implies a when-not condition, though it lacks a crisp 'use X instead when Y' formulation.

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

iv_diagA
Read-only

Modern IV reporting bundle (R ivDiag analogue). Combines 2SLS point estimate, analytic + pairs/wild bootstrap SEs, Olea-Pflueger effective F, Lee-McCrary-Moreira-Porter (2022) tF-corrected critical value, Anderson-Rubin / CLR / K weak-IV-robust confidence sets, Kleibergen-Paap rk LM, Conley-Hansen-Rossi (2012) plausibly-exogenous LTZ sensitivity, and a Blandhol-Bonney-Mogstad-Torgovitsky (2022/2025) / Soczynski (2024) TSLS-as-LATE caveat into a single IVDiagResult. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Instrument relevance (non-zero first stage); Exclusion restriction: the instrument affects the outcome only through the treatment; Independence/exogeneity of the instrument; for LATE, monotonicity (no defiers). Pre-conditions: An instrument plausibly affecting treatment, an endogenous treatment, and an outcome; A strong first stage (assess instrument strength before interpreting estimates). Failure modes: Weak first stage -- biased point estimates and unreliable conventional SEs -> Report first-stage F / effective F and use weak-IV-robust inference (Anderson-Rubin). Alternatives: sp.iv, sp.anderson_ru...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column
h0NoNull hypothesis for AR/CLR/K
exogNoOptional included exogenous controls
vcovNoHeteroskedasticity-robust covariance typeHC1
alphaNoSignificance level for confidence intervals and tests.
endogYesSingle endogenous regressor
absorbNoHigh-dimensional fixed effects to partial out before the bundle is computed, so every statistic describes the absorbed specification (ivreghdfe-equivalent)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoBootstrap replications (0 to skip)
clusterNoCluster column for cluster-robust SE / cluster bootstrap
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
instrumentsYesinstruments parameter (list[str] | str).
boot_methodsNoSubset of {'pairs','wild'}
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
include_k_ciNoWhether to include k ci.
ltz_gamma_sdNoStandard deviation of CHR (2012) LTZ Gaussian prior on gamma
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_clr_ciNoWhether to include clr ci.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations include readOnlyHint=true, so the description doesn't need to justify that it's read-only. Beyond annotations, the description discloses the tool's behavior in detail: it computes a bundle of diagnostics, has specific assumptions (exclusion restriction, monotonicity), failure modes (weak first stage), and offers a validation tier and pre-conditions. It also implicitly discloses that it returns a comprehensive result object. This is rich 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?

The description is long but information-dense, covering all key aspects: purpose, validation, assumptions, failure modes, and alternatives. It is front-loaded with the purpose and then provides structured sections. However, it might be slightly verbose with the enumeration of all methods, but each is relevant. It is not concise, but it earns its length for a complex tool.

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 tool's complexity (21 params, output schema provided), the description is comprehensive: it states pre-conditions, assumptions, failure modes, validation, and alternatives. It also mentions the detail parameter for controlling output depth, which is crucial for LLM planning. The output schema exists, so return value details are not duplicated. Nothing essential is missing for an agent to decide and call this tool correctly.

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 100%, so every parameter has a description in the schema. The description adds some context by framing the bundle's purpose and failure modes (e.g., weak first stage -> use robust inference), which helps interpret the output but doesn't add parameter-level details beyond what schema already provides (e.g., ltz_gamma_sd is explained in schema but not in description). However, the description's high-level context does enhance understanding of parameters like 'detail' and 'vcov' in the broader workflow.

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 clearly identifies what the tool does: a comprehensive IV reporting bundle that combines multiple estimation and testing procedures into a single result. It lists specific methods (e.g., 2SLS, Anderson-Rubin, CLR) and states the validation tier, assumptions, and failure modes, making the purpose distinct and informative. It differentiates from siblings like 'iv', 'ivreg', 'weakrobust' by emphasizing the bundled, single-call nature and the inclusion of the latest LATE caveats.

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 implies usage for IV analysis problems, provides pre-conditions (instrument plausibly affecting treatment, endogenous treatment, outcome, strong first stage), and failure modes (weak first stage -> use weak-IV-robust inference). It mentions alternatives (sp.iv, sp.anderson_ru...) but is cut off, and doesn't explicitly describe scenarios when to prefer this over those alternatives. Still, the guidance on assumptions and failure modes is substantial.

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

ivqregC
Read-only

Instrumental-variable quantile regression (Chernozhukov-Hansen). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
tauNoQuantile(s) of interest in ``(0, 1)``.
exogNoExogenous controls ``X`` (may be empty).
alphaNoSignificance level for confidence intervals.
endogYesEndogenous regressor(s) ``D``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_gridNoGrid resolution for the profile search over ``alpha`` (scalar case) -- ignored when ``endog`` is multi-dimensional.
refineNoAfter the grid search, refine ``alpha`` with a local optimizer.
verboseNoverbose parameter (bool).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bootstrapNoNumber of pairs-bootstrap replications for standard errors. ``0`` disables bootstrap; asymptotic rank-test inversion is not implemented in this MVP.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
instrumentsYesInstrument(s) ``Z``. Must be at least as many as ``endog``.
add_constantNoadd_constant parameter (bool).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already carry `readOnlyHint: true`, so the description does not need to restate safety. It adds no behavioral context beyond the method name, and the 'Validation' sentence is about evidence tier rather than tool behavior, which is mildly irrelevant.

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 description is short and front-loaded with the method, but the second sentence about 'Validation: validated evidence tier...' does not help an agent select or invoke the tool. It is compact yet contains an unhelpful clause.

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 18 parameters, 4 required, and a specialized estimator, the description is too sparse to orient the agent on required inputs or when this is the right tool. Output schema and 100% parameter coverage mitigate some gaps, but no usage context is provided.

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 100%, so parameters like `endog`, `instruments`, `tau`, and `alpha` are already documented. The description adds no parameter-level guidance, but the baseline of 3 is appropriate because the schema carries the full burden.

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 exact estimator ('Instrumental-variable quantile regression') and cites the method (Chernozhukov-Hansen), so an agent can distinguish it from plain `ivreg` or `qreg`. It lacks an explicit verb like 'estimates' and doesn't spell out the model, but the meaning 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?

There is no guidance on when to choose this tool over the many sibling estimators (`ivreg`, `qreg`, `qte`, `sqreg`). The method name implies endogeneity + quantile effects, but the description never states conditions, exclusions, or alternatives.

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

ivregA
Read-only

2SLS instrumental-variables regression with robust or clustered SEs and first-stage F diagnostics. Formula syntax: 'y ~ x_exog + (d_endog ~ z_instrument)'. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNohc1
formulaYes'y ~ x + (d ~ z)' style.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

With readOnlyHint=true, no mutation warning is needed; the description adds behavioral context by disclosing robust/clustered SEs and first-stage F diagnostics in the output. The 'Validation: certified parity evidence' note is a bit opaque but not contradicted by 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?

The description is compact and front-loads the estimator and syntax. The final 'Validation: certified parity evidence' sentence is vague and adds little operational value, preventing a top score.

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 an 8-parameter tool with a rich schema and an output schema, the description covers the core identity, the critical formula syntax, and the key diagnostics. It is slightly incomplete on clustering semantics and alternative-tool routing, but nothing essential to invoking the tool is missing.

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 88%, so the schema already documents most parameters, and the formula example adds only slightly more meaning than the schema's own formula description. The claim of clustered SEs is not clearly mapped to any parameter such as robust, since the enum only lists hc1/hc2/hc3/nonrobust.

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 opens with a specific estimator ('2SLS instrumental-variables regression') and its distinctive features (robust/clustered SEs, first-stage F diagnostics), which sets it apart from siblings like iv, iv_diag, and ivqreg. The formula template clarifies the resource being modeled.

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 formula syntax implies the intended use case: an outcome, exogenous regressors, an endogenous regressor and instruments. However, it does not explicitly state when to choose this over sibling IV-focused tools or when not to use it, so guidance is implied rather than made explicit.

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

jackknife_seB
Read-only

Leave-one-cluster-out jackknife standard errors. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesA fitted regression result from ``sp.regress()``.
clusterYesName of the cluster variable in ``data``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so the description does not need to restate that this is a read-only operation. However, the description adds no further behavioral context (e.g., side effects, performance characteristics, or return format). The validation sentence is not behavior-related. With annotations covering the safety profile, a score of 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?

The description is concise, with the core purpose in the first sentence. The second sentence about validation appears to be tangential metadata that does not contribute to the tool's operational use, but the overall length is appropriate and the primary content is front-loaded.

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 schema is rich and includes an output schema (not shown), covering return values and parameter details. However, the description does not explain when to use this over related clustering methods or provide usage context beyond the schema. Given the comprehensive schema, the description is minimally adequate but lacks strategic guidance.

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 100%, meaning all 9 parameters are documented in the input schema with detailed descriptions (e.g., 'detail' enum, 'as_handle' behavior). The description itself does not add any additional parameter meaning, so the baseline score of 3 applies.

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 clearly states the tool computes leave-one-cluster-out jackknife standard errors, which is a specific verb-resource combination that distinguishes it from sibling tools like cluster_robust_se or cr3_jackknife_vcov. The second sentence about validation is extraneous and does not add to purpose clarity, but the core purpose 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?

There is no guidance on when to use this tool versus alternatives such as cluster_robust_se or subcluster_wild_bootstrap. No prerequisites or conditions are mentioned, leaving the agent to infer usage context from the schema alone.

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

jiveC
Read-only

Jackknife Instrumental Variables Estimation (JIVE). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
zNoInstrument, proxy, or auxiliary variable used by this estimator.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoRobust standard-error or covariance estimator option.nonrobust
x_exogNox_exog parameter (Optional[List[str]]).
clusterNoCluster identifier column for clustered standard errors.
variantNo'jive1' (Angrist et al. 1999) or 'jive2' (alternative).jive1
x_endogYesx_endog parameter (List[str]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds only a validation-tier label, which is not behavioral disclosure and does not explain side effects, output characteristics, or prerequisites.

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 description is short and readable, but the validation sentence is not actionable and could be omitted without loss. It is concise yet under-informative rather than economically informative.

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 complex estimator with 14 parameters and multiple variants, the description is far too thin. It lacks guidance on selecting variants, interpreting results, or when this tool is appropriate, leaving the agent to rely entirely on the schema and sibling names.

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 100%, so every parameter is documented in the input schema. The description adds no parameter-level meaning, meeting the baseline expected when the schema fully covers semantics.

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 estimator (JIVE) but lacks a verb like 'estimates' or 'computes', making it read as a title rather than an actionable purpose. It does not differentiate itself from other IV estimators among siblings such as ivreg or liml.

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 is provided on when to use JIVE versus alternative estimators. The only additional context, a validation tier note, is metadata about evidence quality rather than usage direction.

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

johansenB
Read-only

Johansen (1991) cointegration test. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
lagsNoNumber of lags in the VECM.
testNo'trace' or 'maxeig' (maximum eigenvalue).trace
alphaNoSignificance level for confidence intervals and tests.
trendNo'n' (none), 'c' (constant), 'ct' (constant + trend).c
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
variablesNoVariables to test.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, which covers the safety profile. The description adds a mention of validation tier but no additional behavioral context like required permissions or output shape. It is not contradictory, so a 3 is appropriate given the annotation coverage.

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 concise, two short sentences, with the primary purpose front-loaded. However, it is so minimal that it omits any usage context, making it slightly under-informative for the complexity of the tool.

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?

Despite having an output schema, the description is extremely brief for a tool with 11 parameters and many siblings. It lacks any guidance on when to invoke it, what distinguishes it from other tests, or what the result represents. The agent would have to infer usage from the name alone.

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 100%, so all parameters are documented in the schema. The description itself adds no parameter-specific meaning beyond what the schema provides, meeting the baseline of 3.

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 clearly states that the tool performs the Johansen (1991) cointegration test, giving a specific verb and resource. It does not differentiate from siblings like engle_granger or granger_causality, 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 guidance on when to use this test over alternatives (e.g., Engle-Granger) or any context about the appropriate data conditions. The description only names the test without any 'when-to-use' or 'when-not-to-use' information.

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

kan_dlateA
Read-only

Deprecated alias for :func:dist_iv. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Selection-on-observables (unconfoundedness + overlap) or, for IV variants, instrument validity; For IV-QTE: rank invariance / rank similarity (monotonicity of the structural quantile function). Pre-conditions: Covariates, treatment, and outcome; for IV-quantile methods, a valid instrument; Enough data to estimate the outcome distribution across quantiles. Failure modes: Estimated conditional quantiles cross (non-monotone), or tail quantiles are unstable -> Use rearrangement / monotonization and avoid extreme quantiles where data are sparse. Alternatives: sp.qte, sp.iv, sp.dml. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoquantiles parameter (Optional[np.ndarray]).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
instrumentYesinstrument parameter (str).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover read-only and closed-world hints. The description adds deprecation status, detailed assumptions, pre-conditions, failure modes (non-monotone quantiles, unstable tails) with remedies, and minimum sample size. This is rich behavioral context far beyond what annotations provide, with no contradiction.

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 organized with clear labels (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and opens with the deprecation notice. Each segment carries useful content, though the block is dense and technical, making it slightly harder to scan quickly for an agent.

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 full schema (100% parameter coverage), an output schema, and annotations, the description supplies all decision-relevant context: deprecation, assumptions, preconditions, failure modes with workarounds, alternatives, and minimum sample size. An agent has enough information to select the tool, avoid it, or take corrective action based on failure modes.

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 100%, so the schema already describes all 14 parameters. The description mentions covariates, treatment, outcome, and instrument in the pre-conditions, and alludes to quantiles in the failure-mode section, adding slight context. But it does not clarify the cryptic `quantiles` schema description or add parameter-specific semantics, so baseline 3 is appropriate.

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?

Description explicitly identifies the tool as a deprecated alias for :func:`dist_iv`, naming the specific resource it delegates to and distinguishing it from siblings. However, it never states the underlying action of dist_iv (i.e., what is actually estimated), relying on the alias target and technical assumptions (IV-QTE, quantiles) to convey the purpose. This is clear but not fully self-contained.

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?

The description gives explicit when-not-to-use guidance by labeling the tool 'deprecated' and listing alternatives: sp.qte, sp.iv, sp.dml. It also provides preconditions, assumptions, and typical minimum N, letting an agent decide whether this tool is appropriate or whether to use a non-deprecated sibling.

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

kaplan_meierB
Read-only

Kaplan-Meier non-parametric survival function estimator. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for confidence intervals (Greenwood formula).
eventYesColumn name for event indicator (1 = event, 0 = censored).
groupNoColumn name for group variable (stratification).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
durationYesColumn name for duration / follow-up time.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

The readOnlyHint annotation already covers non-mutation, and the description adds that the estimator is non-parametric, which is useful behavioral context. However, the second sentence 'Validation: certified parity evidence' is vague and provides no meaningful behavioral disclosure about censoring, output structure, or limitations.

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 primary sentence is concise and front-loaded, but the 'Validation: certified parity evidence' sentence does not meaningfully help an agent select or invoke the tool. The description could be tighter and more informative.

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 a complete input schema, an output schema, and readOnly annotations, much of the operational context is covered. Still, the description omits when Kaplan-Meier should be preferred over regression-based survival tools and does not clarify the role of the group parameter or hypothesis testing.

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 100%, so all ten parameters are already documented in the schema. The tool description itself adds no parameter-level meaning beyond what the schema provides, leaving the baseline of 3 appropriate.

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 clearly identifies the tool as a Kaplan-Meier non-parametric survival function estimator. The verb is implied rather than explicit, and it does not differentiate from survival siblings such as cox, survreg, or logrank_test, but the core purpose is recognizable.

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 explicit guidance is given about when to use this tool versus alternatives like cox, survreg, or survival_sensitivity. The description does not mention that Kaplan-Meier is appropriate for unadjusted survival estimation or that it does not handle covariates.

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

kernel_ivA
Read-only

Kernel IV regression with uniform confidence bands (Lob et al. 2025). Estimates the structural function h*(d) = E[Y | do(D=d)] via kernel-weighted local averaging under a continuous instrument Z, with wild-bootstrap uniform SEs. Assumptions: Instrument relevance (non-zero first stage); Exclusion restriction: the instrument affects the outcome only through the treatment; Independence/exogeneity of the instrument; for LATE, monotonicity (no defiers). Pre-conditions: An instrument plausibly affecting treatment, an endogenous treatment, and an outcome; A strong first stage (assess instrument strength before interpreting estimates); formula includes the (endog ~ instruments) parenthesised block. Failure modes: Weak first stage -- biased point estimates and unreliable conventional SEs -> Report first-stage F / effective F and use weak-IV-robust inference (Anderson-Rubin); First-stage F < 10 (Stock-Yogo 5% bias) -> Use weak-IV-robust inference (Anderson-Rubin) or LIML; Over-identification test rejects (sp.estat 'overid') -> At least one instrument is invalid; drop instruments or switch to just-identified LIML. Alternatives: sp.iv, sp.anderson_rubin_ci, sp.dml, sp.deepiv. Typical minimum...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
gridNoGrid of d-values (default 30 quantile-evenly spaced)
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
ridgeNoTikhonov regularisation
treatYesContinuous treatment D
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoSilverman default
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
instrumentYesContinuous instrument Z
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only provide readOnlyHint=true, so the description carries the burden of behavioral disclosure. It does this thoroughly: wild-bootstrap uniform SEs, weak-first-stage bias and unreliable conventional SEs, over-identification failure modes, and recommended remedies. There is no contradiction with the read-only 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?

The description is clearly structured with sections for assumptions, pre-conditions, failure modes, and alternatives, and the main purpose is front-loaded. It is somewhat long and includes post-estimation decision guidance beyond what is strictly required for invocation, but the organization keeps it usable.

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 complex IV tool with an output schema present, the description covers the method, assumptions, preconditions, failure modes, and alternatives. Nothing essential needed to select and invoke the tool correctly is missing.

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?

The schema covers 100% of the parameters with helpful descriptions, so the baseline is 3. The description adds methodological context but does not meaningfully elaborate on individual parameters such as grid, bandwidth, ridge, or n_boot. The note about the parenthesised formula block is somewhat useful yet not directly mapped to the schema's separate instrument/treat/y fields.

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 opens with a specific verb and resource: it estimates the structural function h*(d) = E[Y | do(D=d)] via kernel-weighted local averaging under a continuous instrument Z. It names the method (Kernel IV regression), the exact target, and the estimation strategy, making it clearly distinguishable from siblings like iv, liml, and dml.

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?

The description states explicit assumptions (instrument relevance, exclusion restriction, independence, monotonicity for LATE) and preconditions (plausible instrument, endogenous treatment, outcome, strong first stage). It also gives concrete switch-conditions, such as using weak-IV-robust inference or LIML when first-stage F < 10, and names specific alternatives.

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

kink_unifiedA
Read-only

Run RDD + RKD + Bunching on the same data. Assumptions: The counterfactual density would be smooth through the threshold absent the policy; Excess mass at the threshold reflects the behavioural elasticity of interest; No other discontinuity coincides with the threshold. Pre-conditions: A behavioural choice variable (earnings, hours, ...) with a known kink or notch in the budget/choice set; A visible empirical density of the running variable around the threshold. Failure modes: Round-number heaping or a coincident policy contaminates the bunching mass -> Exclude heaping points, widen the excluded region, and test the counterfactual polynomial order. Alternatives: sp.rdrobust, sp.rkd. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable (used by RDD/RKD).
alphaNoSignificance level for confidence intervals and tests.
cutoffNocutoff parameter (float).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
runningYesRunning variable (also forms density for Bunching).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoBandwidth used for local smoothing or kernel weighting.
bin_widthNobin_width parameter (Optional[float]).
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
polynomial_orderNopolynomial_order parameter (int).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses statistical assumptions (smooth counterfactual density, excess mass interpretation, no coincident discontinuity), failure modes (heaping, coincident policy), and mitigations. This is substantial behavioral context an agent needs to interpret results and avoid misuse.

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 first sentence front-loads the purpose. Assumptions, pre-conditions, failure modes, alternatives, and typical sample size are each succinctly labeled and directly useful. No filler or redundant sentences.

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 complex tool with 13 parameters and an existing output schema, the description covers assumptions, preconditions, failure modes, alternatives, and minimum N. Return-value details are unnecessary because the output schema exists, and parameter details are fully in the input schema.

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?

The input schema has 100% description coverage for all 13 parameters, so the baseline is 3. The description does not add parameter-specific details, but it does not need to because the schema already documents every parameter clearly.

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, resource, and scope: 'Run RDD + RKD + Bunching on the same data.' It also names alternatives (sp.rdrobust, sp.rkd), making it easy to distinguish this combined tool from single-method siblings.

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 provides pre-conditions (behavioral choice variable with known kink/notch, visible density), failure modes, and explicitly names alternatives. It does not explicitly say 'use this only when you want all three methods', but the alternatives and preconditions convey the selection logic well.

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

kitagawa_decomposeB
Read-only

Kitagawa (1955) two-factor rate decomposition. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
byYesCategory variable(s) defining cells.
rateYesColumn holding the category-specific rate (or 0/1 outcome at the individual level).
groupYesBinary group indicator.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
weightsNoCell population weights. If None, each row treated as individual-level data (weight = 1).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
normalizeNo- 'a': rate effect evaluated at A's composition - 'b': rate effect evaluated at B's composition - 'symmetric': average (default)symmetric
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a non-mutating computation, so the description does not need to restate that. The added 'certified parity evidence' note hints at validation behavior but is cryptic and does not meaningfully disclose operational details, though it does not contradict 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?

The description is only two short sentences and avoids repeating schema content or parameter details. The method name is front-loaded, but the second 'Validation' sentence is opaque and adds limited clarity, preventing a perfect score.

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?

Given the rich input schema, output schema, and readOnly annotation, the description is minimally viable for invoking the tool correctly. It is less complete for helping an agent choose among the many decomposition-related siblings or understand the intended interpretation of the two-factor decomposition, but the schema fills most technical gaps.

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?

The schema description coverage is 100%, so the input schema already documents all 11 parameters thoroughly. The description adds no parameter-level semantics beyond naming the decomposition method, which matches the baseline for full schema coverage.

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 method (Kitagawa 1955) and the resource/action (two-factor rate decomposition), which is specific enough to identify what the tool does. It differentiates the tool from generic decomposition siblings by method name, though it does not elaborate on what the two factors are.

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 'two-factor rate decomposition' implies this tool is appropriate when a Kitagawa-style rate decomposition is needed, and the method name distinguishes it from related decomposition tools. However, there is no explicit when-to-use or when-not-to-use guidance, nor any mention of alternative tools.

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

kitagawa_testC
Read-only

Kitagawa (2015) specification test for the validity of LATE.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable name.
seedNoRandom seed for reproducibility.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications for the p-value.
n_gridNoNumber of grid points for evaluating the CDF conditions.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesEndogenous binary treatment variable (D).
instrumentYesBinary instrument variable (Z).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, and the description adds no behavioral detail: it does not state what null hypothesis is tested, what assumptions are checked, or what kind of result is produced. It does not contradict the annotations, but it also does not add meaningful behavioral context beyond them.

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 a single sentence with no filler and front-loads the citation and core construct. It is concise, though arguably too sparse to be considered fully well-rounded, which prevents a 5.

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 tool with 12 parameters and many sibling econometric tests, a one-line description leaves the agent to infer the test's assumptions, interpretation, and place among alternatives. The existence of an output schema does not compensate for missing usage context.

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 100%, so the input schema already documents all 12 parameters in detail. The tool description adds no parameter-level semantics, but the schema carries the burden effectively, making a baseline 3 appropriate.

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 test ('Kitagawa (2015) specification test') and states its object ('validity of LATE'), giving an agent a concrete semantic anchor. However, it does not explain what 'validity of LATE' entails or differentiate it from nearby tools such as kitagawa_decompose, so it falls just 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 use this test versus other LATE/IV specification tests, no exclusions, and no mention of prerequisite conditions. The description merely identifies the test without contextualizing its use.

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

lasso_ivA
Read-only

LASSO-selected instrumental variables. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Relevance: instruments predict the endogenous regressor (first-stage F >= 10 rule of thumb); Exclusion: instruments affect outcome only through the endogenous regressor; Monotonicity (for LATE interpretation under heterogeneous effects). Pre-conditions: formula includes the (endog ~ instruments) parenthesised block; at least as many instruments as endogenous regressors (order condition); instruments are not themselves endogenous in the outcome equation. Failure modes: First-stage F < 10 (Stock-Yogo 5% bias) -> Use weak-IV-robust inference (Anderson-Rubin) or LIML; Over-identification test rejects (sp.estat 'overid') -> At least one instrument is invalid; drop instruments or switch to just-identified LIML; Hausman endogeneity test fails to reject -> OLS may be consistent and more efficient; report both. Alternatives: sp.deepiv, sp.bartik, sp.proximal, sp.regress. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
dNod parameter (Optional[Any]).
yYesOutcome variable column name or outcome array.
zNoFull set of candidate instruments.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoRobust standard-error or covariance estimator option.robust
x_exogNox_exog parameter (Optional[List[str]]).
clusterNoCluster identifier column for clustered standard errors.
penaltyNoInstrument selection criterion: 'bic', 'aic', 'cv'.bic
x_endogNox_endog parameter (Optional[List[str]]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only provide readOnlyHint=true and openWorldHint=false; the description adds substantial behavior-relevant context: first-stage F thresholds, overidentification and Hausman failure modes, and a typical minimum N. It does not contradict the read-only annotation because it describes diagnostics, assumptions, and validation rather than writes.

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 dense but well-labeled (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), and the core purpose is front-loaded. Some Stata-specific references ('sp.estat', the formula block) add minor noise, but there is 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?

For a complex IV tool with 15 parameters, the description covers assumptions, failure modes, alternatives, validation tier, and sample-size guidance, while an output schema exists to document return values. The only real gap is the slight mismatch between the formula-based precondition and the column-based input schema.

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 100% for all 15 parameters, so the description does not need to repeat parameter documentation. The only parameter-adjacent content is the parenthesised formula precondition and the LASSO selection idea, which map only loosely to schema fields such as z and penalty.

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 opening phrase 'LASSO-selected instrumental variables' identifies the resource and method, and the LASSO-selection emphasis distinguishes it from generic iv/ivreg siblings. However, it lacks an explicit verb such as 'estimates' or 'selects,' so the precise operation 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 Guidelines4/5

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

The description gives pre-conditions (order condition, formula block, exogeneity of instruments), failure-mode guidance (first-stage F<10, overidentification, Hausman), and an Alternatives list (sp.deepiv, sp.bartik, sp.proximal, sp.regress). It stops short of an explicit when-to-use rule, such as 'use when there are many candidate instruments and LASSO selection is desired.'

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

lasso_selectB
Read-only

LASSO-based variable selection. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesCandidate independent variables.
yYesDependent variable column.
epsNoRatio of lambda_min / lambda_max.
tolNoConvergence tolerance.
seedNoRandom seed for CV fold assignment.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoHow to choose the regularisation parameter lambda.cv
n_foldsNoNumber of cross-validation folds (only for ``method="cv"``).
verboseNoPrint progress.
max_iterNoMaximum coordinate descent iterations per lambda.
n_lambdaNoNumber of lambda values in the grid.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

The annotations already establish readOnlyHint=true, so the safety profile is covered. The description adds a non-obvious 'validated evidence tier' claim that goes beyond the annotations, although it is cryptic and leaves the practical meaning of the tier unexplained.

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 short and front-loads the core purpose in the first clause. The validation-tier sentence is compact and adds context, though it could be clearer about how it should inform an agent's decision.

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 rich schema and available output schema cover parameter and return semantics, so the description is minimally viable. However, for a 16-parameter statistical tool in a large sibling family, the description omits selection context and fails to explain the validation-tier phrase.

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?

All 16 parameters are documented in the input schema with types, defaults, and descriptions, so the description does not need to repeat parameter semantics. It adds no parameter detail of its own, making the schema-coverage baseline of 3 appropriate.

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 explicitly identifies the operation as 'LASSO-based variable selection,' which is a clear verb + resource statement. It does not, however, distinguish lasso_select from sibling LASSO-family tools such as rlassologit or lasso_iv.

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 is given about when to use lasso_select instead of nearby alternatives, nor are prerequisites or exclusions stated. The validation-tier sentence does not help an agent decide between sibling tools.

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

lee_boundsA
Read-only

Compute Lee (2009) bounds for ATE under sample selection. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Only weak (set-identifying) assumptions are imposed; the result is an interval, not a point; Lee bounds add monotonicity of selection; Oster's delta adds proportional selection on observed vs. unobserved. Pre-conditions: The data needed for the point-identifying analysis, plus the weakest credible identifying restriction; For Lee bounds: a binary selection/attrition indicator. Failure modes: Bounds are too wide to be informative -> Add a credible auxiliary restriction (monotone treatment response, instrument) to tighten the bounds. Alternatives: sp.oster_delta, sp.lee_bounds, sp.manski_bounds. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable (may have NaN for selected-out units).
alphaNoSignificance level.
treatYesBinary treatment variable (0/1).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
selectionYesBinary selection/retention indicator (1 = observed, 0 = missing).
covariatesNoNot used in basic Lee bounds, reserved for conditional bounds.
n_bootstrapNoBootstrap iterations for inference.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations only declare readOnlyHint=true, so the description covers the rest. It states the tool imposes weak assumptions, returns an interval, and adds monotonicity of selection. However, it doesn't disclose details like bootstrap defaults, output structure, or the effect of alpha parameter. It doesn't contradict readOnlyHint.

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 fairly dense with useful info (validation, assumptions, failure modes, alternatives, min N), but it's a bit long and could be front-loaded with the tool's purpose more clearly. No fluff, but some reorganization would improve scannability.

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?

The description covers assumptions, pre-conditions, failure modes, alternatives, and minimum N. Combined with the output schema and full parameter documentation, an agent has enough to call this correctly. The description adds value beyond structured fields by explaining the interval nature and selection requirement.

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 100%, so parameters are already well documented. The description adds context for 'selection' (binary selection/attrition indicator) and mentions covariates are reserved for conditional bounds, but doesn't add syntax beyond the schema. Baseline 3 is appropriate.

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 clearly states the tool computes Lee (2009) bounds for ATE under sample selection and explains it returns an interval, not a point estimate. It distinguishes from related bounds tools by name (oster_delta, lee_bounds, manski_bounds).

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 provides alternatives (oster_delta, lee_bounds, manski_bounds) and failure modes (bounds too wide -> add auxiliary restriction). However, it doesn't explicitly state when to use Lee bounds vs. these alternatives, nor when not to use it, though the assumptions section implies context.

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

limlA
Read-only

Limited Information Maximum Likelihood (LIML) estimator. Validation: certified parity evidence. Assumptions: Relevance: instruments predict the endogenous regressor (first-stage F >= 10 rule of thumb); Exclusion: instruments affect outcome only through the endogenous regressor; Monotonicity (for LATE interpretation under heterogeneous effects). Pre-conditions: formula includes the (endog ~ instruments) parenthesised block; at least as many instruments as endogenous regressors (order condition); instruments are not themselves endogenous in the outcome equation. Failure modes: First-stage F < 10 (Stock-Yogo 5% bias) -> Use weak-IV-robust inference (Anderson-Rubin) or LIML; Over-identification test rejects (sp.estat 'overid') -> At least one instrument is invalid; drop instruments or switch to just-identified LIML; Hausman endogeneity test fails to reject -> OLS may be consistent and more efficient; report both. Alternatives: sp.deepiv, sp.bartik, sp.proximal, sp.regress. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yNoOutcome variable.
zNoExcluded instruments.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
fullerNoFuller's constant (typically 1 or 4). If None, pure LIML.
robustNoRobust standard-error or covariance estimator option.nonrobust
x_exogNoExogenous regressors (included instruments).
clusterNoCluster identifier column for clustered standard errors.
formulaNoModel formula using patsy/R-style syntax.
x_endogNoEndogenous regressors.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With annotations only declaring readOnlyHint=true and openWorldHint=false, the description carries the behavioral burden and goes well beyond it: it discloses the maintained assumptions, testable pre-conditions, concrete failure diagnostics, and remedy instructions. The readOnlyHint is consistent with a pure estimator that produces fitted results. No contradictions.

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 dense but purposefully organized into labeled blocks (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), with the core estimator named first. Every sentence carries operational value (no filler), though the sp.*-prefixed names ('sp.estat', 'sp.deepiv') that don't exactly match sibling tool names (deepiv, estat, bartik exist; sp. variants do not) introduce minor routing confusion and slightly inflate length, keeping it below a perfect 5.

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 15-parameter econometric estimator with an output schema, the description is essentially complete: assumptions, identification pre-conditions, ordered failure modes with remedies, alternative tools, and a typical minimum N are all present. The output schema and rich per-parameter schema descriptions handle return values and payload details, so nothing an agent needs to decide whether and how to call this tool 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 coverage is 100%, so the schema already documents all 15 parameters, and the high-coverage baseline is 3. The description adds genuine semantic value for key parameters not in the schema: the formula parameter gains an explicit syntax requirement (compound formula 'formula includes the (endog ~ instruments) parenthesised block'), and the Z/x_endog relationship gets the order condition. alpha, detail, robust, cluster, as_handle, result_id, and the data-loading parameters receive no addenda, but the schema covers them sufficiently, so 4 is appropriate.

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 opens with the exact estimator name ('Limited Information Maximum Likelihood (LIML) estimator'), states a clear validation status ('certified parity evidence'), and elaborates with assumptions, pre-conditions, and failure modes. It distinguishes the tool from related IV estimators in the sibling list (iv, ivreg, auto_iv) by specifying its identification requirements and when LIML is preferred over alternatives.

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?

The 'Failure modes' section is effectively an explicit routing rule: first-stage F < 10 -> use Anderson-Rubin or LIML; over-identification rejection -> drop instruments; Hausman failure -> OLS may be better. Alternatives are named explicitly (sp.deepiv, sp.bartik, sp.proximal, sp.regress, sp.estat), giving the agent concrete when-to-use/when-to-switch guidance. This is textbook usage guidance beyond a bare statement of what the tool does.

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

lincomB
Read-only

Estimate a linear combination of coefficients with inference. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesFitted model.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
expressionYesLinear combination. Examples: - ``"x1 + x2"`` -- beta_x1 + beta_x2 - ``"x1 - x2"`` -- beta_x1 - beta_x2 - ``"2*x1 + 3*x2"`` -- 2*beta_x1 + 3*beta_x2
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

The readOnlyHint annotation already signals a safe read operation, so the description is not required to restate that. It adds 'with inference' as a behavioral trait and an odd 'Validation: validated evidence tier' note, but it does not disclose operational details like caching behavior or side effects. The description neither contradicts the annotations nor adds substantial behavioral context beyond them.

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 first sentence is concise and front-loaded with the core purpose. The second sentence, 'Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact),' reads like metadata filler and does not help an agent select or invoke the tool, so not every sentence earns 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?

With an output schema, 100% parameter coverage, and readOnlyHint annotations, the structured information is strong and the description can afford to be brief. However, the missing guidance about when to use lincom versus closely related siblings, plus the confusing validation sentence, keeps it at a minimally viable rather than fully complete level.

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 100%, so the input schema already documents all nine parameters, including expression syntax examples and detail-level behavior. The description's phrase 'linear combination of coefficients' loosely aligns with the expression parameter but adds no meaning beyond the schema.

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 opens with a specific verb ('Estimate') and a concrete resource ('a linear combination of coefficients'), and 'with inference' clarifies that it produces more than a point estimate. It is clear enough to distinguish lincom from raw estimation tools, though it does not explicitly differentiate it from close siblings like margins or contrast.

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 implies a post-estimation use case (linear combination of coefficients), but it never states when to prefer this over alternatives such as margins, contrast, or rdhte_lincom. There are no explicit exclusions or routing hints, which is a meaningful gap given the large sibling list.

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

lingamA
Read-only

Fit DirectLiNGAM (Shimizu 2011). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Causal Markov condition and faithfulness (PC/GES/FCI); Causal sufficiency for PC/GES (no latent confounders); FCI relaxes this; Acyclicity; LiNGAM additionally assumes a linear non-Gaussian model. Pre-conditions: Constraint-/score-based discovery needs i.i.d. observational data with enough samples for reliable conditional-independence tests; Invariance-based discovery (ICP) needs data labelled by environment / intervention. Failure modes: Unstable skeleton / many undirected edges -- faithfulness or sample size is the likely culprit -> Increase the sample, relax the CI-test threshold, or switch to FCI if latent confounders are plausible. Alternatives: sp.pc_algorithm, sp.fci, sp.ges, sp.lingam. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
standardizeNoZero-mean / unit-variance each variable before the algorithm.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=false. The description adds substantial behavioral context beyond this: it discloses the validation evidence tier, the statistical assumptions, failure modes (unstable skeleton, many undirected edges), and remedies. It doesn't contradict the annotations. The only minor gap is that it doesn't explicitly state what the output contains, but the output schema exists and the description mentions validation evidence tier. The description adds meaningful behavioral context about when results are trustworthy and what can go wrong.

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 dense but well-organized: it starts with the core action, then validation, assumptions, pre-conditions, failure modes, alternatives, and typical N. Every sentence adds value. It's longer than ideal but the content is substantive and structured with clear labels. It earns a 4 rather than 5 because it's somewhat long and could be tightened, but it's not bloated.

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 tool's complexity (causal discovery with multiple assumptions and failure modes), the description is remarkably complete. It covers validation evidence, assumptions, pre-conditions, failure modes with remedies, alternatives, and sample size guidance. The output schema exists, so return values don't need to be described. An agent has everything needed to decide whether to call this tool and how to interpret potential issues.

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 100%, so the schema already documents all 7 parameters. The description doesn't add parameter-level detail beyond what the schema provides. It mentions assumptions and data requirements but doesn't map them to specific parameters. Baseline 3 is appropriate since the schema carries the full burden and the description doesn't need to compensate.

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 opens with 'Fit DirectLiNGAM (Shimizu 2011)', which is a specific verb and resource. It clearly identifies the algorithm being fit. However, it doesn't explicitly distinguish itself from the sibling tools sp.pc_algorithm, sp.fci, sp.ges, and sp.lingam in the opening; the differentiation is only implicit through the algorithm name and the alternatives list at the end. The name 'lingam' is somewhat generic, but the description clarifies it's DirectLiNGAM specifically.

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?

The description provides explicit when-to-use guidance: it lists assumptions (Causal Markov, faithfulness, causal sufficiency for PC/GES, FCI relaxes this, acyclicity, linear non-Gaussian model), pre-conditions (i.i.d. observational data for constraint-based methods, environment-labelled data for ICP), and failure modes with remedies. It also names alternatives (sp.pc_algorithm, sp.fci, sp.ges, sp.lingam) and gives a typical minimum N of 500. This is comprehensive usage guidance.

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

list_replicationsB
Read-only

List all available replication datasets and guides.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so the read-only nature is covered. The description adds that it lists 'datasets and guides' but doesn't disclose the effect of parameters like as_handle (which caches a result) or how the listing behaves. With annotations covering safety, a 3 is appropriate; it adds minimal behavioral context beyond annotations.

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, direct sentence with no wasted words. It is front-loaded and appropriately sized for a simple listing action.

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 description is incomplete given the complex schema: it says 'list' but includes parameters for data_path, result_id, as_handle, etc., which are typical of analysis tools, not a pure listing. An agent cannot understand how these parameters apply to listing replication datasets. The output schema exists but the description doesn't reconcile the mismatch, making it difficult to use correctly.

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 100% with detailed parameter descriptions, so the schema carries the semantic load. The description adds nothing about parameters; baseline 3 is correct.

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 clear action ('List all available replication datasets and guides') with a specific resource. It distinguishes from sibling 'replicate' which likely executes a replication, so the agent can tell them apart.

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, no exclusions or prerequisites. The agent is left to infer that it should be used when a listing is needed, but nothing explicitly says so.

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

llm_dag_proposeA
Read-only

Propose a candidate DAG from variable names + domain description. Assumptions: LLM-proposed graphs / priors are hypotheses to validate, not statistical identification; Human review or data-driven falsification is required before any causal claim. Pre-conditions: Domain context and a bounded list of candidate variables; A configured, logged LLM provider for reproducibility. Failure modes: Proposals are unstable across runs or include hallucinated variables/edges -> Fix the model release and seed, add constraints, and cross-check with constraint-based discovery. Alternatives: sp.llm_dag_constrained, sp.causal_discovery, sp.dag. Typical minimum N: 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed for reproducible stochastic steps.
clientNoAn LLM client implementing ``.complete(prompt: str) -> str``. If ``None``, use the deterministic heuristic backend.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
domainNoFree-text domain description (e.g. "labor economics, education and earnings"). Helps the LLM but ignored by the heuristic backend.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
variablesYesNames of variables in the dataset.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Even with readOnlyHint=true, the description goes well beyond annotations by stating that outputs are hypotheses to validate, not statistical identification, and that human review or data-driven falsification is required. It also discloses instability and hallucination failure modes with concrete fixes, which is valuable behavioral context far beyond the structured hints.

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 information-dense but well organized with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Every sentence adds distinct valueβ€”no fillerβ€”and the core purpose is front-loaded in the first sentence.

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 tool with 10 parameters and a rich output schema, the description covers the conceptual framing, prerequisites, failure modes, mitigations, alternatives, and even a minimum-N heuristic. The output schema handles return-value details, so nothing essential is missing for an agent to call this tool correctly.

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 100%, and each parameter already has a detailed description in the schema. The tool description reinforces that `variables` and `domain` are the core inputs, but adds no new parameter-level semantics beyond what the schema provides, so the baseline of 3 is appropriate.

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 states a specific verb ('propose'), a concrete resource ('candidate DAG'), and the inputs ('variable names + domain description'). It also explicitly names sibling alternatives later, so an agent can distinguish this from sp.dag, sp.causal_discovery, and sp.llm_dag_constrained without opening their 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?

The description provides clear pre-conditions (domain context, bounded variables, configured/logged LLM provider), failure modes, and a list of alternative tools. However, it does not explicitly state when to choose one alternative over another (e.g., 'use sp.llm_dag_constrained when you already have structural constraints'), so the routing guidance is helpful but not fully explicit.

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

llm_sensitivity_priorsA
Read-only

Propose sensitivity-analysis priors for the substantive setting. Assumptions: LLM-proposed graphs / priors are hypotheses to validate, not statistical identification; Human review or data-driven falsification is required before any causal claim. Pre-conditions: Domain context and a bounded list of candidate variables; A configured, logged LLM provider for reproducibility. Failure modes: Proposals are unstable across runs or include hallucinated variables/edges -> Fix the model release and seed, add constraints, and cross-check with constraint-based discovery. Alternatives: sp.llm_dag_constrained, sp.causal_discovery, sp.dag. Typical minimum N: 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientNoLLM client with ``.complete(prompt: str) -> str``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
domainNodomain parameter (str).health
outcomeYesOutcome variable column name or outcome array.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesTreatment indicator, treatment variable, or treatment array.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only provide readOnlyHint=true and openWorldHint=false, but the description adds rich behavioral context: failure modes ('Proposals are unstable across runs or include hallucinated variables/edges'), the requirement for validation ('Human review or data-driven falsification is required before any causal claim'), and assumptions about statistical identification. This goes well beyond the annotations without contradicting them.

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 organized with clear sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and is front-loaded with the purpose. While it is longer than average, every section contributes necessary guidance, so it earns a 4 rather than 5 for slight verbosity relative to the tool's simplicity.

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?

The description covers assumptions, preconditions, failure modes, alternatives, and a typical minimum N. With an output schema present, it need not explain return values. It provides all essential context for an agent to correctly invoke and interpret the tool, making it complete.

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 100%, so the schema already explains each parameter. The description mentions preconditions like 'Domain context' and 'bounded list of candidate variables' but does not explicitly map these to specific parameters (e.g., outcome, treatment, domain). It adds minimal semantic value beyond the schema, so a baseline 3 is appropriate.

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 opens with 'Propose sensitivity-analysis priors for the substantive setting,' stating a specific verb (propose) and resource (sensitivity-analysis priors). It clearly differentiates itself from siblings by naming alternatives like sp.llm_dag_constrained, sp.causal_discovery, and sp.dag, so an agent can distinguish it without inspecting 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?

The description explicitly lists 'Alternatives' and provides precondition requirements ('Domain context and a bounded list of candidate variables; A configured, logged LLM provider for reproducibility'). It also clarifies the epistemological stance ('hypotheses to validate, not statistical identification') and the need for human/data-driven falsification, giving clear when-to-use and when-not-to-use guidance.

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

llm_unobserved_confoundersA
Read-only

Enumerate plausible unobserved confounders for a study. Assumptions: LLM-proposed graphs / priors are hypotheses to validate, not statistical identification; Human review or data-driven falsification is required before any causal claim. Pre-conditions: Domain context and a bounded list of candidate variables; A configured, logged LLM provider for reproducibility. Failure modes: Proposals are unstable across runs or include hallucinated variables/edges -> Fix the model release and seed, add constraints, and cross-check with constraint-based discovery. Alternatives: sp.llm_dag_constrained, sp.causal_discovery, sp.dag. Typical minimum N: 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientNoLLM client with ``.complete(prompt: str) -> str``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
domainNodomain parameter (str).health
outcomeYesFree-text descriptions (used by LLM, ignored by heuristic).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesFree-text descriptions (used by LLM, ignored by heuristic).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
point_estimate_rrNoObserved risk ratio; suggested E-values are scaled relative to this so the user can read "to nullify a RR of X you'd need an unobserved RR of Y".

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

With readOnlyHint=true already covering the safety profile, the description adds substantial behavioral context: the assumption that LLM-proposed graphs are only hypotheses requiring validation, pre-conditions for reproducibility, and explicit failure modes with remediation steps ('Proposals are unstable... -> Fix the model release and seed, add constraints...'). This goes far beyond what annotations provide, giving the agent operational awareness of potential pitfalls and how to respond.

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 well-structured and front-loaded: the purpose appears in the first sentence, followed by logically labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Every sentence adds distinct valueβ€”safety caveats, prerequisites, troubleshooting, and routingβ€”without redundancy. The length is justified given the tool's complexity.

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 tool's complexity (11 parameters, output schema provided, rich annotations), the description covers everything an agent needs to decide when to call this tool and what to expect: purpose, usage boundaries, preconditions, failure modes, and alternatives. The output schema handles return details, so no further description is necessary. The inclusion of 'Typical minimum N: 1' and provider requirements rounds out the context comprehensively.

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 100%, so the schema fully documents all 11 parameters. The description reinforces that a 'domain context' and 'bounded list of candidate variables' are needed, which maps loosely to the domain and data_columns parameters, but it adds no new semantic detail about individual parameters beyond what the schema already provides. The baseline of 3 is appropriate.

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, 'Enumerate plausible unobserved confounders for a study,' uses a specific verb ('enumerate') and a clear resource ('plausible unobserved confounders'), making the tool's purpose immediately obvious. It distinguishes itself from nearby siblings like llm_dag_propose and llm_sensitivity_priors by focusing on confounders rather than DAGs or prior elicitation, though it does not explicitly name those siblings.

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 provides explicit pre-conditions ('Domain context and a bounded list of candidate variables; A configured, logged LLM provider') that tell an agent when this tool is appropriate. It also names three alternatives (sp.llm_dag_constrained, sp.causal_discovery, sp.dag), giving some routing context. However, it does not explicitly explain when to choose each alternative over this tool, and the listed alternatives are not the most closely related siblings (llm_dag_propose, llm_sensitivity_priors), which slightly weakens the guidance.

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

local_projectionsA
Read-only

Estimate impulse responses via Jorda (2005) local projections. Validation: certified parity evidence. Assumptions: Outcome and shock series are (covariance-)stationary so horizon-h projections are not spurious; Shock is conditionally exogenous at t given controls and the auto-added lags (no contemporaneous feedback from y_t to shock_t); Newey-West truncation lag is adequate for the moving-average serial correlation induced by overlapping horizons. Pre-conditions: Single time-ordered series in a DataFrame with the outcome and shock columns; For identification='lpirfs_cholesky', endog_order contains the outcome and shock columns in the intended Cholesky ordering; Length comfortably exceeds horizons + max lag so the deepest horizon regression retains enough usable rows. Failure modes: Confidence bands explode or flip sign at long horizons after passing already-lagged controls together with auto_lag=True -> Set auto_lag=False for a bare specification, or drop your manual lags so collinear duplicate-lag columns are not formed; The horizon-0 response is zero when the shock is ordered after the response variable -> Use the intended endog_order, or switch back to identification='direct' i...

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for the confidence band.
shockYesColumn name of the shock / treatment variable.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
nw_lagsNoNewey-West truncation lag. Defaults to ``round(1.5 * horizons)`` per Kilian & Kim (2011) recommendation.
outcomeYesColumn name of the outcome variable y.
auto_lagNoIf ``True`` (the legacy default), also adds ``y_{t-1}`` and ``shock_{t-1}`` as automatic regressors. Set ``False`` for a bare ``y_{t+h} ~ const + shock_t + controls`` specification. These two auto-controls were silent in the pre-1.16 docstring.
controlsNoAdditional regressors taken **verbatim** from ``data``: the column values at time t are used directly, without re-lagging. If you want the lag of a control, lag it yourself before passing it in (e.g. ``df["unemp_lag"] = df["unemp"].shift(1)`` and then ``controls=["unemp_lag"]``). The pre-1.16 behaviour silently re-lagged controls a second time on top of an auto- added ``y_{t-1}``, producing collinear columns and surprising impulse responses; see ``MIGRATION.md`` for context.
horizonsNoNumber of horizons h = 0, 1, ..., H to estimate.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
cumulativeNoIf ``True``, return the cumulative response ``y_{t+h} - y_{t-1}``. Default (False) returns ``y_{t+h}`` directly.
endog_orderNoEndogenous variable order used only when ``identification='lpirfs_cholesky'``. Defaults to ``[outcome, shock]``.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
identificationNoShock-identification convention. ``'direct'`` uses the coefficient on the observed ``shock`` variable in each horizon regression. ``'lpirfs_cholesky'`` reproduces ``lpirfs::lp_lin`` with ``lags_endog_lin=1`` and ``shock_type=1``: the variables in ``endog_order`` define the Cholesky ordering, and the reported response is the unit structural shock for ``shock``.direct

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations carry readOnlyHint=true and openWorldHint=false, and the description goes far beyond these by disclosing behavioral nuances: the auto_lag legacy behavior, collinearity failure modes, confidence band explosion, the horizon-0 zero response under Cholesky ordering, and the difference between 'direct' and 'lpirfs_cholesky' identification. This is substantive behavioral context that an agent would otherwise discover only after invoking the tool. No contradiction with annotations.

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 long but heavily structured with bolded labels (Validation, Assumptions, Pre-conditions, Failure modes). The core purpose is front-loaded in the very first sentenceβ€”no preamble. Every section adds distinct value: assumptions justify the method's validity, pre-conditions prevent incorrect calls, and failure modes suggest concrete parameter fixes. Despite many words, none are redundant given the tool's complexity (16 parameters, nuanced statistical behavior).

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 tool with this many parameters and failure modes, the description covers the necessary bases: statistical assumptions, data prerequisites, identification options, parameter interactions, and troubleshooting steps. An output schema exists (as indicated), so return-value details are not needed in the description. The only minor omission is explicit cross-referencing to sibling tools, but given the depth of internally scattered guidance, the description is effectively complete for operational use.

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?

Despite 100% schema description coverage, the tool description adds significant meaning beyond the schema: it explains why `auto_lag` may cause collinearity, that `controls` are taken verbatim without re-lagging, how `endog_order` interacts with Cholesky ordering, and the default for `nw_lags` per Kilian & Kim. It also ties parameters to failure modes)Skip, making parameter semantics actionable rather than merely descriptive.

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 opens with a precise verb and resource: 'Estimate impulse responses via Jorda (2005) local projections.' This immediately distinguishes it from sibling estimators like `var`, `irf`, or `direct_method` by naming both the method and the statistical family. The method-specific context (Jorda 2005) anchors the tool's identity.

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 provides rich context on when the tool is appropriate through explicit assumptions (stationarity, conditional exogeneity, adequate Newey-West lags) and detailed pre-conditions (DataFrame structure, Cholesky ordering, sufficient length). It even offers corrective guidance in failure modes (e.g., 'Set auto_lag=False' or 'switch back to identification='direct''). However, it does not explicitly name alternative sibling tools (e.g., `var` or `irf`) or state conditions for choosing them over this tool, so the exclusion is implicit rather than explicit.

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

logitC
Read-only

Logit (logistic) regression via maximum likelihood. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoRegressor names (alternative to formula).
yNoDependent variable name (alternative to formula).
tolNoConvergence tolerance on log-likelihood change.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNo``'nonrobust'`` for MLE SE, ``'hc1'`` / ``'robust'`` for sandwich SE.nonrobust
clusterNoColumn name for clustered standard errors.
formulaNoFormula like ``"y ~ x1 + x2"``.
maxiterNoMaximum Newton-Raphson iterations.
weightsNoColumn name for frequency/analytic weights.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
at_valuesNoVariable values for ``marginal_effects='at'``.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
odds_ratioNoReport odds ratios instead of log-odds coefficients.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
marginal_effectsNo``'average'`` (AME), ``'mean'`` (MEM), or ``'at'`` (MER).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds 'via maximum likelihood' and 'certified parity evidence,' which gives some context about the estimator and validation, though the second phrase is opaque and not fully actionable.

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 description is short and front-loaded, but the second sentence is cryptic ('Validation: certified parity evidence') and does not clearly earn its place. It is concise, yet that conciseness sacrifices useful guidance.

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 tool with 18 parameters and many close siblings, the description is notably incomplete. It does not mention that the outcome should be binary, explain when logit is preferred over probit/ologit, or hint at the required data shape. The presence of an output schema does not compensate for these practical gaps.

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 100%, so the input schema already documents all parameters thoroughly. The description adds no additional parameter-level meaning, but the baseline of 3 is appropriate because the schema carries the full burden.

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 ('Logit (logistic) regression via maximum likelihood'), making the core purpose clear. It does not explicitly differentiate from close siblings like probit, ologit, or panel_logit, but the 'logit' and 'maximum likelihood' wording gives an agent a solid baseline.

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 alternatives such as probit, ologit, or panel_logit. No exclusions, conditions, or alternative routes are mentioned; the phrase 'Validation: certified parity evidence' is not usage guidance.

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

logrank_testB
Read-only

Log-rank test for equality of survival distributions across groups. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventYesColumn names.
groupYesColumn names.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
durationYesColumn names.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. However, the description adds little beyond the name; it does not state that the test produces a p-value or chi-square statistic, or that it compares two or more groups. The cryptic 'Validation: certified parity evidence.' is unclear and adds no actionable behavioral detail.

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 description is extremely concise (two short sentences), and the main purpose is front-loaded. However, the second sentence 'Validation: certified parity evidence.' is vague and likely confusing; it does not earn its place and detracts from clarity. The structure is efficient but the content is not entirely purposeful.

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 description is too terse for a tool with 9 parameters and a large sibling set. It does not explain the nature of the test, when it is appropriate, or how it differs from kaplan_meier, cox, or survival_sensitivity. The output schema exists, so return values are covered, but the description lacks the context needed for an agent to confidently select and call this 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 description coverage is 100%, so the baseline is 3. The schema provides minimal descriptions for event, group, and duration ('Column names.'), and the tool description does not elaborate on what these columns represent. While the schema covers all parameters, it does not fully clarify their roles, and the description offers no additional semantic value.

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 clearly states a specific verb (test) and resource (equality of survival distributions across groups), which distinguishes it from descriptive tools like kaplan_meier or regression tools like cox. It is unambiguous about the statistical test being performed.

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 explicit guidance is given on when to use this tool versus alternatives. It does not mention that it is non-parametric, unadjusted for covariates, or that cox should be used for adjustment. With a large sibling set including many survival tools, the lack of routing advice leaves the agent to infer usage from the name alone.

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

love_plotB
Read-only

Love plot: dot plot of standardized mean differences before/after.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
titleNoPlot title.Covariate Balance (Love Plot)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
figsizeNo(width, height). Height defaults to 0.4 * n_covariates + 1.
weightsNoIPW or matching weights. If None, inverse-PS weights are computed.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
ps_methodNoPS estimation method for balance computation.logit
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
thresholdNoSMD threshold for the vertical dashed line (default 0.1).
treatmentNoBinary treatment column.
covariatesNoCovariate columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, so the safety profile is covered. The description adds only the 'before/after' contrast, which hints at the comparison dimension but does not disclose behaviors like automatic PS weight computation when weights=None, threshold lines, or as_handle cachingβ€”though these are partially in schema 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?

The single-sentence description is extremely concise and front-loaded with the core concept. However, it is arguably under-specified rather than efficiently completeβ€”though for a purportedly simple visualization, the brevity is appropriate and earns a good score.

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?

Given the tool's 14 parameters and two possible input workflows (raw data vs. result_id), a one-sentence description is inadequate. There is no orientation on when to supply data_path vs. result_id, how weights interact with ps_method, or what the output payload containsβ€”matters an agent would need to call this tool correctly.

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 100%, so the schema fully documents all 14 parameters. The description itself adds no parameter-level meaning, which is acceptable under the baseline but does not compensate or enrich the semantic understanding of how parameters like data_path, result_id, treatment, and covariates relate to each other.

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 clearly identifies the tool's output: a 'dot plot of standardized mean differences before/after', which is the canonical love plot. The verb and resource are specific enough to distinguish it from many unrelated tools, though it does not explicitly differentiate from close siblings like balanceplot, ps_balance, or psplot.

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 gives no guidance on when to use love_plot relative to the many sibling plotting/diagnostics tools, nor does it explain typical scenarios (e.g., after matching/weighting, with a fitted result). An agent must infer from the name and schema alone, which is insufficient for a large tool catalog.

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

lp_didA
Read-only

Local-Projections DiD (Dube-Girardi-Jorda-Taylor 2023). At each event-time horizon h in {-P, ..., H}, runs a separate OLS of Y_{t+h} - Y_{t-1} on the treatment change Deltad_{t} with time FE and cluster-robust SE, using 'not-yet-treated' or 'never-treated' units as controls. Event-study beta_h paths are returned in model_info['event_study']. Validation: certified parity evidence. Assumptions: Parallel trends across event time (standard DiD); No anticipation within the pre-treatment horizon; SUTVA. Pre-conditions: long-format panel with consecutive integer time; treatment is binary 0/1 and time-varying; horizons feasible: enough periods for Y_{t-1} and Y_{t+H}. Failure modes: Horizon-0 n_obs is tiny because few units switch on in the clean-control window -> Widen clean_controls='never_treated' -> 'not_yet_treated' or shorten horizons; Placebo CIs don't cover zero -- parallel trends suspect -> Apply sp.honest_did to the event-study paths for Rambachan-Roth sensitivity bounds. Alternatives: sp.callaway_santanna, sp.sun_abraham, sp.did_imputation, sp.gardner_did. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesInteger period (consecutive)
unitYesUnit identifier
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster variable (defaults to unit)
time_feNotime_fe parameter (bool).
controlsNoControl-variable column names.
horizonsNo(min, max) event-time horizons to estimate
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary time-varying treatment (0/1)
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
clean_controlsNoControl selectionnot_yet_treated

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds substantial behavioral context: it runs many regressions per horizon, returns event-study paths in a specific field, documents assumptions (parallel trends, no anticipation, SUTVA), and discusses failure modes (tiny horizon-0 n_obs, placebo CIs) with concrete remedies. This goes well beyond the annotations and helps the agent anticipate and diagnose issues.

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 long but densely packed and organized with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives). The core method is front-loaded. Some phrases, such as 'Validation: certified parity evidence,' are vague, and the length could be trimmed slightly, but most clauses contribute useful 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 tool with 16 parameters and an output schema, the description covers the method, assumptions, pre-conditions, failure modes, alternatives, and minimum sample size. It does not need to restate schema details. An agent has everything needed to select the tool correctly, understand data expectations, and troubleshoot common failures.

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 input schema has 100% description coverage for all 16 parameters, so the baseline is 3. The description adds value by explaining the role of clean_controls (not_yet_treated vs never_treated) and horizon feasibility, tying them to failure modes and fixes. This supplements the schema rather than repeating it.

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 estimator (Local-Projections DiD) and gives a precise econometric specification: separate OLS of Y_{t+h} - Y_{t-1} on Deltad_t with time FE and cluster-robust SE. It also names the authors and the key output (event-study beta_h paths in model_info['event_study']). This clearly distinguishes it from sibling DiD estimators and even lists alternatives.

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 provides concrete pre-conditions (long-format panel, consecutive integer time, binary time-varying treatment, feasible horizons) and a typical minimum N. It lists alternative estimators (callaway_santanna, sun_abraham, did_imputation, gardner_did) but does not give an explicit 'use this when X, use that when Y' decision rule. The context is clear but lacks explicit exclusions or selection criteria.

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

lrtestB
Read-only

Likelihood-ratio test comparing a restricted and a full model. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
fullYesTwo fitted mixed models. ``full`` should strictly nest ``restricted`` -- i.e. the parameter space of the restricted model is a subset of the full model's.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
boundaryNoWhether to apply the chi2 boundary correction. When ``None`` (default) we infer it from whether the restriction touches a variance component -- the only parameters that live on the boundary of their support.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
restrictedYesTwo fitted mixed models. ``full`` should strictly nest ``restricted`` -- i.e. the parameter space of the restricted model is a subset of the full model's.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds only the cryptic 'validated evidence tier' note, which hints at output validation but does not meaningfully explain behavior beyond what annotations provide.

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 description is short and front-loaded with the core purpose. However, the second 'Validation:' sentence is vague and does not clearly help an agent select or invoke the tool, so not every sentence fully earns 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?

The core purpose is clear and the schema/annotations cover much of the invocation contract. Still, for a tool with 9 parameters and a large sibling set, the description lacks explicit usage context, such as when to choose lrtest or what the validation tier actually means for the caller.

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 100%, so all 9 parameters, including required full/restricted and the detail enum, are already documented in the schema. The tool description itself contributes no additional parameter semantics, matching the baseline for full schema coverage.

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 first sentence clearly identifies the procedure as a 'likelihood-ratio test' comparing a 'restricted' and 'full' model. This is specific enough to distinguish it from generic model-testing siblings, though it does not 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 description implies the intended use β€” compare a restricted model against a full model β€” and the schema reinforces strict nesting. However, it does not provide explicit guidance on when to prefer this tool over related test tools or state any exclusions.

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

ltmleA
Read-only

Longitudinal TMLE for static regime contrasts. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Sequential exchangeability (no unmeasured time-varying confounding) at every treatment time point; Positivity at each time point conditional on the past; Correctly specified outcome (Q) and treatment (g) models, though TMLE is doubly robust to one of them. Pre-conditions: Long-format data with time-varying treatment, confounders and the static regime contrast of interest. Failure modes: Near-positivity violation: estimated treatment probabilities approach 0 or 1, inflating variance -> Bound (truncate) the cumulative weights or use a marginal structural model with stabilised weights. Alternatives: sp.tmle, sp.g_computation, sp.msm. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesFinal outcome column.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
baselineNoBaseline time-invariant covariates.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
censoringNoCensoring indicator column per time point (``1=observed``, ``0=censored``). If None, no censoring is modeled.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentsYesTreatment column per time point, length ``K``.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
outcome_typeNo``auto`` detects from unique values of ``y``.auto
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
regime_controlNoRegimes to contrast. Default: all-1 vs all-0. A regime may also be a **callable** ``regime(k, history)`` for *dynamic regimes* that depend on the simulated / observed history of baseline and time-varying covariates. The callable receives ``k`` (int 0..K-1) and ``history`` -- a dict mapping column name to the length-``n`` numpy array observed up to that timepoint -- and must return a length-``n`` numpy array of 0/1 treatment assignments.
regime_treatedNoRegimes to contrast. Default: all-1 vs all-0. A regime may also be a **callable** ``regime(k, history)`` for *dynamic regimes* that depend on the simulated / observed history of baseline and time-varying covariates. The callable receives ``k`` (int 0..K-1) and ``history`` -- a dict mapping column name to the length-``n`` numpy array observed up to that timepoint -- and must return a length-``n`` numpy array of 0/1 treatment assignments.
covariates_timeYes``covariates_time[k]`` lists time-k covariate columns (may be empty). Length ``K``.
propensity_boundsNoClip propensity to this range for stability.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

The description goes well beyond the readOnlyHint annotation by disclosing double robustness, sequential exchangeability, positivity assumptions, and a near-positivity failure mode with a mitigation. It does not contradict the annotations; the added assumptions and sample-size guidance are genuinely useful 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?

The description is well organized with labeled sections and front-loads the core purpose before assumptions, failure modes, and alternatives. The 'Validation:' sentence is somewhat opaque and adds little operational value, preventing a top score.

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 complex longitudinal estimator with 16 parameters, the description covers assumptions, data preconditions, failure modes, alternatives, and minimum sample size, while the schema and output schema handle parameters and return structure. Nothing critical for correct invocation appears to be missing.

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 descriptions cover all 16 parameters, so the description is not required to explain individual inputs. The failure-mode advice about bounding weights loosely relates to propensity_bounds, but it does not add per-parameter meaning beyond what the schema already provides.

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 opening phrase 'Longitudinal TMLE for static regime contrasts' names the estimator and the narrowing to static regimes, which helps distinguish it from dynamic-regime or survival-focused siblings. It lacks an explicit verb such as 'estimates the causal effect of...' but is unambiguous and specific.

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 provides concrete pre-conditions, assumptions, and a minimum N, and it names alternatives (sp.tmle, sp.g_computation, sp.msm). It also gives one explicit substitution trigger under near-positivity (use an MSM with stabilized weights), though it does not fully specify when to prefer each listed alternative.

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

ltmle_survivalA
Read-only

LTMLE for a discrete-time survival outcome under dynamic regimes. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness (sequential exchangeability for longitudinal/LTMLE); Positivity / overlap of treatment given history; At least one nuisance (outcome or treatment) is estimated consistently; the targeting step gives double robustness. Pre-conditions: Covariates, treatment, and outcome (for survival/longitudinal variants: time-to-event and time-varying covariates); Enough data to fit a Super Learner / HAL nuisance library. Failure modes: Near-positivity violations create extreme clever-covariate weights -> Truncate weights, restrict the estimand, or report a positivity diagnostic. Alternatives: sp.dml, sp.ipw, sp.g_computation. Typical minimum N: 400.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
baselineNoTime-invariant baseline covariates.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
censoringNo``1`` if the subject is observed *through* interval k, ``0`` if right-censored at or before k. If omitted, no censoring.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentsYesTreatment column per interval.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
regime_controlNoTreatment regimes, same semantics as :func:`ltmle`.
regime_treatedNoTreatment regimes, same semantics as :func:`ltmle`.
covariates_timeYesTime-varying covariates at each interval.
event_indicatorsYesColumn names for the per-interval event indicator ``T_k`` (``1`` if the event occurs *in* interval k, ``0`` otherwise).
propensity_boundsNopropensity_bounds parameter (Tuple[float, float]).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so no contradiction. The description adds valuable behavioral context: failure modes around positivity violations leading to clever-covariate weights, the double-robustness property from the targeting step, and validation tier semantics.

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 compact and structured with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), front-loading the core definition. No filler or redundant phrasing.

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?

The description covers validation tier, assumptions, pre-conditions, failure modes, alternatives, and minimum sample size. Since an output schema exists, return-value details are not required; the description is complete for an estimator of this complexity.

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?

The input schema provides 100% coverage with descriptions for all 15 parameters, including treatments, event_indicators, censoring, and regime parameters. The description mentions covariates, treatment, outcome, and time-to-event/time-varying covariates, but the schema already carries the heavy lifting for parameter meaning.

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 clearly states the method (LTMLE), the target outcome (discrete-time survival), and the setting (dynamic regimes). This distinguishes it from sibling tools such as ltmle, tmle, and hal_tmle by specifying the survival-outcome variant.

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 lists alternatives (sp.dml, sp.ipw, sp.g_computation) and provides preconditions, assumptions, failure modes, and a typical minimum N. It does not offer an explicit 'use this when X, alternative when Y' contrast, but the context is clear enough for an expert agent.

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

machado_mataC
Read-only

Machado-Mata (2005) quantile decomposition.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
groupYesGroup or cohort identifier.
n_simNoNumber of sim.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
n_tau_qrNoNumber of tau qr.
tau_gridNotau grid for reporting (default: deciles 0.1..0.9)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
inferenceNoinference parameter (str).none
referenceNo0: use Group A's coefficients with Group B's X. The counterfactual is F_{Y<0|1>} -- A's beta on B's X. 1: use Group B's coefficients with Group A's X. .. warning:: Opposite convention to ``dfl_decompose``. In DFL, ``reference=0`` means *A's X, B's beta* (reweighting). Here, ``reference=0`` means *A's beta, B's X* (coefficient swap). See ``dfl_decompose`` docstring for the full convention map.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.3/5.0
Behavior2/5

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

Annotations only declare readOnlyHint=true and openWorldHint=false; the description adds no behavioral context such as what the decomposition returns, how groups and reference group are interpreted, or that it fits quantile regressions. It does not contradict 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.

Conciseness3/5

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

The description is short and not rambling, but it is under-specified: the single noun phrase does not front-load an actionable verb or scope. It is concise in length, not in useful structure.

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?

Given 17 parameters, 4 required inputs, and a large sibling ecosystem, a one-phrase description is far from complete. Even with a rich schema and output schema, an agent receives no high-level context about required data layout, grouping, reference conventions, or intended workflow.

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 100%, so the input schema already documents every parameter. The description itself contributes no parameter meaning, which matches the baseline of 3 for high schema coverage.

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

Purpose2/5

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

The description is a noun phrase ('Machado-Mata (2005) quantile decomposition') that essentially restates the tool name; it lacks an explicit verb or resource such as 'Decompose differences in outcome y across groups by quantile.' It does not distinguish machado_mata from closely related siblings like melly_decompose, qte, or dfl_decompose.

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 about when to use this tool instead of the many other decomposition tools in the sibling list (e.g., melly_decompose, dfl_decompose, oaxaca, qte). No context, prerequisites, or exclusions are provided.

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

manski_boundsA
Read-only

Compute Manski (1990) worst-case bounds on ATE. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Only weak (set-identifying) assumptions are imposed; the result is an interval, not a point; Lee bounds add monotonicity of selection; Oster's delta adds proportional selection on observed vs. unobserved. Pre-conditions: The data needed for the point-identifying analysis, plus the weakest credible identifying restriction; For Lee bounds: a binary selection/attrition indicator. Failure modes: Bounds are too wide to be informative -> Add a credible auxiliary restriction (monotone treatment response, instrument) to tighten the bounds. Alternatives: sp.oster_delta, sp.lee_bounds, sp.manski_bounds. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
alphaNoSignificance level for confidence intervals and tests.
treatYesBinary treatment variable (0/1).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
y_lowerNoKnown lower bound of the outcome. If None, uses observed min.
y_upperNoKnown upper bound of the outcome. If None, uses observed max.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
assumptionNoAdditional assumption: - 'none': no assumptions (widest bounds) - 'mtr': Monotone Treatment Response (Y(1) >= Y(0) for all) - 'mts': Monotone Treatment Selection (selection on levels)none
n_bootstrapNoNumber of bootstrap replications.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The annotations only indicate readOnlyHint=true, so the description carries most of the behavioral burden. It does this well by disclosing that the output is an interval, that only weak assumptions are imposed, that bounds may be too wide, and that additional restrictions like monotone treatment response can tighten them. It does not contradict the read-only 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?

The description is compact and front-loads the core purpose before moving to assumptions, preconditions, failure modes, and alternatives. Every section has a purpose. The 'Validation: validated evidence tier...' line is somewhat boilerplate-like, but it does not materially bloat the description.

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 14 parameters, an output schema, and read-only annotations, the description covers the important contextual gaps: what identification strategy is used, that the result is an interval, when bounds are uninformative, what alternatives exist, and a minimum N guideline. The output schema handles return-value details, so no major missing element blocks 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 100%, so the parameters are already well documented in the schema. The description adds high-level context around assumptions and constraints rather than restating parameter meanings, which is appropriate for this coverage level. It does add a useful hint about binary selection/attrition indicators, but this is mostly relevant to Lee bounds rather than this tool.

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 opens with a specific verb and resource: 'Compute Manski (1990) worst-case bounds on ATE.' It further clarifies that the result is an interval rather than a point, which sharply distinguishes it from point-identifying estimators. It also names the related Lee and Oster bounds, so an agent can tell them apart without inspecting 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?

The description provides meaningful context: only weak set-identifying assumptions are imposed, bounds may be too wide, and alternatives such as Lee bounds and Oster's delta are called out with their distinguishing assumptions. It does not state an explicit 'use this when... / use that when...' rule, but the preconditions and failure-mode guidance make selection reasonably clear.

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

marginsB
Read-only

Compute marginal effects from a fitted model. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoFix covariates at specific values for conditional margins. E.g., ``{'age': 30, 'female': 1}``.
epsNoStep size for numerical differentiation.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo- 'ame': Average Marginal Effect (average dy/dx across all obs) - 'mem': Marginal Effect at the Mean (dy/dx at mean of X)ame
resultYesFitted model result (must have ``.params`` and associated data).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
variablesNoVariables to compute dy/dx for. Default: all regressors.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a non-mutating operation, lowering the burden on the description. The added 'validated evidence tier' note is a non-operational form of context, but the description does not go into concrete behavior such as caching, result identity, or when as_handle matters. No contradiction with annotations.

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 first sentence is clear and front-loaded, but the second sentence about 'validated evidence tier' is cryptic and does not clearly earn its place. The definition is short, but one of its two sentences adds little actionable value.

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 rich input schema and presence of an output schema compensate for much of what the description omits. However, for a tool in a very large sibling family, the description provides no positioning or high-level guidance, leaving the agent to infer context from the schema alone.

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 100%, so the parameters are already well documented. The description itself adds no parameter-level meaning beyond the general 'fitted model' context, which matches the baseline for full schema coverage.

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: 'Compute marginal effects from a fitted model.' This is clear and unambiguous, but it does not differentiate from closely related siblings such as margins_at, margins_table, or marginsplot, 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 use this tool versus alternatives like margins_at or margins_table, nor any mention of prerequisites beyond 'fitted model.' The schema covers mechanics, but the description offers no decision-making context.

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

margins_atA
Read-only

Compute predictive margins at specific covariate values. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
atYesMapping of variable names to lists/arrays of values. If multiple variables are given, the Cartesian product of all value lists is used. Example:: at={"experience": [1, 5, 10], "female": [0, 1]} produces 6 grid points.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesFitted model result (must have ``.params`` and associated data).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

The readOnlyHint annotation already covers the non-mutating nature, so the description does not need to repeat that. The first sentence is consistent with the annotation, and it adds the 'specific covariate values' scoping, but the validation-tier sentence is opaque and gives no concrete behavioral detail about runtime behavior, errors, or return semantics.

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 first sentence is front-loaded and precise, stating exactly what the tool does in a compact way. The second sentence about validation is cryptic and adds little actionable information, but the overall description remains short and not bloated.

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?

Despite having nine parameters and a nested object, the schema provides full field descriptions and an output schema exists, so an agent can invoke the tool correctly without additional explanation. The main missing piece is a routing note for sibling margins tools, but that is a guidance gap rather than an invocation-blocking 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 description coverage is 100%, so the description need not restate parameter meanings. The phrase 'specific covariate values' loosely maps to the at parameter, but it adds no detail beyond the schema's already clear Cartesian-product explanation. Baseline of 3 is appropriate.

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 clearly states the action ('Compute predictive margins') and the resource ('specific covariate values'), making the tool's purpose immediately understandable. However, it does not explicitly differentiate this tool from close siblings like margins, margins_at_plot, and margins_table, so it stops short of a top score.

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 'at specific covariate values' implies the intended use case, but the description provides no explicit when-to-use guidance, exclusion conditions, or alternatives. The 'Validation: validated evidence tier' sentence does not help an agent choose this tool over related margins tools.

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

margins_at_plotA
Read-only

Plot predictive margins from margins_at() with confidence bands.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoVariable to place on the x-axis. If *None*, inferred as the at-variable with the most unique values.
axNoax parameter.
byNoVariable to produce separate lines for (legend grouping).
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
xlabelNoxlabel parameter (Optional[str]).
ylabelNoylabel parameter (str).Predicted Value
figsizeNofigsize parameter (Tuple[float, float]).
paletteNoColours for each ``by`` group.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
margins_at_dfYesOutput from ``margins_at()``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, indicating a safe, non-mutating operation. The description adds the detail of 'confidence bands', but does not explain how the plot is returned (e.g., as a file, JSON, or inline) or any side effects. It does not contradict annotations.

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 a single, focused sentence with no redundant information. It is concise and front-loaded with the core purpose, making it easy for an agent to parse quickly.

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 tool has 15 parameters and an output schema, so the return format is likely specified there. However, the description does not clarify how the plot is delivered (e.g., whether it returns a figure object, a path, or a base64 string). Given the tool's complexity, a bit more context about the output would be helpful, but the schema may cover it. Overall, adequate but not fully complete.

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 100%, so all parameters are documented in the schema. The description adds no additional meaning beyond referencing margins_at_df as the input. It does not clarify parameter interactions or defaults beyond what the schema provides, so the baseline 3 is appropriate.

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 clearly states the tool's purpose: to plot predictive margins from margins_at() with confidence bands. It uses a specific verb ('Plot') and names the source function, making it distinguishable from siblings like margins_table or marginsplot, which serve different purposes.

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 the tool is used for plotting margins produced by margins_at(), but it does not explicitly contrast it with alternative plotting tools like marginsplot or did_plot. There is no guidance on when to choose this over others, leaving the agent to infer from context.

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

marginsplotB
Read-only

Plot marginal effects with confidence intervals.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
colorNocolor parameter (str).#2C3E50
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
figsizeNofigsize parameter (Tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
margins_dfYesOutput from ``margins()``.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and the plot description is consistent with a non-mutating operation, so there is no contradiction. The description adds only that confidence intervals are included; it does not disclose rendering behavior, failure modes, or relationship to a fitted margins result, but the annotation lowers the burden.

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 one short, front-loaded sentence with no filler or repetition. It is concise but slightly thin; a brief note on expected input or relationship to margins() would make it more useful without hurting conciseness.

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 simple plotting tool with a required margins_df parameter, a full output schema, and read-only annotations, the definition is minimally usable. However, the existence of many plotting/plot-adjacent siblings and the lack of any statement about when this tool is appropriate leaves a completeness gap for tool selection.

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 100%, so the baseline of 3 applies; the tool description adds no parameter-level meaning. The schema's margins_df entry is informative, but that is structured data rather than narrative value from the 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 clear verb ('Plot') and resource ('marginal effects with confidence intervals'), so an agent can see this is a visualization tool. It does not differentiate it from sibling tools such as margins_at_plot or plot_from_result, but the core action 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?

There is no guidance on when to use this tool instead of margins_at_plot, plot_from_result, or margins_table. The schema notes that margins_df is output from margins(), but the description itself gives no context, exclusions, or alternative routing.

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

margins_tableC
Read-only

Marginal-effects result that pipes straight into sp.regtable.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoForwarded verbatim to :func:`margins`.
epsNoForwarded verbatim to :func:`margins`.
alphaNoForwarded verbatim to :func:`margins`.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoForwarded verbatim to :func:`margins`.ame
resultYesFitted model -- same input ``sp.margins`` accepts.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
variablesNoForwarded verbatim to :func:`margins`.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

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

The readOnlyHint annotation already covers the read-only nature. The description adds only that the result is formatted for regtable, but does not disclose behaviors like caching (as_handle), subsampling (data_sample_n), or how the result is piped.

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 terse sentence with no filler. The key phrase 'pipes straight into sp.regtable' is front-loaded and communicates the primary integration point efficiently.

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 12 parameters including complex ones like data_path and as_handle, and an output schema available, the description is far too minimal. It does not explain that the tool computes marginal effects on a fitted model, nor how it relates to the sibling margins tool, leaving an agent under-informed.

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 100%, so the schema carries the full parameter descriptions. The tool description adds no parameter-level meaning, so the baseline of 3 is appropriate.

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 tool's output as a marginal-effects result intended for sp.regtable, which gives a rough sense of purpose. However, it lacks a clear verb and does not distinguish it from the many margin-related siblings (e.g., margins, margins_at, marginsplot).

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

Usage Guidelines1/5

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

No guidance is given on when to use this tool versus the numerous margin-related alternatives. No when-not-to-use, prerequisites, or selection criteria are mentioned.

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

matchA
Read-only

Propensity score and covariate matching for treatment effect estimation. Validation: certified evidence with scoped limitations. Known limitations: greedy nearest-neighbour matching without replacement is order-dependent: the m_order convention can differ across packages and materially moves the estimate (>5x spread on MatchIt::lalonde with Mahalanobis distance). m_order='data' and 'closest' reproduce MatchIt exactly; m_order='farthest' is StatsPAI's own dynamic rule and is not MatchIt-equivalent; bias_correction=True follows a different convention from Matching::Match's BiasAdjust: StatsPAI regresses on the full covariate vector with unweighted OLS over all controls, the reference regresses on the matching variables weighted by match counts, so bias-corrected estimates can differ from it by about 0.1%. The uncorrected estimate and its Abadie-Imbens standard error are exact. Cost: Builds the dense n_treated x n_control distance matrix via scipy cdist before selecting neighbours: memory is O(n_treated x n_control). Comfortable into the thousands per arm; use a caliper or coarser blocking beyond that. Assumptions: Unconfoundedness / CIA: Y(d) perp D | X; Overlap / common support: tr...

ParametersJSON Schema
NameRequiredDescriptionDefault
tiesNoHow equidistant controls are handled under matching with replacement. 'first' keeps the lowest-index one; 'all' pools them and splits the weight (the Matching::Match convention, which removes the row-order dependence).first
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoMatching method. 'caliper' is not a method -- pass caliper= to any nearest-neighbour variant.nearest
m_orderNoOrder treated units are processed in for greedy matching without replacement. The result depends on it materially (>5x spread on lalonde with Mahalanobis distance). 'data' and 'closest' reproduce the MatchIt rules of the same name.smallest_min_dist
outcomeYesOutcome variable column name or outcome array.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
se_methodNoStandard error. 'auto' resolves to 'abadie_imbens' for nearest-neighbour, 'psmatch2' for kernel / radius, 'bootstrap' for llr. 'abadie_imbens' is the sample-ATT conditional variance (Stata psmatch2 ai()) and the only option measured to be correctly sized (0.95-1.04x the sampling SD, coverage 0.905-0.956 over 36 designs x 1000 reps; see benchmarks/matching_se_coverage.py). 'abadie_imbens_pop' is the population-ATT variance Matching::Match reports; 'psmatch2' the analytic Stata SE (1.50-1.69x, too wide); 'ai' the simple matched-pair SE (0.56-0.91x, never reaches nominal coverage); 'bootstrap' resamples within arm and re-estimates the propensity score each draw.auto
treatmentYesTreatment indicator, treatment variable, or treatment array.
covariatesYesCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
caliper_scaleNoUnits of `caliper`: 'raw' on the distance scale (Stata psmatch2) or 'sd' in standard deviations of the propensity score (MatchIt std.caliper=TRUE).raw
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
tie_toleranceNoWith ties='all', how close squared distances (scaled by the variance of the distance measure) must be to count as tied. 1e-5 reproduces Matching::Match's distance.tolerance default.
bootstrap_repsNoReplications for se_method='bootstrap'
bootstrap_seedNoSeed for the bootstrap resampler
mahalanobis_covNoCovariance defining the Mahalanobis metric: 'pooled' within-group (Rubin 1980, MatchIt) or 'total' full-sample (pre-1.21 behaviour).pooled
llr_stata_compatNomethod='llr' only: reproduce Stata psmatch2's SUBSTITUTE for LLR (lpoly-smoothed outcome + nearest-neighbour matching) rather than genuine local linear regression.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

The description is exceptionally transparent about behavioral traits beyond the annotations. It discloses: order-dependence of greedy matching with a quantified >5x spread, exact reproducibility conditions (m_order='data'/'closest' reproduce MatchIt), the StatsPAI-specific 'farthest' rule, bias_correction convention differences with quantified ~0.1% deviation, exactness of the uncorrected estimate and Abadie-Imbens SE, memory complexity O(n_treated x n_control), practical scale limits, and the unconfoundedness/overlap assumptions. The readOnlyHint=true annotation is consistent with a matching estimator that computes estimates without mutating data. This is far beyond what annotations provide.

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 dense and information-rich, with clear section labels (Validation, Known limitations, Cost, Assumptions). It front-loads the core purpose and then provides critical caveats. It is longer than ideal, but every sentence carries substantive information: quantified effect sizes, exact reproducibility rules, memory complexity, and statistical assumptions. The structure helps an agent scan for the relevant caveat. It loses one point for length and for the truncated 'Assumptions' section that cuts off mid-sentence ('tr...'), which is a structural flaw.

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 tool's complexity (19 parameters, 7 enums, 15 methods, 6 SE methods), the description is remarkably complete. It covers the key decision-relevant facts: what the tool does, when results are exact vs approximate, how to reproduce reference implementations, memory constraints, and statistical assumptions. The output schema exists, so return values need not be described. The only minor gap is the truncated assumptions sentence, but the core assumptions (unconfoundedness, overlap) are already stated. For a tool this complex, the description provides an agent with enough to select it and avoid known pitfalls.

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 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema: it explains the material impact of m_order (>5x spread), clarifies that 'caliper' is not a method but a parameter, explains the memory implications of the dense distance matrix, and gives the statistical meaning of se_method options with measured coverage properties. It also explains the bias_correction convention difference. This goes beyond the schema's per-parameter descriptions, though the schema itself is already rich. The description does not enumerate every parameter, but the schema covers them, so the combination is strong.

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 opens with a specific verb+resource: 'Propensity score and covariate matching for treatment effect estimation.' It names the tool's domain (matching for causal treatment effects) and its core function. It distinguishes itself from siblings like psm, psmatch2, propensity_score, and optimal_match by covering the full matching family (nearest, kernel, radius, cem, etc.) and by being the general-purpose matching entry point. The description also includes validation and known-limitations context that makes the tool's identity unmistakable.

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 gives strong usage context: it states the tool is for treatment effect estimation via matching, and the 'Known limitations' section tells the agent when to be cautious (order-dependence, memory cost, bias-correction conventions). It also gives practical guidance like 'use a caliper or coarser blocking beyond that' for large data. However, it does not explicitly name sibling alternatives or state when to choose this tool over psm, psmatch2, propensity_score, or optimal_match. The guidance is implied by the tool's comprehensive scope rather than stated as explicit routing rules.

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

matrix_completionC
Read-only

Matrix-completion causal panel estimator (Athey et al., 2021). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
dYesd parameter (str).
yYesOutcome variable column name or outcome array.
timeYesTime period column.
unitYesUnit identifier column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds no behavioral detail such as how the estimator handles missing counterfactuals, what assumptions it imposes, or what the returned fit represents. The 'validated evidence tier' line is an evaluation meta-statement rather than a disclosure of tool 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?

The description is short, front-loaded with the estimator identity, and contains no filler. It loses a point because the lead sentence is a noun phrase rather than an active statement and the validation sentence has uncertain operational value for tool invocation.

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 10-parameter causal estimator embedded among dozens of panel, DiD, and synthetic-control siblings, the description is too thin: it gives no input expectations, no when-to-use decision rule, and no behavioral assumptions. The rich schema and output schema partly compensate, but the description alone is not enough to confidently select this tool over close alternatives.

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 100%, so the schema already documents the parameters and the tool description contributes no parameter-level meaning beyond that. The baseline 3 applies; the tautological 'd parameter (str)' is a schema weakness, not something the tool description compensates for.

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 noun phrase 'Matrix-completion causal panel estimator' names the method and the estimation task well enough for an agent to infer that this tool estimates causal effects in panel data using matrix completion. It lacks an explicit active verb and provides no differentiation from near-neighbor siblings such as mc_panel or robust_synth, so it stops short of a top score.

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 sentence explains when matrix_completion should be preferred or avoided relative to the many sibling panel estimators. The citation and 'Validation' line are not usage guidance, so the agent must infer applicability from the tool name alone.

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

mccrary_testA
Read-only

McCrary (2008) density test for manipulation of the running variable at the cutoff in regression-discontinuity designs. A significant discontinuity in the density of x at c is direct evidence that units are sorting around the cutoff (e.g. test-taking strategy, income manipulation), invalidating local randomisation. Assumptions: Smooth density of x at c under the null of no manipulation; Local-linear density estimator captures the shape near c. Pre-conditions: x is continuous with mass on both sides of c; no extreme heaping at c (rounded data invalidates the local-linear density estimate). Failure modes: Test rejects (p < alpha) -- manipulation evidence -> Switch to donut-hole RD (sp.rdrobust(donut=delta)) or partial-identification bounds (sp.rdrbounds); Heaped data near c (e.g. integer-rounded scores) -> The density-test statistic is unreliable on heaped data; consider Frandsen (2017) integer-RD adjustment. Alternatives: sp.rddensity, sp.rdrbounds. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoCutoff value
xYesRunning variable
bwNoBandwidth; auto if None
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_binsNoHistogram bins; auto if None
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and openWorldHint=false, so the description doesn't need to repeat those. It adds valuable behavioral context: assumptions (smooth density under null, local-linear estimator), pre-conditions (continuous x, no extreme heaping), and failure modes (unreliable on heaped data, typical N=200). This goes well beyond what annotations 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?

The description is ~150 words but well-organized: purpose, assumptions, pre-conditions, failure modes, alternatives, and typical N. It is dense but each sentence contributes useful information. Slightly long, but the structure and front-loading of purpose make it efficient.

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 complex statistical test, the description covers assumptions, pre-conditions, failure modes, and alternatives, which is essential for correct usage. The presence of an output schema covers return values. Nothing critical is missing for an agent to decide whether and how to call this 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 description coverage is 100%, so all parameters are already documented in the input schema. The description adds some context (e.g., x as running variable, c as cutoff, bandwidth auto if None) but doesn't provide syntax or format details beyond the schema. Baseline 3 is appropriate given the high coverage.

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 clearly states the specific statistical test (McCrary 2008 density test for manipulation of the running variable at the cutoff in RD designs) and what it does: detect discontinuities in density as evidence of sorting. It also names alternatives (sp.rddensity, sp.rdrbounds) and failure modes, distinguishing it from siblings like rdrobust or rddensity.

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?

The description explicitly explains when to use the test (to check for manipulation in RD) and when not to (heaped data). It provides failure modes and next steps (donut-hole RD, partial-identification bounds, Frandsen adjustment) and names alternative tools. This is exemplary guidance for an agent.

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

mc_panelA
Read-only

Estimate treatment effects using matrix completion. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Do NOT use when: the panel is nearly fully treated -- matrix completion needs a substantial observed-control block to recover the low-rank structure. Cost: Iterative soft-impute: one SVD of the N x T outcome matrix per iteration, i.e. O(max_iter x N x T x min(N,T)). n_bootstrap multiplies the whole loop -- this is the dominant cost on wide panels. Assumptions: The relationship between the treated unit and controls is stable absent the intervention (causal_impact); Matrix-completion: the untreated potential outcomes follow a low-rank factor structure with treatment as the missingness pattern; No concurrent intervention affects the controls. Pre-conditions: A treated unit with a pre-period and a set of control series, or a panel with a low-rank structure. Failure modes: Pre-period fit is poor or controls are themselves affected by the intervention -> Re-select controls, lengthen the pre-period, or use synthetic-control / DiD diagnostics. Alternatives: sp.synth, sp.sdid, sp.gsynth. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
tolNoConvergence tolerance.
timeYesTime period variable.
unitYesUnit identifier variable.
alphaNoSignificance level.
treatYesBinary treatment indicator (0/1). Can be staggered.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
max_iterNoMaximum iterations for the proximal gradient algorithm.
max_rankNoMaximum rank for the completed matrix. If None, no constraint.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
lambda_regNoNuclear norm regularisation parameter. If None, estimated via the universal threshold: lambda = sigma * sqrt(n).
n_bootstrapNoBootstrap iterations for standard errors.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds substantial behavioral context beyond that: computational complexity (one SVD per iteration, n_bootstrap multiplying the loop), key assumptions (low-rank factor structure, stable pre-treatment relationship absent intervention), and failure modes with consequences. No contradiction with 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?

The description is long but every labeled block (Validation, Cost, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) earns its place and is scannable for an LLM. The core purpose is front-loaded and no sentence is tautological or redundant; only the density of the assumption list keeps it from a 5.

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 complex estimator with 17 parameters and an output schema, the description is close to complete: it covers purpose, when-not-to-use, cost, assumptions, preconditions, failure-mode remediation, alternatives, and minimum-N guidance. Since an output schema exists, the description need not explain return values.

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 100%, so the baseline is 3. The description adds performance semantics for parameters: n_bootstrap 'multiplies the whole loop... this is the dominant cost on wide panels' and max_iter appears in the per-iteration SVD cost, which is genuinely useful for resource planning. Required columns (time, treat, unit, y) are self-explanatory and already documented in the schema.

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 opens with a specific verb+resource: 'Estimate treatment effects using matrix completion.' It is scoped by an explicit exclusion condition (nearly fully treated panels) and names alternatives (sp.synth, sp.sdid, sp.gsynth), though it does not explicitly differentiate from the closely named siblings 'matrix_completion' and 'mc_synth' in the tool list.

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?

Usage guidance is explicit and complete: 'Do NOT use when: the panel is nearly fully treated' states a concrete exclusion, 'Alternatives: sp.synth, sp.sdid, sp.gsynth' routes the agent to substitutes, and 'Pre-conditions' plus 'Failure modes' with remediation ('Re-select controls, lengthen the pre-period') finish the selection story.

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

mc_synthA
Read-only

Matrix Completion Synthetic Control Method. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
tolNoConvergence tolerance (relative change in Frobenius norm).
seedNoRandom seed for reproducibility.
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable name.
placeboNoRun placebo (permutation) inference by treating each control unit as if it were treated.
cv_foldsNoNumber of CV folds for automatic lambda selection.
max_iterNoMaximum Soft-Impute iterations.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoTime-varying covariates to partial out before matrix completion.
lambda_regNoNuclear norm penalty. If ``None`` (default), selected automatically via cross-validation on observed entries.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period (inclusive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds valuable behavioral context: assumptions (SUTVA, no anticipation), pre-conditions, failure modes, and typical minimum N. It does not contradict the annotations and adds transparency about convergence/tracking failures and placebo inference caveats.

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 long but well-structured with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Each section earns its place by informing tool selection and invocation, though the opening is a noun phrase rather than a concise actionable statement.

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?

Given an output schema exists and schema coverage is 100%, the description does not need to explain return values or every parameter. It covers assumptions, preconditions, failure modes, and alternatives, which is strong contextual support for an agent deciding whether and how to invoke this 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 100%, so the schema carries the parameter documentation burden. The description adds conceptual context (donor units, pre-treatment window, RMSPE) but does not describe specific parameter syntax, defaults, or how parameters map to the method's inputs. This is acceptable given full schema coverage but adds limited parameter-level value.

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 identifies the method as 'Matrix Completion Synthetic Control Method' and provides assumptions that imply it estimates treatment effects using donor units to construct a counterfactual. However, it lacks an explicit verb phrase such as 'estimates the causal effect of a treatment on a treated unit', and it does not clearly differentiate itself from siblings beyond listing alternative names.

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 provides explicit pre-conditions (panel structure, pre-treatment window, complete outcome data) and lists alternatives. It also gives conditional guidance in failure modes, e.g., when pre-treatment RMSPE is large it suggests sdid/augsynth. It stops short of explicitly saying 'use this tool when X and not when Y', but the context is largely inferable.

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

mediateA
Read-only

Mediation analysis (Imai-Keele-Tingley 2010). Decomposes the total effect into natural direct effect (NDE) and natural indirect effect (NIE) via an interventional or sequential-ignorability identification strategy. Validation: certified parity evidence. Assumptions: Sequential ignorability: (Y(t,m), M(t)) perp T | X; Y(t,m) perp M | T, X; No post-treatment confounder of the mediator-outcome relationship (classical Imai-Keele-Tingley); SUTVA on both mediator and outcome. Pre-conditions: binary treatment 0/1; mediator is a post-treatment variable causally between treat and y; pre-treatment covariates capture confounding for T-Y, M-Y, T-M. Failure modes: NDE + NIE do not sum to total effect (difference vs product decomposition) -> Nonlinear / interactive mediator model -- use sp.mediate_interventional or four-way decomposition; Sensitivity to unobserved T-M / M-Y confounder unknown -> Always report sp.mediate_sensitivity (Imai-Keele-Yamamoto rho bound); Post-treatment confounder L suspected -> Use sp.four_way_decomposition (VanderWeele 2014) which handles L. Alternatives: sp.mediate_sensitivity, sp.mediate_interventional, sp.four_way_decomposition, sp.proximal. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome
alphaNoSignificance level for confidence intervals and tests.
treatYesBinary treatment
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoBootstrap reps for NDE/NIE CIs
mediatorYesMediator variable
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoPre-treatment confounders
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses statistical assumptions, failure modes, and a required companion sensitivity analysis. It also warns about assumption violations and provides a minimum sample size, adding substantial behavioral context without contradicting 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.

Conciseness5/5

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

The description is dense but well organized: purpose, assumptions, pre-conditions, failure modes, alternatives, and sample-size guidance. The core function is front-loaded in the first sentence, and each subsequent section supports correct invocation or routing to a sibling tool.

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 high-complexity causal mediation tool, the description is remarkably complete: it covers identification assumptions, pre-conditions, failure modes, alternatives, and a minimum N. The output schema already handles return-value details, so the description need not repeat them. An agent has enough context to select and call this tool appropriately.

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 schema already covers all 12 parameters at 100% coverage, so the baseline is 3. The description adds meaning beyond the schema by clarifying that treatment must be binary 0/1, the mediator must be post-treatment and causally between treatment and outcome, and covariates must capture confounding for T-Y, M-Y, and T-M. This is useful extra context, though most parameter-level details are left to the 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 description states a specific verb and resource: 'Decomposes the total effect into natural direct effect (NDE) and natural indirect effect (NIE)' via a named identification strategy. It also distinguishes itself from siblings by explicitly listing alternatives such as sp.mediate_sensitivity, sp.mediate_interventional, sp.four_way_decomposition, and sp.proximal.

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?

The description gives explicit pre-conditions (binary treatment, post-treatment mediator, pre-treatment covariates) and when-to-use alternatives for common failure modes. For example, it directs users to sp.four_way_decomposition when a post-treatment confounder is suspected and always recommends reporting sp.mediate_sensitivity.

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

mediate_interventionalA
Read-only

Interventional (in)direct effects (VanderWeele, Vansteelandt, Robins 2014). Identifies mediation effects in the presence of treatment-induced mediator-outcome confounders where natural (in)direct effects are not identified. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Sequential exchangeability / no unmeasured confounding at each time point; Positivity: every treatment level is possible given the past; Correct specification of the treatment and/or outcome models. Pre-conditions: Sequentially measured covariates, (time-varying) treatment, and outcome; Models for the treatment process and the outcome (or weights). Failure modes: Stabilized weights have extreme values (positivity near-violation) -> Truncate weights, simplify the treatment model, or use a doubly-robust estimator (TMLE). Alternatives: sp.tmle, sp.g_computation, sp.ipw. Typical minimum N: 300.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome
treatYesBinary treatment
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
mediatorYesMediator variable
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoBaseline covariates
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
tv_confoundersNoTreatment-induced M-Y confounders

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark this read-only, and the description is consistent ('Identifies'). Beyond that, it discloses validation tier, assumptions (sequential exchangeability, positivity, correct model specification), pre-conditions, failure modes with concrete remedies, and a typical minimum N. This is rich behavioral context that annotations do not provide.

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?

Every sentence serves a distinct purpose: purpose, validation, assumptions, pre-conditions, failure modes, alternatives, and minimum N. Section labels make it scannable despite the length, and the core purpose is front-loaded.

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 complex causal inference tool, the description covers identification conditions, assumptions, required inputs, failure modes, and remediation, with alternatives. An output schema exists, so not describing return values is acceptable. Nothing essential to correct invocation or expectation-setting is missing.

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?

Input schema descriptions cover 100% of the 11 parameters, so the baseline is 3. The description adds conceptual context (e.g., covariates and tv_confounders as sequentially measured variables) but does not elaborate on individual parameter syntax, defaults, or formats beyond what the schema already states.

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 opens with a specific statistical target ('Interventional (in)direct effects'), then states the verb 'Identifies mediation effects' and the precise condition (presence of treatment-induced mediator-outcome confounders where natural effects are not identified). This distinguishes it from siblings like mediation, frontdoor, or mediation_decompose without needing 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 gives a clear use case ('where natural (in)direct effects are not identified') and lists explicit alternatives (sp.tmle, sp.g_computation, sp.ipw). It also lists pre-conditions and typical N. However, it does not provide explicit 'when-not-to-use' conditions or decision rules for choosing between the alternatives, so it is not a full routing guide.

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

mediationC
Read-only

Causal-mediation analysis -- article-facing alias for Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
XNoFeature matrix or covariate DataFrame.
dYesd parameter (str).
mYesm parameter (str).
yYesOutcome variable column name or outcome array.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

readOnlyHint=true and openWorldHint=false already convey the safety profile, so the description does not need to restate that. However, it adds no behavioral detail beyond the annotations; 'certified parity evidence' is too vague to inform the agent about what happens when the tool runs, what it returns, or what validations it performs.

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

Conciseness2/5

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

The description is short, which is good, but the second half is a confusing alias clause that does not earn its place. It is under-specified rather than effectively concise, and it front-loads domain vocabulary without explaining it.

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?

Given 10 parameters, 4 required fields, an output schema, and a large sibling list, a single cryptic phrase is insufficient context. The description fails to explain what the core columns d, m, and y are, what 'parity evidence' means, or how this tool relates to mediation_decompose/mediate, though output schema and annotations do cover some return and safety aspects.

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 100%, so the baseline is 3 even without parameter information in the description. Yet several schema entries are tautological ('d parameter (str)', 'm parameter (str)'), and the description itself adds nothing to clarify what d, m, y, or X actually mean in the mediation context.

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 the domain ('Causal-mediation analysis'), so it is not a pure tautology of the tool name 'mediation'. However, it is not a verb+resource statement and it does not differentiate this tool from closely related siblings like mediation_decompose, mediate, or mediate_interventional. The appended phrase 'article-facing alias for Validation: certified parity evidence' is cryptic and does not clarify the tool's purpose.

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 is provided about when to use mediation versus the many related mediation or validation tools. The description neither states conditions nor names alternatives, leaving the agent to choose based solely on the tool name.

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

mediation_decomposeC
Read-only

Linear nested-models mediation decomposition (VanderWeele 2014 Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
mediatorYesmediator parameter (str).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
inferenceNoinference parameter (str).analytical
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesTreatment indicator, treatment variable, or treatment array.
covariatesNoCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true, which covers safety, but the description adds no behavioral contextβ€”no mention of what the output contains, whether it requires specific data formats, or any side effects. It merely mentions a 'Validation' tier that seems out of place.

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

Conciseness2/5

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

The description is short but poorly structured: it reads like a cut-off sentence and includes an irrelevant validation phrase. It is not concise in a useful wayβ€”it omits essential information while including a confusing fragment.

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?

Given 14 parameters, an output schema, and a long list of related decomposition tools, the description fails to explain the tool's purpose, use cases, or how it differs from siblings. It is far from complete for an agent to decide correctly.

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 100%, so all parameters are documented. The description adds nothing beyond that, but the baseline of 3 is appropriate given the schema already carries the semantic weight.

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

Purpose2/5

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

The description is a fragment: 'Linear nested-models mediation decomposition (VanderWeele 2014' followed by an unrelated validation note. It names the method family but never states what the tool actually does (e.g., decomposes total effect into direct/indirect components). It is not a tautology, but it is too vague and incomplete to guide an agent.

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

Usage Guidelines1/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 many mediation siblings (mediation, mediate_interventional, decompose, disparity_decompose). No conditions, exclusions, or alternatives are mentioned.

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

megammaB
Read-only

Random-effects Gamma GLMM with log link (Stata meglm family(gamma)).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
nAGQNonAGQ parameter (int).
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
offsetNoOffset term or offset column.
x_fixedYesx_fixed parameter (Sequence[str]).
x_randomNox_random parameter (Optional[Sequence[str]]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered without description. The description adds model-specific context (log link, Stata family(gamma)) but discloses nothing about convergence, result structure, or edge cases; the output schema presumably covers the return format. This is adequate 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.

Conciseness5/5

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

One compact sentence with no filler; the model specification and Stata reference are both front-loaded. It earns its place, though it is terse.

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 12-parameter model with a full output schema and readOnly annotation, the description is serviceable but minimal: it names the model and link but omits when-to-use context and any note about required data shape. The rich schema compensates for most gaps, but not the usage ambiguity.

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 100%, so the baseline is 3. The description adds no parameter-level meaning; all parameter semantics are carried by the input schema.

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 identifies the tool as a random-effects Gamma GLMM with log link and cites the Stata equivalent (meglm family(gamma)). It lacks an explicit verb like 'fit' or 'estimate,' but the model name unambiguously conveys the operation and the 'gamma' qualifier helps distinguish it from generic meglm and other mixed-model siblings.

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 is given about when to use this tool instead of alternatives; it does not mention that this is for gamma-distributed positive outcomes or that generic meglm covers other families. An agent must infer usage from the Stata reference and sibling names, so this dimension is weak.

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

meglmC
Read-only

Fit a generalised linear mixed model.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column. For binomial models this is the number of successes; pair it with ``trials=`` to model proportions.
tolNoOptimisation controls / CI width. The default ``tol=1e-8`` keeps the Laplace fixed-effect solution aligned with lme4/Stata reference likelihood optima on the parity fixtures. For AGHQ (``nAGQ > 1``), the default optimiser budget is internally tightened to ``maxiter=5000`` and ``tol=1e-12``; explicit user-supplied controls are respected.
nAGQNoNumber of adaptive Gauss-Hermite quadrature points per scalar random effect. ``1`` (default) == Laplace approximation. Use ``nAGQ=7`` to match Stata ``meglm intpoints(7)``; values ``> 1`` require a single scalar random effect (no random slopes).
alphaNoOptimisation controls / CI width. The default ``tol=1e-8`` keeps the Laplace fixed-effect solution aligned with lme4/Stata reference likelihood optima on the parity fixtures. For AGHQ (``nAGQ > 1``), the default optimiser budget is internally tightened to ``maxiter=5000`` and ``tol=1e-12``; explicit user-supplied controls are respected.
groupYesGrouping variable for random effects.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
familyNo``'gaussian'``, ``'binomial'``, ``'poisson'``, ``'gamma'``, or ``'nbinomial'`` (alias ``'negbin'``).gaussian
offsetNoColumn of fixed offsets added to the linear predictor (e.g. ``log(exposure)`` for Poisson rate models).
trialsNoColumn of trial counts for binomial responses. Defaults to 1 (Bernoulli).
maxiterNoOptimisation controls / CI width. The default ``tol=1e-8`` keeps the Laplace fixed-effect solution aligned with lme4/Stata reference likelihood optima on the parity fixtures. For AGHQ (``nAGQ > 1``), the default optimiser budget is internally tightened to ``maxiter=5000`` and ``tol=1e-12``; explicit user-supplied controls are respected.
x_fixedYesFixed-effect regressors (intercept added automatically).
cov_typeNoRandom-effect covariance: ``'unstructured'`` (default), ``'diagonal'``, ``'identity'``.unstructured
x_randomNoRandom-slope variables; defaults to random intercept only.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

The description adds nothing beyond the readOnlyHint annotation, which indicates the tool does not mutate data. It does not disclose any behavioral traits like how it handles missing data, whether it caches results (as_handle parameter implies caching), or what the output contains. Since the description carries the burden when annotations are minimal, this is a significant gap.

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

Conciseness2/5

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

The description is extremely concise (one sentence), but for a tool with 18 parameters and an output schema, this is under-specified rather than appropriately concise. It does not front-load any decision-relevant information or structure the content for quick scanning.

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?

Given the tool's complexity (18 parameters, output schema), the description is far from complete. It omits usage context, typical workflows, output interpretation, and any caveats. While the schema carries a lot of weight, the description should at least mention when to use this tool or what makes it distinct.

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 100%, so the schema already documents all parameters in detail. The description adds no extra parameter semantics beyond the one-liner, but it does not need to since the schema is comprehensive. Baseline 3 is appropriate.

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 clearly states the tool fits a generalized linear mixed model, which is a specific verb and resource. However, it does not distinguish itself from sibling tools like 'mixed', 'melogit', 'mepoisson', or 'menbreg' that also fit mixed models, so the agent might not know which one to pick without inspecting schemas.

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 alternatives such as 'mixed' or other mixed-model siblings. The description offers no context about specific scenarios, data requirements, or exclusions, leaving the agent to infer usage from the name alone.

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

melly_decomposeC
Read-only

Melly (2005) quantile decomposition.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_tau_qrNoNumber of tau qr.
tau_gridNoGrid of tau values to evaluate.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
referenceNoSame convention as ``machado_mata``: ``reference=0`` uses A's beta on B's X (coefficient-swap counterfactual F_{Y<0|1>}), opposite to ``dfl_decompose`` whose ``reference=0`` uses A's X with B's beta.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

With readOnlyHint=true, the safety profile is already known, so the bar is lower. However, the description adds no behavioral context beyond the labelβ€”no mention of what quantities are produced, how the reference convention affects results, or what assumptions matter. It does not contradict the annotations, but it also adds nothing beyond them.

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

Conciseness2/5

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

The description is extremely short, which is superficially concise, but for a 12-parameter tool with a large sibling family this is under-specification rather than deliberate conciseness. A one-line label does not earn its place as an adequate tool description.

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 schema is rich and an output schema exists, but the top-level description is too thin to support tool selection among dozens of decomposition-related siblings. An agent cannot tell from this description what problem it solves, when to prefer it, or what its output represents without relying entirely on external knowledge of Melly (2005).

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 100%, and the input schema provides detailed meaning for every parameter, including the reference convention and payload-depth options. The description itself contributes no parameter semantics, so the baseline 3 is appropriate.

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

Purpose2/5

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

The description is essentially a tautological label: 'Melly (2005) quantile decomposition' restates the tool name with a citation. It never states the action or resource explicitly (e.g., 'decomposes the outcome gap across quantiles') and does not distinguish it from the many sibling decomposition tools such as dfl_decompose or machado_mata.

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 top-level guidance says when to use this tool instead of alternative decomposition methods. The only hint of alternatives appears deep in the 'reference' parameter description, which contrasts conventions with machado_mata and dfl_decompose; that is useful for a parameter choice but not for selecting the tool itself.

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

melogitA
Read-only

Random-effects logistic regression (Stata melogit). Validation: certified parity evidence. Assumptions: Binary outcome with logit link conditional on random effects; Cluster-level random intercepts (and slopes) are normally distributed; Random effects independent of covariates (no correlated-effects endogeneity). Pre-conditions: Binary (0/1) outcome; Grouping variable for the random effects. Failure modes: Adaptive quadrature likelihood does not converge -> Increase quadrature points or simplify the random-effects structure to a single intercept; Estimated random-effect variance near zero (no clustering) -> Drop the random effect and fit ordinary logit; Perfect separation in a sparse cluster -> Collapse sparse categories or add a weak penalty/prior. Alternatives: sp.mixed, sp.regress. Typical minimum N: 300.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
nAGQNonAGQ parameter (int).
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
trialsNotrials parameter (Optional[str]).
x_fixedYesx_fixed parameter (Sequence[str]).
x_randomNox_random parameter (Optional[Sequence[str]]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

The description discloses assumptions, pre-conditions, and failure modes, which is valuable context beyond the readOnlyHint annotation. It tells the agent what could go wrong and what remedial steps to take, and it does not contradict 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?

The description is organized into labeled sections and packs substantial information into a compact form. The phrase 'Validation: certified parity evidence' is cryptic and somewhat unexplained, but the rest of the content is purposeful and front-loaded.

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?

Given the model complexity, 12 parameters, and an output schema, the description covers assumptions, pre-conditions, failure modes, and alternatives. It could be slightly more complete by explicitly connecting failure-mode advice (e.g., increasing quadrature points) to the nAGQ parameter, but overall it gives enough context 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 100%, so the schema already documents all parameters. The description reinforces that the outcome must be binary and that a grouping variable is required, but it does not add meaning for specific parameters like nAGQ, x_random, or detail beyond what the schema already says.

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 clearly identifies the tool as random-effects logistic regression and gives Stata's melogit as an anchor, so an agent can recognize the model family. It does not explicitly distinguish it from sibling mixed-model tools like meglm or meologit, and the named alternatives (sp.mixed, sp.regress) are not in the provided sibling list, which slightly weakens differentiation.

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 pre-conditions (binary outcome, grouping variable), failure modes (non-convergence, near-zero variance, perfect separation), and a typical minimum N give concrete context for when to call this tool. It does not explicitly say when to prefer meglm/meologit/logit over this tool, though the failure-mode advice to fall back to ordinary logit is useful.

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

menbregB
Read-only

Random-effects negative-binomial regression (Stata menbreg).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
nAGQNonAGQ parameter (int).
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
offsetNoOffset term or offset column.
x_fixedYesx_fixed parameter (Sequence[str]).
x_randomNox_random parameter (Optional[Sequence[str]]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

The readOnlyHint annotation already signals a safe, non-mutating operation, and the description is consistent with that. The description adds no extra behavioral context beyond the model name, such as whether fitting caches results or how the detail payload varies, but the schema documents the as_handle and detail behaviors.

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 extremely compact and front-loads the key model family. The parenthetical '(Stata menbreg)' is near-redundant with the tool name but is not harmful.

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 rich input schema and output schema cover data handling, parameter meanings, and return behavior, so the description does not need to repeat them. However, the description leaves an important selection ambiguity unresolved: xtnbreg is near-identical in name and model family, and the description never clarifies that menbreg is the mixed/multilevel variant.

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 100%, so the parameter documentation carries the burden and the description correctly does not duplicate it. Several schema descriptions are thin (e.g., 'nAGQ parameter (int).'), but the baseline for high coverage is still 3.

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 phrase 'Random-effects negative-binomial regression (Stata menbreg)' identifies the statistical model and the tool's Stata heritage, which is clear enough for an expert agent. There is no explicit verb like 'fits' or 'estimates', and it does not distinguish menbreg from the very similar sibling xtnbreg.

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 gives no guidance on when to use menbreg versus alternatives such as xtnbreg, nbreg, or meglm. No context, prerequisites, or exclusion criteria are provided, so an agent must rely on prior knowledge to select this tool correctly.

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

meologitA
Read-only

Random-effects ordinal logit (Stata meologit, R ordinal::clmm).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
tolNoNumerical convergence tolerance.
nAGQNonAGQ parameter (int).
alphaNoSignificance level for confidence intervals and tests.
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
offsetNoOffset term or offset column.
maxiterNomaxiter parameter (int).
x_fixedYesx_fixed parameter (Sequence[str]).
cov_typeNoCovariance estimator type.unstructured
x_randomNox_random parameter (Optional[Sequence[str]]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

The readOnlyHint annotation already covers the safety profile, so the bar for additional behavioral disclosure is lower. The description adds the Stata and R implementation equivalents, which provide some context about the estimator, but it does not describe convergence behavior, caching via as_handle, or what happens with large panels.

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 a single tight sentence with no filler or redundancy. It front-loads the model name and immediately gives cross-software references, which is efficient for an agent scanning many sibling tools.

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 schema is rich and covers parameters, and an output schema exists, so the description does not need to explain return values. However, given the very large sibling set and the absence of explicit usage guidance, the one-line description is minimal but not fully complete for a 16-parameter model-fitting 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 description coverage is 100%, so the baseline is 3 and the parameters are already well-documented in the input schema. The description itself does not explain any parameters, and while the Stata/R references hint at syntax conventions, they add little semantic value beyond the schema.

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 identifies the exact statistical method: 'Random-effects ordinal logit,' which is specific and distinguishes it from siblings like melogit (random-effects logit) and ologit (ordinal logit without random effects). It lacks an explicit verb such as 'fits' or 'estimates,' but the model-family name makes the operation clear.

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 model type implies usage: ordinal outcomes with random effects, so an agent can infer when to select it over melogit or ologit. However, the description never explicitly states when to use this tool versus alternatives, nor does it mention data assumptions or exclusions such as binary outcomes.

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

mepoissonA
Read-only

Random-effects Poisson regression (Stata mepoisson).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
nAGQNonAGQ parameter (int).
groupYesGroup or cohort identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
offsetNoOffset term or offset column.
x_fixedYesx_fixed parameter (Sequence[str]).
x_randomNox_random parameter (Optional[Sequence[str]]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare the operation read-only, and the description adds the model-family detail and Stata-equivalent label. It does not describe convergence behavior, random-effects parameterization, or edge cases, but with the annotations and output schema present the core safety profile is covered.

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 states the estimator and its Stata alias without any filler or redundancy. It is as concise as possible while adding value beyond the tool name.

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 detailed input schema, output schema, and annotations cover invocation and return shape, and the method label conveys the statistical context. However, with many overlapping siblings (meglm, xtnbreg, poisson, fepois), the lack of explicit selection criteria keeps it from being fully complete.

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?

The description contributes no parameter information, but the input schema has descriptions for all 12 parameters (100% coverage), so the schema carries the parameter-semantics burden. Even if a few schema entries are terse (e.g., nAGQ), the description is not required to compensate under the baseline.

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 clearly identifies the estimator as random-effects Poisson regression and maps it to the Stata `mepoisson` command, so the agent knows exactly what model family is being requested. It is distinct from the plain `poisson` sibling by the 'random-effects' qualifier, though it doesn't spell out an action verb like 'fit' or 'estimate'.

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 context is only implied by the method name: Poisson implies count outcomes and random-effects implies clustered/grouped data. The description does not name alternatives such as `poisson`, `meglm`, `xtnbreg`, or exclusion conditions like overdispersion, so the agent gets no explicit routing guidance.

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

meta_analysisB
Read-only

Summary-data meta-analysis with fixed- and random-effects pooling. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
seYesPer-study standard errors (must be positive).
alphaNoSignificance level for confidence/prediction intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
labelsNoStudy labels for the forest plot.
methodNoWhich model the headline ``estimate`` reports: DerSimonian-Laird random effects (default) or fixed-effect inverse-variance. Both are always computed and available on the result.DL
effectsYesPer-study effect sizes (e.g. log odds ratios, mean differences).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

The description adds that both fixed- and random-effects pooling are supported and mentions validation, which is some behavioral context beyond the readOnlyHint annotation. However, 'certified parity evidence' is vague, and the description does not disclose what output the caller should expect or any limitations.

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 very short and front-loaded with the core purpose. The validation tag is compact but somewhat cryptic, so it does not fully earn its place; still, the overall structure is efficient given the rich schema.

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 a rich 11-parameter schema, full parameter documentation, an output schema, and readOnly annotations, the tool is usable without extensive prose. However, the description lacks any usage context, alternative routing, or behavioral expectations, leaving the agent to infer the tool's role from its name and schema alone.

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 100%, so the schema already documents all parameters, including method, detail, data_path, and result_id. The description itself adds no parameter-level meaning beyond calling the data 'summary-data,' which weakly maps to the required effects and se arguments.

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 clearly states that the tool performs summary-data meta-analysis with fixed- and random-effects pooling, naming the resource and the statistical approach. It is specific enough to distinguish it from most sibling tools, though it does not explicitly contrast it with any alternative meta-analysis-related tool.

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 about when to use this tool versus alternatives. The phrase 'Validation: certified parity evidence' does not help an agent choose between meta_analysis and any related method or decide on prerequisites.

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

metalearnerA
Read-only

Meta-learner framework for CATE: S-, T-, X-, R-, DR-Learner. Validation: certified parity evidence. Assumptions: Unconfoundedness: Y(d) perp D | X; Overlap: 0 < P(D=1 | X) < 1; For R-Learner / DR-Learner: orthogonality between treatment residual and outcome residual. Pre-conditions: binary treatment (0/1); covariates numeric; categoricals encoded; enough treated AND control to train separate outcome models (T/X/DR-Learner). Failure modes: Large divergence across learner types -> Use sp.compare_metalearners to identify which learner is biased; DR-Learner is safest under model misspecification; S-Learner estimates near zero regardless of true effect -> S-Learner regularization smooths treatment coefficient toward zero; use T/X/DR instead; X-Learner fails when treated group is very small -> X-Learner needs well-identified control-outcome model; fall back to T-Learner or weighted T-Learner. Alternatives: sp.causal_forest, sp.dml, sp.tmle, sp.bcf. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
treatYesBinary treatment column (0/1)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
learnerNoLearner typedr
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

The description discloses extensive behavioral traits beyond the readOnlyHint=true annotation: assumptions (unconfoundedness, overlap), failure modes per learner (e.g., S-Learner regularizes treatment toward zero, X-Learner fails with small treated group), and validation claims. This goes far beyond the structured annotations.

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 dense but every sentence carries value: it front-loads the core function, then assumptions, pre-conditions, failure modes, and alternatives in a logical order. No filler or redundancy.

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 tool's complexity (10 parameters, multiple learner types) and the existence of an output schema, the description covers assumptions, pre-conditions, failure modes, alternatives, and typical N. It does not explain return format but the output schema covers that. It is remarkably complete for an agent to call correctly.

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 100%, so the schema already documents all parameters. The description mentions 'binary treatment' and 'covariates numeric' which are also in the schema descriptions, adding little new semantic meaning beyond what the schema provides. Baseline 3 is appropriate.

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: 'Meta-learner framework for CATE' with explicit learner types (S-, T-, X-, R-, DR-Learner). It lists alternatives but does not explicitly differentiate when to use this vs those siblings, so it is clear but not sharply distinguished.

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 provides pre-conditions (binary treatment, numeric covariates, enough treated/control), a typical minimum N, and failure modes that guide when to fall back to alternatives. It lists alternatives (causal_forest, dml, tmle, bcf) but does not explicitly state when to choose metalearner over them, though the pre-conditions imply the intended context.

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

methods_appendixB
Read-only

Generate a referee-grade Methods and Formulas appendix for results.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
formatNoOutput format. ``"latex"`` emits ``\subsection*`` blocks with display math; ``"markdown"`` emits ``###`` headings with ``$$`` math; ``"text"`` emits a plain-text rendering.latex
resultsYesOne or more fitted result objects exposing ``method`` / ``model_info`` / ``cite``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_citationNoAppend the APA-style reference from ``result.cite()``.
include_provenanceNoAppend a one-line provenance trace (StatsPAI version + estimator identity + methods-spec key) -- the "exact code path" leg of the formula / citation / code-path traceability triple.
include_assumptionsNoInclude the identifying-assumptions list.
include_diagnosticsNoInclude the inference block (SE method, clustering, bandwidth, F, CI).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true and openWorldHint=false, so the agent already knows this is a safe, closed read operation. The description adds no behavioral context beyond the word 'generate'β€”it does not mention side effects, output size, caching, or anything else not already captured by 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?

The description is a single front-loaded sentence with no wasted words. It is appropriately concise, though it lacks any additional structure or detailβ€”acceptable given the small size, but not as information-dense as the strongest examples.

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?

Given the extremely detailed parameter schema, the read-only annotations, and the presence of an output schema, the one-sentence purpose statement is largely sufficient for an agent to understand what the tool does and what it returns. It does not cover usage context, but that is the responsibility of the usage-guidelines dimension.

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 100%, so all 12 parameters including the required 'results' and the enums for detail/format are already well documented. The tool description itself adds no parameter-level meaning beyond what the schema provides, so the baseline 3 applies.

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: it generates a referee-grade Methods and Formulas appendix from results. This clearly distinguishes it as a reporting utility, though it does not explicitly contrast itself with sibling reporting tools such as cs_report or robustness_report.

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 gives no guidance on when to use this tool instead of the many sibling reporting and robustness tools. It does not state when it is appropriate, what prerequisites exist (e.g., a previously fitted result), or when an alternative would be preferable.

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

mincer_wage_panelC
Read-only

Two-period Mincer wage distribution with a structural shift.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNon parameter (int).
seedNoRandom seed for reproducible stochastic steps.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, so the read-only safety profile is covered. However, the description adds almost no behavioral context: it does not say whether the tool simulates, loads, fits, or returns a table, nor what side effects or output semantics to expect beyond the vague 'structural shift' phrase.

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

Conciseness2/5

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

The single sentence is short and has no filler, which is superficially concise, but it is under-specified for an 8-parameter tool. It omits the operation and usage context, so the brevity reads as underspecification rather than appropriately sized content, and there is no front-loaded action to orient the agent.

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?

Even with an output schema and read-only annotations, an agent cannot determine whether to supply data_path or rely on n, what the returned object represents, or how this tool relates to sibling wage and structural-shift tools. The essential orientation about what the tool is for is missing.

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 100%, with useful parameter descriptions for detail, as_handle, data_path, and result_id. The tool description itself adds nothing about parameters, but at full schema coverage the schema carries the semantic burden, so the baseline 3 is appropriate.

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 is a noun phrase β€” 'Two-period Mincer wage distribution with a structural shift' β€” with no verb or operation such as generate, fit, load, or return. It conveys an econometric topic but leaves it unclear whether the tool simulates data, returns a distribution, or estimates a model, and it does not distinguish itself from siblings like cps_wage or structural_break.

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 is provided. The description does not tell an agent whether to choose this tool over sibling wage-panel, dataset, or structural-break tools, and no context or exclusions are given.

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

mixedA
Read-only

Fit a linear mixed-effects model. Validation: certified parity evidence. Assumptions: Continuous outcome, linear in fixed effects; Random effects (intercepts/slopes) normally distributed with the chosen covariance structure; Residuals normal and homoscedastic conditional on random effects; random effects independent of covariates. Pre-conditions: Continuous outcome; Grouping variable (or nested list of grouping levels) for random effects. Failure modes: REML/ML optimizer fails to converge with rich random-slope covariance -> Switch cov_type to 'diagonal' or 'identity', or drop random slopes; Singular covariance (boundary variance estimate) -> Simplify the random-effects covariance or remove the offending random term; Binary or count outcome passed to a linear model -> Use a generalized mixed model for the appropriate family. Alternatives: sp.regress, sp.melogit, sp.feols. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesDependent variable column.
tolNoOptimiser controls and inference significance level. The defaults use a tight likelihood tolerance so REML variance components and ICC agree with R ``lme4`` / Stata ``mixed`` on parity fixtures.
alphaNoOptimiser controls and inference significance level. The defaults use a tight likelihood tolerance so REML variance components and ICC agree with R ``lme4`` / Stata ``mixed`` on parity fixtures.
groupYesGrouping variable. Pass a list like ``["school", "class"]`` to estimate a three-level nested model -- the innermost level is used as the cluster for the random slopes/intercept; the outer levels enter as additional random-intercept blocks.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo``'reml'`` (default) or ``'ml'``.reml
maxiterNoOptimiser controls and inference significance level. The defaults use a tight likelihood tolerance so REML variance components and ICC agree with R ``lme4`` / Stata ``mixed`` on parity fixtures.
x_fixedYesFixed-effect regressors (intercept is added automatically).
cov_typeNoParameterisation of the random-effect covariance matrix *G*: ``'unstructured'`` (default), ``'diagonal'``, or ``'identity'``.unstructured
x_randomNoRandom-slope variables. ``None`` => random intercept only.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior1/5

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

Annotations declare readOnlyHint=true, but the description says 'Fit' a model and the as_handle parameter 'cache[s] the fitted result on the server' and returns a result_id for chaining. This implies server-side state mutation, directly contradicting the read-only 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?

The description is fairly long but well-organized into labeled blocks (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical N). The purpose is front-loaded, and each block serves a distinct decision-making purpose for an agent.

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 15-parameter statistical tool with full schema descriptions and an output schema, the description covers assumptions, preconditions, failure modes, alternatives, and minimum sample size. Return-value details are legitimately left to the output schema.

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 100%, so the baseline is 3. The description adds value by linking failure modes to parameter choices (cov_type, x_random) and warning against outcome types that violate the model, which is guidance beyond the 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 first sentence states a specific verb and resource: 'Fit a linear mixed-effects model.' The failure-modes section explicitly distinguishes linear from generalized mixed models for binary/count outcomes, and the alternatives list names sp.melogit and sp.feols, giving clear sibling differentiation.

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?

Pre-conditions are explicit (continuous outcome, grouping variable), failure modes include concrete remediation steps (e.g., switch cov_type to 'diagonal' or 'identity', drop random slopes), and alternatives are named. This provides clear when-to-use and when-not-to-use guidance.

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

mixlogitC
Read-only

Mixed Logit (random-coefficient MNL) via simulated maximum likelihood.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesColumn name with the 0/1 chosen indicator.
altNoAlternative identifier -- accepted for API compatibility with ``statsmodels.MNLogit`` / Stata conventions, but the ordering of alternatives is taken directly from the DataFrame's row order within each ``chid`` group.
tolNoNumerical convergence tolerance.
chidYesChoice-situation identifier. All rows with the same ``chid`` form one choice set.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoReport OPG-sandwich robust SEs. ``False`` -> classical inverse Hessian.
maxiterNomaxiter parameter (int).
n_drawsNoNumber of Halton draws per individual. Rule-of-thumb: use ``>= 1000`` for correlated models or precise inference.
verboseNoverbose parameter (bool).
x_fixedNoColumns entering with fixed (non-random) coefficients.
panel_idNoIndividual identifier. When provided, the SAME draws of the random coefficients are used for every choice of the individual (Train 2009 Section 6.5). Omit for cross-sectional data.
x_randomNoColumns entering with random coefficients (at least one required).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
correlatedNoIf True, estimate a full Cholesky factor of ``cov(beta_random)``; otherwise only diagonal standard deviations.
halton_seedNohalton_seed parameter (int).
random_distNoPer-random-variable distribution -- one of ``'normal'`` (default), ``'lognormal'``, ``'triangular'``.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds no behavioral contextβ€”no mention of what the tool returns, whether it caches results, or any side effects. It does not contradict the annotations, but it adds no value beyond them, so a 2 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?

The description is a single concise sentence, front-loading the model type and method. It has zero waste and is instantly parseable. It lacks any structural elaboration, but for a description this short, that is acceptable. Not a 5 because it does not provide additional context that would aid scanning.

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?

Given the tool's complexity (21 parameters, required arguments, nested objects, output schema), a one-line description is inadequate. While the schema and output schema cover many details, the description leaves out usage context, expected inputs, and behavioral traits. An agent cannot confidently decide to call this tool without consulting extensive schema and sibling information.

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 100%, so all 21 parameters are documented in the schema. The description itself contributes nothing about parameters, making the baseline 3 appropriate. It neither enhances nor degrades the parameter understanding beyond the schema.

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 clearly names the model ('Mixed Logit') and the estimation method ('simulated maximum likelihood'), which distinguishes it from siblings like clogit or mlogit. It lacks an explicit verb ('estimates') but the model name unambiguously implies the action. It does not explicitly differentiate from alternatives, hence 4 rather than 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?

The description provides no guidance on when to use this tool versus alternatives such as mlogit, clogit, or mixed. It does not mention panel data needs, random coefficients, or cross-sectional cases. The schema parameters hint at usage, but the description itself is silent, so an agent gets no routing help.

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

ml_boundsA
Read-only

ML-enhanced partial-identification bounds on the ATE. Assumptions: Only weak (set-identifying) assumptions are imposed; the result is an interval, not a point; Lee bounds add monotonicity of selection; Oster's delta adds proportional selection on observed vs. unobserved. Pre-conditions: The data needed for the point-identifying analysis, plus the weakest credible identifying restriction; For Lee bounds: a binary selection/attrition indicator. Failure modes: Bounds are too wide to be informative -> Add a credible auxiliary restriction (monotone treatment response, instrument) to tighten the bounds. Alternatives: sp.oster_delta, sp.lee_bounds, sp.manski_bounds. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome and 0/1 treatment column names.
alphaNoSignificance level of the band.
treatYesOutcome and 0/1 treatment column names.
y_maxNoA priori bounds on Y. Defaults to the empirical min/max. **Tighter** external bounds (e.g. if Y is a probability, use ``[0, 1]``) give tighter ML bounds.
y_minNoA priori bounds on Y. Defaults to the empirical min/max. **Tighter** external bounds (e.g. if Y is a probability, use ``[0, 1]``) give tighter ML bounds.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
learnerNo"random_forest" Outcome-regression learner. Ignored if ``custom_learner`` is set.random_forest
n_splitsNoNumber of cross-fitting folds.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariates X used for the outcome / propensity regressions.
n_bootstrapNoNon-parametric bootstrap replicates for the 2-sided frequentist band. Set to 0 to return the raw plug-in bounds only.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
custom_learnerNoAny ``.fit()`` / ``.predict()``-compatible regressor.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

The readOnlyHint=true annotation already covers safety, so the description's job is to add behavior beyond that β€” and it does: the output is an interval not a point, Lee/Oster variants impose different assumptions, and the failure mode (bounds too wide β†’ add an auxiliary restriction) tells the agent how the tool's output can be uninformative and how to respond. Typical minimum N is also disclosed. It does not mention runtime or bootstrap behavior, but the output schema and schema-level parameter docs pick up some of that load.

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 compact (~75 words) with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives) that make it scannable and front-loaded with the core purpose. Every chunk carries information. The telegraphic labels occasionally blur categories β€” 'For Lee bounds' and 'Oster's delta' read like assumptions before resolving into variant-specific notes β€” which is a minor structural cost.

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 17-parameter tool with a 100%-covered schema, an output schema, and read-only annotations, the description covers the essential non-schema ground: assumptions, data pre-conditions, failure modes, an alternative-routing list, and a sample-size heuristic. It is missing an explicit 'when not to use' statement and does not connect the tightening restrictions mentioned in failure modes to the named sibling tools, but nothing an agent needs to call it correctly is absent.

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 100%, so the baseline of 3 applies; every parameter is already documented in the schema, including the y_min/y_max tightness insight. The tool description adds context (Lee bounds require a binary selection indicator; typical minimum N=100) but never maps these to specific parameter names, so it supplements rather than replaces schema-level meaning. A 3 reflects that the schema does the heavy lifting and the description adds only marginal param-level value.

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 opening phrase 'ML-enhanced partial-identification bounds on the ATE' gives a specific verb+resource and sharply scopes the tool to set-identifying, ML-based interval estimates. The follow-up 'the result is an interval, not a point' distinguishes it from point-identifying ATE estimators. However, it stops short of explicitly contrasting itself with its closest siblings (e.g., 'for non-ML bounds use manski_bounds'), leaving that to the Alternatives line.

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 gives clear context: use when only weak set-identifying assumptions are credible, and it specifies pre-conditions (data for point-identifying analysis plus a weakest credible restriction, a binary selection indicator for Lee bounds). It lists alternatives (sp.oster_delta, sp.lee_bounds, sp.manski_bounds) and a failure-mode remedy. It does not state explicit when-not conditions or map each alternative to a concrete selection criterion, and the 'sp.' prefixes do not exactly match the sibling tool names.

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

mlogitB
Read-only

Multinomial logit for J > 2 unordered categories via MLE. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoRegressors.
yNoDependent variable (categorical, integer-coded).
rrrNoReport Relative Risk Ratios (exp(beta)) instead of coefficients.
tolNoNumerical convergence tolerance.
baseNoBase / reference category (index into sorted unique values).
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNo``"robust"`` / ``"HC1"`` for Huber-White sandwich SE.nonrobust
clusterNoCluster variable for clustered SE.
formulaNoFormula ``"y ~ x1 + x2"``.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, covering safety and external dependencies. The description adds a cryptic 'Validation: certified parity evidence' claim, which is not clearly explained and does not disclose behaviors like return format, errors, or prerequisites. It does not contradict 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?

The description is very briefβ€”two sentences. The first sentence is front-loaded and clearly states the purpose. However, the second sentence about 'Validation: certified parity evidence' is vague and may not earn its place without more context.

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?

Although the schema is comprehensive with 16 parameters and an output schema, the description lacks contextual information about typical workflows, data requirements, or when to choose this tool among many related alternatives. It is minimally adequate but does not fully support an agent's decision-making.

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 100%, with every parameter described in detail. The description adds no parameter semantics beyond the schema, so the baseline of 3 is appropriate.

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 clearly states the model type (multinomial logit), scope (J > 2 unordered categories), and estimation method (MLE). This distinguishes it from binary logit (logit), ordered logit (ologit), and conditional logit (clogit), which are common siblings.

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 is provided on when to use this tool versus alternatives. The description does not mention when mlogit is appropriate (e.g., outcome has 3+ unordered categories) or when to choose other tools like mixlogit or clogit. This is a significant gap given the large sibling set.

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

model_averaging_dmlB
Read-only

Model-averaging / stacking DML-PLR estimator. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column.
seedNoRandom seed for reproducible stochastic steps.
alphaNoTwo-sided CI level.
treatYesContinuous-or-binary treatment column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_foldsNoCross-fitting folds per candidate.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
candidatesNoCandidate nuisance learners. ``ml_g`` regresses ``y`` on ``X``; ``ml_m`` regresses ``treat`` on ``X``. Defaults to a Lasso/Ridge/ RandomForest/GradientBoosting roster.
covariatesYesCovariate columns ``X``.
weight_ruleNoHow to combine candidate nuisance predictions or estimates. * ``"short_stacking"`` *(default; Ahrens et al. 2025 eq. 7)* -- solve constrained least squares on cross-fitted predictions for each nuisance separately (``y`` and ``D``), produce stacked nuisances, plug into the PLR moment equation. * ``"single_best"`` -- Ahrens et al. (2025, fn. 8): pick the candidate with lowest joint nuisance MSE. * ``"inverse_risk"`` -- :math:`w_k \propto 1/(\text{MSE}_g + \text{MSE}_m)`. Convenience baseline; **not** in the paper. * ``"equal"`` -- :math:`w_k = 1/K`. Convenience baseline; **not** in the paper. For the non-stacking rules (``inverse_risk`` / ``equal`` / ``single_best``) the function computes per-candidate :math:`\hat\theta_k` and reports the weighted average with a between-candidate-covariance-corrected SE; for ``"short_stacking"`` it reports the standard PLR sandwich SE on the stacked-nuisance score (Neyman orthogonality is preserved).short_stacking
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
sample_weightNoPer-observation weights. If supplied, every nuisance fit uses ``sample_weight=`` (with a graceful fallback warning if the learner does not accept it), the CLS stacking objective becomes weighted least squares, and the PLR moment + sandwich variance use weighted sums. The MSE used for ``inverse_risk`` / ``single_best`` weighting is also the weighted MSE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

With readOnlyHint=true, the description does not contradict this; it implies a read/estimation operation. It adds context about validation and the weight_rule parameter in the schema, but the description itself is sparse. It does not disclose potential pitfalls or side effects beyond what annotations already declare. No contradiction.

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 description is a single sentence but is somewhat vague and includes unusual phrasing 'validated evidence tier'. It is front-loaded with the purpose, but the extra clause about validation is unclear and may confuse. It is concise but not perfectly structured for clarity.

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?

Given the tool's complexity (15 parameters, with nuance in weight_rule and detail), the description is minimal. It does not explain return values, but the output schema exists. It lacks guidance on when to use this vs other DML tools, and the validation evidence tier is unexplained. It is adequate for a knowledgeable agent but incomplete for a novice.

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 100%, and the description itself does not add parameter details, but it references the weight_rule parameter indirectly. The baseline for high coverage is 3, but the description includes a note about validation evidence tier which adds context. However, since coverage is complete, a 4 is justified because the description provides a high-level purpose that aids understanding of parameter intent.

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 the tool estimates a model-averaging/stacking DML-PLR estimator, which is a specific verb+resource. It mentions 'validated evidence tier' which is unusual and unclear. It distinguishes from siblings like 'dml' and 'dml_diagnostics' by specifying model averaging, but does not explicitly name alternatives. Thus, it is clear but not fully differentiating.

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 usage for combining multiple nuisance learners in DML, but does not explicitly state when to use this vs other DML tools (e.g., dml, dml_panel). The detail parameter hints at sub-step calls but does not provide explicit when-to-use or exclusions. It gives some context but lacks direct guidance.

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

mrA
Read-only

Unified Mendelian Randomization dispatcher. method= selects the estimator: 'ivw' / 'egger' / 'median' / 'penalized_median' / 'mode' / 'all' (runs IVW+Egger+Median together) / 'mvmr' / 'mediation' / 'bma' (multi-exposure) / 'presso' / 'radial' / 'leave_one_out' / 'steiger' / 'heterogeneity' / 'pleiotropy_egger' / 'f_statistic' (diagnostics). Kwargs are passed through to the target function unchanged; see sp.mendelian_family guide. Validation: certified parity evidence. Assumptions: Relevance: SNPs predict exposure (F-statistic >= 10 per SNP or set-F); Independence: SNPs perp confounders of exposure-outcome; Exclusion restriction: SNPs affect outcome only through exposure (InSIDE for Egger; >= 50% valid for median; modal for mode-based). Pre-conditions: SNP-summary statistics for exposure and outcome aligned by SNP; beta_exposure / beta_outcome / se_exposure / se_outcome arrays of equal length; >= 10 genetic instruments for reliable IVW/median/mode; >= 20 for robust Egger intercept. Failure modes: Egger intercept p < 0.05 -- directional pleiotropy -> Use weighted-median or mode-based estimator; report Egger intercept + I2 as pleiotropy diagnostic; Q-statistic rejects homogeneity (Co...

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoMR estimator / diagnostic -- call sp.mr_available_methods() for the full list.ivw
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With `readOnlyHint: true` and `openWorldHint: false` already supplied, the description still adds behavioral value by explaining that `method=all` runs IVW+Egger+Median together, that kwargs pass through unchanged, and by listing assumptions per estimator. The main deduction is for the vague "Validation: certified parity evidence" line, which is not actionable.

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 long but information-dense and internally labeled with method, validation, assumptions, pre-conditions, and failure modes. However, it reads as one heavy paragraph and includes a few vague phrases like "certified parity evidence," so it is not as crisp as it could be.

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 complex dispatcher with seven parameters and an output schema, the description covers assumptions, preconditions, and failure-mode decisions very well. The provided text, however, cuts off mid-sentence at "Q-statistic rejects homogeneity (Co..." which means the failure-mode guidance is incomplete, and it relies on an external `sp.mendelian_family` guide for kwargs semantics.

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 100%, so the baseline is 3. The description enriches the `method` parameter substantially by enumerating the allowed estimator values and clarifying multi-exposure and diagnostics modes, which the schema only defers to `sp.mr_available_methods()`. Other parameters are already well explained in the schema and gain little additional description here.

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 opens with a specific verb and resource: "Unified Mendelian Randomization dispatcher," and the `method=` parameter enumerates the supported estimators and diagnostics. It clearly distinguishes the tool's role from generic regression tools, though it never explicitly names sibling tools such as `mediation` or `causal_discovery` for contrast.

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 provides explicit when-to-use guidance embedded in the assumptions and pre-conditions: ">= 10 genetic instruments for reliable IVW/median/mode; >= 20 for robust Egger intercept." It also drives decision-making with failure-mode instructions: "Egger intercept p < 0.05 -- directional pleiotropy -> Use weighted-median or mode-based estimator." This is far more than a generic pointer; it tells the agent which estimator to choose and when.

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

msmA
Read-only

Marginal Structural Models for time-varying treatments with time-varying confounders. Uses stabilized IPTW and cluster-robust inference. Handles binary or continuous treatment; exposure summary can be current, cumulative, or ever. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Sequential exchangeability / no unmeasured confounding at each time point; Positivity: every treatment level is possible given the past; Correct specification of the treatment and/or outcome models. Pre-conditions: Sequentially measured covariates, (time-varying) treatment, and outcome; Models for the treatment process and the outcome (or weights). Failure modes: Stabilized weights have extreme values (positivity near-violation) -> Truncate weights, simplify the treatment model, or use a doubly-robust estimator (TMLE). Alternatives: sp.tmle, sp.g_computation, sp.ipw. Typical minimum N: 300.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome
idYesUnit identifier
timeYesPeriod identifier
trimNoWeight truncation quantile
treatYesTime-varying treatment
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
familyNoOutcome familygaussian
baselineNoBaseline covariates
exposureNoExposure summarycumulative
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
time_varyingYesTime-varying confounders (pre-treatment)
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

The description discloses method behavior (stabilized IPTW, cluster-robust inference), supported treatment types, exposure summary options, and failure modes with actionable fixes. It also notes validation tier and typical minimum N. This goes well beyond the readOnlyHint annotation by explaining what the estimator does and when it may break.

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 moderately long but structured with clear labels (Assumptions, Pre-conditions, Failure modes, Alternatives). Each section adds value, though the 'Validation' sentence is somewhat peripheral.

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 complex causal inference tool, the description covers the core method, assumptions, data requirements, failure modes, alternatives, and sample size guidance. With an output schema present, the description is sufficiently complete for an agent to invoke it correctly.

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 100%, so the schema already documents all 15 parameters. The description adds minimal parameter context (e.g., exposure summary options, trim in failure mode) but does not systematically explain parameter relationships beyond the 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 description clearly identifies the tool as fitting Marginal Structural Models for time-varying treatments with time-varying confounders, and details the estimation approach (stabilized IPTW, cluster-robust inference) and supported treatment/exposure types. This distinguishes it from sibling estimators like g_computation or ipw, and it explicitly names alternatives.

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 lists assumptions (sequential exchangeability, positivity, correct specification) and pre-conditions (sequential covariates, treatment, outcome, models) that indicate when the tool is appropriate. It also names alternatives (sp.tmle, sp.g_computation, sp.ipw) and provides a failure-mode recommendation. It does not explicitly state when not to use it, but the context is clear.

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

multi_cutoff_rdA
Read-only

User-friendly alias for :func:sp.rdmc (multi-cutoff RD). Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
cutoffsNocutoffs parameter (Optional[List[float]]).
poolingNopooling parameter (str).ivw
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoBandwidth used for local smoothing or kernel weighting.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
cutoff_varNocutoff_var parameter (Optional[str]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, indicating a safe read operation. The description adds behavioral context beyond this: it outlines assumptions, failure modes (e.g., density jumps, bandwidth sensitivity) and provides guidance on how to address them. It does not contradict the annotations and enriches the agent's understanding of the tool's 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?

The description is moderately lengthy but each section (assumptions, pre-conditions, failure modes, alternatives, minimum N) provides distinct value. It is well-structured with clear labels, making it easy to scan. Not overly verbose given the complexity of the tool.

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 are covered. The description provides assumptions, pre-conditions, failure modes, alternatives, and a minimum sample size guideline, which is comprehensive for an RD tool. Nothing critical appears missing.

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 100%, so the schema already documents all 14 parameters thoroughly. The description does not add extra parameter-level semantics beyond what the schema provides. Given the high coverage, a baseline score of 3 is appropriate.

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 clearly identifies the tool as an alias for sp.rdmc (multi-cutoff RD) and specifies its function: multi-cutoff regression discontinuity estimation. It explicitly distinguishes itself from alternatives by naming sp.rdrobust, sp.rdrandinf, and sp.rdbwselect, which helps an agent select the right tool.

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?

The description provides explicit assumptions (continuous conditional expectations, no sorting, monotonicity for fuzzy designs) and pre-conditions (continuous running variable, known cutoff, sufficient observations). It also details failure modes and recommended remedies (e.g., density tests, bandwidth sensitivity) and lists alternative tools, making when-to-use and when-not-to-use clear.

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

multi_outcome_synthA
Read-only

Multiple Outcomes Synthetic Control Method (Sun 2023). Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for confidence intervals and joint test.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoWeight-estimation strategy. * ``'concatenated'`` -- stack all K standardised outcome panels vertically and solve one quadratic programme. * ``'averaged'`` -- standardise each outcome, average across K, then solve SCM on the mean series.concatenated
placeboNoRun in-space placebo permutations for inference (each donor is pretended to be treated in turn).
outcomesYesColumn names for the K outcome variables.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
standardizeNoStandardise each outcome to zero mean / unit variance before stacking or averaging (strongly recommended when outcome scales differ).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
penalizationNoRidge-type penalty added to the diagonal of the donor cross-product matrix (``penalization * I``). Helps when donors are collinear.
treated_unitYesValue identifying the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period (inclusive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses key causal assumptions (SUTVA, no anticipation), data-shape requirements, failure modes (large pre-treatment RMSPE, placebo inference), and a minimum-N heuristic. This gives an agent the behavioral context needed to anticipate invalid results or misleading estimates.

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 dense but well organized: method identification, assumptions, pre-conditions, failure modes, alternatives, and minimum sample size. Each block carries decision-relevant information, and there is no filler or redundant restatement of the tool name.

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 complex causal-estimation tool, the description covers what the method is, when it applies, what can go wrong, and what else to try. An output schema exists, so the absence of return-format details is acceptable. The definition is complete enough for an agent to select and invoke the tool correctly.

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?

The input schema already describes all 16 parameters with 100% coverage, so the baseline is 3. The description adds high-level context about standardization and bias-corrected alternatives but does not materially explain individual parameters beyond what the schema provides. No gap is severe enough to lower the score.

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 identifies the tool as the multiple-outcomes variant of the synthetic control method and cites the method source (Sun 2023), which makes the core purpose clear. It also names several sibling alternatives, helping distinguish it from single-outcome synth or difference-in-differences estimators. It stops short of an explicit verb like 'estimates' or 'constructs', which keeps it just below a top score.

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 gives concrete pre-conditions: a panel with treated units and donors, sufficient pre-periods, and complete outcome data. It also lists failure modes that signal when the method is inappropriate and names alternatives such as sp.sdid and sp.augsynth. It does not provide explicit decision rules for when to choose each alternative, but the context is strong enough for an agent to make a reasonable selection.

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

multi_score_rdB
Read-only

User-friendly alias for :func:sp.rd_multi_score. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
cutoffsYescutoffs parameter (List[float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoBandwidth used for local smoothing or kernel weighting.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
running_varsYesrunning_vars parameter (List[str]).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=false, which the description does not contradict. The description adds valuable behavioral context: it lists assumptions, pre-conditions, and failure modes (manipulation, bandwidth sensitivity) with recommended diagnostics, and a typical minimum N. This goes beyond the structured 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?

The description is structured with clear sections (Assumptions, Pre-conditions, Failure modes, Alternatives) and is front-loaded with the alias reference. While long, each section earns its place by conveying operational warnings and diagnostics. It is well-organized, though slightly verbose.

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?

Given the complexity of multi-score RD and the presence of an output schema, the description covers the important operational aspects: assumptions, pre-conditions, failure modes with recommended actions, and alternatives. It omits an explicit statement of what the tool computes, but the schema and name compensate. The typical minimum N and diagnostics add completeness.

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 100%, and the schema already provides detailed descriptions for all 12 parameters, including the 'detail' enum behavior. The tool description adds no parameter-specific semantics beyond what the schema offers. Baseline 3 applies.

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 tool as a 'User-friendly alias' for sp.rd_multi_score but never explicitly states that it performs regression discontinuity estimation with multiple scores. The name hints at it, and the assumptions/failure modes imply an RD context, but the core function is left to inference. This is a vague purpose statement.

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 lists alternative functions (rdrobust, rdrandinf, rdbwselect) but provides no criteria for choosing this tool over them. It gives assumptions and pre-conditions for RD in general, not for selecting this specific alias. No explicit when-to-use vs alternatives.

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

multi_treatmentA
Read-only

Effects of multi-valued (3+ level) treatments via AIPW. Returns pairwise contrasts versus a reference level. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Generalised unconfoundedness: Y(a) perp T | X for all a; Generalised overlap: 0 < P(T=a | X) < 1 for each arm a; SUTVA across arms. Pre-conditions: treat is integer-valued with >= 2 distinct levels; covariates comprise the confounding set; enough units per treatment arm (>= 50 per arm). Failure modes: Some arm has near-zero propensity in the data -> Violates overlap -- drop that arm or use bounds; Tiny treatment cells (< 30) -> Collapse sparse arms or use regularised multinomial propensity. Alternatives: sp.multi_arm_forest, sp.dml, sp.metalearner. Typical minimum N: 300.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
treatYesMulti-valued treatment (int)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
referenceNoReference treatment level (defaults to 0 / smallest)
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
n_bootstrapNoNumber of bootstrap replications.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, and the description adds no contradiction. It goes beyond annotations by disclosing statistical assumptions (unconfoundedness, overlap, SUTVA), validation tier, failure modes, and typical minimum Nβ€”rich behavioral context for result interpretation.

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?

Despite being long, the description is tightly organised into labelled blocks: Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum N. Each line carries decision-relevant information 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?

For a 12-parameter tool with an output schema and read-only annotation, the description provides purpose, statistical assumptions, data preconditions, failure handling, alternatives, and sample-size guidance. Combined with the fully described input schema, nothing critical is missing 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 100%, so the baseline is 3; every parameter already has an individual description. The tool description adds precondition context for treat and covariates, such as integer-valued treatment and confounding set requirements, but does not deeply re-explain individual parameter syntax or interactions.

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 opens with a specific action and scope: estimating effects of multi-valued (3+ level) treatments via AIPW and returning pairwise contrasts versus a reference level. This clearly differentiates the tool from binary treatment effect estimators and other causal inference siblings.

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 lists explicit pre-conditions (integer-valued treat with >=2 levels, covariates comprising the confounding set, >=50 units per arm) and failure modes that tell the agent when to drop or collapse arms, or use bounds and regularisation. It also names three concrete alternatives, giving clear routing guidance.

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

multiway_cluster_vcovB
Read-only

Compute N-way cluster-robust variance of an OLS coefficient vector. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesDesign matrix used in the regression.
residYesOLS residuals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clustersYesOne or more cluster variables, one per dimension. Non-numeric labels are supported.
n_paramsNoOverride for the ``k`` used in DOF adjustment; useful when FEs have been absorbed (pass total absorbed DOF here).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
df_adjustNoIf True, apply the G/(G-1) * (n-1)/(n-k) CR1 finite-sample correction per component variance. If False, uses raw sandwich (useful when the caller has already degreed-freedom adjusted).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
psd_correctNoProject V onto PSD cone by zeroing negative eigenvalues.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already disclose readOnlyHint=true, so the agent knows this is a safe read operation. The description adds a validation note ('certified parity evidence') but does not describe return structure, side effects, or any behavioral nuances beyond what annotations provide. It does not contradict annotations, so 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.

Conciseness5/5

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

The description is a single concise sentence that states the core purpose and a validation note. It is front-loaded with the main action and contains no fluff. For a tool with such a minimal description, it is appropriately sized.

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?

Given the tool's complexity (12 parameters, N-way clustering, DOF adjustments, data loading options), the description is far too sparse. It does not explain the intended use case, how it fits into a regression workflow, or what distinguishes it from many similar cluster-robust tools. The schema covers parameters, but the description fails to provide the contextual guidance an agent needs to choose and invoke this tool correctly.

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 100%, so all parameters are documented in the input schema. The description adds no parameter-level meaning beyond what the schema already provides. Baseline of 3 applies because the schema does the heavy lifting.

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 ('Compute') and resource ('N-way cluster-robust variance of an OLS coefficient vector'). It is clear about the mathematical operation, but it does not differentiate from sibling tools like cluster_robust_se, twoway_cluster, or cr2_se, which all compute related quantities. Thus it is clear but lacks sibling differentiation.

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 is given on when to use this tool versus alternatives. There is no mention of when N-way clustering is appropriate, how it compares to twoway_cluster or other cluster-robust variants, or any exclusions. The only extra note ('Validation: certified parity evidence') does not help with usage selection.

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

nbregA
Read-only

Fit a negative-binomial count model. Use this for overdispersed non-negative count outcomes; formulas may include explicit fixed effects with 'y ~ x | id' for moderate panels. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
irrNoReport incidence-rate ratios instead of log coefficients.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
offsetNoColumn containing a log offset.
robustNononrobust
clusterNoColumn name for cluster-robust SEs.
formulaYesR-style formula, e.g. 'count ~ x1 + x2 | id'
exposureNoPositive exposure column; log(exposure) is used as offset.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
dispersionNoNB2 mean dispersion or NB1 constant dispersion.mean
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations include readOnlyHint=true, so the safety profile is already covered. The description adds useful behavioral context by documenting the formula convention 'y ~ x | id' for fixed effects and by stating 'Validation: certified parity evidence,' which signals that results have been verified against a reference implementation.

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 short, front-loaded with the core purpose, and contains no filler. It uses each sentence productively to add use-case, formula, and validation context. It stops short of a 5 because the validation phrase is terse and leaves 'certified parity evidence' somewhat unexplained.

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 13-parameter tool with a rich output schema and 92% schema parameter coverage, the description provides enough context for an agent to select and invoke the tool correctly. It covers the model family, use case, formula pattern, and validation status. It does not enumerate all parameter combinations, but that is not necessary given the schema richness.

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 92%, so the schema already documents most parameters. The description adds value by illustrating the formula syntax for fixed effects, which clarifies the 'formula' parameter, but it does not add meaning to the other parameters beyond what the schema provides.

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 opens with a specific verb and resource: 'Fit a negative-binomial count model.' It also names the target data type ('overdispersed non-negative count outcomes'), which helps distinguish it from Poisson or other count models, and gives a concrete formula example.

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 provides clear context on when to use the tool ('Use this for overdispersed non-negative count outcomes') and hints at the fixed-effects formula pattern for moderate panels. However, it does not explicitly name alternative tools such as poisson, zinb, or xtnbreg, nor does it state when not to use it.

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

negative_control_exposureA
Read-only

Regress outcome on a negative-control exposure. Assumptions: The negative-control exposure has no causal effect on the outcome by design (Lipsitch et al. 2010); It shares the same confounding structure as the real exposure. Pre-conditions: data has the outcome and a negative-control exposure column. Failure modes: Significant coefficient on the negative-control exposure signals residual confounding, not an effect -> Treat a non-zero coefficient as a confounding alarm; add covariates or run a sensitivity analysis. Alternatives: sp.negative_control_outcome, sp.sensemakr, sp.evalue. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
nceYesnce parameter (str).
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark this as read-only, and the description adds valuable behavioral context beyond that: a significant coefficient on the negative-control exposure should be treated as a confounding alarm, not a causal effect. Documenting the Lipsitch et al. assumption and minimum N further helps the agent interpret results. No contradiction with the readOnlyHint annotation.

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?

Compact and front-loaded: the core action appears in the first sentence, and every following blockβ€”assumptions, pre-conditions, failure modes, alternatives, and minimum Nβ€”earns its place. There is no filler or redundant restatement.

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?

Given the rich input schema, output schema, and readOnly annotations, the description covers what an agent needs: model assumptions, interpretation of results, failure behavior, and useful alternatives. The only notable gap is that the exact regression specification (e.g., whether covariates are required) is not stated explicitly, but the schema and output schema compensate.

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 100%, so the baseline is 3 even without parameter details in the description. The description usefully reinforces that nce is the negative-control exposure and y is the outcome, but it adds no formatting, column-type, or usage details beyond what the schema already provides.

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?

Opens with a specific verb and object: 'Regress outcome on a *negative-control exposure*.' This makes the core function immediately clear. It names alternatives but does not explain how negative_control_exposure differs from negative_control_outcome, so sibling differentiation is only partial.

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 pre-conditions and assumptions: the data must have outcome and negative-control exposure columns, and the negative control must share confounding structure. It also gives a failure-mode rule and lists relevant alternatives. However, it does not give explicit selection criteria for choosing among the named alternatives, stopping 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.

negative_control_outcomeA
Read-only

Lipsitch-style NCO calibration. Assumptions: The negative-control outcome is not caused by the treatment (Lipsitch-style calibration); It shares confounders with the real outcome. Pre-conditions: data has a negative-control outcome and a treatment column. Failure modes: Coefficient on treatment differs significantly from zero -- residual confounding detected -> Condition on more covariates or quantify the implied bias with a sensitivity analysis. Alternatives: sp.negative_control_exposure, sp.sensemakr, sp.evalue. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
ncoYesNegative-control outcome -- a variable plausibly unaffected by the true treatment but sharing confounders with the real Y.
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or exposure variable.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoMeasured confounders to condition on.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the readOnlyHint annotation: it states assumptions, failure modes, typical minimum N, and recommended follow-up actions. This information is not present in annotations and helps an agent understand what to expect and how to react.

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 compact yet comprehensive, using a structured format (assumptions, pre-conditions, failure modes, alternatives, typical N) that front-loads the method name and key context. Every sentence adds value without redundancy.

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 tool's moderate complexity and the presence of a full output schema, the description covers all critical aspects: method identity, assumptions, preconditions, failure modes, alternatives, and sample size guidance. Nothing essential is missing for an agent to call it correctly.

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 100%, so all parameters are well-documented. The description adds minimal extra parameter semanticsβ€”it references the treatment column and negative-control outcome in the preconditions, but this aligns with schema descriptions. The baseline of 3 applies since the schema already handles 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?

The description clearly identifies the tool as 'Lipsitch-style NCO calibration' and specifies its purpose (calibrating against a negative-control outcome). It distinguishes itself from sibling tools by naming alternatives (negative_control_exposure, sensemakr, evalue), making the tool's unique role apparent.

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?

The description states pre-conditions (data has a negative-control outcome and treatment column), failure modes (coefficient differs from zero indicates residual confounding), and suggests actions (condition on more covariates or run sensitivity analysis). It also lists explicit alternatives, giving an agent clear guidance on when to select this tool versus others.

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

network_exposureA
Read-only

Aronow-Samii Horvitz-Thompson estimator for arbitrary interference via a user-supplied exposure mapping. Handles Bernoulli randomisation designs with simulated conservative variance. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Known limitations: design='complete' is reserved but not implemented; passing it raises NotImplementedError. Use design='bernoulli' with p_treat=K/N as an approximation only if that matches the assignment mechanism you are willing to assume. Assumptions: Exposure mapping is correctly specified (as4 / as3 / as2 -- Aronow-Samii hierarchy); Positivity: every exposure level has positive probability under the design; Network adjacency is fixed / known (measurement error in ties introduces bias). Pre-conditions: adjacency is a binary n x n matrix encoding network ties; Y, Z have same length n; randomisation design is known (bernoulli with p_treat, or complete). Failure modes: Some exposure level has < 5 observed units -> Switch to a coarser mapping (as4 -> as3) or increase sample size; Variance estimate extremely conservative (wide CI) -> HT-style variance is conservative by design -- use sp.spillover for...

ParametersJSON Schema
NameRequiredDescriptionDefault
YYesOutcome vector
ZYesTreatment vector (0/1)
n_simNoNumber of sim.
designNoRandomisation designbernoulli
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
mappingNoExposure mappingas4
p_treatNoMarginal treatment probability
adjacencyYesAdjacency matrix (n x n) or sparse
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior5/5

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

The description goes far beyond the readOnlyHint annotation. It details validation tiers, known limitations (complete design not implemented), assumptions (correct exposure mapping, positivity, fixed adjacency), pre-conditions (binary matrix, same lengths, known design), and failure modes (low exposure cell counts, conservative variance). This gives an agent a rich understanding of the tool's behavior and edge cases.

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 long but well-structured with labeled sections (Validation, Known limitations, Assumptions, Pre-conditions, Failure modes). Each sentence adds substantive information for a complex estimator. It is front-loaded with the core purpose and then provides necessary details. It earns its length, though it could be tightened slightly.

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 tool with 13 parameters and complex statistical assumptions, the description covers essential context: estimator type, assumptions, pre-conditions, limitations, and failure modes. It does not describe return values, but an output schema exists, so that is not a gap. It is reasonably complete for an agent to decide whether and how to call it.

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 100%, so all parameters are documented in the schema. The description adds some context about p_treat and design (e.g., approximation conditions), but it does not provide additional semantics for each parameter beyond what the schema already states. The description adds marginal value over the schema, so a baseline 3 is appropriate.

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 clearly states the tool computes an Aronow-Samii Horvitz-Thompson estimator for arbitrary interference with a user-supplied exposure mapping. It names a specific estimator and method, so the purpose is unambiguous. However, it does not explicitly contrast with sibling tools like 'spillover' or 'interference', so it doesn't fully distinguish from alternatives.

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 provides some usage conditions: it warns that design='complete' is not implemented and raises NotImplementedError, and it advises using design='bernoulli' only if the assignment mechanism matches. It also gives failure-mode guidance (switch to coarser mapping or increase sample size). But it never explicitly says when to choose this tool over siblings or names alternatives, leaving the selection logic implicit.

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

nonlinear_icpA
Read-only

Alias for icp(..., method='nonlinear') -- Heinze-Deml et al. 2018. Assumptions: Causal Markov condition and faithfulness (PC/GES/FCI); Causal sufficiency for PC/GES (no latent confounders); FCI relaxes this; Acyclicity; LiNGAM additionally assumes a linear non-Gaussian model. Pre-conditions: Constraint-/score-based discovery needs i.i.d. observational data with enough samples for reliable conditional-independence tests; Invariance-based discovery (ICP) needs data labelled by environment / intervention. Failure modes: Unstable skeleton / many undirected edges -- faithfulness or sample size is the likely culprit -> Increase the sample, relax the CI-test threshold, or switch to FCI if latent confounders are plausible. Alternatives: sp.pc_algorithm, sp.fci, sp.ges, sp.lingam. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesFeature matrix or covariate DataFrame.
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
environmentYesenvironment parameter (np.ndarray).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare `readOnlyHint: true`, so the safety profile is known. The description adds useful behavioral context: statistical assumptions (Causal Markov, faithfulness, acyclicity, sufficiency), preconditions for ICP, and failure symptoms like 'unstable skeleton / many undirected edges'. It does not describe the exact return payload, but the output schema covers that. This is a solid behavioral picture beyond the structured 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?

The description is dense but compact, covering alias identity, assumptions, preconditions, failure modes, alternatives, and minimum sample size in a few sentences. It front-loads the core identity and then structures supporting context logically. It could be slightly more readable with bullet-like separation, but every clause earns its place.

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 10-parameter causal discovery tool, the description covers the essential contextual ground: assumptions, preconditions, failure modes, alternatives, and sample-size guidance. The output schema and full parameter schema handle the mechanical details. Nothing critical is missing for an agent to decide whether to call this tool and how to interpret an unstable result.

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 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining that ICP requires data labelled by environment/intervention, which directly clarifies the `environment` parameter, and by providing 'typical minimum N: 500' for the `X`/sample-size context. It does not individually explain `X` or `y`, but the schema already 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?

The description identifies this as an alias for `icp(..., method='nonlinear')`, which clearly points to nonlinear invariant causal prediction, and it lists related sibling methods as alternatives. It does not state the core objective in a standalone verb+resource phrase, but it is unambiguous for an agent familiar with ICP. The distinction from `pc_algorithm`, `fci`, `ges`, and `lingam` is explicit.

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?

The description names explicit alternatives (`sp.pc_algorithm`, `sp.fci`, `sp.ges`, `sp.lingam`) and gives decision-relevant context: ICP needs environment/intervention labels, while FCI is recommended if latent confounders are plausible. Failure-mode guidance ('Increase the sample, relax the CI-test threshold, or switch to FCI') tells the agent how to respond to bad results. This is strong when-to-use versus when-not-to-use guidance.

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

notchA
Read-only

Bunching at Notches estimator (Kleven & Waseem 2013). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: The counterfactual density would be smooth through the threshold absent the policy; Excess mass at the threshold reflects the behavioural elasticity of interest; No other discontinuity coincides with the threshold. Pre-conditions: A behavioural choice variable (earnings, hours, ...) with a known kink or notch in the budget/choice set; A visible empirical density of the running variable around the threshold. Failure modes: Round-number heaping or a coincident policy contaminates the bunching mass -> Exclude heaping points, widen the excluded region, and test the counterfactual polynomial order. Alternatives: sp.rdrobust, sp.rkd. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRunning variable name (e.g., 'income').
seedNoRandom seed for reproducibility.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications for standard errors.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bin_widthNoBin width for the histogram.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
notch_sizeNoSize of the discontinuous jump (delta-tau). If provided, a structural elasticity is estimated.
poly_orderNoPolynomial order for the counterfactual distribution.
notch_pointYesLocation of the notch in the running variable.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
exclude_rangeNoRange around the notch to exclude from the counterfactual fit. If None, defaults to (notch_point - 3*bin_width, notch_point + 5*bin_width).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so the read-only nature is already known. The description adds meaningful behavioral caveats: smooth counterfactual assumption, excess mass interpretation, contamination from heaping/policy, and mitigation strategies. This enriches the agent's understanding of what the estimator actually does and its failure modes.

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?

Appropriately compact, using labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) so key information is easy to scan. The opening phrase immediately names the estimator, making the purpose front-loaded.

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?

Covers validation tier, assumptions, preconditions, failure modes, alternatives, and minimum sample size. With the full schema and an output schema present, this is quite complete. The only notable gap is failure to mention sibling bunching tools, which leaves some ambiguity in tool selection.

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?

The input schema covers 100% of parameters with per-parameter descriptions, so the description need not repeat them. It does not add any parameter-level semantics beyond what is already in schema, but it doesn't need to; baseline 3 applies.

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 clearly that it estimates bunching at notches, with a specific method reference (Kleven & Waseem 2013). However, it does not distinguish itself from sibling tools 'bunching' and 'general_bunching', which likely have overlapping purpose.

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?

Provides explicit pre-conditions (behavioral variable with known notch, visible density) and a typical minimum N of 500, so it signals when the input data is suitable. But the listed alternatives (sp.rdrobust, sp.rkd) are RD methods and are not accompanied by any when-to-choose criteria, and it never mentions the 'bunching' or 'general_bunching' siblings, leaving the agent without guidance on selecting among bunching tools.

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

notearsA
Read-only

Learn a DAG from data using NOTEARS (Zheng et al. 2018). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Causal Markov condition and faithfulness (PC/GES/FCI); Causal sufficiency for PC/GES (no latent confounders); FCI relaxes this; Acyclicity; LiNGAM additionally assumes a linear non-Gaussian model. Pre-conditions: Constraint-/score-based discovery needs i.i.d. observational data with enough samples for reliable conditional-independence tests; Invariance-based discovery (ICP) needs data labelled by environment / intervention. Failure modes: Unstable skeleton / many undirected edges -- faithfulness or sample size is the likely culprit -> Increase the sample, relax the CI-test threshold, or switch to FCI if latent confounders are plausible. Alternatives: sp.pc_algorithm, sp.fci, sp.ges, sp.lingam. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
h_tolNoConvergence threshold for acyclicity constraint h(W).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
lambda1NoL1 penalty weight for sparsity. Higher = sparser graph.
rho_maxNoMaximum penalty parameter rho.
max_iterNoMaximum augmented Lagrangian iterations.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
variablesNoColumn names to use. If None, uses all numeric columns.
w_thresholdNoThreshold for pruning small edge weights. Edges with |W_ij| < w_threshold are removed.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already mark the tool read-only and not open-world, and the description adds non-obvious behavioral context: failure modes (unstable skeleton / undirected edges), a likely diagnosis (faithfulness or sample size), remediation steps, and a minimum sample-size heuristic. This goes beyond the structured annotations without contradicting them.

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 lead sentence is sharp and the labels (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) make it scannable, but parts of the body is boilerplate from other causal-discovery methods (PC/GES/FCI/LiNGAM) and the 'validated evidence tier' sentence is vague. These weaken the otherwise compact structure.

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 13-parameter tool with a full output schema, the description covers the main non-schema context an agent needs: sample-size expectations, failure modes, data preconditions at a high level, and which alternative tool to switch to. It is not complete regarding NOTEARS-specific statistical assumptions, but schema and output schema carry the rest.

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 100% and each of the 13 parameters has a meaningful schema description (e.g., w_threshold pruning, as_handle caching, detail payload depth). The tool description itself adds no parameter-level meaning, so a baseline 3 is appropriate.

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 is a specific verb+resource+algorithm statement: 'Learn a DAG from data using NOTEARS (Zheng et al. 2018).' This distinguishes it from DAG-learning siblings like pc_algorithm, ges, and fci by naming the exact method, even though later assumptions text is generic.

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 lists Alternatives and includes one conditional routing rule ('switch to FCI if latent confounders are plausible'), plus a typical minimum N. However, it never states the conditions under which NOTEARS is preferred over pc_algorithm, ges, or lingam, and the pre-conditions/assumptions section reads like a generic causal-discovery template rather than NOTEARS-specific guidance.

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

oaxacaA
Read-only

Oaxaca-Blinder decomposition of mean outcome gaps. Validation: certified parity evidence. Assumptions: Linearity of conditional mean within each group; Constant returns to covariates within group (no interactions ignored); Reference-group choice does not change interpretive sign of explained vs. unexplained gaps. Pre-conditions: Binary group indicator with both groups represented; Linear specification of outcome on covariates within each group. Failure modes: Detailed decomposition signs flip when reference group changes -> Report aggregated decomposition only, or use pooled reference (Neumark / Cotton). Alternatives: sp.ffl_decompose, sp.dfl_decompose, sp.rif_decomposition. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesCovariate names.
yYesOutcome variable name.
alphaNoSignificance level for p-values.
groupYesBinary group indicator (0 = Group A, 1 = Group B).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
referenceNoReference coefficient vector beta*: - ``0`` -- Group A coefficients (beta_A). The "explained" part uses Group A's returns as the benchmark. - ``1`` -- Group B coefficients (beta_B). - ``'pooled'`` -- Pooled OLS (Neumark 1988). - ``'cotton'`` -- Sample-size weighted average (Cotton 1988). - ``'reimers'`` -- Equal-weighted average (Reimers 1983).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the agent knows it is a safe read. The description adds valuable behavioral context: explicit assumptions, pre-conditions, failure modes, and a validation claim. It does not describe output structure, but that is covered by the output schema. It adds substantial context beyond annotations.

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 a single paragraph but clearly structured with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Every sentence earns its place; there is no filler or repetition. It is front-loaded with the core purpose.

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?

Given the tool's complexity and that an output schema exists, the description covers the key contextual needs: assumptions, pre-conditions, failure modes, alternatives, and sample size guidance. It does not mention handling of missing data or data formats, but those are covered by the input schema. It is complete enough for an agent to call it correctly.

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 100%, so every parameter is already well-documented in the schema. The description adds little parameter-specific meaning beyond the schema; it only touches on the 'reference' parameter indirectly in the failure mode note. Baseline of 3 is appropriate since the schema does the heavy lifting.

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 the exact method (Oaxaca-Blinder decomposition) and the resource (mean outcome gaps) with a specific verb. It distinguishes itself from siblings by naming alternatives, so an agent can tell it apart from ffl_decompose, dfl_decompose, and rif_decomposition without inspecting their 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?

Provides explicit pre-conditions (binary group indicator, both groups represented, linear specification), failure modes (sign flips when reference group changes) with remediation, and names specific alternative tools. It also gives a typical minimum N, which helps an agent decide whether the data is sufficient. This is unusually thorough guidance.

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

offline_safe_policyA
Read-only

Safe offline policy learning with a cost-constraint. Assumptions: Sequential ignorability: no unobserved confounders of actions and outcomes; Positivity: the behaviour policy explores all evaluated actions; The environment satisfies the assumed (Markov) dynamics. Pre-conditions: Logged trajectories (states, actions, rewards) from a known or estimable behaviour policy. Failure modes: Poor behaviour-policy coverage -- the target policy queries unseen state-action regions -> Use offline-safe / pessimistic methods and report effective sample size of the importance weights. Alternatives: sp.offline_safe_policy, sp.policy_value. Typical minimum N: 1000.

ParametersJSON Schema
NameRequiredDescriptionDefault
costYesColumn names. state and action must be discrete.
seedNoRandom seed for reproducible stochastic steps.
stateYesColumn names. state and action must be discrete.
actionYesColumn names. state and action must be discrete.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_iterNoNumber of iter.
rewardYesColumn names. state and action must be discrete.
discountNodiscount parameter (float).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
cost_thresholdNoMax allowed expected cost per step.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description adds valuable behavioral context beyond that: the method is 'safe' (pessimistic), it enforces a cost constraint, and it warns about poor coverage with a suggested mitigation. It does not explicitly state that it returns a fitted result, but the output schema and as_handle parameter cover that. The description adds substantial behavioral insight without contradicting the read-only hint.

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 compact yet information-dense: it leads with the core purpose, then follows a logical flow of assumptions, preconditions, failure modes, alternatives, and a sample-size heuristic. Every sentence contributes value; there is no filler. The structure makes it easy for an agent to scan quickly and extract the essential conditions.

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 method with nuanced assumptions, the description covers them thoroughly: statistical assumptions, data requirements, failure modes with mitigation, and typical N. Combined with the full schema (14 params, all documented) and an output schema, nothing critical is missing. The description is complete enough for an agent to decide when and how to invoke it correctly.

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 100%, so every parameter is documented in the schema. The tool description itself adds no parameter-specific meaningβ€”it focuses on method assumptions and usage. This meets the baseline of 3; the description does not need to compensate for missing schema documentation, but it also does not enrich parameter understanding beyond what the schema already provides.

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 opens with a specific verb-resource pair: 'Safe offline policy learning with a cost-constraint.' It clearly distinguishes this tool from many siblings by naming explicit alternatives (sp.offline_safe_policy, sp.policy_value) and framing the method as safety-focused. The purpose is unambiguous and sets it apart from the large 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 Guidelines5/5

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

The description explicitly lists assumptions (sequential ignorability, positivity, Markov dynamics), pre-conditions (logged trajectories from a known/estimable behavior policy), failure modes (poor coverage) with a remedy, and alternatives. This is exemplary guidance: it tells the agent exactly when to use this tool, what must hold, and what to do if assumptions fail.

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

ologitB
Read-only

Ordered logit (proportional odds) model via MLE. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoPrimary running variable, regressor, or feature input for this estimator.
yNoOrdered categorical dependent variable.
tolNoNumerical convergence tolerance.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoRobust standard-error or covariance estimator option.nonrobust
clusterNoCluster identifier column for clustered standard errors.
formulaNoFormula ``"y ~ x1 + x2"``.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true and openWorldHint=false, which the description does not contradict. The description adds 'via MLE' as an estimation detail but does not elaborate on return behavior, failure modes, or the meaning of 'certified parity evidence', leaving behavioral specifics mostly to the schema's detail parameter and 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.

Conciseness3/5

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

Two sentences is concise, but the second sentence ('Validation: certified parity evidence') is a fragment that does not earn its placeβ€”it is vague and unexplained. The description front-loads the estimator identity, but the cryptic validation note could mislead or add noise 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?

With 14 parameters, 0 required, an output schema, and 100% schema coverage, the description need not enumerate parameters. However, for an estimator named ologit, an agent would benefit from a sentence on when to use it (ordered outcomes with proportional-odds assumption) and what 'certified parity evidence' meansβ€”neither is provided.

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 100% and most parameters (x, y, tol, alpha, detail, robust, cluster, formula, maxiter, as_handle, data_path, result_id) already have individual descriptions. The baseline is therefore 3; the description earns a 4 because the second sentence implies a validation/parity context that helps interpret the role of parameters like robust and cluster in this specific estimator.

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 identifies the estimator ('Ordered logit (proportional odds) model via MLE') with a specific verb and model type, distinguishing it from related siblings like oprobit and mlogit. However, it does not explicitly contrast with those siblings, and the second sentence about 'certified parity evidence' is cryptic rather than clarifying.

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 usage for ordered categorical outcomes but does not explicitly state when to choose this over oprobit, mlogit, or clogit. The 'certified parity evidence' phrase hints at a validation context but gives no concrete guidance on when to invoke this tool versus alternatives.

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

oprobitC
Read-only

Ordered probit model via MLE. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoPrimary running variable, regressor, or feature input for this estimator.
yNoOrdered categorical dependent variable.
tolNoNumerical convergence tolerance.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoRobust standard-error or covariance estimator option.nonrobust
clusterNoCluster identifier column for clustered standard errors.
formulaNoFormula ``"y ~ x1 + x2"``.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so the description is not required to state that the tool is read-only. The description adds the MLE estimation method and mentions validation, but does not disclose return format, side effects, or assumptions. It does not contradict annotations, but adds minimal behavioral context beyond the model type.

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 description is brief (two sentences) and front-loaded with the model type. However, the second sentence about 'certified parity evidence' is cryptic and unhelpful, detracting from the overall clarity. It is concise but the extra sentence does not earn its place.

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?

Given the complexity (14 parameters, ordered probit), the description is insufficient. It does not explain the tool's purpose for ordered outcomes, clarify input requirements (e.g., what the 'x' array contains), or guide usage of formula or data_path. The output schema exists but the description does not help an agent decide when to use this over siblings.

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 100%, so all parameters are documented in the schema. The description itself adds no parameter semantics; it relies entirely on the schema. The baseline of 3 is appropriate given high schema coverage.

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 clearly states 'Ordered probit model via MLE', which identifies the estimator type and estimation method. This distinguishes it from binary probit or ordered logit tools like 'probit' and 'ologit'. However, the phrase 'Validation: certified parity evidence' is ambiguous and does not add clarity, so it does not fully earn 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 guidance is given on when to use this tool versus alternatives like 'ologit' or 'probit'. The description does not mention the need for an ordered categorical outcome, data requirements, or when not to use it. The agent must infer usage from the schema, which lacks explicit routing context.

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

optimal_matchA
Read-only

Optimal 1:1 matching via the Hungarian algorithm. Validation: certified parity evidence. Do NOT use when: either arm has more than ~10,000 units -- the assignment problem is superquadratic (see cost); use sp.psm or sp.match (greedy nearest-neighbour) at that scale. Cost: Materialises the dense n_treated x n_control distance matrix, then solves a linear sum assignment (Hungarian, ~O(n^3) worst case). Both memory and time degrade sharply past a few thousand units per arm. Assumptions: Unconfoundedness: treatment is as-good-as-random given the measured covariates; Overlap / common support: every unit has a non-degenerate probability of each treatment; The covariate set blocks all back-door paths. Pre-conditions: Pre-treatment covariates measured for treated and control units; A binary (or low-cardinality) treatment indicator; Sufficient covariate overlap between treatment arms. Failure modes: Poor overlap -- extreme propensity scores or few acceptable matches -> Trim or restrict to the common-support region and report the discarded units; Covariate imbalance remains after matching/weighting -> Re-specify the balancing model (CBPS, entropy balancing) and re-check standardized mean dif...

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
metricNometric parameter (str).mahalanobis
caliperNoDrop any pair with distance greater than ``caliper``.
outcomeYesOutcome variable column name or outcome array.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesTreatment indicator, treatment variable, or treatment array.
covariatesYesCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint=true annotation, the description discloses substantial behavioral traits: it materializes a dense n_treated x n_control distance matrix, uses an O(n^3) Hungarian solver, and warns that memory and time degrade sharply. It also lists assumptions, pre-conditions, and failure modes. This goes well beyond what annotations or the schema 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?

The description is long but well-structured with labeled sections: validation, scale warning, cost, assumptions, pre-conditions, and failure modes. It is front-loaded with the core purpose. The 'Validation: certified parity evidence' line is cryptic, and the failure-modes section appears truncated, which prevents a perfect score.

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 computationally heavy matching tool, the description covers the essentials: scale limits, complexity, assumptions, pre-conditions, and failure-mode remedies. An output schema exists, so return-value documentation is not required here. However, the meaning of 'certified parity evidence' is unexplained, and the failure-modes list is cut off, leaving the guidance slightly incomplete.

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 100%, so the baseline is 3. The description adds meaning by specifying that covariates should be pre-treatment, that the treatment should be binary or low-cardinality, and that covariate overlap is required. This contextualizes the covariates and treatment parameters beyond the schema's terse descriptions, though it does not address every parameter in detail.

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 opens with a precise statement: 'Optimal 1:1 matching via the Hungarian algorithm.' This names the operation, the resource/units being matched, and the algorithm. It also distinguishes itself from sibling matching tools by explicitly naming sp.psm and sp.match as alternatives for larger samples, so an agent can tell it apart 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?

The description is explicit about when NOT to use it ('Do NOT use when: either arm has more than ~10,000 units'), names the alternative tools to use at that scale, and provides assumptions and pre-conditions that define appropriate use. This is strong, actionable guidance rather than vague context.

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

oster_boundsA
Read-only

Oster (2019) sensitivity to selection on unobservables -- computes the bounding coefficient under the assumption that selection on unobservables (proportional to delta x selection on observables) brings the explained variance to r_max. The breakdown delta tells you how strong unobserved selection has to be to overturn your result. Assumptions: Selection on unobservables is proportional (by factor delta) to selection on observables; r_max upper-bounds the explained variance achievable with all confounders included; Linear functional form for y on (treat, controls). Pre-conditions: you have fitted both a short (treatment-only) and long (treatment + controls) regression of y; long-regression R^2 is meaningfully larger than short-regression R^2. Failure modes: breakdown delta < 1.0 (weak unobservables overturn the result) -> The result is fragile; report the breakdown delta alongside the point estimate; r2_long ~ r2_short (controls add no explanatory power) -> Oster's identified set degenerates when long and short R^2 are nearly equal; use sp.evalue or sp.sensemakr instead. Alternatives: sp.evalue, sp.sensemakr, sp.rosenbaum_bounds. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
yNoOutcome (alternative to passing beta_short/long directly)
alphaNoSignificance level for confidence intervals and tests.
deltaNoRatio of unobserved-to-observed selection (1.0 = equally strong)
r_maxNoHypothetical R^2 from a regression that includes all unobserved confounders; default 1.3*R^2_long
treatNoTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
r2_longNor2_long parameter (float).
controlsNoControl-variable column names.
r2_shortNor2_short parameter (float).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
beta_longNobeta_long parameter (float).
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
beta_shortNoShort-regression coefficient; if None, fit from data
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, and the description adds substantial behavioral context: assumptions (proportional selection, r_max bound, linear functional form), pre-conditions, failure modes (breakdown delta < 1.0, r2_long ~ r2_short), and interpretation guidance ('report the breakdown delta'). It goes far beyond annotation-provided safety information, covering the statistical behavior and edge cases without contradicting the read-only hint.

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?

Though long, the description is well-structured into labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and front-loaded with the core purpose. Every sentence carries informative contentβ€”no fillerβ€”making it efficient despite its length.

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 tool's complexity (16 parameters, output schema present, many siblings), the description covers purpose, assumptions, pre-conditions, failure modes, alternatives, and a minimum N guideline. It tells the agent when to use it, how to interpret the output (breakdown delta), and when to switch tools. The output schema likely details the return values, and the description complements it fully.

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 100%, so the baseline is 3. The description adds conceptual meaning beyond the schema by explaining delta as 'ratio of unobserved-to-observed selection', r_max as 'hypothetical R^2...', and tying beta_short/long and r2_short/long to the pre-condition that a short and long regression have been fitted. This enhances the agent's understanding of how parameters relate to the method.

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 explicitly identifies the tool as Oster (2019) sensitivity analysis for selection on unobservables, computing the bounding coefficient and breakdown delta. It clearly differentiates from siblings by naming alternatives like sp.evalue, sp.sensemakr, and sp.rosenbaum_bounds, so an agent can distinguish it from oster_delta and other sensitivity tools.

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?

The description provides specific pre-conditions ('you have fitted both a short and long regression'), a clear failure mode with an explicit alternative ('use sp.evalue or sp.sensemakr instead'), and lists alternatives explicitly. It tells the agent when to use this tool and when to switch, leaving no ambiguity.

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

oster_deltaA
Read-only

Oster (2019) coefficient stability bounds and delta* computation. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Only weak (set-identifying) assumptions are imposed; the result is an interval, not a point; Lee bounds add monotonicity of selection; Oster's delta adds proportional selection on observed vs. unobserved. Pre-conditions: The data needed for the point-identifying analysis, plus the weakest credible identifying restriction; For Lee bounds: a binary selection/attrition indicator. Failure modes: Bounds are too wide to be informative -> Add a credible auxiliary restriction (monotone treatment response, instrument) to tighten the bounds. Alternatives: sp.oster_delta, sp.lee_bounds, sp.manski_bounds. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
alphaNoSignificance level for confidence intervals and tests.
r_maxNoMaximum R-squared assumption. Oster recommends 1.3 * R-squared from the fully controlled regression. If <= 0, it is set to 1.3 * R_full automatically.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
n_gridNoGrid points for delta in the identified set computation.
x_baseYesKey treatment/variable(s) of interest.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
x_controlsYesAdditional controls whose inclusion tightens identification.
delta_rangeNoRange of proportional selection parameter delta.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint annotation: it states the result is an interval rather than a point, describes the weak set-identifying assumptions, explains the Oster delta proportional-selection interpretation, and gives a concrete failure mode with remediation. No contradiction with 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?

The first sentence is specific and front-loaded, and the labeled sections are efficient despite covering assumptions, preconditions, failure modes, alternatives, and minimum N. The 'Validation' sentence is generic and adds little actionable information, keeping this 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?

Given the complexity of the tool and the presence of an output schema plus readOnly annotation, the description is largely complete: it covers assumptions, preconditions, failure modes, alternatives, and typical minimum sample size. It is slightly weakened by not clarifying the relationship between oster_delta and oster_bounds and by using sp.* names that are not reflected in the sibling list.

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 100%, so the baseline is 3. The description adds high-level conceptual context such as proportional selection and interval bounds, but it does not explain individual parameters in a way that goes beyond the schema's own parameter 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 opens with a specific verb+resource: 'Oster (2019) coefficient stability bounds and delta* computation.' It is clear about the method and adds assumptions and failure modes, but it does not explicitly distinguish oster_delta from the sibling oster_bounds, and the listed 'sp.*' alternatives do not match the visible sibling names.

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 through the assumptions section: Lee bounds add monotonicity, while Oster's delta adds proportional selection. However, the description does not provide explicit when-to-use or when-not-to-use criteria versus alternatives like oster_bounds, lee_bounds, or manski_bounds; it merely lists them.

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

overlap_plotB
Read-only

Mirrored density plot of propensity scores by treatment group.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoAxes to plot on. If None, a new figure is created.
psNoPre-estimated propensity scores.
titleNoPlot title.Propensity Score Overlap
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoPS estimation method if *ps* is None.logit
figsizeNoFigure size (width, height).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary treatment column.
covariatesYesCovariates for PS estimation (ignored if *ps* supplied).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint annotation already communicates that this is a safe, non-mutating operation. The description adds that the output is a mirrored density plot, which is useful, but it does not disclose behavioral details such as the fact that propensity scores will be estimated when ps is omitted, or how results can be chained via as_handle.

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 a single, front-loaded phrase with no wasted words. It is concise and readable, though very sparse; it earns its place but could carry slightly more useful context without becoming verbose.

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?

Given the detailed schema, annotations, and output schema, the description is minimally adequate. However, it does not explain how this tool relates to similar sibling tools, what happens when ps is not supplied, or what the plot's practical use case is, so an agent must rely heavily on parameter descriptions and context signals.

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?

The input schema already describes all 13 parameters with 100% coverage, so the baseline is 3. The tool description adds no parameter-level meaning beyond referring generally to propensity scores and treatment group, which are already covered by the ps and treatment parameter 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 clearly identifies the tool's output: a mirrored density plot of propensity scores by treatment group. It is more specific than the tool name and distinguishes this from generic plotting tools, though it does not name or differentiate against sibling tools like psplot or love_plot.

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: an agent can infer it should call this tool when it wants to visualize propensity score overlap across treatment groups. However, there is no explicit when-to-use or when-not-to-use guidance, and no mention of alternatives such as psplot or overlap_weights.

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

overlap_weighted_didA
Read-only

Overlap-weighted 2x2 DiD. Weights observations by e(X)(1-e(X)), where e(X) is the estimated propensity score, placing highest weight on units with the most overlap between treated and control covariate distributions. Useful when overlap is poor at the tails. Assumptions: Overlap weights target the sub-population with positive overlap; Correct PS model OR outcome model for DR variant; Conditional parallel trends given covariates X after overlap weighting. Pre-conditions: 2 periods, binary treat; covariates with variation; Two-period panel with a binary treat indicator and a binary pre/post time indicator. Failure modes: Propensity scores pile up near 0/1 giving near-zero overlap weights and unstable ATT -> Trim extreme-PS units or simplify the covariate set to restore common support; ps_model='dl' requested but the deep-learning propensity backend fails to converge -> Fall back to ps_model='logit' or 'gbm' for a more stable propensity estimate; More than two time periods passed to this 2x2-only estimator -> Collapse to a single pre/post contrast or use a staggered/multi-period estimator. Alternatives: sp.drdid, sp.did_2x2, sp.did, sp.callaway_santanna. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column.
alphaNoSignificance level for confidence intervals and tests.
treatYesBinary treatment indicator
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
ps_modelNoPropensity score modellogit
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariates X
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, and the description adds substantial behavioral context beyond that: assumptions, target sub-population, failure modes such as extreme propensity scores producing unstable ATT, and fallback strategies for ps_model='dl'. It does not contradict the read-only annotation, and no destructive behavior is implied.

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 long but densely structured: core definition first, then assumptions, pre-conditions, failure modes, alternatives, and minimum N. Every segment provides actionable guidance and none is redundant with the schema or annotations.

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 complex estimator tool, the description covers when to use it, its assumptions, data pre-conditions, failure modes with remedies, alternatives, and sample-size guidance. An output schema exists, so return-value details need not be in the description. Nothing material is missing for correct selection and 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 coverage is 100%, so the schema already documents all parameters. The description adds useful cross-parameter context (e.g., ps_model='dl' may fail to converge; data must be two-period panel with binary treat/time), but it does not re-explain individual parameter formats. Baseline 3 is appropriate because the schema carries the parameter semantics.

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 estimator ('Overlap-weighted 2x2 DiD') and immediately defines its weighting formula and target population. It clearly distinguishes the tool from generic DiD alternatives by naming sp.drdid, sp.did_2x2, sp.did, and sp.callaway_santanna as alternatives.

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 states when the method is useful ('when overlap is poor at the tails'), lists pre-conditions (2 periods, binary treat, covariates with variation), describes failure modes with concrete remedies, and names alternative estimators for other settings. An agent can decide when to call this tool versus siblings without extra inference.

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

overlap_weightsA
Read-only

Overlap-weight (ATO) treatment effect estimator. Validation: certified parity evidence. Assumptions: Unconfoundedness: treatment is as-good-as-random given the measured covariates; Overlap / common support: every unit has a non-degenerate probability of each treatment; The covariate set blocks all back-door paths. Pre-conditions: Pre-treatment covariates measured for treated and control units; A binary (or low-cardinality) treatment indicator; Sufficient covariate overlap between treatment arms. Failure modes: Poor overlap -- extreme propensity scores or few acceptable matches -> Trim or restrict to the common-support region and report the discarded units; Covariate imbalance remains after matching/weighting -> Re-specify the balancing model (CBPS, entropy balancing) and re-check standardized mean differences. Alternatives: sp.propensity_score, sp.cbps, sp.ebalance, sp.dml. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column.
seedNoRandom seed for reproducible stochastic steps.
trimNoOptional clip of pscore to ``[trim, 1-trim]``. For overlap weights this is rarely needed -- set to 0 by default.
alphaNoSignificance level for confidence intervals and tests.
treatYesBinary 0/1 treatment column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
estimandNoWhich generalized-weight scheme to use. All follow Li-Li-Li (2019) Table 1; 'ATO' uses the overlap weights; 'matching' uses the ``min(e, 1-e)`` weight; 'entropy' uses ``-e*log(e) - (1-e)*log(1-e)``; 'ATE/ATT/ATC' reduce to standard IPW for comparison.ATO
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariates for the logistic propensity-score model.
n_bootstrapNoPaired-sample bootstrap replications for SE.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false; the description adds meaningful behavioral context by disclosing failure modes (extreme propensity scores, residual imbalance) and remediation steps, as well as a typical minimum N of 200. It does not mention the caching side effect of as_handle=true, but that is parameterized behavior is absent from the description, so it doesn't contradict the read-only 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?

The description is substantial but organized with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and front-loads the core estimator identity. Each sentence earns its place, though 'certified parity evidence' is ambiguous and slightly cryptic.

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 14-parameter estimator with an output schema, the description covers statistical context (assumptions, pre-conditions, failure modes, alternatives, minimum N) while the schema fully documents parameters and output. Nothing critical for tool invocation is missing; only the 'Validation: certified parity evidence' line is opaque.

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 100%, so the baseline holds. The description adds contextual rationale for trim (rarely needed, clip to [trim, 1-trim]) and implicitly for estimand via the ATO default, but it does not systematically describe each of the 14 parameters; the schema carries that burden.

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 opens with a specific method-object pair, 'Overlap-weight (ATO) treatment effect estimator,' which clearly identifies the estimator and its target. It further differentiates from siblings by explicitly listing alternatives (sp.propensity_score, sp.cbps, sp.ebalance, sp.dml), so an agent can select it without inspecting 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 provides explicit assumptions (unconfoundedness, overlap, back-door closure) and pre-conditions (pre-treatment covariates, binary treatment, sufficient overlap), which collectively signal when the tool is appropriate. Failure modes also advise remedies like trimming or re-specifying with CBPS/entropy balancing. However, it doesn't directly state when to prefer ATO over ATE/ATT/ATC as an estimand choice beyond the default.

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

panelA
Read-only

Unified panel regression: FE, RE, between, FD, pooled OLS, two-way FE, Mundlak/Chamberlain CRE, Arellano-Bond, Blundell-Bond system GMM. Results include built-in diagnostics: .hausman_test(), .bp_lm_test(), .f_test_effects(), .pesaran_cd_test(), .compare(method). Validation: certified parity evidence. Assumptions: Static FE: strict exogeneity of regressors conditional on unit fixed effects (E[u_it | x_i, alpha_i] = 0); Random effects: unit effect uncorrelated with regressors; relax with Mundlak / Chamberlain; Dynamic GMM: weak exogeneity and no second-order serial correlation in differenced errors. Pre-conditions: Data is a long-format panel keyed by (entity, time) with at least 2 time periods per entity; Outcome and regressors are numeric or properly encoded; Method-specific structure satisfied (e.g. dynamic GMM needs T moderate, system GMM needs initial-condition validity). Failure modes: Hausman test rejects RE -> Switch to fixed effects (method='fe') or correlated random effects (method='mundlak'); Few clusters (< 30) inflate Type I error with cluster-robust SEs -> Use wild-cluster bootstrap or CR2/CR3 small-sample corrections; High-dimensional fixed effects make the design si...

ParametersJSON Schema
NameRequiredDescriptionDefault
lagsNoAR lags for dynamic panel (ab/system)
timeYesTime column
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
entityYesUnit identifier column
methodNoEstimation methodfe
robustNoStandard errors: nonrobust, robust, kernel, driscoll-kraaynonrobust
clusterNoCluster variable: entity, time, or twoway
formulaYesRegression formula: 'y ~ x1 + x2'
twostepNoTwo-step GMM
gmm_lagsNoGMM instrument lag range(2, 5)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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

Annotations provide readOnlyHint=true, and the description adds substantial behavioral context: it discloses assumptions (strict exogeneity, random effects uncorrelated), failure modes, and built-in diagnostics. It goes well beyond annotations by explaining what the tool does and when results are reliable, with no contradictions.

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 description is front-loaded with the main purpose and method list, but it is quite long and includes extensive assumptions and failure modes that, while valuable, could be more succinctly organized. It appears truncated, which also impacts completeness. It earns its place for a complex tool but is not concise.

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?

Given the tool's complexity (15 parameters, 11 methods), the description covers many critical aspects: methods, diagnostics, assumptions, pre-conditions, and failure modes. However, the truncation and lack of explicit return-format details (though output schema exists) prevent a perfect score. It is largely complete for an agent to plan calls.

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 100%, so baseline is 3. The description adds context for the 'method' parameter by explaining when to switch methods (e.g., Hausman test rejection) and discusses diagnostics that relate to output but not individual parameters. It adds value beyond schema for method selection, but does not elaborate on all parameters.

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 clearly states it is a unified panel regression tool listing all supported methods (FE, RE, between, FD, pooled, etc.) and includes built-in diagnostics. This distinguishes it from siblings like 'regress' and 'feols' by specifying the panel scope and comprehensive method coverage.

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 provides pre-conditions (long-format panel, keyed by entity/time, at least 2 periods) and failure modes (e.g., Hausman rejection β†’ switch to fe/mundlak), which guide when to use the tool. However, it does not explicitly contrast with alternative tools or state when not to use this tool, leaving some inference needed for tool selection.

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

panel_compareA
Read-only

Estimate the same model with multiple panel methods and return a side-by-side comparison table.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
entityYesPanel entity identifier column.
formulaYesModel formula using patsy/R-style syntax.
methodsNoList of methods to compare, default: pooled/fe/re/twoway/mundlak
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already flag readOnlyHint=true, and the description reflects compute-and-return behavior without contradicting that. It adds the comparison-table output concept, but does not disclose optional server-side caching via as_handle or any runtime caveats; the schema covers those details.

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 sentence with no filler or redundancy. It front-loads the core action and output, making the tool easy to parse for an agent.

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?

Given the rich input schema and presence of an output schema, the description does not need to enumerate parameters or return fields. It captures the essential purpose and output. The main contextual gap is the absence of guidance about related tools, but that is already penalized under usage guidelines.

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 100%, so the baseline of 3 applies. The description does not add parameter-level detail beyond the schema; it only restates the high-level notion of multiple panel methods, which is already represented by the 'methods' parameter.

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 ('estimate'), a resource ('same model with multiple panel methods'), and the output ('side-by-side comparison table'). It is clear and differentiates from single-method panel estimators, though it does not explicitly name a sibling such as compare_estimators.

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 when to use the tool: when the user wants the same model estimated across several panel methods. However, it provides no explicit when-not-to-use guidance or comparison against closely related siblings like compare_estimators or panel_fgls.

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

panel_fglsC
Read-only

Panel FGLS (Feasible Generalized Least Squares). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRegressors.
yYesDependent variable.
idNoPanel identifier.id
tolNoNumerical convergence tolerance.
corrNoWithin-panel correlation: 'independent', 'ar1' (panel-specific AR(1)), 'psar1' (common AR(1)).independent
iglsNoIterate the variance estimates to convergence (Stata's ``igls``). The default is the two-step estimator Stata's ``xtgls`` reports without that option. .. versionchanged:: 1.27.0 This function iterated unconditionally, so its default was Stata's ``igls`` while the docstring claimed equivalence to the plain command. On a balanced N=60, T=12 panel under ``panels(hetero)`` the two differ by 2.8% on the slope. Pass ``igls=True`` for the previous behaviour.
timeNoTime identifier.time
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
panelsNoError structure across panels: 'homoskedastic', 'heteroskedastic', 'correlated' (cross-sectional).heteroskedastic
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

Annotations indicate readOnlyHint=truecars, so the safety profile is covered. However, the description adds no behavioral context such as what outputs are returned, whether the data is modified, or any side effects. The phrase 'certified parity evidence' hints at validation but does not describe the tool's runtime behavior in a useful way.

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

Conciseness2/5

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

The description is very brief, but the first sentence is redundant with the tool name and the second sentence is vague and uninformative. For a tool with 16 parameters, this is under-specification rather than effective conciseness; the sentences do not earn their place by adding value.

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?

Although the schema and output schema are rich, the description itself does not explain what the tool does, what inputs are expected beyond schema names, or how it relates to sibling tools. An agent cannot determine from the description alone when to invoke panel_fgls or what the tool accomplishes, making it contextually incomplete for a complex econometrics 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 description coverage is 100%, so each parameter already has a description. The tool description adds no additional meaning or clarification about parameters. Since the schema carries the full burden, a baseline of 3 is appropriate.

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

Purpose2/5

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

The description 'Panel FGLS (Feasible Generalized Least Squares)' essentially restates the tool name with the acronym expanded. It lacks an action verb (e.g., 'estimates', 'fits') that would clarify what the tool does. Mention of 'Validation: certified parity evidence' is tangential and does not explain the tool's core purpose.

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 about when to use this tool versus alternatives like xtgls, sureg, or other panel estimators. The description does not mention any conditions, prerequisites, or scenarios where panel_fgls is preferred, leaving the agent to infer usage from the name alone.

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

panel_logitC
Read-only

Panel logit model. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRegressors.
yYesBinary dependent variable (0/1).
idNoUnit and time identifier columns.id
tolNoGradient tolerance.
timeNoUnit and time identifier columns.time
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo'fe' (conditional FE logit), 're' (random effects), 'cre' (Mundlak).fe
robustNo'nonrobust' or 'robust'.nonrobust
clusterNoColumn for cluster-robust SEs.
maxiterNoMaximum optimizer iterations.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
n_quadratureNoGauss-Hermite quadrature points (RE/CRE only).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

readOnlyHint=true and openWorldHint=false already signal the general safety profile, and the description does not contradict those annotations. However, the description itself contributes no useful behavioral context: the 'Validation: certified parity evidence' fragment is opaque and does not explain side effects, chaining behavior, or other runtime characteristics.

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

Conciseness2/5

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

The text is short but under-specified rather than effectively concise. The second sentence is a vague fragment that does not earn its place, and the description omits the core purpose and selection information an agent needs.

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?

Despite a rich input schema and the presence of an output schema, the description alone is not complete enough for an agent to choose this tool among dozens of related estimators. It lacks a clear statement of what the tool does, the panel-data setting it targets, and how it relates to alternatives such as panel_probit, clogit, or logit.

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 100%, and the schema entries are unusually detailed, including payload-depth guidance, method choices, data path formats, and handle-based chaining. Since the description adds no parameter-level meaning beyond the schema, the baseline score of 3 is appropriate.

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

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is essentially a restatement of the tool name: 'Panel logit model' names the model type but provides no verb, action, or scope. 'Validation: certified parity evidence' is too vague to clarify what the tool actually computes or how it differs from siblings like logit, clogit, or panel_probit.

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 is provided about when to use panel_logit rather than alternative estimators such as logit, clogit, melogit, or panel_probit. There are no exclusions, prerequisites, or selection rules; the 'Validation' clause does not function as usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

panel_probitD
Read-only

Panel probit model. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRegressors.
yYesBinary dependent variable (0/1).
idNoUnit and time identifier columns.id
tolNoGradient tolerance.
timeNoUnit and time identifier columns.time
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo're' (random effects) or 'cre' (Mundlak). FE probit not supported (incidental parameters problem).re
robustNo'nonrobust' or 'robust'.nonrobust
clusterNoColumn for cluster-robust SEs.
maxiterNoMaximum optimizer iterations.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
n_quadratureNoGauss-Hermite quadrature points.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so the agent knows it is a read-only operation. The description adds no behavioral context beyond thisβ€”no mention of output structure, side effects, or validation behavior. The phrase 'certified parity evidence' is ambiguous and does not disclose what the tool does with data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short but lacks substance. It consists of two fragments ('Panel probit model.' and 'Validation: certified parity evidence.'), the second being unclear. This is under-specification rather than effective conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 17 parameters, an output schema, and many siblings, this description is severely incomplete. It does not explain the model's assumptions (e.g., random effects vs fixed effects), the meaning of 'certified parity evidence', or how to chain with as_handle. An agent would have to rely entirely on the schema.

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?

The input schema has 100% description coverage, so all 17 parameters are documented. The description adds nothing beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is a noun phrase 'Panel probit model' without an explicit verb like 'estimates' or 'fits'. It identifies the model type but does not state the action performed, nor does it differentiate from siblings such as probit or panel_logit. This is vague but not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/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 alternatives like probit, logit, or panel_logit. No conditions, prerequisites, or exclusions are mentioned. The cryptic phrase 'certified parity evidence' does not clarify usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

panel_qtetA
Read-only

Callaway & Li (2019) quantile treatment effect on the treated for panel data. Recovers the counterfactual DISTRIBUTION of untreated outcomes for the treated group via distributional DiD plus a copula-stability assumption. Needs a balanced THREE-period panel (the third period identifies the copula). Exact parity with R qte::panel.qtet (6.8e-12). Validation: certified parity evidence. Assumptions: Distributional DiD; Copula stability: the dependence between the period-t change and the period-(t-1) level equals that between the period-(t-1) change and the period-(t-2) level, for the treated. Untestable at t, but checked on the untreated group and reported in model_info['copula_check']; Continuous outcome: with mass points the rank map is not measure-preserving; model_info['coherence_check'] flags it. Pre-conditions: balanced panel over three periods; binary treatment, read at period t; continuous outcome (mass points distort the rank map). Failure modes: Outcome has mass points (e.g. many zero earnings) -> The rank map collapses tied units onto one value and the QTT curve is distorted; the reported ATT (a mean DiD) is unaffected. Use sp.cic bounds for discrete outcomes; Only two peri...

ParametersJSON Schema
NameRequiredDescriptionDefault
tYesPost-period VALUE of time
yYesOutcome
seNoSE methodbootstrap
seedNoRandom seed for reproducible stochastic steps.
timeYesPeriod
unitYesUnit id
alphaNoSignificance level for confidence intervals and tests.
tmin1YesPre-period VALUE of time
tmin2YesPre-pre-period VALUE; identifies the copula
treatYesBinary treatment
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoquantiles parameter (list).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the annotations (readOnlyHint: true) by disclosing assumptions, failure modes, and validation parity. It explains that copula stability is untestable at t but checked on the untreated group via model_info['copula_check'], and that mass points distort the rank map while the ATT remains unaffected. It also states exact parity with R qte::panel.qtet (6.8e-12). These are behavioral traits that an agent needs to anticipate results and diagnose issues.

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 dense and information-packed, with a clear structure: purpose, assumptions, pre-conditions, and failure modes. It is front-loaded with the core purpose. While it is somewhat long, every sentence adds value and the organization is logical. It is not excessively verbose given the complexity of the tool.

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 tool's complexity (18 parameters, 8 required) and the presence of an output schema, the description covers essential context: the statistical assumptions, data pre-conditions, failure modes with guidance on alternatives, and validation evidence. It mentions model_info checks that the agent will need to interpret results. The description is comprehensive enough for an agent to call the tool correctly and interpret the output, especially with the output schema available.

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 100%, so the baseline is 3. The description adds context for the time-related parameters (t, tmin1, tmin2) by explaining that the third period identifies the copula, and it clarifies the role of continuous outcome vs. mass points. This enriches the meaning beyond the schema's simple field names, though it doesn't enumerate every parameter. It earns a 4 for adding non-redundant context.

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 clearly states this tool computes a Callaway & Li (2019) quantile treatment effect on the treated for panel data, using distributional DiD and a copula-stability assumption. It specifies the exact data requirement (balanced three-period panel) and the method's goal (recover counterfactual distribution of untreated outcomes). This is a specific, non-tautological statement that distinguishes it from related tools like qte or did by emphasizing the three-period structure.

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?

The description gives explicit pre-conditions: balanced three-period panel, binary treatment read at period t, and continuous outcome. It also provides a when-not: for discrete outcomes with mass points, it recommends using sp.cic bounds. This effectively tells an agent when to select this tool over alternatives, which is exactly what usage guidelines should do.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

panel_unitrootC
Read-only

Panel unit root test. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoUnit identifier.id
lagsNoNumber of ADF lags. If None, uses AIC selection.
testNoTest type: 'llc' (Levin-Lin-Chu), 'ips' (Im-Pesaran-Shin), 'fisher' (Fisher-type ADF), 'hadri' (stationarity test).ips
timeNoTime identifier.time
trendNo'n' (none), 'c' (constant), 'ct' (constant + trend).c
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
variableYesVariable to test.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the safe read-only behavior is covered. The description adds a cryptic 'validated evidence tier' claim, which is a slight bonus beyond annotations, but it does not explain what that means or any other behavioral traits such as output shape or special limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is short but under-specified: the first sentence merely restates the tool name, and the second sentence is vague and unexplained. This is not efficient conciseness but rather missing content.

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 12-parameter tool with a rich schema, the description provides almost no contextual help for selecting among tests, interpreting validation tiers, or understanding when this tool is the right choice. The output schema exists, but the description still leaves the agent without enough orientation.

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 100%, so the schema carries the parameter documentation burden. The description adds no additional meaning for parameters like lags, test, trend, detail, or data_path.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is a noun-phrase restatement of the tool name ('Panel unit root test') rather than a verb-driven statement of what the tool does. It does not distinguish this tool from related siblings such as 'ips', 'johansen', or other time-series/panel testing tools.

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 panel_unitroot versus alternatives, and no mention of exclusions or preferred contexts. The validation-tier sentence is about output evidence, not usage selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

panel_viewB
Read-only

panelView-style display of a panel's treatment status and outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
yNoOutcome column, required for ``type="outcome"``.
axNoax parameter.
timeYesUnit and time identifiers.
typeNo``'treat'`` draws the unit-by-period treatment-status tiles (``sp.treatment_rollout_plot``); ``'outcome'`` draws every unit's outcome path, treated periods highlighted, with the mean path of the never-treated units.treat
unitYesUnit and time identifiers.
treatYes0/1 treatment status in each unit-period.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
figsizeNofigsize parameter (Tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the description doesn't need to restate safety. The description adds some behavioral context via the 'type' parameter (what each mode draws) and the 'detail' parameter (payload depth for LLM planning). However, it doesn't disclose return format details beyond the output schema, or any side effects like caching when as_handle=true (though that is in the 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?

The description is a single concise sentence that front-loads the core purpose. It doesn't waste words, though it could add a bit more context about when to use it. The schema carries the detailed parameter explanations, so the brevity is appropriate.

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?

Given the tool has an output schema and 100% schema coverage, the description doesn't need to explain return values. However, with 13 parameters and many sibling plotting tools, the description could be more explicit about how this tool fits into the panel analysis workflow and when to choose it over alternatives like treatment_rollout_plot or did_plot. The 'detail' parameter hints at LLM chaining but the description doesn't fully explain the tool's role.

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 100%, so the schema already documents all 13 parameters. The description adds minimal extra meaning beyond the schema; the 'type' parameter description in the schema is already detailed. The tool description itself doesn't add parameter semantics beyond what the schema provides, so baseline 3 is appropriate.

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 says 'panelView-style display of a panel's treatment status and outcomes.' It names a specific resource (panel treatment status/outcomes) and a display action, and the 'type' parameter clarifies the two modes. However, it doesn't explicitly distinguish itself from sibling tools like treatment_rollout_plot or synth_plot, and the name 'panel_view' is somewhat generic.

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 usage for visualizing panel treatment status and outcomes, and the 'type' parameter explains when to use 'treat' vs 'outcome'. But it doesn't explicitly state when to prefer this over sibling plotting tools (e.g., treatment_rollout_plot, did_plot, event_study_plot) or provide exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

partial_corr_pvalueA
Read-only

Partial-correlation p-value for H0: X Y | Z.

ParametersJSON Schema
NameRequiredDescriptionDefault
ZNoInstrument matrix or auxiliary covariate matrix.
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true and openWorldHint=false, which cover the non-mutating and closed-world nature. The description adds no additional behavioral context beyond the statistical test; it doesn't mention what happens if 'Z' is omitted, or any edge cases. However, since annotations cover safety, a 3 is appropriate, but there is room for more context (e.g., handling of missing data).

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 a single, dense sentence that captures the essence of the tool. It is front-loaded with the purpose and the null hypothesis, and there is zero waste. Every word is meaningful, and it fits well for a statistical tool with a clear function.

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 tool has a rich output schema (not provided in the prompt but indicated), which covers return values. The description does not explain the statistical tests or assumptions (e.g., normally distributed data), but the schema for inputs and outputs is comprehensive. For a simple p-value computation, this is acceptable, but it could benefit from a note on when to use partial correlation versus alternative methods.

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 100%, so all 9 parameters are documented with descriptions. The description itself adds minimal value beyond the schemaβ€”it only clarifies the role of 'X', 'Y', and 'Z' in the hypothesis, which partially reinforces the schema descriptions. For the other parameters (detail, as_handle, data_path, etc.), the schema is sufficient, so baseline 3 is correct.

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 clearly states it computes the p-value for a partial correlation test, with the null hypothesis explicitly given as 'X Y | Z'. It specifies the verb ('p-value for'), the resource (partial correlation), and the conditioning structure, which distinguishes it from generic correlation or regression tools. Although siblings like 'test' and 'partial_identification' exist, the description's specificity is sufficient to differentiate.

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 does not explicitly state when to use this tool versus alternatives like 'test' or 'discos_test'. It implies usage by naming the statistical test, but lacks guidance on context (e.g., testing conditional independence) or exclusions. With 9 parameters and a rich schema, this gap is noticeable, but the purpose is clear enough for an agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

partial_identificationA
Read-only

Partial identification of ATE -- article alias for the bounds module. Assumptions: Only weak (set-identifying) assumptions are imposed; the result is an interval, not a point; Lee bounds add monotonicity of selection; Oster's delta adds proportional selection on observed vs. unobserved. Pre-conditions: The data needed for the point-identifying analysis, plus the weakest credible identifying restriction; For Lee bounds: a binary selection/attrition indicator. Failure modes: Bounds are too wide to be informative -> Add a credible auxiliary restriction (monotone treatment response, instrument) to tighten the bounds. Alternatives: sp.oster_delta, sp.lee_bounds, sp.manski_bounds. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
XNoFeature matrix or covariate DataFrame.
dYesd parameter (str).
yYesOutcome variable column name or outcome array.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimator or algorithm variant to use.manski
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
selectionNoselection parameter (Optional[str]).
instrumentNoinstrument parameter (Optional[str]).
assumptionsNoassumptions parameter (Optional[List[str]]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds behavioral context: the result is an interval not a point, and failure modes are described (bounds too wide). This goes beyond annotations and is valuable for setting expectations. No contradiction with 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?

The description is a single structured paragraph with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). It is dense but each sentence provides distinct information. Purpose is front-loaded. Could be slightly more concise, but overall well-organized and informative.

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 complex tool with 13 parameters, it covers assumptions, pre-conditions, failure modes, alternatives, and a typical minimum N. An output schema exists, so return format is likely covered. It does not explicitly link method values to the named alternatives, but the description mentions Lee bounds and Oster's delta. Overall, it is fairly complete for an agent to plan calls.

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 100%, so each parameter has a description, but many are terse (e.g., 'd parameter (str).'). The description adds pre-conditions (weakest credible identifying restriction, binary selection indicator for Lee bounds) which clarify selection and assumptions parameters. It does not elaborate on method or detail, but the schema already has some info. Baseline of 3 is appropriate; description adds a bit but not comprehensive.

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 'Partial identification of ATE' clearly, a specific verb+resource. It describes the result as an interval and mentions assumptions (Lee bounds, Oster's delta) and alternatives, which helps distinguish from sibling tools like oster_delta, lee_bounds, manski_bounds. However, it does not explicitly state how it differs from those siblings beyond listing them as alternatives, so it is clear but not maximally differentiated.

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 alternatives (sp.oster_delta, sp.lee_bounds, sp.manski_bounds) and a failure mode remedy (add a credible auxiliary restriction to tighten bounds). Pre-conditions and typical N are given. It lacks an explicit 'use this when you only have weak assumptions' statement, but the context strongly implies it. Overall, solid usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pateB
Read-only

Estimate the Population Average Treatment Effect (PATE). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable (only used from data_experiment).
seedNoRandom seed for reproducibility.
trimNoTrimming threshold for participation propensities (values below *trim* or above 1 - *trim* are clipped).
alphaNoSignificance level for the confidence interval.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimation strategy: * ``'ipw'`` -- Inverse probability of sampling weights. * ``'aipw'`` -- Augmented IPW (doubly robust). * ``'calibration'`` -- Entropy balancing on covariate moments.ipw
n_bootNoNumber of bootstrap replications for standard-error estimation.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary treatment indicator (only in data_experiment).
covariatesYesShared covariates present in both datasets.
data_targetYesTarget population sample. Must contain all *covariates*. Need not contain *y* or *treatment*.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
data_experimentYesExperimental/study sample. Must contain *y*, *treatment*, and all *covariates*.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the read-only nature is covered. The description adds a vague note about 'validated evidence tier' without explaining what it means for the agent (e.g., trustworthiness, output semantics), providing little behavioral insight beyond 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?

The description is very short (two sentences) and front-loaded with the core purpose. The second sentence about validation is cryptic but not verbose; overall it is concise but the second sentence could be clarified.

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 16-parameter tool with both an experimental and target dataset, the description is incomplete. It fails to mention the key inputs (covariates, treatment, outcome, datasets) or the role of the 'data_target' sample, leaving the agent to rely entirely on schema descriptions. The output schema exists but the tool's specific logic is not summarized.

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 100%, so all 16 parameters already have descriptions in the schema. The description adds no parameter-level meaning, which is acceptable given the baseline of 3.

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 clear verb ('Estimate') and a specific resource ('Population Average Treatment Effect (PATE)'), which distinguishes it from generic ATE tools. However, it does not differentiate from similarly named siblings like 'average_treatment_effect' or 'doubly_robust', so an agent may struggle to pick between 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?

No guidance is provided on when to use PATE versus alternative estimators (e.g., average_treatment_effect, aipw, ipw). The description lacks any mention of the two-dataset requirement (data_experiment/data_target) or when this estimand is appropriate. The 'Validation' sentence is unrelated to usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pc_algorithmA
Read-only

Learn causal structure using the PC algorithm. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Causal Markov condition and faithfulness (PC/GES/FCI); Causal sufficiency for PC/GES (no latent confounders); FCI relaxes this; Acyclicity; LiNGAM additionally assumes a linear non-Gaussian model. Pre-conditions: Constraint-/score-based discovery needs i.i.d. observational data with enough samples for reliable conditional-independence tests; Invariance-based discovery (ICP) needs data labelled by environment / intervention. Failure modes: Unstable skeleton / many undirected edges -- faithfulness or sample size is the likely culprit -> Increase the sample, relax the CI-test threshold, or switch to FCI if latent confounders are plausible. Alternatives: sp.pc_algorithm, sp.fci, sp.ges, sp.lingam. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for conditional independence tests. Lower alpha = sparser graph (fewer edges).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
ci_testNoConditional independence test: 'fisherz' (partial correlation) or 'hsic' (kernel-based, non-linear).fisherz
requiredNoBackground knowledge: directed edges ``a -> b`` that must appear in the CPDAG. The skeleton phase preserves them regardless of CI rejection, and the orientation phase pins their direction.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
forbiddenNoBackground knowledge: edges that must NOT appear in the final graph (treated as undirected -- both ``(a, b)`` and ``(b, a)`` are forbidden when either is given). The skeleton phase keeps these absent regardless of CI test outcomes.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
variablesNoColumn names to use. If None, uses all numeric columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
max_cond_sizeNoMaximum conditioning set size. If None, goes up to d-2.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the safety profile is already covered. The description adds substantial behavioral context beyond that: assumptions (Causal Markov, faithfulness, sufficiency, acyclicity), failure modes, and a typical minimum N of 500. It does not contradict annotations. It loses one point because it doesn't describe the return payload shape or how the CPDAG output is represented, though the output schema likely covers 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 description is dense but well-organized with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Every sentence adds information. It is longer than the ideal one-liner, but the complexity of a causal-discovery tool justifies the length. The most important fact (what the tool does) is front-loaded.

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 12-parameter causal discovery tool with an output schema, the description covers the key contextual gaps: assumptions, data requirements, failure modes, sample-size guidance, and alternatives. It doesn't explain the output graph representation (CPDAG vs DAG) or how to interpret the result, but the output schema and the 'agent' detail level likely cover that. The description is complete enough for an agent to decide whether to call it and how to react to common failures.

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 100%, so the schema already documents all 12 parameters. The description adds context for alpha (via failure-mode advice to relax the CI-test threshold) and for data requirements (i.i.d. vs environment-labelled), but it doesn't systematically map parameters to behavior. Baseline 3 is appropriate when the schema carries the full 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?

The description opens with a specific verb+resource: 'Learn causal structure using the PC algorithm.' It clearly distinguishes the tool from siblings by naming alternatives (sp.pc_algorithm, sp.fci, sp.ges, sp.lingam) and by stating the algorithm's assumptions. The scope is unambiguous: causal discovery via constraint-based search.

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?

The description provides explicit pre-conditions (i.i.d. observational data with enough samples for CI tests; environment-labelled data for ICP), failure modes with concrete remedies (increase sample, relax CI threshold, switch to FCI), and names alternatives. This is exactly the when-to-use vs alternatives guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pci_mtpA
Read-only

Proximal causal inference for modified treatment policies (Park & Ying 2025). Estimates the effect of a policy that shifts the treatment distribution (e.g., raises the dose by 10%) under unobserved confounding identified by PCI. Assumptions: The proxies are valid negative controls (relevant to the confounder, excluded from the causal channel); A bridge function exists (completeness conditions hold). Pre-conditions: Treatment-inducing and outcome-inducing proxy variables (negative controls) for the unobserved confounder. Failure modes: Proxies are weak or invalid -- the bridge function is poorly identified -> Test proxy relevance, select stronger proxies, or fall back to sensitivity analysis. Alternatives: sp.select_pci_proxies, sp.dml. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
deltaYesAdditive shift applied to the treatment under the modified policy
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
proxy_wYesproxy_w parameter (list).
proxy_zYesproxy_z parameter (list).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, so the description need not restate safety. It goes beyond that by disclosing assumptions (valid negative controls, bridge function), pre-conditions, and failure modes (weak/invalid proxies leading to poor identification). This gives an agent accurate expectations about execution outcomes, far exceeding annotation coverage.

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 a single focused paragraph with clear internal structure (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical N). It front-loads the core purpose and packs essential context into each sentence without redundancy. Every element earns its place.

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 complex estimator with assumptions and pre-conditions, this description fully equips an agent: it covers prerequisites, failure modes, alternatives, and typical sample size. Since an output schema exists (indicated by 'Has output schema: true'), the description doesn't need to explain return values, so nothing critical is missing.

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 100%, so the schema already documents all 11 parameters with individual descriptions. The tool description adds conceptual context (e.g., what 'delta' is for) but doesn't elaborate beyond the schema. With full coverage, the baseline of 3 is appropriate; the description adds minimal extra parameter-level meaning.

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 ('estimates') with a clear resource ('effect of a policy that shifts the treatment distribution') and identifies the method (PCI). It also names alternative tools explicitly (sp.select_pci_proxies, sp.dml), distinguishing it from siblings without needing to inspect 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?

The description gives explicit when-to-use context (unobserved confounding identified by PCI), states pre-conditions (treatment-inducing and outcome-inducing proxies), lists failure modes and fallback actions, and names alternatives. This is comprehensive routing guidance beyond what annotations provide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pcmciA
Read-only

PCMCI causal discovery for stationary time-series. Assumptions: Causal Markov condition and faithfulness (PC/GES/FCI); Causal sufficiency for PC/GES (no latent confounders); FCI relaxes this; Acyclicity; LiNGAM additionally assumes a linear non-Gaussian model. Pre-conditions: Constraint-/score-based discovery needs i.i.d. observational data with enough samples for reliable conditional-independence tests; Invariance-based discovery (ICP) needs data labelled by environment / intervention. Failure modes: Unstable skeleton / many undirected edges -- faithfulness or sample size is the likely culprit -> Increase the sample, relax the CI-test threshold, or switch to FCI if latent confounders are plausible. Alternatives: sp.pc_algorithm, sp.fci, sp.ges, sp.lingam. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
ci_testNoCustom CI test ``(x, y, Z) -> p_value``. Defaults to :func:`partial_corr_pvalue`.
tau_maxNoMaximum lag to consider for parent candidates.
verboseNoverbose parameter (bool).
pc_alphaNoSignificance threshold used during the PC1 selection stage.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
mci_alphaNoSignificance threshold for the final MCI adjacency. Defaults to ``pc_alpha``.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
variablesNoColumns to use. Defaults to all columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
max_conds_dimNoHard cap on the conditioning-set size during PC1. ``None`` means no cap (the algorithm stops automatically when no predictors remain).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the description doesn't need to repeat that. It adds rich behavioral context: assumptions (Causal Markov, faithfulness, acyclicity), failure modes (unstable skeleton, likely culprits), and typical minimum N. This goes well beyond 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?

The description is organized into labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) which makes it scannable. It is somewhat long but every sentence carries useful informationβ€”no fluff.

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 complex causal discovery tool, this description covers assumptions, preconditions, failure modes, alternatives, and sample size guidance. An output schema exists, so return format is already documented. Nothing an agent needs to decide when and how to call this tool is missing.

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 100%, so all 13 parameters are documented. The description adds some meaning by linking failure modes to parameter choices (e.g., 'relax the CI-test threshold'), but it doesn't explain specific parameters beyond what the schema already provides. Baseline 3 is appropriate.

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 ('PCMCI causal discovery for stationary time-series') and names alternatives (sp.pc_algorithm, sp.fci, sp.ges, sp.lingam), clearly distinguishing it from siblings like pc_algorithm, fci, ges, lingam in the sibling list.

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 explicit pre-conditions (i.i.d. data for constraint/score-based, labelled environments for invariance-based) and names alternatives explicitly. Also gives failure modes and typical minimum N, giving clear guidance on when to use and when not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pipeline_didA
Read-only

End-to-end DID workflow: preflight -> did/CS estimator -> audit -> honest-DID sensitivity -> bacon decomposition -> brief. Returns one markdown report + the primary result_id. Use this when the user pastes a DID dataset and asks 'is the effect real?' -- the pipeline runs every diagnostic the literature expects.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column.
idNoUnit id (panel) -- required for staggered-DID.
timeYesTime column.
treatYesBinary treatment indicator.
cohortNoFirst-treatment cohort column. When supplied, dispatches callaway_santanna instead of classic 2x2 did.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNo
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already signal readOnlyHint=true, so no destructive behavior needs to be disclosed. The description adds useful behavioral context beyond annotations: it reveals this is a multi-stage orchestration tool that chains several diagnostics and returns a combined report plus a result_id. It does not disclose runtime/compute cost or that the pipeline may be heavier than a single diagnostic, but the read-only annotation lowers the burden.

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 only two sentences, with the workflow front-loaded before the use case. Every phrase earns its place: the stage chain, the output type, the result_id, and the decision rule. There is no filler or repetition of schema content.

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 complex 12-parameter pipeline, the high-level description is complete enough for an agent to know what the tool achieves and when to choose it. The output schema and rich per-parameter descriptions cover return values and optional behaviors like cohort dispatch and as_handle chaining. Nothing needed for correct selection or invocation is missing from the description itself.

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 92%, so the input schema fully documents the parameters. The tool description adds no parameter-level information, which is acceptable because the schema does the heavy lifting. It does, however, mention the concept of result_id and the result-report output at a conceptual level, but not in any detail.

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 uses a specific verb phrase ('End-to-end DID workflow') and enumerates the exact pipeline stages: preflight, did/CS estimator, audit, honest-DID sensitivity, bacon decomposition, brief. It clearly states the output (one markdown report + primary result_id) and the intended trigger ('user pastes a DID dataset and asks 'is the effect real?''). This distinguishes it from single-step sibling tools such as audit or bacon_decomposition, even if it does not name a competing end-to-end alternative.

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?

There is an explicit when-to-use statement: 'Use this when the user pastes a DID dataset and asks 'is the effect real?''. This gives the agent a clear selection condition. However, it does not mention when not to use the tool, nor does it name alternatives such as auto_did or did_analysis when only a component diagnostic is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pipeline_ivA
Read-only

End-to-end IV workflow: ivreg -> first-stage F (effective + Olea-Pflueger) -> Anderson-Rubin CI -> e-value. Returns one markdown report + result_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
formulaYes'y ~ x_exog + (d_endog ~ z_instrument)' style.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the multi-step workflow and the return payload, which adds context beyond the readOnlyHint annotation. However, it states result_id is returned unconditionally, while the schema ties result_id/result_uri to as_handle=true, leaving some ambiguity about the actual output contract.

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 a single dense sentence that front-loads the workflow components and ends with the output. Every phrase contributes useful information 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?

For a 7-parameter tool with a fully documented schema and an output schema, the description provides sufficient context about what the pipeline does and what it returns. The main gap is explicit usage routing versus the component tools, which is already captured in usage_guidelines.

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?

The input schema has 100% description coverage, so the baseline applies. The description adds workflow-level context but does not provide additional meaning for individual parameters such as formula, data_path, or detail levels.

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 clearly identifies a composite IV workflow by naming the exact component chain (ivreg -> first-stage F -> Anderson-Rubin CI -> e-value) and the output (markdown report + result_id). This makes it readily distinguishable from siblings such as ivreg, effective_f_test, anderson_rubin_ci, and evalue.

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 'End-to-end IV workflow' implies use when a complete IV pipeline is desired, but it does not explicitly state when to choose this over calling ivreg, effective_f_test, anderson_rubin_ci, and evalue separately. There are no exclusions or alternative routing hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pipeline_rdA
Read-only

End-to-end RD workflow: rdrobust -> rdplot (PNG image) -> rddensity (McCrary) -> rdsensitivity (bandwidth). Returns one markdown report + result_id + an image content block.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoCutoff value.
xYesRunning variable column.
yYes
fuzzyNoTreatment column for fuzzy RD (optional).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds useful behavioral context: it sequences the underlying estimators, returns a markdown report, a result_id, and an image content block, and implies the pipeline is a combined operation. This goes beyond what annotations alone provide.

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 two sentences with no filler. The workflow is front-loaded in the first sentence, and the output contract is given exactly in the second sentence. Every piece of text 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?

Given the rich schema, output schema presence, and annotations, the description covers the essential selection and invocation context: pipeline purpose, composed steps, and return format. It does not explain chaining behavior via result_id in detail, but the schema already documents as_handle and result_id.

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 90%, and parameter descriptions in the schema are already detailed (x, y, c, fuzzy, detail, as_handle, data_path, etc.). The tool description itself adds little parameter-level meaning, so the baseline score of 3 is appropriate.

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 clearly explains what the tool does: it runs a full RD pipeline with named steps (rdrobust, rdplot, rddensity, rdsensitivity) and states the exact output format. This distinguishes it from individual RD tools like rdrobust or rddensity and from other pipelines like pipeline_did.

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 'End-to-end RD workflow' β€” an agent can tell this is for full regression-discontinuity analysis rather than a single sub-estimator. However, it does not explicitly say when to prefer this pipeline over individual tools or when not to use it, so the guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plot_from_resultA
Read-only

Render the canonical diagnostic plot for a fitted result and return it as an inline PNG image content block. MCP clients with vision (Claude Desktop, vision-capable agents) get the plot for free; clients that don't support image content see only the JSON metadata. Plot kind is auto-selected from the result type: event-study for DID, rdplot for RD, gap plot for synth, balance plot for matching, ROC for classification, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoOverride the auto-detected plot kind. Common values: 'event_study', 'rdplot', 'synth_gap', 'love_plot', 'coef_plot'.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
figsizeNoWidth, height in inches (default [8,5]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idYesHandle to a fitted result.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses client-dependent behavior (vision clients get the inline PNG; non-vision clients see only JSON metadata) and explains auto-selection. It does not mention the as_handle server-side caching side effect in the main description, but that is documented in the schema. No contradiction with readOnlyHint.

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 dense sentences, front-loaded with the core behavior and return type, followed by client compatibility and auto-selection behavior. No filler or repetition of schema details.

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 a rich output schema and 100% schema parameter coverage, the description does not need to restate return formats or parameter details. The only minor gap is that the data loading parameters (data_path, data_columns, data_sample_n) are not mentioned in the description, but their schema descriptions are sufficient.

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 100%, so the baseline is 3. The description adds meaningful semantics by explaining the auto-detected plot-kind mapping, which clarifies how result_id and kind interact beyond the schema's brief parameter descriptions.

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 action ('Render the canonical diagnostic plot') on a specific resource ('a fitted result') and specifies the return type ('inline PNG image content block'). It also distinguishes itself from specialized plot siblings by emphasizing auto-selection of the canonical plot from the result type.

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 clear context: use this after obtaining a fitted result to get the canonical diagnostic plot, with an explicit mapping of result types to plot kinds. It also advises on behavior for vision-capable vs non-vision MCP clients. However, it does not explicitly name alternative plot tools or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

poissonB
Read-only

Poisson regression via MLE (IRLS). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoIndependent variable names (alternative to formula).
yNoDependent variable name (alternative to formula).
irrNoIf True, report Incidence Rate Ratios (exp(beta)) instead of raw coefficients.
tolNoConvergence tolerance.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
offsetNoOffset variable (log of exposure already computed).
robustNoStandard error type: "nonrobust", "robust"/"hc0", "hc1".nonrobust
clusterNoVariable name for clustered standard errors.
formulaNoModel formula, e.g. "y ~ x1 + x2".
maxiterNoMaximum IRLS iterations.
weightsNoFrequency/analytic weight variable.
exposureNoExposure variable (will be logged and used as offset).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true is present, which covers safety, but the description adds little behavioral context. The phrase 'Validation: certified parity evidence' is cryptically worded; it may refer to an implementation verification but does not disclose what the tool returns, whether it supports chaining, or any side effects. No contradiction with annotations is present, but the description fails to provide meaningful behavioral transparency beyond the purpose statement.

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 exceptionally concise: two short sentences with zero filler. The main purpose is front-loaded, and the validation note is clearly separated. Every part earns its place, and the text is appropriately sized for the information it conveys.

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?

Given the tool's complexity (18 parameters, 100+ sibling tools) and the sparsity of the description, the agent lacks essential context for correct use. There is no guidance on when to reach for poisson over similar tools, no mention of typical workflow steps, and the ambiguous 'validation' statement does not help. While the schema covers parameter details naturally, the description fails to place the tool in the broader analytical context.

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 100%, so the baseline is 3. The description itself does not add any parameter-level meaning, but the schema already thoroughly documents each of the 18 parameters, including defaults, enums, and format expectations. No value is missing from the description, but it also does not augment what the schema provides.

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 clearly states 'Poisson regression via MLE (IRLS)', identifying the specific statistical model, estimation method, and algorithm. This distinguishes it from sibling tools like nbreg, fepois, or glm. The Verb+resource structure is explicit and 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?

No guidance is provided on when to use this tool versus alternatives. Sibling tools include many count-data models (nbreg, xtnbreg, fepois, zip_model, zinb), but the description gives no criteria for selecting poisson over these or when a different model would be more appropriate. There is no mention of prerequisites, data requirements, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

policy_targetingB
Read-only

Rank-and-treat policy under a budget constraint.

ParametersJSON Schema
NameRequiredDescriptionDefault
cateYesPer-unit effect estimates -- a raw array, a ``metalearner()`` / ``tarnet()`` result, or a fitted ``causal_forest()`` model (training-sample effects are used).
fracNoMaximum *fraction* of units that can be treated (in ``(0, 1]``).
budgetNoMaximum number of units that can be treated. Mutually exclusive with ``frac``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
min_effectNoNever treat a unit whose predicted effect is at or below this threshold, even with budget left over -- treating predicted non-responders wastes budget and can do harm.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already covers the safety profile, and the description adds the behavioral idea of ranking units and treating under a budget. However, it does not disclose optional chaining behavior such as as_handle caching or result_id reuse, though the output schema covers return-value expectations.

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 a single seven-word sentence with no filler and front-loads the core operation and constraint. It is highly concise even though its terseness costs points in other dimensions.

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 10-parameter tool in a massive sibling set, this one-liner is too thin: it omits the typical input source (CATE estimates), the frac-versus-budget decision, and any relationship to policy_tree or policy_value. The schema covers mechanics, but tool-level selection context is incomplete.

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 100%, so the parameters are already well documented. The description itself adds no extra parameter semantics beyond loosely echoing the concepts of ranking, treatment, and budget.

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 active phrase 'Rank-and-treat policy' plus 'under a budget constraint' conveys a specific operation: assign treatment to the highest-effect units up to a budget limit. It is clear and not a tautology, but it does not explicitly differentiate from sibling tools like policy_tree or policy_value.

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 gives no explicit when-to-use or when-not-to-use guidance, and it names no alternatives despite a very large sibling set containing policy_tree, policy_value, and offline_safe_policy. The 'budget constraint' phrase is only an implicit cue.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

policy_treeC
Read-only

Doubly-robust policy-tree -- article-facing alias. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
XNoFeature matrix or covariate DataFrame.
dNod parameter (Optional[str]).
yYesOutcome variable column name or outcome array.
depthNodepth parameter (Optional[int]).
treatNoTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
max_depthNomax_depth parameter (Optional[int]).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate the read-only safety profile, so the description need not restate that. However, the only extra behavioral claim, 'Validation: certified parity evidence', is too opaque to tell an agent what validation is being performed, what parity is being checked, or what outputs to expect. It adds little genuinely useful 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and avoids unnecessary verbosity, which is good. However, 'article-facing alias' and 'certified parity evidence' are cryptic and do not clearly earn their place; the brevity reads more like under-specification than well-structured 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?

For a complex tool with 13 parameters and a huge sibling list, this description is too incomplete. An agent cannot determine what the tool returns, how it should be invoked in a workflow, or how it relates to similar policy/doubly-robust tools. The output schema lessens the need to describe return values, but it does not make up for the missing action and usage context.

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 100%, and the schema provides detailed descriptions for all 13 parameters, so the baseline of 3 is appropriate. The tool description adds no parameter-level information beyond the schema, but the schema itself is sufficient for parameter semantics.

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 phrase 'Doubly-robust policy-tree' names the estimator and method, but no verb or action is stated: it does not say whether the tool fits, trains, evaluates, or validates a policy tree. The 'article-facing alias' and 'Validation: certified parity evidence' fragments add little operational meaning and do not clearly distinguish it from nearby siblings such as policy_targeting, policy_value, or doubly_robust.

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 gives no guidance on when to use this tool instead of the many policy-related siblings, no prerequisites, and no context about the intended workflow. Nothing is misleading, but there is also no practical usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

policy_valueA
Read-only

Evaluate the expected value of a treatment policy. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: The relationship between the treated unit and controls is stable absent the intervention (causal_impact); Matrix-completion: the untreated potential outcomes follow a low-rank factor structure with treatment as the missingness pattern; No concurrent intervention affects the controls. Pre-conditions: A treated unit with a pre-period and a set of control series, or a panel with a low-rank structure. Failure modes: Pre-period fit is poor or controls are themselves affected by the intervention -> Re-select controls, lengthen the pre-period, or use synthetic-control / DiD diagnostics. Alternatives: sp.synth, sp.sdid, sp.gsynth. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
policyYesBinary policy recommendations (0 or 1).
scoresYesDoubly robust scores (AIPW pseudo-outcomes for treatment). Positive scores indicate the individual benefits from treatment.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, so the description is not required to repeat safety. It adds rich behavioral context: assumptions (causal_impact, matrix-completion, no concurrent intervention), pre-conditions, failure modes, and a typical minimum N. This goes beyond the annotations and gives the agent a realistic sense of when results are trustworthy.

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 well-structured with clear sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and front-loads the core purpose. It is a bit lengthy but every sentence earns its place by adding decision-relevant context. The structure aids scanning, which is good for an agent.

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?

The tool is complex (8 params, output schema present) and the description covers assumptions, pre-conditions, failure modes, alternatives, and a typical sample size. Given that an output schema exists, the description does not need to explain return values. It is complete for an agent to decide when to call it and how to interpret the result.

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 100%, so all 8 parameters are already documented in the input schema. The description does not add parameter-level detail beyond what the schema provides; it mentions 'binary policy recommendations' and 'doubly robust scores' but these are also in the schema. Baseline 3 is appropriate given high schema coverage.

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 opens with a specific verb and resource: 'Evaluate the expected value of a treatment policy.' It clearly distinguishes this tool from siblings by naming explicit alternatives (sp.synth, sp.sdid, sp.gsynth) and providing pre-conditions and failure modes that define its scope. This is a strong, differentiating purpose statement.

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 names three alternatives and provides pre-conditions (e.g., treated unit with pre-period and control series, or low-rank panel) and failure modes (poor pre-period fit, controls affected) that imply when to use this tool. However, it does not explicitly state 'use this when X, use synth when Y' with conditions tied to each alternative, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postestimation_contractC
Read-only

Return the post-estimation actions supported by result.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesFitted StatsPAI result, estimator, or compatible object.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_diagnosticsNoInclude scalar diagnostics from ``model_info`` / ``diagnostics``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond the annotations; readOnlyHint and openWorldHint already signal a safe read operation. It does not mention side effects, caching, validation, or that the tool introspects a fitted result without running an estimator, so it contributes little beyond what structured fields already say.

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 a single front-loaded sentence with no filler, making it easy to scan. It is concise but very thin, so while structure is clean, it isn't an exemplary informative 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 an output schema and fully documented parameters, the main missing piece is usage context: what a 'contract' contains, when to call this vs postestimation_report/estat, and that it supports planning subsequent calls. The schema's detail parameter hints at suggested_functions, but the description itself leaves the agent to infer the tool's role.

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 100%, and the schema itself provides detailed meaning for every parameter (e.g., detail depth, as_handle caching, data loading options). The description adds no parameter-level semantics, so the baseline of 3 is appropriate.

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 identifies a specific verb ('Return') and resource ('post-estimation actions supported by *result*'), so an agent can tell what the tool does. It is clear but does not contrast itself with sibling tools such as postestimation_report or estat, so it does not earn the top score.

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 about when to call this tool versus alternatives. It neither names siblings like postestimation_report or estat nor gives conditions such as 'after fitting a model to discover available commands,' leaving the agent to infer usage from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postestimation_reportB
Read-only

Return the post-estimation actions supported by result.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesFitted StatsPAI result, estimator, or compatible object.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_diagnosticsNoInclude scalar diagnostics from ``model_info`` / ``diagnostics``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=false, so the no-side-effects aspect is covered. The description adds no further behavioral detail beyond the purpose, such as whether the tool actually executes the actions or only lists them, which would be marginally useful. Since annotations cover the main safety profile, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-formed sentence with no filler. It front-loads the verb and resource, and every word contributes to the core purpose. Perfectly concise and structured for quick comprehension.

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?

While the tool is relatively simple and the output schema exists, the description lacks any elaboration on what 'post-estimation actions' entails or how the result parameter should be supplied. The rich parameter schema and annotations compensate, but the description alone would leave an agent without context on when or how to apply this tool effectively.

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?

The schema provides 100% coverage for all 8 parameters, each with descriptive text, so the schema already explains parameter meaning and usage. The description adds nothing about parameters beyond the schema, so the baseline 3 is appropriate.

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 ('Return') and resource ('post-estimation actions supported by *result*'), making the primary purpose clear. It does not explicitly distinguish from siblings like postestimation_contract, but the resource is sufficiently specific to convey intent.

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 alternatives, nor any mention of prerequisites or contexts. The description only states what it returns, not under what circumstances an agent should invoke it, leaving the agent to infer usage from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ppi_meanC
Read-only

Prediction-powered estimate of a population mean.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesGold-standard (human) outcomes on the labeled sample.
tuneNoUse the PPI++ power-tuning weight ``lambda in [0, 1]``. ``False`` fixes ``lambda = 1`` (the original PPI estimator).
yhatYesModel predictions on the *same* labeled rows.
alphaNoCI level (1 - alpha confidence).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
yhat_unlabeledYesModel predictions on the unlabeled rows.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already covers the read-only nature, so the description needn't repeat safety info. However, the description adds no behavioral context: no mention of requiring labeled + unlabeled data, the role of the tuning parameter, or any assumptions. It contributes nothing beyond what the annotation and schema provide.

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 a single front-loaded phrase with no filler; each word contributes to the core purpose. It is minimal but not wasteful. Its brevity limits context, but that is penalized under other dimensions.

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 tool with 11 parameters, an output schema, and a vast sibling set, one line is insufficient context. The description omits the data requirements, the meaning of 'prediction-powered', and any distinction from ppi_ols. An agent would need to rely entirely on the schema and output schema to make a 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 100%, so all 11 parameters (y, yhat, yhat_unlabeled, tune, alpha, detail, as_handle, etc.) are already documented in the input schema. The description adds no parameter-level meaning, so the baseline 3 is appropriate.

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 clearly states the tool estimates a population mean using prediction-powered inference, a specific verb-resource pair. The method term 'prediction-powered' helps distinguish it from other estimation tools, though it doesn't name siblings explicitly. It is not a tautology and adds a method dimension.

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 is given on when to use this tool versus alternatives like ppi_ols or direct_method. There are no stated conditions, exclusions, or recommended contexts. With over 200 sibling tools, an agent must inspect schemas of multiple candidates to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ppi_olsB
Read-only

Prediction-powered OLS with a labeled audit sample.

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesCovariates for the labeled rows.
yYesGold-standard outcomes for the labeled rows.
tuneNoPer-coefficient PPI++ power tuning. ``False`` fixes ``lambda = 1``.
yhatYesModel-predicted outcomes for the same labeled rows.
alphaNoCI level (1 - alpha confidence).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
targetNoWhich coefficient is the headline ``estimate``. Defaults to the first non-intercept term.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
X_unlabeledYesCovariates for the unlabeled rows (same columns as ``X``).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
add_interceptNoPrepend a constant column to both design matrices.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
yhat_unlabeledYesModel-predicted outcomes for the unlabeled rows.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the contextual point that a labeled audit sample is used, which clarifies the method's data requirement, but it does not disclose further behavioral traits such as assumptions, output behavior, or chaining capabilities.

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 sentence with no wasted words. It front-loads the method name and the key data requirement, making the description as concise as possible.

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 schema is rich and fully documents parameters, and the output schema exists, so the description need not explain those. However, the tool is a complex statistical method among many siblings, and the one-sentence description does not provide enough context about when to choose it or how it fits into a workflow.

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 100%, so the schema carries the full burden of documenting all 15 parameters. The description itself adds no parameter-level meaning beyond what the schema already provides, so the baseline score of 3 applies.

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 clearly identifies the tool as prediction-powered OLS using a labeled audit sample. It conveys the core method and data requirement, though it lacks a verb and does not explicitly differentiate it from the closely related ppi_mean sibling.

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 is given on when to use ppi_ols versus alternatives such as ppi_mean, direct_method, or standard regression tools. The description states the method but provides no selection criteria or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ppmlhdfeA
Read-only

Pseudo-Poisson Maximum Likelihood with high-dimensional fixed effects. Validation: certified parity evidence. Do NOT use when: vce='conley' on more than ~20,000 rows -- dense O(n^2) memory (see cost); vce='conley' with high-dimensional fixed effects -- the conleyreg-matching construction is dummy-based and raises MethodIncompatibility past 1,000 dummy columns; use cluster= (CRV1) there. Cost: IRLS is linear in n. vce='conley' builds the FE-as-dummies design plus dense n x n great-circle distance and kernel matrices (glm_conley_vcov) -- ~0.8 GB at n=10,000 and ~80 GB at n=100,000 -- and it refuses designs with >= n or > 1,000 dummy columns. Use cluster= (CRV1) instead at that scale.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoIndependent variable names (alternative to formula).
yNoDependent variable name (alternative to formula).
sscNoSmall-sample factor applied to the heteroskedasticity-robust sandwich. ``"stata"`` multiplies by ``N/(N-1)``, the Stata ``glm``/``ppmlhdfe vce(robust)`` convention (matches ``ppmlhdfe`` at machine precision). ``"fixest"`` multiplies by ``(N-1)/(N-K)`` with ``K`` counting the slopes plus the absorbed fixed-effect levels (minus one per additional fixed-effect dimension for collinearity), the ``fixest::fepois`` default ``ssc(adj = TRUE, fixef.K = "full")``. ``"none"`` applies no factor. The three differ by less than ``sqrt(N/(N-K))`` and are documented, not competing, conventions; point estimates are unaffected. Clustered variances keep the ``G/(G-1)`` factor.stata
tolNoConvergence tolerance.
vceNoCanonical SE-menu keyword. ``"robust"``/``"hc1"``/``"hc0"`` alias the ``robust=`` parameter. ``"wild"`` (with ``cluster=``) runs the boottest-convention score wild cluster bootstrap on the FE-absorbed design -- exact at any FE dimensionality (the weighted-FWL reduction of the score numerator is exact) and byte-identical to ``sp.fepois(vce="wild")`` on low-dimensional FE. ``"CR2"``/``"CR3"``/``"jackknife"`` (with ``cluster=``) compute the clubSandwich glm bias-reduced SEs on the FE-as-dummies design (guarded against high-dimensional FE).
seedNoRNG seed for sampled (non-enumerated) wild draws.
alphaNoSignificance level for confidence intervals.
absorbNoFixed effects to absorb, e.g. ``"origin + destination + year"``. Overrides any FE specification in the formula.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoDefault is robust SE (as in Stata's ppmlhdfe). Options: "robust"/"hc1" (sandwich with the ``ssc`` small-sample factor), "hc0" (sandwich, no factor), "nonrobust".robust
clusterNoVariable name for clustered standard errors (recommended for gravity models, e.g. cluster on country-pair). A pair ``cluster=["a", "b"]`` requests two-way clustering (Cameron-Gelbach-Miller 2011 inclusion-exclusion with the single ``G_min/(G_min-1)`` small-sample factor -- byte-identical to Stata ``ppmlhdfe ..., cluster(a b)``).
formulaNoModel formula. Fixed effects can be specified via ``|``: ``"trade ~ dist + contig | origin + destination + year"``
maxiterNoMaximum IRLS iterations.
weightsNoWeight variable name.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
wild_repsNoReplications for ``vce="wild"`` (enumerates the 2^G grid when ``2**G <= wild_reps``).
conley_latNoconley_lat parameter (Optional[str]).
conley_lonNoconley_lon parameter (Optional[str]).
separationNoIf True, check for separation (perfect prediction of zeros) and warn. Observations causing separation are not dropped automatically.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
conley_cutoffNoconley_cutoff parameter (Optional[float]).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
wild_weight_typeNoWild weight distribution.rademacher

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses substantial behavioral traits: dense O(n^2) memory for vce='conley' with concrete GB estimates, refusal when designs exceed n or 1,000 dummy columns, MethodIncompatibility with high-dimensional FE, and linear IRLS cost in n. This is rich, concrete behavioral context that annotations do not provide.

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 purpose and then gives actionable exclusions and cost information in a compact form. However, 'Validation: certified parity evidence' is cryptic and not clearly actionable, and the 'use cluster= (CRV1)' recommendation appears twice, creating minor 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?

Given the tool's complexity and the very detailed input schema, the description adds the most safety-critical information: memory usage, scale limits, and incompatibility warnings. It does not explicitly compare with fepois/poisson for ordinary PPML use, but combined with the schema and output schema, an agent has enough context to invoke this tool correctly in most cases.

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 100%, so the baseline is 3. The description adds useful meaning for vce='conley' and cluster= by explaining their cost, refusal behavior, and the recommended CRV1 alternative. This helps an agent choose among parameter values beyond what the schema alone states.

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 estimator and resource β€” Pseudo-Poisson Maximum Likelihood with high-dimensional fixed effects β€” so an agent knows what model this tool fits. It also differentiates from plain poisson/glm siblings by emphasizing high-dimensional FE, but it does not state an explicit action verb such as 'fits' or 'estimates' and does not contrast with closely related tools like fepois.

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?

The description gives explicit 'Do NOT use when' conditions for vce='conley' on large data and with high-dimensional fixed effects, with concrete reasons and a prescribed alternative: use cluster= (CRV1). This is exactly the kind of conditional routing guidance an agent needs. It does not cover every possible sibling comparison, but the exclusions are specific and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

predict_cateA
Read-only

Predict CATE on new (out-of-sample) data. Assumptions: Unconfoundedness given the covariates; Overlap / positivity across the covariate space; Nuisance functions are estimated consistently; cross-fitting controls overfitting bias. Pre-conditions: Covariates, a treatment indicator, and an outcome for each unit; Enough data to fit flexible nuisance models with sample-splitting / cross-fitting. Failure modes: CATE estimates are unstable or extrapolate beyond the covariate support -> Restrict to the overlap region, increase data, or use a doubly-robust learner (DR-/R-learner). Alternatives: sp.dml, sp.causal_forest, sp.tmle. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from ``metalearner()`` containing a fitted estimator.
new_dataYesNew data with the same covariate columns used in estimation.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true, and the description adds meaningful behavioral context: statistical assumptions (unconfoundedness, overlap, consistent nuisance estimation), failure modes (instability, extrapolation beyond covariate support), and a minimum sample-size guideline. No contradiction with annotations.

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 compact, front-loaded with the core purpose, and organized into labeled blocks: assumptions, pre-conditions, failure modes, alternatives, and minimum N. Every sentence contributes useful information without fluff.

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 a rich input schema and an existing output schema, the description supplies the statistical and operational context needed to call the tool correctly: assumptions, data requirements, failure modes, alternative learners, and sample-size guidance. It is complete for an agent deciding when and how to invoke predict_cate.

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 100%, so the schema already documents all 8 parameters. The prose adds little parameter-level detail beyond mapping 'new (out-of-sample) data' to new_data; the baseline of 3 is appropriate.

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 states the exact operation: 'Predict CATE on new (out-of-sample) data.' This clearly separates it from sibling estimation, summarization, and plotting tools by emphasizing out-of-sample prediction on an already-fitted result.

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 provides explicit preconditions, failure modes with remedies, and an Alternatives list. It does not explicitly say 'call after metalearner()', but the schema's result parameter description supplies that dependency, and no misleading usage guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preflightA
Read-only

Run pre-fit identification checks for a chosen method on a DataFrame. Verdict in {PASS, WARN, FAIL}. ALWAYS call this before fitting on an unfamiliar dataset to surface design problems (overlap, cohort sizes, IV first-stage F, running-variable density at the cutoff).

ParametersJSON Schema
NameRequiredDescriptionDefault
yNoOutcome column.
idNoUnit id column.
timeNo
cohortNo
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodYesEstimator name: 'did', 'rd', 'iv', 'synth', 'matching', 'dml', ...
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentNo
covariatesNo
instrumentNo
running_varNo
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds useful context about the kinds of checks performed and the verdict format, which goes beyond the annotation. It does not describe side effects (none expected) or any state changes, but that is consistent with the read-only hint.

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 two sentences with no fluff. The first sentence states the purpose and verdict, the second gives the usage rule and examples. It is front-loaded and every word 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?

The tool has an output schema, so return values are defined. The description covers when to use it and what it checks. Given the tool's complexity (15 parameters, many methods), the description does not explain how the method parameter maps to specific checks, but that may be covered by the output schema. Overall, it is adequate for an agent to know when to call it.

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 60%, meaning 9 of 15 parameters have descriptions; the remaining six (time, cohort, treatment, instrument, running_var, etc.) lack descriptions. The tool description does not add any parameter-specific guidance or compensate for these gaps. It only mentions 'DataFrame' generically, so it adds no semantic value beyond the schema.

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 clearly states the tool runs pre-fit identification checks on a DataFrame and returns a verdict. It names the specific design problems it surfaces (overlap, cohort sizes, IV first-stage F, running-variable density), which distinguishes it from fitting tools. However, it does not explicitly differentiate from the sibling 'check_identification', so it loses a point for not addressing that alternative.

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 gives an explicit when-to-use rule: 'ALWAYS call this before fitting on an unfamiliar dataset'. It also explains the benefit (surfacing design problems). It does not mention when not to use or name alternative tools like check_identification, so it is strong on when but lacks exclusionary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pretrends_equivalenceA
Read-only

Pre-trend equivalence tests (Liu, Wang & Xu 2024, the fect diagnostic panel). Reverses the usual null: instead of testing whether pre-period effects are zero, tests whether they are demonstrably small. Failing to reject 'no pre-trend' is often just low power (Roth 2022), so the conventional test alone overstates the evidence for parallel trends. Reports the joint F test alongside its non-central-F and TOST equivalence counterparts, where a small p-value is the reassuring outcome. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Known limitations: the TOST is computed only when tost_threshold is supplied; there is no universal outcome-scale default, so it is not invented. Pre-conditions: result carries influence functions so the joint pre-period covariance can be recovered; at least two pre-treatment periods (one is absorbed as the normalisation reference); more treated units than pre-periods. Alternatives: sp.pretrends_test, sp.pretrends_power, sp.honest_did.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesDiD result carrying an event study and influence functions (e.g. sp.callaway_santanna)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
f_thresholdNoDimensionless effect-size bound for the F equivalence test (fect's default)
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
tost_thresholdNoEquivalence bound in outcome units. Omitted by default because there is no defensible universal scale for 'negligible pre-trend'; the TOST is skipped when it is not supplied. fect uses 0.36 * residual SD.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so no contradiction. The description adds valuable behavioral context: it reports joint F, non-central-F, and TOST tests, clarifies that a small p-value is the reassuring outcome, and discloses the known limitation that TOST requires tost_threshold with no invented default. Pre-conditions about influence functions and data requirements further enhance transparency beyond 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?

The description is longer than ideal but well-structured with labeled sections (Validation, Known limitations, Pre-conditions, Alternatives) and front-loaded with the core concept. Some content, like citations and validation tier, is tangential to invocation, but it remains organized and readable.

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 complex statistical tool with 10 parameters, the description covers purpose, conceptual rationale, limitations, pre-conditions, and alternatives. Combined with a 100%-covered schema and an output schema, an agent has enough context to select and invoke the tool correctly. No critical gaps remain.

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 100%, so the baseline is 3. The description's mention of tost_threshold largely repeats the schema's note about no universal default, and it does not add new meaning for the other parameters. It provides conceptual framing but no additional parameter-level detail beyond the 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 description states a specific verb and resource ('Pre-trend equivalence tests') and clearly distinguishes itself from the conventional pretrends test by explaining it reverses the null and tests for demonstrably small pre-period effects. It names sibling tools as alternatives, making differentiation explicit. The core function is unmistakable.

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 explains when equivalence testing is appropriate (when the conventional test alone overstates evidence due to low power) and lists pre-conditions that must hold for the tool to work. It names alternatives (sp.pretrends_test, sp.pretrends_power, sp.honest_did) but does not map each alternative to a specific scenario, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pretrends_powerA
Read-only

Power of the pre-trend test against a hypothesised violation. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
testNoWhich pre-test the power refers to. ``"individual"`` is the practice Roth (2022) analyses and the one his ``pretrends`` R package implements: the analyst eyeballs the event-study plot and calls the pre-trends into question if *any* pre-period coefficient is individually significant. Power is then one minus the probability that every pre-period coefficient falls inside its own ``+/- z_{1-alpha/2} * SE`` band, integrated over the joint normal with mean ``delta`` -- a multivariate-normal rectangle probability. ``"joint"`` is the power of the joint Wald test that all pre-period coefficients are zero, ``chi2(K)`` with non-centrality ``delta' Sigma^-1 delta``. Reported by :func:`pretrends_test`, and a strictly different quantity -- not a tighter or looser version of the same one. The two are not even comparable at face value: the joint test has size exactly ``alpha``, while the coefficient-by-coefficient test rejects with probability above ``alpha`` under the null because each of the K coefficients gets its own ``alpha``-level look. Which comes out more powerful against a given trend depends on the design. ``power_joint`` is always reported alongside, so both are available from one call. .. versionchanged:: 1.21.0 The default moved from ``"joint"`` to ``"individual"`` so the number matches Roth's ``pretrends`` package. This changes the returned ``power`` for existing calls -- see MIGRATION.md. Pass ``test="joint"`` to recover the previous behaviour.individual
alphaNoSignificance level of the pre-trend test.
deltaNoHypothesised trend violation in the pre-period (length = number of pre-periods). Default: linear trend ``delta[k] = (k+1) * min(|SE|)`` -- a violation equal to one SE at the furthest lag, declining linearly to near-zero.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesEvent-study result with pre-treatment estimates and SEs.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses significant behavioral context beyond the readOnlyHint: it explains the statistical properties of the two tests, including that the individual test's rejection probability exceeds alpha under the null and that the joint test has exact size alpha. It also mentions the version change that alters the default behavior and the returned 'power' value, which is a non-obvious behavioral change. The description does not explicitly state that it is read-only, but the annotation readOnlyHint=true is sufficient, and the description adds the nuance about the change in 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?

The description is detailed but very long, and the key pieces (what it does, how to choose 'test') are embedded in a dense paragraph. The first sentence is clear, but the rest is extensive and could be front-loaded better. It spends many words on statistical definition and version history that, while useful, could be trimmed or relegated to a note. It is not concise for an agent to quickly parse.

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?

Given the complexity of the tool (10 params, many with defaults, statistical background), the description covers the necessary context: the two test types, the default behavior change, the optional detail levels, and the availability of both power values. The presence of an output schema and sibling tools (pretrends_test) helps, but the description does not explicitly list the required inputs for a basic call (e.g., it assumes 'result' is self-evident). It is reasonably complete for an expert but could be more explicit about what is needed for a first call.

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?

Although the schema provides descriptions for each parameter (100% coverage), the tool description enriches the qualitative semantics by explaining the statistical meaning of 'test' (the difference between individual and joint tests, including non-centrality) and the default for 'delta' (a linear trend based on one SE at the furthest lag). This goes beyond the schema's summary, giving the agent a statistical grounding to choose appropriate 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?

The description defines the tool as computing the power of a pre-trend test against a hypothesized violation, with specific references to Roth (2022) and its distinction between 'individual' and 'joint' tests. It clearly differentiates from the large sibling set, particularly from pretrends_equivalence, pretrends_slope_for_power, pretrends_summary, and pretrends_test, by focusing on the power calculation and referencing the exact package that implements it.

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?

The description explicitly explains when to use this tool (for power analysis against a hypothesized violation) and contrasts it with pretrends_test (the joint Wald test), stating they are 'a strictly different quantity -- not a tighter or looser version of the same one'. It also provides context on the two pre-test strategies, which is essential for the agent to choose the correct 'test' parameter. It does not name an alternative for power computation, but it clearly states the use case and the relationship to related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pretrends_slope_for_powerC
Read-only

Slope of a linear pre-trend the pre-test would detect target_power Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
testNoWhich pre-test to solve against; see :func:`pretrends_power`.individual
alphaNoSignificance level of the pre-test.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesEvent-study result with pre-treatment estimates and SEs. As with :func:`pretrends_power`, supply the full pre-period covariance via ``model_info['vcv_pre']`` -- the diagonal fallback overstates the detectable slope.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
target_powerNoPower the returned slope achieves. 0.5 is the ``pretrends``
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true and openWorldHint=false, annotations already cover the safety profile, but the description adds no operational behavior such as computation mode, cache behavior, or data requirements. The 'Validation: certified parity evidence' note is not a behavioral disclosure and may be read as an unrelated validation tag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, but the first sentence is only a fragment and the second sentence, 'Validation: certified parity evidence,' is not a usable instruction. This is under-specification rather than disciplined concision.

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 specialized ten-parameter pretrends function with many sibling tools, the description is not complete enough: it names the output concept but omits when to use it, what inputs are required, and how it relates to pretrends_power. The rich schema and safe annotations mitigate this, but the description itself still leaves selection and invocation to inference.

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 100%, so the baseline is 3; the description does not need to re-document the ten parameters. It only reinforces the role of target_power within its sentence, adding little beyond what the schema already states.

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 phrase 'Slope of a linear pre-trend the pre-test would detect ``target_power``' identifies the output as a detectable slope for a target power, but it is a noun phrase rather than an explicit 'computes/returns' action. The appended 'Validation: certified parity evidence' fragment obscures rather than clarifies the purpose, so an agent must infer the tool's behavior from its 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 guidance is given for when to call this tool versus sibling pre-trend functions such as pretrends_power, pretrends_test, or pretrends_equivalence. There is also no mention of the required event-study result or full covariance precondition; that is left entirely to the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pretrends_summaryC
Read-only

Print a combined pre-trends diagnostic report.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level.
deltaNoPassed to ``pretrends_power``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesEvent-study result.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation covers the safety profile, but the description adds little beyond 'Print' and 'combined'. It does not clarify what the report includes, what 'combined' means, or how the output is delivered.

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 a single front-loaded sentence with no filler. It is concise, though slightly under-specified given the tool's 9 parameters and the large sibling family.

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 and parameter descriptions cover structured details, but the description lacks usage context entirely. With many pretrends_* siblings, an agent cannot tell when this summary tool is the right choice.

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?

All 9 parameters are already documented in the input schema with descriptions, so the description adds no additional parameter meaning. Baseline 3 applies because the schema carries the full burden.

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 action ('Print') and a specific resource ('combined pre-trends diagnostic report'). It is reasonably distinct from siblings like pretrends_test and pretrends_power, though it does not explicitly contrast itself with 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?

No guidance on when to use pretrends_summary versus pretrends_test, pretrends_power, pretrends_equivalence, or other diagnostic tools. The description also omits prerequisites, such as whether a fitted result is required before calling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pretrends_testA
Read-only

Joint Wald test of pre-treatment ATTs (or event-study leads) against zero -- the canonical sanity check for the parallel-trends assumption in DiD designs. Failing to reject is necessary but not sufficient evidence for parallel trends; always pair with sp.honest_did / sp.sensitivity_rr for design-robust inference. Assumptions: The test asks whether the pre-period ATTs jointly differ from zero; Failing to reject is consistent with parallel trends but does NOT prove it (low power problem -- Roth 2022). Pre-conditions: result has at least one pre-treatment period coefficient and its variance; covariance between pre-period coefficients is available (cluster-robust SE recommended). Failure modes: Single pre-period (no pretrends to test) -> Pretrends test needs >= 2 pre-treatment periods; widen the panel or drop the test; High-power study rejects but visual pretrends look flat -> Use sp.honest_did + sp.sensitivity_rr to bound the bias; reporting both is standard practice. Alternatives: sp.sensitivity_rr, sp.honest_did, sp.event_study. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoTest statisticwald
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesDiD or event-study result with pre-period coefficients
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the test's statistical behavior and limitations (low power problem, Roth 2022), assumptions (joint test vs zero), and that 'failing to reject is consistent with parallel trends but does NOT prove it.' It also adds practical details like typical minimum N and recommended cluster-robust SE. These go well beyond the readOnlyHint annotation, which only indicates the operation is safe to run.

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 longer than average but tightly packed with essential information, organized into clear sections (purpose, assumptions, pre-conditions, failure modes, alternatives). Every sentence earns its place; no fluff. It could arguably be trimmed slightly, but the density and structure justify the length for a statistically nuanced tool.

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 tool's complexity mis - a joint pretrends test in DiD - the description covers purpose, usage conditions, assumptions, limitations, failure modes, alternatives, and even practical recommendations (pairing with sp.honest_did, typical minimum N). An output schema exists, so return values need not be described. Nothing an agent needs to correctly invoke this tool 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 coverage is 100%, so the baseline is 3. The description adds meaning to the 'result' parameter by specifying pre-conditions: it must contain at least one pre-treatment period coefficient and the covariance between pre-period coefficients. It also recommends cluster-robust SE, directly relevant to the result object. This contextualizes parameters beyond their schema definitions.

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: 'Joint Wald test of pre-treatment ATTs (or event-study leads) against zero' and names it 'the canonical sanity check for the parallel-trends assumption in DiD designs.' It clearly distinguishes itself from related tools by naming alternatives like sp.honest_did, sp.sensitivity_rr, and sp.event_study.

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?

The description provides explicit when-to-use and when-not-to-use guidance: it specifies pre-conditions (at least one pre-treatment period coefficient, covariance available), failure modes (single pre-period, low power), and directly names alternatives with conditions for switching ('High-power study rejects but visual pretrends look flat -> Use sp.honest_did + sp.sensitivity_rr'). It also advises pairing with other tools as standard practice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

principal_stratA
Read-only

Principal Stratification (Frangakis & Rubin 2002). 'monotonicity' method identifies the complier PCE (= LATE) and reports Zhang-Rubin sharp bounds on the always-survivor SACE. 'principal_score' uses Ding-Lu covariate weighting to point-identify stratum-specific effects under principal ignorability. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Known limitations: Always-survivor SACE under encouragement design (Mealli & Pacini 2013, partial identification) is not yet implemented; only AIR / Wald LATE point estimates (tau_Y on outcome, tau_S on the post-treatment stratum) are reported when an instrument is supplied. Assumptions: Monotonicity (no defiers) for method='monotonicity'; Principal ignorability for method='principal_score' (strata perp Y(d) | X); SUTVA and exclusion restriction for the never-takers / always-takers interpretation. Pre-conditions: binary treatment; binary post-treatment stratum variable (compliance, survival, employment, ...); covariates required when method='principal_score' (for Ding-Lu weighting). Failure modes: Zhang-Rubin bounds include 0 and both signs -> Strata partition too weak for point ident...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome
seedNoRandom seed for reproducible bootstrap draws
alphaNoCI level (e.g. 0.05 for 95% CIs)
treatYesBinary treatment
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoIdentification strategymonotonicity
n_bootNoBootstrap replications
strataYesBinary post-treatment variable
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoBaseline covariates (required for principal_score)
instrumentNoBinary instrument column. When supplied, switches to the AIR / Wald LATE estimator: under random Z, monotonicity, and exclusion, reports two LATEs among Z-compliers -- tau_Y for the effect of the treatment on the outcome, and tau_S for the effect on the post-treatment stratum variable. method= is ignored on this path.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint=true, so the description carries the behavioral disclosure burden. It goes well beyond the annotation by documenting known limitations, failure modes, assumption requirements, and the fact that the instrument path ignores method and reports only tau_Y and tau_S. No contradiction with annotations is present.

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 long but well-structured and front-loaded with purpose, followed by labeled sections for validation, limitations, assumptions, preconditions, and failure modes. Most sentences earn their place; the 'Validated evidence tier' phrase is somewhat cryptic and the failure-mode sentence appears truncated, so it is not perfectly concise.

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 complex causal-inference tool, the description is remarkably complete: it covers identification strategies, assumptions, preconditions, limitations, and failure behavior, while the schema handles parameter details. It falls short of a 5 because the failure-mode sentence is cut off and it never explains the 'validated evidence tier' concept or how it should affect an agent's invocation.

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 100%, so the baseline is 3. The description adds meaningful method-level semantics for method, covariates, and instrument beyond the schema's short labels, such as what each identification strategy actually computes. It does not elaborate on all 15 parameters, but the schema already documents those adequately.

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 clearly states the tool's purpose: principal stratification estimation, with two named strategies and specific outputs (complier PCE/LATE, Zhang-Rubin bounds on always-survivor SACE, Ding-Lu stratum-specific effects). It does not explicitly differentiate from adjacent sibling tools like survivor_average_causal_effect or selection_bounds, so it stops short of the top score.

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 gives concrete guidance on when to use each method: monotonicity versus principal_score, the need for covariates under principal_score, the AIR/Wald LATE path when an instrument is supplied, and relevant assumptions and preconditions. It does not name sibling tools or exclusion conditions for preferring another estimator, so it lacks the explicit 'when-not-to-use-this' routing of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probitC
Read-only

Probit regression via maximum likelihood. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoRegressor names (alternative to formula).
yNoDependent variable name (alternative to formula).
tolNoConvergence tolerance on log-likelihood change.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNo``'nonrobust'`` for MLE SE, ``'hc1'`` / ``'robust'`` for sandwich SE.nonrobust
clusterNoColumn name for clustered standard errors.
formulaNoFormula like ``"y ~ x1 + x2"``.
maxiterNoMaximum Newton-Raphson iterations.
weightsNoColumn name for frequency/analytic weights.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
at_valuesNoVariable values for ``marginal_effects='at'``.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
marginal_effectsNo``'average'`` (AME), ``'mean'`` (MEM), or ``'at'`` (MER).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the description does not contradict them. It adds 'Validation: certified parity evidence,' but without explaining what parity evidence means or what the tool does beyond fitting. For a read-only tool, this is minimal added context; the cryptic phrase does not clarify expected behavior or outputs.

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 description is two sentences and front-loaded with the main purpose. However, the second sentence is cryptic and likely unhelpful to an agent. It is concise but under-specified, which is not the same as good structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 17 parameters, an output schema, and a large sibling set, the description is far too sparse. It does not explain the tool's role in the workflow, data preparation, validation behavior, or when to prefer it over related tools. The schema compensates for parameter semantics but not for overall context.

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 100%, meaning all 17 parameters are already described in the schema. The description adds no parameter-level meaning beyond the schema, so it stays at the baseline 3.

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 'Probit regression via maximum likelihood', giving a specific verb and statistical resource. The name itself distinguishes it from oprobit/logit, but the description does not explicitly contrast with sibling tools like logit or oprobit, so it earns a 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/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 probit versus logit, oprobit, or other alternatives. The only extra sentence, 'Validation: certified parity evidence,' offers no selection criteria, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propensity_scoreA
Read-only

Estimate propensity scores P(D=1|X). Assumptions: Unconfoundedness: treatment is as-good-as-random given the measured covariates; Overlap / common support: every unit has a non-degenerate probability of each treatment; The covariate set blocks all back-door paths. Pre-conditions: Pre-treatment covariates measured for treated and control units; A binary (or low-cardinality) treatment indicator; Sufficient covariate overlap between treatment arms. Failure modes: Poor overlap -- extreme propensity scores or few acceptable matches -> Trim or restrict to the common-support region and report the discarded units; Covariate imbalance remains after matching/weighting -> Re-specify the balancing model (CBPS, entropy balancing) and re-check standardized mean differences. Alternatives: sp.propensity_score, sp.cbps, sp.ebalance, sp.dml. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimation method. ``'logit'`` uses IRLS (no sklearn needed). ``'probit'`` uses scipy.optimize. ``'gbm'`` tries sklearn GradientBoostingClassifier, falling back to logit with interactions.logit
trimmingNoIf ``'crump'``, apply Crump et al. (2009) trimming after estimation. Trimmed observations receive ``NaN`` scores.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesName of binary treatment column (0/1).
covariatesYesCovariate column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses the core statistical assumptions (unconfoundedness, overlap, back-door blocking) and gives actionable failure-mode guidance such as trimming to common support and re-specifying the balancing model. This is substantial context for correct use and does not contradict 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?

The description is longer than average, but the labeled sectionsβ€”Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum Nβ€”make it scannable and each section carries decision-relevant information. The 'Typical minimum N' is advisory rather than a hard requirement, so it is slightly less crisp than a fully maximal definition.

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 high-complexity causal-inference estimator, the description covers validity conditions, failure modes, and alternative tools, while the output schema handles return-value details. An agent has enough information to decide whether to call this tool and how to interpret poor results.

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?

The input schema already has 100% description coverage and documents all 10 parameters, including enums, defaults, and field roles. The description's P(D=1|X) notation clarifies the conceptual role of treatment and covariates but adds little beyond the schema. Baseline 3 is appropriate.

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 precise mathematical statement of the estimand, P(D=1|X), and clearly identifies the tool as a propensity-score estimator. It adds assumptions, preconditions, and alternatives that distinguish it from many related siblings. There is no vagueness or tautology.

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 pre-conditions for valid use and names concrete alternatives such as sp.cbps, sp.ebalance, and sp.dml. However, it does not explicitly state selection criteria among those alternatives, leaving the agent to infer when this tool should be preferred rather than another.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

proximalA
Read-only

Proximal Causal Inference via linear 2SLS on the outcome bridge. Identifies ATE with unmeasured confounding using two proxy variables: a treatment-side Z (instrument for W) and an outcome-side W (endogenous bridge regressor). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Existence of an outcome bridge function h(w, a, x) that recovers E[Y(a) | U, X]; Z and W are conditionally independent given U and (A, X); Z perp Y | U, A, X (exclusion on Z). Pre-conditions: at least one treatment-side proxy Z (independent of outcome given U, X); at least one outcome-side proxy W (independent of treatment given U, X); proxy_z and proxy_w measure the same unmeasured confounder U from different angles. Failure modes: First-stage (Z -> W) too weak -> Try richer Z or more proxies; without first-stage strength the bridge is underidentified; Proxies collapse to nearly-constant -> Proxy variation insufficient -- redesign measurement or fall back to sensitivity (sp.sensemakr); Estimate highly sensitive to bridge specification -> Report multiple bridge families; compare with sp.negative_control_outcome / _exposure. Alternatives: sp.neg...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome
treatYesTreatment
bridgeNoBridge function familylinear
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoBootstrap SE replications
proxy_wYesOutcome-side proxies (endogenous)
proxy_zYesTreatment-side proxies (instruments for W)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoBaseline covariates
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already in annotations, the description still adds meaningful behavioral context: the validated-evidence-tier caveat, a full assumption list, and failure modes including underidentification from a weak first stage (Z->W) and near-constant proxies. No contradiction with the read-only annotation β€” the tool is a non-mutating estimation routine. The only omission is output-shape behavior, which the output schema covers.

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 front-loaded core (method, estimand, proxy roles) is good, but the description is long and dense, with formal assumption notation (h(w,a,x), E[Y(a)|U,X], Z perp Y) that exceeds what an agent needs for selection. It also ends mid-sentence at 'Alternatives: sp.neg...', which signals truncation and hurts structure. Valuable content, but not economical.

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 complex 13-parameter method with an output schema and annotations, the description covers validation tier, assumptions, pre-conditions, and failure modes β€” enough to call the tool correctly in most cases. Gaps are minor: the alternatives section is cut off, and there is no guidance on interacting parameters like covariates, detail levels, or data_sample_n, though the schema handles those individually.

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 100%, so every one of the 13 parameters is already documented in the input schema; the baseline is therefore 3. The description adds modest conceptual value by explaining the proxy role pairing ('measure the same unmeasured confounder U from different angles') and noting the bridge family is currently restricted to linear, but most parameter meaning is carried by the schema itself.

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 opens with a specific verb+resource+mechanism: 'Proximal Causal Inference via linear 2SLS on the outcome bridge' and states the estimand (ATE under unmeasured confounding) with clearly defined proxy roles. It names negative_control_outcome/_exposure as alternatives to compare against, which separates it from those siblings, but it never distinguishes itself from the near-named sibling proximal_regression, so differentiation is incomplete.

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 explicit pre-conditions (one treatment-side Z, one outcome-side W, both measuring the same unmeasured confounder U from different angles), which effectively define when the tool is appropriate. Failure modes give concrete escalation paths ('fall back to sensitivity (sp.sensemakr)', 'compare with sp.negative_control_outcome / _exposure'), though the final 'Alternatives:' sentence is truncated and there is no explicit 'do not use when' statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

proximal_regressionA
Read-only

Doubly-robust regression-based PCI estimator for the ATE. Assumptions: A treatment-inducing confounding proxy Z and an outcome-inducing confounding proxy W are observed; Outcome and treatment confounding bridge functions exist (proximal-g and proximal-h completeness conditions); Latent confounding is fully captured by (Z, W, X) -- no residual unmeasured confounding outside the proxy span. Pre-conditions: data has outcome, binary treatment, z_proxy and w_proxy columns; treatment is binary for the bridge logistic step. Failure modes: Treatment-bridge logistic regression fails to converge; propensity collapses to the marginal P(D=1) -> Check detail['propensity_fallback']; the DR correction is neutralised -- improve proxies or covariates. Alternatives: sp.proximal, sp.double_negative_control, sp.frontdoor. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column.
alphaNoSignificance level for confidence intervals and tests.
treatYesBinary treatment column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
w_proxyYesOutcome-inducing confounding proxy W.
z_proxyYesTreatment-inducing confounding proxy Z.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoMeasured covariates X.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
propensity_boundsNopropensity_bounds parameter (tuple).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint=true annotation, the description discloses concrete failure modes: treatment-bridge logistic regression may fail to converge, propensity may collapse to the marginal P(D=1), and the DR correction is neutralized, with an instruction to check detail['propensity_fallback'] and improve proxies or covariates. It also notes a typical minimum N of 200.

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 core purpose, then organized into assumptions, pre-conditions, failure modes, alternatives, and sample size guidance. Each sentence carries useful, non-redundant information for a complex estimator.

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 complex causal-inference tool in a large sibling list, the description covers what the estimator does, its identifying assumptions, required inputs, failure modes, fallback diagnostics, alternatives, and minimum sample size. An output schema exists, so return-value details are not needed in the description.

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 100%, so the input schema already documents all 13 parameters, including z_proxy and w_proxy. The description adds little parameter-specific meaning beyond restating that treatment must be binary; it mostly reinforces what the schema already says.

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 first sentence states a specific purpose: a doubly-robust regression-based PCI estimator for the ATE. It is clearly distinguished from siblings by its assumptions (Z and W proxies, bridge functions) and by naming alternatives like sp.proximal, sp.double_negative_control, and sp.frontdoor.

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 gives explicit pre-conditions (outcome, binary treatment, z_proxy/w_proxy columns, binary treatment for logistic bridge) and assumptions, which tells the agent when this tool is appropriate. It also names alternatives, though it does not fully explain when to prefer each alternative over this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ps_balanceB
Read-only

Compute comprehensive propensity score balance table.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoPS estimation method ('logit', 'probit', 'gbm').logit
weightsNoIPW or matching weights. If None, inverse-PS weights are computed automatically from estimated propensity scores.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary treatment column.
covariatesYesCovariate columns to assess balance for.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, indicating a safe read operation. The description adds the qualifier 'comprehensive' but provides no further behavioral context (e.g., return format, metrics included). It does not contradict 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded and free of any redundant wording. Every word carries meaning, achieving high conciseness.

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?

Given the presence of a complete input schema (10 params, all described), an output schema, and read-only annotations, the short description is adequate. It could mention that it assesses balance for a binary treatment, but this is implied by the tool name and context.

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?

The schema provides 100% description coverage for all 10 parameters, including defaults and enums. The description itself adds no parameter-specific information, so the baseline of 3 is appropriate.

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 uses a specific verb ('Compute') and resource ('propensity score balance table'), clearly stating what the tool does. It does not explicitly differentiate from sibling tools like balance_diagnostics or love_plot, but the combination of name and description is sufficiently specific.

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 provides no guidance on when to use this tool versus alternatives such as balance_diagnostics, love_plot, or psm. There is no mention of context, prerequisites, or exclusions, leaving an agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

psmA
Read-only

Propensity-score matching -- article alias for :func:match Validation: certified parity evidence. Assumptions: Unconfoundedness: treatment is as-good-as-random given the measured covariates; Overlap / common support: every unit has a non-degenerate probability of each treatment; The covariate set blocks all back-door paths. Pre-conditions: Pre-treatment covariates measured for treated and control units; A binary (or low-cardinality) treatment indicator; Sufficient covariate overlap between treatment arms. Failure modes: Poor overlap -- extreme propensity scores or few acceptable matches -> Trim or restrict to the common-support region and report the discarded units; Covariate imbalance remains after matching/weighting -> Re-specify the balancing model (CBPS, entropy balancing) and re-check standardized mean differences. Alternatives: sp.propensity_score, sp.cbps, sp.ebalance, sp.dml. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesFeature matrix or covariate DataFrame.
dYesd parameter (str).
yYesOutcome variable column name or outcome array.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimator or algorithm variant to use.nn
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses statistical assumptions, data preconditions, failure modes, and concrete corrective actions (trim to common support, re-specify with CBPS/entropy balancing). It also reveals that the tool is an alias for match, which is directly useful behavioral information.

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 structured and front-loaded, with each labeled section earning its place. It loses a point for the vague 'Validation: certified parity evidence' line and the internal ':func:`match`' syntax, which are not directly actionable for an agent selecting or invoking the tool.

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?

The description covers selection context, validity assumptions, data prerequisites, failure modes, and alternatives; an output schema exists, so repeating return-value details is unnecessary. For a matching estimator with a rich generic parameter schema, this is a complete and decision-ready description.

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 100% schema coverage, the baseline is 3, but the description adds real meaning to parameters: it clarifies that d is a binary or low-cardinality treatment indicator and X represents pre-treatment covariates. The schema's d description is otherwise a tautology, so this textual addition is valuable.

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, 'Propensity-score matching -- article alias for :func:`match`', identifies the operation, resource, and relationship to the canonical function in one phrase. It also names alternatives, which helps an agent distinguish psm from siblings such as propensity_score, cbps, ebalance, and dml.

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 gives clear context through Assumptions, Pre-conditions, and a dedicated Alternatives list, and it even suggests typical minimum N=200. It does not provide explicit if-then routing like 'use X when Y, otherwise use Z', but the preconditions and alternatives strongly signal when psm is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

psmatch2A
Read-only

Stata psmatch2-faithful supported propensity-score matching paths (nearest-neighbour, kernel, radius, local linear regression, Mahalanobis): returns matched-sample variables (_pscore _treated _support _weight _y; plus _n1 through _nn _pdif for nearest-neighbour), the psmatch2 analytic ATT standard error, plus post-matching balance (.pstest() reproduces Stata pstest exactly), common-support plotting, and weighted PSM-DID. Validation: certified parity evidence. Assumptions: Unconfoundedness / CIA: Y(d) perp D | X; Overlap / common support on the propensity score; SUTVA: no interference between matched units. Pre-conditions: binary treatment 0/1; covariates are pre-treatment (temporally prior to D); enough control units for each treated unit under k:1 matching. Failure modes: Residual imbalance after matching (max |SMD| > 0.1) -> Tighten caliper, add covariate interactions (ps_poly), or switch to sp.ebalance; Treated units off common support -> Pass common_support='minmax' (Stata common) or sp.trimming. Alternatives: sp.match, sp.psm, sp.ebalance, sp.cbps. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
aiNoAbadie-Imbens (2006) robust SE with J within-arm matches (Stata ai(J))
seNoStandard-error estimator. 'bootstrap' re-estimates the propensity score each replication and is the only valid choice for method='llr' (Stata reports seatt = . there).psmatch2
treatYesBinary treatment column (0/1)
bwidthNoKernel bandwidth (method='kernel')
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel type (method='kernel' or 'llr'). NOTE: Stata's psmatch2 does not run LLR with kerneltype(epan) -- it substitutes lpoly-smoothed nearest-neighbour matching. Use 'tricube' to reproduce psmatch2's own LLR routine.epan
methodNoMatching algorithmneighbor
caliperNoMax PS distance / radius bandwidth
outcomeNoOutcome variable (Stata outcome(); optional)
neighborNoNumber of nearest neighbours k
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
bootstrap_repsNoBootstrap replications when se='bootstrap'
bootstrap_seedNoSeed for the bootstrap resampler (pass for reproducibility)
common_supportNoCommon-support trimmingnone
llr_stata_compatNomethod='llr' only: reproduce Stata psmatch2's SUBSTITUTE for LLR (lpoly-smoothed outcome + nearest-neighbour matching) instead of genuine local linear regression. Set only to reconcile a published psmatch2 number.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint and openWorldHint, so the description carries the behavioral disclosure burden. It reveals generated variables (_pscore, _treated, _support, _weight, _y, and NN-specific ones), the analytic ATT SE, exact pstest reproduction, common-support plotting, weighted PSM-DID, validation parity, and failure modes. There is no contradiction with the read-only annotation.

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 dense but front-loaded with core purpose and return contract before assumptions, preconditions, failure modes, and alternatives. Every section earns its place, and the semicolon-driven formatting keeps a 20-parameter tool's overview compact and scannable.

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 high-complexity tool with 20 parameters, the description covers all essential context: methods, outputs, statistical assumptions, preconditions, failure-mode remedies, alternatives, and minimum sample size. An output schema exists, so return-value details are already handled elsewhere; nothing critical for selecting or invoking the tool 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 coverage is 100%, giving a baseline of 3. The description adds meaningful parameter-level guidance beyond the schema, such as passing common_support='minmax' to handle off-support treated units and tightening the caliper to address residual imbalance. It does not enumerate every parameter, so it stays below a 5.

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 resource and action: psmatch2-faithful propensity-score matching with five named methods, returning matched-sample variables, ATT standard errors, balance diagnostics, plotting, and PSM-DID. It distinguishes itself from sibling propensity-score/matching/balance tools by naming psmatch2 fidelity and the specific outputs it reproduces.

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 pre-conditions: binary 0/1 treatment, pre-treatment covariates, and enough control units for k:1 matching. It also names alternatives (sp.match, sp.psm, sp.ebalance, sp.cbps) and routes agents to caliper/common-support adjustments or ebalance/trimming when failure modes appear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

psplotA
Read-only

Propensity score distribution plot (common support diagnostic).

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
trimNoIf set, draw vertical lines at (trim, 1-trim) to show the recommended trimming region.
titleNotitle parameter (Optional[str]).
treatYesBinary treatment column.
colorsNoColors for (control, treated).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
labelsNoLabels for (control, treated).
n_binsNoNumber of histogram bins.
figsizeNofigsize parameter (tuple).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariates used to estimate the propensity score.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the read-only nature is covered. The description adds no additional behavioral context, such as that it estimates propensity scores from covariates and treatment, or that it returns a plot object. With annotations present, the bar is lower, but the description could have added useful context like the underlying estimation method.

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 a single, front-loaded sentence that states the core purpose without any fluff. It is appropriately sized and earns its place by conveying the primary intent clearly.

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?

Given the tool has an output schema and annotations cover safety, the description is minimally adequate. However, it does not explain the diagnostic's significance or how it relates to other propensity score tools, and it omits any mention of typical use cases (e.g., checking overlap before matching). For a tool with 15 parameters and many siblings, more context would help an agent decide when to invoke it.

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 100%, so all parameters are documented in the schema. The description does not add any additional meaning to parameters. Per the baseline, when schema coverage is high, a score of 3 is appropriate; the description provides no extra value beyond the 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 description clearly states the tool's function: 'Propensity score distribution plot (common support diagnostic).' It specifies the verb (plot), the resource (propensity score distribution), and the diagnostic purpose (common support). This distinguishes it from sibling plot tools like overlap_plot or love_plot by naming the specific diagnostic intent.

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 does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or alternative tools. The purpose 'common support diagnostic' implies usage for checking overlap, but no explicit guidance is provided. An agent would need to infer its applicability from the sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pub_readyC
Read-only

Publication readiness checklist.

ParametersJSON Schema
NameRequiredDescriptionDefault
venueNoTarget venue: 'top5_econ', 'aej_applied', 'rct'.top5_econ
designNoResearch design: 'rct', 'did', 'rd', 'iv', 'observational'.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
has_mhtNoAlready have MHT correction.
resultsNoList of estimated result objects.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
has_balanceNoAlready have balance table.
has_placeboNoAlready have placebo tests.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
has_pretrendsNoAlready have pre-trend tests.
has_robustnessNoAlready have robustness checks.
has_sensitivityNoAlready have sensitivity analysis.
has_heterogeneityNoAlready have subgroup analysis.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, so the description adds no behavioral context beyond what structured data provides. It does not contradict the annotations, but it also does not disclose what dimensions are checked or how the checklist behaves.

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 description is a single short phrase with no wasted words. However, it is under-specified relative to the tool's 16 parameters and complex sibling context, so it earns a middle score rather than higher.

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 tool with 16 optional parameters and many sibling reporting/audit tools, the description does not convey when to use it, what it evaluates, or how it relates to alternatives like audit, preflight, or robustness_report. The output schema exists, but the decision context is largely missing.

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 100%, with all 16 parameters documented in the input schema itself. The description adds no parameter-level meaning, so the baseline of 3 is appropriate.

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 identifies a clear resource ('publication readiness') and function (checklist), so an agent can infer this tool assesses whether an analysis is ready for publication. It does not explicitly differentiate from sibling audit/preflight/robustness_report tools, which prevents 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 use this tool versus the many sibling checking/reporting tools. The name implies an end-of-analysis check, but the description leaves timing and selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pwcompareC
Read-only

Pairwise comparisons of predictive margins across all levels. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for (adjusted) confidence intervals.
adjustNoP-value adjustment method: - ``'none'``: unadjusted. - ``'bonferroni'``: Bonferroni correction. - ``'sidak'``: Sidak correction. - ``'holm'``: Holm step-down procedure.none
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesFitted model result.
variableYesCategorical variable whose levels are compared pairwise.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, covering the safety profile. The phrase 'across all levels' adds a useful scoping constraint that all levels are compared, not a custom subset. The validation note is more of a provenance tag than an operational behavior, but nothing contradicts 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence is concise and front-loaded, which is good. However, the second sentence about validation evidence tier does not help an agent select or invoke the tool correctly, so not every sentence earns its place.

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 10 parameters and a very large sibling-tool set, the two-line description offers little workflow context, such as how the fitted result should be produced or how detail/as_handle interact in a multi-step pipeline. The rich schema and output schema prevent this from being a complete failure, but the description alone is still not adequate for confident tool selection.

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?

The input schema fully documents all 10 parameters, so the schema carries most of the semantic burden. The description adds only the 'across all levels' nuance, which reinforces but does not significantly extend the variable parameter's existing pairwise-comparison 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 first sentence identifies the operation precisely: pairwise comparisons of predictive margins across all levels. This is specific enough to be distinguished from generic margins or contrast tools at a glance, though it does not explicitly name any sibling or state what kind of fitted result it requires.

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 is provided about when to use pwcompare rather than alternatives such as contrast, lincom, or margins. The validation sentence adds provenance information but no decision context, so the intended usage must be inferred from the tool name and one-line purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qdidA
Read-only

Quantile Difference-in-Differences (QDiD): applies the DiD contrast to quantiles, [Q11(t)-Q10(t)] - [Q01(t)-Q00(t)], on a 2x2 design with bootstrap SE. This is NOT changes-in-changes -- Athey & Imbens (2006) propose CiC and explicitly criticise QDiD; use sp.cic for CiC. Validation: certified parity evidence. Assumptions: CIC rank invariance: the quantile rank in the untreated distribution is stable across groups; Continuous outcome support covering both groups in both periods; SUTVA (no cross-group spillovers). Pre-conditions: panel or repeated cross-section; group is binary 0/1; time is binary 0/1 (pre / post). Failure modes: Outcome heavily discrete / zero-inflated -> CIC rank-matching is unstable on discrete supports -- use QTE regression (sp.qte) or Firpo-RIF; Bootstrap CI across quantiles varies wildly -> Thin tails at extreme quantiles -- restrict to [0.2, 0.8] or raise n_boot to 2000. Alternatives: sp.qte, sp.did, sp.rifreg. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome
timeYesBinary pre / post indicator
alphaNoSignificance level for confidence intervals and tests.
groupYesBinary treated / control group
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoQuantiles to estimate, defaults to [0.1, ..., 0.9]
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description doesn't need to restate read-only. It goes well beyond by disclosing assumptions (CIC rank invariance, continuous support, SUTVA), pre-conditions, and failure modes. It also names the validation ('certified parity evidence') and gives typical minimum N. This is rich behavioral context beyond the structured annotations.

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 long but every sentence earns its place. It front-loads the core definition and formula, then moves to critical differentiators (CiC), assumptions, pre-conditions, failure modes, and alternatives. No filler or repetition; it's structured as a decision aid. The length is justified by the method's complexity and the need to avoid misuse.

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?

The description covers purpose, usage context, assumptions, pre-conditions, failure modes, alternatives, and sample-size guidance. It even mentions validation. Given that an output schema exists (context signals show it), the return format doesn't need to be described. The description is complete for an agent to call this tool 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 coverage is 100%, so all 12 parameters are already documented. The description adds extra semantics by linking n_boot to a failure-mode remedy (raise to 2000) and quantiles to a restriction suggestion ([0.2, 0.8] for thin tails). It also explains the 'detail' parameter's purpose in agent planning. These additions go beyond the schema, so a 4 is appropriate.

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 opens with a precise definition: 'Quantile Difference-in-Differences (QDiD): applies the DiD contrast to quantiles, [Q11(t)-Q10(t)] - [Q01(t)-Q00(t)]'. It names the method, gives the exact formula, and immediately distinguishes it from changes-in-changes, explicitly naming the sibling sp.cic. This is a specific verb-resource combination that an agent can unambiguously select.

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?

Usage guidance is explicit: it states the design (2x2), the pre-conditions (panel or repeated cross-section, binary group and time), and exactly when NOT to use it ('NOT changes-in-changes'). It provides specific alternatives (sp.qte, sp.did, sp.rifreg) and failure modes with concrete remedies, e.g., raising n_boot to 2000. An agent knows exactly when to call this tool vs. alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qqsynthA
Read-only

Quantile Synthetic Control (alias for DiSCo with method='quantile'). Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed.
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable column.
placeboNoRun placebo permutation inference.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
n_quantilesNoNumber of quantile grid points.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period (inclusive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already covering safety, the description adds rich behavioral context: SUTVA and no-anticipation assumptions, the convex-combination identification mechanism, failure modes, and practical rules about pre-period length and donor counts. It also tells users how to interpret and report non-extreme placebo results.

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 dense but efficiently organized into assumptions, pre-conditions, failure modes, alternatives, and minimum N. The opening sentence front-loads the tool's identity, and each section adds distinct decision-relevant value without repeating schema content.

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 high-complexity estimator with an output schema already present, the description covers validity conditions, common failure modes, corrective actions, alternative tools, and sample-size guidance. No critical information needed to decide whether to call qqsynth and interpret its results is missing.

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 100%, so every parameter already has its own description and defaults. The prose reinforces method-level constraints such as needing more pre-periods than donors, but it does not add specific detail for parameters like n_quantiles, seed, or detail, so the baseline of 3 is appropriate.

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 first sentence identifies qqsynth as the quantile variant of DiSCo, making the estimator and its scope evident. This clearly distinguishes it from siblings like synth, discos, and sdid by naming the exact method and alias.

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?

The description states concrete pre-conditions for when the tool is appropriate: panel structure, pre-treatment window length, and complete outcomes. Failure modes explicitly route to alternatives, such as using sdid or augsynth when pre-treatment RMSPE is large, and warn when placebo inference indicates the effect may be noise.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qregA
Read-only

Quantile regression at specified quantile(s). Validation: certified parity evidence. Assumptions: Conditional quantile is linear in covariates; Outcome continuous (or finely discretized) so the check-function minimization is well-posed; Powell (1991) sandwich SEs require a consistent kernel density of the conditional density at zero. Pre-conditions: Continuous outcome variable; Quantile tau strictly in (0,1). Failure modes: Sparse data in tail quantiles gives unstable density estimate and wide SEs -> Estimate a more central quantile or pool more data near the tail; Crossing/degenerate fit when regressors are collinear -> Drop or combine collinear regressors before refitting. Alternatives: sp.regress, sp.feols. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoRegressor columns (alternative to formula)
yNoOutcome column (alternative to formula)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
formulaNo'y ~ x1 + x2' (alternative to y/x)
quantileNoQuantile (0-1)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint annotations, the description discloses Powell sandwich standard errors, unstable tail-quantile density estimates, collinearity-induced degenerate fits, and remediation steps. This gives the agent meaningful expectations about computation and failure behavior without contradicting 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?

The definition is front-loaded with a one-line statement of purpose and organized into clearly labeled sections, each carrying useful information. It loses a point for the cryptic 'Validation: certified parity evidence' line and dense jargon such as 'Powell sandwich SEs,' which an agent may find opaque.

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?

Combined with 100% schema coverage and an output schema, the description is highly complete: it covers assumptions, preconditions, failure modes, alternatives, and minimum sample size. It is not perfect because the plural 'quantile(s)' is not reconciled with a schema that only accepts a single scalar quantile, and the alternative commands are named without guidance on when to switch.

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 input schema already documents all 10 parameters, so the baseline is 3. The description adds valuable semantic constraints not in the schema: the quantile must be strictly in (0,1), the outcome must be continuous, and a minimum sample size around 200 is expected. It does not belabor x/y/formula syntax because the schema already covers it.

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 definition opens with a clear action and model type β€” 'Quantile regression at specified quantile(s)' β€” and is reinforced by preconditions and failure modes. However, it does not meaningfully distinguish qreg from close siblings like sqreg or ivqreg; naming sp.regress and sp.feols as alternatives is not enough to tell an agent which tool to pick.

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 provides explicit assumptions, preconditions, and failure-mode remedies, so an agent can infer when qreg is appropriate: continuous outcome, tau strictly in (0,1), linear conditional quantile, and a typical minimum N of 200. It names alternatives but never says when to use them instead, so there are no explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qteA
Read-only

Quantile treatment effects. 'firpo_qte' / 'firpo_qtt' give Firpo (2007) efficient UNCONDITIONAL QTE / QTT by propensity reweighting (analytic influence-function SE); 'conditional_qr' gives the CONDITIONAL QTE (coefficient on D in a quantile regression, Koenker & Bassett 1978); 'distribution' gives the QTT via an IPW counterfactual distribution. Validation: certified parity evidence. Assumptions: For 'firpo_qte' / 'firpo_qtt' / 'distribution': unconfoundedness + overlap; For 'conditional_qr': unconfoundedness conditional on controls; note this is a CONDITIONAL estimand with no causal reading absent rank invariance; Correct parametric quantile model (sensitivity tested via multiple quantiles). Pre-conditions: binary treatment (all methods); continuous outcome; controls cover the confounding set. Failure modes: Large IPW weights (method='ipw') -> Extreme propensities -- trim (sp.trimming) or switch to doubly-robust DR-QTE; Quantile crossing -> Use rearrangement (Chernozhukov-Fernandez-Val-Galichon) or monotone constraints. Alternatives: sp.qdid, sp.rifreg, sp.cic, sp.metalearner. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimand / estimatorfirpo_qte
n_bootNoNumber of bootstrap replications.
controlsNoControl-variable column names.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoquantiles parameter (list).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesTreatment indicator, treatment variable, or treatment array.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses estimand assumptions, failure modes (large IPW weights, quantile crossing), and validation ('certified parity evidence'). The mention of 'method='ipw'' conflicts with the schema enum, but since it does not contradict the annotations, annotation_contradiction remains false.

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 dense but front-loaded with the core 'Quantile treatment effects' concept, then covers methods, assumptions, pre-conditions, failure modes, alternatives, and sample size. Almost every sentence carries information, though the 'Validation: certified parity evidence' clause is vague and the lack of structured formatting makes parsing harder.

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?

Since an output schema exists, the description need not explain return values. It thoroughly covers assumptions, prerequisites, failure modes, alternative tools, and a minimum-N guideline. The main gaps are the ambiguous validation statement and the inconsistent ipw reference, which slightly reduce completeness for a complex 13-parameter 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 description coverage is 100%, so the baseline is 3. The description adds meaningful semantics for the method parameter by explaining each of the four estimands, but it also references 'method='ipw'' and 'sp.trimming' which are not in the schema enum, muddying parameter mapping. The quantiles parameter is left with only a tautological schema 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 clearly identifies the tool as estimating quantile treatment effects and distinguishes the four internal methods ('firpo_qte', 'firpo_qtt', 'conditional_qr', 'distribution') by their estimands and assumptions. It lists alternative tools (sp.qdid, sp.rifreg, sp.cic, sp.metalearner) but does not explicitly differentiate them, preventing a top score.

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 provides pre-conditions (binary treatment, continuous outcome, controls covering confounders) and per-method assumptions, which implicitly tell an agent when the tool is appropriate. However, the Alternatives line names sibling tools without criteria for choosing them instead of qte, so routing decisions are left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qte_hd_panelA
Read-only

Panel quantile treatment effects with high-dimensional controls. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Selection-on-observables (unconfoundedness + overlap) or, for IV variants, instrument validity; For IV-QTE: rank invariance / rank similarity (monotonicity of the structural quantile function). Pre-conditions: Covariates, treatment, and outcome; for IV-quantile methods, a valid instrument; Enough data to estimate the outcome distribution across quantiles. Failure modes: Estimated conditional quantiles cross (non-monotone), or tail quantiles are unstable -> Use rearrangement / monotonization and avoid extreme quantiles where data are sparse. Alternatives: sp.qte, sp.iv, sp.dml. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
seNo``'bootstrap'`` resamples **units**, preserving within-unit dependence. There is no analytic option: Canay's two-step variance depends on the first step, and a naive quantile-regression SE would understate it.bootstrap
seedNoRandom seed for reproducible stochastic steps.
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoSee the module docstring. ``'canay'`` assumes the individual effect is a pure location shift and needs a reasonably long panel.canay
n_bootNoNumber of bootstrap replications.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoDefaults to ``(0.1, 0.25, 0.5, 0.75, 0.9)``.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCandidate control set; narrowed by double-selection LASSO.
lasso_alphaNoPenalty on standardised covariates. ``None`` uses the Belloni-Chernozhukov-Hansen plug-in penalty.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already covering safety, the description adds substantial behavioral disclosure: failure modes (quantile crossing, tail instability), assumptions (rank invariance, unconfoundedness), and a typical minimum N. This goes well beyond the annotations and helps an agent anticipate and adapt to estimation issues.

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 organized into labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N), making it scannable for an agent. It is long but each section earns its place; the only opaque phrase is 'validated evidence tier', which slightly hurts clarity.

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 full parameter coverage, an output schema, and safety annotations, the description supplies the critical context an agent needs: assumptions, preconditions, failure modes, alternatives, and a minimum N. No essential information for correct invocation is missing.

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 100% and every parameter already has a description. The tool description adds only contextual notes (e.g., double-selection LASSO for covariates) but no new per-parameter semantics, so the baseline of 3 is appropriate.

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+resource ('Panel quantile treatment effects') and further narrows with 'high-dimensional controls'. It also names alternatives (sp.qte, sp.iv, sp.dml), giving an agent a clear way to distinguish this tool from similar QTE estimators.

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?

Pre-conditions and assumptions (e.g., selection-on-observables, instrument validity, enough data) signal when the tool is applicable, and an Alternatives section points to related tools. However, it does not explicitly explain when to choose this over each named alternative, so guidance is clear but not fully prescriptive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quasi_untreated_testB
Read-only

Test that quasi-untreateded groups exist (dCDH et al., Section 3.3). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
doseYesDoses at the horizon being tested. Non-positive values are
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the safety profile is covered. The description adds the validation-tier concept and the existence-check purpose, but does not disclose details like what happens on failure, how the test is computed, or any constraints beyond the read-only nature. It adds modest context but not rich behavioral insight.

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 description is two sentences and front-loaded, but the second sentence about validation tier is cryptic and the first contains a typo ('untreateded'). It is concise but not perfectly clear; every sentence carries some weight but the typo and vague validation phrase reduce effectiveness.

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?

Given the output schema exists and annotations cover read-only behavior, the description is minimally sufficient but lacks detail about the test's methodology, expected output semantics, or when it applies. For a tool with 7 parameters and a specific niche purpose, more context would help an agent decide to call it, but it is not grossly incomplete.

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 100%, with each parameter having a description in the input schema. The tool description does not add any additional meaning to parameters. The dose description is truncated ('Non-positive values are'), but that is a schema issue, not something the description compensates for. Baseline 3 is appropriate since the schema already documents all parameters.

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 ('Test that quasi-untreateded groups exist') and references a source (dCDH et al., Section 3.3), making the core purpose clear. However, it does not differentiate from the many sibling test tools (e.g., reset_test, ri_test, functional_form_test) beyond the unique subject, and the misspelling 'untreateded' slightly undermines clarity.

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 provides no guidance on when to use this tool versus alternatives. It mentions a validation tier but does not explain selection criteria, prerequisites, or scenarios where this test is appropriate. There is no explicit when-not-to-use or reference to sibling tests.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rateA
Read-only

Rank-Average Treatment Effect (Yadlowsky et al. 2023). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness given the covariates; Overlap / positivity; Honesty: separate subsamples are used to choose splits and to estimate effects. Pre-conditions: Covariates, treatment, and outcome with enough data to grow an honest forest. Failure modes: Calibration test rejects -- the forest's heterogeneity is not well calibrated -> Increase the sample / number of trees, or fall back to a doubly-robust learner. Alternatives: sp.dml, sp.auto_cate, sp.tmle. Typical minimum N: 1000.

ParametersJSON Schema
NameRequiredDescriptionDefault
TNoIf omitted, falls back to the forest's stored training arrays.
XNoIf omitted, falls back to the forest's stored training arrays.
YNoIf omitted, falls back to the forest's stored training arrays.
seedNoIgnored; kept for API backwards compatibility.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
forestYesforest parameter ('CausalForest').
q_gridNoNumber of quantile grid points used to report the TOC curve. Does not affect the point estimate or SE (those are computed from ranks exactly).
targetNotarget parameter (str).AUTOC
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses the validation evidence tier, exact assumptions (unconfoundedness, overlap, honesty), failure modes with corrective actions, and a typical minimum sample size. This is rich behavioral context that a read-only hint alone does not provide, and it does not contradict 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: method name and citation, validation tier, assumptions, pre-conditions, failure modes with remedies, alternatives, and typical N. It is front-loaded with the core identification and structured in logical blocks, 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?

The description covers what the tool does, its assumptions, pre-conditions, failure handling, alternatives, and sample size guidance. Given the presence of an output schema (noted in context signals), the description need not explain return values. It is complete for an agent to decide when to use the tool and what to expect.

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 100%, so all parameters are already well-documented in the schema. The description adds some context around the 'forest' parameter via assumptions and failure modes, but does not add syntax-level detail beyond the schema. This meets the baseline for high coverage.

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 clearly states the tool computes the Rank-Average Treatment Effect (RATE) with a citation, identifying the specific method and resource. It also names alternative tools (sp.dml, sp.auto_cate, sp.tmle), distinguishing it from siblings without needing to inspect their 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?

The description provides pre-conditions (enough data for an honest forest), failure modes (calibration test rejects, with remedies), and an explicit list of alternatives. However, it does not explicitly state when to choose this tool over the named alternatives (e.g., conditions favoring RATE vs DML), so the guidance is clear but lacks specific exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd2dA
Read-only

2D boundary regression discontinuity estimation. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoManual bandwidth. If None, MSE-optimal bandwidth is selected.
pNoPolynomial order for point estimation (1 = local linear).
yYesOutcome variable name.
x1YesFirst running variable (score dimension 1).
x2YesSecond running variable (score dimension 2).
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function: 'triangular', 'uniform', or 'epanechnikov'.triangular
n_evalNoNumber of evaluation points when ``eval_points`` is None. Use 1 for a single pooled effect.
approachNo``'distance'``: project onto signed distance to boundary, then apply univariate local polynomial RD. ``'location'``: fit bivariate local polynomial on each side of the boundary at evaluation points.distance
boundaryNoFunction ``f(x1) -> x2`` defining the boundary curve. If None, the boundary is the vertical line ``x1 = 0``.
bwselectNoBandwidth selection method (used when ``h`` is None).mserd
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary treatment indicator (1 = treated, 0 = control).
eval_pointsNoShape ``(k, 2)`` array of boundary evaluation points. If None, points are automatically selected along the boundary.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, and the description does not contradict these. It adds valuable behavioral context: assumptions about continuity and no sorting, failure modes like density jumps and bandwidth sensitivity, and recommended diagnostic actions. This goes beyond the annotations by detailing the estimation's validity conditions.

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 well-organized with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and front-loads the core purpose. While it is verbose, each section contributes meaningful information for an agent to assess applicability and potential pitfalls.

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?

Given the tool's complexity (2D RD, 19 parameters) and the presence of an output schema, the description is quite complete. It covers validity assumptions, preconditions, failure modes, alternatives, and sample size guidance. It does not describe return values because the output schema covers that, but it leaves little for an agent to infer about the method's scope.

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 100%, so the baseline is 3. The description adds marginal context, such as 'data-driven MSE-optimal bandwidth' related to bwselect, but does not systematically explain each parameter beyond the schema. It does not need to, given the schema's completeness.

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 opens with '2D boundary regression discontinuity estimation', a specific verb+resource+dimension that precisely identifies the tool's function. It also differentiates from standard RD by noting '2D boundary' and lists alternatives like sp.rdrobust, making the distinction explicit.

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 provides pre-conditions ('continuous running/forcing variable with a known cutoff') and assumptions, as well as failure modes with corrective actions (e.g., 'if manipulation is present... Run a McCrary / density test'). It names alternatives but does not explicitly state when to choose them over rd2d, so it stops short of a fully decisive routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd2d_bwB
Read-only

Bandwidth selection for 2D boundary RD.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoPolynomial order.
yYesOutcome variable name.
x1YesRunning variable names.
x2YesRunning variable names.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function.triangular
approachNo'distance' or 'location'.distance
boundaryNoBoundary function f(x1) -> x2. None implies x1 = 0.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary treatment indicator.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a safe, non-mutating computation, so the description does not need to restate that. However, it adds no behavioral context beyond the core idea of selecting a bandwidth, and it does not disclose anything about the selection criterion, cache behavior, or potential heavy computation. This is acceptable but minimally transparent.

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 entire description is a single seven-word, front-loaded phrase with no filler or redundancy. Every word adds information about what the tool does and in what setting.

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?

Between the rich parameter descriptions and the presence of an output schema, an agent can understand the mechanics of calling this tool. What is missing is the surrounding context: whether this is a preparatory step for rd2d or boundary_rd, what selection procedure it implements, and how it relates to sibling bandwidth tools. The description is adequate but not complete for the complexity it fronts.

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 100%, so the schema already documents all 14 parameters, including the meaning of boundary, detail, and as_handle. The tool description contributes no additional parameter-level meaning, which is fine because it is not needed; the baseline score of 3 applies.

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 phrase 'bandwidth selection for 2D boundary RD' states a specific operation and a precise domain, and it is distinct enough from plotting/estimation siblings like rd2d_plot or boundary_rd to orient an agent. It does not reach 5 because it never names or contrasts the nearest siblings (e.g., rd2d, rdbwselect, rdbwhte), so 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to invoke this tool versus the many RD alternatives in the sibling list, and no mention of prerequisite steps or pipeline position. The schema's detail parameter hints at sub-step chaining, but the description itself offers no when-to-use or when-not-to-use information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd2d_plotD
Read-only

2D boundary RD visualization.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable name.
axNoPre-existing axes to draw on.
x1YesRunning variable names.
x2YesRunning variable names.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultNoResult from ``rd2d()``, used for bandwidth and effect info.
figsizeNoFigure size.
boundaryNoBoundary function f(x1) -> x2. None implies x1 = 0.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
plot_typeNo``'scatter'``: 2D scatter of (x1, x2) colored by treatment status, with boundary curve and optional bandwidth region. ``'heatmap'``: outcome values displayed as a heatmap with boundary overlay. ``'boundary_effects'``: treatment effect estimates along the boundary (requires ``result`` with multiple eval points).scatter
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary treatment indicator.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so the description does not contradict them. However, the description adds nothing beyond what the annotations already convey. It does not disclose return format, side effects, or any behavioral nuances beyond being a read-only visualization. With annotations present, the bar is lower, but the description still fails to add contextual value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, which is concise, but it is under-specified rather than appropriately sized. A single phrase without a verb or context does not earn its place; it fails to convey the tool's purpose or any actionable information. It is not front-loaded with useful contentβ€”it contains no useful content beyond a vague label.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool with 15 parameters, 5 required, and multiple plot types defined in the schema. The description gives no overview, no guidance on which plot_type to choose, no mention of required data columns, and no context on how the tool fits into an RD analysis workflow. It is grossly inadequate for an agent to correctly select and invoke this 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 description coverage is 100%, meaning every parameter has a description in the input schema. The tool description itself provides no parameter information. Per the rubric, baseline 3 applies when schema covers parameters fully; the description does not need to repeat them, so a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description '2D boundary RD visualization' is a noun phrase rather than a clear action statement. It identifies a topic (2D boundary RD) but does not specify what the tool does with itβ€”whether it plots a scatter, heatmap, or boundary effects. It barely distinguishes itself from sibling plotting tools like rdplot or rd2d_bw, which also relate to regression discontinuity visualization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/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 instead of alternatives. It does not mention prerequisites, typical use cases, or exclusions. An agent has no indication of how this differs from rdplot, rd2d, or other plotting tools in the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdbalanceB
Read-only

Covariate balance test at the RD cutoff.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoCutoff.
hNoManual bandwidth. If None, uses MSE-optimal per covariate.
pNop parameter (int).
xYesRunning variable name.
covsNoCovariate names to test. If None, tests all numeric columns except x.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral disclosure beyond what the annotations already provide: readOnlyHint=true and openWorldHint=false. It does not describe method details, output behavior, or caveats, and it does not contradict the annotations, but it also contributes no independent behavioral transparency.

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 a single, front-loaded sentence with no filler or redundant wording. Every word contributes to identifying the tool's core purpose.

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 and detailed parameter descriptions cover much of the operational surface, and the annotations safely mark it read-only. However, the free-text description alone is thin for selecting among the many closely related RD tools in the sibling list, and it never explains how this test relates to rdwinselect, rddensity, or rdsummary.

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 100%, so the input schema already documents all 13 parameters. The description adds only the phrase 'covariate balance,' which hints at the covs parameter, but it does not add operational meaning beyond the schema.

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: it performs a covariate balance test at the RD cutoff. This distinguishes it from estimation, density, and plotting RD siblings such as rdrobust, rddensity, and rdplot. However, it does not explicitly contrast itself with close relatives like rdwinselect, so it stops just short of full differentiation.

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 'covariate balance test at the RD cutoff' implies the diagnostic context in which the tool should be used. Yet the description gives no explicit when-to-use guidance, no exclusions, and no mention of alternatives for related RD tasks such as bandwidth selection or density testing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_bayes_hteA
Read-only

Bayesian RDD allowing CATE to depend on covariates. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
cutoffNocutoff parameter (float).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
n_drawsNoNumber of draws.
runningYesrunning parameter (str).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoBandwidth used for local smoothing or kernel weighting.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given readOnlyHint=true, the description adds substantial context beyond annotations: it discloses assumptions (continuity, no manipulation, monotonicity), pre-conditions (continuous running variable, known cutoff, sufficient observations), failure modes (density jumps, bandwidth sensitivity), and recommended diagnostics. This goes well beyond the bare read-only hint.

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 lengthy but well-structured with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). It is front-loaded with the core purpose and every sentence carries information. Slightly verbose but justified by complexity.

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?

The description covers assumptions, preconditions, failure modes, alternatives, and sample-size guidance. With an output schema present, it need not explain return values. For a complex Bayesian RDD tool, this is near-complete; only explicit 'when to use vs alternatives' is missing.

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 100%, so the schema fully documents all 15 parameters. The description only mentions 'covariates' implicitly ('CATE to depend on covariates'), adding minimal extra meaning beyond the schema. Baseline 3 is appropriate.

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 clearly states the tool performs Bayesian regression discontinuity design (RDD) allowing CATE to depend on covariates. It distinguishes from the many sibling RDD tools by naming alternatives (sp.rdrobust, sp.rdrandinf, sp.rdbwselect) and specifying the unique CATE-dependency feature.

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 provides assumptions, pre-conditions, failure modes, and explicitly lists alternative tools. However, it does not explicitly state 'use this when X, otherwise use Y'β€”the conditions for choosing this tool over alternatives are implicit rather than direct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_bias_aware_fuzzyA
Read-only

Bias-aware confidence interval for fuzzy RD via Anderson-Rubin test inversion (Noack-Rothe 2024 Econometrica). Robust to weak first stages and avoids the power asymmetry of conventional 2SLS-style fuzzy RD CIs (Kaliski-Keane-Neal 2025). Assumptions: Continuity of potential outcomes in x at c (Hahn, Todd, van der Klaauw 2001); No manipulation of x at c (McCrary density test); Local randomization only in a neighborhood of c -- extrapolation away from c is not identified. Pre-conditions: running variable x is continuous with support on both sides of c; treatment assignment is determined by the cutoff c (sharp) or probabilistically at c (fuzzy); sufficient mass of observations within the optimal bandwidth. Failure modes: McCrary density test p < 0.05 -> Use donut-hole RD (donut=) or partial-identification bounds; Covariate imbalance at cutoff (sp.rdbalance rejects) -> Include covariates as controls, narrow bandwidth, or report as caveat; Effect unstable across bandwidth halvings -> Report sp.rdbwsensitivity and sp.rd_honest (Armstrong-Kolesar honest CI). Alternatives: sp.rdrobust, sp.rd_honest, sp.rdrbounds, sp.bounds. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoc parameter (float).
hNoBandwidth used for local smoothing or kernel weighting.
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
M_dNoBound on |g_D''|; auto if None
M_yNoBound on |g_Y''|; auto if None
alphaNoSignificance level for confidence intervals and tests.
fuzzyYesTreatment indicator column
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already covering non-mutation, the description adds meaningful methodological behavior: it is based on Anderson-Rubin test inversion, is designed for weak first stages, and only identifies local effects near the cutoff. It also warns about extrapolation away from the cutoff not being identified. No contradiction with the read-only 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?

The core purpose is front-loaded and the rest is organized into assumptions, preconditions, and failure modes, all relevant to correct use. It is longer than strictly necessary (citations, typical minimum N, detailed failure-mode remedies), but that length is mostly earned for a nuanced econometric tool.

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 complexity, the 100%-covered schema, and the presence of an output schema, the description is complete: it covers what the estimator does, when it is valid, what conditions are needed, what to do when they fail, and which alternatives exist. It leaves no critical gap for an agent deciding whether and how to call this 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 100%, so the baseline is 3. The description adds value beyond the schema by clarifying that c is the cutoff, x must be continuous with support on both sides of c, and fuzzy means probabilistic treatment assignment at c. This helps map data columns to the RD design.

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 first sentence names a specific action and object: computing a bias-aware confidence interval for fuzzy RD via Anderson-Rubin test inversion. It also distinguishes the method from conventional 2SLS-style fuzzy RD CIs and lists named alternatives, so an agent can tell it apart from the many RD siblings.

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 gives clear applicability (robust to weak first stages, avoids power asymmetry), states assumptions/preconditions, and provides failure-mode-specific redirections to alternatives. It is not a perfect 5 because the alternatives are referenced with an 'sp.' prefix (e.g., sp.rdrobust, sp.bounds) that does not match the actual sibling tool names, making the routing slightly less directly actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_boostB
Read-only

Gradient Boosting for RD -- flexible CATE estimation.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff.
hNoBandwidth (auto-selected if None).
xYesRunning variable.
yYesOutcome variable.
covsNoCovariate names for heterogeneity.
seedNoRandom seed.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
max_depthNoMaximum tree depth per round.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
n_estimatorsNoNumber of boosting rounds.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
learning_rateNoShrinkage factor.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the safety profile is covered. The description adds that it estimates CATE (flexible heterogeneity) rather than just an average effect, which is useful behavioral context. It does not mention bandwidth selection or any other quirks, but with annotations covering the main concern, this is acceptable.

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 a single, efficient sentence that front-loads the core purpose. It avoids redundancy and doesn't waste words. While it could add a bit more context, it is appropriately concise for a tool with a rich schema.

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?

Given the tool's complexity (16 params), the schema and output schema cover most details. The description is minimal, and while it names the method and CATE, it doesn't provide selection guidance among the many RD siblings. This is a noticeable gap, but not critical given the schema richness.

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 100%, so all 16 parameters have descriptions. The tool description adds nothing about parameters, so the schema carries the full burden. Baseline 3 is appropriate because the description doesn't compensate for any gaps, but there are no gaps.

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 clearly states it performs gradient boosting for RD (regression discontinuity) and estimates CATE (conditional average treatment effects). This distinguishes it from parametric RD estimators like rdrobust. However, it doesn't explicitly spell out 'regression discontinuity,' relying on the name and context, so it's clear but not maximally 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?

No guidance is provided on when to use this tool versus alternatives like rd_forest, rd_flex, or rdrobust. The description only states what it does, leaving the agent to infer selection criteria from the name and parameter list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdbwhteB
Read-only

MSE-optimal bandwidth selection for the fully interacted RD model.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff value.
pNoPolynomial order.
xYesRunning variable name.
yYesOutcome variable name.
zYesCovariate(s) for treatment effect heterogeneity.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function.triangular
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, covering the safety profile. The description adds the optimization criterion ('MSE-optimal'), which is mild useful context, but does not disclose return structure, whether a model is fitted, or computational cost. No contradiction with annotations; it simply adds little beyond them.

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 description is a single nine-word sentence with zero fluff and the core object ('fully interacted RD model') front-loaded. However, it is terse to the point of under-specification: for a tool with 12 parameters and multiple bandwidth-selection siblings, the description omits the guidance the agent most needs, so brevity comes at the cost of usefulness.

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 rich schema (100% coverage, the `detail` enum with token estimates, output schema) and readOnly annotation carry much of the explanatory burden, so the description need not cover parameters or return values. The critical gap is situational: nothing tells the agent how this differs from rdbwselect/rdwinselect or in what analysis pipeline it belongs, which matters given the large sibling set.

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 100%, with all 12 parameters documented, so the schema carries the semantic burden and the baseline of 3 applies. The description does not add beyond the schema β€” though the phrase 'fully interacted' implicitly maps to the z parameter ('Covariate(s) for treatment effect heterogeneity'), the description never draws this connection.

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 operation (MSE-optimal bandwidth selection) and a specific resource (the fully interacted RD model). It partially distinguishes the tool from siblings like rdbwselect and rdwinselect by naming the 'fully interacted' model as the target, but leaves the term 'fully interacted' unexplained, which a less specialized agent may find cryptic.

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 is given on when to use this tool versus rdbwselect, rdwinselect, rdbwsensitivity, or rd2d_bw, all of which are siblings in the bandwidth-selection space. The description implies usage via the word 'fully interacted' and the z parameter ('Covariate(s) for treatment effect heterogeneity'), but never explicitly states the selection condition or names an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdbwselectB
Read-only

Bandwidth selection for local polynomial RD estimation. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff value.
pNoPolynomial order for point estimation (1 = local linear).
qNoPolynomial order for bias correction. Default is p + 1.
xYesRunning variable column name.
yYesOutcome variable column name.
allNoIf True, compute and return all ten bandwidth types.
covsNoCovariate column names. When provided, the variance estimates used in bandwidth selection account for covariate adjustment, typically yielding narrower bandwidths.
derivNoDerivative order. 0 = standard RD (jump in level), 1 = regression kink design (change in slope).
fuzzyNoTreatment variable name for fuzzy RD. The MSE being minimised is then the one for the Wald ratio rather than for the reduced form, so every stage of the cascade changes. .. versionchanged:: 1.27.0 This argument was parsed and then discarded: it was never passed to the bandwidth cascade, so ``fuzzy=`` returned the sharp bandwidth while the docstring claimed otherwise. On a two-sided noncompliance replica of the Lee 2008 senate data that is a 9% to 16% error in ``h``. Designs with **one-sided** noncompliance were unaffected, because ``rdbwselect`` itself falls back to the sharp bandwidth there (R's ``perf_comp``) -- which is also why the defect survived: the fixture in the repository was one-sided.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function: 'triangular', 'uniform', or 'epanechnikov'.triangular
clusterNoCluster variable name for cluster-robust variance estimation.
bwselectNoBandwidth selection method. One of: - ``'mserd'`` : MSE-optimal common bandwidth (default) - ``'msetwo'`` : MSE-optimal separate left/right bandwidths - ``'msesum'`` : MSE-optimal for the sum of the two intercepts - ``'msecomb1'`` : ``min(mserd, msesum)``, per side - ``'msecomb2'`` : ``median(msetwo, mserd, msesum)``, per side - ``'cerrd'``, ``'certwo'``, ``'cersum'``, ``'cercomb1'``, ``'cercomb2'`` : the CER-optimal counterparts of the above The combination rules are applied to the finished ``h`` and ``b`` of each cascade, element-wise per side -- not stage by stage.mserd
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, so the description does not need to establish safety. The phrase 'Validation: certified parity evidence' adds a trust signal about implementation quality, but it does not disclose operational behavior such as what the tool returns, how it handles fuzzy designs, or how the many bandwidth-selection options behave. It is consistent with the annotations, so no contradiction is present.

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 extremely short and front-loaded with the core purpose. The second sentence about validation is somewhat tangential to invocation, but it does not add meaningful bloat, so the overall structure remains efficient.

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?

Despite a rich schema and output schema, the description is too thin for a tool with 18 parameters and many closely related RD siblings. It does not explain how rdbwselect relates to rdrobust, rdbwhte, rdbwsensitivity, or rdwinselect, and it omits guidance about when a user would prefer this bandwidth-selection tool over alternatives. The validation note does not compensate for this contextual gap.

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 100%, so the schema fully documents all 18 parameters. The tool description adds no parameter-level meaning beyond what the schema already provides, matching the baseline score of 3.

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 clearly identifies the tool as 'Bandwidth selection for local polynomial RD estimation,' which names the resource and the statistical context. It is distinguishable from estimation tools like rdrobust, though it does not explicitly distinguish itself from closely related siblings such as rdbwhte or rdbwsensitivity.

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 the tool should be used when a bandwidth is needed for local polynomial RD estimation, but it provides no explicit when-to-use or when-not-to-use guidance and names no alternatives. Given the large family of RD sibling tools, this leaves selection among siblings to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdbwsensitivityC
Read-only

Bandwidth sensitivity analysis for RD estimates.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoCutoff.
pNoPolynomial order.
xYesOutcome and running variable names.
yYesOutcome and running variable names.
axNoax parameter (Optional[Any]).
alphaNoSignificance level for confidence intervals and tests.
fuzzyNoTreatment variable for fuzzy RD.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
n_gridNoNumber of grid points if bw_grid is None.
bw_gridNoExplicit bandwidth values to evaluate. If None, auto-generates a grid as multiples of the MSE-optimal bandwidth.
figsizeNofigsize parameter (Tuple[float, float]).
bw_rangeNoRange of multipliers for the optimal bandwidth.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, which covers the safety profile. However, the description adds no extra behavioral context beyond that. It does not mention any side effects, caching behavior (as_handle), or specifics about what the analysis entails. Since annotations already cover the read-only nature, the lack of additional context is acceptable but not enriching.

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 description is extremely concise with no wasted words, which is efficient. However, it is a single sentence with no structure, and it is so minimal that it borders on under-specification rather than genuine conciseness. It lacks front-loaded key details that would help an agent quickly understand its use.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool with 18 parameters and many optional features, yet the description provides almost no context. It does not explain what the analysis produces, how it relates to other RD tools, or when it should be invoked. The description is inadequate for an agent to make an informed decision about using this tool, especially given the large sibling set.

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 100%, so every parameter has a description in the input schema. The tool description adds no additional meaning about parameters. Per the rubric, with high schema coverage, a baseline of 3 is appropriate, and the description does not elevate it.

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 clear purpose: bandwidth sensitivity analysis for RD estimates. It identifies the specific verb (analysis) and resource (bandwidth sensitivity), distinguishing it from generic analysis tools. However, it does not explicitly differentiate from closely related siblings like rdsensitivity or rdrobust, which limits its clarity.

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 provides no guidance on when to use this tool versus alternatives. There are no conditions, exclusions, or references to sibling tools that might be more appropriate for different scenarios. The single sentence gives no context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_cate_summaryB
Read-only

Run multiple ML-RD methods and compare CATE estimates.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff.
hNoBandwidth (shared across methods).
xYesRunning variable.
yYesOutcome variable.
covsNoCovariates for heterogeneity / selection.
seedNoRandom seed.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodsNoSubset of ``['forest', 'boost', 'lasso']``. Default: all three.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description is consistent with that: running methods and comparing estimates is a non-mutating analysis operation. The description adds the 'multiple methods and comparison' scope but does not disclose behavioral details like computation cost, caching semantics, or randomness; those are covered in parameter descriptions, so no contradiction or major gap.

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 sentence with no filler, front-loaded with the action verb and object. Every word contributes to stating the tool's purpose, making it highly economical.

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 a full output schema and 100% schema coverage, the description does not need to repeat return-value or parameter details. However, given the tool's complexity (14 parameters) and the large sibling set, the one-line description provides no prerequisite context, no example, and no explicit guidance on how this compares to similar CATE or ML-RD tools.

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?

The input schema has 100% parameter description coverage, with rich details for data_path, detail, methods, as_handle, and others. The description itself adds no parameter-level meaning, which is acceptable because the schema already carries the burden.

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 uses specific verbs and resources: 'Run multiple ML-RD methods and compare CATE estimates.' It clearly conveys the core function of the tool. However, it does not differentiate from closely related siblings such as cate_summary, auto_cate, or compare_estimators, and 'ML-RD' may be ambiguous without domain context.

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 alternatives, no exclusions, and no mention of relevant sibling tools. The phrase 'compare CATE estimates' implies a comparison use case, but the agent is not told when this is the right choice among the many overlapping CATE-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_compareC
Read-only

Compare multiple RD estimators on the same data.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoc parameter (float).
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
alphaNoConfidence level forwarded to each estimator that accepts ``alpha``.
fuzzyNoFuzzy treatment column passed through to all methods that accept it.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodsNoMethod aliases recognised by the :data:`sp.rd._RD_METHOD_ALIASES` dispatcher. Default: ``('rdrobust', 'honest', 'randinf')``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
method_kwargsNoPer-method extra kwargs, e.g. ``{'rdrobust': {'kernel': 'uniform'}}``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so the description carries a lower bar for safety disclosure. However, the description adds no behavioral context beyond the purpose: it doesn't mention that it returns a comparison table, that results can be cached via as_handle, or any performance characteristics. The read-only nature is consistent with annotations, but the description itself adds minimal value.

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 a single sentence, highly concise, and front-loaded with the main action. There is zero wasted text, making it appropriately sized for a one-line summary.

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?

Given the tool has 13 parameters, an output schema, and rich sibling context, the description is too sparse. It fails to convey when to use this tool vs alternatives, what output to expect, or any behavioral notes. The schema and annotations carry most of the burden, but the description should provide contextual guidance, which it lacks.

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?

The schema has 100% coverage for all 13 parameters, each with detailed descriptions, so the baseline is 3. The description does not mention any parameters or add meaning beyond the schema. It neither compensates for gaps (there are none) nor provides extra insight into parameter usage.

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 clear verb (compare) and resource (multiple RD estimators) on the same data, which is specific and distinguishes it from single-estimator tools like rdrobust. However, it doesn't mention which estimators or that it defaults to three methods, though that is covered in the schema. It's not a tautology and gives a clear purpose.

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 provides no guidance on when to use this tool versus alternatives. It doesn't mention that it is for comparing multiple estimators rather than a single estimation, nor does it reference any sibling tools or exclusion criteria. The agent is left to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rddB
Read-only

Sharp / fuzzy RD -- article-friendly alias for :func:rdrobust.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
fuzzyNofuzzy parameter (Optional[str]).
cutoffNocutoff parameter (float).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
runningYesrunning parameter (str).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds no behavioral context beyond 'alias for rdrobust'β€”it doesn't mention side effects, performance, or limitations. With annotations covering safety, this is adequate but not enriched.

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 a single, efficient sentence that communicates the core purpose. It's appropriately front-loaded with the RD type and alias reference, with no wasted words. Though terse, it earns 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?

With an output schema present, return values don't need explanation. However, for a causal inference tool, the description doesn't mention assumptions, when to prefer sharp vs. fuzzy, or how it differs from the many RD siblings. It's minimally complete but leaves the agent to infer usage context from the schema.

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 100%, so all 10 parameters are documented in the input schema. The description adds no parameter-specific meaning beyond what the schema already provides. Baseline 3 is appropriate since the schema does the heavy lifting.

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 clearly states this is an RD estimation tool ('Sharp / fuzzy RD') and identifies it as an alias for rdrobust, which conveys the primary function. It distinguishes itself slightly by the 'article-friendly' qualifier but doesn't fully differentiate from the many other RD sibling tools beyond that.

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 is given on when to use this tool versus alternatives like rdrobust or other RD functions. It doesn't mention when sharp vs. fuzzy is appropriate, nor any exclusions. The alias reference implies same usage as rdrobust but doesn't state it explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_dashboardC
Read-only

Four-panel RD diagnostic dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoCutoff.
hNoReference bandwidth used for plotting and as the basis for ``bw_grid``. If None, MSE-optimal bandwidth from rdrobust.
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
covsNoCovariates for the balance panel. If None, the panel shows the density's binomial near-cutoff test instead.
saveNoIf a path is given, also save the figure (extension determines format).
fuzzyNoFuzzy treatment column (passed through to RD plot/sensitivity).
titleNoSuptitle.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
bw_gridNoBandwidths to evaluate in the sensitivity panel. If None, uses ``[0.5, 0.75, 1.0, 1.25, 1.5, 2.0] x h_mse``.
figsizeNofigsize parameter (Tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already provide the safety profile (readOnlyHint, openWorldHint), so the description's 'four-panel diagnostic dashboard' adds only a minimal output trait. It doesn't say what the four panels are, whether it renders a figure or payload, or that a 'save' path triggers file writing, leaving key behavioral traits undisclosed.

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 description is economical and the core phrase is front-loaded, with no filler. But it is under-specified for a 16-parameter dashboard tool rather than appropriately concise, so brevity is achieved at the expense of useful content.

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?

Despite the rich schema and output schema, the top-level description is too thin for a complex tool with this many sibling alternatives. It omits usage conditions, the identities of the four panels, and behavior beyond 'dashboard', leaving the agent without enough context to invoke or chain it confidently.

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 100% and the parameter descriptions are detailed (e.g., 'detail' payload modes, data_path formats), so the baseline applies. The tool description contributes no parameter-level meaning beyond what the schema already documents.

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 tool as a diagnostic dashboard for RD analyses and adds the 'four-panel' detail. However, it is a noun phrase with no explicit verb, doesn't enumerate the panels, and doesn't distinguish rd_dashboard from other RD diagnostic/plot tools in the large 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 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 rd_dashboard versus rdplot, rdrobust, rdsummary, rdrobustness_table, or other RD siblings. 'Diagnostic dashboard' implies a high-level use case, but the agent is left to infer the selection criteria and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rddensityA
Read-only

CJM (2020) density discontinuity test for RD manipulation. Validation: certified evidence with scoped limitations. Known limitations: Certified native reference-parity evidence covers the default rddensity::rddensity unrestricted triangular-kernel selector and test path on the JSS Lee/RD Senate fixture. Manual side-specific bandwidths follow an explicit user-control convention, not a reference-parity guarantee; backend='r' remains available when direct R package execution is required. Assumptions: Cattaneo-Jansson-Ma (2020) local-polynomial density test: under no manipulation the running-variable density is continuous at the cutoff; Density is estimated from the empirical CDF via local polynomial regression with a data-driven CJM bandwidth and bias-corrected inference (no binning); Sufficient mass on both sides of the cutoff within the bandwidth for the polynomial fit of order p. Pre-conditions: Running variable column + cutoff c for the RD density test; Adequate observations on each side of the cutoff within the chosen bandwidth. Failure modes: Too few points on one side of the cutoff for the local polynomial density fit -> Widen the bandwidth h or lower the polynomial order p to...

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff.
hNoBandwidth. A scalar applies the same bandwidth on both sides; a length-2 sequence is interpreted as ``(h_left, h_right)``.
pNoPolynomial order for density estimation.
xYesRunning variable.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
backendNo``"native"`` uses StatsPAI's Python port of the default ``rddensity`` unrestricted triangular-kernel selector/test path. ``"r"`` delegates to ``rddensity::rddensity`` through ``Rscript`` when the R package is installed, matching the reference package's selector and test statistic.native
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint annotation by disclosing validation scope, known limitations, assumptions, failure modes, and remediation suggestions. It openly qualifies the native backend's certified behavior and clarifies that manual bandwidths have a different guarantee.

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 description is well-organized into labeled sections and front-loads the purpose, but it is verbose and includes somewhat redundant validation/limitations phrasing. The final failure-mode sentence appears truncated ('...lower the polynomial order p to...'), which weakens the structural completeness.

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?

The description covers assumptions, preconditions, failure modes, validation limits, and backend options, which is substantial for a complex statistical test. It does not explicitly address sibling-tool selection, and some remediation advice is incomplete, but the output schema and rich parameter schema cover the remaining operational details.

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 100%, so the baseline is 3. The description adds methodological meaning to key parameters such as h and p by explaining the data-driven CJM bandwidth, bias-corrected inference, and local polynomial fit, and it clarifies the native vs. R backend distinction.

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 clearly states the tool is 'CJM (2020) density discontinuity test for RD manipulation,' identifying a specific test, method, and research context. It does not explicitly differentiate itself from sibling tools such as rdplotdensity or mccrary_test, 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete pre-conditions and failure modes, including the need for a running-variable column, cutoff, and adequate observations on both sides. It also mentions when 'backend="r"' may be appropriate, but it does not explicitly contrast this tool with alternative RD manipulation tests or plotting tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_discreteA
Read-only

Honest CI for RD when the running variable takes only a moderate number of distinct values (Kolesar-Rothe 2018 AER). Uses bounded second derivative or bounded misspecification smoothness classes; robust to the loss of asymptotics that affects rdrobust under sparse mass points. Assumptions: Continuity of potential outcomes in x at c (Hahn, Todd, van der Klaauw 2001); No manipulation of x at c (McCrary density test); Local randomization only in a neighborhood of c -- extrapolation away from c is not identified. Pre-conditions: running variable x is continuous with support on both sides of c; treatment assignment is determined by the cutoff c (sharp) or probabilistically at c (fuzzy); sufficient mass of observations within the optimal bandwidth. Failure modes: McCrary density test p < 0.05 -> Use donut-hole RD (donut=) or partial-identification bounds; Covariate imbalance at cutoff (sp.rdbalance rejects) -> Include covariates as controls, narrow bandwidth, or report as caveat; Effect unstable across bandwidth halvings -> Report sp.rdbwsensitivity and sp.rd_honest (Armstrong-Kolesar honest CI). Alternatives: sp.rdrobust, sp.rd_honest, sp.rdrbounds, sp.bounds. Typical minimum N:...

ParametersJSON Schema
NameRequiredDescriptionDefault
KNoBound on per-side linear-approximation bias; auto if None (BM method)
MNoBound on |g''|; auto if None (BSD method)
cNoc parameter (float).
hNoBandwidth used for local smoothing or kernel weighting.
xYesDiscrete running variable
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoSmoothness classbsd
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds rich context beyond the readOnlyHint annotation: statistical assumptions, local-randomization scope, non-identification of extrapolation, and failure-mode diagnostics. It is penalized for the internal inconsistency between discrete running variable and the 'continuous' precondition, plus the truncated 'Typical minimum N' sentence, which obscure the operational boundary.

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 well-organized with labeled sections and a front-loaded summary; the assumptions, failure modes, and alternatives are dense but relevant. It loses a point for the incomplete final sentence ('Typical minimum N:...') and for the contradictory continuous/discrete running-variable statement, which introduce avoidable confusion.

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 readOnlyHint annotation, the description does not need to explain return values. It covers assumptions, preconditions, failure modes, and alternatives comprehensively for a complex estimator. A full 5 is not warranted because the contradictory precondition and truncated minimum-N guidance leave an operative gap for an agent deciding whether the data qualify.

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 100%, so the baseline is 3 even without parameter elaboration in the description. The description does add methodological context for method (bsd/bm) and bandwidth relevance, but it does not explain individual parameters such as K, M, or h in any detail, and none is required given full schema coverage.

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 first sentence states the tool's specific purpose: honest CI for RD when the running variable has a moderate number of distinct values, and it explicitly contrasts this with rdrobust under sparse mass points. The name and description align, and the tool is distinguishable from nearby siblings such as rdrobust and rd_honest.

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 provides assumptions, preconditions, failure modes with recommended remedies, and an explicit alternatives list. It loses a point because it never crisply states 'use this when x is discrete' as a rule, and the precondition 'running variable x is continuous' directly contradicts the tool's stated discrete-purpose, weakening the routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_distributionA
Read-only

Distribution-valued sharp RDD. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial; running variable x is continuous with support on both sides of c. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth; McCrary density test p < 0.05 -> Use donut-hole RD (donut=) or partial-identification bounds. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect, sp.rd_honest. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
cutoffNocutoff parameter (float).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
runningYesrunning parameter (str).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoBandwidth used for local smoothing or kernel weighting.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoDefaults to (0.1, 0.25, 0.5, 0.75, 0.9).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only, so the description's job is to add context beyond safety. It adds statistical assumptions, manipulation checks, bandwidth-sensitivity guidance, and follow-up alternatives, all of which go well beyond the annotations. There is no contradiction with readOnlyHint.

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?

Longer than average, but it is organized into labeled sections (assumptions, preconditions, failure modes, alternatives, minimum N) and nearly every sentence carries useful information. The opening phrase is terse and front-loaded, with no filler or tautology.

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?

Given the tool's complexity and the presence of an output schema, the description covers the key statistical context: assumptions, validity preconditions, failure modes, remediation paths, and a sample-size threshold. The main omission is a plain-language statement of what the distribution-valued estimate actually represents and how it should be interpreted.

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 100%, so a baseline of 3 is appropriate even though the description itself says little about parameter formats. It does reinforce the meaning of cutoff and running variable and the importance of sample size near the cutoff, but it adds no concrete parameter-format guidance beyond the schema.

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 identifies a specific resourceβ€”a sharp regression-discontinuity designβ€”and a distinguishing scope ('distribution-valued') that separates it from average-effect RD tools like rdrobust. However, it is phrased as a noun phrase rather than an explicit verb statement of what the tool computes, and 'distribution-valued' is not unpacked.

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 gives explicit preconditions, assumptions, failure modes, and a typical minimum N, plus named alternatives for follow-up actions such as density tests, donut-hole RD, or bounds. It stops short of directly saying 'use rdrobust for average effects, use this for distributional effects,' so the choice among the listed alternatives is mostly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_distributional_designA
Read-only

Joint RDD + RKD on the conditional distribution of Y. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
cutoffNocutoff parameter (float).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
runningYesrunning parameter (str).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoBandwidth used for local smoothing or kernel weighting.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoquantiles parameter (Optional[np.ndarray]).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds substantial context beyond that: statistical assumptions, data preconditions, and common failure modes such as manipulation at the cutoff and bandwidth sensitivity. This helps the agent anticipate invalid results and plan diagnostic follow-ups without contradiction. Output mechanics are not discussed, but that is covered by 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?

The description is organized into labeled segments (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and front-loads the core method. It is dense but every segment carries decision-relevant information for a complex statistical tool. Some redundancy and technical jargon could be trimmed, but the structure makes it navigable.

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 description covers assumptions, preconditions, failure modes, alternatives, and a minimum sample size, which is strong for a complex estimator. However, it mentions fuzzy designs without the schema exposing any parameter to specify a fuzzy treatment variable, leaving an important ambiguity for an agent trying to call the tool correctly. Combined with the output schema and full parameter coverage, this is adequate but not fully complete.

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?

The input schema has 100% description coverage for all 12 parameters, so the baseline is 3. The free-text description does not add per-parameter semantics beyond alluding to running variable, cutoff, and bandwidth in the preconditions and failure modes. It neither corrects nor enriches schema-level parameter documentation.

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 opening sentence names a specific method family (joint RDD + RKD) and the target object (conditional distribution of Y), which is enough to separate it from mean-RD tools like rdrobust or from distributional DID tools. It lacks an explicit action verb like 'estimates' or 'tests', but the domain-specific phrasing is still informative.

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 provides pre-conditions, assumptions, and failure modes that tell an agent when the design is valid and what checks to run if assumptions fail. Alternatives are named (sp.rdrobust, sp.rdrandinf, sp.rdbwselect), but without explicit conditions for when to choose each alternative, so the when-not guidance remains somewhat implicit. The 'sp.' prefix also does not exactly match the sibling names, adding minor friction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_external_validityA
Read-only

Diagnostic assessment of RD external validity. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff value.
xYesRunning variable name.
yYesOutcome variable name.
covsNoCovariate names for overlap and CI testing.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
target_x_rangeNoRunning variable range ``(x_low, x_high)`` defining the target population. Defaults to the full data range.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so the description doesn't need to restate that this is a read-only diagnostic. The description adds valuable behavioral context: it lists the assumptions being tested (continuity, no sorting, monotonicity for fuzzy designs), pre-conditions, and failure modes. It also explains what happens when assumptions fail (design invalid near cutoff, results not robust) and what actions to take. This goes beyond the annotations by disclosing the diagnostic logic and consequences.

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 dense but well-organized: assumptions, pre-conditions, failure modes, alternatives, and minimum N are clearly labeled. It front-loads the core purpose and then provides actionable guidance. It's longer than ideal but every section earns its place by helping an agent decide when and how to use the tool. The structure with colons and arrows makes it 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?

Given the tool's complexity (12 params, output schema present, many RD siblings), the description covers the key decision-relevant context: assumptions, pre-conditions, failure modes, and alternatives. The output schema exists, so return values don't need to be described. The description could be more complete by explaining what 'external validity' means in this RD context and how the diagnostic result is reported, but the essential information for calling the tool correctly is present.

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 100%, so the schema already documents all 12 parameters. The description adds context about the running variable and cutoff (pre-conditions) but doesn't add parameter-specific semantics beyond what the schema provides. The description's mention of 'local polynomial' and 'MSE-optimal bandwidth' hints at the estimation approach but doesn't map to specific parameters like c, x, y, or covs. Baseline 3 is appropriate given full schema coverage.

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 clearly identifies this as a diagnostic assessment of RD external validity, with a specific verb ('Diagnostic assessment') and resource ('RD external validity'). It distinguishes itself from sibling tools like rdrobust, rdrandinf, and rdbwselect by naming them as alternatives. However, it doesn't explicitly state what the tool returns or how it differs from other RD diagnostic tools like rdplotdensity or rddensity, which are mentioned as failure-mode responses rather than alternatives.

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?

The description provides explicit pre-conditions (continuous running variable, known cutoff, enough observations), failure modes with specific remedies (density jump -> run McCrary/density test; bandwidth sensitivity -> report bandwidth-sensitivity curve and use MSE-optimal bandwidth), and names alternatives (sp.rdrobust, sp.rdrandinf, sp.rdbwselect). It also gives a typical minimum N of 500, which helps an agent decide when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_extrapolateA
Read-only

Angrist-Rokkanen (2015) extrapolation of RD effects away from the cutoff. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial; running variable x is continuous with support on both sides of c. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth; McCrary density test p < 0.05 -> Use donut-hole RD (donut=) or partial-identification bounds. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect, sp.rd_honest. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff value.
xYesRunning variable name.
yYesOutcome variable name.
covsNoCovariate names for conditional independence. Required.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimation method: ``'ols'``, ``'ipw'``, or ``'doubly_robust'``.ols
n_evalNoNumber of evaluation points when ``eval_points`` is None.
h_localNoBandwidth for local RD estimate at the cutoff (for comparison). If None, the MSE-optimal bandwidth from ``rdrobust`` is used.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentNoTreatment variable for fuzzy RD. If None, sharp design assumed (D = 1{X >= c}).
eval_pointsNoRunning variable values at which to extrapolate the CATE. If None, ``n_eval`` equally spaced points spanning the data range.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While annotations already declare readOnlyHint=true, the description adds substantial behavioral context: it lists the underlying assumptions (continuity of potential outcomes, no manipulation, monotonicity for fuzzy designs), pre-conditions, failure modes (e.g., density jump, bandwidth sensitivity), and diagnostic suggestions (McCrary test, bandwidth-sensitivity curves). This goes well beyond the annotation and helps the agent anticipate when results may be invalid and what to do about 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?

The description is structured with labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and is front-loaded with the purpose. Every sentence adds value: assumptions, pre-conditions, failure modes with remedies, and alternatives. There is no redundancy or filler. It is longer than some, but each element is essential for correct tool selection and usage.

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 complexity (16 parameters) and that an output schema exists, the description covers all essential aspects: purpose, assumptions, pre-conditions, failure modes, alternatives, and sample size guidance. It does not need to explain return values because the output schema does that. The description is complete enough for an agent to decide whether to use this tool and how to interpret common pitfalls.

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 100%, meaning every parameter already has a description in the schema. The tool description does not add per-parameter details beyond what the schema provides. It does add general methodological context (e.g., mentioning fuzzy designs and monotonicity), but it does not enhance understanding of individual parameters like 'covs' or 'treatment'. Baseline 3 is appropriate when schema fully covers parameters.

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 opens with a precise statement of purpose: 'Angrist-Rokkanen (2015) extrapolation of RD effects away from the cutoff.' This names the specific method, the resource (RD effects), and the action (extrapolation away from cutoff). It also distinguishes from siblings by explicitly listing alternative tools (rdrobust, rdrandinf, rdbwselect, rd_honest), making it clear this is for extrapolation, not standard RD estimation.

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?

The description provides explicit guidance on when to use this tool vs. alternatives: it states the purpose (extrapolation away from cutoff) and lists alternative tools for other purposes. It also includes pre-conditions (continuous running variable, known cutoff, enough observations) and failure modes (manipulation, bandwidth sensitivity, McCrary test failure) with suggested corrective actions (donut-hole RD, partial-identification bounds). This goes beyond mere context to actionable decision criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_flexA
Read-only

RD with flexible covariate adjustment via cross-fit ML residualisation (Noack-Olma-Rothe 2025). Reduces variance of tau at the cutoff by subtracting an ML estimate of E[Y|W] before running rdrobust; consistent under free-of-cutoff continuity of eta, asymptotically efficient when eta converges to E[Y|X=c, W]. Assumptions: Continuity-based RD identification at the cutoff: potential outcomes are continuous in the running variable except for the treatment jump; Cross-fit ML residualisation of the outcome (and treatment, when fuzzy) on covariates only removes outcome variance and does not bias the cutoff estimate, requiring honest K-fold cross-fitting; Covariates predict the outcome well enough to shorten CIs relative to plain rdrobust; covariates are pre-determined (not affected by treatment). Pre-conditions: data has continuous running variable with adequate mass on both sides of the cutoff; Covariates list valid pre-treatment columns (or is empty/None to fall back to rdrobust); n_folds>=2 for genuine cross-fitting. Failure modes: Sparse data near the cutoff makes the local fit and learner unstable -> Widen the bandwidth via bwselect or collect more mass around the cutoff; Covariates...

ParametersJSON Schema
NameRequiredDescriptionDefault
WNoCovariates used by the flexible adjustment
cNoc parameter (float).
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
fuzzyNofuzzy parameter (str).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
learnerNoBuilt-in learnerboost
n_foldsNoCross-fit folds (1 disables CV)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint annotations, the description discloses the residualisation algorithm, consistency and efficiency conditions, the assumption that covariate adjustment does not bias the cutoff estimate, and concrete failure modes with actionable advice such as widening bandwidth or collecting more mass around the cutoff. This is substantial behavioral context that helps an agent anticipate how the tool behaves.

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 description is front-loaded and well organized with Assumptions, Pre-conditions, and Failure modes sections, but it is long and the failure-modes section ends mid-sentence at 'Covariates...'. The detail is mostly relevant, but the incomplete final item is a structural flaw that prevents a higher score.

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 15-parameter RD estimator with an output schema and read-only annotations, the description covers the identification assumptions, the residualisation procedure, pre-conditions, and failure modes. The main gaps are the truncated final failure mode and the lack of explicit guidance on which sibling RD tool to prefer in specific situations; most parameter-level details are already present in the input schema.

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 input schema already covers all 15 parameters, so the baseline is 3. The description adds meaningful semantics for W (must be pre-treatment columns; empty/None falls back to rdrobust), n_folds (>=2 needed for genuine cross-fitting), and fuzzy (treatment is also residualised). Other parameters like x, y, c, and kernel are already well described in the schema, so no further compensation is needed.

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 clearly identifies rd_flex as an RD estimator with flexible covariate adjustment via cross-fit ML residualisation, and it explains the mechanism: subtracting an ML estimate of E[Y|W] before running rdrobust. This distinguishes it from plain rdrobust and other RD variants, though it does not explicitly name a sibling alternative to contrast against.

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 gives concrete pre-conditions: a continuous running variable with mass on both sides, valid pre-treatment covariates, and n_folds>=2 for genuine cross-fitting. It also states that an empty/None W falls back to rdrobust, providing a when-not signal. It does not directly compare rd_flex with other sibling RD tools such as rd_boost or rd_forest, 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.

rd_forestA
Read-only

Causal Forest for RD -- heterogeneous treatment effect estimation. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff.
hNoBandwidth (uses IK-style automatic selection if None).
xYesRunning variable.
yYesOutcome variable.
covsNoCovariate names used as features for heterogeneity detection. Must not include the running variable *x*.
seedNoRandom seed.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
honestyNoSplit-sample (honest) estimation: half the data for tree construction, the other half for leaf predictions.
n_treesNoNumber of trees in each forest.
min_leafNoMinimum leaf size (larger -> more regularisation).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already signals a safe read operation, and the description adds valuable behavioral context: assumptions (continuity, no sorting, monotonicity for fuzzy designs), pre-conditions, and common failure modes including manipulation and bandwidth sensitivity. Nothing contradicts the annotations. The description goes beyond the safety hint to explain when results may be invalid.

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 core purpose, then organized into labeled sections for assumptions, pre-conditions, failure modes, alternatives, and minimum N. Every sentence carries useful information, though it is somewhat longer than necessary; structure and labeling make it easy to parse.

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. It covers what the method does, when it is appropriate, what must be true for validity, how to diagnose failures, alternatives, and a typical sample-size minimum. It is complete enough for an agent to decide and invoke the tool correctly, though explicit guidance on when to choose this over rdrobust for average effects would be slightly better.

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 100% β€” all 16 parameters have descriptions in the schema. The tool description adds no parameter-level meaning beyond what the schema already provides, so the baseline score of 3 applies.

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 clause 'Causal Forest for RD -- heterogeneous treatment effect estimation' names the method, the design, and the estimand, making it immediately distinguishable from siblings like rdrobust (local polynomial average effects) and rdbwselect (bandwidth selection). It is specific, action-oriented, and clearly states what the tool does.

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 lists alternatives (sp.rdrobust, sp.rdrandinf, sp.rdbwselect), states pre-conditions (continuous running variable, known cutoff, sufficient observations), and gives failure-mode guidance with remedial actions (rdplotdensity for manipulation; bandwidth-sensitivity checks). It lacks an explicit decision rule such as 'use this for heterogeneous effects, use rdrobust for average effects,' but the purpose statement strongly implies that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_honestA
Read-only

Armstrong-Kolesar (2018) honest confidence intervals for sharp regression discontinuity -- the only RD inference procedure with provable finite-sample coverage without bandwidth-selection bias. M is the upper bound on the second derivative of E[Y|X] near the cutoff; smaller M means tighter CIs but riskier coverage if the true curvature is larger. Validation: certified parity evidence. Assumptions: E[Y|X] has bounded second derivative |E[Y|X]''| <= M near c; Continuity of potential outcomes at c (Hahn-Todd-van der Klaauw 2001); No manipulation of x at c (run sp.mccrary_test alongside). Pre-conditions: x is continuous with support on both sides of c; Sample mass within the optimal bandwidth on each side; User-supplied M (or willingness to estimate it from data). Failure modes: M estimated from data and effective sample tiny -> Pass an explicit M based on theory or sensitivity analysis (M_grid in Armstrong-Kolesar 2018 Section 4); Honest CI much wider than rdrobust CI -> rd_honest is honest by construction (covers under any |f''| <= M); rdrobust trades coverage for precision. Reporting both is recommended; McCrary density test p < 0.05 -> Use donut-hole RD (donut=) or partia...

ParametersJSON Schema
NameRequiredDescriptionDefault
MNoUpper bound on |E[Y|X]''| near c; if None, estimated from data
cNoCutoff value
hNoBandwidth; auto-selected by opt_criterion if None
xYesRunning variable
yYesOutcome variable
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoLocal-linear kerneltriangular
sclassNoSmoothness class for the bound M: 'H' (Holder, RDHonest's default -- f' is M-Lipschitz) or 'T' (Taylor)H
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
opt_criterionNoBandwidth optimization criterionmse

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses assumptions (bounded second derivative, continuity, no manipulation), preconditions (continuous x, sample mass on both sides), and failure modes with concrete remedies. It also exposes the key M tradeoff between tighter CIs and coverage risk. Nothing contradicts 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?

The description is long but information-dense: assumptions, preconditions, failure modes, and alternatives all earn their place. It is front-loaded with the core purpose. However, it is a single dense block rather than cleanly sectioned, and it ends abruptly with a truncated phrase ('or partia...'), which slightly hurts structural polish.

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 complex method with 15 parameters, the description covers selection-relevant context: statistical assumptions, data preconditions, parameter tradeoffs, alternative procedures, and failure-mode handling. Since an output schema exists, the description does not need to explain return values. An agent has enough to decide whether and how to invoke rd_honest.

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 100%, so the baseline is 3. The description adds useful meaning for M β€” smaller M gives tighter CIs but riskier coverage β€” and references M_grid for sensitivity analysis. However, it adds little beyond the schema for the other 14 parameters, and the schema already documents them adequately.

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 identifies the tool as producing Armstrong-Kolesar (2018) honest confidence intervals for sharp regression discontinuity, which is a specific verb-resource pairing. It also distinguishes itself from rdrobust by emphasizing provable finite-sample coverage without bandwidth-selection bias, so an agent can tell it apart from the many RD sibling tools.

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?

The description gives explicit when-to-use and when-not-to-use guidance: run sp.mccrary_test alongside, pass an explicit M when the data-driven estimate is unreliable, prefer donut-hole RD if the McCrary test rejects, and report rd_honest together with rdrobust. It names rdrobust as the precision-oriented alternative and explains the tradeoff.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdhteA
Read-only

Estimate conditional average treatment effects (CATE) in RD designs. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
bNoBandwidth for bias correction. Defaults to h.
cNoRD cutoff value.
hNoBandwidth for estimation. If None, MSE-optimal bandwidth is selected.
pNoPolynomial order for the running variable (1 = local linear).
xYesRunning variable name.
yYesOutcome variable name.
zYesCovariate(s) for treatment effect heterogeneity.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function: 'triangular', 'uniform', or 'epanechnikov'.triangular
n_evalNoNumber of evaluation points when eval_points is not provided.
clusterNoCluster variable name for cluster-robust standard errors.
bwselectNoBandwidth selection method: 'mserd' or 'msetwo'.mserd
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
eval_pointsNoZ values at which to evaluate CATE. Each row is a point in Z-space. If None, n_eval equally spaced quantiles (10th to 90th pctile) are used.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses key behavioral and validity conditions: continuity of conditional expectations, no sorting around the cutoff, monotonicity for fuzzy designs, and bandwidth-sensitivity failure modes. It also warns about manipulation tests and recommends data-driven bandwidth selection, giving the agent realistic expectations about output reliability.

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 organized into clear labelled sections: assumptions, preconditions, failure modes, alternatives, and minimum sample size. Every sentence adds useful guidance, and the core purpose is front-loaded.

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 complex tool with 19 parameters and an output schema, the description is unusually complete: it states assumptions, data requirements, common failure modes, remedial actions, alternatives, and sample-size guidance. An agent has enough context to invoke this tool and to interpret potential warnings without additional lookups.

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?

The input schema covers 100% of parameters, so the baseline is 3. The description adds context about local polynomials, MSE-optimal bandwidth, and cutoff assumptions, but it does not describe individual parameters in greater depth than the schema already does.

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 opens with a specific verb and resource: 'Estimate conditional average treatment effects (CATE) in RD designs.' It clearly identifies the target estimand and design, and the mention of running-variable cutoff, local polynomial, and CATE distinguishes it from sibling RD tools that focus on ATE, bandwidth selection, or randomization inference.

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?

The description provides explicit preconditions ('continuous running/forcing variable with a known cutoff', 'enough observations'), clear failure-mode warnings ('if manipulation is present the design is invalid'), and named alternatives (sp.rdrobust, sp.rdrandinf, sp.rdbwselect). It also gives a typical minimum N, so an agent can decide whether this tool is appropriate before invoking it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdhte_lincomB
Read-only

Compute a weighted linear combination of CATE estimates.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesResult from rdhte().
weightsYesLinear combination weights. Must have length equal to the number of evaluation points in result.detail.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description need not restate safety. However, it adds no behavioral context beyond 'compute'β€”no mention of caching (as_handle), no side-effect notes, no performance or constraints. With the annotation present, the description contributes nothing extra about behavior.

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 a single, focused sentence with no filler. Every word adds value, and the key operation is front-loaded. It is appropriately concise for a tool whose parameter details live in the schema.

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 100% schema coverage, read-only annotations, and an output schema, most structural information is already provided. The description covers the core purpose, but it omits usage contextβ€”such as when to chain this after rdhte or how to specify weightsβ€”which an agent would need to infer from sibling tool names or the parameter descriptions.

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 100% with meaningful descriptions for all 9 parameters (e.g., 'Result from rdhte()', 'Must have length equal to the number of evaluation points in result.detail'). The description itself adds no parameter information, so the baseline 3 applies.

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 'Compute a weighted linear combination of CATE estimates' uses a specific verb and resource, clearly distinguishing this from rdhte (which estimates CATEs) and generic lincom (which may apply to any coefficients). It doesn't explicitly name sibling tools, but the scope is concrete enough for an agent to understand what it does.

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 gives no guidance on when to use this tool versus alternatives like rdhte, lincom, or other post-estimation functions. There is no mention of prerequisites, typical use cases, or situations where another tool would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_interferenceA
Read-only

Sharp RDD with network interference (Cabrelli-Marconi 2024). Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome.
alphaNoSignificance level for confidence intervals and tests.
cutoffNocutoff parameter (float).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
runningYesOwn running variable.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoDefaults to IQR of own running variable.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
neighbour_runningYesAverage running variable across neighbours (precomputed).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses important behavioral context: assumptions that must hold, failure modes such as manipulation of the running variable and bandwidth sensitivity, recommended remedies, typical minimum N, and alternative tools. This gives the agent a clear picture of the tool's limitations and data requirements without contradicting 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?

The description is long but dense, covering assumptions, preconditions, failure modes, alternatives, and sample-size guidance. Every section earns its place for such a complex econometric tool; it is front-loaded with the method and citation. It could be slightly tightened, but overall it is well organized.

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 complex RDD tool with 13 parameters and an output schema, the description is remarkably complete: it states the identifying assumptions, data preconditions, common failure modes with concrete remedies, alternative estimators, and a minimum N heuristic. Nothing essential is missing for an agent to decide whether to call this tool and how to interpret its role.

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 100%, so the baseline is 3. The description adds useful conceptual context for parameters like running variable, cutoff, bandwidth, and neighbour_running, including advice to use data-driven MSE-optimal bandwidth and warning about density jumps at the cutoff. This goes beyond the schema but does not fully map every parameter 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?

The description clearly identifies the tool as a sharp RDD estimator extended to network interference, citing a specific method and distinguishing it from the many non-interference RDD siblings. It lacks an explicit verb like 'estimates' or 'fits', and the 'Sharp RDD' label is slightly at odds with the later mention of fuzzy designs, so it is not a perfect 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 description provides explicit pre-conditions, assumptions, and failure modes, and names alternatives (sp.rdrobust, sp.rdrandinf, sp.rdbwselect). It does not fully spell out the exact conditions under which to choose each alternative, but the preconditions and failure-mode guidance effectively tell an agent when this tool is appropriate and when it is not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rditA
Read-only

Regression Discontinuity in Time (Hausman & Rapson, 2018). Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoBandwidth in the same units as the numeric time axis (days if datetime). If None, an MSE-optimal bandwidth is selected automatically.
pNoLocal polynomial order (1 = local linear).
yYesOutcome variable name.
timeYesTime variable name (datetime or numeric).
alphaNoSignificance level for confidence intervals.
donutNoDonut hole: exclude observations within +/- donut units of the cutoff (in the same numeric time units).
cutoffYesThe policy change date / time cutoff.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function: 'triangular', 'epanechnikov', 'uniform', or 'gaussian'.triangular
clusterNoCluster variable for clustered standard errors. If provided, cluster-robust SEs are used instead of HAC.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
seasonalityNoDeseasonalise before estimation. One of 'month', 'quarter', 'dow' (day-of-week). Regresses Y on seasonal dummies and uses residuals.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint, so safety is already covered; the description adds value by documenting failure modes (density jumps at cutoff -> rdplotdensity; bandwidth sensitivity -> MSE-optimal bandwidth) and typical minimum N. This tells the agent how the estimator behaves and what diagnostics matter, though it does not spell out the exact output payload.

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?

Dense but purposeful: assumptions, pre-conditions, failure modes, alternatives, and minimum N each add selection/reasoning value. No markdown structure, but the sentences are front-loaded with the method name and are not redundant with the schema.

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 complex econometric estimator with 16 params and an output schema, the description covers statistical assumptions, preconditions, common failure modes, alternative tools, and minimum sample size. It does not need to describe return values because an output schema is present.

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 100%, so the schema already carries parameter meaning. The description adds little parameter-specific detail; the only echo is the bandwidth-sensitivity discussion aligning with h, which does not materially extend the schema.

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 opens with the method name 'Regression Discontinuity in Time (Hausman & Rapson, 2018)', which identifies the estimator and the design family, and it names sibling alternatives (sp.rdrobust, sp.rdrandinf, sp.rdbwselect) so an agent can disambiguate. It lacks an explicit verb like 'estimates', so it does not fully meet the 5-level bar.

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 pre-conditions (continuous running variable, known cutoff, enough observations) and assumptions (continuity, no sorting, monotonicity for fuzzy designs). Lists alternatives and failure-mode remedies, but does not state explicit exclusion criteria such as 'use rdrobust for non-time running variables'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_lassoA
Read-only

LASSO-assisted RD via post-double-selection. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff.
hNoBandwidth (auto-selected if None).
xYesRunning variable.
yYesOutcome variable.
covsNoCandidate covariates (can be large set).
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel for local linear regression ('triangular', 'uniform', 'epanechnikov').triangular
cv_foldsNoCross-validation folds for LASSO penalty selection.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and the description does not contradict this. It adds valuable behavioral context beyond the annotation by listing validity assumptions and failure modesβ€”manipulation/sorting and bandwidth sensitivityβ€”which directly affect how results should be interpreted. It could go further by describing the exact return payload, but the output schema covers that.

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 dense but well organized into labeled blocks: assumptions, pre-conditions, failure modes, alternatives, and minimum N. Every section earns its place and the most identifying phrase is front-loaded. An agent can scan it quickly and extract the needed guidance without wading through 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?

For a 14-parameter causal-inference tool, the description covers the essential selection and invocation context: assumptions, preconditions, failure modes, remedies, alternatives, and sample-size guidance. Combined with the complete input schema and the presence of an output schema, an agent has enough to decide when to call it and what to expect.

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 100%, so all 14 parameters are already documented in the input schema. The description adds some contextual framing, such as data-driven MSE-optimal bandwidth and candidate covariates for post-double-selection, but it does not systematically enrich individual parameter meanings. Baseline 3 is appropriate.

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 phrase specifies exactly what the tool doesβ€”LASSO-assisted RD via post-double-selectionβ€”and distinguishes it from siblings like rdrobust and rdrandinf by naming the LASSO machinery. The alternatives list reinforces differentiation. Although it lacks a direct verb, the method label is precise and domain-appropriate.

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 gives explicit pre-conditions (continuous running variable, known cutoff, enough observations) and assumptions, plus a typical minimum N. Failure modes tell the agent when the design is invalid and what to do, and alternatives are named. However, it does not give a crisp decision rule for when to choose rd_lasso over rdrobust or rdrandinf.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdmcA
Read-only

Multi-cutoff RD design. Validation: certified parity evidence. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRunning variable.
yYesOutcome variable.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
cutoffsNoCutoff values.
poolingNoPooling method: 'ivw' (inverse-variance weighted) or 'equal'.ivw
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoBandwidth for local polynomial. If None, uses Silverman rule.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
cutoff_varNocutoff_var parameter (Optional[str]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint annotation by stating assumptions, validation expectations, failure modes, and recommended follow-up actions such as running rdplotdensity or reporting a bandwidth-sensitivity curve. This gives an agent meaningful behavioral context; only the phrase 'certified parity evidence' is vague.

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 compact and clearly structured into labeled sections: validation, assumptions, pre-conditions, failure modes, alternatives, and typical minimum N. Each section adds distinct information with little redundancy, making it easy for an agent to scan.

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 complex 14-parameter tool, the description covers assumptions, preconditions, failure modes, alternatives, and sample-size guidance, and the output schema covers return values. It could be slightly more complete by clarifying the multi-cutoff use case and when to choose each alternative, but the essential context is present.

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?

The input schema covers 100% of parameters, so the baseline is 3. The description adds some context by calling x a running/forcing variable, mentioning a known cutoff, and noteing data-driven MSE-optimal bandwidth, but it does not materially clarify individual parameter syntax or types beyond the schema.

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 identifies the tool as a multi-cutoff regression discontinuity design, which names a specific method and resource. It is not a tautology, and listing alternatives (sp.rdrobust, sp.rdrandinf, sp.rdbwselect) helps position it among siblings, though the phrasing lacks an explicit verb like 'estimates'.

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 gives concrete pre-conditions, including a continuous running variable with a known cutoff and sufficient observations near the cutoff. It also names alternatives and failure-mode remedies, but it never explicitly states when to choose rdmc over those alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdmsA
Read-only

Multi-score / Geographic RD design at a single boundary point. Validation: certified parity evidence. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
x1YesFirst running variable (e.g., latitude distance to boundary).
x2YesSecond running variable (e.g., longitude distance to boundary).
alphaNoSignificance level for confidence intervals and tests.
treatNoColumn holding the 0/1 treatment indicator (R's ``zvar``). Strongly
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
cutoff1NoCutoff for x1.
cutoff2NoCutoff for x2.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoFixed bandwidth on the signed-distance score. When omitted the CCT MSE-optimal cascade selects it, as the reference does.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so the tool is a read-only estimator. The description does not contradict this. It goes well beyond annotations by explaining assumptions (continuity, no manipulation, monotonicity for fuzzy), failure modes (manipulation, bandwidth sensitivity), and validation ('certified parity evidence'). This is rich behavioral context for an agent deciding to call 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?

Although the description is long, it is tightly organized with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Every sentence carries unique information; there is no fluff. For a complex econometric method with many statistical requirements, this density is appropriate and efficient.

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?

The description covers purpose, assumptions, pre-conditions, failure modes, alternatives, and sample-size guidance. With an output schema present and annotations declaring read-only behavior, nothing essential is missing. Even the handling of failure modes (run a McCrary test, use MSE-optimal bandwidth) is specified, making this a fully self-contained tool definition.

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 100%, so the baseline is 3. The description adds context about running variables being geographic distances and mentions bandwidth, but does not provide additional parameter-specific semantics beyond what the JSON schema already documents. It does not, for example, explain the distinction between bandwidth and cutoff2 or the meaning of alpha beyond the schema. Thus the description adds modest value but not enough to raise the score.

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 opens with 'Multi-score / Geographic RD design at a single boundary point', a specific verb+resource that clearly distinguishes it from single-score RD tools (rdrobust, rdd) and multi-cutoff variants (multi_cutoff_rd). It further clarifies the two running variables (x1, x2) are geographic distances to the boundary, so an agent can immediately tell what this tool does and how it differs from siblings.

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?

The description explicitly lists assumptions, pre-conditions, failure modes, and alternatives (sp.rdrobust, sp.rdrandinf, sp.rdbwselect). It even provides a typical minimum N of 500. An agent knows exactly when to use this tool (multi-score/geo RD with valid continuity and no sorting) and when to switch to a different tool. No ambiguity remains.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_multi_extrapolateA
Read-only

Multi-cutoff RD extrapolation (Cattaneo, Keele, Titiunik, Vazquez-Bare 2021). Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRunning variable name.
yYesOutcome variable name.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoInterpolation method: - ``'linear'``: tau(x) = a + b*x - ``'polynomial'``: polynomial of degree min(len(cutoffs)-1, 3) - ``'weighted'``: inverse-variance weighted local linearlinear
cutoffsYesCutoff values. Must contain at least 2 cutoffs.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
eval_pointsNoRunning variable values at which to predict tau(x). Defaults to 30 equally spaced points spanning the data range.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses key behavioral risks: a running-variable density jump invalidates the design and the estimate may be bandwidth-sensitive. It even instructs the agent to run rdplotdensity or use an MSE-optimal bandwidth, which is exactly the kind of non-obvious behavior an agent needs to anticipate.

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 longer than a simple one-liner, but every sentence is dense and useful: assumptions, preconditions, failure modes, alternatives, and sample-size guidance are all included. It would earn a 5 if it were slightly tighter and used clearer structural markers, but nothing here is 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 complex RD tool with 12 parameters and 4 required fields, the description is unusually complete: it gives statistical assumptions, data pre-conditions, failure modes with remedies, alternatives, and sample-size guidance. Since an output schema exists and parameter schema coverage is 100%, there is no material gap that would prevent an agent from selecting and invoking this tool correctly.

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 100%, so the schema already carries parameter documentation and the description need not compensate. The description references 'cutoff' and 'running variable' conceptually and discusses bandwidth behavior, but it adds no syntax-level parameter meaning beyond what the schema already provides.

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 clearly identifies the tool as 'Multi-cutoff RD extrapolation' with a formal citation, and the assumptions/preconditions make it evident this is an RD estimation/extrapolation procedure. However, it never uses an explicit verb such as 'estimates' or 'computes', and it does not directly differentiate from closely named siblings like rd_extrapolate or multi_cutoff_rd.

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?

The description provides explicit pre-conditions, failure modes, recommended follow-up actions, and named alternatives ('sp.rdrobust, sp.rdrandinf, sp.rdbwselect'), plus a typical minimum N of 500. This gives an agent clear guidance on when the tool is appropriate and what to do if assumptions fail.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_multi_scoreB
Read-only

Multi-score RDD: treatment if all running variables exceed cutoffs.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
cutoffsYesOne cutoff per running variable (same length).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bandwidthNoDefaults to median IQR across running vars.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
running_varsYesMultiple running variables.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds the treatment assignment rule but says nothing about output behavior, side effects, or computational characteristics. Since annotations cover the main behavioral risk, this is adequate but not enriched.

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 a single sentence with no wasted words. It front-loads the method name and the critical condition. However, given the tool's complexity (12 parameters, statistical method), the extreme brevity might be too terse, but there is no redundancy or fluff.

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 complex econometric tool, the one-line description is insufficient. It does not explain the typical use case, provide examples, or mention any caveats about data requirements or interpretation. The output schema covers return structure, but the description leaves the agent guessing about when to invoke this tool and what to expect beyond the raw method name.

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 100%, so all 12 parameters are documented in the schema. The description adds the semantic link between cutoffs and running_vars ('treatment if all running variables exceed cutoffs'), which is useful context but does not detail individual parameter formats or defaults beyond the schema. Baseline 3 is appropriate.

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 method (multi-score RDD) and the key condition ('treatment if all running variables exceed cutoffs'). This clearly distinguishes it from siblings like multi_cutoff_rd (different cutoff handling) and rd_multi_extrapolate (extrapolation focus). The verb 'multi-score' and resource 'RDD' are precise.

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 vs. alternatives. With dozens of RDD-related siblings (rdrobust, rddensity, rdplot, etc.), the agent gets no hint about what distinguishes multi-score RDD from other designs or when it is appropriate. No exclusions or comparisons are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdplaceboC
Read-only

Placebo cutoff test for RD validity.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoTrue cutoff.
pNop parameter (int).
xYesOutcome and running variable names.
yYesOutcome and running variable names.
axNoax parameter (Optional[Any]).
sideNoWhich side of the true cutoff to place placebos: 'left', 'right', or 'both'.both
alphaNoSignificance level for confidence intervals and tests.
fuzzyNoTreatment variable for fuzzy RD.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
figsizeNofigsize parameter (Tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
n_placeboNoNumber of placebo cutoffs if auto-generating.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
placebo_cutoffsNoExplicit placebo cutoff values. If None, auto-generates from the data distribution.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations mark this as read-only, and the description's 'test' wording aligns with that. However, the description discloses no additional behavior such as auto-generating placebo cutoffs when none are supplied, how the running variable is handled, or what the output contains. With annotations already covering the read-only guarantee, the description adds little transparency.

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 one-line description is undeniably concise and front-loaded, with no wasted words. Yet it is too brief to serve as a standalone guide for a tool with 18 parameters, so it earns only a mid score.

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?

Despite having an output schema, the description omits when-to-use, required input roles, and interpretation of results. For a complex RD diagnostic with 18 parameters, this is not enough context to call correctly without supplementing from the schema.

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 100%, and the description offers no parameter-specific explanations beyond what the schema already provides. For example, it does not mention how placebo_cutoffs or n_placebo relate to the test. Baseline 3 is appropriate because the schema carries the semantic load.

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 identifies the tool as a placebo cutoff test for RD validity, a specific diagnostic within RD analysis. It is distinct from estimation (rdrobust) or bandwidth selection (rdbwselect), though it does not explicitly name alternatives. The purpose is clear but relies on domain knowledge.

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 provides no guidance on when to call this tool versus other RD diagnostics such as rdrandinf or rddensity. It does not mention preconditions, ordering, or what question it answers. An agent would need to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdplotA
Read-only

RD plot: binned scatter with polynomial fit on each side of the cutoff.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoCutoff.
hNoBandwidth to display.
pNoPolynomial order for the fitted curve.
xYesOutcome and running variable names.
yYesOutcome and running variable names.
axNoax parameter (Optional[Any]).
covsNoCovariates to partial out before binning and plotting.
donutNoIf > 0, shades the donut region |x - c| <= donut.
nbinsNoBins per side. If None, uses data-driven selection via binselect.
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel for the fitted curve.triangular
figsizeNofigsize parameter (Tuple[float, float]).
hide_ciNoIf True, suppress CI bands entirely.
scatterNoShow binned scatter points.
show_bwNoIf True, shades the bandwidth window.
weightsNoColumn name for observation weights in polynomial fitting.
x_labelNox_label parameter (Optional[str]).
y_labelNoy_label parameter (Optional[str]).
ci_levelNoConfidence level for pointwise CI bands.
shade_ciNoShow confidence interval bands around the polynomial fit.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
binselectNoBin selection method (when nbins=None): - 'es' : IMSE-optimal evenly spaced - 'espr' : IMSE-optimal evenly spaced (mimicking variance) - 'qs' : IMSE-optimal quantile-spaced - 'qspr' : IMSE-optimal quantile-spaced (mimicking variance) - 'esmv' : IMSE-optimal evenly spaced with variance mimicking (default) - 'qsmv' : IMSE-optimal quantile-spaced with variance mimickingesmv
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds a useful behavioral detail: the polynomial is fit separately on each side of the cutoff. It does not discuss output behavior such as whether a figure object is returned, but the presence of an output schema lowers the burden.

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 a single tight sentence with no filler. It front-loads the core purpose ('RD plot') and immediately adds the distinguishing details ('binned scatter,' 'polynomial fit,' 'each side of the cutoff'). Every word 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?

Given the extremely detailed input schema and an output schema, the description does not need to enumerate parameters or return fields. It provides sufficient high-level context for an agent to understand what the tool does. It is slightly less complete in not connecting this tool to siblings or the broader RD workflow, but this is not critical for a plotting tool with rich structured metadata.

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 100%, so the input schema fully documents all 27 parameters, including enums for binselect and depth for detail. The description itself adds no parameter-level meaning beyond the phrase 'cutoff,' which maps to the c parameter. Baseline 3 is appropriate because the schema carries the explanatory load.

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 uses a specific verb ('plot') and resource ('RD'), and specifies the exact visualization content: 'binned scatter with polynomial fit on each side of the cutoff.' This clearly distinguishes it from estimation-focused siblings like rdrobust and density-focused rdplotdensity. A single sentence fully conveys what the tool produces.

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 gives no explicit guidance on when to use this tool versus alternatives such as rdplotdensity, rdrobust, or rdsummary. There is no 'use this when...' statement, no exclusions, and no mention of the RDD plotting workflow this belongs to. Usage must be inferred entirely from the tool name and the word 'plot.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdplotdensityB
Read-only

Boundary-adaptive density discontinuity plot at the RD cutoff.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoCutoff.
hNoBandwidth. If None, side-specific Silverman pilot.
pNoPolynomial order for the CDF regression (p=2 recommended; p=1 is faster but with worse boundary behavior).
xYesRunning variable.
axNoax parameter (Optional[Any]).
histNoOverlay histogram.
nbinsNoNumber of histogram bins per side.
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_gridNoGrid points per side for the density curve.
figsizeNofigsize parameter (Tuple[float, float]).
ci_levelNoConfidence level for CI bands.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, indicating a safe read-only operation. The description adds the behavioral detail that this is a 'plot' tool, implying it generates a visual output. It does not describe side effects (e.g., file saving) or further behavioral specifics, but given the annotations already carry the safety profile, this is adequate. No contradiction with annotations is present.

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 a single, dense sentence: 'Boundary-adaptive density discontinuity plot at the RD cutoff.' Every word carries necessary meaning; there is no filler or repetition. It is appropriately sized and front-loaded, placing the key action ('plot') and object ('density discontinuity') first. This is a model of conciseness.

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 tool has a rich schema (17 parameters, 2 required) and an output schema, so the description need not explain return values or parameter formats. However, it does not provide broader context about how this tool fits an RD analysis workflow (e.g., ordering with rddensity, interpretation of boundary-adaptive methods). The phrase 'Boundary-adaptive' is jargon and unexplained Lloyd. Given the complexity and the huge sibling set, the description is minimally complete but leaves contextual gaps.

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?

The input schema provides 100% parameter description coverage, so the baseline is 3. The tool description itself adds no parameter-level meaning beyond the schema. Every parameter (e.g., c, h, p, data_path) already has a dedicated description in the schema, and the one-sentence description does not enrich or clarify them. Thus the description does not compensate or add extra context.

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-resource pair: 'density discontinuity plot at the RD cutoff'. It clearly indicates the tool produces a plot related to density at a regression discontinuity cutoff. However, it does not explicitly distinguish itself from sibling tools like rdplot or rddensity, which also deal with RD plots/density. The meaning is clear enough, but differentiation is left to the tool name and schema.

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 gives no guidance on when to use this tool versus alternatives. It does not mention alternatives, conditions, or exclusions. For example, it does not say 'use this instead of rdplot when examining density at the cutoff' or contrast with rddensity. An agent is left to infer context from the tool name and schema, which is insufficient for decision-making among many RD-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdpowerB
Read-only

Power of an RD design given sample size and effect size. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoCutoff, for data mode.
xNoOutcome and running-variable column names, for data mode.
yNoOutcome and running-variable column names, for data mode.
tauYesHypothesised treatment effect at the cutoff.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
h_leftNoBandwidth fractions (proportion of running-variable support used). Design mode only.
n_leftNoAvailable sample size on each side. Design mode only.
h_rightNoBandwidth fractions (proportion of running-variable support used). Design mode only.
n_rightNoAvailable sample size on each side. Design mode only.
var_leftNoOutcome variance on each side of the cutoff. Design mode only.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
var_rightNoOutcome variance on each side of the cutoff. Design mode only.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
target_powerNoIf set, compute MDE for this target power instead.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already communicates that this is a safe, non-mutating calculation, lowering the behavioral burden on the description. The description adds a modest credibility signal ('certified parity evidence') but does not disclose behavioral details such as the dual design/data modes or the as_handle caching mechanism. There is no contradiction with 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?

The description is appropriately concise, with the core calculation front-loaded in the opening sentence and no padding. The second sentence is a validation claim rather than actionable guidance, so it is not maximally useful, but the text is not bloated.

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?

Given the tool's complexity β€” 18 parameters, data vs. design modes, target_power MDE behavior, and result chaining β€” the main description is thin. However, the rich input schema descriptions and available output schema cover much of the operational detail, leaving clear gaps but not a fundamentally incomplete picture.

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 100%, so the parameter schema already carries the full weight of documenting tau, target_power, n_left/right, data_path, and the other fields. The description itself adds only the general notion of sample size and effect size, with no parameter-level mapping, so the baseline of 3 is appropriate.

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 first sentence clearly names the tool's core function β€” computing power of an RD design given sample size and effect size β€” which is specific and distinct from estimation tools. It does not explicitly differentiate from RD power/sample-size siblings like rdsampsi or pretrends_power, so it stops short of full disambiguation.

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 gives no guidance on when to use rdpower versus related power/sample-size tools, nor does it mention the design-mode versus data-mode distinction or when target_power should be used for MDE. The 'Validation: certified parity evidence' sentence reads as a quality label, not a usage rule, so the agent must infer applicability from the schema and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdrandinfA
Read-only

Randomization inference for regression discontinuity designs. Validation: certified parity evidence. Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff value.
pNoPolynomial order for adjustment (0 = unadjusted).
xYesRunning variable name.
yYesOutcome variable name.
wlNoWindow left bound offset from cutoff (typically negative). The left edge of the window is ``c + wl``.
wrNoWindow right bound offset from cutoff (typically positive). The right edge of the window is ``c + wr``.
covsNoCovariate names to partial out before testing.
seedNoRandom seed for reproducibility.
alphaNoSignificance level.
fuzzyNoActual treatment variable for fuzzy RD. The Wald (IV) estimator is computed within the window.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel weighting (only 'uniform' currently supported for local randomization).uniform
n_permsNoNumber of permutations for Fisher randomization test.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
statisticNoTest statistic: 'diffmeans', 'ksmirnov', 'ranksum', or 'all'. ``'ttest'`` is accepted as an alias for ``'diffmeans'``, matching rdlocrand, where both names select the same statistic.diffmeans
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the read-only annotation by disclosing key assumptions, failure modes, and follow-up actions such as running a density test and reporting bandwidth sensitivity. It also names alternatives and a typical minimum sample size, giving agents concrete behavioral expectations without contradicting annotations.

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 compact, well organized into labeled sections, and front-loads the core purpose. Every section contributes practical guidance, and the structure makes the content easy to scan.

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 complex RD tool, the description covers validation status, assumptions, pre-conditions, failure modes, alternatives, and minimum data requirements, while the rich input schema and output schema fill in the remaining operational details. An agent has enough context to select and invoke the tool appropriately.

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 100%, so the baseline is 3 and the schema already documents every parameter. The description adds context around ideas like local polynomial fitting and bandwidth sensitivity, but it does not need to restate parameter semantics beyond what the schema provides.

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 clearly identifies the method ('randomization inference') and target design ('regression discontinuity designs'), so an agent can infer what the tool computes. However, it does not explicitly differentiate this from closely related sibling tools like rdrobust or rdbwselect beyond listing them as alternatives.

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 provides assumptions, pre-conditions and failure modes, which imply when the tool is applicable, and it lists alternatives. It stops short of explicitly stating 'use this when you need randomization inference near the cutoff' or 'use rdrobust when ...' This is useful context but not crisp routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdrboundsC
Read-only

Rosenbaum sensitivity bounds for RD under local randomization.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff value.
xYesRunning variable name.
yYesOutcome variable name.
wlNoWindow left bound offset (typically negative).
wrNoWindow right bound offset (typically positive).
seedNoRandom seed.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_permsNoNumber of permutations for p-value computation.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
statisticNoTest statistic (ranksum is standard for Rosenbaum bounds).ranksum
gamma_listNoOdds ratios to evaluate. Defaults to [1, 1.5, 2, 2.5, 3, 4, 5]. gamma=1 is pure randomization; gamma>1 allows confounding.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already indicates the tool is a safe read operationulating no side effects. The description adds no further behavioral contextβ€”such as that it performs permutation-based inference, returns a sensitivity table, or requires a pre-specified window. Since annotations carry the safety profile, the description's lack of additional behavior detail keeps this at a low but not contradictory level.

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 a single, dense noun phrase with zero filler words. It conveys the core purpose in six words and earns its place. There is no structural waste or 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?

Even though the schema and output schema are rich, the description itself is too terse to orient an agent about when to choose this tool among the dozens of related sensitivity and RD tools. It does not explain what 'under local randomization' implies for inputs (e.g., the need for a window or running variable), nor does it reference typical workflows or alternatives. A more complete description would mention usage context and relationship to siblings.

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?

The schema describes all 15 parameters with 100% coverage, so the heavy lifting is done by the schema. The description itself adds no parameter-specific meaning, but per the baseline for high schema coverage, a score of 3 is appropriate. It does not mislead or omit information beyond what the schema already provides.

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 'Rosenbaum sensitivity bounds for RD under local randomization' clearly identifies the statistical method and the specific application domain (regression discontinuity under local randomization). It distinguishes from siblings like rosenbaum_bounds and rdwinselect by adding the 'under local randomization' qualifier. However, it lacks an explicit verb such as 'computes' or 'estimates', making it slightly less directive than a full action-resource statement.

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 provides no guidance on when to use this tool versus the many related siblings (e.g., rosenbaum_bounds, rosenbaum_gamma, rdwinselect). It does not state conditions, exclusions, or mention that it is appropriate only when working with RD designs under local randomization. An agent must infer usage solely from the name and schema, which is insufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdrobustA
Read-only

Sharp or fuzzy regression-discontinuity with robust bias-corrected CIs (Calonico-Cattaneo-Titiunik 2014). Use fuzzy= for IV-style fuzzy RD. Validation: certified evidence with scoped limitations. Known limitations: observation-level weights are not yet supported -- passing a weight column raises NotImplementedError; R-parity certification applies to bwselect='cct' or manually matched h/b bandwidths; the dependency-light default bwselect='mserd' uses StatsPAI's calibrated selector and can differ from rdrobust::rdrobust defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoCutoff value.
xYesRunning variable column.
yYes
fuzzyNoTreatment column for fuzzy RD (optional).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNotriangular
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses several important behavioral traits beyond the readOnlyHint annotation: observation-level weights are unsupported and raise NotImplementedError, R-parity certification only applies to specific bandwidth selectors, and the default bwselect='mserd' differs from the canonical R package. This is valuable, specific context that would prevent misuse.

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 two sentences plus a dense limitations sentence, front-loaded with the core method. It is compact but the limitations paragraph packs multiple issues into one run-on sentence, making it less scannable. Still, it earns 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?

For a complex tool with an output schema present, the description covers the method, limitations, and validation, but omits any guidance on tool selection (covered by usage_guidelines) and references parameters not in the schema. The output schema handles return values, so that absence is fine, but the misleading parameter references and lack of selection context make it incomplete.

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?

The input schema already documents 82% of parameters. The description augments the fuzzy= parameter by calling it 'IV-style fuzzy RD,' and explains the default bandwidth selector behavior. However, it also references bwselect, h, and b, which are not present in the input schema, potentially misleading an agent into passing unsupported parameters. Given the high schema coverage, the description's net addition is modest and partly confusing.

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 clearly identifies the tool as implementing sharp or fuzzy regression-discontinuity with robust bias-corrected CIs, citing the methodology. It also notes the fuzzy= parameter for IV-style fuzzy RD, but does not explicitly differentiate it from sibling RD tools such as rdd or rdplot.

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 explicit guidance on when to choose this tool over alternatives. The description provides internal usage notes (e.g., 'Use fuzzy=') but does not mention any exclusion criteria or alternative tool names. It states limitations, but that does not help an agent select among sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rd_robustness_tableC
Read-only

Sweep over (kernel, bwselect, polynomial, donut) and return a

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoc parameter (float).
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
covsNocovs parameter (Optional[List[str]]).
alphaNoSignificance level for confidence intervals and tests.
fuzzyNofuzzy parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
donutsNoSpecification grid.
clusterNoCluster identifier column for clustered standard errors.
kernelsNoSpecification grid.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bwselectsNoSpecification grid.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
polynomialsNoSpecification grid.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint and openWorldHint annotations cover the safety profile, so the description does not need to restate that. But the description adds little behavioral context: it says 'sweep' and then stops, without explaining that this runs multiple RD fits, what the returned object contains, or how it relates to a single rdrobust call. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short, but it is under-specified rather than concise: the final clause is cut off ('return a'). A complete sentence naming the output and purpose would be more efficient for an agent than a fragment that forces inference from the tool name.

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?

Given 17 parameters, 3 required inputs, and a large family of RD-related sibling tools, the description needs at least a complete statement of what is returned and when this robustness sweep is appropriate. The output schema covers return structure, but the description fails to give the operational context needed to select and invoke the tool confidently.

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 100%, so the baseline is 3. The description adds mild value by naming the four swept dimensions (kernel, bwselect, polynomial, donut), but it does not explain their meaning or how they interact beyond what the schema's 'Specification grid' entries already convey.

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 action β€” sweeping over kernel, bwselect, polynomial, and donut β€” so it is not a pure tautology. However, the sentence is truncated after 'return a', leaving the output object unspecified. It also does not differentiate this tool from nearby RD siblings such as rdrobust, rdsummary, or rdbwselect.

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 about when to use this tool versus alternatives, no when-not-to-use note, and no mention of prerequisites or typical workflow placement. The only implied usage is that the tool varies specification dimensions, but that is not explicit enough to route an agent reliably.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdsampsiB
Read-only

Minimum sample size for a given power in an RD design. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoc parameter (float).
xNoPrimary running variable, regressor, or feature input for this estimator.
yNoOutcome variable column name or outcome array.
tauYesQuantile level or target treatment-effect index.
alphaNoSignificance level for confidence intervals and tests.
ratioNo``n_right / n_left``. Default 1.0 assumes equal allocation.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
h_leftNoh_left parameter (float).
h_rightNoh_right parameter (float).
var_leftNovar_left parameter (float).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
var_rightNovar_right parameter (float).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
target_powerNotarget_power parameter (float).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a read-only operation, so the description does not need to restate safety. The description adds only a terse purpose and an opaque 'Validation: certified parity evidence' note, which provides limited behavioral context but does not contradict the readOnlyHint.

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 short and front-loads the essential purpose. The 'Validation: certified parity evidence' sentence is cryptic and arguably not useful, but the overall definition is compact and not bloated.

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 tool with 17 parameters and many closely related RD siblings, this description is too thin. It does not explain when to use it, how tau relates to the calculation, which parameters are needed, or how it differs from rdpower and related tools.

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 100%, so the baseline is 3 even though the description itself adds no parameter-level meaning. The descriptions in the schema are generic and the tool description does not clarify which parameters are actually relevant for an RD sample-size calculation.

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 clearly communicates that this tool computes the minimum sample size for a target power in an RD design. However, it uses a noun phrase rather than an explicit verb and does not directly distinguish itself from closely related siblings such as rdpower or rdms.

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 about when to use this tool versus alternatives like rdpower, rdsensitivity, or other RD power/sample-size tools. The description provides no prerequisites, no exclusions, and no conditions that would help an agent choose it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdsensitivityC
Read-only

Sensitivity of RD estimates across different window widths.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff value.
pNoPolynomial order for adjustment.
xYesRunning variable name.
yYesOutcome variable name.
plotNoplot parameter (bool).
seedNoRandom seed.
alphaNoSignificance level.
wlistNoSymmetric half-window widths to evaluate. If None, an evenly-spaced grid is generated automatically.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_permsNoNumber of permutations per window.
nwindowsNoNumber of windows when ``wlist`` is None.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
statisticNoTest statistic for inference.diffmeans
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description restates the tool's focus but adds no behavioral details beyond the annotated readOnlyHint and openWorldHint. It does not mention output structure, side effects, or required inputsβ€”though the output schema covers returns. It does not contradict 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?

The description is a single concise phrase with no redundancy. It is front-loaded with the key concept, though it is a fragment rather than a full sentence, which slightly reduces its structural completeness.

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 tool with 17 parameters and many RD siblings, the description is too short to orient an agent. It does not explain when to use this tool, how it differs from rdbwsensitivity or rd_robustness_table, or what workflow it fits into. The output schema covers returns, but the usage context is missing.

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?

The schema description coverage is 100%, so the parameters are well-documented. The description adds no additional meaning to any parameter and does not compensate for any missing schema detail.

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 (RD estimates) and the variation (window widths), which conveys the core function. However, it is a noun phrase without a verb and does not explicitly distinguish it from closely related tools like rdbwsensitivity or rd_robustness_table.

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 mention of when to use this tool or when to prefer an alternative. The description is purely a statement of function and gives no criteria to select it over the many RD sensitivity siblings in the toolset.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdsummaryC
Read-only

One-stop RD diagnostic battery.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoCutoff.
pNop parameter (int).
xYesOutcome and running variable.
yYesOutcome and running variable.
covsNoPre-treatment covariates for balance test.
fullNoRun extended diagnostics (honest CI, power, placebos).
plotNoGenerate a multi-panel diagnostic plot.
alphaNoSignificance level for confidence intervals and tests.
fuzzyNoTreatment variable for fuzzy RD.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function used for weighting or smoothing.triangular
verboseNoPrint formatted summary to console.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already convey read-only safety, but the description adds no concrete behavioral context beyond the vague idea of a battery. It does not say what the battery includes, whether output can be large, or how as_handle caching changes behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is short and has no filler, but it is a tagline rather than a structured description. For a 17-parameter tool, this is under-specification rather than economical completeness.

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 rich parameter schema and output schema carry some burden, but the description omits the central decision of which RD diagnostics are included and when to choose this aggregator over a single-purpose sibling. This is a critical gap in a large specialized sibling set.

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 high, giving a baseline, but the required x and y parameters are both documented as 'Outcome and running variable,' leaving an agent unable to tell which is the running variable and which is the outcome. The tool description adds no clarification, and p remains unhelpful as 'p parameter (int).'

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 phrase identifies the domain as RD diagnostics and signals a bundled battery, but it lacks an explicit verb and does not say which diagnostics are included. It also fails to differentiate rdsummary from single-purpose RD siblings such as rdsensitivity or rd_dashboard.

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 named alternative. The word 'one-stop' only weakly implies comprehensive use, which is insufficient among the many RD-specific sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rdwinselectB
Read-only

Data-driven window selection for local randomization RD. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoRD cutoff value.
pNoPolynomial order for adjustment.
xYesRunning variable name.
covsNoCovariate names to test balance for. If None, uses quantiles of the running variable as pseudo-covariates.
seedNoRandom seed.
wminNoMinimum half-window width. Defaults to the smallest gap between adjacent observations near the cutoff.
alphaNoSignificance level for balance (lenient by default to be conservative about window selection).
wstepNoWindow increment. Defaults to ``(max_range - wmin) / nwindows``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
nwindowsNoNumber of windows to evaluate.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
statisticNoTest statistic for balance testing.diffmeans
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds that the tool performs validation and reports 'certified parity evidence,' but this phrase is unexplained and no other behavioral details are disclosed. There is no contradiction with annotations.

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 description is short and front-loaded with the main purpose, but the second sentence is cryptic and introduces jargon ('certified parity evidence') without explanation. It is concise but not every sentence clearly earns 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?

The schema and output schema carry much of the burden for a 16-parameter tool, and the annotations establish read-only behavior. However, the description is minimal: it lacks guidance on how this relates to sibling RD tools like rdbwselect and does not clarify what 'certified parity evidence' means. It is adequate but has clear gaps.

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 100%, so all 16 parameters are documented in the input schema itself. The description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.

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 clearly identifies the resource and action: data-driven window selection for local randomization RD. It names a specific RD subfield, which helps an agent understand the tool's purpose, though it does not explicitly distinguish it from sibling tools like rdbwselect or rdms. The phrase 'Validation: certified parity evidence' adds domain flavor but is 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?

There is no guidance about when to use this tool versus alternatives. It does not mention rdbwselect, rdms, or any other sibling, and it gives no conditions or exclusions. Usage must be inferred entirely from the tool name and the first clause.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recommendA
Read-only

Method advisor: given a dataset + research question, recommends a ranked list of estimators with reasoning, precondition checks, and a full suggested workflow. This is the first call an agent should make if it doesn't know which estimator to run. Supports DAG input, mediator / proxy / principal-strata variables, and optional resampling-stability verification.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column.
idNoUnit identifier (panel).
timeNoTime column (panel / DID).
cutoffNoRD cutoff value.
designNoOverride auto-detected design.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
verifyNoIf True, run resampling-stability checks on top recommendations.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentNoTreatment / exposure column.
covariatesNoCovariate columns.
instrumentNoInstrumental variable.
running_varNoRunning variable (RD).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint = true, so the agent knows this is risk-free. The description adds meaningful behavioral detail beyond that: the tool returns reasoning, precondition checks, and a full suggested workflow, and can optionally run resampling-stability verification. This gives the caller a realistic picture of what invoking the tool will produce.

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 sentences with no filler. The first sentence states the core purpose, the second gives actionable placement in the agent's workflow, and the third enumerates important supported capabilities. Every sentence earns its place.

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 complex 16-parameter tool with an output schema and read-only annotations, the description is complete enough. It explains the role of the tool, its output shape, supported analysis scenarios, and how it fits into a multi-call workflow. The rich input schema and output schema cover the remaining details.

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 input schema already documents all 16 parameters with 100% coverage, so the baseline is 3. The description adds value beyond the schema by highlighting DAG input and mediator/proxy/principal-strata support, which are not obvious from individual parameter names, and by noting the optional resampling-stability verification that maps to the 'verify' parameter.

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 ('recommends'), a specific resource ('a ranked list of estimators'), and the core job: given dataset + research question. It also differentiates from siblings by positioning itself as the first call an agent should make when uncertain which estimator to run.

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 says when to use this tool: 'This is the first call an agent should make if it doesn't know which estimator to run.' It also sketches supported scenarios (DAG input, mediator/proxy/principal-strata variables, optional verification). It stops short of naming specific alternatives or exclusion conditions, but the guidance is clear enough for routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recommend_benchmarkB
Read-only

Score sp.recommend / sp.audit against the ground-truth corpus.

ParametersJSON Schema
NameRequiredDescriptionDefault
fitNoAlso run the dynamic audit pass (fit each top-1 estimator and run ``sp.audit`` on the result). Set ``False`` for a faster recommend-only run.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
corpus_pathNoPath to an alternative corpus YAML. Defaults to the bundled corpus.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that this tool evaluates two specific tools against a ground-truth corpus, but it does not disclose whether models are fit, results are cached, or other side effects occur. No contradiction with annotations.

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 sentence with zero filler. The action ('Score'), target ('sp.recommend / sp.audit'), and context ('ground-truth corpus') are all front-loaded, and nothing extraneous is included.

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 tool with a rich output schema and detailed parameter descriptions, the core purpose is stated clearly. However, the description omits decision context such as when to prefer this over verify_benchmark or verify_recommendation, and what 'ground-truth corpus' concretely means. This is a moderate gap given the enormous sibling list.

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 100%, and the parameter descriptions are already detailed (e.g., fit, detail, as_handle, data_path). The tool description adds no parameter-level meaning beyond the schema, so the baseline of 3 is appropriate.

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 uses a specific verb ('Score') with a clear resource ('sp.recommend' / 'sp.audit') and context ('against the ground-truth corpus'), making it distinguishable from the many estimation tools like recommend and audit. However, it does not differentiate from similarly named verification siblings like verify_benchmark or verify_recommendation.

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 gives no guidance on when to use this tool versus alternatives, nor does it mention exclusions or prerequisites. The phrase 'against the ground-truth corpus' loosely implies a benchmarking context, but there is no explicit routing information, which is especially important given the large sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

regressA
Read-only

Fit an OLS regression with robust (HC1) or clustered SEs. Input is a Wilkinson-style formula like 'y ~ x1 + x2'. Use this for baseline specifications or covariate-adjusted RCT analyses. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNohc1
clusterNoColumn name for cluster-robust SEs.
formulaYesR-style formula, e.g. 'y ~ x1 + x2'
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds method details (HC1, clustered SEs) but does not disclose any side effects, auth needs, or other behavioral traits. The cryptic 'Validation: certified parity evidence' adds little. Given annotations, the description provides some context but not rich behavioral disclosure.

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 two sentences, front-loaded with the core purpose and usage context. The validation note is somewhat cryptic but does not waste many words. It is appropriately sized for a tool with a rich schema.

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?

Given the output schema exists and schema coverage is high, the description does not need to explain return values. It covers the essential usage and primary parameters. It is complete enough for an agent to call correctly, though it omits details about as_handle or detail which are in the schema. Overall adequate.

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 89%, so most parameters are already described. The description adds meaning to key parameters: it explains the formula format and hints at robust/clustered SE behavior. It does not cover all 9 parameters but adds value beyond the schema for the most important ones, raising it above baseline 3.

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 clearly states the tool fits an OLS regression with robust or clustered SEs, and specifies the formula input style. It implicitly differentiates from siblings like feols or hdfe_ols by mentioning 'baseline specifications or covariate-adjusted RCT analyses', but does not explicitly name alternatives. This is clear but not fully distinguishing.

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 a clear context for when to use: 'baseline specifications or covariate-adjusted RCT analyses'. However, it does not explicitly state when not to use it or mention alternative tools, so it lacks exclusions. This meets the 'clear context, no exclusions' level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replicateC
Read-only

Load a famous dataset and a step-by-step replication guide.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesReplication key (see ``sp.list_replications()``).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
simulatedNoOverride the entry's default data source. ``True`` forces a simulated replica; ``False`` forces the bundled real CSV (only valid for entries where ``has_real_data`` is True). Default ``None`` uses whatever the entry declares (currently real for ``card_1995`` and ``abadie_2010``).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish readOnlyHint=true, and the description only says it loads a dataset and guide, adding little beyond that. It fails to disclose material behaviors visible in the schema, such as as_handle caching a fitted result on the server and data_path accepting arbitrary URLs or files, so the description under-represents what the tool can actually do.

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 one clean, front-loaded sentence with no filler. It is appropriately brief, though it is arguably too sparse for a tool with eight parameters and several distinct behaviors, so it does not earn a 5.

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?

Given the tool's complexity, the huge sibling list, and rich schema, a nine-word description is not enough for an agent to know when to call it, how to obtain a key, when to use custom data_path versus result_id, or that as_handle can fit and cache a result. The output schema and parameter docs compensate partially, but the high-level description still leaves critical orientation gaps.

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 100% and the schema already explains key, detail, data_path, as_handle, simulated, and the rest in detail, so the description does not need to repeat them. The description adds no parameter-level meaning beyond implying that key selects a dataset/guide, which matches the minimum-viable baseline.

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 uses a concrete verb ('Load') and names two resources: a famous dataset and a replication guide, so an agent can roughly tell this apart from structural-analysis tools like synth or regress. It does not explicitly name list_replications as the source of keys or clarify that 'famous dataset' is selected via the required key, which keeps it from 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 guidance on when to use replicate versus list_replications or other dataset-loading alternatives, and no mention of when to pass data_path versus result_id. An agent must infer the usage pattern from the schema's key description alone, which is not enough for a tool with this many siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reset_testC
Read-only

Ramsey RESET test for functional form misspecification. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
powersNoInclude y2, y3, ..., y^powers in the auxiliary regression.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detailβ€”it identifies the procedure and asserts validation, but does not mention defaults such as detail='agent', return shape, or assumptions. readOnlyHint already covers safety, so the description provides almost no extra transparency.

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?

Very short and front-loaded, with no redundant prose. The second sentence is cryptic and arguably does not earn its place, keeping it from a top score.

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 9-parameter statistical test with close sibling tools, the description is too sparse to guide selection or correct invocation. The output schema fills some gaps, but context around when to run the test and what assumptions/inputs matter is missing.

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?

Parameter descriptions in the schema cover all 9 parameters (100% coverage), so the description is not obligated to add much. It contributes no additional semantics about x, y, powers, or data loading, staying at the baseline.

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 that it performs the Ramsey RESET test, a specific diagnostic for functional form misspecification. This clearly identifies its statistical role, but it does not contrast with nearby alternatives such as functional_form_test or yatchew_linearity_test.

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 is given about when to prefer RESET over the many related specification/diagnostic tools. The second sentence is a validation claim, not a selection rule or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rif_decompositionA
Read-only

RIF Oaxaca-Blinder decomposition (FFL 2009, Section 5). Validation: certified parity evidence. Assumptions: The recentered influence function for the chosen distributional statistic (quantile, variance, Gini, etc.) is a valid first-order approximation, so its expectation recovers the statistic (Firpo-Fortin-Lemieux 2009); The aggregate Oaxaca-Blinder split into explained (endowments) vs unexplained (coefficients) requires no omitted covariates correlated with group and a correctly specified RIF regression; Detailed (per-covariate) decompositions assume path/normalization invariance and, for the unexplained part, an ignorable reference-group choice. Pre-conditions: group is a binary 0/1 indicator and reference in {0,1}; Covariates and the target distributional statistic are well-defined in both groups; Both groups have enough observations to fit the RIF regression at the chosen statistic. Failure modes: RIF for a tail quantile is noisy where the density is near zero, giving unstable shares -> Avoid extreme quantiles or smooth/bootstrap the density estimate underlying the RIF; Limited covariate overlap between groups makes the explained component unreliable (specification error) ->...

ParametersJSON Schema
NameRequiredDescriptionDefault
tauNoQuantile level or target treatment-effect index.
groupYesBinary (0/1) group indicator column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
formulaYesModel formula using patsy/R-style syntax.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
referenceNoWhich group's coefficients to use as the reference (0 or 1).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
statisticNostatistic parameter (StatisticKind).quantile
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
quantile_conventionNoQuantile RIF convention for ``statistic="quantile"``. Use ``"dineq"`` for R ``dineq::rif`` parity.statspai

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds meaningful behavioral context beyond the annotations: it discloses assumptions about RIF validity, pre-conditions for reliable estimation, and failure modes such as noisy tail-quantile RIF and unreliable explained components under limited overlap. No contradiction with annotations is present.

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 description is organized into labeled sections (Validation, Assumptions, Pre-conditions, Failure modes), which aids scanning. However, the 'Validation: certified parity evidence' line is vague and contributes little, the failure-mode section is truncated with '->...', and the overall length is heavy relative to the schema's own detailed parameter coverage.

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 high-complexity statistical tool, the description covers assumptions, pre-conditions, and failure modes, and an output schema exists to explain return values. It lacks a plain-language summary of what the decomposition returns and does not give a concrete example, but these are largely covered by the rich schema, making the description reasonably complete.

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 100%, so all 12 parameters are documented. The description adds marginal context (e.g., group/reference binary constraints, the chosen distributional statistic), but most of this is already present in the schema descriptions, so the value added is limited and stays at the baseline for full schema coverage.

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 clearly states the tool performs a RIF Oaxaca-Blinder decomposition (FFL 2009, Section 5), naming both the method and a reference. It is not a tautology and identifies the resource, but it does not explicitly differentiate itself from sibling decomposition tools such as oaxaca, dfl_decompose, or melly_decompose.

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 provides assumptions, pre-conditions, and failure modes that clarify when the decomposition is valid (e.g., binary group indicator, enough observations, no omitted covariates) and warns against extreme quantiles and limited covariate overlap. However, it never mentions alternative tools or explicitly states when to prefer rif_decomposition over siblings like oaxaca or fairlie, leaving tool-selection guidance implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rifregC
Read-only

RIF regression (Firpo, Fortin & Lemieux 2009). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
tauNoQuantile level (default 0.5 = median UQPE).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
formulaYes``"y ~ x1 + x2"`` style.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
statisticNostatistic parameter (StatisticKind).quantile
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
quantile_conventionNoQuantile RIF convention for ``statistic="quantile"``.statspai

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already provide readOnlyHint=true, so the description carries a lower burden, but it still adds no behavioral context: nothing about fitting state, caching with as_handle, output payload, or what 'certified parity evidence' actually guarantees. It does not contradict the annotations, but it also does not enrich them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is short, but the brevity comes from omission rather than disciplined conciseness. The first clause is tautological, and the second sentence about validation does not earn its place because its relevance is unclear.

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?

Even though the schema and output schema fill in many details, the tool description still fails to explain the method family, when to choose it, or how it relates to close siblings. For a 10-parameter estimator in a large sibling set, a one-line label plus a cryptic validation note is not enough.

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 100%, and every parameter already has a rich explanation, including defaults, enum meanings, and payload depth. The description itself adds no parameter-level meaning, so the schema carries the burden and baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description essentially expands the tool name: 'RIF regression' restates 'rifreg' and adds a citation, but no main verb or outcome (e.g., 'estimates', 'computes unconditional quantile partial effects'). It also does not distinguish this from sibling tools like rif_decomposition or qreg.

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 rifreg versus alternatives, nor any indication of when to set statistic='quantile' vs 'variance' vs 'gini'. The phrase 'Validation: certified parity evidence' reads as certification boilerplate, not usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ri_testC
Read-only

Randomization inference p-value. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
seedNoRandom seed.
statNoTest statistic: - ``'diff_means'``: difference in means (Y_bar_1 - Y_bar_0) - ``'ks'``: Kolmogorov-Smirnov statistic - ``'t'``: t-statistic - A callable ``f(Y, D) -> float`` for custom statistics.diff_means
alphaNoSignificance level for confidence intervals and tests.
treatYesBinary treatment indicator (0/1).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster-level permutation (permute treatment at cluster level).
n_permsNoNumber of random permutations. Use 10000+ for publications.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a safe read-only operation, so the description does not need to cover side effects. It adds only a cryptic 'validated evidence tier' label and does not describe permutation behavior, assumptions, or what the p-value tests, but the annotations and output schema partially compensate.

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 description is short and front-loaded with the core purpose. However, the second sentence is telegraphic, partially tautological ('Validation: validated evidence tier'), and does not clearly earn its place.

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 13-parameter statistical test in a large sibling family, the description omits when to use the tool, the null hypothesis, and the permutation mechanism. The schema and output schema cover parameters and return shape, but not tool-selection context.

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 100%, so the baseline is 3 and the description need not repeat parameter documentation. The description itself adds no parameter-level meaning beyond the general concept of a p-value.

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 phrase 'Randomization inference p-value' states the estimator and the output clearly enough for an agent to identify this as a permutation-based hypothesis test. It lacks an explicit verb and does not explicitly differentiate from sibling testing tools, 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?

No guidance is given on when to use ri_test versus sibling tools such as wild_cluster_bootstrap, fisher_exact, or anderson_rubin_test. The second sentence about 'validated evidence tier' reads as output metadata rather than usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rkdA
Read-only

Regression Kink Design estimator (Card et al., 2015). Assumptions: Conditional expectations of potential outcomes are continuous at the cutoff; Units cannot precisely manipulate the running variable around the cutoff (no sorting); For fuzzy designs: monotonicity of treatment take-up at the cutoff. Pre-conditions: A continuous running/forcing variable with a known cutoff that (sharply or fuzzily) assigns treatment; Enough observations in a neighbourhood of the cutoff to fit a local polynomial. Failure modes: Density of the running variable jumps at the cutoff (manipulation / sorting) -> Run a McCrary / density test (rdplotdensity); if manipulation is present the design is invalid near the cutoff; Estimate swings with the bandwidth -- results are not robust -> Report a bandwidth-sensitivity curve and use a data-driven MSE-optimal bandwidth. Alternatives: sp.rdrobust, sp.rdrandinf, sp.rdbwselect. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoKink point (cutoff).
hNoBandwidth. If None, an MSE-optimal bandwidth is selected automatically.
pNoLocal polynomial order (1 = local linear, the default and most common choice for RKD).
xYesRunning variable name.
yYesOutcome variable name.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
kernelNoKernel function: 'triangular', 'epanechnikov', or 'uniform'.triangular
clusterNoCluster variable name for clustered standard errors.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentNoTreatment variable for fuzzy RKD. If None, estimate the reduced-form kink in E[Y|X] (sharp / reduced-form RKD).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true and openWorldHint=false. The description adds substantial behavioral context beyond that: three named statistical assumptions, failure modes (density jumps at cutoff, bandwidth sensitivity), consequences, and remediation actions. This gives the agent a realistic model of when results are trustworthy, which annotations alone cannot convey.

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 long but every section earns its place: assumptions, pre-conditions, failure modes with remedies, alternatives, and minimum sample size. It is clearly structured with labeled sections and front-loaded with the method's identity, so an agent can extract the needed information quickly.

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 complex estimator with 15 parameters, the description covers what the tool does, the statistical assumptions required for validity, input pre-conditions, failure modes with concrete remediations, sibling alternatives, and a sample-size heuristic. Since an output schema exists, return-value documentation is already handled elsewhere; nothing needed for correct invocation 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 100%, so baseline is 3. The description adds meaning beyond the schema by linking 'MSE-optimal bandwidth' to parameter h, 'local polynomial' to p, 'treatment take-up' to the fuzzy-design treatment parameter, and 'known cutoff' to c. This contextualizes key parameters without restating their schema definitions.

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 identifies a specific method ('Regression Kink Design estimator') with a citation (Card et al., 2015), making the tool's function immediately clear. It also names sibling alternatives (sp.rdrobust, sp.rdrandinf, sp.rdbwselect), distinguishing this estimator from related regression-discontinuity tools in the large sibling list.

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?

The description provides explicit pre-conditions (continuous running variable, known cutoff, enough observations near cutoff), enumerates alternatives, and gives failure-mode-triggered guidance (run rdplotdensity if sorting suspected; report bandwidth-sensitivity curve if estimates swing). It even states a conditional when-not: 'if manipulation is present the design is invalid near the cutoff', plus a typical minimum N of 500.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rlassoC
Read-only

Rigorous Lasso / post-Lasso -- a faithful port of hdm::rlasso.

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesDesign matrix of candidate covariates (``p`` may exceed ``n``).
yYesResponse.
rngNoOnly used when ``X.dependent.lambda`` simulation is requested.
postNoIf ``True``, re-estimate the selected support by OLS (post-Lasso).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
controlNoOverrides for ``numIter`` (default 15), ``tol`` (default 1e-5) and ``threshold`` (default ``None``).
penaltyNoOverrides for ``homoscedastic`` (``True`` / ``False`` / ``"none"``), ``X.dependent.lambda`` (bool), ``c`` (slack, default 1.1), ``gamma`` (default ``0.1/log(n)``), ``lambda.start`` and ``numSim``. Defaults reproduce hdm exactly.
colnamesNoNames for the columns of ``X`` (default ``V1..Vp``).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
interceptNoCenter ``X`` and ``y`` and report an intercept on the original scale.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds one useful behavioral cue: it is a 'faithful port' of hdm::rlasso, implying default behavior and estimation semantics match that R package. However, it does not describe other behavioral aspects such as convergence behavior, runtime, or what exactly the returned object contains.

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 description is a single, compact sentence with no filler, which is good for conciseness. But it is also sparse for a 14-parameter tool with a large sibling family; it front-loads the port identity yet omits any orientation about what the model does or when to use it. It is not over-written, but it is under-specified.

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?

Given the tool's complexity (14 parameters, nested objects, many closely related siblings) the one-line description is not enough. The schema and output schema carry parameter and return-value details, but the description fails to provide context on how this tool fits into the wider lasso workflow or why an agent should invoke it over rlasso_iv, rlassologit, or rlasso_effect.

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 100%, so the schema carries full parameter documentation. The description itself adds no parameter-level meaning; it only names the method. Per the rubric, a baseline of 3 is appropriate when the schema does the heavy lifting.

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 method and resource: 'Rigorous Lasso / post-Lasso' and ties it to the R package hdm::rlasso. It is not a tautology and clear to a statistically literate agent, but it never states an explicit verb like 'fit' and does not explicitly distinguish itself from sibling tools such as rlasso_iv or rlassologit.

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 rlasso over alternatives. Siblings include closely related estimators (rlasso_iv, rlassologit, rlasso_effect), and the description does not mention when the linear/post-Lasso variant is appropriate or when another tool should be used. Nothing tells the agent about prerequisites, data structure expectations, or fallbacks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rlasso_effectB
Read-only

Effect of d on y after Lasso-selecting controls x.

ParametersJSON Schema
NameRequiredDescriptionDefault
dYesd parameter (Union[np.ndarray, pd.Series, str]).
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
I3NoAmelioration set forced into the control set (double-selection only) -- hdm's ``I3`` argument.
postNoPost-Lasso inside the selection steps.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoSee the module docstring.partialling out
controlNoForwarded to :func:`statspai.rlasso.rlasso`.
penaltyNoForwarded to :func:`statspai.rlasso.rlasso`.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, so the agent knows this is a safe operation. The description adds one meaningful behavioral detail: Lasso-based control selection happens before estimating the effect. It does not disclose estimator assumptions, required preprocessing, or edge-case behavior, but with annotations covering the safety profile, this is acceptable.

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 a single front-loaded sentence with no filler, efficiently communicating the core purpose. It is appropriately terse, though it omits potentially useful context such as estimator family or relationship to sibling tools.

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 14 parameters but only 3 required, detailed schema descriptions, an output schema, and read-only annotations, much of the invocation detail is covered elsewhere. However, the description leaves ambiguity about whether this tool handles a single treatment effect versus multiple effects (as in `rlasso_effects`) and what model family is assumed, so it is not fully complete for an agent selecting among near-identical siblings.

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 100%, which establishes a baseline of 3. The description adds role semantics by mapping `d` to the treatment, `y` to the outcome, and `x` to the controls selected by Lasso, which is more informative than the schema's generic phrasing such as 'd parameter' and 'Primary running variable, regressor, or feature input.'

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 purpose: estimating the effect of `d` on `y` while using Lasso to select controls from `x`. This is clear and non-tautological. It does not explicitly distinguish itself from near-identical siblings like `rlasso_effects` or `rlassologit_effect`, 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?

No guidance is given about when to prefer this tool over alternatives such as `rlasso_effects`, `rlassologit_effect`, `rlasso_iv`, or `lasso_select`. The phrase 'after Lasso-selecting controls' weakly implies a high-dimensional-control setting, but there is no explicit when/when-not routing or mention of alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rlasso_effectsC
Read-only

Estimate the effect of each targeted column of X on y. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesFeature matrix or covariate DataFrame.
yYesOutcome variable column name or outcome array.
postNopost parameter (bool).
indexNoindex parameter (Optional[Sequence[int]]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimator or algorithm variant to use.partialling out
controlNocontrol parameter (Optional[Dict[str, Any]]).
penaltyNopenalty parameter (Optional[Dict[str, Any]]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false. The description adds a vague 'Validation: validated evidence tier...' line, but it does not explain what this means operationally or what the tool actually returns beyond that. With annotations covering safety, the description contributes little 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences) and front-loaded with the purpose, but the second sentence is cryptic and adds little value. It is not overly verbose, yet it sacrifices substance for brevity.

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?

Given the tool has 13 parameters, an output schema, and a complex sibling set, the description is far too minimal. It omits any guidance on data handling, method variants, or chaining (as_handle/result_id), leaving the agent to infer from the schema alone.

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 100%, so parameters are already documented. The description adds no additional meaning to X, y, or any other parameter; it only restates the high-level purpose. Baseline 3 is appropriate.

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 ('Estimate') and resource (effect of each targeted column of X on y). The purpose is clear, but it does not distinguish itself from siblings like rlasso_effect or rlassologit_effect, leaving the agent to infer which one to pick.

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. The description does not mention scenarios, prerequisites, or contrasts with similar effect-estimation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rlasso_ivB
Read-only

Instrumental-variables estimation with rigorous-Lasso selection.

ParametersJSON Schema
NameRequiredDescriptionDefault
dYesname).
xNoPrimary running variable, regressor, or feature input for this estimator.
yYesname).
zYesInstrument, proxy, or auxiliary variable used by this estimator.
postNoPost-Lasso (OLS refit) inside every selection step.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
controlNoForwarded to :func:`statspai.rlasso.rlasso` (penalty level, loadings, iteration controls).
penaltyNoForwarded to :func:`statspai.rlasso.rlasso` (penalty level, loadings, iteration controls).
select_XNoLasso-select among the controls (partialling-out).
select_ZNoLasso-select among the instruments.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
interceptNoPassed to the underlying ``rlasso`` first stages.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description does not contradict this. The description adds the 'rigorous-Lasso selection' behavior, which is useful, but it does not disclose details such as whether the function returns a fitted object, whether it performs partialling-out, or how selection is structured. With annotations covering the safety profile, 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?

The description is a single concise sentence that front-loads the core method and its distinguishing feature. It is efficient and not padded, though it could have added a bit more context without becoming verbose.

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?

Given the tool's complexity (16 params, nested objects, output schema present), the description is minimal but the schema and output schema fill many gaps. However, the description does not explain the intended workflow (e.g., data_path + column names, as_handle chaining) or how this tool relates to rlasso_effect/rlasso_effects siblings. It is adequate but not complete.

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 100%, so the schema already documents all 16 parameters. The description adds no parameter-level meaning beyond the schema, but the schema descriptions are fairly informative (e.g., 'Post-Lasso (OLS refit) inside every selection step'). Baseline 3 is correct when the schema carries the burden.

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 'Instrumental-variables estimation with rigorous-Lasso selection' clearly identifies the method (IV estimation) and the distinguishing feature (rigorous-Lasso selection). It is specific enough to differentiate from plain 'iv' or 'ivreg' siblings, though it does not explicitly name a sibling or elaborate on the estimator's role.

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 usage for IV settings with many instruments/controls where Lasso selection is needed, but it does not explicitly state when to prefer this over alternatives like ivreg, lasso_iv, or rlasso_effect. No exclusions or alternative tool names are given, so the agent must infer the context from the method name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rlassologitC
Read-only

Logistic rigorous (post-)Lasso -- a faithful port of hdm::rlassologit.

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesFeature matrix or covariate DataFrame.
yYesOutcome variable column name or outcome array.
postNoIf ``True``, refit the selected support by *unpenalized* logistic regression (post-Lasso); else keep the glmnet-penalized fit.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
controlNo``threshold`` -- coefficients below it are zeroed (default None).
penaltyNoOverrides for ``c`` (slack; default 1.1 for ``post=True``, else 0.5), ``gamma`` (default ``0.1/log n``) and ``lambda`` (raw penalty; bypasses the data-driven level).
colnamesNoColumn names (default ``V1..Vp``).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
interceptNoInclude an intercept.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare readOnlyHint=true and openWorldHint=false, providing a safety profile, but the description adds little beyond 'faithful port', which alerts the agent to R-package compatibility. It does not disclose how the model is fitted, what the result includes, or any edge-case behaviors.

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 definition is conciseβ€”one sentence with no fillerβ€”but it is genuinely under-specified rather than efficiently crafted. It conveys the provenance but omits essential context that an agent needs to invoke it correctly.

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?

Given 13 parameters, nested objects, and a large sibling set, the one-line description is incomplete. It does not explain when to use the tool, how the many options interact, or why one might choose it over rlassologit_effect or rlasso, relying entirely on the schema and annotations.

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 100%, with each of the 13 parameters having its own description. The tool-level description adds no parameter context, so the baseline of 3 applies because the schema already does the heavy lifting.

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 tool as a logistic rigorous (post-)Lasso port, which signals a statistical estimator but lacks an explicit verb phrase like 'fits' or 'estimates'. It does not distinguish it from closely related siblings such as rlassologit_effect, rlasso, or lasso_select, leaving the exact purpose 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?

There is no indication of when to use this tool versus alternatives, no mention of data prerequisites, and no examples. The description offers no guidance on selecting among the many sibling lasso/logit tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rlassologit_effectA
Read-only

Effect of d on a binary y after Lasso-selecting controls x.

ParametersJSON Schema
NameRequiredDescriptionDefault
dYesd parameter (Union[np.ndarray, pd.Series, str]).
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
I3NoAmelioration set forced into the control set (hdm's ``I3``).
postNoPost-Lasso inside the two selection steps.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The `readOnlyHint` annotation already signals that this is a safe read-style operation, and the description adds the useful behavioral context that control selection is Lasso-based and the outcome is binary. It does not disclose details such as which inference quantities are returned or any computational caveats, but the output schema exists and the read-only annotation lowers the disclosure burden.

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 that packs in the treatment, outcome type, and control-selection method with no filler. Every phrase contributes meaning.

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 tool with 11 parameters, full schema coverage, an output schema, and a read-only annotation, the description supplies the one piece the schema lacks: the statistical role of the required inputs. It is largely complete for invocation, though a brief note on how it differs from `rlassologit_effects` would make it fully self-sufficient.

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 100%, so the baseline is 3, but the description adds real semantic value by assigning roles: `d` is the treatment/exposure variable, `y` is the binary outcome, and `x` are the controls. This is especially helpful because the schema entry for `d` only says 'd parameter (Union...)' and does not explain the causal role that `d` plays.

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 clearly identifies the estimation target β€” the effect of treatment `d` on binary outcome `y` while Lasso-selecting controls `x` β€” which goes well beyond a tautology and gives an agent the core model setting. It does not explicitly use a verb like 'estimates' and does not contrast itself with the closely related sibling `rlassologit_effects`, so it stops short of full sibling differentiation.

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 intended setting is implied: binary outcome, a treatment variable `d`, and controls selected by Lasso. However, the description gives no explicit 'use this when...' guidance and names no alternative tools, even though siblings like `rlassologit`, `rlassologit_effects`, and `rlasso_effect` exist in the same family.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rlassologit_effectsC
Read-only

Logistic high-dimensional effect of each targeted column of X.

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesFeature matrix or covariate DataFrame.
yYesOutcome variable column name or outcome array.
I3NoI3 parameter (Optional[np.ndarray]).
postNopost parameter (bool).
indexNoindex parameter (Optional[Sequence[int]]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is known. The description adds no behavioral context beyond the modeling intent: it does not mention prerequisites (e.g., a fitted model), whether it trains a model internally, how missing data is handled, or what 'targeted column' implies for the operation. With annotations present, the bar is lower, but the description still fails to disclose anything beyond the basic purpose.

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 a single, dense sentence with no wasted words. It front-loads the core intent. Minor issue: the technical jargon ('Logistic high-dimensional') may obscure meaning for some agents, but the structure itself is efficient.

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?

Despite having an output schema and annotations, the description leaves the tool's purpose and invocation ambiguous. It does not specify what 'targeted column' means (how are targets chosen?), how this tool differs from rlassologit_effect, or what the returned effects represent. Given the tool's complexity (11 parameters) and the wide sibling list, this one-line description is insufficient for an agent to plan a correct call.

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?

The input schema has 100% description coverage, so all 11 parameters are already documented. The description does not add meaning beyond the schema–it only references X generically and does not explain how 'targeted columns' are specified or which parameters control the effect estimation. Baseline 3 is appropriate because the schema carries the semantic load.

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 identifies the resource ('each targeted column of X') and the analysis family ('Logistic high-dimensional effect'), which is specific enough to distinguish it from general regression tools. However, it uses the noun 'effect' rather than an explicit verb like 'computes' or 'estimates', and does not mention the relationship to the similarly named sibling rlassologit_effect or rlassologit, leaving the exact scope slightly 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 guidance is provided on when to use this tool versus its alternatives (rlassologit, rlassologit_effect) or under what conditions it is appropriate. The description neither states when to choose this tool nor excludes situations where a different tool would be better. An agent is left to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

robustness_reportC
Read-only

Run an automated battery of robustness checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesKey explanatory variable whose estimate stability is assessed.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
formulaYesBaseline regression formula, e.g. ``"y ~ x1 + x2 + x3"``.
subsetsNoNamed boolean masks for subsample checks.
trim_pctNoDrop observations beyond this percentile from both tails. E.g. ``0.01`` trims top and bottom 1 %.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
cluster_varNoColumn for clustered SE check.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
drop_controlsNoBaseline controls to drop (one-by-one) for sensitivity.
winsor_levelsNoWinsorization percentiles, e.g. ``[0.01, 0.05]``.
extra_controlsNoAdditional controls to add (one-by-one) beyond baseline.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=false, so the description does not need to restate safety. However, it adds almost no behavioral context beyond the fact that a 'battery' of checks is run; it does not disclose what checks are performed, whether the operation is heavy, or what aspects of model stability are assessed.

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 a single sentence with no filler. It briefly states the core purpose without wasting words, though the extreme brevity underscores that it under-specifies behavior.

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 14 parameters, 3 required, and an output schema, a description that only says 'Run an automated battery of robustness checks' is too sparse. It does not explain what the report contains, how to interpret results, or how to distinguish this from related tools. The presence of an output schema mitigates return-value ambiguity, but the tool's usage context remains unclear.

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 100%, so the parameters are fully documented in the schema. The description adds no parameter-level meaning beyond the schema, which is acceptable per the baseline of 3.

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 states a clear verb ('Run') and resource ('automated battery of robustness checks'), but is vague about what specific checks are included, and does not differentiate it from siblings like 'sensitivity' or 'robust_synth' which also perform robustness-related tasks.

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 is given on when to use this tool versus alternatives such as 'sensitivity', 'robust_synth', or 'sensitivity_dashboard'. There is no mention of preferred scenarios, exclusions, or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

robust_synthA
Read-only

Robust / unconstrained Synthetic Control. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable name.
placeboNoRun in-space placebo inference.
variantNo* ``'unconstrained'`` -- no sign / sum constraints; optional intercept. * ``'elastic_net'`` -- L1 + L2 penalty, no sign constraints. * ``'penalized'`` -- classic SCM constraints + elastic-net penalty.unconstrained
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
interceptNoFit an intercept (level shift). Only for unconstrained / elastic_net.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoAdditional covariates to match on.
l1_penaltyNoLasso (L1) penalty strength.
l2_penaltyNoRidge (L2) penalty strength.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses key assumptions (SUTVA, no anticipation), failure modes (poor pre-treatment fit, non-extreme placebo estimates), and honest reporting guidance. This gives the agent interpretive context that annotations alone cannot provide.

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 organized into labeled sections (assumptions, pre-conditions, failure modes, alternatives) and every sentence carries information. It is dense but not padded, and it front-loads the method identity.

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 complex estimator, it covers assumptions, data requirements, failure modes, alternatives, and minimum sample size. The output schema and detailed parameter descriptions cover the remaining API contract, leaving no critical gap for a caller.

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 100%, and the parameter descriptions are already detailed with defaults, enums, and payload-depth semantics. The tool description itself does not add parameter-specific meaning, so the baseline 3 is appropriate.

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 clearly identifies the tool as 'Robust / unconstrained Synthetic Control' and distinguishes it from sibling estimators by naming concrete alternatives. It lacks an explicit verb like 'estimates a treatment effect,' but the assumptions and preconditions make the purpose unambiguous.

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 provides explicit assumptions, pre-conditions, failure modes, and alternatives, including conditional guidance to switch to sdid/augsynth when pre-treatment RMSPE is large. It does not give a crisp 'use this instead of X' decision rule, but the contextual guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

romano_wolfB
Read-only

Romano-Wolf stepdown adjusted p-values for multiple outcomes. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesTreatment / regressor(s) of interest. The adjusted p-value corresponds to the *first* element of ``x``.
yYesOutcome variable names (one regression per outcome).
seedNoRandom seed for reproducibility (uses ``np.random.default_rng``).
alphaNoNominal significance level (used only for display).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
clusterNoColumn name for cluster-robust standard errors and cluster bootstrap resampling.
controlsNoAdditional control variables included in every regression.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, so the agent knows this is a non-destructive computation. The description adds a cryptic 'Validation: validated evidence tier' note, but does not explain what that tier means or how it affects the result. It does not contradict 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is concise and front-loaded with the central purpose. The second sentence, 'Validation: validated evidence tier...', is telegraphic, unclear, and does not clearly earn its place as either an instruction or a behavioral disclosure.

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 and complete parameter documentation, the description does not need to repeat return values. However, for a 13-parameter statistical tool it is still incomplete: it does not mention family-wise error rate control, resampling behavior, or how it relates to sibling correction tools. It is minimally adequate but leaves interpretation and selection largely to the agent.

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 100%, and every parameter already has a meaningful description, including x as the treatment of interest, y as outcome variables, n_boot, cluster, and detail. The tool description adds little beyond the phrase 'multiple outcomes,' so it remains at the baseline for a fully documented schema.

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 first sentence names a specific method and its object: 'Romano-Wolf stepdown adjusted p-values for multiple outcomes.' This makes the core computation clear, but it does not explicitly differentiate the tool from sibling p-value adjustment tools such as adjust_pvalues, benjamini_hochberg, holm, or bonferroni.

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 offers no guidance on when to prefer Romano-Wolf over the many sibling multiple-testing tools. 'For multiple outcomes' is the only contextual hint, but that applies broadly to all p-value adjustment procedures. There are no stated alternatives, exclusions, or decision criteria for selecting this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rosenbaum_boundsC
Read-only

Compute Rosenbaum bounds on a paired observational study.

ParametersJSON Schema
NameRequiredDescriptionDefault
yNoOutcome variable column name or outcome array.
alphaNoSignificance level used to report ``gamma_critical``.
treatNoTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoWilcoxon signed-rank bound (continuous) or binomial sign test (robust / binary).wilcoxon
controlNoOutcome in the treated / control unit of each matched pair (same length). Ignored if ``data`` is provided.
pair_idNopair_id parameter (Optional[str]).
treatedNoOutcome in the treated / control unit of each matched pair (same length). Ignored if ``data`` is provided.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
gamma_gridNoGamma values (>= 1) over which to compute bounding p-values.
alternativeNoDirection of the alternative hypothesis for the treatment effect.greater
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered by structured data. The description adds no behavioral context beyond the word 'Compute' β€” it does not clarify the input-output flow, that it returns bounding p-values over a gamma grid, or any interpretation caveats. It is consistent with annotations (no contradiction) but contributes little.

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 efficient sentence that names the operation and study context without waste. It is slightly under-specified for the complexity of the tool, but as a compact statement it is well-structured.

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 and parameter coverage is 100%, so the structured fields carry much of the burden. However, for a 15-parameter tool the description is thin β€” it omits when to apply this technique, what the result represents, and how it relates to rosenbaum_gamma, leaving the agent to rely entirely on parameter names.

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 100%, so the schema fully documents all 15 parameters including enums, defaults, and the detail-level payload guidance. The description adds no parameter meaning beyond the schema, matching the baseline of 3 for high coverage.

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?

Description states a clear verb ('Compute'), resource ('Rosenbaum bounds'), and context ('paired observational study'). It is specific enough to convey the core function, but it does not distinguish itself from closely related siblings such as rosenbaum_gamma or sensitivity, which appear in the sibling list and overlap in purpose.

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. It does not mention when Rosenbaum bounds are appropriate (e.g., sensitivity to hidden bias in matched pairs) nor exclude scenarios better handled by rosenbaum_gamma, sensitivity, or selection_bounds. The agent must infer applicability from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rosenbaum_gammaB
Read-only

Compute Rosenbaum bounds on a paired observational study.

ParametersJSON Schema
NameRequiredDescriptionDefault
yNoOutcome variable column name or outcome array.
alphaNoSignificance level used to report ``gamma_critical``.
treatNoTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoWilcoxon signed-rank bound (continuous) or binomial sign test (robust / binary).wilcoxon
controlNoOutcome in the treated / control unit of each matched pair (same length). Ignored if ``data`` is provided.
pair_idNopair_id parameter (Optional[str]).
treatedNoOutcome in the treated / control unit of each matched pair (same length). Ignored if ``data`` is provided.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
gamma_gridNoGamma values (>= 1) over which to compute bounding p-values.
alternativeNoDirection of the alternative hypothesis for the treatment effect.greater
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, covering the safety profile. The description adds the context that the tool applies to paired observational studies, which provides mild additional scope beyond the annotation. It does not contradict the read-only hint and no hidden side effects are relevant.

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 a single concise sentence with no wasted words and the core action is front-loaded. It is efficient, though very minimal; a bit more context could improve it without harming conciseness.

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?

Given the tool's high complexity (15 parameters, multiple input modes, many sibling sensitivity/bounds tools), the one-line description is insufficient. It does not explain how to supply data (e.g., data_path vs arrays), how to choose among methods, or how this tool relates to rosenbaum_bounds. The output schema and rich parameter descriptions partially compensate, but an agent would still struggle to decide when to invoke this 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 description coverage is 100%, so the input schema thoroughly documents all 15 parameters. The description itself adds no parameter-specific meaning, but the baseline of 3 is appropriate because the schema carries the full burden.

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 uses a specific verb ('Compute') and names a precise resource ('Rosenbaum bounds on a paired observational study'). It clearly indicates the tool's purpose but does not explicitly distinguish it from the sibling tool 'rosenbaum_bounds', which likely performs a related analysis.

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 offers no guidance on when to use this tool versus alternatives such as 'rosenbaum_bounds' or 'sensitivity'. There is no mention of prerequisites, study design fit, or scenarios where this tool is preferable, leaving the agent to infer usage from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sbwA
Read-only

Stable Balancing Weights (Zubizarreta 2015) with optional ATT/ATE Validation: certified parity evidence. Assumptions: Unconfoundedness: treatment is as-good-as-random given the measured covariates; Overlap / common support: every unit has a non-degenerate probability of each treatment; The covariate set blocks all back-door paths. Pre-conditions: Pre-treatment covariates measured for treated and control units; A binary (or low-cardinality) treatment indicator; Sufficient covariate overlap between treatment arms. Failure modes: Poor overlap -- extreme propensity scores or few acceptable matches -> Trim or restrict to the common-support region and report the discarded units; Covariate imbalance remains after matching/weighting -> Re-specify the balancing model (CBPS, entropy balancing) and re-check standardized mean differences. Alternatives: sp.propensity_score, sp.cbps, sp.ebalance, sp.dml. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
yNoOutcome column. If provided, a weighted ATT/ATE estimate with HC-robust SE is attached to the returned :class:`SBWResult`.
alphaNoSignificance level for inference on the outcome.
deltaNoBalance tolerance. With ``tolerance_scale='sd'`` the constraint is ``|mean_T(X_j) - weighted mean_C(X_j)| <= delta_j * sd(X_j)``.
treatYesBinary 0/1 treatment indicator column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
estimandNo``'att'`` reweights controls to match treated means (standard); ``'atc'`` reweights treated to match control means; ``'ate'`` reweights each group to match the pooled means.att
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
objectiveNoDispersion objective. ``'variance'`` minimises Sigma w_i2; ``'entropy'`` minimises Sigma w_i log(n * w_i) (KL from uniform).variance
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesColumns whose means must be balanced.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
solver_optionsNoPassed to ``scipy.optimize.minimize``.
include_squaresNoAlso balance second-moments (w_j2 columns).
tolerance_scaleNoStandard deviation ``delta`` is quoted in. ``'sd'`` is the full-sample sd; ``'target'`` the sd of the group being matched to and ``'group'`` the sd of the group being reweighted, matching ``sbw::sbw``'s ``bal_std="target"`` / ``"group"``; ``'raw'`` is unstandardised.sd

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description aligns with that (no contradiction). The description adds valuable behavioral context beyond annotations: it discloses assumptions (unconfoundedness, overlap, back-door blocking), failure modes (poor overlap, covariate imbalance), and remediation steps. It doesn't detail output structure, but the output schema exists and the description mentions ATT/ATE validation and certified parity evidence, which is meaningful behavioral disclosure.

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 dense but well-organized: method identification, assumptions, pre-conditions, failure modes, alternatives, and sample size guidance. It front-loads the method name and purpose. It is longer than typical but every section earns its place for a complex causal-inference tool. Slight redundancy in assumptions (overlap stated twice) prevents 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?

For a complex tool with 16 parameters, an output schema, and rich sibling context, the description covers the key decision points: when to use, what to check, what to do on failure, and which alternatives exist. It doesn't explain the return value structure, but the output schema exists and the description mentions ATT/ATE validation. The typical minimum N guidance is a nice addition. Missing a bit on how to interpret 'certified parity evidence' but overall complete.

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 100%, so the schema already documents all 16 parameters. The description adds context about the method's assumptions and failure modes but doesn't add parameter-level semantics beyond what the schema provides. Baseline 3 is appropriate since the schema carries the heavy lifting.

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 opens with a specific method name and citation ('Stable Balancing Weights (Zubizarreta 2015)'), states its purpose ('certified parity evidence'), and lists assumptions, pre-conditions, failure modes, and alternatives. It clearly distinguishes this from sibling tools like sp.propensity_score, sp.cbps, sp.ebalance, and sp.dml by naming them as alternatives.

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?

The description explicitly names alternatives (sp.propensity_score, sp.cbps, sp.ebalance, sp.dml) and provides failure-mode guidance ('Trim or restrict to the common-support region', 'Re-specify the balancing model'). It also states pre-conditions (pre-treatment covariates, binary treatment, sufficient overlap) and a typical minimum N of 200, giving an agent clear when-to-use and when-not-to-use signals.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scdataC
Read-only

Prepare data matrices for synthetic control estimation.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column name.
unitYesUnit identifier column name.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable column name.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description only reiterates the basic output concept ('data matrices') without adding details such as whether the tool fits a model, how it handles missing columns, or what the returned structure looks like.

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 a single, clear sentence with no wasted words. It is front-loaded with the key purpose, though it could have included additional guidance without becoming bloated.

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 tool with 11 parameters, 6 required fields, and many sibling tools, a one-sentence description is under-specified. It does not explain the role of required arguments, the meaning of 'prepare data matrices', or how this tool chains with downstream synthetic control estimators.

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 100%, so the input schema already documents all 11 parameters in detail. The description adds no parameter-specific semantics, but the schema carries the burden effectively; baseline 3 is appropriate.

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 clearly states the specific action ('prepare data matrices') and the domain ('synthetic control estimation'), which distinguishes it from estimation-focused siblings like synth and scest. It lacks an explicit contrast with sibling tools, but the verb+resource combination 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?

The description gives no guidance on when to use this tool versus alternatives such as synth, sc_estimate, or synth_compare. With a huge sibling list and no explicit preconditions or exclusions, the agent must infer that this is a data-preparation step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scestA
Read-only

Estimate synthetic control weights. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column name.
unitYesUnit identifier column name.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable column name.
w_constrNoWeight constraint: - ``'simplex'`` : w >= 0, sum(w) = 1 - ``'lasso'`` : L1-penalised (allows negative, non-summing) - ``'ridge'`` : L2-penalised - ``'ols'`` : ordinary least squares (unconstrained) - ``'ls'`` : least squares (same as 'ols')simplex
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
lasso_lambdaNoL1 penalty (used when ``w_constr='lasso'``).
ridge_lambdaNoL2 penalty (used when ``w_constr='ridge'``).
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds substantial behavioral context: the convex/regularized weighting assumption, SUTVA/no-anticipation requirements, and failure modes such as large pre-treatment RMSPE and weak placebo inference. This goes well beyond what the annotations alone convey.

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 dense and well-structured, with labeled sections for assumptions, pre-conditions, failure modes, and alternatives. Every sentence carries useful information, and the core purpose is front-loaded.

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 a 100%-covered input schema and an output schema, the description supplies the remaining non-obvious context: when the method is valid, what can go wrong, how to respond to failure modes, and which alternatives exist. Nothing an agent needs to decide whether to invoke this tool is missing.

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 100%, so the schema already documents every parameter. The description only loosely maps to parameters (e.g., 'convex or regularized' hints at w_constr but never names it), so it adds little parameter-specific value beyond the schema 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?

The first line, 'Estimate synthetic control weights,' uses a specific verb and resource and immediately distinguishes this from generic causal estimators. The assumptions, pre-conditions, and named alternatives reinforce exactly what kind of method this is.

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 gives explicit pre-conditions (treated units plus donor pool, sufficient pre-period, complete outcomes) and failure-mode remedies, including named alternatives like sdid and augsynth. However, it does not fully spell out when-not-to-use or give a crisp decision rule among all listed alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sc_estimateA
Read-only

R-style alias: synthdid::sc_estimate. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column.
unitYesUnit identifier column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treat_timeYestreat_time parameter.
treat_unitYestreat_unit parameter.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint true, so the safety profile is known; the description adds meaningful behavioral context beyond that: key assumptions that must hold, failure symptoms such as large pre-treatment RMSPE or non-extreme placebo estimates, and recommended mitigations. It does not discuss computational cost or server-side caching, but those are at least partly covered by the schema and 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?

The description is dense but organized into labeled sections: Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum N. It avoids filler and each block carries actionable information for an expert user. The opening line is weak and the overall text is long, so it is not a 5, but it is far from bloated.

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 complex econometric tool, the description covers assumptions, data requirements, failure modes, and fallback tools, while the output schema handles return values. However, it never states in plain language what the estimator computes, and the failure-mode advice to 'add predictors' is not clearly mapped to any input-schema parameter. This leaves an agent with some uncertainty about the exact interface and purpose despite the rich context.

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 100%, so the baseline is 3. The description contributes high-level context about panel structure, donor pool, and pre-treatment length, but it does not explain parameter-specific semantics such as how treat_time or treat_unit should be encoded, or whether multiple treated units are supplied as a list. The schema's own treat_time/treat_unit descriptions are tautological, and the description does not fill that gap at the parameter level.

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 sc_estimate only as an 'R-style alias' for synthdid::sc_estimate and then moves into assumptions and pre-conditions about donor units and pre-treatment paths. An agent can infer it performs synthetic-control estimation, but the core action ('estimates the synthetic control treatment effect') is never explicitly stated, and it is not clearly distinguished from siblings like synthdid_estimate, sdid, or synth.

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 Assumptions and Pre-conditions sections effectively define when the tool is appropriate: SUTVA, no anticipation, a donor pool, and enough pre-periods. Failure modes give actionable redirects, such as using sdid/augsynth when pre-treatment RMSPE is large, and the Alternatives list names nearby estimators. It stops short of a 5 because the alternatives are listed without explicit selection rules beyond those failure-mode hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sciganA
Read-only

Adversarial dose-response estimator (Bica et al. 2020). Assumptions: Unconfoundedness given covariates X for the continuous treatment; Positivity over the dose support; The adversarial generator recovers the counterfactual dose distribution (Bica et al. 2020). Pre-conditions: data with a continuous treatment (dose), outcome and covariates; torch is installed (neural extra) -- imported lazily. Failure modes: Unstable adversarial training -- dose-response estimates vary across seeds -> Average across seeds or use the smoother varying-coefficient estimator. Alternatives: sp.vcnet, sp.dose_response. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
t_gridNoGrid of t values to evaluate.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesTreatment indicator, treatment variable, or treatment array.
covariatesYesCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
propensity_weightsNopropensity_weights parameter (Optional[np.ndarray]).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though readOnlyHint=true and openWorldHint=false are already in annotations, the description adds substantial behavioral context beyond that: the adversarial training is unstable across seeds, torch is imported lazily, and the generator recovers the counterfactual dose distribution. These details inform the agent about runtime behavior and variability that annotations cannot 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?

The description is dense and well-organized, covering purpose, assumptions, pre-conditions, failure modes, alternatives, and minimum N in a compact block. Every sentence adds useful information, though it is longer than the minimal ideal and could benefit from clearer labeling (e.g., bullet points), which keeps it from a 5.

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 complex 11-parameter estimation tool, the description covers the essential decision factors: statistical assumptions, data requirements, software dependency, sample size floor, failure modes, and alternatives. An output schema exists, so return-value details are already structured. Nothing critical is missing for an agent to decide whether and how to invoke this 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 coverage is 100%, so the baseline is 3. The description adds value by clarifying that the treatment must be continuous (a dose), which is not stated in the schema's treatment property ('Treatment indicator, treatment variable, or treatment array'). This extra constraint helps the agent verify inputs before calling.

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 the tool is an 'Adversarial dose-response estimator (Bica et al. 2020)', which clearly conveys that it estimates dose-response curves using a specific adversarial method. It lacks an explicit action verb like 'estimates', but the noun phrase is functionally clear. It also distinguishes itself from sp.vcnet and sp.dose_response by naming them as alternatives.

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?

The description provides explicit when-to-use guidance: it lists assumptions, pre-conditions (continuous treatment, torch installed), and typical minimum N. It gives clear failure-mode guidanceβ€”'dose-response estimates vary across seeds'β€”and tells the agent to average across seeds or use an alternative. This is strong, actionable routing information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scpiA
Read-only

Prediction intervals for synthetic control methods. Cost: Prediction intervals come from a simulation step on top of the point fit, so runtime is dominated by the number of simulations rather than n. cores= parallelises it. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimu...

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed for reproducibility in subsampling.
timeYesTime period column name.
unitYesUnit identifier column name.
alphaNoSignificance level for prediction intervals.
coresNoNumber of cores (reserved for future parallel subsampling).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable column name.
pi_typeNoWhich prediction interval components to include: - ``'in_sample'`` : only in-sample (weight estimation) uncertainty - ``'out_of_sample'``: only out-of-sample (prediction) uncertainty - ``'both'`` : simultaneous interval combining both sourcesboth
e_methodNoMethod for estimating out-of-sample uncertainty: - ``'gaussian'`` : sub-Gaussian bound using residual variance - ``'ls'`` : location-scale model (allows heteroskedasticity) - ``'qreg'`` : quantile regression (nonparametric)gaussian
w_constrNoWeight constraint for SCM estimation: - ``'simplex'`` : w >= 0, sum(w) = 1 - ``'lasso'`` : L1-penalised - ``'ridge'`` : L2-penalised - ``'ols'`` : ordinary least squares (unconstrained) - ``'ls'`` : least squares (same as 'ols')simplex
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
lasso_lambdaNoL1 penalty (used when ``w_constr='lasso'``).
ridge_lambdaNoL2 penalty (used when ``w_constr='ridge'``).
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool read-only, and the description adds meaningful behavioral context: it discloses that the tool runs simulations on top of a point fit, that runtime is dominated by simulation count, and that cores parallelizes the work. It also surfaces assumptions (SUTVA, no anticipation) and failure modes (large RMSPE, placebo non-extremity), which go well beyond the structured annotations. No contradiction with annotations.

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 description is well-organized with labeled sections (Cost, Assumptions, Pre-conditions, Failure modes, Alternatives) and front-loads the purpose. However, it is long, and the final sentence is truncated ('Typical minimu...'), which is a structural defect. Most content earns its place, but the truncation and slight redundancy around failure modes prevent a higher score.

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?

Given the tool's complexity (19 parameters, 6 required, output schema present), the description covers cost, assumptions, preconditions, failure modes, and alternatives, so an agent has enough to select and invoke it correctly. The schema fills parameter details and the output schema handles return values. The truncated final sentence and the lack of an explicit rule for choosing this over point-estimate synthetic control siblings keep it from being fully complete.

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 100%, so the baseline is 3. The description only adds marginal context for cores ('parallelises it') and the general simulation step, but it does not explain the key interval-related parameters such as pi_type, e_method, or w_constr beyond what the schema already provides.

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 clearly identifies the output type ('Prediction intervals') and the resource ('synthetic control methods'), so an agent can infer the tool's purpose. It is phrased as a noun phrase rather than an explicit verb+object command, but the name and content make the action clear. It does not explicitly contrast with sibling synthetic-control point-estimators, though 'prediction intervals' differentiates 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?

The description provides explicit pre-conditions, assumptions, failure modes, and an alternatives list, giving an agent strong guidance on when results are valid and what to do if assumptions fail. It does not state a crisp decision rule such as 'use this when you need interval estimates rather than point estimates', so some inference is still required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sdidA
Read-only

Synthetic Difference-in-Differences estimator (and SC / DID variants). Validation: certified parity evidence. Do NOT use when: there is no clean pre-treatment block for every unit -- the unit and time weights are fit on the pre-period grid. Cost: Placebo / bootstrap standard errors refit the full weighting problem n_reps times; the point estimate alone is cheap. Lower n_reps while iterating. Assumptions: Parallel trends in the absence of treatment, after the synthetic/DiD weighting; No anticipation and no interference between units (SUTVA); The control pool's outcome process is stable around the intervention. Pre-conditions: Panel with treated and control units and a clear treatment date; Pre-treatment periods available to assess comparability of trends. Failure modes: Weighted pre-treatment trends still diverge between treated and synthetic control -> Inspect the unit/time weights and pre-trend fit; consider event-study DiD with honest bounds. Alternatives: sp.synth, sp.augsynth, sp.callaway_santanna, sp.gardner_did. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
yNoOutcome variable column name or outcome array.
seedNoRandom seed for reproducibility.
timeNoTime period column.
unitNoUnit identifier column.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo* ``'sdid'`` -- Synthetic DID (unit + time weights) * ``'sc'`` -- Synthetic Control (unit weights only) * ``'did'`` -- DID (uniform weights)sdid
n_repsNoReplications for placebo / bootstrap SE.
backendNo``'native'`` uses StatsPAI's Python implementation. ``'synthdid'``/``'r'`` delegates to the R ``synthdid`` package through ``Rscript`` and returns the reference package's point estimate and ``synthdid_se`` standard error. The R backend is mainly for exact cross-language parity claims; the dependency- light native implementation remains the default.native
outcomeNoOutcome variable column. Alias ``y=`` accepted for R-style calls.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
se_methodNoStandard-error method (see Notes).placebo
covariatesNoReserved for future covariate-adjusted extensions.
treat_timeNotreat_time parameter.
treat_unitNotreat_unit parameter.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitNoTreated unit(s). Alias ``treat_unit=`` accepted.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeNoFirst treatment period (inclusive). Alias ``treat_time=`` accepted.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint annotations, it discloses cost behavior (placebo/bootstrap SE refit the full weighting problem n_reps times; point estimate alone is cheap), assumptions (parallel trends, SUTVA, stable control process), and failure modes (divergent pre-trends -> inspect weights, consider event-study DiD). No contradiction with annotations; readOnlyHint is consistent with an estimator that only reads data.

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?

Each labeled section (validation, do-not-use, cost, assumptions, pre-conditions, failure modes, alternatives, min N) carries actionable information, and the first sentence states the purpose. Though dense, the length is justified for a complex estimator with 21 parameters and many sibling tools.

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 tool's causal-inference complexity, the description covers exclusions, cost, assumptions, preconditions, failure modes, alternatives, and sample-size guidance. The output schema exists to document return values, and the input schema covers all parameters, so nothing essential is left unspecified.

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?

Input schema already covers all 21 parameters at 100%, so the baseline is 3. The description adds practical meaning to n_reps by explaining the computational cost and advising 'Lower n_reps while iterating', and clarifies method variants (sdid/sc/did) and backend parity. This goes beyond the schema's mechanical descriptions.

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 'Synthetic Difference-in-Differences estimator (and SC / DID variants)', naming the exact method and scope. This distinguishes it from sibling estimators like synth, augsynth, callaway_santanna, and gardner_did, which are also listed as alternatives. Clear verb/resource with no ambiguity.

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 states 'Do NOT use when: there is no clean pre-treatment block for every unit' and gives pre-conditions such as a panel with treated/control units, a clear treatment date, and pre-treatment periods. It also names four concrete alternatives (sp.synth, sp.augsynth, sp.callaway_santanna, sp.gardner_did) so an agent can route correctly. This is explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

selection_boundsA
Read-only

Lee (2009) bounds for ATE under sample selection, optionally Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Only weak (set-identifying) assumptions are imposed; the result is an interval, not a point; Lee bounds add monotonicity of selection; Oster's delta adds proportional selection on observed vs. unobserved. Pre-conditions: The data needed for the point-identifying analysis, plus the weakest credible identifying restriction; For Lee bounds: a binary selection/attrition indicator. Failure modes: Bounds are too wide to be informative -> Add a credible auxiliary restriction (monotone treatment response, instrument) to tighten the bounds. Alternatives: sp.oster_delta, sp.lee_bounds, sp.manski_bounds. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable (may have NaN when selection=0).
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo- ``'conditional'``: compute Lee bounds within covariate strata and average (tighter). - ``'unconditional'``: standard Lee bounds ignoring covariates.conditional
n_bootNoNumber of bootstrap replications.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
selectionYesBinary indicator: 1 = outcome observed, 0 = missing.
treatmentYesBinary treatment (0/1).
covariatesNoCovariates to condition on for tighter (conditional) bounds.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses several behavioral traits beyond annotations: the result is an interval, not a point; weak set-identifying assumptions; Lee bounds add monotonicity of selection; pre-conditions and failure modes are explicitly stated. This goes well beyond the readOnly/openWorld hints.

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 description packs a lot of information (assumptions, pre-conditions, failure modes, alternatives, typical N) but is not well structured and the opening sentence mixes two clauses ('Lee (2009) bounds... optionally Validation:'). It could be shorter and better organized.

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?

Given the tool's complexity (14 params, output schema), the description covers assumptions, pre-conditions, failure modes, and typical sample size. It does not explain return values, but an output schema exists. Minor gaps: no explicit link between the 'method' parameter and the described tightening behavior, and alternatives are not differentiated. Overall, sufficient for an agent to call the tool correctly.

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 100%, so the schema already documents all 14 parameters. The description reinforces the binary selection indicator and mentions conditional vs unconditional method, but adds no new parameter-level detail beyond what the schema provides.

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: computes Lee (2009) bounds for ATE under sample selection. However, it lists sibling tools sp.lee_bounds, sp.oster_delta, sp.manski_bounds as alternatives without explaining how this tool differs from them, so it doesn't fully disambiguate.

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?

Lists alternatives but provides no conditions for choosing among them. No explicit when-to-use or when-not-to-use guidance. The failure mode mentions adding restrictions to tighten bounds, but that's about method choices, not tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

select_pci_proxiesA
Read-only

Score and rank candidate proxies for PCI. Assumptions: The proxies are valid negative controls (relevant to the confounder, excluded from the causal channel); A bridge function exists (completeness conditions hold). Pre-conditions: Treatment-inducing and outcome-inducing proxy variables (negative controls) for the unobserved confounder. Failure modes: Proxies are weak or invalid -- the bridge function is poorly identified -> Test proxy relevance, select stronger proxies, or fall back to sensitivity analysis. Alternatives: sp.select_pci_proxies, sp.dml. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
top_kNoNumber of top candidates to recommend per side.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
candidatesYesAll variables that could plausibly serve as proxies.
covariatesNoCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so the agent knows this is a safe read operation. The description adds valuable context beyond annotations: it discloses the statistical assumptions (valid negative controls, bridge function existence), failure modes, and fallback strategies. It doesn't describe the exact output format, but the output schema exists and the detail parameter explains payload depths. The description adds substantial behavioral context without contradicting 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?

The description is compact and front-loaded with the core purpose. It uses labeled sections (Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) that are scannable. It could be slightly more concise by trimming redundancy between assumptions and pre-conditions, but the structure is effective and every section 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?

For a tool with 11 parameters, full schema coverage, an output schema, and read-only annotations, the description covers the essential context: what it does, when to use it, what assumptions must hold, what to do if it fails, and sample size guidance. The only minor gap is not explicitly stating what the ranking output looks like, but the output schema and detail parameter descriptions cover that. This is complete enough for an agent to select and invoke correctly.

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 100%, so the schema already documents all 11 parameters thoroughly. The description doesn't add parameter-level detail beyond what the schema provides, but it does contextualize the 'candidates' parameter by explaining what makes a valid proxy (negative control relevance, exclusion from causal channel). The detail parameter's enum descriptions are already rich in the schema. Baseline 3 is appropriate given full schema coverage.

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 opens with a specific verb and resource: 'Score and rank candidate proxies for PCI.' It clearly distinguishes this tool from siblings like 'bidirectional_pci', 'fortified_pci', 'pci_mtp', and 'proximal' by focusing on proxy selection/ranking. The assumptions and pre-conditions further clarify its role in the PCI workflow.

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?

The description explicitly states pre-conditions (treatment-inducing and outcome-inducing proxy variables), failure modes (weak/invalid proxies), and alternatives (sp.select_pci_proxies, sp.dml). It also provides a typical minimum N (500), giving the agent concrete guidance on when this tool is appropriate. This is exemplary usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sensemakrA
Read-only

Sensitivity analysis for omitted variable bias (Cinelli & Hazlett 2020). Validation: certified parity evidence. Assumptions: Cinelli-Hazlett (2020) omitted-variable sensitivity in the partial-R-squared framework; the Robustness Value is the minimum partial R-squared a confounder needs with both treatment and outcome to nullify the estimate; Outcome is modeled by OLS of y on treat plus observed controls; benchmarking calibrates confounder strength relative to named observed controls; rv_q is the RV to change the point-estimate sign; rv_qa is the RV to lose significance at alpha. Pre-conditions: A DataFrame with outcome, treatment, and observed control columns; At least one control to anchor the benchmark comparison. Failure modes: Benchmark names a control not present in the controls list or data -> Pass benchmark names that are a subset of the controls actually included in the regression; Perfectly collinear controls make the partial-R-squared decomposition unstable -> Drop redundant collinear controls before computing the robustness value. Alternatives: sp.oster_bounds, sp.evalue, sp.unified_sensitivity. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment column of interest
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
controlsYesObserved control variables
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
benchmarkNoCovariates to benchmark confounding strength against
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only provide readOnlyHint=true, which is consistent with a sensitivity analysis tool. The description adds significant behavioral context: it discloses the modeling assumption (OLS of y on treat plus controls), defines the Robustness Value and its variants (rv_q, rv_qa), explains benchmarking, and details failure modes. This is valuable beyond the annotation. However, it does not mention whether it writes to disk or performs other side effects, but since readOnlyHint is set, the agent can safely assume it is a read operation. The description exceeds the baseline by providing framework details but could still mention whether it caches results (though as_handle parameter suggests it may), so a perfect 5 is not given.

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 structured with clear labels (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives) and is front-loaded with the core purpose. It is long but every sentence adds information; no fluff. It could be slightly more concise, but the structure aids readability and the density of content justifies its length. A 4 reflects that it is well-organized but not extremely short.

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?

The tool is complex: it has 11 parameters, no output schema (has output schema true in signals, but not provided), and many sibling tools that perform similar analyses. The description covers the method's assumptions, key concepts, pre-conditions, failure modes, and alternatives. It even mentions suggested minimum N (50). Given the complexity and the lack of an output schema shown, the description is nearly exhaustive for an agent to know when and how to call it correctly. The detail parameter is self-explanatory with examples. No critical gap is apparent.

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 100% and each parameter has a description, so the baseline is 3. The tool description adds extra semantic context: it explains what 'benchmark' means (covariates to benchmark confounding strength against, and clarifies that benchmark names must be a subset of controls), and it also mentions rv_q and rv_qa outputs that relate to the alpha parameter. It also explains the 'detail' parameter's purpose (e.g., 'agent' for planning). This goes beyond the schema descriptions, so a 4 is appropriate.

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 begins with a specific verb phrase 'Sensitivity analysis for omitted variable bias', naming the resource (the sensitivity analysis) and the method (Cinelli & Hazlett 2020). It clearly distinguishes itself from siblings like oster_bounds and evalue that also do sensitivity analysis, by spelling out the partial-R-squared framework, Robustness Value, and benchmarking. The purpose is unambiguous and not a tautology.

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?

The description explicitly names alternatives (sp.oster_bounds, sp.evalue, sp.unified_sensitivity) and states assumptions and pre-conditions (need treatment, outcome, controls). It also lists failure modes with corrective actions (e.g., benchmark names must be subset of controls, collinear controls cause instability and should be dropped). This tells the agent exactly when to use this tool over siblings and how to avoid common pitfalls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sensitivityA
Read-only

Unified sensitivity analysis for observational causal estimates -- supports Oster (2019) delta/R-max, Cinelli-Hazlett (2020) omitted-variable bias bounds, and E-values (VanderWeele-Ding 2017). Tells the agent how strong an unobserved confounder would have to be to overturn the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
yNoOutcome column (lets the bound recompute covariate R^2 from data alongside the result).
treatNoTreatment column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultNoFitted regression / causal result handle (result_id from a prior fit run with as_handle=true). Required -- the bounds are computed relative to this estimate.
rho_maxNoMax correlation between the omitted confounder and treatment, for the Oster bound.
controlsNoObserved control columns.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_osterNo
include_rosenbaumNo
include_sensemakrNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds value by explaining what the tool computes (bounds on unobserved confounding strength) and that it supports multiple methods. It also mentions the 'detail' parameter's 'agent' mode adds violations/next_steps/suggested_functions, which is behavioral context beyond the schema. No contradiction with 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?

The description is two sentences, front-loaded with the tool's purpose and methods. The second sentence adds the key interpretive value ('how strong an unobserved confounder would have to be to overturn the result'). No wasted words, though it could be slightly more structured with explicit method names in a list.

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?

The tool has 14 parameters, an output schema, and annotations. The description explains the core purpose and the 'detail' parameter's role in agent planning. It doesn't explain the difference between 'result' and 'result_id' or when to use data_path vs result_id, but the schema covers those. The output schema exists, so return values need not be described. Complete enough for an agent to select and invoke correctly.

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 79%, so the schema already documents most parameters. The description adds context for the 'result' parameter (bounds are computed relative to this estimate) and the 'detail' parameter (payload depth for LLM planning). However, it doesn't explain the relationship between 'result' and 'result_id' or clarify which parameters are needed for a first call vs a chained call. Baseline 3 is appropriate given high schema coverage.

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 ('supports') and resource ('sensitivity analysis for observational causal estimates'), names three concrete methods (Oster, Cinelli-Hazlett, E-values), and states the tool's purpose: telling the agent how strong an unobserved confounder would have to be to overturn the result. This clearly distinguishes it from siblings like sensitivity_dashboard, sensitivity_plot, and oster_bounds.

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 implies when to use this tool: when the agent needs to assess robustness of an observational causal estimate to unobserved confounding. It names the methods it supports, which helps an agent choose it over alternatives. However, it does not explicitly state when NOT to use it or name alternative tools (e.g., sensitivity_dashboard, sensitivity_plot, oster_bounds) for different needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sensitivity_dashboardD
Read-only

Comprehensive multi-dimensional sensitivity analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesBaseline estimated result.
verboseNoverbose parameter (bool).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
dimensionsNoWhich dimensions to test. Default: all applicable.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so the read-only nature is covered. However, the description adds nothing beyond that – no mention of caching via as_handle, data loading requirements, or what the 'multi-dimensional' aspect entails. The description contributes no behavioral detail beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is short, but it is under-specified rather than concise. It does not front-load any actionable information and fails to convey the tool's scope or behavior, making it unhelpful despite its brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 10 parameters and a complex sensitivity-analysis purpose, the description is woefully incomplete. It omits what the output looks like, how 'dimensions' are specified, how the tool interacts with data_path vs result_id, and what distinguishes it from other sensitivity tools. The schema documents parameters but not the tool's overall workflow.

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 100% with rich descriptions for parameters like detail (with enum and token sizes), as_handle (caching behavior), and data_path (supported formats). The description adds no parameter-level meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Comprehensive multi-dimensional sensitivity analysis' is vague; it states the general topic but lacks a specific verb+resource, and it does not differentiate from numerous sibling tools like 'sensitivity', 'unified_sensitivity', or 'sensitivity_from_result'. It reads as a restatement of the tool's name rather than a clear functional definition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. With many sensitivity-related siblings (e.g., 'sensitivity_plot', 'synth_sensitivity', 'dml_sensitivity'), the description offers no conditions or exclusions to help the agent choose correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sensitivity_from_resultA
Read-only

Run sp.sensitivity / sp.evalue / sp.oster_bounds / sp.sensemakr on a cached result. Pass method='evalue' (default) for the omitted-confounder-strength bound, 'oster' for delta/R-max, 'cinelli_hazlett' for OVB bounds.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoevalue
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idYesHandle to a fitted causal result.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
benchmark_covariateNoCinelli-Hazlett benchmark column (optional).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the description isn't required to restate safety. It adds context about what each method produces (omitted-confounder bound, delta/R-max, OVB bounds), which is useful. However, it doesn't describe error behavior or dependencies on result validity, which are minor given the read-only annotation.

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 sentences, front-loaded with purpose and method options, with zero waste. The structure is clear and efficient, placing the core action and method guidance upfront.

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 readOnlyHint annotation, the description covers the essential operational details: what it runs, how to select methods, and that it operates on cached results. It doesn't explicitly reconcile the optional data_path with 'cached result' framing, but that's a minor gap given schema documentation and the tool's read-only nature.

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 description enriches the 'method' parameter beyond the enum list by explaining what each option yields (e.g., 'evalue' for omitted-confounder-strength bound). Schema coverage is 88%, so most params are documented; this adds value on top of the schema. It doesn't elaborate on data_path or other params, but the schema covers those adequately.

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 clearly states the tool runs four specific sensitivity-analysis functions on a cached result, with a specific verb and resource. It distinguishes itself from siblings like sensitivity or evalue by the 'cached result' qualifier, making its purpose unambiguous.

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?

It gives explicit guidance on choosing the 'method' parameter (evalue, oster, cinelli_hazlett), but does not explicitly state when to use this tool versus alternatives like sensitivity or evalue that might operate on fresh data. The 'on a cached result' phrase implies usage but doesn't name alternatives or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sensitivity_plotC
Read-only

Plot Rambachan & Roth (2023) sensitivity analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
colorNoCI band color.#2C3E50
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
figsizeNofigsize parameter (Tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
original_ciNoOriginal CI (at M=0) for comparison.
sensitivityYesOutput from ``honest_did()``.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
original_colorNoColor for original estimate marker.#27AE60
breakdown_colorNoColor for the breakdown point marker.#E74C3C
original_estimateNoOriginal point estimate.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, covering the safety profile. However, the description adds no behavioral transparency beyond the verb 'Plot' – it does not mention what the tool returns, whether it displays the plot, how it handles the required 'sensitivity' input, or any potential side effects (e.g., caching via as_handle). With the bar lowered by annotations, the description still contributes little about the tool's runtime 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 description is very short and front-loaded, with only one sentence and no filler. However, 'appropriately sized' for a tool with 15 parameters and complex interplay is questionable – the brevity borders on under-specification rather than purposeful conciseness. It earns the sentence's place but does not provide enough structure for the tool's complexity.

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?

Given the tool's complexity (15 parameters, one required), the description is significantly incomplete. It does not explain the plot's purpose, how to interpret it, or what chain of tools may have produced the input. While the output schema covers return values and the schema documents parameters, the description fails to tie them together into a coherent usage picture. An agent would struggle to decide whether this is the right tool without additional context.

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 100%, with every parameter having a description (e.g., 'sensitivity' is explicitly 'Output from honest_did()'). The description itself adds no parameter-specific meaning, but the schema already provides the necessary semantics, so the baseline of 3 is appropriate.

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 ('Plot') and a resource ('Rambachan & Roth (2023) sensitivity analysis'), which clearly identifies the tool as a plotting operation for a particular sensitivity method. It does not explicitly differentiate from sibling tools like sensitivity_dashboard or synth_sensitivity_plot, but the reference to the specific paper gives enough specificity for an agent to infer its scope.

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 provides no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. It simply names the action and resource, leaving the agent to discover through parameter names (e.g., 'sensitivity' from honest_did()) that it expects specific inputs. No explicit usage context is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sensitivity_rrA
Read-only

Rambachan-Roth (2023) honest-DiD sensitivity analysis: computes the largest violation of parallel trends (parametrised by Mbar -- relative magnitude of the post-period violation versus the worst observed pre-period one) under which the post-treatment ATT is still different from zero at level alpha. Reports both the robust confidence sets and the breakdown Mbar. Assumptions: Pre-period violations bound the magnitude of post-period violations (relative-magnitude family); Post-treatment effects are constant across event time (relax via alternative parameter families in Rambachan-Roth 2023 Section 3). Pre-conditions: result has at least one pre-period and one post-period coefficient; result carries the variance-covariance matrix of those coefficients. Failure modes: Breakdown Mbar < 1.0 (small parallel-trends violation overturns the sign) -> The result is fragile to plausible pretrends violations; report the breakdown alongside the point estimate; Confidence set is the entire real line (Mbar grid too coarse) -> Re-run with a finer grid (n_grid=50+) or restrict Mbar to a tighter interval. Alternatives: sp.honest_did, sp.pretrends_test, sp.breakdown_m. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
MbarNoGrid of relative-magnitude bounds; default is np.linspace(0, 2, n_grid)
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoIdentification methodC-LF
n_gridNoMbar grid size when Mbar=None
resultYesEvent-study or DiD result with full pre/post coefficients
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Watch annotations only mark readOnlyHint=true, which this description never contradicts. Beyond that, it transparently discloses assumptions, failure modes (fragile when Mbar<1.0; grid too coarse), and interpretation guidance. This is far more behavioral context than the annotations provide and directly helps the agent interpret outputs correctly.

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 dense but well-organized: main function and outputs first, then assumptions, pre-conditions, failure modes, and alternatives in labeled segments. No sentence is purely filler, though the length is considerable. It earns its size for a complex sensitivity-analysis tool.

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?

The description covers the method, output interpretation, assumptions, pre-conditions, failure modes, alternatives, and even a typical minimum N. The companion output schema likely carries return details, so nothing an agent needs for correct invocation or interpretation appears to be 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?

The input schema already has 100% parameter description coverage, establishing a baseline of 3. The description adds extra meaning for key parameters: it explains the Mbar parametrization ('relative magnitude of post-period violation versus worst pre-period one'), and the failure-mode guidance gives actionable meaning to n_grid (finer grid, n_grid=50+). It also clarifies what the 'result' must contain (pre/post coefficients plus variance-covariance matrix), which is not fully specified in the 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 description states a specific verb ('computes'), a precise resource (Rambachan-Roth honest-DiD sensitivity), and a well-defined output (breakdown Mbar and confidence sets). It also names alternatives (sp.honest_did, sp.pretrends_test, sp.breakdown_m), so an agent can distinguish this from related tools. This is a clear, differentiated statement of what the tool does.

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 provides concrete pre-conditions (result has pre/post coefficients with a variance-covariance matrix), assumptions (relative-magnitude family, constant effects), and failure modes that clarify when results are useful. It lists alternatives but does not give explicit decision rules for choosing among them, so it stops slightly short of full when-to-use/when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sequential_sdidA
Read-only

Sequential Synthetic DID for staggered-adoption panels (Arkhangelsky & Samkov 2024): processes cohorts in adoption order using not-yet-treated donors, avoiding TWFE negative weights and SDID overlap failures. Assumptions: Parallel trends in the absence of treatment, after the synthetic/DiD weighting; No anticipation and no interference between units (SUTVA); The control pool's outcome process is stable around the intervention. Pre-conditions: Panel with treated and control units and a clear treatment date; Pre-treatment periods available to assess comparability of trends. Failure modes: Weighted pre-treatment trends still diverge between treated and synthetic control -> Inspect the unit/time weights and pre-trend fit; consider event-study DiD with honest bounds. Alternatives: sp.synth, sp.augsynth, sp.callaway_santanna, sp.gardner_did. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
cohortYesFirst-treated period column; never-treated = 0
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_repsNoNumber of reps.
outcomeYesOutcome variable column name or outcome array.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
se_methodNose_method parameter (str).placebo
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
cohort_weightsNocohort_weights parameter (str).size
never_treated_valueNonever_treated_value parameter.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint annotation, disclosing assumptions (parallel trends, no anticipation, SUTVA, stable control outcome process), preconditions, and failure modes (weighted pre-trend divergence and suggested next steps). This gives an agent a realistic behavioral model of how the estimator behaves and when results may be unreliable.

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 dense yet efficient, front-loading the method's purpose and advantage before assumptions, preconditions, failure modes, alternatives, and sample-size guidance. Every sentence adds selection-relevant information with no filler or repetition of schema-visible fields.

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 complex staggered-adoption estimator, the description covers what the method does, when it is appropriate, what assumptions are required, how failures manifest, and which alternatives exist. With an output schema present and full parameter schema coverage, no critical selection or invocation context is missing.

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 100%, so the schema already documents all 14 parameters. The description does not materially enrich specific parameter meaning beyond framing the method, which meets the baseline but does not exceed it. No compensation was needed because the schema is complete.

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 estimand and setting ('Sequential Synthetic DID for staggered-adoption panels') and states the core mechanism: processing cohorts in adoption order using not-yet-treated donors. It also distinguishes the tool by naming what it avoids (TWFE negative weights, SDID overlap failures) and lists explicit alternatives, so an agent can tell it apart from siblings.

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?

Clear pre-conditions (panel with treated/control units, clear treatment date, pre-treatment periods) and explicit alternatives (sp.synth, sp.augsynth, sp.callaway_santanna, sp.gardner_did) are provided. It lacks an explicit 'use this when X instead of Y' rule, but the assumptions, failure modes, and alternative list give strong contextual guidance for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sessionC
Read-only

Set every reachable RNG to a known seed for the duration of the

ParametersJSON Schema
NameRequiredDescriptionDefault
jaxNoYield a fresh JAX ``PRNGKey(seed)`` to the caller via the ``jax_key`` attribute on the yielded session object, when JAX is already imported. Never imports jax on its own. (JAX has no global state so we can't seed it -- agents must thread the key explicitly.)
seedNoSeed value. ``None`` (the default) means "snapshot current state but don't reseed" -- useful for opportunistic save / restore around code that you don't want to leak RNG drift.
torchNoSeed PyTorch (CPU + CUDA) when the library is already imported. Never imports torch on its own.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
pythonhashseedNoSet ``PYTHONHASHSEED`` for the duration of the block. Most causal-inference numerics don't depend on dict iteration order, but spec-curve enumerators and graph-based DAG search sometimes do. Off by default to avoid surprising downstream callers.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the scoping/duration behavior ('for the duration of') and the scope of the effect ('every reachable RNG'), which goes beyond the readOnlyHint annotation. However, the truncation prevents a full disclosure of side effects, restoration semantics, or the yielded session object, leaving behavioral transparency incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only a sentence fragment, cut off mid-phrase ('for the duration of the'). This is under-specification rather than effective conciseness; the structure is incomplete and poorly formed.

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?

Given the tool's role as a context manager, the description fails to convey how the session is yielded, how restoration works, or what the caller should do with the result. The rich parameter schema and output schema compensate partially, but the truncated description leaves critical operational context missing.

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 100%, so the schema already documents all 10 parameters thoroughly. The description itself adds no parameter-level detail, which is acceptable at the baseline but does not elevate the score.

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 ('Set') and a specific resource ('every reachable RNG'), making the core purpose clear despite being truncated mid-sentence. It also distinguishes itself from the long list of analysis siblings by targeting RNG state rather than data analysis.

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 is given on when to use this tool versus alternatives, nor when not to use it. The context is implied (reproducibility, seeding), but there is no explicit when/where guidance or mention of any sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shapley_inequalityC
Read-only

Shorrocks-Shapley decomposition of an inequality index across Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
indexNoindex parameter (str).theil_t
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
weightsNoObservation weights.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds no behavioral detail beyond the decomposition dimension; it does not mention output structure, data requirements, or any operational caveats, but it is not misleading or contradictory.

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 description is a single sentence and front-loads the core method, but the structure is disjointed: 'across Validation: validated evidence tier' reads awkwardly and the parenthetical list is crammed without explanation. It is short but not fully polished.

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?

Given a 10-parameter tool with many decomposition siblings, this description is incomplete. It offers no usage context, no relation to inequality_index or other decompose tools, and does not explain what 'Validation' means as a decomposition dimension. The presence of an output schema and annotations helps, but an agent still lacks enough context to call the tool appropriately.

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 100%, so the schema already documents all parameters. The description adds no parameter-level meaning except indirectly implying a 'Validation' dimension, which does not correspond to any explicit parameter in the schema. This meets the baseline for high schema coverage but does not exceed it.

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 method and resource: 'Shorrocks-Shapley decomposition of an inequality index' and adds the decomposition dimension ('across Validation: validated evidence tier'). This is clear enough to identify what the tool computes, though the phrasing is awkward and it does not differentiate itself from the many decomposition siblings like oaxaca, dfl_decompose, or decompose.

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 alternatives such as inequality_index, dfl_decompose, or oaxaca. No conditions, exclusions, or context are provided to help an agent choose this tool over its many decomposition siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

snipsA
Read-only

Self-normalised IPS (bias-reduction for large IS weights). Assumptions: Same identification conditions as IPS (known propensities, positivity, no unmeasured confounding); Self-normalisation trades a small bias for large variance reduction under heavy importance weights. Pre-conditions: X (context), A (logged action), R (reward) and logging propensities are available. Failure modes: Residual bias when effective sample size is tiny (few logged actions overlap the target policy) -> Collect more on-support logged data or switch to the doubly-robust estimator. Alternatives: sp.ips, sp.doubly_robust, sp.direct_method. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
AYesA parameter (np.ndarray).
RYesR parameter (np.ndarray).
XYesFeature matrix or covariate DataFrame.
clipNoclip parameter (float).
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
pi_targetYespi_target parameter.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
pi_behaviorNopi_behavior parameter (Optional[np.ndarray]).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses the statistical tradeoff ('trades a small bias for large variance reduction'), the identification assumptions, the failure mode when 'effective sample size is tiny', and a remedial strategy. This gives the agent a truthful model of the estimator's behavior and limitations.

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 dense but every clause earns its place: method, tradeoff, assumptions, preconditions, failure mode, alternatives, and sample size guidance. It is front-loaded with the essential identity of the tool and uses compact labelled sections rather than rambling prose.

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 13-parameter estimator with an output schema, the description provides the statistical context an agent needs: identification conditions, required inputs, failure modes, alternatives, and sample-size guidance. Return-value details are covered by the output schema, so nothing critical 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 coverage is 100%, so the baseline is 3, but the description adds semantic roles beyond the schema: X is 'context', A is 'logged action', R is 'reward', and it mentions 'logging propensities' as a precondition. This clarifies what the opaque parameter names mean, though many params (clip, alpha, detail) are not discussed in 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?

The description identifies the tool as a specific estimator ('Self-normalised IPS') and explains its purpose: 'bias-reduction for large IS weights'. It distinguishes itself from related methods by naming alternatives (sp.ips, sp.doubly_robust, sp.direct_method) and by stating the bias-variance tradeoff, so an agent can tell it apart from sibling tools.

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?

The description explicitly says when the method is appropriate ('under heavy importance weights'), states assumptions, pre-conditions, and failure modes, and names concrete alternatives including when to switch ('switch to the doubly-robust estimator'). It also gives a practical 'Typical minimum N: 500' guardrail, which is actionable selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

source_decomposeC
Read-only

Lerman-Yitzhaki (1985) Gini source decomposition. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
giniNo``"corrected"`` uses the ``n/(n-1)`` bias-corrected Gini, the default of :func:`inequality_index`. ``"population"`` uses the plug-in Gini, as Stata's ``descogini`` and Lerman & Yitzhaki's covariance formula do; shares ``S_k``, Gini correlations ``R_k`` and each source's percentage of the total are identical under both, since the factor cancels.corrected
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
sourcesYesIncome-source columns; total income is their row sum.
weightsNoObservation weights.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, covering the safety profile. The description adds no behavioral context beyond that: it does not describe what the output contains, how parity is verified, or any computational caveats. The cryptic 'certified parity evidence' could be a reliability claim but is uninformative. No contradiction with annotations, but no added value either.

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 description is extremely brief, which is concise, but the 'Validation: certified parity evidence' clause is an unexplained jargon fragment that takes up space without earning its place. The method name is front-loaded, but there is no structured elaboration or framing to help an agent parse it.

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?

Despite the rich schema and output schema, the two-sentence description does not orient the agent on what a source decomposition returns, how the validation claim was established, or how to interpret the Gini variants referenced only in the schema. With 9 parameters and a large sibling list, the description is too thin to be contextually self-sufficient, although the 100% schema coverage and output schema reduce the burden.

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 100%; the schema thoroughly documents all 9 parameters, including defaults, enums, and formats (e.g., detail levels, gini choice, as_handle, data_path schemes). The description itself contains no parameter information, so the baseline of 3 is appropriate.

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 exact method (Lerman-Yitzhaki 1985 Gini source decomposition), which identifies a specific operation: decomposing the Gini coefficient into income-source contributions. This distinguishes it from sibling decompositions like oaxaca or melly_decompose, though it is phrased as a noun phrase rather than an explicit instruction, and the 'Validation: certified parity evidence' fragment adds nothing to purpose.

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 alternatives. The method name implies a use case, but the description mentions no sibling tools, no exclusions, no data prerequisites, and no conditions that select this over inequality_index, shapley_inequality, or melly_decompose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spec_curveA
Read-only

Specification-curve analysis (Simonsohn et al. 2020): enumerates every combination of model choices the user declares defensible, runs them all, and returns the sign/magnitude distribution. Use when an agent needs to report robustness across a researcher-degree-of-freedom multiverse.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesFocal regressor (treatment) column.
yYesOutcome column.
alphaNo
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
controlsNoThe multiverse of control sets: a list of control-column lists, one per specification.
se_typesNoStandard-error flavours to sweep (e.g. 'classical', 'hc1', 'cluster').
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
cluster_varNoCluster column for clustered SEs.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/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, openWorldHint=false), so the bar is lower. The description adds real behavioral context beyond that: the exhaustive 'runs them all' trait signals potentially heavy computation, and 'returns the sign/magnitude distribution' tells the agent what kind of result to expect. No contradiction with annotations.

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 sentences, both essential: the first front-loads the action and method, the second delivers the usage condition. Zero filler words, and the methodological citation earns its place by anchoring the agent to the established technique.

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-value documentation is already covered. The 12 parameters are 92% documented in the schema (including the detail enum with token counts), and the description conveys the essential scope and cost signal ('runs them all'). Nothing critical for correctly invoking the tool is missing.

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 92%, so the schema already documents the parameters well (baseline 3). The description adds marginal conceptual framing β€” 'model choices the user declares defensible' maps onto the controls/se_types multiverse parameters β€” but it doesn't clarify syntax or formats beyond the schema. It stays at 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?

The description names a specific method (specification-curve analysis, Simonsohn et al. 2020) with a concrete verb chain: enumerates model-choice combinations, runs them all, returns the sign/magnitude distribution. This is distinct from sibling robustness/sensitivity tools because it uniquely identifies exhaustive multiverse enumeration as the core behavior.

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?

"Use when an agent needs to report robustness across a researcher-degree-of-freedom multiverse" gives an explicit, well-phrased trigger condition. It stops short of naming excluded alternatives or sibling tools one should prefer instead, so it lacks the when-not dimension that would make it a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spilloverA
Read-only

Direct + spillover treatment effect estimation under partial interference (within-cluster). Uses the Hudgens-Halloran decomposition with chosen exposure function. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Partial interference: spillover only within cluster, not across; Correct exposure function (fraction / any / count -- sensitivity tested); Overlap: every (treatment x exposure) cell has positive probability. Pre-conditions: data has a cluster column defining the interference boundary; treatment varies within clusters; >= 30 clusters for cluster-robust inference. Failure modes: No within-cluster variation in treatment -> Assignments are cluster-level -- use sp.cluster_matched_pair or cluster-level ATE; Exposure function misspecified -> Compare estimates under exposure_fn in {fraction, any, count}. Alternatives: sp.network_exposure, sp.cluster_matched_pair, sp.peer_effects. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterYesCluster column (interference boundary)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
exposure_fnNoExposure functionfraction
n_bootstrapNoNumber of bootstrap replications.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint:true and openWorldHint:false. The description adds substantial behavioral context beyond these: assumptions (partial interference, correct exposure function, overlap), failure modes (misspecified exposure_fn), validation tier, and typical minimum N. It does not contradict annotations; the read-only hint aligns with estimation-only behavior. The extra context fully discloses edge cases and limitations.

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 organized into labeled sections (assumptions, pre-conditions, failure modes, alternatives) and front-loads the core purpose. Every sentence carries information, but it is somewhat dense and could be seen as longer than necessary. Still, the structure improves scannability and no information is redundant. It is concise relative to the breadth of content.

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 complex estimator with 13 parameters and 4 required, the description covers purpose, assumptions, pre-conditions, failure modes, alternatives, and typical sample size. It leverages the output schema to avoid explaining return values. No critical usage aspect is missing; an agent could correctly invoke it for partial interference scenarios and know when to use alternatives.

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 100%, so the baseline is 3. The description adds limited parameter-specific meaning: it references exposure_fn (fraction/any/count) in assumptions and failure modes, and clarifies the cluster parameter as defining the interference boundary. However, it does not elaborate on other parameters (y, treat, data_path, etc.) beyond what the schema already states. It adds marginal value, not enough to push beyond 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: 'Direct + spillover treatment effect estimation under partial interference (within-cluster). Uses the Hudgens-Halloran decomposition with chosen exposure function.' This clearly distinguishes it from other causal tools by naming the method and interference assumption. It also explicitly lists alternatives (sp.network_exposure, sp.cluster_matched_pair, sp.peer_effects), making differentiation unambiguous.

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 explicit when-to-use conditions: pre-conditions (cluster column, within-cluster variation, >=30 clusters) and failure modes that route to alternatives (e.g., 'No within-cluster variation in treatment -> use sp.cluster_matched_pair or cluster-level ATE'). Also names alternatives directly, 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.

spillover_didA
Read-only

Butts spillover-ring DiD. The usual fix -- a spatial lag of treatment in a TWFE regression -- measures the direct effect against controls the spillover already reached. This sorts untreated units by distance to the nearest treated unit into spillover rings plus CLEAN controls beyond every ring, and estimates the direct effect and each ring's effect against the clean controls only. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Known limitations: there is no reference implementation, so this carries design-recovery evidence only and no cross-language parity; ring boundaries are the analyst's choice; there is no selector, and a too-wide outer ring silently contaminates the clean controls; covariate adjustment is not implemented. Assumptions: Parallel trends between each group and the clean controls; Spillovers vanish beyond the outermost ring; No anticipation. Pre-conditions: unit positions or a distance matrix; some untreated units beyond the outermost ring. Failure modes: No clean controls -> Every untreated unit is inside a ring. Narrow ring_edges or widen the study area; Ring effects do not decay with distance -> The outer...

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for confidence intervals and tests.
cohortYesFirst-treatment period (never_value = never)
coordsNoTwo columns giving each unit's position (Euclidean)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
distancesNoPre-computed distance matrix, for great-circle or network distances
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
ring_edgesNoRing boundaries; untreated units beyond the last edge are the clean controls
never_valueNonever_value parameter.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is exceptionally transparent: it discloses the validation evidence tier, known limitations (no reference implementation, no selector, ring contamination risk), assumptions, and failure modes. This goes well beyond the readOnlyHint annotation and provides rich behavioral context for the agent.

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 long but well-structured, front-loading the method and then systematically covering validation, limitations, assumptions, pre-conditions, and failure modes. Each section adds value; while it could be trimmed slightly, it's appropriately detailed for a complex method.

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 tool's complexity (15 params, output schema, annotations), the description covers all necessary aspects: method logic, assumptions, pre-conditions, failure modes, and validation evidence. Nothing an agent needs to decide correct usage is missing.

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 100%, so the baseline is 3. The description adds conceptual context (e.g., ring_edges meaning, clean controls) but doesn't significantly enhance parameter-specific syntax beyond the schema's own descriptions.

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 clearly states the tool's function: it sorts untreated units into spillover rings and estimates direct and ring effects against clean controls, contrasting with the 'usual fix' of a spatial lag TWFE. This distinguishes it from the sibling 'spillover' tool and other DiD estimators.

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 describes the method's purpose relative to the 'usual fix' and outlines pre-conditions and failure modes (e.g., no clean controls, ring boundaries choice), which guide when to use it. However, it doesn't explicitly name alternative tools or state 'use this instead of X', leaving some inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sqregC
Read-only

Simultaneous quantile regression at multiple quantiles. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
quantilesNoquantiles parameter (Optional[List[float]]).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the safety profile is known. The description adds no further behavioral context such as performance characteristics, limitations, or side effects. The phrase 'Validation: certified parity evidence' is too vague to convey any actionable behavioral detail and adds little beyond 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and front-loaded with the core purpose, but the second sentence 'Validation: certified parity evidence' is cryptic and adds no clear value. It feels like a disjointed afterthought that wastes space without contributing to usability. A cleaner structure would replace it with a usage note or remove it.

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?

This is a complex statistical tool with 10 parameters and an output schema, yet the description gives almost no context about expected inputs, output structure, or practical use. The output schema partially compensates, but the description does not prepare an agent to call the tool correctly, especially with the unexplained 'Validation' phrase.

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?

With 100% schema description coverage, the input schema already documents all 10 parameters. The description adds no extra meaning about how quantiles are specified or how x/y and data_path interact. It only repeats the general concept of quantile regression, so the baseline score of 3 is appropriate.

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 first sentence clearly identifies the tool as performing simultaneous quantile regression at multiple quantiles, a specific statistical task. The phrase 'at multiple quantiles' hints at a distinction from single-quantile regression siblings, though it does not name them. The cryptic second sentence about 'certified parity evidence' slightly muddies the purpose without providing a clear alternate meaning.

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 is given on when to use this tool versus alternatives like qreg, ivqreg, or qte. The description lacks any mention of use cases, prerequisites, or conditions that would steer an agent toward or away from this tool. An agent would have to infer usage purely from the tool name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stabilized_weightsA
Read-only

Compute stabilized IPTW weights for time-varying treatments. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Sequential exchangeability / no unmeasured confounding at each time point; Positivity: every treatment level is possible given the past; Correct specification of the treatment and/or outcome models. Pre-conditions: Sequentially measured covariates, (time-varying) treatment, and outcome; Models for the treatment process and the outcome (or weights). Failure modes: Stabilized weights have extreme values (positivity near-violation) -> Truncate weights, simplify the treatment model, or use a doubly-robust estimator (TMLE). Alternatives: sp.tmle, sp.g_computation, sp.ipw. Typical minimum N: 300.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUnit and time identifiers.
timeYesUnit and time identifiers.
treatYesTreatment column (binary 0/1 or continuous).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
baselineNoBaseline covariates.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treat_typeNoOverrides auto-detection.auto
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
time_varyingYesTime-varying confounders (already lagged to pre-treatment).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
trim_per_periodNoIf > 0, trim each period's density ratio at the symmetric quantile ``[trim_per_period, 1 - trim_per_period]`` *before* taking the cumulative product. A common value is 0.01. Set to 0 to disable per-period trimming (the default).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and the description is consistent with a compute-only operation. Beyond the annotations, it discloses the causal assumptions, the positivity failure mode with extreme weights, suggested remedies, the validated evidence tier, and a typical minimum sample size. This goes well beyond what the structured annotations provide.

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 organized into labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) with no filler. The purpose statement is front-loaded and every subsequent clause carries useful information for deciding whether and how to call the tool.

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?

The description covers what the estimator assumes, what inputs are needed, what can go wrong, and what to do about it, complemented by a complete input schema and an output schema. The only gap is that the 'outcome' and 'models' preconditions are not operationalized against the actual parameter list, so an agent might wonder how those are supplied to the 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 description coverage is 100%, and the schema already documents all 13 parameters, including trim_per_period, treat_type, and detail. The free-text description adds methodological context and the idea of truncating extreme weights, but it does not provide new parameter-level detail, so it stays at the baseline for high-coverage schemas.

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 first sentence states a specific verb and direct object: 'Compute stabilized IPTW weights for time-varying treatments.' This is not a tautology and clearly differentiates the tool from generic ipw or tmle siblings by naming the stabilized-weight variant and the time-varying scope. The alternatives line reinforces identity without requiring the reader to inspect 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 provides clear preconditions (sequentially measured covariates, treatment, models), assumptions (exchangeability, positivity), and a failure-mode remediation path (truncate weights or use TMLE). It names alternatives, but it does not give explicit decision rules for when to choose sp.tmle vs. sp.g_computation vs. sp.ipw over this tool, so there is clear context but not an exhaustive selection guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stacked_didA
Read-only

Stacked DiD (Cengiz, Dube, Lindner, Zipperer 2019). For each treatment cohort, constructs a sub-experiment with only that cohort + clean (never-treated or not-yet-treated) controls, then TWFE on the stacked panel. Robust to staggered-adoption contamination at the cost of dropping late-treated units in early sub-experiments. Validation: certified parity evidence. Do NOT use when: there is a single adoption cohort -- stacking produces one sub-experiment and is equivalent to sp.did(method='2x2'). Cost: Duplicates rows into one sub-experiment per treated cohort: the stacked dataset is roughly O(n x number of cohorts) before the event window trims it. Narrow window= to bound memory. Assumptions: Parallel trends within each sub-experiment; No anticipation within window; SUTVA. Pre-conditions: staggered adoption with >= 2 cohorts; window horizon available per cohort (else dropped). Failure modes: No clean controls for the latest cohort -> Late cohort's sub-experiment is dropped; check coverage in model_info. Consider sp.callaway_santanna. Alternatives: sp.callaway_santanna, sp.sun_abraham, sp.did_imputation. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column.
alphaNoSignificance level for confidence intervals and tests.
groupYesUnit identifier
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
windowNoEvent-time (lead, lag) window per sub-experiment
clusterNoCluster identifier column for clustered standard errors.
controlsNoControl-variable column names.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
first_treatYesfirst_treat parameter (str).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
never_treated_onlyNoUse only never-treated as controls (drops late-treated)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint: true and openWorldHint: false. The description adds substantial behavioral context beyond that: it explains the cost of row duplication (O(n x cohorts)), the risk of dropping late-treated units, and the need to check coverage in model_info if no clean controls exist. It does not contradict annotationsβ€”the tool is a read-only estimation operation.

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 dense but well-organized: it starts with the core methodology, then caveats, then alternatives and costs. However, it is somewhat long and could be tightenedβ€”some information is repeated (e.g., dropping late-treated units appears in both the robustness note and failure modes). Still, every major point is useful and front-loaded.

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 tool's complexity (staggered DiD with multiple cohorts, sub-experiments, memory concerns), the description covers all necessary aspects: method, assumptions, pre-conditions, failure modes, costs, and typical sample size. The output schema is present, so return values are already specified. Nothing critical is missing.

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 100%, so parameters like data_path, y, time, etc. are already documented. The description adds value by explaining the cost implications of window size (narrow window to bound memory), and the never_treated_only parameter's effect on control selection. It doesn't deeply elaborate on every parameter but the schema covers them, so this meets the baseline for high schema coverage.

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 clearly identifies the tool as implementing the stacked DiD estimator with a citation, and explains the core methodology (constructing sub-experiments per cohort, TWFE on stacked panel). It distinguishes itself from alternatives like callaway_santanna and sun_abraham, and even specifies when not to use it (single cohort). This goes beyond a simple verb+resource statement.

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?

The description explicitly states when to use (staggered adoption with >=2 cohorts) and not to use (single cohort), and names concrete alternatives (sp.callaway_santanna, sp.sun_abraham, sp.did_imputation). It also lists failure modes and pre-conditions, giving an agent clear decision rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

staggered_csA
Read-only

Callaway-Sant'Anna's estimand with design-based inference (Roth & Sant'Anna 2023). Same weights as sp.callaway_santanna -- every not-yet-treated cohort is a control -- but the standard error comes from random adoption timing rather than parallel trends. Use when timing was randomised and you want the familiar CS estimand; use sp.callaway_santanna when it was not. Units already treated in the first period are dropped, since ATT(g,t) is not identified for them. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Do NOT use when: adoption timing was not randomised -- use sp.callaway_santanna, whose inference rests on parallel trends instead. Assumptions: treatment timing is randomly assigned; balanced panel. Pre-conditions: balanced panel with at least two cohorts. Alternatives: sp.staggered_rollout, sp.staggered_sa, sp.callaway_santanna. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
gYesFirst-treatment period; never-treated may be 0, NaN or inf
iYesUnit identifier
tYesTime period
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
fisherNofisher parameter (bool).
se_typeNoConservative bound, or the adjusted SE R staggered printsneyman
estimandNoWeighting scheme, as in sp.staggered_rolloutsimple
n_fisherNoNumber of fisher.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
event_timeNoevent_time parameter (float or list).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral context beyond that: the inference is based on random adoption timing, units already treated in the first period are dropped, balanced panel is required, and at least two cohorts are needed. There is no contradiction with 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?

The description is dense, front-loaded, and well-structured, but it contains some repetition between the 'Use when' and 'Do NOT use when' statements and a somewhat generic 'Validation:' sentence that adds little actionable guidance. Overall it is appropriately sized for a complex estimator.

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 17-parameter estimator with a complete schema and output schema, the description supplies the crucial selection context: randomised timing requirement, familiar CS estimand, control definition, dropped units, assumptions, pre-conditions, and alternatives. An agent has enough information to decide whether to call it and how.

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 100%, so the input schema fully documents all 17 parameters. The description does not add parameter-specific meaning beyond the schema, so the baseline score of 3 is appropriate.

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 opens with a specific estimand and inference mode, 'Callaway-Sant'Anna's estimand with design-based inference (Roth & Sant'Anna 2023)', and contrasts it with the same weights as sp.callaway_santanna but a different standard error. It also names sibling alternatives, so an agent can distinguish it from closely related tools without inspecting 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?

The description gives explicit when-to-use and when-not-to-use guidance: 'Use when timing was randomised... use sp.callaway_santanna when it was not' and 'Do NOT use when: adoption timing was not randomised'. It also lists assumptions, pre-conditions, alternatives, and a minimum N threshold, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

staggered_rolloutA
Read-only

Efficient DiD for a randomised staggered rollout (Roth & Sant'Anna 2023). Identifies off random adoption timing, not parallel trends, so it is the right estimator for policy lotteries, phased launches and wave-randomised RCTs -- and the wrong one for observational rollouts. Uses the cohort's pre-treatment moments as optimal controls; efficient=False gives the plug-in. Validation: certified parity evidence. Do NOT use when: adoption timing was not randomised -- use a parallel-trends estimator such as sp.callaway_santanna instead. Assumptions: treatment timing is randomly assigned (this is the identifying assumption; parallel trends is neither assumed nor sufficient); balanced panel. Pre-conditions: balanced panel with at least two cohorts; single-unit cohorts are dropped with a warning, matching R staggered: their within-cohort covariance is not estimable. Alternatives: sp.callaway_santanna, sp.did_imputation, sp.sun_abraham. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
gYesFirst-treatment period; never-treated may be 0, NaN or inf
iYesUnit identifier
tYesTime period
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
fisherNoRun a Fisher randomisation test by permuting adoption dates across units; p-value in model_info['fisher_pvalue']
se_typeNoWhich SE lands in .se: 'neyman' is the conservative bound; 'adjusted' subtracts the variance the randomisation identifies and is what R staggered prints. Both are always in model_infoneyman
estimandNoWeighting: 'simple' (per treated cell), 'cohort' (within-cohort average first), 'calendar' (within-period average first), 'eventstudy' (ATT event_time periods after adoption)simple
n_fisherNoPermutation draws for the randomisation test
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
efficientNoUse the optimal pre-period control weights; False gives the plug-in estimator (R's beta=1)
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
event_timeNoOnly read when estimand='eventstudy'. A list returns one row per event time in .detail with the joint covariance in model_info['vcov']
use_did_a0NoWhich controls the efficient weights are chosen over. True uses the single DiD contrast at g-1; False uses every pre-period as a separate control (the general form, weakly more efficient). False requires efficient=True
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoSeed for the permutation draws
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
use_last_treated_onlyNoRestrict controls to the last-treated cohort (the Sun-Abraham comparison group) instead of every not-yet-treated cohort

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=false, and the description reinforces this read-only nature without contradicting it. It goes beyond annotations by disclosing edge-case behavior ('single-unit cohorts are dropped with a warning'), the identifying assumption (random treatment timing; parallel trends neither assumed nor sufficient), and validation status ('certified parity evidence'). This is exactly the kind of context an agent needs to interpret warnings and 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?

The description is front-loaded with a one-line purpose and immediately delivers usage guidance, assumptions, and alternatives. It is somewhat long and repeats 'balanced panel' in both Assumptions and Pre-conditions, but every section earns its place for a 20-parameter econometric tool with nuanced identification requirements.

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 tool's complexity (20 parameters, 5 required, output schema present), the description is remarkably complete. It covers the identifying assumption, when to use it, when not to, exact alternatives, data-shape preconditions, an edge-case warning, and a typical sample-size threshold. With an output schema already defined, nothing an agent needs to decide whether to call this tool is missing.

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 100%, so the baseline is 3. The description adds no parameter-specific meaning beyond what the schema already provides; for example, 'efficient=False gives the plug-in' is redundant with the schema's 'False gives the plug-in estimator (R's beta=1)'. No parameter is otherwise clarified or expanded.

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 opens with 'Efficient DiD for a randomised staggered rollout (Roth & Sant'Anna 2023)' and immediately clarifies the identifying assumption: 'Identifies off random adoption *timing*, not parallel trends'. It explicitly contrasts with 'the wrong one for observational rollouts' and names sibling estimators, so an agent can distinguish this tool from callaway_santanna, did_imputation, and sun_abraham 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?

The description gives explicit when-to-use guidance ('right estimator for policy lotteries, phased launches and wave-randomised RCTs'), an explicit exclusion ('Do NOT use when: adoption timing was not randomised'), a concrete alternative ('use a parallel-trends estimator such as sp.callaway_santanna instead'), and a list of alternatives. It also states preconditions (balanced panel, at least two cohorts) and a typical minimum N, leaving no ambiguity about suitability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

staggered_saA
Read-only

Sun-Abraham's estimand with design-based inference (Roth & Sant'Anna 2023). Identical to sp.staggered_cs except that only the last-treated cohort serves as control, which is what Sun & Abraham's interaction-weighted estimator does. Inference identifies off random adoption timing, not parallel trends. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Do NOT use when: adoption timing was not randomised -- use sp.sun_abraham, whose inference rests on parallel trends instead. Assumptions: treatment timing is randomly assigned; balanced panel. Pre-conditions: balanced panel with at least two cohorts. Alternatives: sp.staggered_rollout, sp.staggered_cs, sp.sun_abraham. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
gYesFirst-treatment period; never-treated may be 0, NaN or inf
iYesUnit identifier
tYesTime period
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
fisherNofisher parameter (bool).
se_typeNoConservative bound, or the adjusted SE R staggered printsneyman
estimandNoWeighting scheme, as in sp.staggered_rolloutsimple
n_fisherNoNumber of fisher.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
event_timeNoevent_time parameter (float or list).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only signal read-only and closed-world behavior, so the description carries the burden and does it well: it reveals that inference identifies off random adoption timing rather than parallel trends, notes the last-treated cohort as control, and states balanced-panel requirements. There is no contradiction with the readOnlyHint.

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 core method and then covers exclusions, assumptions, alternatives, and sample size in a compact, structured way. The only minor weakness is the slightly redundant 'Validation: validated evidence tier' line, but overall every sentence adds decision-relevant content.

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 methodologically nuanced staggered-DiD tool, the description provides the identifying assumption, contrast with parallel-trends estimators, applicability conditions, alternatives, and a minimum sample size. Combined with the rich schema and output schema, an agent has enough to select and invoke the tool correctly.

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?

The input schema has 100% coverage, so the schema already documents all parameters. The description adds no parameter-level syntax or semantics beyond the schema, which matches the baseline of 3 for fully covered schemas.

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 estimand (Sun-Abraham) and inference mode (design-based), and immediately distinguishes it from sp.staggered_cs by the control-group construction. It also names related alternatives, so an agent can identify this tool among the many staggered/event-study siblings.

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?

The description explicitly says when NOT to use the tool ('adoption timing was not randomised') and names the replacement (sp.sun_abraham) whose inference assumption differs. It also lists assumptions, pre-conditions, alternatives, and a typical minimum N, giving the agent clear routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

staggered_synthA
Read-only

Staggered Adoption Synthetic Control. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise. Alternatives: sp.sdid, sp.augsynth, sp.gsynth, sp.callaway_santanna. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo* ``'separate'`` -- fit a separate SCM for each treated unit. * ``'pooled'`` -- partially pool weights across cohorts with the same adoption time.separate
outcomeYesOutcome variable name.
placeboNoRun placebo inference.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary treatment indicator (0/1). Units transition from 0 to 1 at their respective adoption times.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
penalizationNoRidge penalty on donor weights.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description details statistical assumptions (SUTVA, no anticipation, convex combination), failure modes, and typical minimum N. It also suggests remedies for common problems, giving agents a clear picture of what can go wrong and how to interpret 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?

The description is compact yet information-dense, organized by assumptions, pre-conditions, failure modes, alternatives, and minimum N. Each section earns its place; the structure is logical and easy to scan, though not broken into explicit headings.

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 complex estimator with an output schema, the description covers assumptions, preconditions, failure modes, and alternatives, which is largely sufficient. It does not describe return values, but the output schema covers that. It could mention when the tool is inappropriate relative to its alternates, but overall it is complete.

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 100%, so all parameters are documented individually. The description adds general context about data requirements (e.g., outcome observed every period) but does not add parameter-specific semantics beyond what the schema already provides.

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 method ('Staggered Adoption Synthetic Control') and lists alternatives, which distinguishes it from siblings. However, the primary purpose (estimating causal effects in staggered adoption settings) is implied via assumptions and failure modes rather than explicitly stated with a verb like 'estimates'.

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 provides pre-conditions (panel structure, donor pool, no missing outcomes) and failure modes (high RMSPE, non-extreme placebo), which implicitly indicate when to use the tool. It lists alternatives but does not explicitly state when to choose this tool over them, nor does it give exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stepwiseC
Read-only

Stepwise variable selection for OLS regression. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesCandidate independent variable column names.
yYesName of the dependent variable column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoSelection strategy. Default ``"both"`` (bidirectional).both
verboseNoPrint step-by-step progress.
alpha_inNop-value threshold for variable entry (when ``criterion="pvalue"``).
alpha_outNop-value threshold for variable removal (when ``criterion="pvalue"``).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
criterionNoOptimisation criterion. Default ``"bic"``.bic
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already communicates that the operation is non-mutating, so the description's bar is lower. The added 'Validation: validated evidence tier' sentence is a vague meta-property rather than a behavioral disclosure about side effects, output granularity, or constraints. It does not contradict the annotations, but it also does not meaningfully expand beyond them.

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 first sentence is concise and front-loaded with the core purpose. The second sentence about validation evidence tier is tangential and does not clearly earn its place for an agent deciding how to invoke the tool, making the structure slightly wasteful despite the overall short length.

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?

This is a 13-parameter tool with enums, chaining via result_id/as_handle, and multiple selection criteria, yet the description provides only a one-line purpose and a validation note. Although the schema is thorough, the description omits an overview of the selection process, when to use different criteria, and how chaining works, leaving the contextual picture incomplete.

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 100%, with every parameter (data_path, x, y, detail, method, criterion, etc.) already explained in the input schema. The description adds no parameter semantics of its own, so the schema carries the full burden and the baseline of 3 applies.

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 operationβ€”'Stepwise variable selection'β€”and a target model type, 'OLS regression,' so an agent can tell it performs iterative variable selection rather than a plain fit. However, it does not explicitly distinguish itself from sibling selection tools like lasso_select or rlasso, so it misses the full sibling-differentiation bar.

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 is provided on when to use this tool versus alternatives such as lasso_select, rlasso, or regress. There is no mention of use cases, exclusion criteria, or relationships to sibling methods, leaving the agent to infer appropriateness from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stochastic_dominanceC
Read-only

Test for stochastic dominance of the treated distribution over the Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
orderNoOrder of stochastic dominance. 1 = first-order (CDF dominance). 2 = second-order (integrated CDF dominance).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesOutput from ``discos()`` or ``qqsynth()``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes that this is a non-mutating operation, lowering the burden on the description. The description adds only a vague comparison-direction/validation-tier context and does not contradict the annotations, but it does not disclose any further behavioral traits such as caching side effects or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, but it is structurally malformed and the parenthetical 'validated evidence tier' list is not informative. It is under-specified rather than economically specified.

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?

Even with a full input schema and output schema, the description fails to answer the core selection and invocation questions: what input should be passed, what the test compares, and how this differs from nearby siblings. The agent would have to infer critical usage details from the schema alone.

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 100%, so all eight parameters are already well documented in structured form. The description itself adds no parameter-level meaning, which is acceptable under the baseline but provides no additional value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description largely restates the tool name ('Test for stochastic dominance') and then appends a confusing object: 'over the Validation: validated evidence tier...' is grammatically incoherent and never identifies the comparison distribution or the hypothesis being tested. It also does not distinguish this tool from closely related siblings such as discos_test or qqsynth.

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 provided, and no alternatives or exclusion conditions are mentioned. With many distributional and synthetic-control siblings, the agent receives no help choosing this tool over discos_test, discos, or qqsynth.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

structural_breakC
Read-only

Structural break detection. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoRegressors. If None, uses constant only (mean shift).
yNoDependent variable.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimator or algorithm variant to use.bai-perron
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
max_breaksNoMaximum number of breaks to test.
min_segmentNoMinimum segment length as fraction of sample.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds no useful behavioral detail such as whether results are cached, how method selection works, or what the output contains. The validation tier phrase is unclear and does not disclose operational behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but under-specified. The second sentence about validation evidence tiers is confusing and does not earn its place, while the first sentence simply restates the name.

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 12-parameter statistical tool with rich schema descriptions and an output schema, the description still leaves out essential usage context: how data is supplied, what method defaults apply, and when this tool is appropriate. It is not complete enough to guide 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 100%, so the parameter schemas already explain x, y, alpha, detail, method, and related fields. The description itself adds no parameter-level meaning, which is acceptable given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says 'Structural break detection,' which is essentially a restatement of the tool name rather than an informative definition. It does not specify the estimator, the expected data structure, or what distinguishes this tool from related siblings like cusum_test or johansen.

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 is given about when to use this tool versus alternatives, nor are the minimal inputs such as x/y or data_path mentioned. The 'Validation' sentence is cryptic and does not explain invocation context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subcluster_wild_bootstrapB
Read-only

Subcluster wild cluster bootstrap for few-treated-clusters. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
h0NoNull value.
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoBootstrap replications.
clusterYesPrimary cluster column (for SE computation).
test_varNoParameter to test; default last element of ``x``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
subclusterNoFiner grouping at which sign-flips occur. If ``None``, every observation is its own subcluster (pure Rademacher at obs level).
weight_typeNoDistribution of sign flips. ``'webb'`` (6-point) recommended when treatment has <= 5 treated clusters.webb
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds no behavioral details such as whether the tool caches results, handles missing data, or requires specific preprocessing. The 'Validation: validated evidence tier...' sentence is cryptic and does not describe behavior in a way an agent can act on.

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 description is short, but the second sentence about 'Validation: validated evidence tier' is obscure and does not clearly support the tool's purpose. The first sentence is useful, but the second one introduces a concept that is unexplained and likely confusing to an agent, making it not fully self-justifying.

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 16 parameters, no title, and many closely related sibling tools (e.g., wild_cluster_bootstrap, wild_cluster_boot), this sparse description leaves critical gaps: it does not explain what 'subcluster' means, when to prefer this over wild_cluster_bootstrap, or what the returned evidence tier represents. The output schema may document return values, but the conceptual context is insufficient for a complex 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 description coverage is 100%, so the input schema fully documents all 16 parameters, including names, types, defaults, and meanings. The description adds no parameter-level detail beyond the method name and context, so it does not improve on the schema's baseline.

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 method ('subcluster wild cluster bootstrap') and its target context ('few-treated-clusters'), which distinguishes it from siblings like wild_cluster_bootstrap. However, it lacks a clear verb (e.g., 'estimates' or 'computes') and does not state what it returns, so it stops short of a fully specific purpose.

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 'for few-treated-clusters' provides an implied use case, suggesting the tool is meant for settings with few treated clusters. It does not explicitly name alternatives such as wild_cluster_bootstrap, define what counts as 'few', or state when not to use this tool, leaving usage largely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subgroup_analysisB
Read-only

Run subgroup heterogeneity analysis with forest plot.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesKey explanatory variable.
byYesMapping of *display name* -> *column name* for grouping.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoStandard error type for subgroup regressions.hc1
formulaYesRegression formula, e.g. ``"wage ~ education + experience"``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares the tool read-only; the description's 'Run... analysis' is consistent. It adds the forest plot output detail, which is useful context, but does not describe further behaviors such as output structure or required input formats.

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 a single, front-loaded sentence with no filler. It is concise but conveys only minimal information, which is appropriate for a simple tool but not exceptional.

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?

Given the large sibling list and the tool's specific output (forest plot), the description is under-specified: it does not explain when to use subgroup analysis, how 'subgroup' relates to the 'by' parameter, or how it differs from subgroup_decompose. The schema and annotations are thorough, but the description itself leaves too much to inference.

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 100%, so all parameters are already well documented. The description adds no parameter-level meaning beyond the schema, warranting the baseline score of 3.

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 ('Run') and resource ('subgroup heterogeneity analysis'), and mentions the forest plot output, which helps distinguish it from related analysis tools. It does not explicitly name a sibling tool, but the action and output are clear enough.

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 sibling alternatives like subgroup_decompose or cate_by_group. The description gives no prerequisites, conditions, or exclusions, leaving the agent to infer suitability from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subgroup_decomposeC
Read-only

Subgroup decomposition (between / within) of an inequality index. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
byYesby parameter (str).
epsNoeps parameter (float).
alphaNoSignificance level for confidence intervals and tests.
indexNoindex parameter (str).theil_t
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
weightsNoObservation weights.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds a cryptic 'Validation: certified parity evidence' note, which hints at a validation behavior but does not explain what it does, what it produces, or how it affects the output. No meaningful behavioral context is given beyond what annotations already provide.

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 compact and front-loaded, with the core function stated first. However, the second sentence about 'certified parity evidence' is vague and does not clearly contribute to understanding the tool's behavior, slightly reducing 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?

Given the tool has 12 parameterspell an output schema, and sits among many similar decomposition sibling tools, the description is incomplete. It lacks high-level context about when to use it, what outputs to expect, or any assumptions on input data. The schema carries the entire burden, and the description does not help an agent understand the tool's role in an analysis pipeline.

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?

The input schema has 100% description coverage, with each parameter (including the 'detail' enum) already documented in detail. The description adds no parameter-specific meaning, so the baseline of 3 is appropriate.

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 ('decomposition') and a specific resource ('inequality index') and specifies the between/within split, which clearly distinguishes it from other decomposition tools like disparity_decompose or mediation_decompose. The purpose 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 Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, no prerequisites, no exclusions. It does not mention any context in which subgroup_decompose should be preferred over other decomposition functions among the dozens of siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sun_abrahamA
Read-only

Sun-Abraham (2021) interaction-weighted event-study. Fixes the contamination in dynamic event-study TWFE coefficients from other relative-time bins by using cohort-specific interaction weights. Canonical companion to Callaway-Sant'Anna for event studies. Validation: certified parity evidence. Do NOT use when: all units adopt treatment simultaneously -- the cohort x relative-time interactions collapse; use sp.did(method='2x2'); cohorts are very small (a handful of units each) -- interaction-weighted estimates become noisy and the cohort-share weights unstable. Cost: Builds a saturated cohort x relative-time interaction design: columns grow as (cohorts x event-time window), so a wide window on a many-cohort panel produces a large dense design matrix. Trim via event_window=. Assumptions: Parallel trends across cohorts; No anticipation within event_window lead horizon; SUTVA. Pre-conditions: panel with unit x time x outcome; g is the first-treatment period (int), 0 / NaN for never-treated; >= 2 pre-periods per cohort for event-study leads. Failure modes: No never-treated cohort when control_group='nevertreated' -> Pass control_group='notyettreated' or add never-treated units; Pre-tren...

ParametersJSON Schema
NameRequiredDescriptionDefault
gYesFirst-treatment period (0 = never-treated)
iYesUnit identifier
tYesTime period column
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster variable (defaults to i)
pretestNoReport the joint pre-trend Wald test ('joint') or skip it ('none').joint
weightsNoUnit-level sampling/population weights omega. Enters the fixed-effect projection, the least-squares solve, the cluster-robust variance, and the interaction weights (which become shares of omega-mass). Changes the target parameter, not the precision.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesNoCovariate matrix, DataFrame, or column names.
aggregationNoHeadline summary convention: 'event_time' (equal weight per relative time) or 'fixest_att' (cohort-size weighted, matching fixest agg='att').event_time
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
event_windowNo(lead, lag) window for event-study coefficients
control_groupNoControl armnevertreated
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
control_cohortNoNominate the reference cohort explicitly: a 0/1 indicator column (Stata eventstudyinteract's control_cohort()) or a cohort value from g.
share_varianceNoCarry the cohort-share estimation term of Sun & Abraham (2021, Prop. 3) in the event-study variance (True: Stata eventstudyinteract convention) or treat the interaction weights as fixed (False: fixest::sunab convention). The two coincide at single-cohort relative times; point estimates are unaffected.
pretest_periodsNoRestrict the pre-trend test to the k estimated leads closest to treatment.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint, the description discloses computational cost scaling (columns grow as cohorts x event-time window), statistical assumptions, data preconditions, and failure modes with remedies. It also warns about noisy estimates and unstable weights with small cohorts and notes the impact of weighting choices. This goes far beyond what the annotations alone 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?

The description is long but well-structured with clear labeled sections (Validation, Do NOT use when, Cost, Assumptions, Pre-conditions, Failure modes) and front-loads the core definition. It earns most of its length, though phrases like 'certified parity evidence' add little and the overall length approaches the limit of conciseness.

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?

The description is remarkably complete: purpose, contraindications, alternatives, cost, assumptions, data preconditions, and failure modes. However, it is truncated mid-word at 'Pre-tren...', so the failure-mode list is incomplete. Return-value details are reasonably covered by the output schema, so no deduction is made there.

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 schema covers all 21 parameters at 100%, so the baseline is 3. The description adds meaningful extras: it clarifies that g should be an integer first-treatment period with 0/NaN for never-treated, and advises trimming via event_window to control the size of the saturated design. These details go slightly beyond the schema's descriptions.

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 identifies the exact method (Sun-Abraham interaction-weighted event-study), states the problem it solves (contamination in dynamic TWFE coefficients from other relative-time bins), and explicitly frames it as a canonical companion to Callaway-Sant'Anna. This clearly differentiates it from both TWFE-family estimators and its closest sibling, callaway_santanna.

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?

The description provides an explicit 'Do NOT use when' section covering simultaneous adoption and very small cohorts, with a concrete alternative for simultaneous adoption (sp.did(method='2x2')). Failure modes even suggest fixes such as switching control_group to 'notyettreated' when no never-treated cohort exists. This is unusually actionable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

super_learnerA
Read-only

Fit a Super Learner ensemble. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness (sequential exchangeability for longitudinal/LTMLE); Positivity / overlap of treatment given history; At least one nuisance (outcome or treatment) is estimated consistently; the targeting step gives double robustness. Pre-conditions: Covariates, treatment, and outcome (for survival/longitudinal variants: time-to-event and time-varying covariates); Enough data to fit a Super Learner / HAL nuisance library. Failure modes: Near-positivity violations create extreme clever-covariate weights -> Truncate weights, restrict the estimand, or report a positivity diagnostic. Alternatives: sp.dml, sp.ipw, sp.g_computation. Typical minimum N: 400.

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesFeature matrix or covariate DataFrame.
yYesOutcome variable column name or outcome array.
taskNo'regression' or 'classification'.regression
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
libraryNoCandidate learners. If None, uses a default library.
n_foldsNoCross-validation folds.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false. The description adds useful statistical behavior context: double robustness, clever-covariate weights, positivity-violation remedies, and truncation guidance. It does not mention side-effect details like caching from as_handle, but that is covered by the schema and the read-only annotation is not contradicted.

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 dense but well-organized with labeled sections: Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, and Typical minimum N. Every sentence contributes substantive information with minimal fluff, though it is longer than strictly necessary.

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 complex 12-parameter estimator, the description supplies essential statistical context: assumptions, preconditions, failure remedies, alternatives, and minimum sample size. An output schema exists, so return-value details do not need to be repeated here. No major operational gap remains.

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 100%, so the schema carries the parameter documentation burden. The description only loosely references covariates, treatment, and outcome, and does not elaborate on parameters such as detail, as_handle, library, or n_folds. Baseline 3 is appropriate.

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 action, 'Fit a Super Learner ensemble,' naming both the verb and the resource. It also lists alternatives, making it clear this tool is not sp.dml, sp.ipw, or sp.g_computation.

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 assumptions, pre-conditions, failure modes, and a typical minimum N of 400, which give strong contextual guidance on when the tool is appropriate. However, it lists alternatives without explicit selection rules such as 'use this when X, otherwise use Y,' so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suregC
Read-only

Seemingly Unrelated Regression (SUR). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
tolNoNumerical convergence tolerance.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo'ols' (equation-by-equation), 'fgls' (feasible GLS / SUR), 'iterative' (iterated SUR).fgls
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
equationsYesMapping from equation name to (dep_var, list_of_regressors).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the operation is known to be read-only, but the description itself adds no behavioral detail. The phrase 'Validation: certified parity evidence' is cryptic and does not explain output behavior, error cases, or data requirements beyond what the schema already states.

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 description is short and the first sentence is front-loaded. However, the second sentence, 'Validation: certified parity evidence,' is not clearly actionable and does not earn its place as useful guidance.

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?

Although the input schema is detailed and an output schema exists, the description leaves out essential selection context for a complex econometric tool. An agent selecting among many regression-family siblings would need to know when SUR is appropriate and what the validation claim means.

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 100%, so the schema already documents all 11 parameters, including defaults and enums. The description adds no parameter-level meaning, so the baseline score of 3 is appropriate.

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 identifies the exact estimator ('Seemingly Unrelated Regression (SUR)') and expands the tool name, so an agent can tell this is a SUR procedure. However, it uses no action verb and does not explicitly contrast it with related siblings such as panel_fgls or three_sls.

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 provides no guidance on when to use sureg versus alternatives like regress, panel_fgls, or three_sls. There are no explicit when-to-use conditions, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

survival_sensitivityA
Read-only

Nonparametric sensitivity for survival / hazard-ratio outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
log_hrYeslog_hr parameter (float).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
se_log_hrYesse_log_hr parameter (float).
gamma_gridNoGamma (>= 1) values. Defaults to ``np.linspace(1.0, 3.0, 21)``.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
baseline_survival_tNoBaseline S_0(t) used to report Delta survival at time t.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the safety profile, and the description adds the methodological scope ('nonparametric', 'survival / hazard-ratio'). However, it does not disclose what the sensitivity analysis actually varies, what assumptions are made, or what the returned estimates represent. It adds some context but not rich behavioral detail.

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 a single, front-loaded sentence with no filler. Every word contributes to identifying the method and its target outcome domain, making it appropriately concise for a tool whose schema already provides detailed parameter 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?

Given the 11 parameters, the rich schema, and the output schema, the description is minimally usable, but it does not fully orient the agent relative to the many sensitivity-analysis siblings. The missing usage guidance and absence of any explanation of the statistical workflow leave clear gaps beyond what structured fields provide.

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 100%, so the baseline is 3 even though the description itself adds no parameter-level meaning. It does not clarify that log_hr and se_log_hr are summary statistics from a fitted survival model, nor what gamma_grid or baseline_survival_t imply. The schema largely carries the burden.

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 purpose: nonparametric sensitivity analysis for survival/hazard-ratio outcomes. It helps distinguish this from generic sensitivity tools by scoping to survival/hazard-ratio settings, though it does not explicitly name sibling tools. The lack of an explicit verb keeps it from being 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The outcome scope ('survival / hazard-ratio') gives a clear context for when to consider the tool, but there is no explicit guidance on when not to use it or which alternative to prefer among the many sensitivity-related siblings such as sensitivity, rosenbaum_gamma, evalue, or unified_sensitivity. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

survivor_average_causal_effectA
Read-only

Zhang-Rubin (2003) sharp bounds on the Survivor Average Causal Effect. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Sequential exchangeability / no unmeasured confounding at each time point; Positivity: every treatment level is possible given the past; Correct specification of the treatment and/or outcome models. Pre-conditions: Sequentially measured covariates, (time-varying) treatment, and outcome; Models for the treatment process and the outcome (or weights). Failure modes: Stabilized weights have extreme values (positivity near-violation) -> Truncate weights, simplify the treatment model, or use a doubly-robust estimator (TMLE). Alternatives: sp.tmle, sp.g_computation, sp.ipw. Typical minimum N: 300.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
treatYesTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
survivalYessurvival parameter (str).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint already set, the description adds valuable behavioral context: failure modes (stabilized weights with extreme values), suggested remedies (truncate weights, simplify models, use TMLE), validation tiers, and typical minimum N. No contradiction with 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?

The description is structured with clear labels (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) and front-loads the core method and estimand. It is information-dense but each section 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?

For a complex causal-inference tool, the description covers assumptions, preconditions, failure modes, alternatives, and minimum sample size. It does not explain return values, but an output schema is available, so that gap is acceptable.

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 100%, so the baseline is 3. The description does not add parameter-specific meanings (e.g., what 'survival' or 'treat' should contain), but it does provide background context about time-varying treatments and weights that helps interpret parameters indirectly.

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 method (

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 provides Assumptions, Pre-conditions, and explicitly lists Alternatives (sp.tmle, sp.g_computation, sp.ipw). It gives clear context for when this tool is appropriate (SACE under sequential exchangeability) but does not explicitly state when to choose it over the alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

survregC
Read-only

Parametric survival model (AFT parameterization). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoCovariate columns (or formula RHS).
distNodist parameter (str).weibull
alphaNoSignificance level for confidence intervals and tests.
eventNoEvent indicator column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoRobust standard-error or covariance estimator option.nonrobust
clusterNoCluster identifier column for clustered standard errors.
formulaNoFormula ``'duration ~ x1 + x2'``.
durationNoFollow-up time column (or formula LHS).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions 'Validation: certified parity evidence' which hints at some reliability guarantee, but it doesn't disclose behavioral traits like side effects, permissions, or what happens to data. The readOnlyHint annotation covers the read-only nature, but the description adds little 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise (two sentences) but under-specified. The first sentence is informative, the second is vague and doesn't earn its place. It's not overly long, but it lacks the detail needed to be fully effective.

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?

Given the tool's complexity (14 parameters, output schema present), the description is extremely sparse. It doesn't explain the model's inputs, outputs, or typical usage patterns. The output schema may cover return values, but the description fails to convey essential usage context.

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 100%, so all 14 parameters are documented in the schema itself. The tool description doesn't add any parameter-specific meaning, but since the schema covers everything, the baseline of 3 applies.

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 clearly identifies the tool as a parametric survival model with AFT parameterization, which distinguishes it from Cox and other survival approaches. It states a specific model type, so the purpose is clear, though it doesn't explicitly say 'fits' or 'estimates'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/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 alternatives like Cox or other survival models. No conditions, prerequisites, or exclusions are mentioned, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synthA
Read-only

Unified synthetic control estimator. method= selects variant: 'classic', 'demeaned', 'detrended', 'unconstrained', 'elastic_net', 'augmented', 'sdid', 'gsynth', 'staggered'. inference= selects: 'placebo', 'conformal', 'bootstrap', 'jackknife'. Validation: certified evidence with scoped limitations. Known limitations: Classical SCM certification is specification-specific: ADH/Synth parity requires passing the same special_predictors recipe; the default outcome-only V=I path is a documented Kaul-style convention; Default native classical SCM can differ from Synth on Basque-style panels by a documented local-optimum convention (the outer V optimisation has multiple near-equivalent minima); use backend='synth' or canonical special_predictors when exact R parity is required. Do NOT use when: many units are treated at once -- classic SCM is built for one (or few) treated units; use sp.gsynth, sp.sdid or sp.callaway_santanna; the pre-treatment window is short (fewer than ~10 periods) -- the donor weights overfit noise and pre-period fit stops being evidence; the treated unit's pre-period outcome lies outside the convex hull of the donors -- no non-negative weighting can match it; check t...

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoSCM variant: classic/demeaned/detrended/unconstrained/elastic_net/augmented/sdid/gsynth/staggeredclassic
backendNoOptional reference backend for exact R parity: synth for classic SCMnative
outcomeYesOutcome variable column name or outcome array.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
inferenceNoInference method: placebo/conformal/bootstrap/jackknife
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentNoBinary treatment column (staggered only)
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitNoTreated unit (not needed for staggered)
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeNoFirst treatment period

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnlyHint by disclosing scoped validation limitations, Kaul-style outcome-only convention, local-optimum convention, overfitting risk with short pre-periods, and convex-hull infeasibility. No contradiction with 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?

The description is long but structured with clear sections (variant selection, inference selection, limitations, do-not-use). It is front-loaded with the core purpose and method choices. The text ends mid-sentence ('check t...'), which slightly weakens structure, but the existing content is high-density and scannable.

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 complex 15-parameter estimator, the description covers purpose, method/inference enums, key limitations, and routing to alternatives. Required data columns and output behavior are already handled by the 100%-covered input schema and the presence of an output schema.

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 100%, so the schema already explains every parameter. The description adds context around method/inference choices and the backend parity condition, but largely restates what the enum/property descriptions already convey.

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 identifies a specific resource ('Unified synthetic control estimator') and lists method/inference variants, making the tool's role clear. It does not explicitly contrast itself with close siblings like robust_synth or augsynth, though its 'unified' framing and method enum imply broad coverage.

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 explicit 'Do NOT use when' conditions with named alternatives (sp.gsynth, sp.sdid, sp.callaway_santanna) and warns about short pre-treatment windows and convex-hull violations. Also gives conditional guidance for exact R parity via backend='synth' or canonical special_predictors.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_compareA
Read-only

Run multiple SCM variants and compare them side by side. Cost: Runs every estimator in methods= end to end, so cost is the sum of the individual fits -- and each placebo-enabled member internally re-runs once per donor. Expect it to be the slowest call in a synthetic-control workflow; narrow methods= once you have shortlisted.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodsNoSCM variants to compare. If ``None`` (default), all 20 registered methods are attempted, in ascending complexity order: ``classic, penalized, demeaned, detrended, unconstrained, elastic_net, augmented, sdid, gsynth, mc, discos, scpi, penscm, fdid, sparse, cluster, kernel, kernel_ridge, bayesian, bsts``. Pass an explicit subset to reduce runtime.
outcomeYesOutcome variable column name.
placeboNoWhether to run placebo inference for each method.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitNoIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeNoFirst treatment period (inclusive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds valuable behavioral context beyond that: cost is the sum of individual fits, placebo-enabled members rerun per donor, and it is the slowest call. This helps an agent budget compute time appropriately.

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 with no filler. The core purpose is front-loaded, and the cost warning is directly relevant to tool selection and invocation.

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 rich input schema, output schema, and readOnly annotation, the description provides the essential extra context: cost profile, workflow placement, and how to control runtime. Nothing critical is missing 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 100%, so the schema fully documents all 14 parameters. The description references methods= and advises narrowing it, but adds no param-specific meaning beyond what the schema already provides.

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 action and resource: 'Run multiple SCM variants and compare them side by side.' This distinguishes it from single-estimator tools like synth, though it does not explicitly differentiate it from comparison tools like compare_estimators.

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 gives clear workflow context: expect it to be the slowest call in a synthetic-control workflow and narrow methods= once shortlisted. It implies when to use it, though it does not explicitly state exclusions or name alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synthdid_estimateB
Read-only

R-style alias: synthdid::synthdid_estimate. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Parallel trends in the absence of treatment, after the synthetic/DiD weighting; No anticipation and no interference between units (SUTVA); The control pool's outcome process is stable around the intervention. Pre-conditions: Panel with treated and control units and a clear treatment date; Pre-treatment periods available to assess comparability of trends; panel data in long form (unit x time x outcome). Failure modes: Weighted pre-treatment trends still diverge between treated and synthetic control -> Inspect the unit/time weights and pre-trend fit; consider event-study DiD with honest bounds; Pre-treatment RMSPE > post-treatment effect -> Poor pre-fit -- switch to method='demeaned'/'augmented' or enlarge donor pool; Placebo p-value >= 0.1 despite visible gap -> Use inference='conformal' (valid under weak assumptions) or report ranked placebo statistic. Alternatives: sp.synth, sp.augsynth, sp.callaway_santanna, sp.gardner_did. Typical minimum N: 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column.
unitYesUnit identifier column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treat_timeYestreat_time parameter.
treat_unitYestreat_unit parameter.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, covering the non-mutating behavior. The description adds valuable behavioral context beyond the annotations: statistical assumptions (parallel trends, SUTVA, no anticipation), pre-conditions, and failure modes (pre-trend divergence, RMSPE, placebo p-value) that an agent should know before calling and when interpreting results. It does not contradict 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical N), but it is long and dense. The opening line is unhelpful, and the actual purpose is buried among operational details. It could be more concise by stating the core function first and moving some failure-mode detail to an output schema or linked documentation.

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?

Given the complexity of 11 parameters and 6 required ones, the full schema coverage and presence of an output schema cover structural details. The description fills in domain contextβ€”assumptions, pre-conditions, failure modes, alternatives, and minimum sample sizeβ€”making it fairly complete for an agent to decide when to call and how to interpret common issues. It lacks an explicit plain-English statement of what the tool returns, but the output schema likely addresses that.

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 100%, so the baseline is 3. The description does not add any parameter-specific semantics; it only tangentially references method='demeaned'/'augmented' and inference='conformal' in failure modes, which are not even among the schema's parameters. It does not clarify the meaning of required parameters like treat_time or treat_unit, leaving the schema's minimal descriptions to carry the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'R-style alias: synthdid::synthdid_estimate', which is a tautology and does not explicitly state that the tool estimates a synthetic difference-in-differences treatment effect. While it mentions synthetic/DiD weighting and synthetic control, the core verb-resource statement is absent, and the tool is not clearly distinguished from siblings like synth, sdid, or robust_synth.

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 lists pre-conditions (panel with treated/control units, treatment date, long form) and alternatives (sp.synth, sp.augsynth, sp.callaway_santanna, sp.gardner_did), which imply when to use the tool, but it does not explicitly differentiate among alternatives or state when not to use it. The failure modes provide troubleshooting guidance but not usage selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synthdid_placeboA
Read-only

Run placebo estimates assigning treatment to each control unit.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column.
unitYesUnit identifier column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoEstimator or algorithm variant to use.sdid
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treat_timeYestreat_time parameter.
treat_unitYestreat_unit parameter.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already communicates that this is a non-destructive operation. The description adds useful behavioral detail by specifying that treatment is reassigned to each control unit. It does not describe output interpretation, but the output schema covers the return payload.

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 a single, front-loaded sentence with no filler. The only minor cost is that 'placebo estimates' partially repeats the tool name, but the 'assigning treatment to each control unit' clause earns 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?

The rich input schema, output schema, and readOnlyHint carry much of the burden, so the tool is callable as-is. However, with 12 parameters and many closely related synthetic-control and placebo tools, a sentence on when to use this placebo or how it relates to synthdid_estimate would make the description materially more complete.

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 100%, so the baseline is 3 even without parameter details in the description. The description adds marginal semantic context by clarifying that 'control unit' is the focus, but it does not explain how the required parameters map to the placebo procedure beyond what the schema already states.

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 uses a specific verb and resource: 'Run placebo estimates assigning treatment to each control unit.' It clearly identifies the control-unit placebo scheme, which distinguishes it from nearby tools like synth_time_placebo or synthdid_estimate.

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 gives no guidance on when to use this tool versus alternatives such as synth_time_placebo, synth_loo, or synth_donor_sensitivity. There are no exclusions, prerequisites, or indications of the diagnostic context in which a control-unit placebo is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synthdid_plotB
Read-only

Plot observed vs synthetic trajectory.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesOutput of :func:`sdid`.
figsizeNofigsize parameter (Tuple[float, float]).
ci_alphaNoci_alpha parameter (float).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
synth_colorNosynth_color parameter (str).#E74C3C
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treated_colorNotreated_color parameter (str).#2C3E50

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, and the description 'Plot' is consistent with a read-only action, so there's no contradiction. The description adds minimal behavioral transparency beyond a plot action; it does not disclose that it likely requires a fitted result from sdid, that it may produce a figure object, or how it handles errors. Given annotations cover safety, a 3 is appropriate because the description is clear but lacks depth.

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 a single sentence with no unnecessary words. It is concise and front-loads the core action. It earns a 5 for zero 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?

Given that the tool has a detailed schema and an output schema info not shown, but required params are minimal (result), the description is adequate for an agent to understand the basic function. However, it misses context on the required input (a result from sdid) and the typical usage pattern (chain from sdid or synthdid_estimate). The description is complete enough for a simple plot tool, but could mention that it expects a result object from :func:`sdid`. Since no explicit output schema is shown but indicated, the description is reasonably complete.

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?

The schema has 100% coverage, with detailed descriptions for parameters like 'result', 'ax', 'title', 'detail', etc. The description itself adds no parameter-specific semantics; it just states the plot action. The schema already explains each parameter, so the baseline 3 is appropriate. The description does not compensate with additional clarity beyond the schema.

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 'Plot observed vs synthetic trajectory.' clearly states the tool's purpose: to generate a plot comparing observed and synthetic trajectories. It specifies the verb 'plot' and the resources involved (observed vs synthetic), which is clear. However, it does not explicitly differentiate from sibling tools like synthplot, synthdid_rmse_plot, or synthdid_units_plot, which are also plotting tools. Given the name synthdid_plot, the purpose is understood but the distinction from similar siblings is not 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?

The description does not indicate when to use this tool versus alternatives. It does not mention the context (e.g., after running synthdid_estimate) or contrast with similar plotting tools such as synthplot, synthdid_rmse_plot, or synthdid_units_plot. Sibling tools exist that serve overlapping functions, but no guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synthdid_rmse_plotC
Read-only

Pre-treatment RMSE of treated vs synthetic trajectory.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesresult parameter (CausalResult).
figsizeNofigsize parameter (Tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the description doesn't need to repeat safety. However, it adds no additional behavioral contextβ€”such as requiring a fitted result, returning a figure, or caching behaviorβ€”beyond what the name and schema already imply. No contradiction with 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?

The description is a single, efficient sentence with no wasted words. It conveys the core content immediately, though it could have included a bit more context without becoming verbose. Front-loaded and appropriately sized for a simple plot tool.

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?

Despite having an output schema and annotations, the description is too thin for a tool with 9 parameters and a rich sibling context. It doesn't explain what 'pre-treatment RMSE' means in practice, when to choose this over synthdid_plot, or what the 'result' parameter represents. An agent would likely need to inspect the schema and output schema to use it correctly.

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 100%, so the baseline is 3. The description adds no parameter-specific meaning; it doesn't clarify that 'result' must be a fitted CausalResult or how 'figsize' affects the plot. But because all parameters are already documented in the schema, the description doesn't need to compensate.

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 metric ('Pre-treatment RMSE') and the comparison ('treated vs synthetic trajectory'), which distinguishes it from sibling tools like synthdid_plot or synthdid_units_plot. However, it lacks an explicit verb (e.g., 'plots'), relying on the tool name to imply visualization, so it's not a full 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 guidance is given on when to use this tool versus alternatives. It doesn't mention that it requires a fitted CausalResult or that it's a diagnostic for pre-treatment fit. The single sentence offers no context for selection among the many synthdid-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synthdid_units_plotC
Read-only

Horizontal bar chart of unit weight contributions.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
top_nNoShow the top-N donors by weight.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesresult parameter (CausalResult).
figsizeNofigsize parameter (Tuple[float, float]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes this is a safe read operation, and the description adds little behavioral context beyond that. It does not disclose how the result is consumed, how top_n affects the chart, what is returned, or any edge-case behavior, so the description carries almost none of the behavioral burden.

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 a single, front-loaded sentence with no filler or redundancy. It is concise and immediately communicates the output type, though it could arguably include one more clause about the required 'result' input without losing conciseness.

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?

Despite having an output schema and full parameter coverage, the tool has 10 parameters and sits among dozens of plot and synthetic-control siblings. The description does not explain how to obtain the required 'result', how result_id/data_path alternatives work together, or how this plot relates to synthdid_estimate/synthdid_plot, leaving important invocation context missing.

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 100%, so the input schema already documents all parameters and their purpose. The description itself adds no parameter meaning beyond what the schema provides; baseline 3 applies.

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 clearly identifies the deliverable as a horizontal bar chart and narrows the content to 'unit weight contributions,' which matches the tool name and is distinct from generic plotting siblings like synthdid_plot or synthplot. However, it does not explicitly differentiate this from closely related synthdid plotting tools or state what a 'unit' refers to in this context.

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 is provided about when to use this tool versus the many sibling plotting and synthdid tools. There are no exclusions, prerequisites, or alternative tool references, so the agent must infer usage entirely from the name and parameter schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_donor_sensitivityB
Read-only

Donor-pool bootstrap sensitivity for Synthetic Control.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoDonor subset size. Default is ``floor(J * 0.75)`` where *J* is the total number of donors.
seedNoRandom seed for reproducibility.
timeYesTime column.
unitYesUnit identifier column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
n_samplesNoNumber of random donor subsets to draw.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
penalizationNoRidge penalty forwarded to SCM.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the methodology detail 'bootstrap', which is slightly beyond the tool name, and the readOnlyHint=true annotation already communicates that this is a safe read-only computation. However, it does not disclose the stochastic sampling behavior, what is returned, or how the sensitivity results should be interpreted. It does not contradict 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?

The description is a single short phrase with no filler and is easy to scan. It could be improved by using a full sentence with a verb, but as a concise summary it earns its place.

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 tool with 15 parameters, 6 required parameters, and many closely related sibling tools, the description is too thin. It does not explain what 'sensitivity' means here, what kind of result the user should expect, or when this tool is the right choice. The output schema covers return structure, but the surrounding context is still insufficient for reliable selection among many synth and sensitivity tools.

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 100%, so the parameters are already well documented in the schema. The description adds no parameter-level meaning beyond the general idea of donor-pool bootstrap sensitivity, which maps loosely to k and n_samples, but that is already explicit in the schema.

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 resource and method: donor-pool bootstrap sensitivity for Synthetic Control. It is more specific than generic siblings like synth_sensitivity, but it is a noun phrase rather than a verb phrase ('Runs...', 'Computes...'), so it stops short of a fully explicit action.

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 is given on when to use this tool instead of synth_sensitivity, robust_synth, synth_power_plot, or other sensitivity-related siblings. There is no mention of use cases, exclusions, or alternative tools, leaving the agent to infer applicability from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_looC
Read-only

Leave-one-out donor sensitivity for Synthetic Control.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime column.
unitYesUnit identifier column.
alphaNoSignificance level for z-based p-values.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
penalizationNoRidge penalty forwarded to SCM.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the tool's safe read-only nature is known. The description adds no behavioral context beyond the name itselfβ€”no hints about return structure, side effects, or expectations. It fails to disclose any operational traits that aren't already implicit in the tool name.

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 description is a single short sentence, making it maximally concise, but it lacks structure and front-loading of key information. It is under-specified for a tool with 13 parameters and complex options, so while it is brief, it doesn't effectively guide usage. The short length is not offset by informative content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (13 parameters, multiple optional features like detail levels, as_handle, penalization), this one-line description is grossly inadequate. It provides no explanation of the tool's role in a workflow, no clarification of the specialized 'detail' parameter or chaining via as_handle, and leaves an agent without sufficient context to invoke it appropriately.

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 100% with each parameter documented, so the schema provides full semantic meaning for all 13 parameters. The description adds no additional parameter-level information, which aligns with the baseline of 3 since the schema carries the burden entirely.

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 operation ('Leave-one-out donor sensitivity') and a clear target ('Synthetic Control'), which distinguishes it from sibling tools like synth_sensitivity or synth_donor_sensitivity. However, it doesn't explicitly contrast with these siblings, making it only slightly above baseline clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There is no mention of scenarios, exclusions, or recommended contexts. The absence of any usage direction makes it nearly impossible for an agent to decide between this and related synth sensitivity tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_mdeB
Read-only

Minimum Detectable Effect for a Synthetic Control design.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed for reproducibility.
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for the placebo test.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable name.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
power_targetNoDesired power level.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
n_simulationsNoNumber of simulations per effect size.
treatment_timeYesFirst treatment period.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so the safety profile is already clear. The description adds the design scope ('Synthetic Control design') but discloses no additional behavioral traits such as simulation behavior, defaults, or chainability. It does not contradict 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with every word contributing to the core concept. There is no filler, and the key purpose is front-loaded.

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 and all parameters documented, the description does not need to cover returns or parameter formats. However, for a complex 15-parameter tool in a crowded sibling space, the one-line description provides no context about how it relates to other power/synthetic control tools or when it should be selected.

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 100%, so the parameters already carry detailed meaning, including defaults and enums. The tool description adds no parameter-level information beyond the schema, so the baseline score of 3 is appropriate.

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 identifies the tool as computing the Minimum Detectable Effect for a Synthetic Control design, naming a specific resource and domain. It lacks an explicit verb such as 'computes' or 'estimates,' and it does not distinguish it from sibling tools like synth_power or synth_power_plot.

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 about when to use this tool instead of alternatives, no stated prerequisites, and no mention of related tools such as synth_power. The description only states what the tool is for, leaving usage decisions entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synthplotC
Read-only

Unified plot function for all Synthetic Control variants.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoPre-existing axes for single-panel plots.
typeNoPlot type: * ``'trajectory'`` -- treated vs synthetic over time. * ``'gap'`` -- effect (gap) over time. * ``'both'`` -- two-panel: trajectory + gap. * ``'weights'`` -- donor weight bar chart. * ``'placebo'`` -- placebo ATT distribution. * ``'placebo_gap'`` -- placebo gap spaghetti plot (Abadie et al. 2010). * ``'rmspe'`` -- post/pre RMSPE ratio histogram (Abadie et al. 2010). * ``'conformal'`` -- period-level effects + conformal CIs. * ``'staggered'`` -- cohort-level ATT comparison. * ``'factors'`` -- latent factor loadings (gsynth only). * ``'compare'`` -- overlay multiple results.trajectory
titleNoOverride the auto-generated title.
top_nNoNumber of donors to show in weight plots.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
labelsNoLabels for ``type='compare'``.
resultYesOutput of any ``synth()`` variant. Pass a list for ``type='compare'``.
figsizeNoFigure size. Auto-selected if None.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already indicates a non-mutating operation, and the description does not contradict this. However, it adds no behavioral context beyond the annotationβ€”no mention of results caching, output formats, or side effects. With the annotation covering the safety profile, the description contributes little extra transparency.

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 a single short sentence, which is concise and front-loads the core purpose. However, it is so minimal that it omits any references to the supported plot types or usage scenarios, which slightly reduces its helpfulness despite the brevity.

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?

Given the tool's complexity (13 parameters, multiple plot types, many sibling tools), the description is far too sparse. It does not explain what plot types are available, when to use this tool versus dedicated alternatives, or how results are handled (e.g., caching via as_handle). The schema covers parameter details, but the high-level context needed for correct selection is missing.

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 100%, so all 13 parameters are documented in the schema. The description adds no additional semantic nuance beyond what the schema already provides. This matches the baseline of 3 for high coverage.

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 clearly states the tool is a unified plot function for Synthetic Control variants, which distinguishes it from specialized plot tools like synth_compare or synth_sensitivity_plot. It names the resource (Synthetic Control variants) and the action (plot), though it could be more specific about what kinds of plots it produces.

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 provides no guidance on when to use this tool versus the many dedicated plotting siblings (e.g., synth_compare, synth_sensitivity_plot, synthdid_plot). It simply claims to be 'unified' without explicitly stating that it is the default choice or that specific alternatives exist for particular plot types. An agent would have to infer usage from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_powerB
Read-only

Power analysis for Synthetic Control designs.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed for reproducibility.
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for the placebo test.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable name.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
effect_sizesNoGrid of hypothetical additive effect sizes to evaluate. If ``None``, auto-generates 10 steps from 0 to 3 * pre-treatment SD of the outcome.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
n_simulationsNoNumber of Monte-Carlo simulations per effect size.
treatment_timeYesFirst treatment period (inclusive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is consistent with the readOnlyHint annotation, and no contradiction exists. It adds some scoping ('for Synthetic Control designs') but does not disclose the Monte Carlo simulation behavior, effect-size grid, or result-caching implications of as_handle. The annotation already covers the safety profile, so the minimal disclosure is acceptable but not enriched.

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, focused sentence with no redundant wording. It is front-loaded and immediately communicates the tool's role, making it exceptionally 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?

Despite a rich schema and annotations, the one-sentence description does not integrate the tool into a broader analytical workflow. It does not explain when to run a synthetic-control power analysis, how it relates to other synthetic tools, or what the returned results support. Given the tool has 15 parameters and 6 required inputs, this is insufficient context.

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 100%, meaning every parameter is already documented with names and descriptions. The tool description itself adds no parameter-level meaning, so the baseline of 3 is appropriate.

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 that the tool performs 'Power analysis for Synthetic Control designs,' making its core function clear. It distinguishes itself from generic estimation tools and most synthetic-control siblings, though close relatives like synth_mde and synth_power_plot are not explicitly differentiated.

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 is given about when to use this tool versus alternatives such as synth_mde, pretrends_power, or synth_power_plot. There is no mention of prerequisites, appropriate input scenarios, or exclusions, leaving the agent to infer usage from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_power_plotA
Read-only

Plot the power curve from :func:synth_power.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoAxes to plot on. If ``None``, a new figure is created.
titleNoCustom plot title. Defaults to ``"SCM Power Curve -- Minimum Detectable Effect"``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
figsizeNoFigure size (width, height) in inches.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
power_resultYesOutput of :func:`synth_power`. Must contain columns ``effect_size``, ``power``, and ``mde_flag``.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the read-only nature is covered by structured data. The description adds no further behavioral detail such as figure creation behavior or chaining via result_id, but it does not contradict 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single declarative sentence with no filler. The core action and input source are front-loaded, and every word earns 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?

For a read-only plotting tool with a fully documented schema and an output schema, the description is minimally adequate. It does not explain lifecycle context such as calling after synth_power or how result caching interacts, nor does it contrast with nearby plot/synth siblings.

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 100%, so the schema already documents all 10 parameters. The description adds no parameter-level meaning beyond the implied relationship to power_result, which is already stated in the input schema.

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 ('Plot'), a specific artifact ('power curve'), and the upstream producer (:func:`synth_power`). This distinguishes it from generic plot tools and most synth_* siblings, though it does not explicitly name non-plot alternatives.

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 dependency on synth_power is implied, so an agent can infer this is a post-processing/visualization step after running synth_power. However, there is no explicit when/when-not guidance or reference to adjacent tools such as synth_mde or synth_power for non-plot needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_recommendB
Read-only

Quickly recommend the best SCM method for the given data.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable column name.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitNoIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeNoFirst treatment period (inclusive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so there is no contradiction; the description adds that this is a recommendation rather than an estimation or fitting operation. It does not, however, disclose how the recommendation is produced, what data assumptions apply, or any side effects beyond what the annotations already cover.

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 conveys the core purpose with no filler or repetition. Every word is informative and the structure is easily scanned.

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 rich schema and output schema carry much of the invocation burden, but the description remains incomplete for a complex 11-parameter tool: it does not define SCM, explain when to prefer this over generic recommend, or outline expected use cases. This is adequate but not complete.

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?

Input schema coverage is 100%, so the schema already documents all 11 parameters thoroughly. The description only alludes to 'the given data' and adds no parameter-level meaning beyond the schema's 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 uses a specific verb ('recommend') and resource ('best SCM method for the given data'), and the synth_ prefix helps distinguish it from generic siblings like recommend. However, 'SCM' is left as an undefined acronym and there is no explicit contrast with related siblings, so it does not fully reach the top level of differentiation.

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 is provided about when to call synth_recommend versus siblings such as synth, recommend, or recommend_benchmark. The word 'Quickly' implies speed but does not state when/when-not to use the tool or what alternatives exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_reportC
Read-only

Generate a comprehensive Synthetic Control analysis report.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level for CIs and hypothesis tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoSCM variant passed to ``synth()``.classic
outputNoOutput format: ``'text'``, ``'markdown'``, or ``'latex'``.text
outcomeYesOutcome variable name.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
sensitivityNoWhether to include the sensitivity analysis section.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitNoIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeNoFirst treatment period (inclusive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond the readOnlyHint annotation. It does not disclose what 'comprehensive' includes (sections, output length, execution time), whether it performs heavy computation, or what the returned payload structure is. Since annotations already cover safety, the description adds minimal 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?

The description is a single, focused sentence with no fluff. It is concise and front-loaded, but it sacrifices substance for brevity. The structure is acceptable, though it lacks critical context that could be added without bloat.

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?

Given the tool's complexity (15 parameters, 4 required, many sibling tools) and the existence of an output schema, a one-line description is inadequate. The description does not explain what the report provides, how to specify the treatment setup, or how it relates to the synth family. The output schema may define the return shape, but the semantic context is missing.

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?

The input schema documents all 15 parameters with descriptions (100% coverage), so the baseline is 3. The description adds no additional parameter context, such as how treated_unit and treatment_time interact or what the 'detail' enum values mean beyond the schema. It neither hurts nor helps beyond the schema.

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 states a specific verb ('Generate') and resource ('comprehensive Synthetic Control analysis report'), but it is too generic to distinguish from many sibling tools like synth_compare, synth_sensitivity, or synth_report_to_file. It doesn't indicate what the report contains (e.g., point estimates, diagnostics, sensitivity) or how it differs from other synth utilities.

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 alternatives. No mention of conditions (e.g., 'use this for a full narrative report') or exclusions. The agent is left to infer that this is the primary report generator, but with over 20 synth-related siblings, explicit routing is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_report_to_fileC
Read-only

Generate an SCM report and write it directly to a file.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime period column.
unitYesUnit identifier column.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNoSCM variant passed to ``synth()``.classic
outputNoOutput format: ``'text'``, ``'markdown'``, or ``'latex'``.markdown
outcomeYesOutcome variable name.
filenameNoOutput file path.report.md
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
sensitivityNoWhether to include the sensitivity analysis section.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
treated_unitNoIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeNoFirst treatment period (inclusive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description says the tool 'write[s] it directly to a file,' which is a filesystem mutation, yet the annotations declare readOnlyHint=true. This is an annotation contradiction. It also does not disclose whether existing files are overwritten, where files are written relative to the filename parameter, or what side effects occur.

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 a single short sentence with no filler. It front-loads the core action, but it is under-specified for a tool with 16 parameters; the brevity is efficient yet not fully informative.

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 tool with 16 parameters, an output schema, and many output-related siblings, the one-sentence description is insufficient. It omits when to use file output, overwrite behavior, and the side-effect contradictions with annotations. An agent cannot confidently decide between this and the many synth_report or synth_to_* variants.

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 100%, so the 16 parameters are already documented in the schema. The description adds no parameter-level meaning, and it does not explain how its params relate to the SCM report generation. Baseline 3 is appropriate because the schema carries the load.

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: generate an SCM report and write it to a file. This distinguishes it from report-generation tools that return content rather than persisting it, though it does not explicitly name sibling tools or explain how it differs from synth_report, synth_to_markdown, etc.

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 about when to choose this tool over alternatives like synth_report, synth_to_markdown, synth_to_latex, or other output wrappers. The name hints at file output, but the description does not state conditions, exclusions, or preferred alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_rmspe_filterC
Read-only

Pre-RMSPE-filtered p-value robustness (Abadie et al. 2010).

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime column.
unitYesUnit identifier column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
thresholdsNoMultiples of treated-unit pre-RMSPE used as cut-offs. Default ``[1, 2, 5, 10, 20, np.inf]``.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
penalizationNoRidge penalty.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, providing the safety profile. The description adds only a vague method label ('Pre-RMSPE-filtered...') and does not disclose what the tool actually returns, whether it uses thresholds, or how it behaves when as_handle is true. There is no contradiction, but also no 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.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, which could be considered concise, but it is under-specified rather than efficiently informative. The single sentence does not meaningfully explain the tool's function or context, so it does not earn its place as the primary descriptive text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (13 parameters, 6 required, many synth-related siblings) and the fact that the output schema exists but the description does not explain the tool's purpose or invocation context, the description is severely incomplete. An agent would have to rely entirely on schema field names and the tool name to guess behavior.

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?

The input schema has 100% parameter description coverage, so the baseline is 3. The tool description itself provides no parameter semantics, but the schema fully documents all 13 parameters, including thresholds, detail, and as_handle. The description neither adds nor detracts from the schema's clarity.

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 'Pre-RMSPE-filtered p-value robustness (Abadie et al. 2010)' conveys a general methodological idea but lacks a clear verb and resource. It does not explicitly state that the tool computes robustness p-values after filtering by pre-treatment RMSPE, nor does it distinguish it from siblings like synth_sensitivity, robust_synth, or synth_time_placebo.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description gives no indication of when to use this tool versus alternatives, no prerequisites, and no exclusion criteria. Given the large number of synth-related siblings, an agent receives no directional help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_sensitivityA
Read-only

Run all SCM sensitivity diagnostics in a single call.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed.
timeYesTime column.
unitYesUnit identifier column.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
penalizationNoRidge penalty.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesFirst treatment period.
n_donor_samplesNoNumber of random donor subsets for donor sensitivity.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 and openWorldHint=false, so the safety profile is covered and no contradiction exists. The description adds only the 'single call' batching trait; meaningful behavioral context (payload depth, token sizes, violations/next_steps/suggested_functions) lives in the detail parameter schema, not the description. Given annotation coverage, the description contributes minimally but adequately.

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. It states the action, the resource, and the distinguishing scope ('in a single call') β€” nothing extraneous earns 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?

With an output schema present, a rich 100%-covered parameter schema, and annotations covering the read-only profile, the one-line description is nearly sufficient. However, it does not state what 'sensitivity diagnostics' actually includes, which an agent would need to anticipate output size or decide between this and the many sibling sensitivity tools.

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 100%, so the schema documents all 15 parameters well, including rich descriptions for detail (token sizes), data_path (formats/schemes), and as_handle (caching). The tool description itself adds no parameter meaning, but the schema carries the full burden, so baseline 3 applies.

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 ('Run') and resource ('all SCM sensitivity diagnostics') with a scoping claim ('in a single call') that differentiates it from single-diagnostic siblings like synth_donor_sensitivity, synth_loo, and synth_time_placebo. It is clear but does not enumerate which diagnostics are bundled, leaving the agent to infer scope from 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'in a single call' signals using this instead of running individual sensitivity tools, and the detail parameter (in schema) routes sub-step vs agent usage. However, the description never names alternatives explicitly or states when NOT to use this tool, relying on the reader to connect it to the sibling family.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_sensitivity_plotC
Read-only

Multi-panel sensitivity diagnostic plot.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoSuper-title for the figure.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
figsizeNoFigure size in inches.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
sensitivity_resultYesOutput from :func:`synth_sensitivity`.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only nature is covered. However, the description adds no behavioral detailβ€”no mention of what the plot shows, how it is returned (figure object, file), or any side effects. It simply restates the tool's name in slightly more words.

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 description is a single short sentence with no fluff, but it is under-specified rather than appropriately concise. It conveys almost no actionable information, so while it is short, it does not earn its place as a useful summary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, a required sensitivity_result object, and an output schema, this tool is complex, yet the description provides no context about how to invoke it, what the plot contains, or how to interpret results. It is completely inadequate for an agent to plan a call or understand expected behavior.

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?

The input schema has 100% coverage with detailed descriptions for every parameter (e.g., detail enum explains token payloads, data_path lists supported formats). The tool description itself contributes no parameter semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Multi-panel sensitivity diagnostic plot' is vague and does not clearly state the tool's specific function beyond being a plot. It does not distinguish it from siblings like sensitivity_plot or synth_sensitivity, and the meaning of 'sensitivity diagnostic' is left ambiguous. The verb and resource are implied but not explicitly tied to the sensitivity analysis workflow.

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 is given on when to use this tool versus alternatives. It does not mention that it consumes the output of synth_sensitivity, nor does it exclude other plotting tools. An agent receives no context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_survivalA
Read-only

Synthetic Survival Control (Han & Shah 2025, arXiv:2511.14133). Fits a convex combination of donor Kaplan-Meier curves on the complementary log-log scale to match the treated arm's pre-treatment survival, then reports the post-treatment survival gap with placebo UCBs. Assumptions: A convex (or regularized) combination of donor units reproduces the treated unit's pre-treatment outcome path; No interference: the treatment does not affect the donor units (SUTVA); No anticipation before the treatment date. Pre-conditions: Panel of one or more treated units plus an untreated donor pool, observed over time; Pre-treatment window long enough to fit donor weights (rule of thumb: more pre-periods than donors used); Outcome observed for every unit in every period. Failure modes: Large pre-treatment RMSPE -- the synthetic unit fails to track the treated unit before treatment -> Add donors / predictors, lengthen the pre-period, or use a bias-corrected estimator (sdid, augsynth); Placebo / permutation inference shows the estimate is not extreme relative to donors -> Report the placebo distribution honestly; the effect may not be distinguishable from noise; Pre-treatment RMSPE > post-treatment e...

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed for reproducible stochastic steps.
timeYesTime period column.
unitYesUnit/panel-id column
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
treatedYesBoolean column or name of the single treated unit
survivalYesColumn with survival probability S_i(t)
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
n_placebosNoNumber of placebos.
treat_timeYestreat_time parameter (float).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, which the description does not contradict. The description adds substantial behavioral context: it discloses the method's assumptions (SUTVA, no anticipation), pre-conditions, and specific failure modes (pre-treatment RMSPE, placebo inference). This goes beyond the annotation and informs the agent about limitations and when results might be unreliable.

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 long but well-structured with clear sections (Assumptions, Pre-conditions, Failure modes). It front-loads the purpose and then organizes constraints. While verbose, each section adds value for a complex estimator. The cut-off at the end suggests it might be even longer, but the visible portion is justified and not repetitive.

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?

Given the complexity of the tool, the description covers a lot: method, assumptions, pre-conditions, and failure modes. An output schema exists to document return values, so the description doesn't need to detail that. The only minor gap is that it doesn't explicitly tie parameters to usage steps (e.g., how to set treat_time), but this is compensated by schema descriptions. Overall, an agent has enough to invoke it correctly.

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 100% β€” every parameter already has a description in the input schema. The tool description does not add parameter-specific guidance beyond what the schema provides (e.g., it doesn't explain how to map 'pre-treatment window' to treat_time or how data_path interacts with survival). It mostly repeats context already available. Baseline 3 is appropriate given full schema coverage.

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 ('fits'), a resource (donor Kaplan-Meier curves), and a clear method (convex combination on complementary log-log scale to match pre-treatment survival, then reports post-treatment gap). It distinguishes itself from other synth tools by focusing on survival outcomes, which is explicit. The citation and technical detail leave no ambiguity about what the tool computes.

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 provides pre-conditions (panel data, pre-treatment window, outcome observed) and failure modes with suggested alternatives (sdid, augsynth). However, it never explicitly states 'use this when you have survival/time-to-event data' or contrasts it with sibling tools like synth or synthdid_estimate. The guidance is implied through the survival focus, but not made explicit enough to route an agent decisively.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_time_placeboC
Read-only

Time-placebo ("backdating") test for Synthetic Control.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime column.
unitYesUnit identifier column.
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
outcomeYesOutcome variable.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
penalizationNoRidge penalty forwarded to SCM.
treated_unitYesIdentifier of the treated unit.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treatment_timeYesReal first treatment period.
n_placebo_timesNoMax number of placebo treatment times to try. Default is all feasible pre-treatment times (leaving >= 2 pre-periods for each placebo fit).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, so the description doesn't need to restate that. However, it adds no behavioral detail about what the test does operationallyβ€”does it run many placebo fits? Does it produce a p-value or distribution? This absence means the description contributes nothing beyond the name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is terse with no filler, but it is a single noun phrase rather than a structured explanation. For a tool with 14 parameters and complex behavior, this is under-specified rather than appropriately sized, so it does not earn a higher score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 14 parameters, 6 required, and dozens of synth and placebo-related siblings, a one-line fragment is entirely inadequate. The description does not explain what a time-placebo test is, how to interpret its results, or when to use it, forcing the agent to rely fully on the schema and its own prior knowledge.

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 100%, with all 14 parameters clearly described in the input schema. The description itself adds no parameter context, but because the schema carries the full burden, a baseline score of 3 is appropriate.

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 type of test (time-placebo/backdating) for a specific method (Synthetic Control), which distinguishes it from other synth-related tools like synth_power or synth_loo. However, it is a noun phrase rather than a full sentence with an explicit verb, so it leaves some ambiguity about what the test actually computes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus the many alternatives in the sibling list, such as synth_donor_sensitivity, synth_loo, or synthdid_placebo. The agent must infer the tool's role solely from its name, which is insufficient for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_to_excelC
Read-only

Multi-sheet Excel workbook for synthetic-control results.

ParametersJSON Schema
NameRequiredDescriptionDefault
objYesObject to export.
pathYesDestination ``.xlsx`` file path.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
digitsNoRounding for floating-point values.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
method_namesNoOverride sheet / column labels.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description provides no behavioral context beyond the annotations. It doesn't disclose that the tool writes to the destination path, whether existing files are overwritten, or any side effects. The readOnlyHint=true annotation is not contradicted by the description, but the description also doesn't reconcile the apparent tension between 'read-only' and writing a file to a path.

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 description is a single short sentence and is not bloated, but it is under-specified as a noun phrase. It front-loads the output type but sacrifices action clarity, making it less effective than a concise verb-led description.

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 tool has 10 parameters, including an unusual 'detail' payload-depth parameter, and an output schema, but the description is only a fragment. It doesn't explain what sheets are produced, what 'obj' represents, or when to choose this tool over related synth-export tools. The schema and output schema compensate for return-value details, but not for the missing usage and behavior context.

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 100%, so all ten parameters are already documented in the input schema. The description adds no parameter-specific information, but because the schema is complete, the baseline of 3 is appropriate.

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 is a noun phrase ('Multi-sheet Excel workbook for synthetic-control results') that describes the output artifact rather than stating an action. It implies the tool creates/exports an Excel workbook but lacks an explicit verb such as 'exports' or 'writes'. It is not a tautology and the format (Excel) hints at differentiation from synth_to_latex/markdown, but it doesn't clearly distinguish from other file-export siblings like synth_report_to_file.

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 gives no guidance on when to use this tool versus alternatives. It doesn't mention that it writes to a specified .xlsx path, nor does it compare against synth_to_latex, synth_to_markdown, or synth_report_to_file. An agent is left to infer usage from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_to_latexC
Read-only

Formatted LaTeX table for synthetic-control results.

ParametersJSON Schema
NameRequiredDescriptionDefault
objYesObject to render. ``SynthComparison`` and lists trigger the side-by-side multi-method layout.
labelNoLaTeX label for cross-referencing. Defaults to ``"tab:synth"`` (single) or ``"tab:synth_compare"`` (multi).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
digitsNoNumber of decimal places.
captionNoTable caption. Defaults to a sensible auto-generated string.
show_ciNoInclude the confidence-interval row.
booktabsNoIf True, use ``\toprule`` / ``\midrule`` / ``\bottomrule`` (requires ``\usepackage{booktabs}``). Falls back to ``\hline`` if False.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
method_namesNoOverride column labels in comparison mode.
show_weightsNoAppend a panel listing the top-N donor weights.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
top_n_weightsNoHow many donors to show per method when ``show_weights=True``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, and the description adds no behavioral context beyond that. It does not state whether the tool renders from an existing fitted result, can re-run estimation from data_path, or returns cached handles when as_handle is true. No contradiction, but no added transparency.

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 description is short, front-loaded, and contains no filler words. However, it is a noun phrase rather than a full statement of action, and a second sentence clarifying what the tool consumes and produces would make it more useful without adding bulk.

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 15-parameter tool with many sibling exporters, a one-line description is insufficient. It does not clarify that it converts an existing synthetic-control fit or comparison object into LaTeX, does not explain how it relates to synth_to_markdown/synth_to_excel, and does not mention the as_handle or data_path workflows that the schema exposes.

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 100%, so the schema carries the semantic burden for all 15 parameters and the description does not need to repeat them. The description itself adds no parameter-level meaning, which is acceptable at the baseline.

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 output artifact ('LaTeX table') and the domain ('synthetic-control results'), so an agent can infer this is an export/rendering tool. It lacks an explicit verb like 'render' or 'generate' and does not mention side-by-side or comparison support, so it stops short of being a fully explicit purpose statement.

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 gives no guidance on when to use this tool instead of alternatives. Siblings like synth_to_markdown and synth_to_excel exist but are not referenced, and there is no statement about the conditions that should trigger LaTeX export.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synth_to_markdownC
Read-only

GitHub-flavoured Markdown table for synthetic-control results.

ParametersJSON Schema
NameRequiredDescriptionDefault
objYesobj parameter (Union[CausalResult, 'SynthComparison', List[CausalResult]]).
titleNotitle parameter (Optional[str]).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
digitsNodigits parameter (Optional[int]).
show_ciNoshow_ci parameter (bool).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
method_namesNomethod_names parameter (Optional[Sequence[str]]).
show_weightsNoshow_weights parameter (bool).
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
top_n_weightsNotop_n_weights parameter (int).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations (readOnlyHint=true) already indicate no state mutation, and the description adds nothing about behavior. It does not disclose whether it accepts a pre-fitted result (result_id) or fits from raw data (data_path), which the schema suggests but the description omits.

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 description is a single concise sentence, which is appropriately sized for simplicity, but it is under-specified and fails to front-load critical usage details. It is not wordy, but it sacrifices informativeness.

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?

Given the tool's complexity (13 parameters, output schema, and a large sibling set), the description is incomplete. It doesn't explain return values, how to chain results, or when to use this formatting tool over others, leaving significant gaps for an agent.

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?

The schema provides 100% coverage with detailed descriptions for key parameters like detail, as_handle, and data_path. The tool description adds no parameter information, so the baseline of 3 applies.

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 states the output format (GitHub-flavoured Markdown table) and the subject (synthetic-control results), but the verb is implicit and it doesn't clarify whether the tool converts an existing result or fits a model. It distinguishes minimally from output siblings like synth_to_excel and synth_to_latex only by format.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as synth_to_excel, synth_to_latex, or synth_report. The description gives no context about preferred scenarios or how it fits into a workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

testB
Read-only

Wald test for linear restrictions on coefficients. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesFitted model with ``.params`` and ``.std_errors``.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
hypothesisYesHypothesis specification. Examples: - ``"x1 = 0"`` -- test if beta_x1 = 0 - ``"x1 = x2"`` -- test if beta_x1 = beta_x2 - ``"x1 = x2 = 0"`` -- joint test - ``"x1 + x2 = 1"`` -- linear restriction
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations include readOnlyHint=true, so the tool is already known to be non-mutating. The description adds the operation type but no additional behavioral context such as side effects, prerequisites, or output details. The 'Validation: validated evidence tier' sentence is cryptic and does not clearly disclose a behavioral trait.

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 description is short and front-loaded with the core purpose. The second sentence about 'validated evidence tier' is a fragment that does not earn its place as explanatory content and may confuse rather than clarify. It is concise but not fully disciplined.

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 schema is rich and an output schema exists, so the description does not need to explain return values or parameter formats. Still, for a tool named 'test' with many statistical-test siblings, the description lacks contextual guidance about when to prefer this Wald test over alternatives. The validation sentence adds little to make the tool's role complete.

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 100%, so the parameters are already well documented. The tool description itself adds no parameter-level meaning beyond what the schema provides. The baseline of 3 applies because the schema carries the full burden and the description does not improve on it.

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 clearly states the tool's function: 'Wald test for linear restrictions on coefficients.' This is a specific verb and resource, and it helps distinguish the tool from generic siblings like lrtest or reset_test. However, it does not explicitly compare itself to any sibling, so it stops short of full differentiation.

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 usage: an agent should call this when it needs to test linear restrictions on coefficients via a Wald test. It provides no explicit when-to-use or when-not-to-use guidance and does not name alternatives, even though many sibling testing tools exist. The schema gives parameter-level context, but the description itself offers no routing advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_calibrationA
Read-only

BLP-of-CATE calibration test (Chernozhukov-Demirer-Duflo-Fernandez-Val 2020). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Assumptions: Unconfoundedness given the covariates; Overlap / positivity; Honesty: separate subsamples are used to choose splits and to estimate effects. Pre-conditions: Covariates, treatment, and outcome with enough data to grow an honest forest. Failure modes: Calibration test rejects -- the forest's heterogeneity is not well calibrated -> Increase the sample / number of trees, or fall back to a doubly-robust learner. Alternatives: sp.dml, sp.auto_cate, sp.tmle. Typical minimum N: 1000.

ParametersJSON Schema
NameRequiredDescriptionDefault
TNoIf not given, the forest's stored training arrays are used.
XNoIf not given, the forest's stored training arrays are used.
YNoIf not given, the forest's stored training arrays are used.
alphaNoSignificance level for reported CIs.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
forestYesforest parameter ('CausalForest').
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only safety profile is covered. The description adds meaningful behavioral context: assumptions (unconfoundedness, overlap, honesty), what a rejection means, and suggested fallback actions, going beyond what the annotations provide.

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 uses labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N) with no filler. Every sentence contributes actionable context, and the core purpose is front-loaded.

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 complex statistical test, the description covers assumptions, preconditions, failure-mode remediation, alternatives, and a minimum sample size. It appropriately relies on the output schema for return values; the only minor gap is the somewhat vague 'validated evidence tier' phrasing.

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 100%, so the input schema already documents all 11 parameters. The description does not add per-parameter syntax or format guidance beyond mentioning assumptions and data requirements, so it stays at the baseline for fully covered schemas.

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 clearly identifies a specific diagnostic: a BLP-of-CATE calibration test with a citation, and states that it tests whether a forest's heterogeneity is well calibrated. It names alternatives like sp.dml, sp.auto_cate, and sp.tmle, but it does not explicitly distinguish itself from closely named siblings such as blp_test or calibration_test.

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 provides explicit pre-conditions (covariates, treatment, outcome, enough data for an honest forest), failure modes with remediation, and a list of alternatives. It does not give explicit 'use this vs. use that' exclusion rules, but the context is clear enough for an agent to infer when the tool is relevant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tF_adjustmentD
Read-only

tF adjusted critical value (Lee, McCrary, Moreira & Porter 2022, AER).

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
first_stage_FYesfirst_stage_F parameter (float).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=trueional and openWorldHint=false, covering safety and determinism. The description adds a citation to a specific paper, which hints at the statistical method used, but it does not disclose the nature of the output (single number, table, or object), any assumptions, or edge-case behavior. This is minimal added context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short (one phrase), but it is under-specified rather than concise. It lacks any structural elements like a verb or context. There is no front-loading of critical information beyond the tool's name itself, and it fails to earn its place as a useful explanation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters (including many generic data-handling ones) and an output schema, the description provides almost no contextual information. It does not explain the statistical setting, what the adjusted critical value is used for, how it relates to first_stage_F, or when an agent would invoke it. The citation is the only meaningful context, but it is insufficient for correct invocation without prior domain knowledge.

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 100%, so the baseline is 3. However, the description itself adds no additional meaning to any parameter. Even the schema description for the required 'first_stage_F' is tautological ('first_stage_F parameter (float)'), so the description provides no enrichment, but does not detract either.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'tF adjusted critical value (Lee, McCrary, Moreira & Porter 2022, AER)' is essentially a noun phrase that restates the tool name. It implies the tool computes a critical value, but it lacks an explicit verb (e.g., 'Computes', 'Returns') and does not clarify what the value is for or how it differs from the sibling tF_critical_value beyond the word 'adjusted'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/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 over alternatives. The sibling tF_critical_value likely provides the unadjusted counterpart, but the description does not mention it or any conditions that would select one over the other. No context or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tF_critical_valueB
Read-only

Lee-McCrary-Moreira-Porter (2022, AER) tF adjusted critical value. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level. Only ``0.05`` is implemented (the only level for which LMMP publish a complete table).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
first_stage_FYesObserved first-stage F statistic (or Olea-Pflueger F_eff).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark the tool as read-only, so the safety profile is covered. The description adds a citation and a validation-evidence-tier note, which gives some provenance context, but it does not disclose operational behaviors such as handling of unsupported alpha levels, though the schema largely covers that.

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 description is short and front-loads the main purpose, but the second sentence is vague and reads like a truncated metadata field rather than a meaningful explanation. It is not wastefully long, but it does not earn full credit for clarity of structure.

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?

Given the rich schema, output schema, and read-only annotation, the description does not need to explain return values or safety. However, it omits any mention of the closely related tF_adjustment sibling and does not provide enough methodological context for an agent to confidently distinguish or choose this 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 description coverage is 100%, so the schema already documents all parameters including first_stage_F and the alpha limitation. The description adds no parameter-level meaning beyond pointing to the LMMP method and the tF critical value concept, so it meets the baseline without elevating it.

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 identifies the tool as computing the Lee-Mcrary-Moreira-Porter (2022, AER) tF adjusted critical value, which is a specific, well-defined resource. It lacks an explicit verb and does not contrast with the closely related sibling tF_adjustment, so it stops short of full differentiation, but the intent is clear.

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 is given about when to use this tool versus tF_adjustment or any alternative. The validation-tier sentence does not help an agent decide whether this is the right call, leaving usage inference entirely to the schema and tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

three_slsC
Read-only

Three-Stage Least Squares (3SLS). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
equationsYesequations parameter (Dict[str, Tuple[str, List[str], List[str]]]).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
instrumentsNoFull set of instruments (all exogenous variables in the system).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions 'Validation: certified parity evidence,' but this is vague and unexplained. The annotations already declare readOnlyHint=true, so the description adds little about side effects or runtime behavior. It does not clarify what 'certified parity evidence' means, how validation is performed, or any requirements or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely brief (one sentence), which is concise but under-specified. It lacks necessary structure and depth for a complex econometric tool. Conciseness should not sacrifice essential information; this is more under-specification than effective conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters, many siblings, and an output schema, this description is severely incomplete. It does not explain what 3SLS does, when to use it, how to specify equations and instruments, or what the 'certified parity evidence' refers to. An agent would lack critical context to correctly select and invoke this 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?

The schema covers 100% of parameters, but many descriptions are tautological (e.g., 'maxiter parameter (int)') and fail to explain meaning. The tool description adds nothing about parameters. For instance, 'equations' is described as a Dict type but not how to structure the equations, and 'instruments' is only listed as a full set without explaining its role. The description does not compensate for these weak 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 econometric method 'Three-Stage Least Squares (3SLS)' which clearly identifies the tool's purpose as estimating a system of equations. It doesn't explicitly state the action (e.g., 'estimates') but the method name is self-explanatory. It doesn't differentiate from siblings like regress or ivreg, but the name is specific enough to avoid major confusion.

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 provides no guidance on when to use 3SLS versus other estimation tools. There is no mention of conditions such as simultaneous equations, endogeneity, or instrument validity, nor any reference to alternative tools. An agent would have to infer usage from the name alone, which is insufficient for a tool in a large sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tmleA
Read-only

Targeted Maximum Likelihood Estimation for ATE/ATT with double-robustness. Validation: certified parity evidence. Assumptions: Unconfoundedness: Y(d) perp D | X; Overlap: 0 < P(D=1 | X) < 1 on the estimand support; Consistent estimation of at least one of Q(a, x) = E[Y|A, X] or g(x) = P(A=1|X) (double robustness). Pre-conditions: binary treatment 0/1; covariates comprise the confounding set; n >= 500 for asymptotic efficiency. Failure modes: Extreme propensity scores (ATE IF denominator ~ 0) -> Bound propensity scores away from 0/1 (e.g. 0.025 / 0.975) or trim; Super-learner cross-validated risk not improving over baseline -> Nuisances not learnable; widen the candidate library or use stronger base learners. Alternatives: sp.dml, sp.aipw, sp.metalearner, sp.ltmle. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
treatYesBinary treatment column (0/1)
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
estimandNoTarget estimandATE
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
covariatesYesCovariate matrix, DataFrame, or column names.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, so the description's lack of explicit 'read-only' statement is not a gap. The description adds valuable behavioral context: failure modes (extreme propensity scores, super-learner risk), assumptions (unconfoundedness, overlap), and double-robustness property, going beyond what annotations provide. No contradiction with 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?

The description is moderately long but efficiently structured: it opens with purpose, then validation, assumptions, pre-conditions, failure modes, alternatives, and typical N. Each sentence carries information; no filler. It could be slightly shorter but earns its length.

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?

Given that an output schema exists (so return values are documented), the description covers assumptions, failure modes, alternatives, and pre-conditions. It doesn't explicitly describe the estimand parameter's options, but that's in the schema with default ATE. It lacks a note on data format, but that's also in the schema. Overall, it's complete for an agent to call 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 coverage is 100%, so each parameter is documented. The description adds meaning by specifying that treatment must be binary (0/1) and that covariates must comprise the confounding set, which clarifies the semantics of the treat and covariates parameters beyond their schema descriptions. This goes beyond the baseline of 3.

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 explicitly states 'Targeted Maximum Likelihood Estimation for ATE/ATT with double-robustness', giving a specific method, estimands, and a key property. It clearly differentiates from siblings by naming alternatives and specifying its focus on ATE/ATT with double robustness, so an agent can distinguish it from sp.dml, sp.aipw, etc.

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 provides explicit alternatives and lists pre-conditions and assumptions (binary treatment, confounding set, n>=500) that guide when to use the tool. It doesn't explicitly state 'use this when X, not when Y', but the alternatives and conditions make the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tobitA
Read-only

Tobit model for censored dependent variables. Validation: certified parity evidence. Assumptions: Latent outcome is linear in covariates with normally distributed errors; Censoring threshold is known and exogenous. Pre-conditions: Outcome censoring point and censoring direction are known; Covariates are numeric or properly encoded. Failure modes: MLE fails to converge or sigma is near zero -> Rescale covariates, simplify the model, or compare with censored quantile alternatives. Alternatives: sp.qreg, sp.regress. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRegressors
yYesCensored outcome variable
llNoLower censoring limit (set -inf for none)
ulNoUpper censoring limit (default: none)
alphaNoSignificance level for confidence intervals
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, so the bar is lower. The description adds behavioral context: failure modes (MLE fails to converge, sigma near zero) with concrete remedies, and assumptions about the latent outcome. This goes beyond what annotations alone convey. No contradiction.

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 compact and logically structured with labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Every sentence adds distinct, useful information without fluff.

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 complex statistical tool with 11 parameters and an output schema, the description covers assumptions, pre-conditions, failure modes, alternatives, and sample size guidance. This is sufficient for an agent to decide whether to use the tool and what to do on failure. The output schema handles return-value details.

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?

The schema descriptions cover 100% of the 11 parameters, so the baseline is 3. The description adds only high-level pre-conditions (e.g., 'Covariates are numeric or properly encoded'), but does not elaborate on individual parameters beyond what the schema already states.

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+resource: 'Tobit model for censored dependent variables.' It clearly identifies what the tool does, but it does not explicitly differentiate from sibling tools like truncreg or hurdle, despite naming alternatives (sp.qreg, sp.regress).

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 lists alternatives (sp.qreg, sp.regress) and gives pre-conditions (known censoring point and direction) and failure modes (MLE non-convergence) that imply when to use the tool and when to switch. It does not explicitly state 'use this when X, use sp.qreg when Y', but the conditions are clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

treatment_rollout_plotA
Read-only

Visualise staggered treatment adoption timing.

ParametersJSON Schema
NameRequiredDescriptionDefault
axNoax parameter.
idYesUnit identifier.
timeYesTime period variable.
titleNotitle parameter (Optional[str]).
treatYesFirst-treatment-period column (0 = never treated), or binary treatment indicator.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
figsizeNofigsize parameter (Tuple[float, float]).
sort_byNoSort units by: 'treat_time' (earliest first), 'id', or 'random'.treat_time
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
never_colorNoColor for never-treated units.#BDC3C7
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
treated_colorNoColor for treated unit-periods.#E74C3C
untreated_colorNoColor for untreated unit-periods.#ECF0F1
show_cohort_labelsNoAnnotate cohort boundaries on the y-axis.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already conveys this is a read-only operation, and the description's verb 'Visualise' is consistent with that. The description adds no extra behavioral context beyond the annotation, but it also does not omit anything critical because the annotation covers the safety profile and the output schema is present.

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 a single sentence with no filler, front-loads the primary action, and earns its place by clearly stating the tool's purpose. It is appropriately sized for a simple visualization tool.

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?

Although the description is terse, the schema is highly detailed with 100% parameter coverage, the annotations indicate read-only behavior, and an output schema exists. Together these structured elements provide sufficient context for an agent to invoke the tool correctly, making the minimal description acceptable.

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 100%, so each parameter is already documented in the input schema. The description itself adds no parameter-level meaning beyond the schema, which is acceptable under the baseline given full schema coverage.

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 ('Visualise') and a specific resource ('staggered treatment adoption timing'), making the tool's goal clear and distinct from generic plotting tools. However, it does not explicitly differentiate from sibling plotting tools like did_plot or event_study_plot, relying on the tool name to carry that distinction.

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 the tool should be used when one needs to visualize staggered treatment adoption timing, but it provides no explicit guidance on when to choose this tool over alternatives or what distinguishes it from similar visualization tools. It does not exclude any use cases or name sibling alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trimmingA
Read-only

Trim sample to optimal overlap region. Assumptions: Unconfoundedness: treatment is as-good-as-random given the measured covariates; Overlap / common support: every unit has a non-degenerate probability of each treatment; The covariate set blocks all back-door paths. Pre-conditions: Pre-treatment covariates measured for treated and control units; A binary (or low-cardinality) treatment indicator; Sufficient covariate overlap between treatment arms. Failure modes: Poor overlap -- extreme propensity scores or few acceptable matches -> Trim or restrict to the common-support region and report the discarded units; Covariate imbalance remains after matching/weighting -> Re-specify the balancing model (CBPS, entropy balancing) and re-check standardized mean differences. Alternatives: sp.propensity_score, sp.cbps, sp.ebalance, sp.dml. Typical minimum N: 200.

ParametersJSON Schema
NameRequiredDescriptionDefault
psNoPre-estimated propensity scores. If None, estimated via *ps_method*.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo``'crump'`` uses Crump et al. (2009) optimal rule. ``'sturmer'`` trims at the fixed [0.1, 0.9] interval.crump
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
ps_methodNoMethod for PS estimation if *ps* is None.logit
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary treatment column.
covariatesYesCovariates for PS estimation (if *ps* not supplied).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true, so the description does not need to restate safety. It adds valuable context by disclosing statistical assumptions, preconditions, failure modes, and a typical minimum N. It does not describe return payloads, but the output schema exists and the schema documents as_handle caching, so this is not a major gap.

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 purpose and then organized into labeled sections for assumptions, pre-conditions, failure modes, alternatives, and typical sample size. Each section earns its place, and the formatting makes it easy for an LLM to scan.

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 an 11-parameter causal-inference tool, the description covers when to use it, required data conditions, what can go wrong, what to do about it, and alternatives. With a 100%-covered schema and an output schema present, nothing essential is missing for selecting and invoking the 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 description coverage is 100%, so the baseline is 3 even without parameter details in the description. The description adds conceptual context for covariates, treatment, and overlap, but it does not explain parameter-specific choices such as crump vs sturmer beyond what the schema already provides.

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 first sentence, 'Trim sample to optimal overlap region,' uses a specific verb and resource and clearly distinguishes this from sibling tools like overlap_plot or overlap_weights. It also names alternatives, making its role in the causal-inference pipeline unmistakable.

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?

The description gives explicit data pre-conditions and a decision rule under failure modes: trim when overlap is poor, and re-specify the balancing model when imbalance remains. This tells an agent when to use this tool and when to turn to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

truncregC
Read-only

Truncated regression (MLE). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoRegressors.
yNoOutcome variable.
llNoLower truncation point. None = no lower truncation.
ulNoUpper truncation point. None = no upper truncation.
tolNoNumerical convergence tolerance.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoRobust standard-error or covariance estimator option.nonrobust
clusterNoCluster identifier column for clustered standard errors.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=true), the description adds only the vague phrase 'Validation: certified parity evidence.' It does not disclose that the tool fits a model via MLE, how truncation bounds are handled, what output to expect, or any other behavioral detail that annotations do not already provide.

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 description is very short and front-loaded with the method name, but the second sentence is opaque and adds little practical value. It is not padded, but the brevity sacrifices clarity and the cryptic 'validation' phrase does not earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite full schema coverage and an output schema, the description is severely incomplete. It does not explain what the tool does with the 15 parameters, when to choose truncated regression over similar models, or what the returned validation evidence refers to. An agent cannot reasonably decide to call this tool based on the description alone.

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 100% and every parameter has a meaningful description, so the schema already carries the explanatory burden. The description itself adds no parameter-level information, making the baseline 3 appropriate.

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 'Truncated regression (MLE)' identifies the statistical method but lacks an explicit verb like 'fit' or 'estimate'. It does not differentiate from similar siblings like tobit, and the 'Validation: certified parity evidence' phrase is cryptic and does not clarify the tool's core purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/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 truncated regression versus alternatives such as tobit or censored regression. No mention of data requirements, truncation point semantics, or typical use cases, so an agent has no basis for selecting this tool over its many siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twfe_decompositionA
Read-only

TWFE decomposition: Goodman-Bacon (2021) + de Chaisemartin-D'Haultfoeuille weights. Assumptions: Conditional parallel trends between treated and comparison groups absent treatment; No anticipation of treatment before its onset; Treatment effects may be heterogeneous across cohorts and time (no homogeneity required). Pre-conditions: Panel or repeated cross-section with a unit (or group) identifier and a time identifier; At least one never-treated or not-yet-treated comparison group; Pre-treatment periods to assess parallel trends. Failure modes: Pre-treatment event-study coefficients are jointly non-zero (pre-trend violation) -> Use honest DiD bounds to quantify robustness to trend violations, or condition on covariates; Two-way fixed-effects estimate is contaminated by 'forbidden' comparisons / negative weights -> Use a heterogeneity-robust estimator (Callaway-Sant'Anna, Borusyak et al., Gardner two-stage). Alternatives: sp.callaway_santanna, sp.did, sp.honest_did. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable.
timeYesTime period variable.
alphaNoSignificance level.
groupYesUnit identifier.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
first_treatYesTreatment timing column (NaN or 0 for never-treated).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses key behavioral traits: the estimator's assumptions, its failure modes (pre-trend violations, forbidden comparisons/negative weights), and typical minimum N. This tells an agent what to expect from the decomposition and how results can be misleading, which annotations alone 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured with labeled sections: definition, assumptions, pre-conditions, failure modes, alternatives, and typical N. Every sentence adds useful information; nothing is redundant with the schema or annotations.

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 complex econometric tool, the description covers purpose, assumptions, data requirements, failure modes, alternative estimators, and a sample-size heuristic. An output schema exists, so the lack of return-value detail is not a gap. The description is complete enough for an agent to decide whether to call it and how to interpret results.

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 100%, so the schema already documents all parameters. The description adds decision-relevant meaning by clarifying data requirements such as 'unit (or group) identifier and a time identifier,' 'never-treated or not-yet-treated comparison group,' and 'pre-treatment periods to assess parallel trends,' which map to group, time, and first_treat.

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 opens with a precise definition: 'TWFE decomposition: Goodman-Bacon (2021) + de Chaisemartin-D'Haultfoeuille weights.' This names the method, the two constituent decompositions, and the resource being analyzed. It also names sibling alternatives, so an agent can distinguish it from related estimators.

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?

The description explicitly lists pre-conditions (panel/repeated cross-section, unit/time identifiers, comparison group, pre-treatment periods) and failure modes that route to alternatives ('Use honest DiD bounds...', 'Use a heterogeneity-robust estimator...'). It names alternatives directly, giving an agent clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twoway_clusterB
Read-only

Compute two-way cluster-robust standard errors. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesFitted OLS result. Must have ``data_info`` containing ``'X'`` (design matrix), ``'y'`` (response), and ``'residuals'``.
cluster1YesColumn name for the first clustering dimension.
cluster2YesColumn name for the second clustering dimension.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false. The description adds a 'Validation: certified parity evidence' claim, which provides some context beyond annotations, but it does not describe side effects, return behavior, or other operational traits. It neither contradicts the annotations nor fully elaborates on them.

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 extremely concise and front-loaded with the core purpose. However, the 'Validation: certified parity evidence' phrase is vague and not clearly actionable, slightly weakening the conciseness despite the short length.

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 tool with 10 parameters and 4 required, the description provides only a one-line operation and a cryptic validation note. It does not explain how to choose this over similarly named tools, nor what 'certified parity evidence' means, leaving substantial gaps in selection and invocation context.

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 100%, so the schema already documents all parameters. The description adds no parameter-specific information, so the baseline score of 3 is appropriate.

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 the exact operation and object: 'Compute two-way cluster-robust standard errors.' The adjective 'two-way' distinguishes it from sibling tools like cluster_robust_se (one-way) and multiway_cluster_vcov (general multiway), so an agent can clearly tell them apart.

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 is given on when to prefer this tool over alternatives such as cluster_robust_se or multiway_cluster_vcov. There are no exclusions, prerequisites, or context cues, leaving the agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unified_sensitivityA
Read-only

Run every applicable sensitivity analysis in one shot: E-value, Oster delta (when R^2 inputs given), Rosenbaum Gamma (when matched_pairs outcomes exposed), Sensemakr (when raw data supplied via data/y/treat/controls), and a breakdown-frontier bias estimate. Also available as result.sensitivity(). Assumptions: Dashboard that dispatches every applicable sensitivity method (E-value, Cinelli-Hazlett RV, Oster's delta) to one fitted result; Oster's delta requires the short- and long-regression R-squared (r2_treated, r2_controlled) plus beta_uncontrolled; rho_max is Oster's R_max bound (default 1.0); The Sensemakr component needs the raw estimation data via data/y/treat/controls; result objects do not carry it, so it is skipped (with a note) when those are omitted. Pre-conditions: A result with point estimate, SE, and CI attributes; r2_treated and r2_controlled for the Oster's-delta component. Failure modes: Result lacks estimate/se/ci, so no sensitivity component can be computed -> Pass a fitted result exposing estimate, se, and ci rather than a raw scalar or DataFrame; Oster's delta omitted because r2_treated / r2_controlled were not provided -> Pass the short- and long-regression R-s...

ParametersJSON Schema
NameRequiredDescriptionDefault
yNoOutcome variable column name or outcome array.
treatNoTreatment indicator or first-treatment-period column.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
resultYesresult parameter (CausalResult | EconometricResults).
rho_maxNorho_max parameter (float).
controlsNoControl-variable column names.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
r2_treatedNor2_treated parameter (float).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
include_osterNoWhether to include oster.
r2_controlledNor2_controlled parameter (float).
beta_uncontrolledNobeta_uncontrolled parameter (float).
include_rosenbaumNoWhether to include rosenbaum.
include_sensemakrNoWhether to include sensemakr.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint annotations, the description discloses real behavioral traits: Sensemakr is 'skipped (with a note)' when raw data is absent, the Oster component silently degrades when r2 inputs are missing, and the tool fails entirely when result lacks estimate/se/ci. The aliasing note ('Also available as result.sensitivity()') adds integration context. Nothing contradicts 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.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense, rambling block that mixes dispatch behavior, parameter definitions, assumptions, and pre-conditions under mislabeled headers β€” rho_max's definition and Sensemakr's data requirement are filed under 'Assumptions' rather than parameters or conditions. Pre-conditions are duplicated across the 'Assumptions' and 'Pre-conditions' sections, and the text truncates mid-sentence ('Pass the short- and long-regression R-s...'). The first sentence is excellent, but the rest lacks editing.

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 17-parameter tool with five conditional components, the description covers dispatch rules, preconditions, and failure modes, and an output schema exists so return values need not be explained. However, it is literally cut off mid-sentence, the breakdown-frontier component's own requirements are never stated (unlike the other four methods), and the relationship to sibling sensitivity_dashboard / sensitivity tools is not clarified. It attempts completeness but falls short.

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 100%, but several schema descriptions are near-tautological ('rho_max parameter (float)'), and the description enriches them: rho_max is 'Oster's R_max bound (default 1.0)', result must be a fitted object exposing estimate/se/ci rather than a scalar, and data/y/treat/controls feed the Sensemakr component. Major params (detail, as_handle, data_path, result_id, include_* flags) are left to the schema, which already documents them well.

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: 'Run every applicable sensitivity analysis in one shot,' then enumerates the five dispatched methods (E-value, Oster delta, Rosenbaum Gamma, Sensemakr, breakdown-frontier). This distinguishes it from the many single-method siblings (sensemakr, oster_delta, rosenbaum_gamma, evalue, breakdown_frontier) by framing it as the unified dispatcher.

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 gives conditional applicability for each component ('Oster delta when R^2 inputs given,' 'Rosenbaum Gamma when matched_pairs outcomes exposed,' 'Sensemakr when raw data supplied'), states pre-conditions (result with point estimate/SE/CI, r2 inputs), and provides corrective failure-mode guidance ('Pass a fitted result exposing estimate, se, and ci rather than a raw scalar or DataFrame'). It does not explicitly route users to single-method siblings when only one analysis is needed, so it stops short of full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

varA
Read-only

Estimate a Vector Autoregression (VAR) model. Validation: certified parity evidence. Assumptions: All system variables are jointly covariance-stationary (no unit roots / cointegration left unmodeled); Lag order p is adequate so residuals are white noise; under-fitting biases IRFs and Granger tests; Reduced-form errors are serially uncorrelated; structural IRF identification relies on the chosen ordering/recursive scheme. Pre-conditions: Multivariate (>=2 column) time-ordered DataFrame of comparable-frequency series; Sample length large relative to kp+trend parameters to estimate each equation. Failure modes: Coefficient covariance is singular or IRFs diverge because k^2p parameters exceed available observations -> Reduce lags, drop variables, or extend the sample so n is much larger than k*p; Explosive IRFs / non-decaying responses from a non-stationary (unit-root or trending) system -> Difference or detrend the series first, or use trend='ct', and confirm stationarity before fitting. Alternatives: sp.local_projections, sp.arima, sp.iv. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
lagsNoNumber of lags.
alphaNoSignificance level.
se_dfNoResidual-variance denominator for coefficient standard errors. ``'stata'``/``'ml'`` uses ``T`` and matches Stata ``var`` default conditional-MLE standard errors. ``'r'``/``'unbiased'`` uses ``T - k_params`` and matches the equation-by-equation ``lm()`` standard errors returned inside R ``vars::VAR()``.stata
trendNotrend parameter (str).c
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
variablesNoVariable names. If None, uses all numeric columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the readOnlyHint annotation by disclosing assumptions (stationarity, white-noise residuals, adequate lag order), failure modes (singular covariance, explosive IRFs), and operational guidance (difference/detrend, reduce lags, extend sample). This gives an agent realistic expectations of when the call will fail and why.

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 long but tightly organized into labeled sections (Validation, Assumptions, Pre-conditions, Failure modes, Alternatives, Typical minimum N). Each section carries distinct decision-relevant information with no filler; the most important purpose statement is front-loaded.

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 complex econometric tool with 11 parameters and an output schema, the description covers assumptions, preconditions, failure modes, minimum sample size, and alternatives. An agent has enough context to decide whether to call it and to interpret common failures without additional round-trips.

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 100%, so the baseline is 3, but the description adds meaningful parameter context: lag adequacy and under-fitting bias for lags, trend='ct' for non-stationarity handling, and ordering/recursive scheme for structural IRF identification. This is useful semantic enrichment beyond the 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?

Opens with 'Estimate a Vector Autoregression (VAR) model' – a specific verb and resource that immediately identifies the tool's function. It distinguishes itself from siblings like arima, bvar, and local_projections through an explicit Alternatives section and by emphasizing VAR-specific assumptions and failure modes.

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 concrete alternatives (sp.local_projections, sp.arima, sp.iv) and provides rich preconditions that clarify when VAR is appropriate. It does not, however, give explicit when-not conditions mapping each alternative to a specific scenario, so it stops just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vcnetA
Read-only

Varying-coefficient dose-response estimator. Assumptions: Unconfoundedness given covariates X (no hidden confounding of the continuous treatment); Positivity over the dose: every dose has support across X; The dose-response curve is smooth (varying-coefficient prior). Pre-conditions: data with a continuous treatment (dose), outcome and covariates; torch is installed (neural extra) -- imported lazily. Failure modes: Sparse support at extreme doses yields an unreliable dose-response curve there -> Restrict the reported dose range to the supported region or compare against scigan. Alternatives: sp.scigan, sp.dose_response. Typical minimum N: 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
alphaNoSignificance level for confidence intervals and tests.
ridgeNoTikhonov regularisation on the coefficient matrix.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
t_gridNoTreatment values at which to evaluate the dose-response curve. Defaults to 40 equally-spaced points between the observed min/max.
n_basisNoNumber of B-spline basis functions for the t-axis.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesContinuous treatment / dose column.
covariatesYesCovariate matrix, DataFrame, or column names.
n_bootstrapNoNumber of bootstrap replications.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
spline_degreeNospline_degree parameter (int).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint annotations, the description adds rich behavioral context: assumptions (unconfoundedness, positivity, smoothness), lazy torch import, unreliability at sparse extreme doses, and typical minimum N. It discloses when results may be untrustworthy and how to mitigate, which is valuable for an agent deciding whether to trust the output.

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 compact and dense, with every sentence providing useful operational or inferential guidance. It front-loads the estimator's purpose, then assumptions, preconditions, failure modes, and alternatives in a logical order. No filler or repetition.

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 complex estimator with nuanced assumptions, the description covers purpose, assumptions, preconditions, failure modes, alternatives, and sample size guidance. An output schema exists so return-value documentation is not required here. The description is complete for an agent to decide when to invoke this tool and how to interpret its limitations.

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 100%, so the parameters are fully documented in the input schema. The description itself does not elaborate on any parameter semantics, but it does not need to given the schema completeness. Baseline 3 is appropriate since the schema carries the heavy lifting.

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 clearly identifies the tool as a varying-coefficient dose-response estimator with a specific resource (dose-response curve). It distinguishes itself from siblings by naming alternatives (sp.scigan, sp.dose_response) and describing the estimand. The phrase is a noun, but it unambiguously states what the tool computes and the assumptions required.

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?

The description explicitly lists pre-conditions (continuous treatment, outcome, covariates, torch installed), failure modes, and a recommended action in failure (restrict dose range or compare against scigan). It also names alternatives, giving an agent clear routing guidance between this and sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verifyB
Read-only

Empirically verify a single recommendation.

ParametersJSON Schema
NameRequiredDescriptionDefault
BNoNumber of bootstrap replications (auto-reduced if over budget).
recYesA single entry from ``RecommendationResult.recommendations``.
seedNoRNG seed for reproducibility.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
budget_sNoWall-clock budget per recommendation (seconds).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
n_placeboNoNumber of permutation placebo runs.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
K_subsampleNoNumber of 50% subsample splits.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the scoping constraint of 'a single recommendation' and the empirical nature of the operation, but it does not mention the computational cost, bootstrap/permutation behavior, optional caching via as_handle, or how results are returned. It does not contradict 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of six words with no filler or redundancy. It is front-loaded and immediately states the tool's purpose without wasted text.

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 rich input schema plus the presence of an output schema cover invocation details and return expectations. However, the description lacks context about how a recommendation is produced, how rec should be sourced, and how this tool relates to verify_recommendation and verify_benchmark. Given the generic name and the large sibling list, this is a meaningful gap for an agent selecting the right 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 description coverage is 100%, with detailed parameter descriptions for all 12 parameters, so the baseline is 3. The tool description itself adds no parameter-level meaning; agents must rely on the schema, which is adequate.

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 clear verb and object: 'Empirically verify a single recommendation.' It identifies the resource and scope precisely enough for an agent to understand the core action. However, it does not explicitly distinguish this tool from similarly named siblings like verify_recommendation or verify_benchmark.

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 provides no guidance on when to use this tool versus alternatives such as verify_recommendation, verify_benchmark, replicate, or audit. There are no stated conditions, prerequisites, or exclusions, leaving tool selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_benchmarkA
Read-only

Run verify against built-in DGPs with known true effects.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoBase seed. Per-rep seeds are ``seed + offset``.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_repsNoNumber of independent DGP draws per scenario. Each uses a different seed to average out Monte Carlo noise.
verboseNoPrint per-scenario progress.
verify_BNoBootstrap replications per verification run.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
scenariosNoSubset of {'rct', 'did', 'staggered_did', 'rd', 'iv', 'observational'}. Defaults to all six.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
verify_budget_sNoWall-clock budget per verification run.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, so the read-only safety profile is covered. The description adds a small amount of behavioral context by scoping execution to built-in DGPs rather than user data, but it does not mention simulation load, caching, or return behavior beyond what the schema hints at.

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?

One short sentence states the operation and scope with no filler or redundancy. The key phrase 'built-in DGPs with known true effects' is front-loaded, making the purpose immediately clear.

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?

Despite rich schema documentation, an output schema, and annotations, the description is too terse to fully situate the tool: it omits the distinction from verify/verify_recommendation and does not explain that scenarios in the schema are the built-in DGPs. Defaults and parameter behavior are recoverable from the schema, but intended use context is not.

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 100%, so the baseline applies and the description need not explain each parameter. The description adds no parameter-level meaning; it only names the high-level operation, while all 12 parameters are documented in the 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 description uses a specific verb ('Run') with a clear resource: the verify operation scoped to 'built-in DGPs with known true effects.' This distinguishes it from sibling tools like verify and verify_recommendation and conveys the ground-truth benchmarking purpose.

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 gives no explicit when-to-use guidance, exclusion criteria, or direction toward verify/verify_recommendation as alternatives. The only usage clue is the phrase 'built-in DGPs with known true effects,' which implies a benchmark use case but does not state it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_recommendationC
Read-only

Empirically verify a single recommendation.

ParametersJSON Schema
NameRequiredDescriptionDefault
BNoNumber of bootstrap replications (auto-reduced if over budget).
recYesA single entry from ``RecommendationResult.recommendations``.
seedNoRNG seed for reproducibility.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
budget_sNoWall-clock budget per recommendation (seconds).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
n_placeboNoNumber of permutation placebo runs.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
K_subsampleNoNumber of 50% subsample splits.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond what the annotations already provide. readOnlyHint=true covers the safety profile, but the description does not disclose that verification involves bootstrap resampling, permutation placebos, or budget limits (though these appear in parameter descriptions). No context about side effects, caching, or internal process is given.

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 a single, front-loaded sentence with zero waste. It states the purpose directly and efficiently. No unnecessary words or repetition. It is appropriately sized for a simple statement of purpose, even though the tool is complex.

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 tool with 12 parameters, nested objects, and an output schema, this description is insufficient. It does not explain what 'verify' entails (e.g., bootstrapping, placebo tests, robustness checks) or what the agent should expect. The parameter descriptions and output schema provide structure, but the tool-level description lacks the big picture needed to fully understand its role in a workflow.

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 100% – every parameter has a description, including defaults and enums. The tool description itself adds no parameter information, but since the schema carries the full burden, the baseline of 3 is appropriate. The description does not need to repeat schema details.

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 clear verb ('verify') and a specific resource ('a single recommendation'), which is unambiguous. However, it does not differentiate from siblings like 'verify' or 'verify_benchmark' – the qualifier 'single' hints at scope but is not explicit about when this tool is preferred over those alternatives.

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 is provided on when to use this tool versus alternatives. There is no mention of prerequisites, expected inputs (beyond schema), or conditions that would make it the right choice. The description gives no exclusions or comparisons to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vifC
Read-only

Variance Inflation Factors for multicollinearity detection. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesIndependent variables.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only behavior is known. The description adds no behavioral context beyond thatβ€”no mention of what the output contains, how VIFs are computed, or what 'certified parity evidence' means operationally. With annotations, the bar is lower, but the description contributes almost nothing behavioral.

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 description is short and front-loaded with the key purpose. However, the second sentence, 'Validation: certified parity evidence,' is vague and does not clearly earn its place; it reads as a reliability claim rather than actionable guidance.

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 an output schema and comprehensive parameter schema, the mechanical details are covered. But the description fails to place VIF in a workflow (e.g., when to check multicollinearity, how to interpret high VIFs) and the 'Validation' phrase adds noise instead of context.

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 100%, and the parameter descriptions (e.g., 'Independent variables', 'Payload depth', 'Absolute path or URL') are detailed and self-sufficient. The tool description adds no parameter-level meaning, so the baseline of 3 applies.

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 first sentence, 'Variance Inflation Factors for multicollinearity detection,' clearly identifies the tool's output (VIF) and its purpose. It is specific enough to distinguish it from most sibling diagnostic tools, though it lacks an explicit verb like 'compute' and does not name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as reset_test or functional_form_test. The cryptic 'Validation: certified parity evidence' sentence does not address usage context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weakrobustA
Read-only

Stata-style unified weak-instrument-robust diagnostic panel.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome and single endogenous regressor (column names in ``data``).
h0NoNull value for the endogenous coefficient. All under-H0 tests (AR, CLR, K) are evaluated at ``beta = h0``.
exogNoIncluded exogenous controls. An intercept is always added.
vcovNoUsed by the Olea-Pflueger effective F.HC1
alphaNoSignificance level for the robust confidence sets.
endogYesOutcome and single endogenous regressor (column names in ``data``).
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
grid_sizeNoGrid resolution used by AR/CLR/K confidence-set inversion.
include_kNoAlso run the Kleibergen K score test and K confidence set.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
include_clrNoAlso run the CLR test and invert it for a CLR confidence set.
instrumentsYesExcluded instruments.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
clr_simulationsNoMonte-Carlo draws for the CLR null distribution.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so the agent knows this is a read-only analysis tool. The description adds meaningful behavioral context beyond annotations: it is 'Stata-style' (familiar output conventions), 'unified' (combines multiple weak-instrument-robust procedures), and a 'diagnostic panel' (produces a set of diagnostics rather than a single test). The detail parameter further discloses output-depth behavior (minimal/standard/agent) and token sizes, which is substantial behavioral transparency. No contradiction with 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?

The description is a single compact sentence that front-loads the tool's identity ('Stata-style unified weak-instrument-robust diagnostic panel'). It is appropriately sized for a tool whose parameter schema carries most of the detail. It earns its place by conveying the Stata-style and unified-panel nature, though it could have added a second sentence with usage guidance without becoming bloated.

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?

Given the tool's complexity (18 params, 4 required, output schema present) and the rich schema descriptions, the description is mostly complete. The output schema exists, so return values need not be described. The main gap is the lack of explicit guidance on when to choose this tool over the many IV-related siblings (anderson_rubin_test, effective_f_test, iv_diag, ivreg). The detail parameter's 'agent' mode and as_handle caching are documented in the schema, so the description does not need to repeat them.

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 100%, so the baseline is 3. The description itself adds little parameter meaning beyond the schema, but the schema descriptions are already rich (e.g., detail explains token sizes and use cases, h0 explains AR/CLR/K evaluation at beta=h0, data_path lists supported formats and schemes). The description's 'unified' and 'Stata-style' framing adds context for interpreting parameters like vcov and h0, but does not compensate for anything missing since nothing is missing.

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 'Stata-style unified weak-instrument-robust diagnostic panel' names a specific resource (weak-instrument-robust diagnostics) and a specific verb/action (unified diagnostic panel). It distinguishes itself from siblings like anderson_rubin_test, effective_f_test, iv_diag, and ivreg by signaling a unified panel of weak-instrument-robust tests. However, it does not explicitly enumerate which tests are included (AR, CLR, K are only in the schema), so an agent must infer the full scope from parameters.

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 usage for weak-instrument-robust diagnostics in an IV setting, and the schema's required parameters (data_path, endog, instruments, y) make the IV context clear. But there is no explicit when-to-use vs alternatives guidance, no mention of when to prefer anderson_rubin_test, effective_f_test, or iv_diag, and no exclusions. The 'unified' wording hints it is a one-stop panel, but the agent is left to infer when this is the right tool among many IV siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wild_cluster_bootA
Read-only

Wild cluster bootstrap t-test for a single coefficient.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed for reproducibility.
alphaNoSignificance level for confidence interval.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications (use odd number).
resultYesA fitted regression result from ``sp.regress()``.
clusterYesName of the cluster variable.
variableYesName of the coefficient to test (H0: beta = 0).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
weight_typeNoBootstrap weight distribution: - ``'rademacher'``: +/-1 with equal probability. - ``'webb'``: Webb (2014) 6-point distribution for G < 12. - ``'mammen'``: Mammen (1993) 2-point distribution.rademacher
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare readOnlyHint=true and openWorldHint=false, which the description does not contradict. However, the description adds no additional behavioral context beyond what the annotations provideβ€”it does not describe return values, side effects, or any caveats about cluster count or weight distribution. With annotations covering the safety profile, the description adds minimal value on this dimension.

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 a single, front-loaded sentence that captures the core purpose without any fluff. It is concise and immediately informative.

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 tool has 13 parameters and an output schema, which carry much of the load. However, the description lacks any context about when to use this variant over closely related tools (wild_cluster_bootstrap, subcluster_wild_bootstrap), and it doesn't explain the statistical purpose beyond the name. While the schema and output schema fill many gaps, the absence of usage context makes it only minimally complete for an agent deciding between similar tools.

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 100%, so every parameter already has a description. The tool description itself adds no parameter-specific information beyond what's in the schema, so it remains at the baseline 3.

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 clearly identifies the operation: a wild cluster bootstrap t-test applied to a single coefficient. It distinguishes this tool from siblings like wild_cluster_bootstrap and subcluster_wild_bootstrap by the explicit 'single coefficient' scope, so an agent can select it appropriately.

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 is provided on when to use this tool versus closely related siblings such as wild_cluster_bootstrap, subcluster_wild_bootstrap, or wild_cluster_ci_inv. There is no mention of prerequisites, such as needing a fitted regression result, nor any conditions that would favor this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wild_cluster_bootstrapA
Read-only

Cameron-Gelbach-Miller (2008) wild cluster bootstrap -- the canonical fix for cluster-robust inference with few clusters (G < 30). Re-samples cluster-level Rademacher weights to construct a percentile-t reference distribution that has correct size when the standard cluster-robust z-test rejects too often. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact). Do NOT use when: the number of clusters is large (say > 50) -- ordinary CRV1 standard errors are already reliable and much cheaper. Cost: Runtime is roughly n_boot x (one restricted refit). This is the intended trade for few-cluster validity -- do not raise n_boot inside an outer search loop. Assumptions: Errors are exchangeable within clusters (Rademacher weights are robust to most departures); Number of clusters G >= 5 for finite-sample validity. Pre-conditions: long-format dataset with a cluster identifier present; treatment / test variable varies within at least some clusters; test_var (or first column of x) is the coefficient under test. Failure modes: Multi-way clustering requested -> Multi-way wild cluster bootstrap is not yet supported; see sp.subcluster_wild_bootstrap...

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRight-hand-side variables
yYesOutcome variable
h0NoNull value of the coefficient
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
clusterYesCluster identifier
test_varNoVariable being tested; defaults to first in x
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
weight_typeNoBootstrap weight distributionrademacher
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only, and the description goes well beyond that by disclosing runtime cost, finite-sample validity assumptions (G >= 5), preconditions on the dataset shape, and known failure modes. It also explains the bootstrap re-sampling behavior and the trade-off being made, so an agent can predict behavior and plan around cost.

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 dense but well structured: purpose first, then explicit do-not-use guidance, cost, assumptions, preconditions, and failure modes. Each section earns its place and is front-loaded with the information most important for selection and invocation. The length is justified by the statistical complexity of the tool.

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 tool's statistical complexity, the large parameter set, and the rich schema, the description covers what an agent needs to select and invoke it correctly: when to use it, when not to, cost properties, assumptions, preconditions, and failure modes. The output schema exists, so return-value explanation is unnecessary, and the description need not repeat what structured fields already provide.

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 100%, so the schema already documents each parameter. The description adds meaningful semantics beyond that, including the relationship between n_boot and runtime, the fact that test_var defaults to the first column of x, and the cluster-level exchangeability assumption behind Rademacher weights. It does not redundantly re-specify every parameter, but provides enough extra meaning to support correct configuration.

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 opens by naming the exact method (Cameron-Gelbach-Miller 2008 wild cluster bootstrap) and its intended use case (cluster-robust inference with few clusters, G < 30). It also differentiates from alternatives by saying ordinary CRV1 is the better choice for large clusters and that multi-way clustering should route to subcluster_wild_bootstrap. This makes the tool's scope immediately clear to an agent.

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?

The description explicitly states when to use this tool (few clusters, G < 30), when not to use it (large clusters, say > 50, use ordinary CRV1), and names an alternative for unsupported cases (subcluster_wild_bootstrap for multi-way clustering). It also gives practical guidance such as not raising n_boot inside an outer search loop, which is exactly the kind of operational direction an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wild_cluster_ci_invB
Read-only

Confidence interval via bootstrap p-value inversion. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
seedNoRandom seed for reproducible stochastic steps.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoNumber of bootstrap replications.
clusterYesCluster identifier column for clustered standard errors.
test_varNotest_var parameter (Optional[str]).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
grid_sizeNoNumber of null-value grid points to evaluate (odd preferred).
grid_spanNoHalf-width of the search grid in units of cluster-robust SE.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
weight_typeNoweight_type parameter (str).webb
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds the validation-tier disclosure, which is useful context about the output's evidence quality. However, it doesn't mention potential computational intensity or other behavioral traits; the added sentence is the only extra.

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 compact sentences with no redundancy, and the core purpose is front-loaded. Every word adds value, making it a model of concise, structured description.

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 16 parameters, 4 required, many similar siblings, and an output schema present, the description is too thin. It doesn't explain what kind of model/data this applies to, how it relates to other wild cluster tools, or when to choose it. An agent must infer all this from the name and schema, which is a heavy lift.

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 100%, so all parameters are already well-documented. The description adds no parameter-level semantics beyond what the schema provides. The baseline of 3 applies.

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 operation: computing a confidence interval via bootstrap p-value inversion. This is a clear verb and resource, and it differentiates from simple bootstrap p-value tools like wild_cluster_boot. However, it does not explicitly name sibling alternatives or clarify the cluster/data context beyond the tool 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 usage guidance is provided. The description does not state when to prefer this tool over wild_cluster_boot or wild_cluster_bootstrap, nor does it mention prerequisites such as clustered data or model type. An agent must infer applicability from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wooldridge_didA
Read-only

Wooldridge (2021) extended TWFE (ETWFE). Saturated TWFE regression with cohort x post interactions; recovers cohort-specific ATTs. Numerically equivalent to CS / SA / BJS under the saturated specification. Validation: certified parity evidence. Do NOT use when: treatment timing is not staggered -- the extended TWFE saturation buys nothing over sp.did(method='2x2'). Cost: Like sp.etwfe: regressor count grows as O(cohorts x periods) from the saturated interactions, so the design matrix -- not the sample size -- is the binding cost. Assumptions: Parallel trends per cohort; No anticipation; SUTVA. Pre-conditions: panel with unit x time x outcome; first_treat cohort column (first period treated, 0 = never). Failure modes: Singleton cohorts with one unit -> Aggregate small cohorts or drop them. Alternatives: sp.callaway_santanna, sp.sun_abraham, sp.did_imputation, sp.etwfe. Typical minimum N: 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome variable column name or outcome array.
timeYesTime period column.
alphaNoSignificance level for confidence intervals and tests.
groupYesUnit identifier
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
clusterNoCluster identifier column for clustered standard errors.
controlsNoControl-variable column names.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
first_treatYesFirst-treatment period; 0 = never-treated
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set readOnlyHint=true, so no side-effect warning is needed. The description adds valuable behavioral context: cost scaling (O(cohorts x periods) regressors), failure mode for singleton cohorts, assumptions (parallel trends, no anticipation, SUTVA), and numerical equivalence. No contradiction with annotations.

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 dense but well-structured, with labeled sections for purpose, exclusions, cost, assumptions, pre-conditions, failure modes, alternatives, and minimum N. It is front-loaded with the core purpose and every sentence provides actionable 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 complex DID estimator, the description covers purpose, equivalence, when not to use, cost, assumptions, pre-conditions, failure modes, alternatives, and typical N. Since an output schema exists, return-value details are unnecessary; nothing essential is missing.

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 covers all 13 parameters with descriptions, so the baseline is 3. The description reinforces first_treat coding and panel pre-conditions, but it does not add substantial meaning beyond what the schema already states for group, time, y, or other parameters.

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 method (Wooldridge 2021 extended TWFE with cohort x post interactions) and outcome (cohort-specific ATTs). It also names the numerical equivalence to CS/SA/BJS and lists alternatives, so the tool is clearly distinguished from siblings like callaway_santanna or etwfe.

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 says 'Do NOT use when treatment timing is not staggered' and directs the agent to sp.did(method='2x2') instead. It also lists alternatives, pre-conditions (panel structure, first_treat coding), failure modes, and typical minimum N, giving complete routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

xlearnerC
Read-only

X-Learner CATE -- article alias for :func:metalearner(learner='x'). Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
XYesFeature matrix or covariate DataFrame.
dYesd parameter (str).
yYesOutcome variable column name or outcome array.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, indicating no side effects. The description adds a cryptic 'Validation: validated evidence tier' phrase that does not clearly explain what validation means, what the tool actually does under the hood, or what behavioral traits (e.g., caching, return structure) to expect. It adds almost no transparency beyond 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?

The description is extremely concise, with the core identity stated first. The second sentence about validation is short but somewhat opaque; however, it does not add much length, so the overall structure is efficient. Every word is not wasted, but the second sentence could be more actionable.

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 tool with 9 parameters, an output schema, and dozens of CATE-related siblings, this description is too sparse. It fails to explain what an X-Learner is, what the validation tier means, how the returned result is structured, or how to chain it with other tools (despite as_handle/result_id params). An agent would need to rely heavily on schema and external knowledge.

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 100%, meaning every parameter is already documented with meaningful detail in the schema (e.g., 'detail' enum explains token trade-offs, 'data_path' lists supported formats). The description adds no parameter information, but the baseline of 3 applies because the schema handles the heavy lifting.

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 method ('X-Learner CATE') and explicitly calls itself an alias for the more general metalearner tool, giving some differentiation from that sibling. However, it doesn't distinguish itself from other CATE estimators in the sibling list (e.g., causal_forest, auto_cate), leaving some ambiguity about when this specific variant would be preferred.

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 mentions that it is an alias for metalearner(learner='x'), which hints at a relationship to a sibling but does not provide explicit guidance on when to use this tool versus alternatives. It lacks any statement about recommended scenarios, preconditions, or exclusions, so an agent would have to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

xtabondA
Read-only

Arellano-Bond / Blundell-Bond GMM for dynamic panels (standalone). Validation: certified parity evidence. Assumptions: No second-order serial correlation in differenced errors; Internal instruments are valid and not too numerous. Pre-conditions: Panel data include unit, time, outcome, and lagged dependent variable structure; Number of time periods is moderate relative to units. Failure modes: Instrument proliferation or AR(2) test rejects -> Collapse instruments, reduce lag depth, or compare with fixed-effects estimates. Alternatives: sp.panel, sp.feols. Typical minimum N: 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoxtabond2 h(): one-step error covariance; 3 is xtabond2's default, 2 zeroes the system cross quadrants (Stata xtdpdsys), 1 the identity.
xNoExogenous regressors
yYesDependent variable
idNoUnit identifierid
lagsNolags parameter (int).
timeNoTime columntime
stepsNoNumber of GMM steps, or 'iterated' / 'cue'
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNodifference (Arellano-Bond), system (Blundell-Bond) or ah (Anderson-Hsiao IV)difference
clusterNoCluster SEs on a coarser unit than the panel id (must be constant within unit)
twostepNotwostep parameter (bool).
collapseNoCollapse instruments (Roodman 2009) to curb proliferation
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
endogenousNoEndogenous regressors (own lags 2+ as instruments)
orthogonalNoForward orthogonal deviations instead of first differences
iv_equationNoSystem GMM: equation(s) the exogenous regressors instrument; None means 'both' (xtabond2), 'diff' is Stata xtdpdsys.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
time_dummiesNoAdd period dummies as regressors and instruments
ah_instrumentNoAnderson-Hsiao instrument for method='ah'levels
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.
predeterminedNoPredetermined regressors (own lags 1+ as instruments)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry readOnlyHint=true and openWorldHint=false, which already signal a read operation. The description goes well beyond annotations by disclosing assumptions (no second-order serial correlation, valid internal instruments), failure modes (instrument proliferation, AR(2) test rejection), and remediation paths (collapse instruments, reduce lag depth, compare with fixed effects). It does not detail the exact return payload, but the output schema exists and the detail parameter covers payload depth.

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 dense but efficient: it front-loads the method identification, then packs assumptions, pre-conditions, failure modes, alternatives, and minimum N into a compact block. It is on the longer side, but every sentence earns its place for a specialized estimator with many diagnostics; a structured list format would be slightly cleaner, hence 4 rather than 5.

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 complex dynamic-panel GMM estimator with 23 parameters and rich output schema, the description covers what an agent needs to decide and invoke it: validation status, statistical assumptions, data pre-conditions, failure modes, sample-size guidance, and sibling alternatives. The detail parameter even tells the agent how to request minimal vs agent-level payloads for chaining calls, and as_handle/result_id are documented in the schema.

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 100%, so the baseline is 3 even with no additional parameter context. The description adds meaning for key parameters: it ties h to xtabond2 defaults, explains collapse as Roodman 2009 instrument collapsing, and contextualizes method, endogenous/predetermined instruments, iv_equation, ah_instrument, and detail payload sizes. It does not touch every parameter, but it adds genuine meaning for the specialized GMM knobs, so a 4 is warranted.

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 opens with a specific verb+resource: 'Arellano-Bond / Blundell-Bond GMM for dynamic panels (standalone)' and immediately gives validation, assumptions, pre-conditions, failure modes, and alternatives. It clearly distinguishes itself from xtdpdsys, sp.panel, and sp.feols, so an agent can tell it apart from siblings 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?

The description names explicit when-to-use conditions: panel data with unit, time, outcome, lagged dependent variable structure; moderate time periods relative to units; minimum N of 100. It also names alternatives (sp.panel, sp.feols) and failure-mode remedies, giving clear context for when to choose this tool vs others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

xtdpdsysA
Read-only

Blundell-Bond system GMM for dynamic panels (alias for xtabond with method='system'). Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoxtabond2 h(): one-step error covariance; 2 is Stata xtdpdsys, 3 xtabond2's default, 1 the identity.
xNoExogenous regressors
yYesDependent variable
idNoUnit identifierid
lagsNolags parameter (int).
timeNoTime columntime
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
twostepNotwostep parameter (bool).
collapseNoCollapse instruments (Roodman 2009) to curb proliferation
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
iv_equationNoEquation(s) the exogenous regressors instrument; 'diff' is Stata xtdpdsys, 'both' is xtabond2's iv() default.diff
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only, so the safety burden is low. The description adds that it behaves as an alias for xtabond with method='system' and asserts certified parity evidence, which tells an agent the implementation is intentionally aligned with a known baseline. No contradiction with 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?

The description is compact and front-loaded with the estimator identity. The 'certified parity evidence' phrase is somewhat vague but adds credibility without wasting space.

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?

Given the large parameter surface, the description is minimal, but the input schema carries detailed parameter documentation and an output schema exists. It still leans on the alias and parity claim rather than explaining estimator prerequisites or result behavior.

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 100%, so the schema already documents all 15 parameters, including defaults and enums. The description contributes no parameter-level semantics beyond fixing method='system' as part of the tool's identity.

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 identifies the tool as a Blundell-Bond system GMM estimator for dynamic panels and clarifies it is an alias for xtabond with method='system'. It lacks an explicit verb like 'estimates', but the estimator and method are unmistakable and distinct from the sibling tools.

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 alias relationship to xtabond with method='system' gives useful context and implies use for dynamic-panel system GMM. However, it does not explicitly state when to choose xtdpdsys over xtabond or other dynamic-panel siblings, nor does it provide any exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

xtlsdvcC
Read-only

Bias-corrected LSDV (LSDVC) estimator for dynamic panels. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoStrictly exogenous regressors. Accepts the same lag-operator syntax
yYesDependent variable. Its first lag is added automatically -- do **not** pass a hand-built lag in ``x``.
idNoUnit and period identifiers.id
seedNoSeed for the bootstrap.
timeNoUnit and period identifiers.time
alphaNoSignificance level.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
initialNoConsistent estimator used to evaluate the bias expression: Arellano-Bond, Anderson-Hsiao, or Blundell-Bond system GMM. The correction is only as good as this input, and the three can disagree materially on a persistent series -- ``'bb'`` is the safer choice there, for the same reason system GMM is.ab
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
bootstrapNoNumber of parametric-bootstrap replications for the standard errors. **The reported analytic standard errors are the LSDV ones and do not account for the bias correction**, exactly as in Stata's ``xtlsdvc``; set this to get honest ones. 0 skips the bootstrap and warns.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
bias_orderNoHow many terms of the Bun-Kiviet expansion to subtract: ``O(1/T)``, ``O(1/NT)``, or ``O(1/NT^2)``. Bun & Kiviet (2003) find diminishing returns beyond the second.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond what annotations already provide (readOnlyHint=true). It does not mention the bootstrap behavior, bias-correction caveats, or the meaning of 'certified parity evidence.' With read-only annotations, the description fails to add context like limitations or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is under-specification rather than effective conciseness. It lacks front-loaded essential information and omits key details that would help an agent decide whether to invoke the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex estimator with 15 parameters and no output schema shown, the description is grossly insufficient. It does not explain what the tool does beyond the name, what inputs are expected beyond the schema, what outputs look like, or when it is appropriate. The schema is detailed but the description does not synthesize this into usable context.

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 100%, and each parameter has detailed descriptions (e.g., 'bootstrap', 'initial', 'bias_order'). The description itself adds no parameter-specific meaning, so the baseline 3 applies as the schema carries the burden.

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 estimator (bias-corrected LSDV) for dynamic panels, which clearly identifies the tool's purpose. However, it does not differentiate it from sibling dynamic panel estimators like xtdpdsys or xtabond, so it is clear but not fully distinguishing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/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 alternatives. The description does not mention prerequisites, data requirements, or scenarios where LSDVC is preferred over other estimators. The only additional text, 'Validation: certified parity evidence,' offers no actionable usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

xtnbregA
Read-only

Fit panel negative-binomial regression. Use model='fe' for explicit entity fixed effects via nbreg, or model='re' for a random-intercept NB-2 GLMM via menbreg. Do not use feols for negative-binomial outcomes.

ParametersJSON Schema
NameRequiredDescriptionDefault
irrNo
timeNoOptional time column.
modelNofe
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
entityYesPanel/unit identifier column.
offsetNo
clusterNoCluster variable; defaults to entity for model="fe".
formulaYesFormula such as 'count ~ x1 + x2'.
exposureNo
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
time_effectsNoInclude time dummies in the fixed-effects model.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the agent knows this is a read-only operation. The description adds behavioral detail by explaining that model='fe' uses nbreg and model='re' uses menbreg, which hints at implementation behavior. It does not describe output structure, but an output schema exists, reducing the need. No contradictions with annotations.

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 concise sentences with no filler. The purpose is stated first, followed by the key model-choice guidance and a critical warning. Every sentence earns its place, and the structure front-loads the most important information for an agent.

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 tool with 15 parameters and an output schema, the description covers the core decision (model selection) and a common pitfall (feols). It does not explain optional parameters like offset, exposure, or clustering, but those are well-documented in the schema. Given the rich schema and output schema, the description is sufficiently complete for an agent to call the tool 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 schema already documents 73% of parameters, including descriptions for model, detail, data_path, etc. The description adds meaningful semantics for the 'model' parameter by mapping 'fe' to nbreg and 're' to menbreg, which is not in the schema. It also reinforces that the outcome must be negative-binomial, helping agents avoid misusing parameters. This goes beyond the schema's 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?

The description opens with a specific verb+resource: 'Fit panel negative-binomial regression.' It clearly distinguishes the tool's domain (panel negative-binomial) and explicitly warns against using feols for such outcomes, which sets it apart from sibling tools like fepois or ppmlhdfe. The mention of model='fe' vs 're' further clarifies the two main modeling approaches.

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 gives explicit guidance on when to use this tool: for panel negative-binomial outcomes, and explicitly advises against using feols. It also instructs how to choose between fixed and random effects via the 'model' parameter. However, it does not directly compare with other panel count tools (e.g., fepois for Poisson) or with nbreg/menbreg outside the panel context, leaving some room for inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

yatchew_linearity_testC
Read-only

Yatchew differencing test that E[y | x] is a polynomial of order. Validation: validated evidence tier (known-truth, reference, external-parity, or Monte Carlo artifact).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesRunning variable and outcome, same length.
yYesRunning variable and outcome, same length.
orderNoPolynomial order under the null. 1 = linear, 0 = constant.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
het_robustNoUse the heteroskedasticity-robust statistic of the paper's Appendix E. ``did_had`` always does.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, and the description does not contradict that. However, the description adds little beyond it: the 'Validation: validated evidence tier' fragment is vague and does not explain side effects such as the server-side caching enabled by as_handle, or any other behavioral constraints. With annotations carrying the safety profile, this sparse disclosure earns a low score.

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 first sentence is concise and front-loaded. The trailing 'Validation: validated evidence tier...' fragment is cryptically worded and does not clearly earn its place; it reads like an internal metadata tag rather than an explanatory sentence. Overall short but with a confusing inclusion.

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?

Despite 100% schema coverage and an output schema, the description is too terse for a tool with 10 parameters and many statistically similar siblings. It does not state key context such as sorting/numeric requirements for x, when to prefer this over other specification tests, or what the validation evidence tier means. The missing context hurts correct selection and 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 100%, so the schema already documents all parameters, including the meaning of order (polynomial order under the null). The description's phrase 'polynomial of order' reinforces but does not add new semantics. Baseline 3 is appropriate because the schema does the heavy lifting.

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 statistical test (Yatchew differencing test) and states the null hypothesis: E[y|x] is a polynomial of the given order. This is a clear verb+resource statement. It does not explicitly contrast with sibling specification tests like reset_test or functional_form_test, so it misses the top score.

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 test instead of the many related specification tests among the siblings (reset_test, functional_form_test, blp_test). No conditions, prerequisites, or exclusions are stated, so the agent must infer appropriateness from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

yu_elwert_decomposeB
Read-only

Nonparametric causal decomposition of a group disparity. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesAdjustment covariates (used to identify within-group CATEs).
yYesName of the (continuous) outcome column.
seedNoRandom seed for reproducible stochastic steps.
trimNoLower/upper clip for fitted propensities (only used in ``method="efficient"``).
alphaNoTwo-sided coverage level.
groupYesBinary group indicator (0/1) -- ``1`` = advantaged / index group.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
methodNo``"plugin"`` uses within-cell OLS for outcomes and within-group logit for the propensity and computes plug-in expectations. ``"efficient"`` is the efficient-influence-function estimator of the authors' ``cdgd`` package (``cdgd0_manual``) on those same nuisance fits: Hajek-normalised doubly robust potential outcomes, with selection the residual so the components add up exactly -- recommended when nuisance functions might be misspecified. ``method="efficient"`` computed selection as a covariance of doubly robust scores, so the four components did not add up to the disparity (0.566 against 0.572 on a 2,000-row example), and used unnormalised inverse-probability weights. Given the same nuisance predictions it now matches ``cdgd::cdgd0_manual`` to machine precision. ``inference="analytic"`` is new. ``"plugin"`` is unchanged.plugin
n_bootNoNumber of bootstrap replications.
clusterNoColumn name to use for cluster bootstrap.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
inferenceNo``"bootstrap"`` returns SEs and percentile CIs from the non-parametric (cluster-aware) bootstrap. ``"analytic"`` (only with ``method="efficient"``) returns the efficient-influence-function SEs and Wald CIs of ``cdgd``. ``"none"`` skips inference.bootstrap
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
treatmentYesBinary treatment indicator (0/1).
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the description does not contradict the safety profile. It adds a 'validation' concept via 'certified parity evidence', but this is vague and does not explain estimator behavior, assumptions, or how decomposition components relate to the disparity.

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 sentences keep the core purpose front-loaded and easy to parse. The second sentence is compact but somewhat cryptic; it does not waste words but also does not add much concrete 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?

For a causal-decomposition tool with 17 parameters and many sibling decomposition/mediation tools, this description is too sparse. It lacks any explanation of the causal framing, the meaning of 'certified parity evidence', or how this tool differs from alternatives, though the rich schema and output schema partially compensate.

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 100%, so the input schema already documents all 17 parameters thoroughly. The description adds no parameter-level detail, so it earns the baseline 3 rather than providing extra value beyond the schema.

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 uses a specific verb and resource ('nonparametric causal decomposition of a group disparity'), clearly conveying the tool's analytical purpose. However, it does not differentiate it from sibling decomposition tools such as disparity_decompose, melly_decompose, or mediation_decompose.

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 is provided on when to choose yu_elwert_decompose over alternatives, nor any exclusions or prerequisites. The phrase 'Validation: certified parity evidence' hints at a validation-related use case but does not help an agent decide among the many sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

yun_nonlinearC
Read-only

Bauer-Sinning (2008) nonlinear Oaxaca-Blinder decomposition with

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesPrimary running variable, regressor, or feature input for this estimator.
yYesOutcome variable column name or outcome array.
groupYesGroup or cohort identifier.
modelNoModel variant or parameterisation to fit.logit
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
variantNovariant parameter (str).yun
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
referenceNoreference parameter (int).
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already signal readOnlyHint=true, and the description adds no behavioral context beyond naming the method. It does not disclose what the call returns, whether results are cached, what model variants matter, or any operational side effects. There is no annotation contradiction, but the description carries almost no disclosure burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is brief, but it is not a complete or well-structured sentenceβ€”the trailing 'with' indicates truncation. This is under-specification rather than disciplined conciseness.

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 12-parameter nonlinear decomposition estimator with many close sibling tools, the description is far too incomplete. An agent cannot tell why yun_nonlinear is preferred over bauer_sinning, what output shape to expect, or which options are relevant. The truncated one-line description is not sufficient despite the rich schema.

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 100%, so the baseline for this dimension is 3. The description contributes no parameter-level meaning; all semantics are left to fields like model, detail, reference, and as_handle in the schema.

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 methodβ€”'Bauer-Sinning (2008) nonlinear Oaxaca-Blinder decomposition'β€”so the technical purpose is recognizable. However, it is a dangling noun phrase cut off at 'with', has no explicit verb, and does not distinguish this tool from the sibling bauer_sinning or nearby oaxaca/fairlie tools.

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 about when to use this tool instead of alternatives. Given many close siblings such as bauer_sinning, oaxaca, dfl_decompose, and fairlie, the description provides no selection criteria, exclusions, or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zero_first_stageA
Read-only

Zero-first-stage (ZFS) test of the exclusion restriction, plus van Kippersluis-Rietveld (2018) pleiotropy-robust correction. Estimates the instrument's direct effect on the outcome in a subsample where it has no first stage, reports the implied bias in the main-sample IV estimate, and returns the corrected point estimate with a cluster-bootstrap interval. Accepts the same exog / absorb / cluster spec as sp.iv, so the test runs on the specification actually fitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
yYesOutcome column
zfsYesBoolean column/mask marking the zero-first-stage subsample where the instrument is believed inert
exogNoexog parameter (list[str] | str).
alphaNoSignificance level for confidence intervals and tests.
endogYesEndogenous regressor
absorbNoFixed effects absorbed in every component regression
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
n_bootNoBootstrap reps for the corrected estimate (0 to skip)
clusterNoCluster identifier column for clustered standard errors.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathYesAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
instrumentYesThe single excluded instrument being tested
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
random_stateNoRandom seed or RandomState for reproducible stochastic steps.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the agent knows it is a read-only analysis. The description adds meaningful behavioral context beyond that: it estimates the instrument's direct effect in a zero-first-stage subsample, reports implied bias, returns a corrected estimate with a cluster-bootstrap interval, and accepts the same spec as sp.iv. It also discloses the detail parameter's payload-depth behavior (minimal/standard/agent) which affects what the agent receives. No contradiction with annotations.

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 dense but well-structured: it front-loads the purpose and method, then the outputs, then the spec compatibility. Every sentence earns its place, and the detail parameter's payload-depth explanation is useful for an agent deciding how to call it. No fluff or repetition of schema content.

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?

The description is complete for a read-only diagnostic tool with a rich output schema. It explains the purpose, the method, the key inputs (zfs, instrument), the outputs (bias, corrected estimate, bootstrap interval), and the spec compatibility with sp.iv. The only minor gap is that it doesn't explicitly state what happens when n_boot=0 or how the cluster-bootstrap interval behaves, but the schema documents n_boot and the output schema likely covers the return structure.

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 100%, so the schema already documents all 16 parameters. The description adds context for the key parameters (zfs as the zero-first-stage subsample, instrument as the single excluded instrument, exog/absorb/cluster as the same spec as sp.iv) but does not add much beyond the schema for most parameters. Baseline 3 is appropriate because the schema carries the heavy lifting.

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 statistical procedure (zero-first-stage test of the exclusion restriction), names the method variant (van Kippersluis-Rietveld 2018 pleiotropy-robust correction), and states the concrete outputs: implied bias in the main-sample IV estimate and a corrected point estimate with cluster-bootstrap interval. It also distinguishes itself from generic IV tools by noting it accepts the same spec as sp.iv, so the test runs on the actually fitted specification.

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 clearly states when to use it: to test the exclusion restriction and obtain a pleiotropy-robust correction, in a subsample where the instrument has no first stage. It also explains the relationship to sp.iv (same exog/absorb/cluster spec), which implies it is a diagnostic companion to sp.iv. It does not explicitly name alternatives or state when not to use it, but the context is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zinbC
Read-only

Zero-Inflated Negative Binomial (ZINB) regression via MLE. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoCount-equation regressors.
yNoDependent variable name.
tolNoNumerical convergence tolerance.
alphaNoSignificance level for confidence intervals and tests.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNoStandard error type.nonrobust
clusterNoCluster variable name.
formulaNoPatsy-style formula for the count equation.
inflateNoInflation-equation regressors. Default: same as count regressors.
maxiterNomaxiter parameter (int).
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds essentially no behavioral context beyond that. The phrase 'Validation: certified parity evidence' is obscure and does not meaningfully disclose behavior (e.g., fitting, caching via as_handle, or result payloads). No contradiction with annotations exists, but the description fails to enrich the safety/behavior profile.

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 description is appropriately brief and front-loads the main purpose. However, the second sentence 'Validation: certified parity evidence' is cryptic and does not earn its space β€” it likely confuses rather than informs an agent, so the conciseness does not translate to clarity.

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 15 parameters but 100% schema coverage and an output schema present, the description carries a lighter burden. It is adequate for identifying the model type but lacks the sibling differentiation and usage context needed to fully guide an agent choosing among the many count/zero-inflated regression tools in the sibling list.

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 100%, so the parameters (x, y, tol, alpha, detail, robust, cluster, formula, inflate, etc.) are already documented in the schema. The description adds no extra meaning or usage nuance for any parameter, so the baseline of 3 applies.

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 estimator ('Zero-Inflated Negative Binomial (ZINB) regression via MLE') with a clear verb and resource, which distinguishes it from siblings like nbreg, zip_model, hurdle, and menbreg. However, the appended line 'Validation: certified parity evidence' is cryptic and adds no clarity about what the tool does.

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 is given on when to choose ZINB over related count/inflation models (nbreg, zip_model, hurdle, menbreg) or when it is inappropriate (e.g., data without excess zeros). The description offers no context about prerequisites, data requirements, or selection conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zip_modelC
Read-only

Zero-Inflated Poisson (ZIP) regression via MLE. Validation: certified parity evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoCount-equation regressors (alternative to formula).
yNoDependent variable name (alternative to formula).
tolNoConvergence tolerance.
alphaNoSignificance level for confidence intervals.
detailNoPayload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip.agent
robustNo"nonrobust", "HC0", "HC1", etc.nonrobust
clusterNoCluster variable name for clustered standard errors.
formulaNoPatsy-style formula for the count equation, e.g. "y ~ x1 + x2".
inflateNoInflation-equation regressors. Default: same as count regressors.
maxiterNoMaximum iterations for optimizer.
as_handleNoIf true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running.
data_pathNoAbsolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://.
result_idNoOptional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns.
data_columnsNoOptional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads.
data_sample_nNoOptional uniform random subsample size (seed=0, deterministic) β€” useful on huge panels.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, so the description's 'via MLE' adds a minor methodological detail. However, it does not disclose what the tool actually returns, how it handles inputs (e.g., formula vs. x/y), or any side effects. The cryptic phrase 'Validation: certified parity evidence' adds no usable 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short (two sentences) and front-loaded with the core purpose. However, the second sentence is an unclear fragment ('Validation: certified parity evidence') that does not earn its place and detracts from overall 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?

For a tool with 15 parameters and an output schema, the description is severely under-specified. It does not mention that the model is for count data with excess zeros, how to specify the count and inflation equations, or that the tool returns a fitted model. An agent would have to rely entirely on the schema to understand the tool's use.

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 100%, so all 15 parameters are documented in the input schema. The tool description adds no parameter-specific meaning; it neither repeats nor supplements the schema, so the baseline score of 3 applies.

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 the tool performs Zero-Inflated Poisson (ZIP) regression via MLE, which is a specific verb-resource combination that clearly distinguishes it from siblings like poisson (standard Poisson) and zinb (zero-inflated negative binomial). The model type and estimation method are explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use ZIP regression versus alternatives such as poisson, zinb, or hurdle. The description does not mention prerequisites, data requirements, or conditions that would select this tool over others.

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. 548 tool updatesv0.1.0
    • First observedabsorb_ols
    • First observedadjust_pvalues
    • First observedaft
    • First observedaggte
    • First observedaggte_from_influence
    • First observedaipw
    • First observedanderson_rubin_ci
    • First observedanderson_rubin_test
    • First observedarima
    • First observedassumption_audit
    • First observedaudit
    • First observedaudit_result
    • First observedaugsynth
    • First observedauto_cate
    • First observedauto_cate_tuned
    • First observedauto_did
    • First observedauto_iv
    • First observedavailable_methods
    • First observedaverage_treatment_effect
    • First observedbacon_decomposition
    • First observedbacon_plot
    • First observedbalance_diagnostics
    • First observedbalance_panel
    • First observedbalanceplot
    • First observedbartik
    • First observedbasque_terrorism
    • First observedbauer_sinning
    • First observedbcf
    • First observedbcf_factor_exposure
    • First observedbcf_longitudinal
    • First observedbcf_ordinal
    • First observedbenjamini_hochberg
    • First observedbetareg
    • First observedbeyond_average_late
    • First observedbias_factor
    • First observedbib_for
    • First observedbibtex
    • First observedbidirectional_pci
    • First observedbiprobit
    • First observedbjs
    • First observedbjs_pretrend_joint
    • First observedblp_test
    • First observedbonferroni
    • First observedbootstrap
    • First observedborusyak_jaravel_spiess
    • First observedboundary_rd
    • First observedbreakdown_frontier
    • First observedbreakdown_m
    • First observedbridge
    • First observedbrief
    • First observedbrief_result
    • First observedbunching
    • First observedbvar
    • First observedcalibrate_confounding_strength
    • First observedcalibration_test
    • First observedcalifornia_prop99
    • First observedcalifornia_tobacco
    • First observedcallaway_santanna
    • First observedcardinality_match
    • First observedcate_by_group
    • First observedcate_eval
    • First observedcate_group_plot
    • First observedcate_plot
    • First observedcate_summary
    • First observedcausal
    • First observedcausal_discovery
    • First observedcausal_dqn
    • First observedcausal_forest
    • First observedcausal_impact
    • First observedcausal_rl_benchmark
    • First observedcbps
    • First observedcfm_decompose
    • First observedcgs_continuous_did
    • First observedcheck_absorbing
    • First observedcheck_identification
    • First observedchilean_households
    • First observedcic
    • First observedclogit
    • First observedcloglog
    • First observedcluster_cate
    • First observedcluster_cross_interference
    • First observedcluster_robust_se
    • First observedcohort_anchored_event_study
    • First observedcohort_event_study_plot
    • First observedcompare_estimators
    • First observedcompare_event_study_conventions
    • First observedcompare_metalearners
    • First observedconditional_lr_ci
    • First observedconformal
    • First observedconformal_fair_ite
    • First observedconformal_ite
    • First observedconformal_synth
    • First observedconley
    • First observedcontinuous_did
    • First observedcontinuous_iv_late
    • First observedcontrast
    • First observedcopula_sensitivity
    • First observedcox
    • First observedcox_frailty
    • First observedcps_wage
    • First observedcr2_se
    • First observedcr3_jackknife_vcov
    • First observedcross_validate
    • First observedcs_report
    • First observedcuminc
    • First observedcusum_test
    • First observeddag
    • First observeddag_example
    • First observeddas_gupta
    • First observedddd
    • First observedddd_heterogeneous
    • First observeddecompose
    • First observeddemean
    • First observeddemeaned_synth
    • First observeddesign_intake
    • First observeddesign_robust_event_study
    • First observeddetect_design
    • First observeddfl_decompose
    • First observeddiagnose
    • First observeddiagnose_result
    • First observeddid
    • First observeddid_2stage
    • First observeddid_2x2
    • First observeddid_analysis
    • First observeddid_balance
    • First observeddid_bcf
    • First observeddid_cluster_diagnostics
    • First observeddid_design_contract
    • First observeddid_estimate
    • First observeddid_had
    • First observeddid_imputation
    • First observeddid_misclassified
    • First observeddid_multiplegt
    • First observeddid_multiplegt_dyn
    • First observeddid_plot
    • First observeddid_report
    • First observeddid_summary
    • First observeddid_summary_plot
    • First observeddid_summary_to_latex
    • First observeddid_summary_to_markdown
    • First observeddid_timevarying_covariates
    • First observeddirect_method
    • First observeddiscos
    • First observeddiscos_plot
    • First observeddiscos_test
    • First observeddisparity_decompose
    • First observeddisparity_panel
    • First observeddist_iv
    • First observeddistributional_did
    • First observeddistributional_te
    • First observeddiversity_index
    • First observeddl_propensity_score
    • First observeddml
    • First observeddml_diagnostics
    • First observeddml_model_averaging
    • First observeddml_panel
    • First observeddml_sensitivity
    • First observeddose_response
    • First observeddouble_negative_control
    • First observeddoubly_robust
    • First observeddrdid
    • First observedebalance
    • First observedeffective_f_test
    • First observedengle_granger
    • First observedenhanced_event_study_plot
    • First observedestat
    • First observedetable
    • First observedetregress
    • First observedetwfe
    • First observedetwfe_emfx
    • First observedevalue
    • First observedevalue_from_result
    • First observedevalue_rd
    • First observedevalue_rr
    • First observedevent_study
    • First observedevent_study_convention
    • First observedevent_study_table
    • First observedexamples
    • First observedfairlie
    • First observedfci
    • First observedfect
    • First observedfeglm
    • First observedfeols
    • First observedfepois
    • First observedffl_decompose
    • First observedfinegray
    • First observedfisher_exact
    • First observedfocal_cate
    • First observedforest_diagnostics
    • First observedfortified_pci
    • First observedfracreg
    • First observedfrom_r
    • First observedfrom_stata
    • First observedfront_door
    • First observedfrontdoor
    • First observedfunctional_form_test
    • First observedg_computation
    • First observedg_estimation
    • First observedgap_closing
    • First observedgarch
    • First observedgardner_did
    • First observedgate_test
    • First observedgelbach
    • First observedgeneral_bunching
    • First observedgenmatch
    • First observedgeographic_rd
    • First observedgerman_reunification
    • First observedges
    • First observedggdid
    • First observedglm
    • First observedgmm
    • First observedgranger_causality
    • First observedgroup_time_plot
    • First observedgsynth
    • First observedhal_tmle
    • First observedharvest_did
    • First observedhausman_test
    • First observedhdfe_ols
    • First observedheckman
    • First observedhet_test
    • First observedholm
    • First observedhonest_did
    • First observedhonest_did_from_result
    • First observedhonest_variance
    • First observedhorowitz_manski
    • First observedhurdle
    • First observedicc
    • First observedimpactplot
    • First observedinequality_index
    • First observedinfluence_functions
    • First observedinteractive_fe
    • First observedinterference
    • First observedinterflex
    • First observedinterflex_plot
    • First observedinterpret_result
    • First observedips
    • First observedipw
    • First observedirf
    • First observedits
    • First observediv
    • First observediv_bounds
    • First observediv_compare
    • First observediv_diag
    • First observedivqreg
    • First observedivreg
    • First observedjackknife_se
    • First observedjive
    • First observedjohansen
    • First observedkan_dlate
    • First observedkaplan_meier
    • First observedkernel_iv
    • First observedkink_unified
    • First observedkitagawa_decompose
    • First observedkitagawa_test
    • First observedlasso_iv
    • First observedlasso_select
    • First observedlee_bounds
    • First observedliml
    • First observedlincom
    • First observedlingam
    • First observedlist_replications
    • First observedllm_dag_propose
    • First observedllm_sensitivity_priors
    • First observedllm_unobserved_confounders
    • First observedlocal_projections
    • First observedlogit
    • First observedlogrank_test
    • First observedlove_plot
    • First observedlp_did
    • First observedlrtest
    • First observedltmle
    • First observedltmle_survival
    • First observedmachado_mata
    • First observedmanski_bounds
    • First observedmargins
    • First observedmargins_at
    • First observedmargins_at_plot
    • First observedmargins_table
    • First observedmarginsplot
    • First observedmatch
    • First observedmatrix_completion
    • First observedmc_panel
    • First observedmc_synth
    • First observedmccrary_test
    • First observedmediate
    • First observedmediate_interventional
    • First observedmediation
    • First observedmediation_decompose
    • First observedmegamma
    • First observedmeglm
    • First observedmelly_decompose
    • First observedmelogit
    • First observedmenbreg
    • First observedmeologit
    • First observedmepoisson
    • First observedmeta_analysis
    • First observedmetalearner
    • First observedmethods_appendix
    • First observedmincer_wage_panel
    • First observedmixed
    • First observedmixlogit
    • First observedml_bounds
    • First observedmlogit
    • First observedmodel_averaging_dml
    • First observedmr
    • First observedmsm
    • First observedmulti_cutoff_rd
    • First observedmulti_outcome_synth
    • First observedmulti_score_rd
    • First observedmulti_treatment
    • First observedmultiway_cluster_vcov
    • First observednbreg
    • First observednegative_control_exposure
    • First observednegative_control_outcome
    • First observednetwork_exposure
    • First observednonlinear_icp
    • First observednotch
    • First observednotears
    • First observedoaxaca
    • First observedoffline_safe_policy
    • First observedologit
    • First observedoprobit
    • First observedoptimal_match
    • First observedoster_bounds
    • First observedoster_delta
    • First observedoverlap_plot
    • First observedoverlap_weighted_did
    • First observedoverlap_weights
    • First observedpanel
    • First observedpanel_compare
    • First observedpanel_fgls
    • First observedpanel_logit
    • First observedpanel_probit
    • First observedpanel_qtet
    • First observedpanel_unitroot
    • First observedpanel_view
    • First observedparallel_trends_plot
    • First observedparallel_trends_robustness
    • First observedpartial_corr_pvalue
    • First observedpartial_identification
    • First observedpate
    • First observedpc_algorithm
    • First observedpci_mtp
    • First observedpcmci
    • First observedpipeline_did
    • First observedpipeline_iv
    • First observedpipeline_rd
    • First observedplot_from_result
    • First observedpoisson
    • First observedpolicy_targeting
    • First observedpolicy_tree
    • First observedpolicy_value
    • First observedpostestimation_contract
    • First observedpostestimation_report
    • First observedppi_mean
    • First observedppi_ols
    • First observedppmlhdfe
    • First observedpredict_cate
    • First observedpreflight
    • First observedpretrends_equivalence
    • First observedpretrends_power
    • First observedpretrends_slope_for_power
    • First observedpretrends_summary
    • First observedpretrends_test
    • First observedprincipal_strat
    • First observedprobit
    • First observedpropensity_score
    • First observedproximal
    • First observedproximal_regression
    • First observedps_balance
    • First observedpsm
    • First observedpsmatch2
    • First observedpsplot
    • First observedpub_ready
    • First observedpwcompare
    • First observedqdid
    • First observedqqsynth
    • First observedqreg
    • First observedqte
    • First observedqte_hd_panel
    • First observedquasi_untreated_test
    • First observedrate
    • First observedrd_bayes_hte
    • First observedrd_bias_aware_fuzzy
    • First observedrd_boost
    • First observedrd_cate_summary
    • First observedrd_compare
    • First observedrd_dashboard
    • First observedrd_discrete
    • First observedrd_distribution
    • First observedrd_distributional_design
    • First observedrd_external_validity
    • First observedrd_extrapolate
    • First observedrd_flex
    • First observedrd_forest
    • First observedrd_honest
    • First observedrd_interference
    • First observedrd_lasso
    • First observedrd_multi_extrapolate
    • First observedrd_multi_score
    • First observedrd_robustness_table
    • First observedrd2d
    • First observedrd2d_bw
    • First observedrd2d_plot
    • First observedrdbalance
    • First observedrdbwhte
    • First observedrdbwselect
    • First observedrdbwsensitivity
    • First observedrdd
    • First observedrddensity
    • First observedrdhte
    • First observedrdhte_lincom
    • First observedrdit
    • First observedrdmc
    • First observedrdms
    • First observedrdplacebo
    • First observedrdplot
    • First observedrdplotdensity
    • First observedrdpower
    • First observedrdrandinf
    • First observedrdrbounds
    • First observedrdrobust
    • First observedrdsampsi
    • First observedrdsensitivity
    • First observedrdsummary
    • First observedrdwinselect
    • First observedrecommend
    • First observedrecommend_benchmark
    • First observedregress
    • First observedreplicate
    • First observedreset_test
    • First observedri_test
    • First observedrif_decomposition
    • First observedrifreg
    • First observedrkd
    • First observedrlasso
    • First observedrlasso_effect
    • First observedrlasso_effects
    • First observedrlasso_iv
    • First observedrlassologit
    • First observedrlassologit_effect
    • First observedrlassologit_effects
    • First observedrobust_synth
    • First observedrobustness_report
    • First observedromano_wolf
    • First observedrosenbaum_bounds
    • First observedrosenbaum_gamma
    • First observedsbw
    • First observedsc_estimate
    • First observedscdata
    • First observedscest
    • First observedscigan
    • First observedscpi
    • First observedsdid
    • First observedselect_pci_proxies
    • First observedselection_bounds
    • First observedsensemakr
    • First observedsensitivity
    • First observedsensitivity_dashboard
    • First observedsensitivity_from_result
    • First observedsensitivity_plot
    • First observedsensitivity_rr
    • First observedsequential_sdid
    • First observedsession
    • First observedshapley_inequality
    • First observedsnips
    • First observedsource_decompose
    • First observedspec_curve
    • First observedspillover
    • First observedspillover_did
    • First observedsqreg
    • First observedstabilized_weights
    • First observedstacked_did
    • First observedstaggered_cs
    • First observedstaggered_rollout
    • First observedstaggered_sa
    • First observedstaggered_synth
    • First observedstepwise
    • First observedstochastic_dominance
    • First observedstructural_break
    • First observedsubcluster_wild_bootstrap
    • First observedsubgroup_analysis
    • First observedsubgroup_decompose
    • First observedsun_abraham
    • First observedsuper_learner
    • First observedsureg
    • First observedsurvival_sensitivity
    • First observedsurvivor_average_causal_effect
    • First observedsurvreg
    • First observedsynth
    • First observedsynth_compare
    • First observedsynth_donor_sensitivity
    • First observedsynth_loo
    • First observedsynth_mde
    • First observedsynth_power
    • First observedsynth_power_plot
    • First observedsynth_recommend
    • First observedsynth_report
    • First observedsynth_report_to_file
    • First observedsynth_rmspe_filter
    • First observedsynth_sensitivity
    • First observedsynth_sensitivity_plot
    • First observedsynth_survival
    • First observedsynth_time_placebo
    • First observedsynth_to_excel
    • First observedsynth_to_latex
    • First observedsynth_to_markdown
    • First observedsynthdid_estimate
    • First observedsynthdid_placebo
    • First observedsynthdid_plot
    • First observedsynthdid_rmse_plot
    • First observedsynthdid_units_plot
    • First observedsynthplot
    • First observedtest
    • First observedtest_calibration
    • First observedtF_adjustment
    • First observedtF_critical_value
    • First observedthree_sls
    • First observedtmle
    • First observedtobit
    • First observedtreatment_rollout_plot
    • First observedtrimming
    • First observedtruncreg
    • First observedtwfe_decomposition
    • First observedtwoway_cluster
    • First observedunified_sensitivity
    • First observedvar
    • First observedvcnet
    • First observedverify
    • First observedverify_benchmark
    • First observedverify_recommendation
    • First observedvif
    • First observedweakrobust
    • First observedwild_cluster_boot
    • First observedwild_cluster_bootstrap
    • First observedwild_cluster_ci_inv
    • First observedwooldridge_did
    • First observedxlearner
    • First observedxtabond
    • First observedxtdpdsys
    • First observedxtlsdvc
    • First observedxtnbreg
    • First observedyatchew_linearity_test
    • First observedyu_elwert_decompose
    • First observedyun_nonlinear
    • First observedzero_first_stage
    • First observedzinb
    • First observedzip_model

TDQS

C2.6/5.0

Scored across 548 tools

Disambiguation1/5

Hundreds of tools are exact or near-exact duplicates: bjs is the same estimator as borusyak_jaravel_spiess and did_imputation; gardner_did duplicates did_2stage; frontdoor duplicates front_door; rosenbaum_bounds and rosenbaum_gamma share identical descriptions; postestimation_contract and postestimation_report are identical; and there are dozens of R-style or article-facing aliases (synthdid_estimate, sc_estimate, did_estimate, xlearner, psm). An agent cannot reliably distinguish the intended tool among so many overlapping aliases and variants.

Naming Consistency2/5

Names are mostly snake_case, but the convention is inconsistent: some are concise verbs (did, regress, test, contrast), some are bare nouns (bridge, panel, rate), some are R-package aliases (synthdid_estimate, did_estimate), and some use different spellings of the same concept (frontdoor vs front_door, psm vs psmatch2 vs match). Abbreviated and opaque names like discos, megamma, sqreg, and rlassologit_effects break any predictable verb_noun pattern.

Tool Count1/5

548 tools is an extreme mismatch for any server purpose, far beyond even the 50+ upper bound. The surface is a sprawling econometrics library rather than a curated decision-agent toolset, and an agent would face a prohibitive selection problem before doing any actual analysis.

Completeness5/5

For the causal-inference domain, coverage is effectively exhaustive: DiD (2x2, staggered, continuous, DDD, event studies), RD (sharp/fuzzy/multi-cutoff/bunching), IV (k-class, weak-instrument, shift-share, MR), synthetic control variants, matching and weighting, mediation, decompositions, sensitivity analysis, survival, time series, CATE/meta-learners, causal discovery, and offline policy learning are all represented. There are no obvious methodological gaps; the problem is surplus, not scarcity.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Enables AI clients to analyze software test results and defect records, producing explainable GO, CONDITIONAL_GO, or NO_GO release-readiness recommendations with deterministic risk scoring, failed-test retrieval, defect hotspot ranking, and regression test planning.
    4
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables asking product analytics questions in English and receiving answers as real SQL along with the resulting numbers, through read-only MCP tools for funnels, retention, trends, paths, and event counts.
    98 npm
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables statistical analysis through three toolsβ€”survival analysis, paired significance testing, and distribution drift detectionβ€”plus a harness to evaluate quality, latency, and cost.
    -