Skip to main content
Glama
kaneyxx

Weekly Report Checker

by kaneyxx

check_missing_reports

Identify team members who have not submitted their weekly reports by checking submission status in Google Sheets.

Instructions

Check who hasn't submitted their weekly reports yet

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The core handler function for the 'check_missing_reports' tool. Decorated with @mcp.tool() for automatic registration in the FastMCP server. It calls the helper get_report_data() to fetch submission status from Google Sheets, computes missing reports based on NAME_LIST, and returns a formatted string listing missing submitters or '無' if all submitted.
    @mcp.tool()
    def check_missing_reports() -> str:
        """Check who hasn't submitted their weekly reports yet"""
        report_data = get_report_data()
        
        # Get names of people who haven't submitted
        missing_names = [name for name in NAME_LIST if not report_data[name]["submitted"]]
        
        # Format the response
        if missing_names:
            return f"本週未寫週報名單:{', '.join(missing_names)}"
        else:
            return "本週未寫週報名單:無"
  • Key helper function that retrieves and processes weekly report submission data from a Google Sheet named '週報'. Initializes status for all members in NAME_LIST, parses recent rows for timestamps and names, determines if submissions are recent (within ~6.5 days), and populates detailed status dictionary used by the tool handler.
    def get_report_data() -> Dict[str, Dict]:
        """Helper function to get report data from Google Sheets"""
        # Connect to Google Sheets
        sa = gspread.service_account(filename=SERVICE_ACCOUNT_FILE)
        sh = sa.open("週報")
        wks = sh.worksheet("週報")
        
        # Get current time
        current_time = datetime.datetime.now()
        
        # Dictionary to store report data for each person
        report_data = {name: {
            "submitted": False,
            "timestamp": None,
            "content": None,
            "days_ago": None
        } for name in NAME_LIST}
        
        # Check each row in the sheet
        for i in range(2, 15):  # Assuming data starts from row 2 and goes to row 14
            try:
                row = wks.get(f"A{i}:F{i}")
                if not row or not row[0][0]:  # Skip empty rows
                    continue
                    
                # Parse the timestamp from the sheet
                item_time = datetime.datetime.strptime(row[0][0], '%m/%d/%Y %H:%M:%S')
                name = row[0][2]  # Assuming name is in column C
                
                # Skip if the name is not in our list
                if name not in report_data:
                    continue
                    
                # Calculate days ago
                delta_sec = (current_time - item_time).total_seconds()
                days_ago = delta_sec / 86400  # Convert seconds to days
                
                # Check if the report was submitted within the last 6 days (518400 seconds + 12 hours buffer)
                if delta_sec < (518400 + 43200):
                    report_data[name] = {
                        "submitted": True,
                        "timestamp": item_time.strftime('%Y-%m-%d %H:%M:%S'),
                        "content": row[0][3] if len(row[0]) > 3 else "No content",  # Assuming content is in column D
                        "days_ago": round(days_ago, 1)
                    }
            except Exception:
                continue
        
        return report_data
  • Constant list of team member names expected to submit weekly reports, used by get_report_data() and the handler to check for missing submissions.
    NAME_LIST = ["陳冠宇", "林柏志", "潘班", "董屹煊", "王宇軒", "許圃瑄", "陳冠言", "黃祈緯", "黃渝凌"]
  • The @mcp.tool() decorator registers the check_missing_reports function as an MCP tool in the FastMCP server instance.
    @mcp.tool()

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/kaneyxx/weekly-report-mcp'

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