{"name":"com.voyagier/cli","slug":"voyagier-cli","title":"Voyagier","description":"Book real travel from your agent — flights, hotels & activities behind a price-gated checkout.","url":"https://mcp.market/server/voyagier-cli","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"ai","tags":["ai","maps"],"presence":{"score":30,"stars":1,"forks":0,"downloads_week":71,"last_push_at":"2026-09-24T21:34:10.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Voyagier-Travel/voyagier-cli","website":"https://www.voyagier.com/agents","version":"2.14.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@voyagier/cli","version":"2.14.0","runtimeHint":"npx","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional"}],"environmentVariables":[{"description":"Voyagier Personal Access Token (travel.voyagier.com → Settings → Personal Access Tokens). Access is by invitation — request at https://www.voyagier.com/agents.","isRequired":true,"isSecret":true,"name":"VOYAGIER_TOKEN"},{"description":"Voyagier API base URL. Defaults to production; override only for non-production environments.","name":"VOYAGIER_API_URL"}]}],"tools":[{"name":"add_traveller","description":"Add a traveller to a trip plan. Travellers are required before search. Gender and date of birth are required at flight checkout; passport data hard-gates international reservations (set those via the CLI travellers update later). Loyalty programs are applied at checkout best-effort — a booking never fails because of them.","write_action":false,"price_micros":0,"input_schema":null},{"name":"agent_docs","description":"Print the full Voyagier agent reference (AGENT.md) as markdown — the canonical integration guide for the compose/close loop, error codes, and quirks.","write_action":false,"price_micros":0,"input_schema":null},{"name":"book","description":"Create a real Stripe checkout for the bookable items. REQUIRES expect_total — this is the price hard-gate: the checkout is created only if the chargeable subtotal equals expect_total exactly (cents-compared), else it fails closed with PRICE_CHANGED and NO checkout is created. Get the current subtotal from book_dry_run first. Never retry a successful book (unpaid sessions are invisible and a retry ","write_action":true,"price_micros":0,"input_schema":null},{"name":"book_dry_run","description":"Preview a checkout WITHOUT creating one and WITHOUT needing a price gate: returns the chargeable subtotal, blockers, existing checkouts, and the next step. Optionally pass expect_total to also get a gate verdict (data.gate.{wouldPass,failReason}) — pre-verify without risking PRICE_CHANGED. This is the checkout truth; run it before book.","write_action":true,"price_micros":0,"input_schema":null},{"name":"booking_status","description":"Show payment + booking status for past checkouts on a plan (post-payment confirmation lookup). Booking-record amounts are raw CENTS.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_client","description":"Create or return an existing advisor CRM client by email (idempotent upsert). A trip plan requires a clientId. Returns { client, ok, created }.","write_action":true,"price_micros":0,"input_schema":null},{"name":"doctor","description":"Self-check the CLI environment (auth, schema reachability, local state, version) before doing real work. Run this first when you hit an unfamiliar error.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_selection_options","description":"Read a selection's options. Search is ASYNC: when a search returns optionCount 0 the inventory fetch is still running — with wait=true (default) this polls with backoff until the status is terminal (READY / NO_RESULTS / AWAITING_INPUT / FETCH_ERROR), then returns the options to select from.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plan_status","description":"ONE call answering 'what's left before this plan can book?'. Switch on data.readiness: BOOKED | READY_TO_BOOK | BLOCKED (act on data.blockers[]/nextSteps[]) | IN_PROGRESS (system is working — poll, don't act). book_dry_run is the checkout truth on any contradiction.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plan_trip","description":"Scaffold a trip plan: creates the plan + a default goal graph (a round-trip + hotel TEMPLATE) and returns { tripPlanId, travellerIds, nextSteps }. It does NOT search or select — follow nextSteps to compose. Prune goals the brief doesn't need with the shape flags: one_way (drops the Return Flights goal), flight_only (drops the hotel goal), hotel_only (drops ALL flight goals). Omitting return alone ","write_action":false,"price_micros":0,"input_schema":null},{"name":"quote","description":"Produce the advisor offer snapshot for a plan: items, chargeableTotal, and a machine-readable acceptance block { command, itemIds, expectedTotal }. quote's chargeableTotal equals the book price gate, so the acceptance total can never fail its own gate on an unchanged cart.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_activities","description":"Search bookable activities/experiences against the plan's Activity goal. Returns a compact envelope { selectionId, optionCount, topOptions[≤10] }. If optionCount is 0 the async fetch is still running — poll get_selection_options with wait, then select.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_flights","description":"Search flights against the plan's Flight goal (REUSES the goal's selection — does not create a new one). Returns a compact envelope { selectionId, optionCount, topOptions[≤10] } (round trips also return returnSelectionId). If optionCount is 0 the async fetch is still running — poll get_selection_options with wait. Round trip: pick BOTH legs; the SAME optionId appears in both legs' lists (leg-mirro","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_hotels","description":"Search hotels against the plan's Hotel goal. Returns a compact envelope { selectionId, optionCount, topOptions[≤10] }. Prices are STAY TOTALS, not nightly. If optionCount is 0 the async fetch is still running — poll get_selection_options with wait, then select.","write_action":false,"price_micros":0,"input_schema":null},{"name":"select_option","description":"Choose an option on a selection by explicit selection + option id (defaults to choosing for all travellers). With wait=true (default), after the pick succeeds it polls until the pick is reflected server-side AND readiness settles, then returns a plan-status snapshot. A timed-out wait never means the pick failed. Round trip: call once per leg — the identical optionId on both legs is intended.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-09-24T21:40:10.529Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-24T21:40:10.486Z","components":{"code":{"score":25,"max":25,"notes":["63 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@voyagier/cli","version":"2.14.0","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-07-27T17:43:03.508Z","repositoryUrl":"git+https://github.com/Voyagier-Travel/voyagier-cli.git","weeklyDownloads":71}],"repo":{"found":true,"owner":"Voyagier-Travel","repo":"voyagier-cli","archived":false,"pushedAt":"2026-09-24T21:34:10Z","stars":1,"forks":0,"openIssues":2,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/171599618?v=4","ownerCreatedAt":"2024-06-03T15:58:57Z","license":"Apache-2.0"},"icon":{"url":"https://www.voyagier.com/favicon.ico?favicon.0x3dzn~oxb6tn.ico?dpl=dpl_AuvA4AfRnX47vBmyGPBjANJoNs3Z","source":"site","width":256,"height":256},"presence":{"stars":1,"forks":0,"downloadsWeek":71,"license":"Apache-2.0","lastPushAt":"2026-09-24T21:34:10.000Z","score":30}}}},"grade_history":[],"reviews":[]}