Skip to main content
Glama

Toggl MCP Server

by ikido
utils.py1.84 kB
"""Utility functions for Toggl MCP Server.""" from datetime import datetime, timedelta from typing import Optional, Dict, Tuple import logging # Configure logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def validate_date_range(start_date: str, end_date: str) -> Optional[Dict[str, str]]: """ Validate date range. Returns: None if valid, error dict otherwise """ try: start = datetime.fromisoformat(start_date).date() end = datetime.fromisoformat(end_date).date() except ValueError: return {"code": "INVALID_DATE_FORMAT", "message": "ISO 8601 format required (YYYY-MM-DD)"} if end < start: return {"code": "INVALID_DATE_RANGE", "message": "end_date must be >= start_date"} if (end - start).days > 7: return {"code": "DATE_RANGE_EXCEEDS_LIMIT", "message": "Max 7 days per request"} return None def date_range(start_date: str, end_date: str) -> list: """ Generate list of dates between start_date and end_date (inclusive). Args: start_date: ISO 8601 format (YYYY-MM-DD) end_date: ISO 8601 format (YYYY-MM-DD) Returns: List of date strings in ISO 8601 format """ start = datetime.fromisoformat(start_date).date() end = datetime.fromisoformat(end_date).date() dates = [] current = start while current <= end: dates.append(current.isoformat()) current += timedelta(days=1) return dates def parse_iso_datetime(iso_str: str) -> datetime: """Parse ISO 8601 datetime string to datetime object.""" return datetime.fromisoformat(iso_str) def log_info(message: str) -> None: """Log info message.""" logger.info(message) def log_error(message: str) -> None: """Log error message.""" logger.error(message)

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/ikido/toggl-mcp-custom'

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