1. Conduid
  2. Healthcare
  3. TREK
MCP server · Healthcare

TREK

The most complete open-source travel planner: real-time collaboration, bookings, budgets, packing lists, journals, offline PWA, SSO and an AI-ready MCP server, with planet-wide place search and routing built in.

88Strong

Scored just now · breakdown

About TREK

TREK is an MCP server published by liketrek in the Healthcare category: the most complete open-source travel planner: real-time collaboration, bookings, budgets, packing lists, journals, offline PWA, SSO and an AI-ready MCP server, with planet-wide place search and routing built in.

The repository has 15K stars and 1.3K forks, with the last commit 15 hours ago. Recent commit activity is the strongest signal that reported issues will get attention.

Install

From source
git clone https://github.com/liketrek/TREK

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Tools (64)

assign_place_to_dayAssign a place to a specific day in a trip. For a multi-day tour, pass tourStageKey to put one of its stages on the day instead of the whole tour: the key of the stop the stage starts at, from the stage_stops list_tours gives (every stop but the last starts a stage). A stage is on one day at most, and a day holds a tour, or one of its stages, once.

Parameters not published.

clear_day_assignmentsRemove every place from one day in a single step. The day itself, its notes and its bookings stay; the places stay in the trip and can be planned again. Returns the removed assignment ids.

Parameters not published.

close_collab_pollClose a poll so no more votes can be cast.

Parameters not published.

create_accommodationAdd an accommodation (hotel, Airbnb, etc.) to a trip, linked to a place and a date range. This also puts the place on its check-in day, so the stay shows up as a stop on the route.

Parameters not published.

create_bucket_list_itemAdd a destination to your personal travel bucket list.

Parameters not published.

create_budget_itemAdd a budget/expense item to a trip. The cost is split equally among member_ids (omit to split across all trip members, or pass [] for a planning-only entry with no split); for an uneven split, give

Parameters not published.

create_budget_item_with_membersCreate a budget/expense item and set the trip members splitting it equally in one atomic operation. If userIds is omitted or empty, the cost is split across all trip members; pass an explicit list to split among a subset. For a planning-only entry with no split, use create_budget_item with member_ids []. Ask the user which members share this expense rather than guessing; resolve user IDs with list

Parameters not published.

create_categoryAdd a new place category to the instance-wide palette. Admin only. Prefer an existing category from list_categories: this mints one every trip on the instance will see, so only reach for it when nothing in the palette fits.

Parameters not published.

create_collab_noteCreate a shared collaborative note on a trip (visible to all trip members in the Collab tab).

Parameters not published.

create_collab_pollCreate a new poll in the collab panel.

Parameters not published.

Show all 64 tools
create_place_accommodationCreate a new place, set it as an accommodation for a date range and put it on its check-in day, in one atomic operation. Use place details from search_place results. Only use when the place does not yet exist — if it already exists, use create_accommodation directly. Set price + currency to record the accommodation cost so it shows on the item.

Parameters not published.

create_settlementRecord a settle-up payment: from_user_id paid to_user_id the given amount to settle shared expenses, optionally with a note. The amount is in the trip

Parameters not published.

delete_accommodationDelete an accommodation from a trip. The stop this booking put on its check-in day goes with it; a stop that was already there stays.

Parameters not published.

delete_bucket_list_itemRemove an item from your travel bucket list.

Parameters not published.

delete_budget_itemDelete a budget item from a trip.

Parameters not published.

delete_categoryRemove a place category from the instance-wide palette. Admin only. Places keep their data but lose the category, across every trip on the instance. Use update_category when the entry only needs fixing.

Parameters not published.

delete_collab_messageDelete a chat message (only the message owner can delete their own messages).

Parameters not published.

delete_collab_noteDelete a collaborative note from a trip.

Parameters not published.

delete_collab_pollDelete a poll and all its votes.

Parameters not published.

delete_settlementDelete a recorded settle-up payment. This is the undo for create_settlement and restores the affected balances.

Parameters not published.

freeze_budget_ratesPin today

Parameters not published.

get_airportGet a single airport by its IATA code. Returns name, city, country, coordinates, and timezone.

Parameters not published.

get_assignment_participantsGet the list of users participating in a specific place assignment.

Parameters not published.

get_atlas_statsGet the full travel picture in one call: visited/planned countries with per-country place and trip counts, continent breakdown, trip and day totals, plus the passport figures the dashboard shows (the cities visited by name and the total distance flown). Prefer this over get_country_atlas_places, which answers for one country only.

