Perk MCP tools reference

Reference for every Perk MCP tool across trips, users, expenses, invoices, reporting, policy, events, and cards — with each tool's description, required OAuth scope, and read or write behavior.

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.

Tools

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.

Trips

ToolDescriptionRequired scope
trips_get_tripReturns a full trip breakdown: travelers, bookings (flights, hotels, trains, cars), dates, and cost.trip:read
trips_list_tripsLists 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_pdfGets 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

Flights

ToolDescriptionRequired scope
flights_search_flight_placesSearches airports and cities by name or IATA code to resolve origin/destination place objects for a flight search.trips:write
flights_start_flight_searchStarts 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_optionsPolls 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_requirementsChecks visa and entry requirements for a flight itinerary's outbound leg, inferring passport nationality from the origin airport.trips:write
flights_build_flight_deeplinkGenerates a Perk checkout deep-link for a confirmed flight offer selection.trips:write

Hotels

ToolDescriptionRequired scope
hotels_start_hotel_searchStarts a hotel search for a location, always creating a new trip.trips:write
hotels_get_hotelsFetches hotels matching a started search, with filters for policy compliance, breakfast, cancellation, and loyalty programs.trips:write
hotels_start_hotel_ratesStarts fetching rooms and rates for one hotel from a search.trips:write
hotels_get_hotel_ratesFetches the rooms and rates for one hotel once hotels_start_hotel_rates has run.trips:write
hotels_select_hotel_rateAdds a chosen hotel rate to the trip. Does not book or pay — the checkout link still requires user confirmation.trips:write

Trains

ToolDescriptionRequired scope
trains_search_train_placesSearches train stations and cities by name to resolve origin/destination place objects.trips:write
trains_start_train_searchStarts 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_resultsPolls for outbound train offers for a started search.trips:write
trains_start_train_search_inboundStarts the inbound (return) leg search after the user picks an outbound offer.trips:write
trains_get_train_search_inbound_resultsPolls for inbound (return) train offers.trips:write
trains_build_train_deeplinkGenerates a Perk checkout deep-link for a confirmed train offer selection (outbound only, or outbound + inbound for round-trip).trips:write

Cars

ToolDescriptionRequired scope
cars_search_car_placesSearches airports, cities, and addresses by name to resolve pick-up/drop-off place objects.trips:write
cars_list_car_delivery_addressesLists the account's car delivery/collection addresses, for accounts with that feature enabled.trips:write
cars_start_car_searchStarts a car rental search for a pick-up/drop-off location and date range.trips:write
cars_get_car_search_resultsFetches available car rental offers for a started search, with filters for supplier, insurance, car type/size, and payment mode.trips:write
cars_build_car_deeplinkGenerates a Perk checkout deep-link for a confirmed car rental offer selection.trips:write

Users

ToolDescriptionRequired scope
identity_get_current_userReturns the signed-in user's profile, including user ID and cost object.user:read
identity_search_usersSearches users in the account by name, email, role, cost object, manager, or approval process. Returns up to 1,000. Admin-oriented.user:read

Expenses

ToolDescriptionRequired scope
expenses_query_expensesQueries the signed-in user's expenses by date, status, merchant, amount, or trip association. Returns live data.expenses:read
expenses_create_expenseCreates an expense from a receipt, mileage, or per diem.spend:expenses:write
expenses_update_expenseEdits an expense's memo, category, cost object, or trip link.spend:expenses:write
expenses_submit_expenseSubmits an expense for approval.spend:expenses:write
expenses_approve_expenseApproves or sends back a pending expense. The caller must be a valid approver on that expense.spend:expenses:write
expenses_receipt_uploadUploads a receipt and matches it to an existing card transaction or expense.spend:expenses:write
expenses_get_expense_form_optionsLoads selectable options (categories, cost centers, tags, payment methods, and optionally cards) needed before editing an expense.None — follows your Perk permissions
expenses_receipt_upload_fallbackAlternate 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_expenseSends 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

Invoices

ToolDescriptionRequired scope
invoices_list_invoicesLists 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_invoiceReturns 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_linesLists 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_profilesLists invoice profiles (payment profiles). Each profile holds billing preferences such as payment method, billing address, and billing period.None — follows your Perk permissions

Reporting

ToolDescriptionRequired scope
reporting_create_travel_reportStarts 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_reportPolls 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_dataPolls 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_reportStarts 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_reportPolls 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_reportStarts 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_dataPolls 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

Policy

ToolDescriptionRequired scope
policies_get_travel_policyReturns 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

Events

ToolDescriptionRequired scope
events_list_eventsLists 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_attendanceLists 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_eventCreates 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

Cards & transactions

ToolDescriptionRequired scope
transactions_list_available_cardsLists 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_pendingLists 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

Approvals

ToolDescriptionRequired scope
approvals_get_trip_approval_linksGets 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 freshness

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

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

Did this page help you?