---
name: hosted-schedule-operations
description: Safely create, inspect, update, pause, resume, and delete hosted rrule.net schedules through authenticated MCP tools. Use when a user explicitly wants persistent webhook execution or execution-history inspection.
metadata:
  author: rrule.net
  version: "1.0"
---

# Hosted schedule operations with rrule.net

Use this skill only when the user explicitly wants a schedule to persist or execute. For interpretation and preview alone, use the public `context-aware-scheduling` skill instead.

Hosted tools require an OAuth access token issued for `https://mcp.rrule.net`:

- `schedules:read` permits `list_schedules`, `get_schedule`, and `list_schedule_executions`;
- `schedules:write` permits creation, updates, pause, resume, and deletion.

Never request, display, log, or place a client secret in tool arguments. Credentials belong in the MCP client's secure configuration.

## Account bootstrap

If the user does not yet have credentials:

1. Guide them to https://rrule.net/login to create an account or sign in.
2. Guide them to https://rrule.net/dashboard/oauth to create an OAuth client.
3. Tell them to copy the one-time client secret directly into their MCP client's secure credential configuration, never into the conversation.
4. Request a token with `resource=https://mcp.rrule.net` and only the scopes needed for the requested operation.

Do not claim that registration or credential setup is complete until the user confirms it. rrule.net does not expose autonomous account registration or dynamic client registration through MCP.

## Create safely

Before calling `create_schedule`:

1. Call `validate_schedule` with the intended source and timezone.
2. Resolve all reported ambiguities with the user.
3. Call `simulate_schedule` with enough occurrences to cover relevant weekends, month boundaries, DST changes, exclusions, targets, or event windows.
4. Confirm the webhook URL and whether custom headers are required.
5. Generate a stable idempotency key of 16 to 128 characters for this exact creation request. Reuse it only when retrying the same request.

Preserve canonical recurrence, event-schedule, and target structure returned by validation. Do not flatten several targets into one timezone or silently replace contextual timing with a cron or RRule approximation.

After creation, report the schedule id, status, timezone, targets, next occurrence, and webhook destination. Do not expose secret webhook header values in the summary.

## Inspect and update

Use `list_schedules` to discover account state and `get_schedule` before changing a schedule. A short schedule-id prefix is acceptable only when it resolves unambiguously.

Timing sources are immutable after creation. `update_schedule` may change only the display name or webhook configuration. `update_schedule_target` may change only a target label or metadata. If timing must change, create a replacement schedule, verify it, then ask before removing the old one.

Use `list_schedule_executions` to diagnose delivery state. Distinguish schedule computation from downstream webhook success, and preserve execution ids and timestamps when reporting failures.

## Pause, resume, and delete

- Pause when execution should stop temporarily but the definition must remain available.
- Before resuming, inspect the schedule and confirm that future occurrences remain.
- Treat deletion as irreversible. Ask for explicit user confirmation immediately before calling `delete_schedule`, then pass `confirm: true`.
- Never infer deletion permission from a request to pause, replace, clean up, or troubleshoot.

After any mutation, read the schedule again when it still exists and report the resulting state. After deletion, report only the confirmed id returned by the tool.

## Useful references

- Agent authentication guide: https://rrule.net/auth.md
- MCP documentation: https://rrule.net/docs/mcp
- API documentation: https://rrule.net/docs/api
- Testing guide: https://rrule.net/guides/testing-recurrences-and-webhooks
- Webhook idempotency: https://rrule.net/guides/webhook-idempotency
