BookYourPTO MCP exposes 32 tools organized into 9 categories. Each tool is described below with its parameters and required permissions.
Authentication is handled automatically via OAuth 2.0. When you first connect, your browser will open a BookYourPTO login page. After you sign in, your AI client receives a secure token — no credentials are ever shared with the AI.
login tool. Authentication happens in your browser before the AI session starts. Two-factor authentication (2FA) is fully supported.create_leave_requestSubmit a new leave request. Use get_leave_balance first to check availability.
| Parameter | Type | Required | Description |
|---|---|---|---|
userId | string | Yes | User ID for whom to create the leave |
leaveTypeId | string | Yes | Leave type ID (use bypto://leave-types resource to look up) |
startDate | string | Yes | Start date (YYYY-MM-DD) |
endDate | string | Yes | End date (YYYY-MM-DD) |
startHalf | enum | No | First day duration: FULL_DAY, FIRST_HALF, or SECOND_HALF. Default: FULL_DAY |
endHalf | enum | No | Last day duration: FULL_DAY, FIRST_HALF, or SECOND_HALF. Default: FULL_DAY |
reason | string | No | Reason for leave |
query_leavesList leave requests. Filters by user, year, and status. Employees see their own; managers/admins see others.
| Parameter | Type | Required | Description |
|---|---|---|---|
userId | string | No | User ID to query (defaults to authenticated user) |
year | number | No | Year to query (defaults to current year) |
status | string | No | Filter by status: PENDING, APPROVED, REJECTED, CANCELLED |
get_leave_balanceGet leave balance breakdown (annual, sick, carried over) for a user and year.
| Parameter | Type | Required | Description |
|---|---|---|---|
userId | string | No | User ID (defaults to authenticated user) |
year | number | No | Fiscal year (defaults to current year) |
get_pending_leave_approvalsList pending leave requests awaiting approval.
Required role: DEPARTMENT_HEAD, ADMINISTRATOR, or EXECUTIVE
No parameters.
approve_or_reject_leaveApprove or reject a pending leave request.
Required role: DEPARTMENT_HEAD, ADMINISTRATOR, or EXECUTIVE
| Parameter | Type | Required | Description |
|---|---|---|---|
leaveId | string | Yes | ID of the leave request |
action | enum | Yes | approve or reject |
reason | string | No | Rejection reason (required if rejecting) |
get_time_tracking_statusGet current clock status (clocked in / out / on break) and today's summary for a user.
| Parameter | Type | Required | Description |
|---|---|---|---|
userId | string | No | User ID (defaults to authenticated user) |
clock_actionClock in, clock out, start break, or end break.
| Parameter | Type | Required | Description |
|---|---|---|---|
action | enum | Yes | clock_in, clock_out, start_break, or end_break |
projectId | string | No | Project ID (for clock_in, if required by org settings) |
taskId | string | No | Task ID (for clock_in) |
description | string | No | Work description (for clock_in) |
query_time_entriesList time entries filtered by user, date range, and project. Supports pagination.
| Parameter | Type | Required | Description |
|---|---|---|---|
userId | string | No | User ID (defaults to authenticated user for employees) |
startDate | string | No | Start date filter (YYYY-MM-DD) |
endDate | string | No | End date filter (YYYY-MM-DD) |
projectId | string | No | Filter by project ID |
page | number | No | Page number (default: 1) |
limit | number | No | Results per page, max 50 (default: 20) |
query_expensesList expense reports. Filters by user, status, and date range. Employees see own; managers/admins see others.
| Parameter | Type | Required | Description |
|---|---|---|---|
userId | string | No | User ID to filter by |
status | string | No | Filter by status: DRAFT, SUBMITTED, PENDING_APPROVAL, APPROVED, REJECTED, PAID, CANCELLED |
startDate | string | No | Start date (YYYY-MM-DD) |
endDate | string | No | End date (YYYY-MM-DD) |
page | number | No | Page number (default: 1) |
limit | number | No | Results per page (default: 20) |
get_expense_detailsGet full details of an expense report including line items, per diems, and mileage entries.
| Parameter | Type | Required | Description |
|---|---|---|---|
expenseId | string | Yes | Expense report ID |
get_expense_approvalsList expense reports pending your approval.
Required role: Manager, DEPARTMENT_HEAD, ADMINISTRATOR, or EXECUTIVE
| Parameter | Type | Required | Description |
|---|---|---|---|
page | number | No | Page number (default: 1) |
limit | number | No | Results per page (default: 20) |
approve_or_reject_expenseApprove or reject a submitted/pending expense report.
Required role: Manager, DEPARTMENT_HEAD, ADMINISTRATOR, or EXECUTIVE
| Parameter | Type | Required | Description |
|---|---|---|---|
expenseId | string | Yes | Expense report ID |
action | enum | Yes | approve or reject |
notes | string | No | Approver notes or rejection reason |
create_expenseCreate a new expense report.
Required role: All roles (company card report type may require ADMINISTRATOR or EXECUTIVE depending on organization settings)
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Expense report title |
departureDate | string | Yes | Departure date (YYYY-MM-DD) |
returnDate | string | Yes | Return date (YYYY-MM-DD) |
reportType | enum | No | REIMBURSEMENT or COMPANY_CARD (default: REIMBURSEMENT) |
description | string | No | Report description |
tripPurpose | string | No | Purpose of trip or expense |
currency | string | No | Currency code (defaults to organization currency) |
departmentId | string | No | Department ID |
projectId | string | No | Project ID |
payableToId | string | No | User ID the expense is payable to |
submit_expenseSubmit a draft expense report for approval.
Required role: Report owner, ADMINISTRATOR, or EXECUTIVE
| Parameter | Type | Required | Description |
|---|---|---|---|
expenseId | string | Yes | Expense report ID |
mark_expense_paidMark an approved expense report as paid. Triggers QuickBooks sync if configured.
Required role: ADMINISTRATOR or EXECUTIVE
| Parameter | Type | Required | Description |
|---|---|---|---|
expenseId | string | Yes | Expense report ID |
paymentReference | string | No | Payment reference number |
paymentMethod | enum | No | DIRECT_DEPOSIT, CHEQUE, WIRE_TRANSFER, CASH, CREDIT_CARD, or OTHER |
get_expense_settingsGet organization expense settings including approval rules, receipt requirements, company card configuration, and mileage rates.
No parameters.
get_team_membersList all users in the organization with their role, department, and manager info.
No parameters.
get_user_profileGet detailed profile for a specific user by ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
userId | string | Yes | User ID |
get_departmentsList all departments in the organization.
No parameters.
get_org_infoGet organization settings: name, timezone, currency, leave allowances, fiscal year, etc.
No parameters.
get_public_holidaysList public holidays configured for the organization.
| Parameter | Type | Required | Description |
|---|---|---|---|
year | number | No | Filter by year |
get_dashboard_statsGet organization-level stats: total users, departments, leave types, leaves.
Required role: EXECUTIVE
No parameters.
get_notificationsGet the authenticated user's notifications. Supports filtering by read status.
| Parameter | Type | Required | Description |
|---|---|---|---|
filter | enum | No | all, unread, or read (default: all) |
page | number | No | Page number (default: 1) |
limit | number | No | Results per page (default: 20) |
list_projectsList projects visible to the authenticated user. Admins see all; others see their department + org-wide projects.
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by status: ACTIVE, COMPLETED, ARCHIVED, ON_HOLD |
includeStats | boolean | No | Include time tracking stats (default: false) |
get_projectGet full project details including tasks, client info, and time stats.
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Project ID |
create_taskCreate a new task within a project.
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Project ID |
name | string | Yes | Task name |
description | string | No | Task description |
budgetHours | number | No | Budget hours for this task |
isBillable | boolean | No | Whether the task is billable (default: true) |
query_schedulesList scheduled shifts for a date range. Returns shifts, leaves, and public holidays. Admins see all; department heads see their department.
| Parameter | Type | Required | Description |
|---|---|---|---|
startDate | string | No | Start date (YYYY-MM-DD, defaults to today) |
endDate | string | No | End date (YYYY-MM-DD, defaults to +7 days) |
userId | string | No | Filter by user ID |
departmentId | string | No | Filter by department ID |
create_shiftCreate a new scheduled shift. Omit userId to create an open shift.
Required role: ADMINISTRATOR, EXECUTIVE, or DEPARTMENT_HEAD
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | Yes | Shift date (YYYY-MM-DD) |
startTime | string | Yes | Start time (HH:MM, e.g., 09:00) |
endTime | string | Yes | End time (HH:MM, e.g., 17:00) |
userId | string | No | User ID (omit for open shift) |
departmentId | string | No | Department ID |
shiftType | string | No | REGULAR, MORNING, AFTERNOON, NIGHT, CUSTOM (default: REGULAR) |
breakDuration | number | No | Break duration in minutes (default: 30) |
notes | string | No | Notes |
publish_schedulePublish schedules for a week, making them visible to employees.
Required role: ADMINISTRATOR or EXECUTIVE
| Parameter | Type | Required | Description |
|---|---|---|---|
weekStart | string | Yes | Monday of the week to publish (YYYY-MM-DD) |
numberOfWeeks | number | No | Number of weeks to publish, 1-4 (default: 1) |
sendNotification | boolean | No | Send email notification to employees (default: true) |
generate_leave_reportGenerate a leave report for a date range.
Required role: ADMINISTRATOR or EXECUTIVE
| Parameter | Type | Required | Description |
|---|---|---|---|
startDate | string | No | Report start date (YYYY-MM-DD) |
endDate | string | No | Report end date (YYYY-MM-DD) |
departmentId | string | No | Filter by department |
userId | string | No | Filter by user |
generate_timesheet_reportGenerate a timesheet report for a date range.
Required role: ADMINISTRATOR or EXECUTIVE
| Parameter | Type | Required | Description |
|---|---|---|---|
startDate | string | No | Report start date (YYYY-MM-DD) |
endDate | string | No | Report end date (YYYY-MM-DD) |
userId | string | No | Filter by user |
projectId | string | No | Filter by project |