set_task_recurrence
Set a recurring schedule for a task. Use natural language patterns like 'every week' or 'every Monday' to update or clear recurrence.
Instructions
Set task recurrence pattern.
Args: repeat: Recurrence pattern (e.g., "every week", "every 2 days", "every monday", "after 1 week"). Empty string to clear. task_name: Task name to search for task_id: Specific task ID taskseries_id: Task series ID list_id: List ID
Returns: Updated task details
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| repeat | Yes | ||
| task_name | No | ||
| task_id | No | ||
| taskseries_id | No | ||
| list_id | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/rtm_mcp/tools/tasks.py:675-720 (handler)Handler function that sets a task's recurrence pattern by calling rtm.tasks.setRecurrence API with a repeat string (e.g., 'every week', 'every monday') or empty string to clear. Resolves task IDs, makes the API call, and returns the updated task details.
@mcp.tool() async def set_task_recurrence( ctx: Context, repeat: str, task_name: str | None = None, task_id: str | None = None, taskseries_id: str | None = None, list_id: str | None = None, ) -> dict[str, Any]: """Set task recurrence pattern. Args: repeat: Recurrence pattern (e.g., "every week", "every 2 days", "every monday", "after 1 week"). Empty string to clear. task_name: Task name to search for task_id: Specific task ID taskseries_id: Task series ID list_id: List ID Returns: Updated task details """ client: RTMClient = await get_client() ids = await _resolve_task_ids(client, task_name, task_id, taskseries_id, list_id) if "error" in ids: return build_response(data=ids) result = await client.call( "rtm.tasks.setRecurrence", require_timeline=True, repeat=repeat, **ids, ) tasks = parse_tasks_response(result) task_data = tasks[0] if tasks else {} timezone = await _get_user_timezone(client) message = f"Recurrence set: {repeat}" if repeat else "Recurrence cleared" return build_response( data={ "task": format_task(task_data, timezone=timezone), "message": message, }, transaction_id=get_transaction_id(result), ) - src/rtm_mcp/tools/tasks.py:17-18 (registration)Registration function that wraps all task tool definitions including set_task_recurrence via the @mcp.tool() decorator on line 675.
def register_task_tools(mcp: Any, get_client: Any) -> None: """Register all task-related tools.""" - src/rtm_mcp/server.py:102-106 (registration)Server entry point that registers all tool modules including register_task_tools which contains set_task_recurrence.
# Register all tools register_task_tools(mcp, get_client) register_list_tools(mcp, get_client) register_note_tools(mcp, get_client) register_utility_tools(mcp, get_client) - src/rtm_mcp/tools/tasks.py:895-920 (helper)Helper function to resolve task identifiers by name or direct IDs, used by set_task_recurrence to locate the target task.
async def _resolve_task_ids( client: RTMClient, task_name: str | None, task_id: str | None, taskseries_id: str | None, list_id: str | None, ) -> dict[str, Any]: """Resolve task identifiers, searching by name if needed.""" if task_name and not task_id: task = await _find_task(client, task_name) if not task: return {"error": f"Task not found: {task_name}"} return { "task_id": task["id"], "taskseries_id": task["taskseries_id"], "list_id": task["list_id"], } if not all([task_id, taskseries_id, list_id]): return {"error": "Must provide task_name or all three IDs"} return { "task_id": task_id, "taskseries_id": taskseries_id, "list_id": list_id, }