Parameters not published.

get_budget_per_personWhat each person on the trip

Parameters not published.

get_country_atlas_placesGet places saved in the user

Parameters not published.

get_settlement_summarySee each member

Parameters not published.

list_accommodationsList where a trip sleeps, stay by stay: the place, its address and position, the check-in and check-out days with their times, and the booking linked to it, its reference included, as the trip-accommodations resource reads them.

Parameters not published.

list_addonsReport which optional add-ons are enabled on this TREK instance, which collab sub-features (chat, notes, polls, whatsnext) are switched on, and whether packing bag tracking is on. Only enabled entries are listed, so anything absent is off here. Tools belonging to a disabled add-on are never registered, so call this to tell

Parameters not published.

list_bucket_listList your travel bucket list: each wish with its id, name, country and region, target date, notes and when it was reached. The ids are what update_bucket_list_item and delete_bucket_list_item take.

Parameters not published.

list_budget_itemsList the trip

Parameters not published.

list_categoriesList all available place categories with their id, name, icon and color. Use category_id when creating or updating places.

Parameters not published.

list_collab_messagesList chat messages for a trip (most recent 100, oldest-first).

Parameters not published.

list_collab_notesList the shared notes of a trip, pinned first, with their category, colour, link and files.

Parameters not published.

list_collab_pollsList all polls for a trip.

Parameters not published.

list_settlementsList the recorded settle-up payments for a trip (who paid whom, how much, when).

Parameters not published.

list_visited_regionsList visited sub-country regions grouped by country, the way the Atlas map paints them: regions derived from the places on your trips, each with a place count and a visited/planned/idea status, merged with the ones marked by hand and minus the ones dismissed.

Parameters not published.

locate_atlas_regionResolve a coordinate to the country and admin1 region the Atlas map can highlight. This is where the regionCode/countryCode pair mark_region_visited expects comes from. Prefer reverse_geocode when you want a postal address instead of atlas codes.

Parameters not published.

mark_country_visitedMark a country as visited in your Atlas.

Parameters not published.

mark_region_visitedMark a sub-country region as visited. When you only know a place or a coordinate, get the codes from locate_atlas_region first.

Parameters not published.

move_assignmentMove a place assignment to a different day.

Parameters not published.

react_collab_messageToggle a reaction emoji on a chat message (adds if not present, removes if already reacted).

Parameters not published.

reorder_day_assignmentsReorder places within a day by providing the assignment IDs in the desired order.

Parameters not published.

search_airportsSearch for airports by name, city, or IATA code. Returns matching airports with IATA code, name, city, country, coordinates, and timezone. Use before create_transport (flight) to get the correct IATA code and timezone for endpoints.

Parameters not published.

send_collab_messageSend a chat message to a trip

Parameters not published.

set_assignment_end_dayEnd the travel day after this visit and its stay. Applies only with daily travel times enabled. Pass false to follow the default again.

Parameters not published.

set_assignment_participantsSet the participants for a place assignment (replaces current list).

Parameters not published.

set_assignment_route_excludedKeep a place on its day but leave it out of that day route, or put it back. An excluded stop still shows in the day plan and on the map, and the route runs from the stop before it straight to the one after. Use it for a place only visited on foot from somewhere nearby, or one that is just a point of interest.

Parameters not published.

set_budget_item_membersSet which trip members are splitting a budget item (replaces current member list). Ask the user which members share the expense; resolve user IDs with list_trip_members.

Parameters not published.

set_leg_transport_modeSet the travel mode of a route leg for a place assignment. Use direction

Parameters not published.

toggle_budget_member_paidMark or unmark a member as having paid their share of a budget item.

Parameters not published.

token_auth_noticeNotification that this session uses a static API token which will be deprecated

Parameters not published.

unassign_placeRemove a place assignment from a day.

Parameters not published.

unmark_country_visitedRemove a country from your visited countries in Atlas.

Parameters not published.

unmark_region_visitedRemove a region from the visited list. Removing the last region of a country also removes the country, unless it was marked visited itself.

Parameters not published.

update_accommodationUpdate fields on an existing accommodation. Moving it to another check-in day or place moves the stop it put on the route with it.

Parameters not published.

update_assignment_notesSet or clear the day-specific note on a place assignment (the note assign_place_to_day and create_and_assign_place accept at creation). Pass null or an empty string to clear it.

Parameters not published.

