obilet.com Bus & Flight Tickets

io.github.mohammad-abbasi-shPublished by GitHub account mohammad-abbasi-shv0.1.0Updated Nov 7, 2026

Unofficial read-only MCP server for obilet.com bus & flight tickets: journeys, prices.

Overview

AI-generated overview

Unofficial read-only MCP server that lets an assistant search obilet.com bus and flight journeys, prices and schedules in Türkiye.

What you can do
  • Search bus or flight locations by name and get their IDs
  • List bus journeys for a route and date with partner, bus type, seats, times, duration, price in TRY and rating
  • Read full details of a single journey, including every stop with its time
  • Get price statistics (min, median, mean, max) for a route and date
  • Get a flight summary with flight count, price range, durations, direct-flight flag and airlines
When to use it
Useful when planning or comparing travel within Türkiye and you want an assistant to look up bus departures, fares and stop details, or a quick flight price and airline overview for a city pair and date.
Requirements
Runs locally over stdio as a Python package (uvx obilet-mcp or pip install obilet-mcp); needs Python with mcp<2 and curl-cffi, plus network access to obilet.com. No account, API key or environment variable is required.
Before you install
Unofficial and not affiliated with obilet.com; it scrapes the site's session-gated API, so results can break if the site changes and requests are rate-spaced. Prices are informational only and no booking is possible. It is read-only and needs no login or credentials.

Installation

In SourceWeft

  1. Open obilet.com Bus & Flight Tickets in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

obilet-mcp 🇹🇷

mcp-name: io.github.mohammad-abbasi-sh/obilet-mcp

Unofficial read-only MCP server for obilet.com**, Türkiye's bus & flight ticket search — search bus locations, list all bus journeys for a route + date (partner, bus type, seats, departure/arrival, duration, price in TRY, partner rating, stops), read full journey details, get price statistics, and read the flight summary (flight count, min/max price, airlines) for the same city pair.

Built by Mohammad Abbasi as part of the "Turkey MCP factory" (Sepehr-style pipeline). Not affiliated with obilet.com.

For AI agents

Add to your MCP client config (stdio):

json
{  "mcpServers": {    "obilet": {      "command": "uvx",      "args": ["obilet-mcp"]    }  }}

Or run locally: python -m obilet_mcp.server (needs mcp<2, curl-cffi).

Tools

ToolDescription
obilet_search_locationsSearch locations by name — query ("Ankara", "İstanbul"), kind ("bus" / "flight"); returns id, name, display name, city id per match (bus ids are ints, flight ids are strings like "250_0")
obilet_search_bus_journeysBus journeys for a route + date — origin_id / destination_id (bus location ids, e.g. 349 İstanbul Avrupa -> 356 Ankara), date "YYYY-MM-DD", sort ("price_asc" / "departure" / "duration"), limit 1..24; returns journey id, partner, bus type, seats, stations, departure/arrival, duration, price in TRY, partner rating (0-10), stops, plus the total count
obilet_journey_detailFull detail of one journey (journey_id): partner, bus type, seats, stations, departure/arrival, duration, internet & original price in TRY, service fee, partner rating, bus name, platform, description, every stop with its time
obilet_price_statsPrice statistics for a route + date: journey count, min / median / mean / max ticket price in TRY
obilet_flight_summaryFlight summary for a route + date: flight count, min/max price in TRY, min/max duration, first/last departure, direct-flight flag, airlines with IATA codes (individual flight listings are NOT in v1)

Example output (obilet_search_bus_journeys / İstanbul Avrupa -> Ankara, 2026-11-07):

json
{"origin_id": 349, "destination_id": 356, "date": "2026-11-07", "sort": "price_asc", "total": 421, "count": 2, "journeys": [  {"journey_id": 1432053091, "partner": "Yükseller Aksaray Birlik",   "bus_type": "2+1", "total_seats": 41, "available_seats": 36,   "origin": "Esenler Otogarı", "destination": "Ankara (Aşti) Otogarı",   "departure": "2026-11-07T07:30:00", "arrival": "2026-11-07T15:30:00",   "duration": "08:00:00", "price_try": 539.0, "original_price_try": 700.0,   "price_currency": "TRY", "partner_rating": 8.64, …}, …]}

Example output (obilet_flight_summary / same route & date):

json
{"origin_id": 349, "destination_id": 356, "date": "2026-11-07", "flight_count": 26, "has_direct": true, "min_price_try": 1461.99, "max_price_try": 7399.34, "min_duration": "01:00:00", "max_duration": "12:05:00", "first_departure": "00:05:00", "last_departure": "23:30:00", "airlines": [{"name": "Pegasus", "iata": "PC"}, {"name": "AJet", "iata": "VF"},              {"name": "THY", "iata": "TK"}]}

Example output (obilet_price_stats / same route & date):

json
{"origin_id": 349, "destination_id": 356, "date": "2026-11-07", "count": 421, "min_try": 539.0, "median_try": 800.0, "mean_try": 852.38, "max_try": 1150.0}

How it works

obilet.com exposes a JSON API, but it is session-gated: an HTML page is fetched first (it sets cookies incl. ob_Session and __cf_bm), then POSTs carry X-Requested-With: XMLHttpRequest with that page as Referer. Locations: POST /json/duraklar (bus) or /json/ucak-duraklari (flight). Journeys: POST /json/journeys/{origin}-{destination}/{date} with {} — one response holds every journey for the route. Detail: POST /json/sefer-tam/{journeyId}. The same journeys response carries the flightSummary. Sorting is client-side (price / departure / duration). The async flights endpoint is broken on the site side (404/500), so individual flight listings are out of scope for v1. Transport uses a persistent curl-cffi chrome120 session; requests are spaced ~0.8s apart; everything is read-only, no login, no API key.

Install

bash
uvx obilet-mcp        # run directly (needs uv)# orpip install obilet-mcpobilet-mcp         # starts the MCP server on stdio

Tests

bash
python -m venv .venv && .venv/bin/pip install -e ..venv/bin/python -m unittest discover -s tests -v

Offline tests run on recorded fixtures (real pages fetched 2026-11-06); live tests hit obilet.com.

Roadmap

  • Individual flight listings (if the async flights endpoint is fixed)
  • Round-trip search (outbound + return in one call)
  • Seat-map / available-seat detail per journey

License

MIT — see LICENSE.

Source: README.md at commit 3ca4f5d

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.0LatestNov 7, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts