{
  "schemaVersion": "1.0",
  "item": {
    "slug": "oebb-scotty",
    "name": "Scotty - AT Public Transport Service (ÖBB)",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/manmal/oebb-scotty",
    "canonicalUrl": "https://clawhub.ai/manmal/oebb-scotty",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/oebb-scotty",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=oebb-scotty",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "arrivals.sh",
      "departures.sh",
      "disruptions.sh",
      "README.md",
      "search-station.sh",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/oebb-scotty"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/oebb-scotty",
    "agentPageUrl": "https://openagent3.xyz/skills/oebb-scotty/agent",
    "manifestUrl": "https://openagent3.xyz/skills/oebb-scotty/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/oebb-scotty/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "ÖBB Scotty API",
        "body": "Query Austria's public transport for trip planning, station departures, and service alerts via the HAFAS mgate API."
      },
      {
        "title": "Quick Reference",
        "body": "MethodPurposeLocMatchSearch for stations/stops by nameTripSearchPlan a journey between two locationsStationBoardGet departures/arrivals at a stationHimSearchGet service alerts and disruptions\n\nBase URL: https://fahrplan.oebb.at/bin/mgate.exe"
      },
      {
        "title": "Authentication",
        "body": "All requests require these headers in the JSON body:\n\n{\n  \"id\": \"1\",\n  \"ver\": \"1.67\",\n  \"lang\": \"deu\",\n  \"auth\": {\"type\": \"AID\", \"aid\": \"OWDL4fE4ixNiPBBm\"},\n  \"client\": {\"id\": \"OEBB\", \"type\": \"WEB\", \"name\": \"webapp\", \"l\": \"vs_webapp\"},\n  \"formatted\": false,\n  \"svcReqL\": [...]\n}"
      },
      {
        "title": "1. Location Search (LocMatch)",
        "body": "Search for stations, stops, addresses, or POIs by name."
      },
      {
        "title": "Request",
        "body": "curl -s -X POST \"https://fahrplan.oebb.at/bin/mgate.exe\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"id\":\"1\",\"ver\":\"1.67\",\"lang\":\"deu\",\n    \"auth\":{\"type\":\"AID\",\"aid\":\"OWDL4fE4ixNiPBBm\"},\n    \"client\":{\"id\":\"OEBB\",\"type\":\"WEB\",\"name\":\"webapp\",\"l\":\"vs_webapp\"},\n    \"formatted\":false,\n    \"svcReqL\":[{\n      \"req\":{\"input\":{\"field\":\"S\",\"loc\":{\"name\":\"Wien Hbf\",\"type\":\"ALL\"},\"maxLoc\":10}},\n      \"meth\":\"LocMatch\"\n    }]\n  }'"
      },
      {
        "title": "Response Structure",
        "body": "{\n  \"svcResL\": [{\n    \"res\": {\n      \"match\": {\n        \"locL\": [{\n          \"lid\": \"A=1@O=Wien Hbf (U)@X=16377950@Y=48184986@U=181@L=1290401@\",\n          \"type\": \"S\",\n          \"name\": \"Wien Hbf (U)\",\n          \"extId\": \"1290401\",\n          \"crd\": { \"x\": 16377950, \"y\": 48184986 },\n          \"pCls\": 6015\n        }]\n      }\n    }\n  }]\n}"
      },
      {
        "title": "Location Types",
        "body": "TypeDescriptionSStation/StopAAddressPPOI (Point of Interest)"
      },
      {
        "title": "Key Fields",
        "body": "FieldDescriptionlidLocation ID string (use in TripSearch)extIdExternal station IDnameStation namecrd.x/yCoordinates (x=lon, y=lat, scaled by 10^6)pClsProduct class bitmask"
      },
      {
        "title": "2. Trip Search (TripSearch)",
        "body": "Plan a journey between two locations."
      },
      {
        "title": "Request",
        "body": "curl -s -X POST \"https://fahrplan.oebb.at/bin/mgate.exe\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"id\":\"1\",\"ver\":\"1.67\",\"lang\":\"deu\",\n    \"auth\":{\"type\":\"AID\",\"aid\":\"OWDL4fE4ixNiPBBm\"},\n    \"client\":{\"id\":\"OEBB\",\"type\":\"WEB\",\"name\":\"webapp\",\"l\":\"vs_webapp\"},\n    \"formatted\":false,\n    \"svcReqL\":[{\n      \"req\":{\n        \"depLocL\":[{\"lid\":\"A=1@O=Wien Hbf@L=8103000@\",\"type\":\"S\"}],\n        \"arrLocL\":[{\"lid\":\"A=1@O=Salzburg Hbf@L=8100002@\",\"type\":\"S\"}],\n        \"jnyFltrL\":[{\"type\":\"PROD\",\"mode\":\"INC\",\"value\":\"1023\"}],\n        \"getPolyline\":false,\n        \"getPasslist\":true,\n        \"outDate\":\"20260109\",\n        \"outTime\":\"080000\",\n        \"outFrwd\":true,\n        \"numF\":5\n      },\n      \"meth\":\"TripSearch\"\n    }]\n  }'"
      },
      {
        "title": "Parameters",
        "body": "ParamDescriptiondepLocLDeparture location(s) - use lid from LocMatcharrLocLArrival location(s)outDateDeparture date (YYYYMMDD)outTimeDeparture time (HHMMSS)outFrwdtrue = search forward, false = search backwardnumFNumber of connections to returnjnyFltrLProduct filter (see below)getPasslistInclude intermediate stops"
      },
      {
        "title": "Product Filter Values",
        "body": "BitValueProduct01ICE/RJX (High-speed)12IC/EC (InterCity)24NJ (Night trains)38D/EN (Express)416REX/R (Regional Express)532S-Bahn664Bus7128Ferry8256U-Bahn9512Tram\n\nUse 1023 for all products, or sum specific bits."
      },
      {
        "title": "Response Structure",
        "body": "{\n  \"svcResL\": [{\n    \"res\": {\n      \"outConL\": [{\n        \"date\": \"20260109\",\n        \"dur\": \"025200\",\n        \"chg\": 0,\n        \"dep\": {\n          \"dTimeS\": \"075700\",\n          \"dPltfS\": {\"txt\": \"8A-B\"}\n        },\n        \"arr\": {\n          \"aTimeS\": \"104900\",\n          \"aPltfS\": {\"txt\": \"7\"}\n        },\n        \"secL\": [{\n          \"type\": \"JNY\",\n          \"jny\": {\n            \"prodX\": 0,\n            \"dirTxt\": \"Salzburg Hbf\",\n            \"stopL\": [...]\n          }\n        }]\n      }],\n      \"common\": {\n        \"locL\": [...],\n        \"prodL\": [...]\n      }\n    }\n  }]\n}"
      },
      {
        "title": "Key Connection Fields",
        "body": "FieldDescriptiondurDuration (HHMMSS)chgNumber of changesdTimeSScheduled departuredTimeRReal-time departure (if available)aTimeSScheduled arrivalaTimeRReal-time arrival (if available)dPltfS.txtDeparture platformaPltfS.txtArrival platformsecLJourney sections (legs)secL[].jny.prodXIndex into common.prodL[] for train name"
      },
      {
        "title": "Understanding prodX (Product Index)",
        "body": "Important: The prodX field in journey sections is an index into the common.prodL[] array, NOT the train name itself. To get the actual train name (e.g., \"S7\", \"RJX 662\"), you must look up common.prodL[prodX].name."
      },
      {
        "title": "Extracting Trip Summaries with jq",
        "body": "The raw TripSearch response is very verbose. Use this jq filter to extract a concise summary with resolved train names:\n\ncurl -s -X POST \"https://fahrplan.oebb.at/bin/mgate.exe\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{ ... }' | jq '\n    .svcResL[0].res as $r |\n    $r.common.prodL as $prods |\n    [$r.outConL[] | {\n      dep: .dep.dTimeS,\n      arr: .arr.aTimeS,\n      depPlatform: .dep.dPltfS.txt,\n      arrPlatform: .arr.aPltfS.txt,\n      dur: .dur,\n      chg: .chg,\n      legs: [.secL[] | select(.type == \"JNY\") | {\n        train: $prods[.jny.prodX].name,\n        dir: .jny.dirTxt,\n        dep: .dep.dTimeS,\n        arr: .arr.aTimeS,\n        depPlatform: .dep.dPltfS.txt,\n        arrPlatform: .arr.aPltfS.txt\n      }]\n    }]'\n\nExample output:\n\n[\n  {\n    \"dep\": \"213900\",\n    \"arr\": \"221100\",\n    \"depPlatform\": \"1\",\n    \"arrPlatform\": \"3A-B\",\n    \"dur\": \"003200\",\n    \"chg\": 0,\n    \"legs\": [{\"train\": \"S 7\", \"dir\": \"Flughafen Wien Bahnhof\", \"dep\": \"213900\", \"arr\": \"221100\", ...}]\n  }\n]"
      },
      {
        "title": "3. Station Board (StationBoard)",
        "body": "Get departures or arrivals at a station."
      },
      {
        "title": "Request",
        "body": "curl -s -X POST \"https://fahrplan.oebb.at/bin/mgate.exe\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"id\":\"1\",\"ver\":\"1.67\",\"lang\":\"deu\",\n    \"auth\":{\"type\":\"AID\",\"aid\":\"OWDL4fE4ixNiPBBm\"},\n    \"client\":{\"id\":\"OEBB\",\"type\":\"WEB\",\"name\":\"webapp\",\"l\":\"vs_webapp\"},\n    \"formatted\":false,\n    \"svcReqL\":[{\n      \"req\":{\n        \"stbLoc\":{\"lid\":\"A=1@O=Wien Hbf@L=8103000@\",\"type\":\"S\"},\n        \"date\":\"20260109\",\n        \"time\":\"080000\",\n        \"type\":\"DEP\",\n        \"maxJny\":20\n      },\n      \"meth\":\"StationBoard\"\n    }]\n  }'"
      },
      {
        "title": "Parameters",
        "body": "ParamDescriptionstbLocStation locationdateDate (YYYYMMDD)timeTime (HHMMSS)typeDEP (departures) or ARR (arrivals)maxJnyMaximum number of journeys"
      },
      {
        "title": "Response Structure",
        "body": "{\n  \"svcResL\": [{\n    \"res\": {\n      \"jnyL\": [{\n        \"prodX\": 0,\n        \"dirTxt\": \"Salzburg Hbf\",\n        \"stbStop\": {\n          \"dTimeS\": \"080000\",\n          \"dPltfS\": {\"txt\": \"8A-B\"}\n        }\n      }],\n      \"common\": {\n        \"prodL\": [{\n          \"name\": \"RJX 662\",\n          \"cls\": 1,\n          \"prodCtx\": {\"catOutL\": \"Railjet Xpress\"}\n        }]\n      }\n    }\n  }]\n}"
      },
      {
        "title": "4. Service Alerts (HimSearch)",
        "body": "Get current disruptions and service information."
      },
      {
        "title": "Request",
        "body": "curl -s -X POST \"https://fahrplan.oebb.at/bin/mgate.exe\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"id\":\"1\",\"ver\":\"1.67\",\"lang\":\"deu\",\n    \"auth\":{\"type\":\"AID\",\"aid\":\"OWDL4fE4ixNiPBBm\"},\n    \"client\":{\"id\":\"OEBB\",\"type\":\"WEB\",\"name\":\"webapp\",\"l\":\"vs_webapp\"},\n    \"formatted\":false,\n    \"svcReqL\":[{\n      \"req\":{\n        \"himFltrL\":[{\"type\":\"PROD\",\"mode\":\"INC\",\"value\":\"255\"}],\n        \"maxNum\":20\n      },\n      \"meth\":\"HimSearch\"\n    }]\n  }'"
      },
      {
        "title": "Response Structure",
        "body": "{\n  \"svcResL\": [{\n    \"res\": {\n      \"msgL\": [{\n        \"hid\": \"HIM_FREETEXT_843858\",\n        \"head\": \"Verringertes Sitzplatzangebot\",\n        \"text\": \"Wegen einer technischen Störung...\",\n        \"prio\": 0,\n        \"sDate\": \"20260108\",\n        \"eDate\": \"20260108\"\n      }]\n    }\n  }]\n}"
      },
      {
        "title": "Common Station IDs",
        "body": "StationextIdWien Hbf8103000Wien Meidling8100514Wien Westbahnhof8101003Salzburg Hbf8100002Linz Hbf8100013Graz Hbf8100173Innsbruck Hbf8100108Klagenfurt Hbf8100085St. Pölten Hbf8100008Wr. Neustadt Hbf8100516"
      },
      {
        "title": "Time Format",
        "body": "Dates: YYYYMMDD (e.g., 20260109)\nTimes: HHMMSS (e.g., 080000 = 08:00:00)\nDuration: HHMMSS (e.g., 025200 = 2h 52m)"
      },
      {
        "title": "Error Handling",
        "body": "Check err field in response:\n\n{\n  \"err\": \"OK\",           // Success\n  \"err\": \"PARSE\",        // Invalid request format\n  \"err\": \"NO_MATCH\",     // No results found\n  \"errTxt\": \"...\"        // Error details\n}"
      },
      {
        "title": "Product Classes (cls values)",
        "body": "clsProduct1ICE/RJX2IC/EC4Night trains8NJ/EN16REX/Regional32S-Bahn64Bus128Ferry256U-Bahn512Tram1024On-demand2048Other"
      }
    ],
    "body": "ÖBB Scotty API\n\nQuery Austria's public transport for trip planning, station departures, and service alerts via the HAFAS mgate API.\n\nQuick Reference\nMethod\tPurpose\nLocMatch\tSearch for stations/stops by name\nTripSearch\tPlan a journey between two locations\nStationBoard\tGet departures/arrivals at a station\nHimSearch\tGet service alerts and disruptions\n\nBase URL: https://fahrplan.oebb.at/bin/mgate.exe\n\nAuthentication\n\nAll requests require these headers in the JSON body:\n\n{\n  \"id\": \"1\",\n  \"ver\": \"1.67\",\n  \"lang\": \"deu\",\n  \"auth\": {\"type\": \"AID\", \"aid\": \"OWDL4fE4ixNiPBBm\"},\n  \"client\": {\"id\": \"OEBB\", \"type\": \"WEB\", \"name\": \"webapp\", \"l\": \"vs_webapp\"},\n  \"formatted\": false,\n  \"svcReqL\": [...]\n}\n\n1. Location Search (LocMatch)\n\nSearch for stations, stops, addresses, or POIs by name.\n\nRequest\ncurl -s -X POST \"https://fahrplan.oebb.at/bin/mgate.exe\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"id\":\"1\",\"ver\":\"1.67\",\"lang\":\"deu\",\n    \"auth\":{\"type\":\"AID\",\"aid\":\"OWDL4fE4ixNiPBBm\"},\n    \"client\":{\"id\":\"OEBB\",\"type\":\"WEB\",\"name\":\"webapp\",\"l\":\"vs_webapp\"},\n    \"formatted\":false,\n    \"svcReqL\":[{\n      \"req\":{\"input\":{\"field\":\"S\",\"loc\":{\"name\":\"Wien Hbf\",\"type\":\"ALL\"},\"maxLoc\":10}},\n      \"meth\":\"LocMatch\"\n    }]\n  }'\n\nResponse Structure\n{\n  \"svcResL\": [{\n    \"res\": {\n      \"match\": {\n        \"locL\": [{\n          \"lid\": \"A=1@O=Wien Hbf (U)@X=16377950@Y=48184986@U=181@L=1290401@\",\n          \"type\": \"S\",\n          \"name\": \"Wien Hbf (U)\",\n          \"extId\": \"1290401\",\n          \"crd\": { \"x\": 16377950, \"y\": 48184986 },\n          \"pCls\": 6015\n        }]\n      }\n    }\n  }]\n}\n\nLocation Types\nType\tDescription\nS\tStation/Stop\nA\tAddress\nP\tPOI (Point of Interest)\nKey Fields\nField\tDescription\nlid\tLocation ID string (use in TripSearch)\nextId\tExternal station ID\nname\tStation name\ncrd.x/y\tCoordinates (x=lon, y=lat, scaled by 10^6)\npCls\tProduct class bitmask\n2. Trip Search (TripSearch)\n\nPlan a journey between two locations.\n\nRequest\ncurl -s -X POST \"https://fahrplan.oebb.at/bin/mgate.exe\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"id\":\"1\",\"ver\":\"1.67\",\"lang\":\"deu\",\n    \"auth\":{\"type\":\"AID\",\"aid\":\"OWDL4fE4ixNiPBBm\"},\n    \"client\":{\"id\":\"OEBB\",\"type\":\"WEB\",\"name\":\"webapp\",\"l\":\"vs_webapp\"},\n    \"formatted\":false,\n    \"svcReqL\":[{\n      \"req\":{\n        \"depLocL\":[{\"lid\":\"A=1@O=Wien Hbf@L=8103000@\",\"type\":\"S\"}],\n        \"arrLocL\":[{\"lid\":\"A=1@O=Salzburg Hbf@L=8100002@\",\"type\":\"S\"}],\n        \"jnyFltrL\":[{\"type\":\"PROD\",\"mode\":\"INC\",\"value\":\"1023\"}],\n        \"getPolyline\":false,\n        \"getPasslist\":true,\n        \"outDate\":\"20260109\",\n        \"outTime\":\"080000\",\n        \"outFrwd\":true,\n        \"numF\":5\n      },\n      \"meth\":\"TripSearch\"\n    }]\n  }'\n\nParameters\nParam\tDescription\ndepLocL\tDeparture location(s) - use lid from LocMatch\narrLocL\tArrival location(s)\noutDate\tDeparture date (YYYYMMDD)\noutTime\tDeparture time (HHMMSS)\noutFrwd\ttrue = search forward, false = search backward\nnumF\tNumber of connections to return\njnyFltrL\tProduct filter (see below)\ngetPasslist\tInclude intermediate stops\nProduct Filter Values\nBit\tValue\tProduct\n0\t1\tICE/RJX (High-speed)\n1\t2\tIC/EC (InterCity)\n2\t4\tNJ (Night trains)\n3\t8\tD/EN (Express)\n4\t16\tREX/R (Regional Express)\n5\t32\tS-Bahn\n6\t64\tBus\n7\t128\tFerry\n8\t256\tU-Bahn\n9\t512\tTram\n\nUse 1023 for all products, or sum specific bits.\n\nResponse Structure\n{\n  \"svcResL\": [{\n    \"res\": {\n      \"outConL\": [{\n        \"date\": \"20260109\",\n        \"dur\": \"025200\",\n        \"chg\": 0,\n        \"dep\": {\n          \"dTimeS\": \"075700\",\n          \"dPltfS\": {\"txt\": \"8A-B\"}\n        },\n        \"arr\": {\n          \"aTimeS\": \"104900\",\n          \"aPltfS\": {\"txt\": \"7\"}\n        },\n        \"secL\": [{\n          \"type\": \"JNY\",\n          \"jny\": {\n            \"prodX\": 0,\n            \"dirTxt\": \"Salzburg Hbf\",\n            \"stopL\": [...]\n          }\n        }]\n      }],\n      \"common\": {\n        \"locL\": [...],\n        \"prodL\": [...]\n      }\n    }\n  }]\n}\n\nKey Connection Fields\nField\tDescription\ndur\tDuration (HHMMSS)\nchg\tNumber of changes\ndTimeS\tScheduled departure\ndTimeR\tReal-time departure (if available)\naTimeS\tScheduled arrival\naTimeR\tReal-time arrival (if available)\ndPltfS.txt\tDeparture platform\naPltfS.txt\tArrival platform\nsecL\tJourney sections (legs)\nsecL[].jny.prodX\tIndex into common.prodL[] for train name\nUnderstanding prodX (Product Index)\n\nImportant: The prodX field in journey sections is an index into the common.prodL[] array, NOT the train name itself. To get the actual train name (e.g., \"S7\", \"RJX 662\"), you must look up common.prodL[prodX].name.\n\nExtracting Trip Summaries with jq\n\nThe raw TripSearch response is very verbose. Use this jq filter to extract a concise summary with resolved train names:\n\ncurl -s -X POST \"https://fahrplan.oebb.at/bin/mgate.exe\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{ ... }' | jq '\n    .svcResL[0].res as $r |\n    $r.common.prodL as $prods |\n    [$r.outConL[] | {\n      dep: .dep.dTimeS,\n      arr: .arr.aTimeS,\n      depPlatform: .dep.dPltfS.txt,\n      arrPlatform: .arr.aPltfS.txt,\n      dur: .dur,\n      chg: .chg,\n      legs: [.secL[] | select(.type == \"JNY\") | {\n        train: $prods[.jny.prodX].name,\n        dir: .jny.dirTxt,\n        dep: .dep.dTimeS,\n        arr: .arr.aTimeS,\n        depPlatform: .dep.dPltfS.txt,\n        arrPlatform: .arr.aPltfS.txt\n      }]\n    }]'\n\n\nExample output:\n\n[\n  {\n    \"dep\": \"213900\",\n    \"arr\": \"221100\",\n    \"depPlatform\": \"1\",\n    \"arrPlatform\": \"3A-B\",\n    \"dur\": \"003200\",\n    \"chg\": 0,\n    \"legs\": [{\"train\": \"S 7\", \"dir\": \"Flughafen Wien Bahnhof\", \"dep\": \"213900\", \"arr\": \"221100\", ...}]\n  }\n]\n\n3. Station Board (StationBoard)\n\nGet departures or arrivals at a station.\n\nRequest\ncurl -s -X POST \"https://fahrplan.oebb.at/bin/mgate.exe\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"id\":\"1\",\"ver\":\"1.67\",\"lang\":\"deu\",\n    \"auth\":{\"type\":\"AID\",\"aid\":\"OWDL4fE4ixNiPBBm\"},\n    \"client\":{\"id\":\"OEBB\",\"type\":\"WEB\",\"name\":\"webapp\",\"l\":\"vs_webapp\"},\n    \"formatted\":false,\n    \"svcReqL\":[{\n      \"req\":{\n        \"stbLoc\":{\"lid\":\"A=1@O=Wien Hbf@L=8103000@\",\"type\":\"S\"},\n        \"date\":\"20260109\",\n        \"time\":\"080000\",\n        \"type\":\"DEP\",\n        \"maxJny\":20\n      },\n      \"meth\":\"StationBoard\"\n    }]\n  }'\n\nParameters\nParam\tDescription\nstbLoc\tStation location\ndate\tDate (YYYYMMDD)\ntime\tTime (HHMMSS)\ntype\tDEP (departures) or ARR (arrivals)\nmaxJny\tMaximum number of journeys\nResponse Structure\n{\n  \"svcResL\": [{\n    \"res\": {\n      \"jnyL\": [{\n        \"prodX\": 0,\n        \"dirTxt\": \"Salzburg Hbf\",\n        \"stbStop\": {\n          \"dTimeS\": \"080000\",\n          \"dPltfS\": {\"txt\": \"8A-B\"}\n        }\n      }],\n      \"common\": {\n        \"prodL\": [{\n          \"name\": \"RJX 662\",\n          \"cls\": 1,\n          \"prodCtx\": {\"catOutL\": \"Railjet Xpress\"}\n        }]\n      }\n    }\n  }]\n}\n\n4. Service Alerts (HimSearch)\n\nGet current disruptions and service information.\n\nRequest\ncurl -s -X POST \"https://fahrplan.oebb.at/bin/mgate.exe\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"id\":\"1\",\"ver\":\"1.67\",\"lang\":\"deu\",\n    \"auth\":{\"type\":\"AID\",\"aid\":\"OWDL4fE4ixNiPBBm\"},\n    \"client\":{\"id\":\"OEBB\",\"type\":\"WEB\",\"name\":\"webapp\",\"l\":\"vs_webapp\"},\n    \"formatted\":false,\n    \"svcReqL\":[{\n      \"req\":{\n        \"himFltrL\":[{\"type\":\"PROD\",\"mode\":\"INC\",\"value\":\"255\"}],\n        \"maxNum\":20\n      },\n      \"meth\":\"HimSearch\"\n    }]\n  }'\n\nResponse Structure\n{\n  \"svcResL\": [{\n    \"res\": {\n      \"msgL\": [{\n        \"hid\": \"HIM_FREETEXT_843858\",\n        \"head\": \"Verringertes Sitzplatzangebot\",\n        \"text\": \"Wegen einer technischen Störung...\",\n        \"prio\": 0,\n        \"sDate\": \"20260108\",\n        \"eDate\": \"20260108\"\n      }]\n    }\n  }]\n}\n\nCommon Station IDs\nStation\textId\nWien Hbf\t8103000\nWien Meidling\t8100514\nWien Westbahnhof\t8101003\nSalzburg Hbf\t8100002\nLinz Hbf\t8100013\nGraz Hbf\t8100173\nInnsbruck Hbf\t8100108\nKlagenfurt Hbf\t8100085\nSt. Pölten Hbf\t8100008\nWr. Neustadt Hbf\t8100516\nTime Format\nDates: YYYYMMDD (e.g., 20260109)\nTimes: HHMMSS (e.g., 080000 = 08:00:00)\nDuration: HHMMSS (e.g., 025200 = 2h 52m)\nError Handling\n\nCheck err field in response:\n\n{\n  \"err\": \"OK\",           // Success\n  \"err\": \"PARSE\",        // Invalid request format\n  \"err\": \"NO_MATCH\",     // No results found\n  \"errTxt\": \"...\"        // Error details\n}\n\nProduct Classes (cls values)\ncls\tProduct\n1\tICE/RJX\n2\tIC/EC\n4\tNight trains\n8\tNJ/EN\n16\tREX/Regional\n32\tS-Bahn\n64\tBus\n128\tFerry\n256\tU-Bahn\n512\tTram\n1024\tOn-demand\n2048\tOther"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/manmal/oebb-scotty",
    "publisherUrl": "https://clawhub.ai/manmal/oebb-scotty",
    "owner": "manmal",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/oebb-scotty",
    "downloadUrl": "https://openagent3.xyz/downloads/oebb-scotty",
    "agentUrl": "https://openagent3.xyz/skills/oebb-scotty/agent",
    "manifestUrl": "https://openagent3.xyz/skills/oebb-scotty/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/oebb-scotty/agent.md"
  }
}