oebb-scotty
Official-style query tool for planning train journeys and checking real-time ÖBB transit information.
Install
mkdir -p .claude/skills/oebb-scotty && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/6363" && unzip -o skill.zip -d .claude/skills/oebb-scotty && rm skill.zipInstalls to .claude/skills/oebb-scotty
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Austrian rail travel planner (ÖBB Scotty). Use when planning train journeys in Austria, checking departures/arrivals at stations, or looking for service disruptions. Covers ÖBB trains, S-Bahn, regional trains, and connections to neighboring countries.Key capabilities
- →Search for stations and stops by name
- →Plan journeys between locations
- →Retrieve station departure and arrival boards
- →Fetch service disruption alerts
How it works
It interfaces with the HAFAS mgate API to query public transport data using specific JSON request headers and parameters.
Inputs & outputs
When to use oebb-scotty
- →Planning train routes in Austria
- →Checking station departure times
- →Monitoring rail service delays
About this skill
ÖBB Scotty API
Query Austria's public transport for trip planning, station departures, and service alerts via the HAFAS mgate API.
Quick Reference
| Method | Purpose |
|---|---|
LocMatch | Search for stations/stops by name |
TripSearch | Plan a journey between two locations |
StationBoard | Get departures/arrivals at a station |
HimSearch | Get 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
| Type | Description |
|---|---|
S | Station/Stop |
A | Address |
P | POI (Point of Interest) |
Key Fields
| Field | Description |
|---|---|
lid | Location ID string (use in TripSearch) |
extId | External station ID |
name | Station name |
crd.x/y | Coordinates (x=lon, y=lat, scaled by 10^6) |
pCls | Product 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
| Param | Description |
|---|---|
depLocL | Departure location(s) - use lid from LocMatch |
arrLocL | Arrival location(s) |
outDate | Departure date (YYYYMMDD) |
outTime | Departure time (HHMMSS) |
outFrwd | true = search forward, false = search backward |
numF | Number of connections to return |
jnyFltrL | Product filter (see below) |
getPasslist | Include intermediate stops |
Product Filter Values
| Bit | Value | Product |
|---|---|---|
| 0 | 1 | ICE/RJX (High-speed) |
| 1 | 2 | IC/EC (InterCity) |
| 2 | 4 | NJ (Night trains) |
| 3 | 8 | D/EN (Express) |
| 4 | 16 | REX/R (Regional Express) |
| 5 | 32 | S-Bahn |
| 6 | 64 | Bus |
| 7 | 128 | Ferry |
| 8 | 256 | U-Bahn |
| 9 | 512 | Tram |
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
| Field | Description |
|---|---|
dur | Duration (HHMMSS) |
chg | Number of changes |
dTimeS | Scheduled departure |
dTimeR | Real-time departure (if available) |
aTimeS | Scheduled arrival |
aTimeR | Real-time arrival (if available) |
dPltfS.txt | Departure platform |
aPltfS.txt | Arrival platform |
secL | Journey sections (legs) |
secL[].jny.prodX | Index 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
| Param | Description |
|---|---|
stbLoc | Station location |
date | Date (YYYYMMDD) |
time | Time (HHMMSS) |
type | DEP (departures) or ARR (arrivals) |
maxJny | Maximum 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
| Station | extId |
|---|---|
| Wien Hbf | 8103000 |
| Wien Meidling | 8100514 |
| Wien Westbahnhof | 8101003 |
| Salzburg Hbf | 8100002 |
| Linz Hbf | 8100013 |
| Graz Hbf | 8100173 |
| Innsbruck Hbf | 8100108 |
| Klagenfurt Hbf | 8100085 |
| St. Pölten Hbf | 8100008 |
| Wr. Neustadt Hbf | 8100516 |
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)
| cls | Product |
|---|---|
| 1 | ICE/RJX |
| 2 | IC/EC |
| 4 | Night trains |
| 8 | NJ/EN |
| 16 | REX/Regional |
| 32 | S-Bahn |
| 64 | Bus |
| 128 | Ferry |
| 256 | U-Bahn |
| 512 | Tram |
| 1024 | On-demand |
| 2048 | Other |
When not to use it
- →For non-Austrian public transport
- →When real-time data is not required
Prerequisites
Limitations
- →Requires specific API authentication
- →Data is limited to ÖBB and connected networks
How it compares
It automates complex API interactions for journey planning instead of manual web interface usage.
Compared to similar skills
oebb-scotty side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| oebb-scotty (this skill) | 3 | 6mo | Review | Intermediate |
| travel-planner | 84 | 9mo | Review | Beginner |
| ultrathink | 28 | 2mo | No flags | Advanced |
| openspec-explore | 4 | 6mo | Review | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by mitsuhiko
View all by mitsuhiko →You might also like
travel-planner
ailabs-393
This skill should be used whenever users need help planning trips, creating travel itineraries, managing travel budgets, or seeking destination advice. On first use, collects comprehensive travel preferences including budget level, travel style, interests, and dietary restrictions. Generates detailed travel plans with day-by-day itineraries, budget breakdowns, packing checklists, cultural do's and don'ts, and region-specific schedules. Maintains database of preferences and past trips for personalized recommendations.
ultrathink
dashed
Invoke deep sequential thinking for complex problem-solving. Use when the user says 'use ultrathink', 'ultrathink', or when tackling problems that require careful step-by-step reasoning, planning, hypothesis generation, or multi-step analysis.
openspec-explore
studyzy
进入探索模式 - 一个用于探索想法、调查问题和澄清需求的思考伙伴。当用户想要在进行更改之前或期间深入思考某事时使用。
product-manager-toolkit
davila7
Comprehensive toolkit for product managers including RICE prioritization, customer interview analysis, PRD templates, discovery frameworks, and go-to-market strategies. Use for feature prioritization, user research synthesis, requirement documentation, and product strategy development.
thought-patterns
markpitt
Orchestrates comprehensive cognitive thinking patterns including sequential, systems, lateral, divergent/convergent, abductive, analogical, first-principles, double-loop learning, gestalt, metacognitive, and neurodivergent patterns (ADHD hyperfocus, autistic detail-orientation, dyslexic spatial reasoning). Analyzes tasks to select optimal pattern(s), chains multiple patterns when needed, and validates outputs before responding. Use for complex problem-solving, creative tasks, analytical challenges, or when diverse cognitive approaches enhance solution quality.
task-analyzer
shinpr
Metacognitive task analysis and skill selection. Analyzes task essence, estimates scale, and returns appropriate skills with metadata.