update_assignment_timeSet the start and/or end time for a place assignment on a day (e.g.

Parameters not published.

update_bucket_list_itemUpdate a bucket list item (notes, name, target date, location).

Parameters not published.

update_budget_itemUpdate an existing budget/expense item in a trip. You can also re-split it (equally via member_ids, unevenly via members), change the currency it was entered in, move it to another date, and record who actually paid via payers (amounts in the expense currency). When changing who shares an expense or who paid, ask the user rather than guessing; resolve user IDs with list_trip_members. A foreign cur

Parameters not published.

update_categoryRename an existing place category or change its colour or icon. Admin only. Every place already carrying the category follows the change, so use this to fix a palette entry rather than to reclassify places.

Parameters not published.

update_collab_noteEdit an existing collaborative note on a trip.

Parameters not published.

update_settlementUpdate a recorded settle-up payment (who paid, who received, the amount, the currency it was made in and its note). Every field is a full replace, so restate the ones that stay the same. When the server has no exchange rate for a foreign

Parameters not published.

vote_collab_pollVote on a poll option (or remove vote if already voted for that option).

Parameters not published.

Ask AI

✦

Ask AI about TREK

Powered by Claude

Ask about TREK — answers draw on its README.

Security checks

Static checks derived from the repository 5 hours ago. Heuristics on the source, not an audit.

  • ✓README presentThe repository ships documentation.
  • ✓License declaredUsable under a stated license.
  • ✓Tests presentA test suite exists in the repository.
  • ✓Dependencies pinnedA lockfile pins dependency versions.

2 checks have not been run yet.

Releases

v5.1.0v5.1.0 · 31 Oct 20265.1.0 Full diff since 5.0.1 Highlights TREK now runs its own map services, on servers sponsored by dataforest cloud. Place search, address search and routing come from TREK's own servers instead of public services that limit, slow down or…
v5.0.1v5.0.1 · 28 Oct 20265.0.1 Full diff since 5.0.0 Fixed Assistant The assistant keeps working after changes were applied. On ChatGPT, the OpenAI reasoning models and Claude, a thread in which the assistant had kept a trip note or read an attached file failed…
v5.0.0v5.0.0 · 25 Oct 2026!TREK 5.0 in two minutes: Tours with a 3D flyover, the photo book laid out in one click, the app on your phone, MCP and the built-in assistant Watch it as a video 5.0.0 Full diff since 4.3.4 I could tell you that this is the biggest…
v4.3.4v4.3.4 - Security release · 21 Oct 2026Hey there, just a quick release to build TREK with the NodeJS version patched. There's no new functionalities yet but we're working hard on TREK v5 :) We strongly recommend updating TREK to this version ASAP. For more details:…
v4.3.3v4.3.3 · 26 Sep 20264.3.3 Full diff since 4.3.2 Fixed Logging in through a self-hosted identity provider works again when its host name also has an IPv6 link-local record. Since 4.3.0 a single blocked address refused the whole name, and LAN DNS servers…

README

Every part of your trip. One app you own.

TREK has grown from a travel planner into a whole ecosystem for trips: plan together in real time on a live map, build hikes, tours and road trips, keep bookings and shared costs in order, pack, write the journal, lay out the photo book and hand the busy work to the built-in AI. Self-hosted, on the web, on your phone and offline.

                     

PUBLIC SERVICES PROUDLY SPONSORED BY


What you get

Most of what follows is an addon an admin switches on or off. Lists, Costs, Documents, Collab, Tours, Vacay and Atlas ship on; Journey, Collections, MCP, the AI assistant, AI Parsing, Road trip, Dawarich and AirTrail ship off and are marked below.

🧭 Planning

  • Day plans: drag places, notes and bookings between days with undo, or drop a map marker straight onto a day
  • Maps: Leaflet, Mapbox GL or MapLibre GL (OpenFreeMap, no token) with clustering, photo markers, route lines and a whole-trip route overview
  • Places: search the TREK Places index and OpenStreetMap with no key, or Google Places and Amap with one. Descriptions, hours and photos from Wikipedia, Wikidata and Wikimedia Commons, plus a rating and a custom image per place
  • Explore: nearby places by category for the map view, from the TREK Places index with Overpass as fallback
  • Routes: auto-sort a day (nearest neighbour then 2-opt, locked stops and hotels stay put), a travel mode per leg over OSRM or Valhalla, then open the day in Google Maps or CoMaps and a place in seven navigation apps
  • Public transport: door-to-door itineraries over Transitous, or Google where Transitous has no data
  • Import and export: Google Maps and Naver Maps lists, Google Maps directions links, GPX, KML and KMZ in; GPX and an ICS feed per trip or across all trips out
  • Weather: 16-day forecast from Open-Meteo, no key, and the archive for dates beyond it
  • Trip dates: move a trip and its days re-date themselves, with the bookings along or re-anchored. Trips also copy and archive
  • Road trip (off by default): drives with stops, day windows and arrival times that recompute, route alternatives, hazards and EV charging with range

