# Send Scotty - AT Public Transport Service (ÖBB) to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- 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.
## Suggested prompts
### New install

```text
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.
```
### Upgrade existing

```text
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.
```
## Machine-readable fields
```json
{
  "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": {
    "downloadUrl": "/downloads/oebb-scotty",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=oebb-scotty",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "arrivals.sh",
      "departures.sh",
      "disruptions.sh",
      "README.md",
      "search-station.sh",
      "SKILL.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "oebb-scotty",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-01T05:50:18.253Z",
      "expiresAt": "2026-05-08T05:50:18.253Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=oebb-scotty",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=oebb-scotty",
        "contentDisposition": "attachment; filename=\"oebb-scotty-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "oebb-scotty"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "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."
      ]
    }
  },
  "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"
  }
}
```
## Documentation

### ÖBB Scotty API

Query Austria's public transport for trip planning, station departures, and service alerts via the HAFAS mgate API.

### Quick Reference

MethodPurposeLocMatchSearch for stations/stops by nameTripSearchPlan a journey between two locationsStationBoardGet departures/arrivals at a stationHimSearchGet service alerts and disruptions

Base URL: https://fahrplan.oebb.at/bin/mgate.exe

### Authentication

All requests require these headers in the JSON body:

{
  "id": "1",
  "ver": "1.67",
  "lang": "deu",
  "auth": {"type": "AID", "aid": "OWDL4fE4ixNiPBBm"},
  "client": {"id": "OEBB", "type": "WEB", "name": "webapp", "l": "vs_webapp"},
  "formatted": false,
  "svcReqL": [...]
}

### 1. Location Search (LocMatch)

Search for stations, stops, addresses, or POIs by name.

### Request

curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \\
  -H "Content-Type: application/json" \\
  -d '{
    "id":"1","ver":"1.67","lang":"deu",
    "auth":{"type":"AID","aid":"OWDL4fE4ixNiPBBm"},
    "client":{"id":"OEBB","type":"WEB","name":"webapp","l":"vs_webapp"},
    "formatted":false,
    "svcReqL":[{
      "req":{"input":{"field":"S","loc":{"name":"Wien Hbf","type":"ALL"},"maxLoc":10}},
      "meth":"LocMatch"
    }]
  }'

### Response Structure

{
  "svcResL": [{
    "res": {
      "match": {
        "locL": [{
          "lid": "A=1@O=Wien Hbf (U)@X=16377950@Y=48184986@U=181@L=1290401@",
          "type": "S",
          "name": "Wien Hbf (U)",
          "extId": "1290401",
          "crd": { "x": 16377950, "y": 48184986 },
          "pCls": 6015
        }]
      }
    }
  }]
}

### Location Types

TypeDescriptionSStation/StopAAddressPPOI (Point of Interest)

### Key Fields

FieldDescriptionlidLocation ID string (use in TripSearch)extIdExternal station IDnameStation namecrd.x/yCoordinates (x=lon, y=lat, scaled by 10^6)pClsProduct class bitmask

### 2. Trip Search (TripSearch)

Plan a journey between two locations.

### Request

curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \\
  -H "Content-Type: application/json" \\
  -d '{
    "id":"1","ver":"1.67","lang":"deu",
    "auth":{"type":"AID","aid":"OWDL4fE4ixNiPBBm"},
    "client":{"id":"OEBB","type":"WEB","name":"webapp","l":"vs_webapp"},
    "formatted":false,
    "svcReqL":[{
      "req":{
        "depLocL":[{"lid":"A=1@O=Wien Hbf@L=8103000@","type":"S"}],
        "arrLocL":[{"lid":"A=1@O=Salzburg Hbf@L=8100002@","type":"S"}],
        "jnyFltrL":[{"type":"PROD","mode":"INC","value":"1023"}],
        "getPolyline":false,
        "getPasslist":true,
        "outDate":"20260109",
        "outTime":"080000",
        "outFrwd":true,
        "numF":5
      },
      "meth":"TripSearch"
    }]
  }'

### Parameters

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

### Product Filter Values

BitValueProduct01ICE/RJX (High-speed)12IC/EC (InterCity)24NJ (Night trains)38D/EN (Express)416REX/R (Regional Express)532S-Bahn664Bus7128Ferry8256U-Bahn9512Tram

Use 1023 for all products, or sum specific bits.

### Response Structure

{
  "svcResL": [{
    "res": {
      "outConL": [{
        "date": "20260109",
        "dur": "025200",
        "chg": 0,
        "dep": {
          "dTimeS": "075700",
          "dPltfS": {"txt": "8A-B"}
        },
        "arr": {
          "aTimeS": "104900",
          "aPltfS": {"txt": "7"}
        },
        "secL": [{
          "type": "JNY",
          "jny": {
            "prodX": 0,
            "dirTxt": "Salzburg Hbf",
            "stopL": [...]
          }
        }]
      }],
      "common": {
        "locL": [...],
        "prodL": [...]
      }
    }
  }]
}

### Key Connection Fields

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

### Understanding prodX (Product Index)

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.

### Extracting Trip Summaries with jq

