Skip to main content
Glama

forensic_windows_analysis

Run forensic windows analysis (AACE RP 29R-03 §3.3, MIP 3.3 Observational / Dynamic / Contemporaneous As-Is) across multiple Primavera P6 XER snapshots and return the full analysis dict.

        This is the headline forensic tool — it computes per-window
        completion shifts, per-window slip registers (per-activity slip
        with a critical flag (total float of zero or less, or the driving
        path in a schedule with negative float)), per-window duration
        growth on critical-path activities, per-window per-party attribution
        (Owner / Contractor / Concurrent / Force Majeure / Unattributed),
        and cumulative project drift from baseline. The attribution math
        satisfies the CPP conservation check, per the AACE 29R-03
        §3.3.E.13 requirement that the summed per-period net impacts
        equal the difference between the first schedule update and the
        last schedule update used in the evaluation (per-party day
        buckets sum to project drift within ±1 day, no cascade-double-
        counting).

        Use this tool for the full multi-window forensic claim. If you
        already have a windows result and only want the per-window ×
        per-party grid view, call ``concurrent_delay_matrix`` instead.

        Args:
            schedules: list of dicts in chronological order. Minimum 2
                entries (baseline + at least one update). Each dict
                must contain ``label`` (str) and EXACTLY ONE of:
                  - ``xer_path``    — server-side filesystem path, OR
                  - ``xer_content`` — full XER text content.
                Use ``xer_content`` when calling a hosted MCP server
                from a remote client whose XER lives locally.
            project_name: optional override; auto-picked from XER if "".
            baseline_idx: which entry in ``schedules`` is the contract
                baseline (default 0 = first one).
            entitlement_milestone: optional task_code (e.g.
                "Ready for Takeover") — recorded on the result, not used
                for math.
            company: optional, the firm the dashboard and the DOCX report carry (title
                block, print cover). Blank unless supplied, and blank
                carries no firm: a hosted run is the caller's document.
            output_dir: optional dir for HTML dashboard / DOCX report.
                If "", a tempdir is used and dropped after — the
                dashboard / report paths in the response will point to
                the temp location (caller responsible for moving them).

        Returns:
            {
              "analysis": full dict from run_windows() with keys:
                "windows", "cumulative", "baseline_label", "data_dates",
                "attribution_summary", "mcpm_attribution", ...,
              "dashboard": path to HTML dashboard (server-side),
              "report":    path to DOCX executive report (server-side),
              "baseline_stability": {"worst_severity", "has_block", ...},
              "data_date_corrections": the record of each update whose
                  data date was moved to its latest actual, and of a
                  baseline with actual dates after its data date
                  ([] on clean files); each is also a data-quality
                  warning
              "analysis"."criticality_basis": the schedules read by
                  their driving path because they have negative float,
                  and those beside them ([] when no schedule has
                  negative float); the box they write is one
                  data-quality warning
            }

            On failure: {"error": "..."} with no schedules processed.
        

Input Schema

NameRequiredDescriptionDefault
companyNo
schedulesYes
output_dirNo
baseline_idxNo
project_nameNo
entitlement_milestoneNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / company
      Added value: +{
      +  "default": "",
      +  "title": "Company",
      +  "type": "string"
      +}
  2. First observed

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations supplied, the description carries the full burden and does so well: it discloses the computed outputs, the CPP conservation check and tolerance, failure behavior, tempdir handling for output_dir when blank, and data-quality records such as baseline stability and data date corrections.

Agents need to know what a tool does to the world before 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 usage, then follows a clear Args/Returns structure. It is unusually long but mostly earns its length through substantive detail; the conservation-check parenthetical is dense but relevant.

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?

This is a complex multi-parameter forensic computation with no output schema, so the description's explanation of return keys, error shape, and file-output behavior is essential and sufficiently complete for an agent to invoke it confidently.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate, and it documents every parameter including nested schedules requirements: chronological order, label, and exactly one of xer_path or xer_content. It also explains the optional fields baseline_idx, entitlement_milestone, company, and output_dir.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 gives a specific verb and resource, naming the AACE forensic windows method and its inputs. It explicitly distinguishes itself from the sibling tool concurrent_delay_matrix, so an agent can select it without opening other 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?

It states when to use this tool for the full multi-window forensic claim and names the exact alternative for the narrower per-window × per-party grid view. It also imposes the minimum-two-schedules requirement, leaving little inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.