{
  "slug": "io-github-mikkoparkkola-trvl",
  "name": "io.github.MikkoParkkola/trvl",
  "title": "trvl",
  "description": "Door-to-door travel MCP + CLI: flights, hotels, trains, cars, ferries. No API keys, Go binary.",
  "version": "1.27.0",
  "publishedAt": "2026-10-10T13:49:15.105111Z",
  "updatedAt": "2026-10-10T13:49:15.105111Z",
  "repoUrl": "https://github.com/MikkoParkkola/trvl",
  "websiteUrl": "https://github.com/MikkoParkkola/trvl",
  "namespace": {
    "type": "github",
    "owner": "MikkoParkkola"
  },
  "kind": "local",
  "packages": [
    {
      "registryType": "oci",
      "identifier": "ghcr.io/mikkoparkkola/trvl:1.27.0",
      "version": null,
      "transport": "stdio",
      "runtimeHint": null
    },
    {
      "registryType": "npm",
      "identifier": "trvl-mcp",
      "version": "1.27.0",
      "transport": "stdio",
      "runtimeHint": "npx"
    }
  ],
  "remotes": [],
  "envVars": [
    {
      "name": "TRVL_MCP_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Bearer token for HTTP-mode auth (unused in stdio). Optional."
    },
    {
      "name": "TRVL_MCP_READ_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Read-scoped bearer token for HTTP-mode auth (unused in stdio). Optional."
    },
    {
      "name": "TRVL_MCP_WRITE_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Write-scoped bearer token for HTTP-mode auth (unused in stdio). Optional."
    },
    {
      "name": "TRVL_MCP_OAUTH_INTROSPECTION_URL",
      "isSecret": false,
      "isRequired": false,
      "description": "OAuth token introspection endpoint for HTTP-mode auth (unused in stdio). Optional."
    },
    {
      "name": "TRVL_MCP_OAUTH_CLIENT_ID",
      "isSecret": false,
      "isRequired": false,
      "description": "OAuth client ID for HTTP-mode token introspection (unused in stdio). Optional."
    },
    {
      "name": "TRVL_MCP_OAUTH_CLIENT_SECRET",
      "isSecret": true,
      "isRequired": false,
      "description": "OAuth client secret for HTTP-mode token introspection (unused in stdio). Optional."
    },
    {
      "name": "TRVL_MCP_OAUTH_AUDIENCE",
      "isSecret": false,
      "isRequired": false,
      "description": "Expected OAuth audience for HTTP-mode token introspection (unused in stdio). Optional."
    },
    {
      "name": "TRVL_MCP_TOOL_MODE",
      "isSecret": false,
      "isRequired": false,
      "description": "Selects which MCP tool set is registered (e.g. smart/full). Optional, defaults to full set."
    },
    {
      "name": "TRVL_MCP_TOOL_TIMEOUT",
      "isSecret": false,
      "isRequired": false,
      "description": "Per-tool-call timeout override. Optional, defaults to the built-in timeout."
    },
    {
      "name": "AFKLM_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Air France-KLM API key; unlocks that airline's live fares/award search. Optional, trvl works without it."
    },
    {
      "name": "AFKLM_OP_REF",
      "isSecret": false,
      "isRequired": false,
      "description": "1Password reference for the Air France-KLM API key. Optional, alternative to AFKLM_KEY."
    },
    {
      "name": "AFKLM_KEYCHAIN_SERVICE",
      "isSecret": false,
      "isRequired": false,
      "description": "macOS Keychain service name to read the Air France-KLM API key from. Optional, alternative to AFKLM_KEY."
    },
    {
      "name": "AFKL_KLM_COOKIES",
      "isSecret": true,
      "isRequired": false,
      "description": "Session cookies for Air France-KLM award search. Optional, unlocks award-fare lookups only."
    },
    {
      "name": "SERPAPI_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "SerpApi API key; unlocks search-engine-backed lookups used by some providers. Optional, trvl works without it."
    },
    {
      "name": "TRAVELPAYOUTS_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Travelpayouts API token; unlocks that flight-price data source. Optional, trvl works without it."
    },
    {
      "name": "TRANSAVIA_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Transavia API key; unlocks that airline's live fares. Optional, trvl works without it."
    },
    {
      "name": "TICKETMASTER_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Ticketmaster API key; unlocks event listings for destinations. Optional, trvl works without it."
    },
    {
      "name": "FOURSQUARE_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Foursquare API key; unlocks that place-search data source. Optional, trvl works without it."
    },
    {
      "name": "OPENTRIPMAP_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "OpenTripMap API key; unlocks that attractions data source. Optional, trvl works without it."
    },
    {
      "name": "GEOAPIFY_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Geoapify API key; unlocks that places/geocoding data source. Optional, trvl works without it."
    },
    {
      "name": "DISTRIBUSION_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Distribusion API key; unlocks that ground-transport data source. Optional, trvl works without it."
    },
    {
      "name": "SKYSCANNER_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Skyscanner API key; unlocks that car-hire data source. Optional, trvl works without it."
    }
  ],
  "category": "search-web",
  "subcategory": "maps-travel",
  "company": "",
  "categoryAuto": true,
  "checks": [
    {
      "id": "source-linked",
      "label": "Source repository linked",
      "result": "pass",
      "detail": "https://github.com/MikkoParkkola/trvl"
    },
    {
      "id": "version-pinned",
      "label": "Version pinned",
      "result": "pass",
      "detail": "Every package has an explicit version"
    },
    {
      "id": "secrets-requested",
      "label": "Secrets requested",
      "result": "warn",
      "detail": "Asks for 15 secrets: TRVL_MCP_TOKEN, TRVL_MCP_READ_TOKEN, TRVL_MCP_WRITE_TOKEN, TRVL_MCP_OAUTH_CLIENT_SECRET, AFKLM_KEY, AFKL_KLM_COOKIES, SERPAPI_KEY, TRAVELPAYOUTS_TOKEN, TRANSAVIA_API_KEY, TICKETMASTER_API_KEY, FOURSQUARE_API_KEY, OPENTRIPMAP_API_KEY, GEOAPIFY_API_KEY, DISTRIBUSION_API_KEY, SKYSCANNER_API_KEY"
    },
    {
      "id": "known-registry",
      "label": "Known package registry",
      "result": "pass",
      "detail": "All packages come from npm, PyPI, OCI, NuGet or MCPB"
    },
    {
      "id": "namespace",
      "label": "Namespace ownership",
      "result": "info",
      "detail": "Name verified via GitHub account MikkoParkkola"
    },
    {
      "id": "meta-text",
      "label": "Registry text aimed at the AI",
      "result": "pass",
      "detail": "Description and settings contain no hidden characters or instructions to the AI"
    },
    {
      "id": "install-scripts",
      "label": "Install scripts",
      "result": "warn",
      "detail": "Runs at install: postinstall: node bin/install.js"
    },
    {
      "id": "code-flags",
      "label": "Code red flags",
      "result": "pass",
      "detail": "Read 6 files in trvl-mcp@1.27.0: no obfuscation, encoded execution, credential reads or data-collection endpoints found"
    },
    {
      "id": "ai-text",
      "label": "Text aimed at the AI",
      "result": "pass",
      "detail": "No hidden characters or instructions to the AI in 6 files, including comments and the README"
    }
  ],
  "scannedAt": "2026-10-29",
  "level": "Scanned",
  "install": [
    {
      "label": "Claude Desktop (oci)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"trvl\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\",\n        \"-i\",\n        \"--rm\",\n        \"ghcr.io/mikkoparkkola/trvl:1.27.0\"\n      ]\n    }\n  }\n}"
    },
    {
      "label": "Claude Desktop (npm)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"trvl\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"trvl-mcp@1.27.0\"\n      ]\n    }\n  }\n}"
    }
  ],
  "curated": true,
  "stars": 92,
  "archived": false,
  "pushedAt": "2026-10-26T08:56:43Z",
  "health": {
    "score": 70,
    "parts": {
      "popularity": 0.47129422904134816,
      "activity": 1,
      "issues": 0.9673202614379085,
      "security": 0.6
    },
    "fail": 0,
    "warn": 2,
    "raw": {
      "stars": 92,
      "forks": 8,
      "downloads": 371,
      "hn": {
        "n": 0,
        "pts": 0,
        "t": []
      },
      "issuesOpen": 5,
      "issuesClosed": 148,
      "prsMerged": 550,
      "commits90": 146,
      "release": "2026-10-10T13:33:17Z",
      "pushed": "2026-10-26T08:56:43Z",
      "growth": null,
      "growthDays": null,
      "archived": false
    },
    "at": "2026-10-31T07:35:52.424Z"
  }
}