The raw TripSearch response is very verbose. Use this jq filter to extract a concise summary with resolved train names:

curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \\
  -H "Content-Type: application/json" \\
  -d '{ ... }' | jq '
    .svcResL[0].res as $r |
    $r.common.prodL as $prods |
    [$r.outConL[] | {
      dep: .dep.dTimeS,
      arr: .arr.aTimeS,
      depPlatform: .dep.dPltfS.txt,
      arrPlatform: .arr.aPltfS.txt,
      dur: .dur,
      chg: .chg,
      legs: [.secL[] | select(.type == "JNY") | {
        train: $prods[.jny.prodX].name,
        dir: .jny.dirTxt,
        dep: .dep.dTimeS,
        arr: .arr.aTimeS,
        depPlatform: .dep.dPltfS.txt,
        arrPlatform: .arr.aPltfS.txt
      }]
    }]'

Example output:

[
  {
    "dep": "213900",
    "arr": "221100",
    "depPlatform": "1",
    "arrPlatform": "3A-B",
    "dur": "003200",
    "chg": 0,
    "legs": [{"train": "S 7", "dir": "Flughafen Wien Bahnhof", "dep": "213900", "arr": "221100", ...}]
  }
]

### 3. Station Board (StationBoard)

Get departures or arrivals at a station.

### Request

curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \\
  -H "Content-Type: application/json" \\
  -d '{
    "id":"1","ver":"1.67","lang":"deu",
    "auth":{"type":"AID","aid":"OWDL4fE4ixNiPBBm"},
    "client":{"id":"OEBB","type":"WEB","name":"webapp","l":"vs_webapp"},
    "formatted":false,
    "svcReqL":[{
      "req":{
        "stbLoc":{"lid":"A=1@O=Wien Hbf@L=8103000@","type":"S"},
        "date":"20260109",
        "time":"080000",
        "type":"DEP",
        "maxJny":20
      },
      "meth":"StationBoard"
    }]
  }'

### Parameters

ParamDescriptionstbLocStation locationdateDate (YYYYMMDD)timeTime (HHMMSS)typeDEP (departures) or ARR (arrivals)maxJnyMaximum number of journeys

### Response Structure

{
  "svcResL": [{
    "res": {
      "jnyL": [{
        "prodX": 0,
        "dirTxt": "Salzburg Hbf",
        "stbStop": {
          "dTimeS": "080000",
          "dPltfS": {"txt": "8A-B"}
        }
      }],
      "common": {
        "prodL": [{
          "name": "RJX 662",
          "cls": 1,
          "prodCtx": {"catOutL": "Railjet Xpress"}
        }]
      }
    }
  }]
}

### 4. Service Alerts (HimSearch)

Get current disruptions and service information.

### Request

curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \\
  -H "Content-Type: application/json" \\
  -d '{
    "id":"1","ver":"1.67","lang":"deu",
    "auth":{"type":"AID","aid":"OWDL4fE4ixNiPBBm"},
    "client":{"id":"OEBB","type":"WEB","name":"webapp","l":"vs_webapp"},
    "formatted":false,
    "svcReqL":[{
      "req":{
        "himFltrL":[{"type":"PROD","mode":"INC","value":"255"}],
        "maxNum":20
      },
      "meth":"HimSearch"
    }]
  }'

### Response Structure

{
  "svcResL": [{
    "res": {
      "msgL": [{
        "hid": "HIM_FREETEXT_843858",
        "head": "Verringertes Sitzplatzangebot",
        "text": "Wegen einer technischen Störung...",
        "prio": 0,
        "sDate": "20260108",
        "eDate": "20260108"
      }]
    }
  }]
}

### Common Station IDs

StationextIdWien Hbf8103000Wien Meidling8100514Wien Westbahnhof8101003Salzburg Hbf8100002Linz Hbf8100013Graz Hbf8100173Innsbruck Hbf8100108Klagenfurt Hbf8100085St. Pölten Hbf8100008Wr. Neustadt Hbf8100516

### Time Format

Dates: YYYYMMDD (e.g., 20260109)
Times: HHMMSS (e.g., 080000 = 08:00:00)
Duration: HHMMSS (e.g., 025200 = 2h 52m)

### Error Handling

Check err field in response:

{
  "err": "OK",           // Success
  "err": "PARSE",        // Invalid request format
  "err": "NO_MATCH",     // No results found
  "errTxt": "..."        // Error details
}

### Product Classes (cls values)

clsProduct1ICE/RJX2IC/EC4Night trains8NJ/EN16REX/Regional32S-Bahn64Bus128Ferry256U-Bahn512Tram1024On-demand2048Other
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: manmal
- Version: 1.0.0
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-01T05:50:18.253Z
- Expires at: 2026-05-08T05:50:18.253Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/oebb-scotty)
- [Send to Agent page](https://openagent3.xyz/skills/oebb-scotty/agent)
- [JSON manifest](https://openagent3.xyz/skills/oebb-scotty/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/oebb-scotty/agent.md)
- [Download page](https://openagent3.xyz/downloads/oebb-scotty)