This reference lists every tool the Perk Model Context Protocol (MCP) server exposes, with its description, required scope, and whether it reads or writes. Use it to see which tool an AI client calls for a given task and which scope that tool needs.
You can query trips, users, expenses, invoices, reporting, policy, events, and cards; search and book flights, hotels, trains, and cars; and generate reports, create and manage expenses, create a Perk Event, and get a trip approval link. Reporting data is one day behind because it goes through quality checks and aggregation, and reporting access is limited to users with reporting access — analysts and account admins. Expense queries return live data.
The tables below list all tools available in this release, grouped by category. Tool names are the identifiers the server exposes. Each scope is a colon-separated string that an access token must carry for the tool to run.
| Tool | Description | Required scope |
|---|
trips_get_trip | Returns a full trip breakdown: travelers, bookings (flights, hotels, trains, cars), dates, and cost. | trip:read |
trips_list_trips | Lists trips, filtered by status (upcoming, current, past), destination, traveler, or date range. Returns up to 30 per call. Travel admins and travel managers can list trips for their travelers; travelers see only their own. | trip:read |
trips_get_trip_itinerary_pdf | Gets the itinerary confirmation PDF download URL for a trip, covering all its bookings (flights, hotels, cars, trains). The trip must have at least one traveler and one booking. | None — follows your Perk permissions |
| Tool | Description | Required scope |
|---|
flights_search_flight_places | Searches airports and cities by name or IATA code to resolve origin/destination place objects for a flight search. | trips:write |
flights_start_flight_search | Starts a flight search (one-way, round-trip, or multi-city). Confirms trip type with the user first; returns a transaction ID and trip ID. | trips:write |
flights_get_flight_leg_options | Polls for flight offers on the current leg of a search, sortable by price, travel time, or best value. Called once per leg on round-trips. | trips:write |
flights_check_visa_requirements | Checks visa and entry requirements for a flight itinerary's outbound leg, inferring passport nationality from the origin airport. | trips:write |
flights_build_flight_deeplink | Generates a Perk checkout deep-link for a confirmed flight offer selection. | trips:write |
| Tool | Description | Required scope |
|---|
hotels_start_hotel_search | Starts a hotel search for a location, always creating a new trip. | trips:write |
hotels_get_hotels | Fetches hotels matching a started search, with filters for policy compliance, breakfast, cancellation, and loyalty programs. | trips:write |
hotels_start_hotel_rates | Starts fetching rooms and rates for one hotel from a search. | trips:write |
hotels_get_hotel_rates | Fetches the rooms and rates for one hotel once hotels_start_hotel_rates has run. | trips:write |
hotels_select_hotel_rate | Adds a chosen hotel rate to the trip. Does not book or pay — the checkout link still requires user confirmation. | trips:write |
| Tool | Description | Required scope |
|---|
trains_search_train_places | Searches train stations and cities by name to resolve origin/destination place objects. | trips:write |
trains_start_train_search | Starts a train search (one-way or round-trip); round-trip return date/time must be committed at this step. | trips:write |
trains_get_train_search_results | Polls for outbound train offers for a started search. | trips:write |
trains_start_train_search_inbound | Starts the inbound (return) leg search after the user picks an outbound offer. | trips:write |
trains_get_train_search_inbound_results | Polls for inbound (return) train offers. | trips:write |
trains_build_train_deeplink | Generates a Perk checkout deep-link for a confirmed train offer selection (outbound only, or outbound + inbound for round-trip). | trips:write |
| Tool | Description | Required scope |
|---|
cars_search_car_places | Searches airports, cities, and addresses by name to resolve pick-up/drop-off place objects. | trips:write |
cars_list_car_delivery_addresses | Lists the account's car delivery/collection addresses, for accounts with that feature enabled. | trips:write |
cars_start_car_search | Starts a car rental search for a pick-up/drop-off location and date range. | trips:write |
cars_get_car_search_results | Fetches available car rental offers for a started search, with filters for supplier, insurance, car type/size, and payment mode. | trips:write |
cars_build_car_deeplink | Generates a Perk checkout deep-link for a confirmed car rental offer selection. | trips:write |
| Tool | Description | Required scope |
|---|
identity_get_current_user | Returns the signed-in user's profile, including user ID and cost object. | user:read |
identity_search_users | Searches users in the account by name, email, role, cost object, manager, or approval process. Returns up to 1,000. Admin-oriented. | user:read |
| Tool | Description | Required scope |
|---|
expenses_query_expenses | Queries the signed-in user's expenses by date, status, merchant, amount, or trip association. Returns live data. | expenses:read |
expenses_create_expense | Creates an expense from a receipt, mileage, or per diem. | spend:expenses:write |
expenses_update_expense | Edits an expense's memo, category, cost object, or trip link. | spend:expenses:write |
expenses_submit_expense | Submits an expense for approval. | spend:expenses:write |
expenses_approve_expense | Approves or sends back a pending expense. The caller must be a valid approver on that expense. | spend:expenses:write |
expenses_receipt_upload | Uploads a receipt and matches it to an existing card transaction or expense. | spend:expenses:write |
expenses_get_expense_form_options | Loads selectable options (categories, cost centers, tags, payment methods, and optionally cards) needed before editing an expense. | None — follows your Perk permissions |
expenses_receipt_upload_fallback | Alternate receipt upload that sends the file through the MCP server as base64, for use only when the primary signed-URL upload path fails. | spend:expenses:write |
expenses_send_back_expense | Sends a pending expense back to its submitter for revision with a required reason, as an alternative to expenses_approve_expense's reject path. | spend:expenses:write |
| Tool | Description | Required scope |
|---|
invoices_list_invoices | Lists invoices for the company, filtered by profile, status, date range, billing period, or serial number. Returns amounts, due dates, and a PDF download link per invoice. | None — follows your Perk permissions |
invoices_get_invoice | Returns a single invoice by its serial number, including billing information, tax summary, amounts, a line-items preview, and a PDF download link. | None — follows your Perk permissions |
invoices_list_invoice_lines | Lists invoice lines. Each line is a single booked service (flight, hotel, car) with trip metadata, traveler, cost object, tax, and amount. Filter by profile, serial number, or date range. | None — follows your Perk permissions |
invoices_list_invoice_profiles | Lists invoice profiles (payment profiles). Each profile holds billing preferences such as payment method, billing address, and billing period. | None — follows your Perk permissions |
| Tool | Description | Required scope |
|---|
reporting_create_travel_report | Starts an asynchronous travel report using Perk's custom report download. Supports a date range of up to 12 months, a date type (booking date, trip start date, or invoice issue date), and filters such as cost object, payment profile, legal entity, traveler, and payment recipient. Covers around 90 fields (flights, hotels, cars, trains, taxes, invoices, CO2 emissions, policy compliance). Returns a task ID to poll with reporting_get_travel_report or reporting_get_travel_report_data. | report:write |
reporting_get_travel_report | Polls the status of a report started by reporting_create_travel_report. When the report is ready, returns a CSV or XLSX download link. Generate first, then poll to download. | report:write |
reporting_get_travel_report_data | Polls a report started by reporting_create_travel_report and returns structured JSON rows (paginated via a cursor) instead of a file. Use reporting_get_travel_report when you need a CSV or XLSX export. | report:write |
reporting_create_spend_report | Starts an asynchronous, organization-wide spend report, optionally filtered by legal entity or user set. Returns a task ID to poll with reporting_get_spend_report. | report:write |
reporting_get_spend_report | Polls the status of a spend report started by reporting_create_spend_report. When ready, returns a signed download link. | report:write |
reporting_create_team_insights_report | Starts an asynchronous Team Insights report for the authenticated user's team — available to line managers (direct reports), cost object owners (people who booked against their cost objects), and approvers (trips they or a delegate approved). Covers traveler details, trip/booking info, travel spend, policy violations, and cost allocation, up to a 12-month range with dates filtered by expense date. Only covers travel data, excludes expense data. until must be yesterday or earlier. Returns a task ID to poll with reporting_get_team_insights_report_data. | team-insights-report:write |
reporting_get_team_insights_report_data | Polls a report started by reporting_create_team_insights_report and returns structured JSON rows (one row per booking), paginated via a cursor. Set limit on the first call only (default and max 2,000). | team-insights-report:write |
| Tool | Description | Required scope |
|---|
policies_get_travel_policy | Returns the user's travel policy rules for a vertical (flights, hotels, cars, or trains): budget limits, booking windows, and cabin or star restrictions. Returns null when the user has no travel policy assigned. | my-travel-policy:read |
| Tool | Description | Required scope |
|---|
events_list_events | Lists Perk Events the user can see (organizing, invited, attending, or account-visible). Filter by date_filter (upcoming, past, no_dates) and status (all, organizing, attending, invited). Paginated, 5 per page. | None — follows your Perk permissions |
events_list_event_attendance | Lists attendees for a specific Perk Event, with RSVP status and person details. The caller must be an event organizer. Takes a required event_id, plus attending (attending, not_attending, no_response, uninvited) and search filters. Paginated (default 20, max 100 per page). | None — follows your Perk permissions |
events_create_event | Creates a new Perk Event. name, location, start_date, and end_date are required. Perk creates the event as private and published by default. | events:write |
| Tool | Description | Required scope |
|---|
transactions_list_available_cards | Lists your own company cards plus any lodge cards in your company — the cards you can submit expenses against. No parameters; the user and company resolve from your identity. No pagination. Requires a Spend subscription. | None — follows your Perk permissions |
transactions_list_pending | Lists your pending card transactions — unmatched, open transactions on your cards that still need matching to an expense. No parameters; lodge-card transactions are excluded. No pagination. Requires a Spend subscription. | None — follows your Perk permissions |
| Tool | Description | Required scope |
|---|
approvals_get_trip_approval_links | Gets a link the user can open to approve or decline a specific trip — the same as acting from an email, Slack, or Teams message. | trip-approval-links:read |
Reporting data in the Perk MCP server is one day behind. It goes through quality checks and aggregation before it becomes available, so a travel report or spend query reflects data up to the previous day.
Expense queries are the exception. The expenses_query_expenses tool returns live data in real time.
Reporting access in the Perk MCP server is limited to users with reporting access — analysts and account admins. Comma-separated values (CSV) and XLSX report downloads depend on this access.
The access token is scoped to your role and your company's active plan through role-based access control (RBAC). A tool call returns only the data your role permits, so a client can only read what you can already access in Perk.
When using the Perk MCP to retrieve travel and spend reporting, you may need to add these domains:
- storage.googleapis.com
- *.amazonaws.com