🥾 Tours

  • Seven tour types: hike, city walk, run, bike (touring, road, gravel, MTB), paddle (kayak, canoe, SUP), horse ride, and ski and winter (alpine, cross-country, touring, snowshoe, winter hike)
  • Routing: legs routed over Valhalla with shaping points, hand-drawn legs, route variants, round hikes of a wished length and trip places as stops, all with undo
  • Hikes: routed within a maximum SAC grade (T1 to T6), the trail grades along the way, and via ferratas on the map
  • Terrain: elevation profile, ascent and descent, and a 3D terrain map with grade colouring and a flyover, no token needed. Topo, hiking, cycling and satellite bases with sea marks and ski pistes as overlays
  • Multi-day tours: one route cut into stages and spread across the trip's days
  • Along the way: viewpoints, huts, water, food and more within a corridor of the route, inserted as a stop with the detour it adds
  • Ski, paddle and city walks: a piste router by difficulty and lift type; a water router with portages, locks and a wind forecast; city walks with stays, opening hours and transit between stops
  • Plan against reality: link a recorded GPX to a planned day and compare distance, ascent and time. Import trails from a wanderer instance, save tours to a collection and take them into another trip

🧳 Bookings and money

  • Reservations: 18 booking types with status, confirmation code, travellers and attached files
  • Flights and trains: several legs with stopovers and endpoint timezones, against 4,045 bundled airports so local times resolve without a key
  • Accommodation: a stay spans a range of nights with a check-in window
  • Booking import: EML, PDF, PKPass, HTML, TXT and photos of confirmations, through KItinerary or an AI model, with a review step before anything is saved. Prices become linked costs
  • AirTrail (off by default): import flights from a self-hosted AirTrail instance and keep them in sync
  • Costs: split in integer cents with equal or custom shares, several payers, settle-up suggestions, a per-person summary, a settlement log and CSV export. A receipt photo can fill in an expense
  • Currencies: one per expense with the rate frozen at entry, from Frankfurter with no key
  • Packing lists and to-dos: categories, templates, assignees and visibility tiers; bags with weights as an admin switch; to-dos with due dates, priorities and reminders
  • Files: attach to a trip, place, day or booking, 50 MB each and 500 MB for video, with trash and restore
  • PDF export: cover, place photos, day notes, bookings and costs, with an optional page break per day

👥 Collaboration

  • Real-time sync (WebSocket): edits land live for everyone who has the trip open
  • Members: add by email or username, hand over ownership, or add guests who have no login at all
  • Permissions: an admin maps each of 17 trip actions to admin, trip owner, trip member or everybody
  • Invites: one reusable link per trip with an optional expiry, and admin signup invites that drop a new account straight into a trip
  • Public share: a read-only trip page without an account, with switches for map, bookings, packing, costs and chat
  • Collab: group chat with replies, reactions and link previews, shared notes, links, polls and a What's Next list, each one its own switch
  • Notifications: an inbox grouped by day with answers right from the notification, and a per-user matrix of events against in-app, email, webhook, ntfy, Web Push and plugin channels

📔 Journey and TREK Studio

  • Journey (off by default): dated entries with story, mood, weather and tags, photos and video from uploads, Immich or Synology Photos, map views, co-authors, drafts and a public share link
  • Linked journal: a trip can show one journal as its own, with the members picked on the trip as viewers or editors
  • Recorded days (with Dawarich): keep a day's recorded route and turn its stays into entries
  • TREK Studio: turn a journal into a printable photo book. 34 print-licensed typefaces, 17 themes, 108 designed pages in twelve styles, 160 recolourable stickers, text effects, layers and a Travel tab with route maps, country stamps and trip figures
  • Auto layout: lays the whole book on the designed pages in the style of its theme, every photo in a frame, or rebuilds one spread
  • Print and share: PDF export as pages or spreads with crop marks, several people editing at once, and design files to move a spread into another book

