joreilly

GalwayBus

Built by joreilly • 581 stars

What is GalwayBus?

A high-performance MCP server implementation for GalwayBus that bridges the gap between the Model Context Protocol and external services. It allows Large Language Models to interact with your data and tools with low latency and native support.

How to use GalwayBus?

1. Ensure you have an MCP-compatible client (like Claude Desktop) installed. 2. Configure your server with: npx @modelcontextprotocol/GalwayBus 3. Restart your client and verify the new tools are available in the system catalog.
🛡️ Scoped (Restricted)
npx @modelcontextprotocol/galwaybus --scope restricted
🔓 Unrestricted Access
npx @modelcontextprotocol/galwaybus

Key Features

Native MCP Protocol Support
High-performance Data Streaming
Type-safe Tool Definitions
Seamless Environment Integration

Optimized Use Cases

Connecting external databases to AI workflows
Automating workflow tasks via natural language
Augmenting developer productivity with specialized tools

GalwayBus FAQ

Q

What is an MCP server?

MCP is an open standard that enables developers to build secure, two-way integrations between AI models and local or remote data sources.

Q

Is this server ready for production?

Yes, this server follows standard MCP security patterns and tool-restricted access.

Official Documentation

View on GitHub

GalwayBus

kotlin-version

GalwayBus shows live bus times for Galway city: real-time departures for your saved stops, stops near you, live on-map bus tracking with a journey timeline, and network-wide stop search. A single Compose Multiplatform UI is shared across Android, iOS and Desktop (JVM), backed by a Ktor service that serves GTFS schedule and GTFS-Realtime data.

Screenshots

Android (Jetpack Compose)

<table> <tr> <td><img src="screenshots/android-mystops.png" width="200" height="444" alt="Saved stops with live departures"/></td> <td><img src="screenshots/android-nearby.png" width="200" height="444" alt="Bus stops near you"/></td> <td><img src="screenshots/android-tracking.png" width="200" height="444" alt="Live bus tracking"/></td> <td><img src="screenshots/android-search.png" width="200" height="444" alt="Stop search"/></td> </tr> <tr> <td align="center">Saved stops</td> <td align="center">Near me</td> <td align="center">Live tracking</td> <td align="center">Stop search</td> </tr> </table>

iOS (Compose Multiplatform)

<table> <tr> <td><img src="screenshots/ios-mystops.png" width="200" height="435" alt="Saved stops with live departures"/></td> <td><img src="screenshots/ios-nearby.png" width="200" height="435" alt="Bus stops near you"/></td> <td><img src="screenshots/ios-tracking.png" width="200" height="435" alt="Live bus tracking"/></td> <td><img src="screenshots/ios-search.png" width="200" height="435" alt="Stop search"/></td> </tr> <tr> <td align="center">Saved stops</td> <td align="center">Near me</td> <td align="center">Live tracking</td> <td align="center">Stop search</td> </tr> </table>

The same Compose Multiplatform UI also runs on Desktop (JVM).

Kotlin Multiplatform

This project also acted as an initial platform I used when starting to explore Kotlin Multiplatform capabilities. I also wrote a number of posts about some of my experiences using KMP in the project.

Code organisation

  • /iosApp contains an iOS application. Even if you’re sharing your UI with Compose Multiplatform, you need this entry point for your iOS app. This is also where you should add SwiftUI code for your project.

  • /shared is for code that will be shared across your Compose Multiplatform applications. It contains several subfolders:

    • commonMain is for code that’s common for all targets.
    • Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name. For example, if you want to use Apple’s CoreCrypto for the iOS part of your Kotlin app, the iosMain folder would be the right place for such calls. Similarly, if you want to edit the Desktop (JVM) specific part, the jvmMain folder is the appropriate location.

Running the apps

Use the run configurations provided by the run widget in your IDE's toolbar. You can also use these commands and options:

  • Android app: ./gradlew :androidApp:assembleDebug
  • Desktop app:
    • Hot reload: ./gradlew :desktopApp:hotRun --auto
    • Standard run: ./gradlew :desktopApp:run
  • iOS app: open the /iosApp directory in Xcode and run it from there.

Running tests

Use the run button in your IDE's editor gutter, or run tests using Gradle tasks:

  • Android tests: ./gradlew :shared:testAndroidHostTest
  • Desktop tests: ./gradlew :shared:jvmTest
  • iOS tests: ./gradlew :shared:iosSimulatorArm64Test
  • UI tests: a Maestro flow shared by the Android and iOS apps, run by CI on an emulator and a simulator (e.g. maestro test -e APP_ID=dev.johnoreilly.galwaybus maestro/GalwayBus.flow)

Full set of Kotlin Multiplatform / Compose / SwiftUI samples

Global Ranking

6.5
Trust ScoreMCPHub Index

Based on codebase health & activity.

Manual Config

{ "mcpServers": { "galwaybus": { "command": "npx", "args": ["galwaybus"] } } }