format_accessibility_summary
Converts accessibility violation data into a readable summary for Canvas LMS users to identify and address content accessibility issues.
Instructions
Format parsed violations into a human-readable summary.
Args:
violations_json: JSON string from parse_ufixit_violations
Returns:
Formatted text summary of accessibility violations
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| violations_json | Yes |
Implementation Reference
- The handler function for the 'format_accessibility_summary' tool. It is decorated with @mcp.tool() for registration and @validate_params. Parses JSON input containing accessibility violations and generates a formatted Markdown summary including metadata, overview statistics, breakdowns by severity and WCAG criteria, and detailed listings of up to 20 violations.@mcp.tool() @validate_params async def format_accessibility_summary(violations_json: str) -> str: """Format parsed violations into a human-readable summary. Args: violations_json: JSON string from parse_ufixit_violations Returns: Formatted text summary of accessibility violations """ try: data = json.loads(violations_json) except json.JSONDecodeError: return "Error: Invalid JSON input" if "error" in data: return f"Error: {data['error']}" summary = data.get("summary", {}) violations = data.get("violations", []) metadata = data.get("report_metadata", {}) # Build formatted output lines = ["# Accessibility Report Summary", ""] # Metadata if metadata.get("page_title"): lines.append(f"**Report**: {metadata['page_title']}") if metadata.get("updated_at"): lines.append(f"**Last Updated**: {metadata['updated_at']}") lines.append("") # Summary statistics lines.append("## Overview") lines.append(f"- **Total Violations**: {summary.get('total_violations', 0)}") lines.append("") if summary.get("by_severity"): lines.append("### By Severity") for severity, count in summary["by_severity"].items(): lines.append(f"- {severity.title()}: {count}") lines.append("") if summary.get("by_wcag_criterion"): lines.append("### By WCAG Criterion") for criterion, count in sorted(summary["by_wcag_criterion"].items()): lines.append(f"- WCAG {criterion}: {count}") lines.append("") # Detailed violations if violations: lines.append("## Detailed Violations") lines.append("") for i, violation in enumerate(violations[:20], 1): # Limit to first 20 lines.append(f"### {i}. {violation.get('type', 'Unknown Issue')}") if violation.get("wcag_criterion"): lines.append(f"**WCAG**: {violation['wcag_criterion']}") if violation.get("severity"): lines.append(f"**Severity**: {violation['severity']}") if violation.get("description"): lines.append(f"**Description**: {violation['description']}") if violation.get("location"): lines.append(f"**Location**: {violation['location']}") if violation.get("remediation"): lines.append(f"**How to Fix**: {violation['remediation']}") lines.append("") if len(violations) > 20: lines.append(f"*...and {len(violations) - 20} more violations*") return "\n".join(lines)
- src/canvas_mcp/server.py:56-56 (registration)Call to register_accessibility_tools(mcp) in the register_all_tools function, which triggers the registration of all accessibility tools including format_accessibility_summary via decorators in accessibility.py.register_accessibility_tools(mcp)