🗺️ Atlas, Vacay and Collections

  • Atlas: countries and regions visited on geoBoundaries outlines, a bucket list, travel stats, and a tour activities tab with planned against recorded totals
  • Vacay: leave calendar with half days, public holidays from date.nager.at, school holidays for 16 European countries, company holidays, carry-over between years, and joint or read-only sharing
  • Collections (off by default): a place library outside any trip with lists, labels, ratings, a status per place, cover images, GPX and file export, copy into a trip, and sharing by invite
  • Dawarich (off by default): link a Dawarich instance for recorded tracks, suggested stays and countries for the Atlas

🤖 AI assistant and MCP

  • AI assistant (off by default): a chat that plans with you in a trip, across all your trips, in a journal and in Studio, and works with tours, costs, bookings, packing, Vacay and the Atlas
  • Your own model: an API key for Anthropic, OpenAI, Gemini or OpenRouter, a ChatGPT plan, or any OpenAI-compatible endpoint, set for the instance or per user
  • You stay in charge: reads run at once, every change waits as a card to apply or discard and can be undone for 15 minutes. Nothing leaves before you agree to the provider, and a file's text only with your consent
  • Attachments: drop a booking confirmation, a GPX file or a photo into the chat, and the assistant offers what to do with it
  • MCP server (off by default): OAuth 2.1 with mandatory PKCE and dynamic client registration, 410 tools, 30 resources and 4 prompts, 35 scopes in 17 groups ticked on the consent screen, and every call in the audit log
  • Addon-aware: twelve addon gates decide which tools a session sees, and flipping one re-registers live sessions

🧩 Plugins

  • Third-party plugins: install from the TREK registry or sideload a zip, with their own pages under /plugins/<id>
  • Sandboxed: one child process per plugin, 66 grantable permissions, an admin-edited outbound host allowlist, memory and call caps
  • Trust: registry downloads are pinned by sha256 and checked against the author's minisign key, a sideloaded zip is marked unverified, and TREK_PLUGINS_ENABLED=false turns the whole system off
  • Extension points: map layers, place details, day schedules, PDF sections, Atlas layers, journal rows, trip warnings, search and photo providers, route profiles, notification channels and MCP tools
  • SDK: trek-plugin-sdk with a CLI to create, validate, run against real data, sign and publish

📱 Mobile and offline

  • Installable: iOS and Android straight from the browser, no App Store, standalone with a themed status bar
  • Phone layouts: their own screens for every part of the app, with a bottom bar and dashboard widgets the user orders
  • Offline reads: the app shell is precached and trips, places, tours, files and nearby places live in a per-user IndexedDB store, so a trip opens with no network
  • Offline writes: changes queue and replay with an X-Idempotency-Key, and a stale edit waits for a keep-mine or keep-theirs choice
  • Offline maps: raster and vector tiles of a trip downloaded ahead, and a switch that takes the whole app offline on purpose

⚙️ Admin, accounts and security

  • Sign-in: password, OIDC and passkeys each switch on and off on their own, OIDC_ONLY leaves SSO as the only way in, and an OIDC claim can grant admin
  • SSO and 2FA: one OIDC provider by discovery with PKCE (Authentik, Keycloak, Google and the like), TOTP with backup codes that an admin can require, and passkeys that count as the second factor
  • Sessions: every sign-in is a session you can see and end, one by one or all others at once
  • Hardening: rate limits on sign-in, reset and 2FA, a password policy, secrets encrypted at rest and masked on read, and an SSRF guard on every URL you configure
  • Admin panel: users and the permission matrix, defaults for new users, categories and templates, addons, plugins, storage, notifications, MCP tokens, backups, audit log and releases
  • Backups and storage: scheduled backups with retention that restore their own secrets, and local or S3-compatible storage per content category with replicas
  • Appearance: light, dark or follow the OS, seven colour schemes plus a custom accent, transparency, density, reduced motion and text size
  • 28 languages: en, de, es, fr, it, nl, hu, ru, zh, zh-TW, pl, cs, ar (right to left), he (right to left), br, id, tr, ja, ko, uk, gr, sv, vi, ca, az, et, sk, th
  • Help center: a ? in the top bar with 381 step-by-step guides with screenshots, searched together with the wiki that ships in the image

Powered by dataforest cloud

Every TREK installation in the world searches through servers that dataforest cloud sponsors.

The place index with over 88 million places, the address search in every TREK language and the planet-wide routing all run on dataforest cloud in Frankfurt, Germany, free of charge for everyone who self-hosts TREK. Without this sponsorship, these services would not exist in this form.

Thank you, dataforest, for backing open source this generously. 💚

Looking for a server for your own TREK? dataforest cloud is where TREK's own services live.

AI usage

