remediation_milestones
Generate a remediation milestone plan for TLPT findings, assigning closure timelines (90/180/365 days) by severity level.
Instructions
Generate a 90/180/365-day remediation milestone plan based on TLPT findings.
Args: findings_count: Total number of findings from the red-team report. severity_distribution: Dict with keys 'critical', 'high', 'medium', 'low' and counts.
Returns: Milestone plan with required closure timelines per severity.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| findings_count | Yes | ||
| severity_distribution | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- meok_dora_tlpt_planner/server.py:258-298 (handler)The handler/implementation of the 'remediation_milestones' tool. It takes findings_count and severity_distribution, validates the total, and returns a 30/90/180/365-day remediation milestone plan per DORA Art. 26(7).
@mcp.tool() def remediation_milestones(findings_count: int, severity_distribution: dict[str, int]) -> dict[str, Any]: """Generate a 90/180/365-day remediation milestone plan based on TLPT findings. Args: findings_count: Total number of findings from the red-team report. severity_distribution: Dict with keys 'critical', 'high', 'medium', 'low' and counts. Returns: Milestone plan with required closure timelines per severity. """ sev = {**{"critical": 0, "high": 0, "medium": 0, "low": 0}, **severity_distribution} total = sev["critical"] + sev["high"] + sev["medium"] + sev["low"] if total != findings_count: return { "error": f"severity_distribution sum ({total}) != findings_count ({findings_count})", } return { "milestones": { "30_days": { "scope": f"All {sev['critical']} CRITICAL findings closed or compensating controls deployed", "evidence_required": "Per-finding remediation ticket with code-change PR or config-change record", }, "90_days": { "scope": f"All {sev['high']} HIGH findings closed; {sev['medium'] // 2} MEDIUM remediation in flight", "evidence_required": "Purple-team replay test confirms CRITICAL+HIGH closures", }, "180_days": { "scope": f"All {sev['medium']} MEDIUM findings closed; {sev['low'] // 2} LOW remediation in flight", "evidence_required": "Updated control framework reflecting structural fixes", }, "365_days": { "scope": f"All {sev['low']} LOW findings closed or formally accepted with risk-owner sign-off", "evidence_required": "Final remediation pack signed by CRO + CISO; ready for next-cycle TLPT", }, }, "total_findings": findings_count, "severity_distribution": sev, "regulatory_basis": "DORA Art. 26(7) — remediation closure required before next TLPT cycle", } - meok_dora_tlpt_planner/server.py:258-258 (registration)The tool registration via @mcp.tool() decorator on FastMCP instance 'mcp' (defined at line 22). This registers 'remediation_milestones' as an MCP tool.
@mcp.tool() - Implicit schema via type hints: 'findings_count: int' and 'severity_distribution: dict[str, int]' as input parameters; returns 'dict[str, Any]'.
def remediation_milestones(findings_count: int, severity_distribution: dict[str, int]) -> dict[str, Any]: