Skip to main content
Glama
add_task.py•3.52 kB
#!/usr/bin/env python3 """ Quick script to add individual tasks to TickTick Usage: python add_task.py "Task title" --content "Task description" --priority 5 python add_task.py "Buy groceries" --project Health python add_task.py "Call mom" --due "2025-11-20" """ import os import argparse from datetime import datetime, timedelta from ticktick_rest_api import TickTickClient from dotenv import load_dotenv load_dotenv() def main(): parser = argparse.ArgumentParser(description="Add a task to TickTick") parser.add_argument("title", help="Task title") parser.add_argument("--content", help="Task description/notes", default="") parser.add_argument("--project", help="Project name (Marriage, Health, Milestones)", default=None) parser.add_argument("--priority", type=int, choices=[0, 1, 3, 5], help="Priority: 0=None, 1=Low, 3=Medium, 5=High", default=0) parser.add_argument("--due", help="Due date (YYYY-MM-DD or 'today', 'tomorrow')", default=None) args = parser.parse_args() # Initialize client client_id = os.getenv('TICKTICK_CLIENT_ID') client_secret = os.getenv('TICKTICK_CLIENT_SECRET') redirect_uri = os.getenv('TICKTICK_REDIRECT_URI', 'http://127.0.0.1:8080') if not client_id or not client_secret: print("āŒ Error: TICKTICK_CLIENT_ID and TICKTICK_CLIENT_SECRET must be set in .env") return client = TickTickClient(client_id, client_secret, redirect_uri) if not client.access_token: print("No existing token found. Starting OAuth flow...\n") client.authorize() # Build task data task_data = { 'title': args.title, } if args.content: task_data['content'] = args.content if args.priority: task_data['priority'] = args.priority # Handle project if args.project: projects = client.get_projects() project = next((p for p in projects if p['name'].lower() == args.project.lower()), None) if project: task_data['projectId'] = project['id'] print(f"šŸ“ Adding to project: {project['name']}") else: print(f"āš ļø Project '{args.project}' not found. Task will go to Inbox.") print(f"Available projects: {', '.join([p['name'] for p in projects])}") # Handle due date if args.due: if args.due.lower() == 'today': due = datetime.now() elif args.due.lower() == 'tomorrow': due = datetime.now() + timedelta(days=1) else: try: due = datetime.strptime(args.due, '%Y-%m-%d') except ValueError: print(f"āŒ Invalid date format: {args.due}. Use YYYY-MM-DD, 'today', or 'tomorrow'") return task_data['dueDate'] = due.strftime("%Y-%m-%dT23:59:59+0000") task_data['isAllDay'] = True # Create task try: task = client.create_task(**task_data) print(f"\nāœ… Task created successfully!") print(f" Title: {task['title']}") print(f" ID: {task['id']}") if args.priority: priority_names = {0: 'None', 1: 'Low', 3: 'Medium', 5: 'High'} print(f" Priority: {priority_names[args.priority]}") if args.due: print(f" Due: {args.due}") print(f"\nšŸ‘‰ Check your TickTick app!") except Exception as e: print(f"āŒ Error creating task: {e}") import traceback traceback.print_exc() if __name__ == "__main__": main()

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/kbadinger/ticktickmcp'

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