/schedule-entry
Create a schedule entry/appointment in ConnectWise PSA
$ 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.
- Fires itselfClaude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/schedule-entry
Context preview
What this command does when you run it.
Create a schedule entry/appointment in ConnectWise PSA
Command definition
schedule-entry.mddescription: Create a schedule entry/appointment in ConnectWise PSA
argument-hint: "<name> <start_date> <end_date> [member] [ticket_id] [type] [location] [reminder_minutes] [status]"
arguments: [name, start_date, end_date, member, ticket_id, type, location, reminder_minutes, status]
Create ConnectWise PSA Schedule Entry
Create a schedule entry/appointment in ConnectWise, optionally linked to a ticket.
Prerequisites
- Valid ConnectWise PSA API credentials configured
- User must have schedule creation permissions
- Member must have schedule access
Steps
1. **Validate date/time inputs**
- Parse start_date and end_date
- Validate end_date is after start_date
- Check for schedule conflicts (if enabled)
2. **Resolve member (if provided)**
GET /system/members?conditions=identifier='{member}'- Default to current authenticated user if not specified
3. **Validate ticket (if ticket_id provided)**
GET /service/tickets/{ticket_id}- Confirm ticket exists and is accessible
4. **Resolve schedule type (if provided)**
GET /schedule/types?conditions=name='{type}'5. **Resolve schedule status (if provided)**
GET /schedule/statuses?conditions=name='{status}'6. **Create schedule entry**
POST /schedule/entries
Content-Type: application/json
{
"name": "<name>",
"dateStart": "<start_date>",
"dateEnd": "<end_date>",
"member": {"identifier": "<member>"},
"objectId": <ticket_id>,
"type": {"id": <type_id>},
"where": {"id": <location_id>},
"status": {"id": <status_id>},
"reminder": {
"minutes": <reminder_minutes>
}
}7. **Return confirmation with calendar details**
Parameters
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | name | string | Yes | - | Entry name/subject | | start_date | datetime | Yes | - | Start date and time | | end_date | datetime | Yes | - | End date and time | | member | string | No | Current user | Member identifier | | ticket_id | integer | No | - | Associated ticket ID | | type | string | No | - | Schedule type | | location | string | No | - | Location/address | | reminder_minutes | integer | No | - | Minutes before reminder | | status | string | No | - | Schedule status |
Examples
Basic Schedule Entry
/schedule-entry "Server Maintenance" "2026-02-10 09:00" "2026-02-10 12:00"
Linked to Ticket
/schedule-entry "Server Maintenance" "2026-02-10 09:00" "2026-02-10 12:00" --ticket_id 12345
On-site Appointment
/schedule-entry "On-site Support" "2026-02-11 14:00" "2026-02-11 17:00" --location "123 Main St, Anytown, USA" --type "Service"
Schedule for Another Member
/schedule-entry "Customer Meeting" "2026-02-12 10:00" "2026-02-12 11:00" --member jsmith
With Reminder
/schedule-entry "Project Kickoff" "2026-02-15 09:00" "2026-02-15 10:00" --reminder_minutes 30
Tentative Appointment
/schedule-entry "Potential Site Visit" "2026-02-20 13:00" "2026-02-20 16:00" --status "Tentative"
Full Example
/schedule-entry "Quarterly Review Meeting" "2026-02-28 14:00" "2026-02-28 15:30" --member jsmith --type "Meeting" --location "Customer Site - 456 Oak Ave" --reminder_minutes 60 --status "Firm"
Output
Successful Creation
Schedule Entry Created Successfully
Entry ID: 34567
Name: Server Maintenance
Type: Service
Time:
Start: 2026-02-10 09:00
End: 2026-02-10 12:00
Duration: 3 hours
Member: Jane Technician (jtechnician)
Status: Firm
Linked Ticket: #12345 - Server maintenance required
Company: Acme Corporation
Calendar URL: https://na.myconnectwise.net/v4_6_release/services/system_io/Schedule/fv_sch200_schedule.rails
iCal Export: Available (use --export-ical)
With Location
Schedule Entry Created Successfully
Entry ID: 34568
Name: On-site Support
Type: Service
Time:
Start: 2026-02-11 14:00
End: 2026-02-11 17:00
Duration: 3 hours
Member: Jane Technician (jtechnician)
Status: Firm
Location:
Address: 123 Main St, Anytown, USA
Directions: https://maps.google.com/?q=123+Main+St,+Anytown,+USA
Reminder: 30 minutes before (2026-02-11 13:30)
With Ticket Link
Schedule Entry Created Successfully
Entry ID: 34569
Name: Server Maintenance
Type: Service
Time:
Start: 2026-02-10 09:00
End: 2026-02-10 12:00
Duration: 3 hours
Linked Ticket:
ID: #12345
Summary: Server maintenance required
Company: Acme Corporation
Contact: John Smith (john.smith@acme.com)
Priority: Medium (3)
Status: Scheduled
Note: Ticket status updated to "Scheduled"
API Authentication
# Base64 encode credentials: company+publicKey:privateKey
AUTH=$(echo -n "${CW_COMPANY}+${CW_PUBLIC_KEY}:${CW_PRIVATE_KEY}" | base64)
# Create schedule entry
curl -s -X POST \
"https://${CW_HOST}/v4_6_release/apis/3.0/schedule/entries" \
-H "Authorization: Basic ${AUTH}" \
-H "clientId: ${CW_CLIENT_ID}" \
-H "Content-Type: application/json" \
-d '{
"name": "Server Maintenance",
"dateStart": "2026-02-10T09:00:00Z",
"dateEnd": "2026-02-10T12:00:00Z",
"member": {"identifier": "jtechnician"},
"objectId": 12345,
"type": {"id": 1},
"status": {"id": 1}
}'
# Get schedule types
curl -s -X GET \
"https://${CW_HOST}/v4_6_release/apis/3.0/schedule/types" \
-H "Authorization: Basic ${AUTH}" \
-H "clientId: ${CW_CLIENT_ID}" \
-H "Content-Type: application/json"
# Get schedule statuses
curl -s -X GET \
"https://${CW_HOST}/v4_6_release/apis/3.0/schedule/statuses" \
-H "Authorization: Basic ${AUTH}" \
-H "clientId: ${CW_CLIENT_ID}" \
-H "Read more
description: Create a schedule entry/appointment in ConnectWise PSA argument-hint: "<name> <start_date> <end_date> [member] [ticket_id] [type] [location] [reminder_minutes] [status]" arguments: [name, start_date, end_date, member, ticket_id, type, location, reminder_minutes, status]
Create ConnectWise PSA Schedule Entry
Create a schedule entry/appointment in ConnectWise, optionally linked to a ticket.
Prerequisites
- Valid ConnectWise PSA API credentials configured
- User must have schedule creation permissions
- Member must have schedule access
Steps
1. **Validate date/time inputs**
- Parse start_date and end_date
- Validate end_date is after start_date
- Check for schedule conflicts (if enabled)
2. **Resolve member (if provided)**
GET /system/members?conditions=identifier='{member}'- Default to current authenticated user if not specified
3. **Validate ticket (if ticket_id provided)**
GET /service/tickets/{ticket_id}- Confirm ticket exists and is accessible
4. **Resolve schedule type (if provided)**
GET /schedule/types?conditions=name='{type}'5. **Resolve schedule status (if provided)**
GET /schedule/statuses?conditions=name='{status}'6. **Create schedule entry**
POST /schedule/entries
Content-Type: application/json
{
"name": "<name>",
"dateStart": "<start_date>",
"dateEnd": "<end_date>",
"member": {"identifier": "<member>"},
"objectId": <ticket_id>,
"type": {"id": <type_id>},
"where": {"id": <location_id>},
"status": {"id": <status_id>},
"reminder": {
"minutes": <reminder_minutes>
}
}7. **Return confirmation with calendar details**
Parameters
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | name | string | Yes | - | Entry name/subject | | start_date | datetime | Yes | - | Start date and time | | end_date | datetime | Yes | - | End date and time | | member | string | No | Current user | Member identifier | | ticket_id | integer | No | - | Associated ticket ID | | type | string | No | - | Schedule type | | location | string | No | - | Location/address | | reminder_minutes | integer | No | - | Minutes before reminder | | status | string | No | - | Schedule status |
Examples
Basic Schedule Entry
/schedule-entry "Server Maintenance" "2026-02-10 09:00" "2026-02-10 12:00"
Linked to Ticket
/schedule-entry "Server Maintenance" "2026-02-10 09:00" "2026-02-10 12:00" --ticket_id 12345
On-site Appointment
/schedule-entry "On-site Support" "2026-02-11 14:00" "2026-02-11 17:00" --location "123 Main St, Anytown, USA" --type "Service"
Schedule for Another Member
/schedule-entry "Customer Meeting" "2026-02-12 10:00" "2026-02-12 11:00" --member jsmith
With Reminder
/schedule-entry "Project Kickoff" "2026-02-15 09:00" "2026-02-15 10:00" --reminder_minutes 30
Tentative Appointment
/schedule-entry "Potential Site Visit" "2026-02-20 13:00" "2026-02-20 16:00" --status "Tentative"
Full Example
/schedule-entry "Quarterly Review Meeting" "2026-02-28 14:00" "2026-02-28 15:30" --member jsmith --type "Meeting" --location "Customer Site - 456 Oak Ave" --reminder_minutes 60 --status "Firm"
Output
Successful Creation
Schedule Entry Created Successfully Entry ID: 34567 Name: Server Maintenance Type: Service Time: Start: 2026-02-10 09:00 End: 2026-02-10 12:00 Duration: 3 hours Member: Jane Technician (jtechnician) Status: Firm Linked Ticket: #12345 - Server maintenance required Company: Acme Corporation Calendar URL: https://na.myconnectwise.net/v4_6_release/services/system_io/Schedule/fv_sch200_schedule.rails iCal Export: Available (use --export-ical)
With Location
Schedule Entry Created Successfully Entry ID: 34568 Name: On-site Support Type: Service Time: Start: 2026-02-11 14:00 End: 2026-02-11 17:00 Duration: 3 hours Member: Jane Technician (jtechnician) Status: Firm Location: Address: 123 Main St, Anytown, USA Directions: https://maps.google.com/?q=123+Main+St,+Anytown,+USA Reminder: 30 minutes before (2026-02-11 13:30)
With Ticket Link
Schedule Entry Created Successfully Entry ID: 34569 Name: Server Maintenance Type: Service Time: Start: 2026-02-10 09:00 End: 2026-02-10 12:00 Duration: 3 hours Linked Ticket: ID: #12345 Summary: Server maintenance required Company: Acme Corporation Contact: John Smith (john.smith@acme.com) Priority: Medium (3) Status: Scheduled Note: Ticket status updated to "Scheduled"
API Authentication
# Base64 encode credentials: company+publicKey:privateKey
AUTH=$(echo -n "${CW_COMPANY}+${CW_PUBLIC_KEY}:${CW_PRIVATE_KEY}" | base64)
# Create schedule entry
curl -s -X POST \
"https://${CW_HOST}/v4_6_release/apis/3.0/schedule/entries" \
-H "Authorization: Basic ${AUTH}" \
-H "clientId: ${CW_CLIENT_ID}" \
-H "Content-Type: application/json" \
-d '{
"name": "Server Maintenance",
"dateStart": "2026-02-10T09:00:00Z",
"dateEnd": "2026-02-10T12:00:00Z",
"member": {"identifier": "jtechnician"},
"objectId": 12345,
"type": {"id": 1},
"status": {"id": 1}
}'
# Get schedule types
curl -s -X GET \
"https://${CW_HOST}/v4_6_release/apis/3.0/schedule/types" \
-H "Authorization: Basic ${AUTH}" \
-H "clientId: ${CW_CLIENT_ID}" \
-H "Content-Type: application/json"
# Get schedule statuses
curl -s -X GET \
"https://${CW_HOST}/v4_6_release/apis/3.0/schedule/statuses" \
-H "Authorization: Basic ${AUTH}" \
-H "clientId: ${CW_CLIENT_ID}" \
-H "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
Other commands on msp-claude-plugins.
- /case-review
Review and triage abuse mailbox cases in Abnormal Security
Open command - /search-threats
Search for specific threat patterns in Abnormal Security by sender, recipient, attack type, or keywords
Open command - /threat-triage
Triage recent email threats detected by Abnormal Security by severity and attack type
Open command - /list-overdue-invoices
List open and overdue Alternative Payments invoices and optionally generate hosted payment links for them
Open command - /reconcile-payout
Reconcile an Alternative Payments payout by listing its transactions and matching them against invoices and customers
Open command - /eol-report
EOL/EOS risk report — devices, OS versions, and firmware approaching or past end-of-life/end-of-support, prioritized by criticality
Open command

