find-contact
Resolve a 3CX contact or extension by email, extension, or name
Log work hours on an Atera ticket
$ npx -y skills add wyre-technology/msp-claude-plugins --agent claude-codeHow it fires
How this command gets triggered: by you, by Claude, or both.
/log-timeContext preview
What this command does when you run it.
Log work hours on an Atera ticket
description: Log work hours on an Atera ticket argument-hint: "<ticket_id> <hours> [notes] [date] [billable] [hourly_rate]" arguments: [ticket_id, hours, notes, date, billable, hourly_rate]
Log work hours on an Atera ticket for billing and tracking purposes.
1. **Validate ticket exists**
curl -s -X GET "https://app.atera.com/api/v3/tickets/{ticket_id}" \
-H "X-API-KEY: $ATERA_API_KEY" \
-H "Accept: application/json"2. **Validate time entry parameters**
3. **Create time entry**
curl -s -X POST "https://app.atera.com/api/v3/tickets/{ticket_id}/workhours" \
-H "X-API-KEY: $ATERA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"Hours": <hours>,
"Notes": "<notes>",
"Date": "<date>",
"Billable": <billable>,
"HourlyRate": <hourly_rate>
}'4. **Return confirmation**
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | ticket_id | integer | Yes | - | The ticket ID to log time against | | hours | decimal | Yes | - | Hours worked (e.g., 0.5, 1.25, 2) | | notes | string | No | - | Description of work performed | | date | date | No | today | Date of work (YYYY-MM-DD) | | billable | boolean | No | true | Mark time as billable | | hourly_rate | decimal | No | - | Override default hourly rate |
/log-time 12345 1.5
/log-time 12345 1.5 --notes "Troubleshot network connectivity issue"
/log-time 12345 0.5 --billable false --notes "Internal documentation"
/log-time 12345 2 --date "2026-02-03"
/log-time 12345 2 --date "2026-02-03" --hourly_rate 150
/log-time 12345 1.5 --notes "Resolved printer spooler issue, updated drivers" --billable true --date "2026-02-04" --hourly_rate 125
Time Entry Logged Successfully Entry ID: 98765 Ticket: #12345 - Email not working Customer: Acme Corporation Time Logged: - Hours: 1.5 - Date: 2026-02-04 - Billable: Yes - Notes: Troubleshot network connectivity issue Ticket Total: 3.5 hours (2.5 billable)
Time Entry Logged Successfully Entry ID: 98766 Ticket: #12345 - Server maintenance Customer: Acme Corporation Time Logged: - Hours: 2.0 - Date: 2026-02-03 - Billable: Yes - Rate: $150.00/hr - Amount: $300.00 - Notes: After-hours emergency maintenance Ticket Total: 5.0 hours Billable Amount: $625.00
Time Entry Logged Successfully Entry ID: 98767 Ticket: #12345 - Documentation update Customer: Acme Corporation Time Logged: - Hours: 0.5 - Date: 2026-02-04 - Billable: No - Notes: Internal documentation Ticket Total: 1.5 hours (0.5 billable)
Ticket not found: 12345 Please verify the ticket ID and try again. Use /create-ticket to create a new ticket.
Warning: Ticket #12345 is closed Ticket: Email not working Status: Closed Closed On: 2026-02-03 Log time anyway? [y/N]
Invalid hours: "two" Hours must be a positive number: - 0.25 (15 minutes) - 0.5 (30 minutes) - 1.0 (1 hour) - 1.5 (1 hour 30 minutes) - 2.75 (2 hours 45 minutes)
Invalid hours: -1.5 Hours must be a positive number.
Invalid hours: 24 Maximum time entry is 8 hours. Split into multiple entries for longer periods.
Invalid date: "yesterday" Please use YYYY-MM-DD format: - 2026-02-04 - 2026-02-03
Warning: Date is in the future: 2026-02-10 Time entries are typically for work already completed. Proceed anyway? [y/N]
Rate limit exceeded (700 req/min) Waiting 30 seconds before retry...
Permission denied: Cannot log time on ticket 12345 Contact your administrator to verify your permissions.
GET /api/v3/tickets/{ticketId}
X-API-KEY: {api_key}POST /api/v3/tickets/{ticketId}/workhours
X-API-KEY: {api_key}
Content-Type: application/json
{
"Hours": 1.5,
"Notes": "Troubleshot network connectivity issue",
"Date": "2026-02-04",
"Billable": true,
"HourlyRate": 125.00
}GET /api/v3/tickets/{ticketId}/workhours
X-API-KEY: {api_key}{
"WorkHoursID": 98765,
"TicketID": 12345,
"TechnicianID": 5678,
"Hours": 1.5,
"Notes": "Troubleshot network connectivity issue",
"Date": "2026-02-04T00:00:00Z",
"Billable": true,
"HourlyRate": 125.00,
"TotalAmount": 187.50,
"CreatedOn": "2026-02-04T14:30:00Z"
}| Minutes | Hours | Description | |---------|-------|-------------| | 15 | 0.25 | Quick check or update | | 30 | 0.5 | Brief troubleshooting | | 45 | 0.75 | Standard support call | | 60 | 1.0 | Extended troubleshooting | | 90 | 1.5 | Complex issue resolution | | 120 | 2.0 | Major repair or installation |
One command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: mcp.wyre.ai
Repo: wyre-technology/msp-claude-plugins
Resolve a 3CX contact or extension by email, extension, or name
Search for specific threat patterns in Abnormal Security by sender, recipient, attack type, or keywords
Triage recent email threats detected by Abnormal Security by severity and attack type