Treka's MCP server lets an AI assistant work with one outdoor operator's Treka account: read trips, departures, bookings, revenue and rentals, and, only when the owner or admin allows it, make the changes they approve, including booking a guest and sending them a secure payment link. Muse, ChatGPT and Claude connect to it today.
MCP endpoint
https://treka.app/api/mcp
https://treka.app/api/mcptreka.read lets the assistant read. treka.write is added only when the owner or admin turns on Allow changes.https://treka.app/.well-known/oauth-protected-resource/api/mcphttps://treka.app/.well-known/oauth-authorization-serverThe assistant finds Treka's sign-in server from the endpoint's 401 response and registers itself. Treka only sends sign-in codes to the assistants' own callback addresses, or to an app on your own computer.
You sign in to Treka and land on treka.app/connect/ai, which names the assistant and lists exactly what it will be able to read.
You pick the company. Only companies where you are the owner or an admin are offered.
Allow changes is off unless you turn it on. Off, the connection can only read. On, the change tools are offered too, and the assistant asks you before each change.
Treka gives the assistant a token that works only on this endpoint, for that company. Access tokens last 60 minutes; refresh tokens last 90 days and are replaced each time they are used.
Disconnect any time from Connections in the Treka portal. Access stops at once, and it also stops if the person who connected is no longer an owner or admin.
You need a Treka account where you are the company's owner or an admin. Then, in the assistant you use:
10 tools read and 14 make changes. The change tools are offered only on connections where the owner or admin turned on Allow changes. The names, descriptions and inputs below are exactly what the server sends to the assistant.
| Tool | What it does | Type | Annotations |
|---|---|---|---|
| Company overview | Read | readOnlyHint: true destructiveHint: false | |
| List trips | Read | readOnlyHint: true destructiveHint: false | |
| List departures | Read | readOnlyHint: true destructiveHint: false | |
| Search bookings | Read | readOnlyHint: true destructiveHint: false | |
| Get a booking | Read | readOnlyHint: true destructiveHint: false | |
| Revenue summary | Read | readOnlyHint: true destructiveHint: false | |
| List guide invoices | Read | readOnlyHint: true destructiveHint: false | |
| List reviews | Read | readOnlyHint: true destructiveHint: false | |
| List gift cards | Read | readOnlyHint: true destructiveHint: false | |
| List rentals | Read | readOnlyHint: true destructiveHint: false | |
| Add a departure | Write | readOnlyHint: false destructiveHint: false | |
| Change a departure | Write | readOnlyHint: false destructiveHint: true | |
| Delete a departure | Sensitive write | readOnlyHint: false destructiveHint: true | |
| Add a manual booking | Write | readOnlyHint: false destructiveHint: false | |
| Book a guest with a payment link | Sensitive write | readOnlyHint: false destructiveHint: true | |
| Update guest details | Write | readOnlyHint: false destructiveHint: true | |
| Change party size | Write | readOnlyHint: false destructiveHint: true | |
| Add a booking note | Write | readOnlyHint: false destructiveHint: false | |
| Confirm a booking | Write | readOnlyHint: false destructiveHint: false | |
| Cancel a booking | Sensitive write | readOnlyHint: false destructiveHint: true | |
| Email a booking's guest | Sensitive write | readOnlyHint: false destructiveHint: true | |
| Edit a trip | Write | readOnlyHint: false destructiveHint: true | |
| Approve a guide invoice | Sensitive write | readOnlyHint: false destructiveHint: true | |
| Reject a guide invoice | Sensitive write | readOnlyHint: false destructiveHint: true |
Company overview
ReadRead-only. Start here. The connected Treka company's name, currency and time zone, plus a snapshot: published trips, departures in the next 30 days, and bookings and revenue from the last 30 days.
None
List trips
ReadRead-only. The company's trips (tours/experiences) with price, group size, duration, location and rating. Published trips only unless include_unpublished is true.
include_unpublished boolean — Also list drafts and hidden trips.search string — Match words in the trip title.limit integer — How many to return (default 100, at most 200).List departures
ReadRead-only. Scheduled departures (trip dates) with capacity and seats booked. Defaults to the next 30 days. Dates are YYYY-MM-DD.
from string — Start date (YYYY-MM-DD), default today.to string — End date (YYYY-MM-DD), default 30 days after from.trip_id string — Only this trip (id from list_trips).limit integer — How many to return (default 100, at most 200).Search bookings
ReadRead-only. Find bookings, with guest name, email, phone, party size, status and amounts. Filter by departure date or booking date, status, trip, or a guest name/email/phone search. Newest first.
from string — YYYY-MM-DDto string — YYYY-MM-DDdate_field departure | booked — What from/to filter on: the trip's departure date (default) or when it was booked.status pending | confirmed | cancelled | completed | inquiry — Only this status.trip_id string — Only this trip (id from list_trips).search string — Guest name, email or phone.limit integer — How many to return (default 50, at most 200).Get a booking
ReadRead-only. One booking in full, by its id (from search_bookings).
booking_id string, required — The booking's id (from search_bookings or get_booking).Revenue summary
ReadRead-only. Booking revenue between two booking dates, grouped by month or by trip — counted the way the Treka dashboard does (confirmed and completed bookings). Defaults to the last 90 days by month. Refunds are not subtracted.
from string — YYYY-MM-DD (booked on or after)to string — YYYY-MM-DD (booked on or before)group_by month | trip — Default month.List guide invoices
ReadRead-only. Invoices guides sent the company for their pay, with status, amount and how they were paid. Newest first.
status string — e.g. pending, approved, paid, rejectedlimit integer — How many to return (default 50, at most 200).List reviews
ReadRead-only. Guest reviews of the company's trips, newest first.
max_rating integer — Only reviews at or below this rating. 1–5limit integer — How many to return (default 50, at most 200).List gift cards
ReadRead-only. Gift cards the company sold or issued, with balance, buyer and recipient. Newest first.
status string — Only this status (e.g. active, redeemed).limit integer — How many to return (default 50, at most 200).List rentals
ReadRead-only. The company's rentable gear (Rentals): name, category, variants/sizes, rental price and price type, deposit and quantity in stock. Give start_date and end_date to also see how many of each are free for those dates. Active rentable items only unless include_inactive is true.
search string — Match words in the item name.category string — Only this category (e.g. Climbing).start_date string — YYYY-MM-DD. With end_date: availability for that range.end_date string — YYYY-MM-DD, on or after start_date.include_inactive boolean — Also list items that are switched off or not rentable.limit integer — How many items to return (default 50, at most 100).Add a departure
WriteChanges Treka: adds a bookable date for a trip. Seats default to the trip's max group size. Times are the company's local time.
trip_id string, required — The trip's id (from list_trips).start_date string, required — YYYY-MM-DDstart_time string — HH:MM (24h), optional — all day if left outend_date string — YYYY-MM-DD for multi-day tripsseats integer — Total seats. 1–10000Change a departure
WriteChanges Treka: sets a departure's total seats (never below seats already booked), marks it sold out or reopens it, or hides/shows it for booking.
departure_id string, required — The departure's id (from list_departures).seats integer — New total capacity 1–10000sold_out boolean — true marks it sold out, false reopens it.bookable boolean — false hides it from bookingDelete a departure
Sensitive writeChanges Treka: permanently deletes a departure that has no bookings. A departure with bookings must be cancelled in the Treka portal, where refunds are handled. Sensitive: before calling, show the user exactly what will happen and get their explicit approval in this conversation.
departure_id string, required — The departure's id (from list_departures).Add a manual booking
WriteChanges Treka: records a booking taken outside Treka (phone, email, walk-in), holding seats on a departure. No card is charged and no email is sent; an optional amount is recorded as owed by invoice. Use hold=true to hold seats as pending until confirmed.
departure_id string, required — The departure's id (from list_departures).guest_name string, required — Lead guest's name.guest_email string, required — Lead guest's email.guest_phone string — Optional.guests integer, required — Party size. 1–500amount number — Total owed, in the company currency (optional)notes string — Optional notes on the booking.hold boolean — true = pending hold instead of confirmedBook a guest with a payment link
Sensitive writeChanges Treka, and can send an email: makes a Treka booking link for a guest on a departure and returns its secure checkout URL so the user can share it. With email_guest=true, Treka also emails the link to the guest. The guest pays on Treka's own Stripe-hosted checkout at the trip's normal price; the booking holds seats from when they check out and confirms when they pay. No card details pass through the assistant, and the assistant never takes the payment. Fails if the departure doesn't have enough seats left. Sensitive: before calling, show the user exactly what will happen and get their explicit approval in this conversation. Show the guest, party size, departure and whether Treka will email them.
departure_id string, required — The departure's id (from list_departures).guest_name string, required — Lead guest's name.guest_email string, required — Lead guest's email (the link is for them).guests integer, required — Party size. 1–500email_guest boolean — true = Treka also emails the link to the guest (default false).message string — Optional note shown in the email and on the booking page. ≤ 1000 charactersdeposit_only boolean — true = the guest pays the trip's deposit now and the balance later.expires_in_days integer — How long the link works (default 7 days). 1–30Update guest details
WriteChanges Treka: overwrites a booking's guest name, email or phone. Sends nothing to the guest.
booking_id string, required — The booking's id (from search_bookings or get_booking).guest_name string — New name (optional).guest_email string — New email (optional).guest_phone string — New phone (optional).Change party size
WriteChanges Treka: sets how many guests are on a booking, moving seats on its departure. Only for bookings with nothing to charge or refund (manual/invoice bookings or free ones); priced online bookings must be changed in the Treka portal so the price is recalculated.
booking_id string, required — The booking's id (from search_bookings or get_booking).guests integer, required — New party size. 1–500Add a booking note
WriteChanges Treka: adds a private note to a booking (the operator's notes; guests don't see it).
booking_id string, required — The booking's id (from search_bookings or get_booking).note string, required — The note (up to 2000 characters).Confirm a booking
WriteChanges Treka: confirms a pending booking (seats are already held). Doesn't charge anything.
booking_id string, required — The booking's id (from search_bookings or get_booking).Cancel a booking
Sensitive writeChanges Treka: cancels an UNPAID booking and frees its seats. No refund is issued and no email is sent. Bookings with any payment must be cancelled in the Treka portal, where the refund is decided. Sensitive: before calling, show the user exactly what will happen and get their explicit approval in this conversation.
booking_id string, required — The booking's id (from search_bookings or get_booking).reason string — Why (kept on the booking).Email a booking's guest
Sensitive writeSends an email: the guest on a booking gets a plain-text email from the company through Treka (replies go to the company). Write it as the company. At most 50 a day per company. Sensitive: before calling, show the user exactly what will happen and get their explicit approval in this conversation. Show the exact subject and text.
booking_id string, required — The booking's id (from search_bookings or get_booking).subject string, required — Email subject. ≤ 150 charactersmessage string, required — Plain-text body. ≤ 5000 charactersEdit a trip
WriteChanges Treka: overwrites a trip's details: title, subtitle, description, meeting point, duration, price per person (whole units, more than 0), group sizes, and what's included / not included / requirements (lists replace the whole list). Publishing, payment rules and photos stay in the Treka portal.
trip_id string, required — The trip's id (from list_trips).title string — ≤ 150 characterssubtitle string — ≤ 250 charactersdescription string — ≤ 20000 charactersmeeting_point string — ≤ 500 charactersduration string — e.g. '4 hours', '3 days' ≤ 100 charactersprice number — Per person, whole currency units.max_group_size integer — 1–10000min_group_size integer — 1–10000included string[]not_included string[]requirements string[]Approve a guide invoice
Sensitive writeChanges Treka: approves a guide's pending invoice. This does NOT pay it — the company pays from the Treka portal, its usual payroll, or (when guide pay through QuickBooks is on) the QuickBooks bill this creates. Sensitive: before calling, show the user exactly what will happen and get their explicit approval in this conversation.
invoice_id string, required — The guide invoice's id (from list_guide_invoices).Reject a guide invoice
Sensitive writeChanges Treka: rejects a guide's pending invoice with a reason the guide sees. Sensitive: before calling, show the user exactly what will happen and get their explicit approval in this conversation.
invoice_id string, required — The guide invoice's id (from list_guide_invoices).reason string, required — Shown to the guide. ≤ 500 charactersSupport
Email us about setup, a tool that misbehaves, or a security concern, and a real person answers. support@treka.app
Claim your 30-day free trialHow Muse, ChatGPT and Claude work with Treka