Skip to main content
Glama

get_peer_review_completion_analytics

Analyze peer review completion rates for Canvas assignments with student breakdowns and summary statistics to track participation and identify gaps.

Instructions

Get detailed analytics on peer review completion rates with student-by-student breakdown and summary statistics.

Args: course_identifier: Canvas course code (e.g., badm_554_120251_246794) or ID assignment_id: Canvas assignment ID include_student_details: Include per-student breakdown group_by_status: Group students by completion status

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
course_identifierYes
assignment_idYes
include_student_detailsNo
group_by_statusNo

Implementation Reference

  • The MCP tool handler function that executes the 'get_peer_review_completion_analytics' logic. It resolves the course ID, instantiates PeerReviewAnalyzer, fetches completion analytics, handles errors, and returns formatted JSON.
    @mcp.tool() @validate_params async def get_peer_review_completion_analytics( course_identifier: str | int, assignment_id: str | int, include_student_details: bool = True, group_by_status: bool = True ) -> str: """Get detailed analytics on peer review completion rates with student-by-student breakdown and summary statistics. Args: course_identifier: Canvas course code (e.g., badm_554_120251_246794) or ID assignment_id: Canvas assignment ID include_student_details: Include per-student breakdown group_by_status: Group students by completion status """ try: course_id = await get_course_id(course_identifier) analyzer = PeerReviewAnalyzer() result = await analyzer.get_completion_analytics( course_id=course_id, assignment_id=int(assignment_id), include_student_details=include_student_details, group_by_status=group_by_status ) if "error" in result: return f"Error getting peer review completion analytics: {result['error']}" return json.dumps(result, indent=2) except Exception as e: return f"Error in get_peer_review_completion_analytics: {str(e)}"
  • The call to register_peer_review_tools(mcp) within register_all_tools, which registers all peer review tools including 'get_peer_review_completion_analytics'.
    register_peer_review_tools(mcp)
  • The register_peer_review_tools function that defines and registers the peer review MCP tools using @mcp.tool() decorators, including the get_peer_review_completion_analytics handler.
    def register_peer_review_tools(mcp: FastMCP): """Register all peer review analytics MCP tools.""" @mcp.tool() @validate_params async def get_peer_review_assignments( course_identifier: str | int, assignment_id: str | int, include_names: bool = True, include_submission_details: bool = False ) -> str: """Get comprehensive peer review assignment mapping showing who is assigned to review whom with accurate completion status. Args: course_identifier: Canvas course code (e.g., badm_554_120251_246794) or ID assignment_id: Canvas assignment ID include_names: Include student names (requires additional API call) include_submission_details: Include submission metadata """ try: course_id = await get_course_id(course_identifier) analyzer = PeerReviewAnalyzer() result = await analyzer.get_assignments( course_id=course_id, assignment_id=int(assignment_id), include_names=include_names, include_submission_details=include_submission_details ) if "error" in result: return f"Error getting peer review assignments: {result['error']}" return json.dumps(result, indent=2) except Exception as e: return f"Error in get_peer_review_assignments: {str(e)}" @mcp.tool() @validate_params async def get_peer_review_completion_analytics( course_identifier: str | int, assignment_id: str | int, include_student_details: bool = True, group_by_status: bool = True ) -> str: """Get detailed analytics on peer review completion rates with student-by-student breakdown and summary statistics. Args: course_identifier: Canvas course code (e.g., badm_554_120251_246794) or ID assignment_id: Canvas assignment ID include_student_details: Include per-student breakdown group_by_status: Group students by completion status """ try: course_id = await get_course_id(course_identifier) analyzer = PeerReviewAnalyzer() result = await analyzer.get_completion_analytics( course_id=course_id, assignment_id=int(assignment_id), include_student_details=include_student_details, group_by_status=group_by_status ) if "error" in result: return f"Error getting peer review completion analytics: {result['error']}" return json.dumps(result, indent=2) except Exception as e: return f"Error in get_peer_review_completion_analytics: {str(e)}" @mcp.tool() @validate_params async def generate_peer_review_report( course_identifier: str | int, assignment_id: str | int, report_format: str = "markdown", include_executive_summary: bool = True, include_student_details: bool = True, include_action_items: bool = True, include_timeline_analysis: bool = True, save_to_file: bool = False, filename: str = None ) -> str: """Generate comprehensive peer review completion report with executive summary, detailed analytics, and actionable follow-up recommendations. Args: course_identifier: Canvas course code (e.g., badm_554_120251_246794) or ID assignment_id: Canvas assignment ID report_format: Report format (markdown, csv, json) include_executive_summary: Include executive summary include_student_details: Include student details include_action_items: Include action items include_timeline_analysis: Include timeline analysis save_to_file: Save report to local file filename: Custom filename for saved report """ try: course_id = await get_course_id(course_identifier) analyzer = PeerReviewAnalyzer() result = await analyzer.generate_report( course_id=course_id, assignment_id=int(assignment_id), report_format=report_format, include_executive_summary=include_executive_summary, include_student_details=include_student_details, include_action_items=include_action_items, include_timeline_analysis=include_timeline_analysis ) if "error" in result: return f"Error generating peer review report: {result['error']}" # Handle file saving if requested if save_to_file and "report" in result: import os from datetime import datetime if not filename: timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"peer_review_report_{assignment_id}_{timestamp}.{report_format}" try: # Save to current working directory with open(filename, 'w', encoding='utf-8') as f: f.write(result["report"]) result["saved_to"] = os.path.abspath(filename) except Exception as save_error: result["save_error"] = f"Failed to save file: {str(save_error)}" if report_format in ["csv", "markdown"]: return result.get("report", json.dumps(result, indent=2)) else: return json.dumps(result, indent=2) except Exception as e: return f"Error in generate_peer_review_report: {str(e)}" @mcp.tool() @validate_params async def get_peer_review_followup_list( course_identifier: str | int, assignment_id: str | int, priority_filter: str = "all", include_contact_info: bool = False, days_threshold: int = 3 ) -> str: """Get prioritized list of students requiring instructor follow-up based on peer review completion status. Args: course_identifier: Canvas course code (e.g., badm_554_120251_246794) or ID assignment_id: Canvas assignment ID priority_filter: Priority filter (urgent, medium, low, all) include_contact_info: Include email addresses if available days_threshold: Days since assignment for urgency calculation """ try: # Validate priority filter valid_priorities = ["urgent", "medium", "low", "all"] if priority_filter not in valid_priorities: return f"Error: priority_filter must be one of {valid_priorities}, got '{priority_filter}'" course_id = await get_course_id(course_identifier) analyzer = PeerReviewAnalyzer() result = await analyzer.get_followup_list( course_id=course_id, assignment_id=int(assignment_id), priority_filter=priority_filter, include_contact_info=include_contact_info, days_threshold=days_threshold ) if "error" in result: return f"Error getting peer review followup list: {result['error']}" return json.dumps(result, indent=2) except Exception as e: return f"Error in get_peer_review_followup_list: {str(e)}"
Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vishalsachdev/canvas-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server