We use LLM-assisted coding tools across parts of this codebase. Nothing ships that a maintainer has not read and understood: every change goes through a pull request, is reviewed and tested, and has a human who can answer for it. "The AI wrote that" is not an answer any of us would accept from ourselves.

See How we use AI in TREK for the details.

Get started in 30 seconds

ENCRYPTION_KEY=$(openssl rand -hex 32) docker run -d --name trek -p 3000:3000 \
  -e ENCRYPTION_KEY=$ENCRYPTION_KEY \
  -e COOKIE_SECURE=false \
  -v ./data:/app/data -v ./uploads:/app/uploads mauriceboe/trek

Open http://localhost:3000, or http://<server-ip>:3000 from another machine. On first boot TREK seeds an admin account — if you set ADMIN_EMAIL/ADMIN_PASSWORD those are used, otherwise the credentials are printed to the container log (docker logs trek).

COOKIE_SECURE=false is only for trying TREK over plain HTTP: without it the browser drops the session cookie and the login does not stick. Once TREK sits behind HTTPS (see Reverse Proxy), remove it.

[!TIP] No server yet? TREK's own public services run on dataforest cloud, our infrastructure sponsor. A small seed is plenty for a TREK instance and is ready within a minute.

Docker Compose  ·  Helm / Kubernetes  ·  Install as PWA  ·  Reverse Proxy

Tech stack

Node.js NestJS SQLite React Vite TypeScript Tailwind Leaflet Docker

Real-time sync via WebSocket (ws). Backend on NestJS 11. State with Zustand. Auth via JWT + OAuth 2.1 + OIDC + Passkeys (WebAuthn) + TOTP MFA. Weather via Open-Meteo (no key required). Maps with Leaflet and Mapbox GL.

The repository ships a ready-to-use docker-compose.yml with secure defaults and every option documented inline. Download it, then:

docker compose up -d

See Install with Docker Compose for the full walkthrough.

helm repo add trek https://chart.liketrek.com
helm repo update
helm install trek trek/trek

See charts/README.md for values.

TREK works as a Progressive Web App — no App Store needed.

  1. Open TREK in the browser (HTTPS required)
  2. iOS: Share ▸ Add to Home Screen
  3. Android: Menu ▸ Install app (or Add to Home Screen)

TREK then launches fullscreen with its own icon, just like a native app.

Updating

See Updating — Docker Compose, Docker run, Helm, Portainer, Unraid and Proxmox, plus the encryption-key note.

For production, put TREK behind a TLS-terminating reverse proxy. TREK uses WebSockets for real-time sync, so the proxy must support WebSocket upgrades on /ws.

If you use the MCP addon, the proxy must also pass the Mcp-Session-Id header through in both directions on /mcp — Nginx and Caddy do this by default, but a proxy that strips it makes every tool call open a new session instead of reusing one. See the Reverse Proxy wiki page for details.

server {
    listen 80;
    server_name trek.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name trek.yourdomain.com;

    ssl_certificate     /etc/ssl/fullchain.pem;
    ssl_certificate_key /etc/ssl/privkey.pem;

    # 500 MB covers backup-restore uploads (capped at 500 MB server-side).
    client_max_body_size 500m;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /ws {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400;
    }

    # Only needed if you use the MCP addon. Responses are Server-Sent Events,
    # so buffering must be off or tool results arrive late.
    location /mcp {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
        proxy_read_timeout 3600s;
    }
}
trek.yourdomain.com {
    reverse_proxy localhost:3000
}

Caddy handles TLS and WebSockets automatically.

Environment variables

Every variable, its default and what it does: see Environment Variables.

Data sources

The Atlas map's country and sub-national (province/county) boundaries come from geoBoundaries (Runfola et al., 2020), licensed CC BY 4.0. See NOTICE.md for full third-party attributions.

License

TREK is AGPL v3. Self-host freely for personal or internal company use. If you modify and offer TREK as a network service to third parties, your modifications must be open-sourced under the same licence.

README fetched from the repository 5 hours ago. The original is authoritative.

Questions

About TREK

How do I install TREK?

No package has been published for this server, so install it from source: clone the repository and follow its README.

Is TREK safe to use with an AI agent?

Its trust score is 88 out of 100 (strong). It passes 4 of the 4 static security checks run so far. It has no ConduID identity yet, so agent calls to it are not receipted.

Is TREK still maintained?

Yes — the latest release is v5.1.0 (31 Oct 2026), and the last commit was 15 hours ago. The repository has 15K stars and 11 open issues.