AI agents (MCP)
MCP Tools Reference
Reference for all 34 Sky Schedule MCP tools, read and write, with inputs and results, from listing reservations to completing flights and drafting invoices.
This MCP tools reference lists every tool the Sky Schedule MCP server offers: 20 read tools and 14 write tools. Agents pick tools on their own from the names and descriptions, so you rarely call them by hand, but knowing the inputs helps you write better prompts and review what an agent did. For setup, see MCP setup.
All tools
| Tool | Type | What it does |
|---|---|---|
list_reservations | Read | Lists reservations, from today onward unless you give dates. |
get_reservation | Read | Gets one reservation by id. |
list_flights | Read | Lists completed flight logs with Hobbs, Tach, route, and people. |
get_flight | Read | Gets one completed flight by id. |
list_customers | Read | Lists the customer roster. |
get_customer | Read | Gets one customer by id. |
list_instructors | Read | Lists the instructor roster. |
get_instructor | Read | Gets one instructor by id. |
list_aircraft | Read | Lists the fleet with tail numbers, Hobbs, Tach, and status. |
get_aircraft | Read | Gets one aircraft by id. |
list_leads | Read | Lists CRM leads, newest first. |
get_lead | Read | Gets one lead with its notes. |
list_reports | Read | Lists the report types run_report can run. |
list_work_orders | Read | Lists maintenance work orders. |
list_squawks | Read | Lists aircraft squawks. |
list_inspections | Read | Lists aircraft inspections and due dates. |
list_inventory | Read | Lists parts inventory and stock levels. |
list_reminders | Read | Lists inspection due reminders. |
list_reservation_comments | Read | Lists comments on flights, meeting rooms, ground lessons, and other bookings. |
list_team_chat_channels | Read | Lists Team Chat channels. |
create_reservation | Write | Books an aircraft for a customer, with an instructor unless it's a solo rental. |
update_reservation | Write | Changes times, aircraft, people, activity type, or route on a reservation. |
cancel_reservation | Write | Cancels a reservation and records the reason. |
void_reservation | Write | Permanently removes a reservation and its linked records. |
complete_flight | Write | Logs a completed flight from a reservation and updates aircraft Hobbs and Tach. |
update_hobbs | Write | Sets an aircraft's current Hobbs, and Tach if given. |
add_aircraft_document | Write | Attaches a file or link to an aircraft, such as a logbook scan. |
add_fuel_reimbursement | Write | Logs fuel spend on a reservation, with an optional receipt. |
add_lead_note | Write | Adds a note to a CRM lead. |
send_crm_lead_email | Write | Emails a CRM lead from the school. |
run_report | Write | Runs a report and returns its rows. Reads only, but counts toward the write limit. |
create_work_order | Write | Opens a work order, blocks the aircraft on the schedule, and sets it to Maintenance. |
draft_invoice_for_flight | Write | Creates a draft invoice for a completed flight. Doesn't send or charge it. |
send_team_chat_message | Write | Posts a message to a Team Chat channel. |
Write tools share a limit of 200 calls per school per UTC day, and all tools share 1,000 requests per day. See the MCP server overview for limits and the audit log.
Inputs every tool follows
- Ids must be the full UUID from a list or get result. A partial id is refused with:
Use the full id (a UUID) from a list or search result. limiton list tools is a whole number from 1 to 100. The default is 50.- Dates are
YYYY-MM-DD. Times for reservations are ISO 8601, for example2026-10-10T16:00:00Z. - Aircraft can be given as
aircraftIdortailNumber. Tail numbers match without regard to case. - People can be given by id or by email:
customerIdorcustomerEmail,instructorIdorinstructorEmail. Emails match without regard to case.
Every result is JSON with a meta.rateLimit object. List results also have meta.count and meta.pageSize.
Read tools
| Tool | Inputs | Returns |
|---|---|---|
list_reservations | from, to, limit (all optional). from defaults to today in UTC. | Reservation objects, oldest first. meta.from shows the start date used. Same fields as the reservations API. |
get_reservation | reservationId | One reservation. |
list_flights | from, to, limit (all optional), filtering on flight date | Completed flights, newest first. Same fields as the completed flights API. |
get_flight | flightId | One completed flight. |
list_customers | limit | id, name, email, phone, status, sorted by name. |
get_customer | customerId | One customer. |
list_instructors | limit | id, name, email, phone, status, sorted by name. |
get_instructor | instructorId | One instructor. |
list_aircraft | limit | id, tailNumber, model, type, status, currentHobbs, currentTach, totalHours, hourlyRate, sorted by tail number. |
get_aircraft | aircraftId | One aircraft. |
list_leads | limit | id, name, email, phone, status, leadScore, source, interest, notes, createdAt, followUpAt, newest first. |
get_lead | leadId | lead (same fields) and leadNotes, the 50 most recent notes with id, body, and createdAt. |
list_reports | None | Report types with id, category, categoryLabel, label, description, filters, and groupByOptions. |
list_work_orders | limit | Same fields as /work-orders. |
list_squawks | limit | Same fields as /squawks. |
list_inspections | limit | Same fields as /inspections. |
list_inventory | limit | Same fields as /inventory. |
list_reminders | limit | Same fields as /reminders. |
list_reservation_comments | limit, reservationId (optional) | Same fields as the reservation comments API. |
list_team_chat_channels | None | id, name, slug, channelType, description. |
Write tools
create_reservation
Books the schedule. The new reservation starts with status PENDING.
aircraftIdortailNumber(one is required)startsAt,endsAt(required): ISO 8601. The end must be after the start.activityType(optional): defaults toDual Flight Training.customerIdorcustomerEmail(one is required)instructorIdorinstructorEmail: required unlessactivityTypeisSolo Pilot Rental.route(optional)
Returns reservationId and the full reservation. If the aircraft is already booked for any part of that time, the call fails with That time slot overlaps another reservation on this aircraft. This tool checks the aircraft for overlaps only. It doesn't check the instructor's other bookings or the booking requirements your school sets up in Sky Schedule, so review agent bookings the way you would a new staff member's.
update_reservation
reservationId(required)- Any of:
startsAt,endsAt,aircraftIdortailNumber,customerIdorcustomerEmail,instructorIdorinstructorEmail,activityType,route
Only the fields you send change. If the new times or aircraft overlap another active reservation on that aircraft, the call fails with Updated times overlap another reservation on this aircraft. Returns reservationId and the updated reservation.
cancel_reservation
reservationId(required)reason(optional): stored with the cancellation. Defaults toother.
Sets the status to CANCELLED and records the cancellation as made by "Connected agent". Returns { "reservationId": "...", "status": "CANCELLED" }. Prefer this over void_reservation.
void_reservation
reservationId(required)
Permanently removes the reservation and its linked records. Sky Schedule keeps a void log entry. This can't be undone, so use cancel_reservation unless the booking should never have existed. Returns { "reservationId": "...", "voided": true }.
complete_flight
reservationId(required): the reservation must have an aircraft and start and end times.hobbsStart,hobbsStop(required): numbers.tachStart,tachStop(optional): numbers.route(optional): overrides the reservation's route.landings(optional): whole number.
Creates the completed flight log from the reservation (people, activity type, date, and times come from the reservation), marks the reservation completed, and updates the aircraft's current Hobbs and Tach. Returns completedFlightId, the new flight, and metersApplied, which says whether the aircraft meters were updated.
{
"completedFlightId": "33333333-3333-4333-8333-333333333333",
"flight": {
"id": "33333333-3333-4333-8333-333333333333",
"reservationId": "11111111-1111-4111-8111-111111111111",
"reservationNumber": "1042",
"activityType": "Dual Flight Training",
"flightDate": "2026-10-09",
"startTime": "15:00:00",
"endTime": "17:00:00",
"completedAt": "2026-10-09T17:20:05.611+00:00",
"route": "KCRQ-KSEE-KCRQ",
"hobbs": { "start": 2452.6, "end": 2454.1, "delta": 1.5 },
"tach": { "start": 1981.5, "end": 1982.8, "delta": 1.3 },
"customer": { "name": "Alex Student", "email": "alex.student@example.com", "phone": "555-0100" },
"instructor": { "name": "Sam Instructor", "email": "sam.cfi@example.com", "phone": "555-0101" },
"aircraft": { "tailNumber": "N12345", "model": "Cessna 172S Skyhawk" }
},
"metersApplied": true,
"meta": {
"rateLimit": { "limit": 1000, "remaining": 948, "reset": "2026-10-10T00:00:00.000Z" }
}
}
update_hobbs
aircraftIdortailNumber(one is required)hobbs(required): zero or more.tach(optional)
Sets the aircraft's current Hobbs (and Tach) and adds a manual adjustment, noted "Updated via MCP", to the aircraft's Hobbs history. Returns the updated aircraft.
add_aircraft_document
aircraftIdortailNumber(one is required)name(required): the document title.fileUrlorfileBase64: a link to the file, or the file itself as base64. A base64 file is uploaded and stored with the aircraft's documents.contentType(optional): for exampleapplication/pdf.description(optional)
Returns documentId, aircraftId, tailNumber, title, and url. This is how an agent with access to your email or file storage can file a logbook scan or a receipt on the right tail number.
add_fuel_reimbursement
reservationId(required): the reservation must have an aircraft.amountDollars(required): more than 0.notes(optional)receiptUrlorreceiptBase64(optional)receiptContentType(optional): defaults toapplication/pdf.
Creates a pending fuel reimbursement on the reservation and a "Fuel reimbursement" document on the aircraft. Returns reimbursementId, amountCents, status (pending), and receiptUrl.
add_lead_note
leadId(required)body(required)
Returns noteId, body, and createdAt.
send_crm_lead_email
leadId(required): the lead must have an email address.subject(required)body(required): plain text.templateId(optional): a CRM email template. If the template has an attachment, it's attached.templateLabel(optional): stored with the email log.
Sends a real email from your school to the lead and records it in the school's CRM email log. Returns sent: true with emailId, provider, fromEmail, and toEmail. If the email can't be sent, it returns sent: false, skipped: true, and a reason and message.
run_report
reportType(required): a report id fromlist_reports, such asflights.detailorleads.detail.dateFrom,dateTo(optional):YYYY-MM-DD.groupBy(optional): one of the report'sgroupByOptions, such asaircraftormonth.page(optional): defaults to 1.pageSize(optional): defaults to 50, up to 500.
Returns columns, rows, total_count, page, page_size, and totals when the report has them. It only reads data, but it counts toward the 200 write calls per day.
Report ids at the time of writing, grouped by category. list_reports is always the current list.
- Flights and reservations:
flights.detail,reservations.detail - Students:
students.list,students.flight_hours,students.reservations,students.billing,students.progress - Instructors:
instructors.list,instructors.flights_detail,instructors.flight_hours,instructors.reservations,instructors.activity,instructors.billing - Aircraft:
aircraft.list,aircraft.flight_hours,aircraft.reservations,aircraft.utilization - Maintenance:
maintenance.all,maintenance.squawks,maintenance.work_orders,maintenance.inspections - Billing:
billing.invoices,billing.invoice_line_items,billing.manual_payments,billing.balance_ledger,billing.revenue_summary - CRM, ground training, and logbook:
leads.detail,ground_training.detail,logbook.detail
create_work_order
aircraftIdortailNumber(one is required)title,description(required)category(optional): defaults toGeneral.startDate,endDate(required):YYYY-MM-DD.startTime,endTime(required):HH:MM, 24-hour.
Creates a work order with status new, puts Maintenance blocks on the schedule for that aircraft over the date range, and sets the aircraft's status to Maintenance. Returns workOrderId, aircraftId, tailNumber, status, and scheduleBlocks (how many blocks were added).
draft_invoice_for_flight
completedFlightId(required): theidfromlist_flightsorcomplete_flight.
Creates a draft invoice for the flight using your school's billing settings. It doesn't publish, send, or charge anything; staff review and send it in Sky Schedule. Returns drafted: true with the invoice, or drafted: false with skipped: true and a reason, such as flight_already_invoiced, duplicate_draft, no_student, or manual_billing.
The draft is created under the admin who generated the current API key. If that admin can't be found, the tool asks you to rotate the connection.
send_team_chat_message
body(required)channelId,channelSlug, orchannelName(optional): which channel. Without one, the message goes to the school's general channel.
Posts as "Sky Schedule MCP". Returns messageId, channelId, channelName, body, and createdAt. Use list_team_chat_channels to find a channel.