$git clone https://github.com/joreilly/FantasyPremierLeagueCompose Multiplatform project running on following * Android * iOS * Desktop
| 1 | # Fantasy Premier League |
| 2 | |
| 3 |  |
| 4 | |
| 5 | **Compose Multiplatform** project running on following |
| 6 | * Android |
| 7 | * iOS |
| 8 | * Desktop |
| 9 | |
| 10 | Also includes |
| 11 | * AI agent built with [Koog](https://github.com/JetBrains/koog) (Gemini + tool calling, running in shared KMP code) |
| 12 | * Kotlin Notebook |
| 13 | * MCP Server |
| 14 | |
| 15 | It also currently makes use of the following Jetpack libraries |
| 16 | * ViewModel |
| 17 | * Navigation 3 |
| 18 | * Room |
| 19 | * DataStore |
| 20 | |
| 21 | Related posts: |
| 22 | * [Using Realm persistence library in a Kotlin Multiplatform project](https://johnoreilly.dev/posts/realm-kotlinmultiplatform/) |
| 23 | * [Using new Swift Async Algorithms package to close the gap on Combine](https://johnoreilly.dev/posts/swift-async-algorithms-combine/) |
| 24 | * [Displaying Charts on iOS, Android, and Desktop using Compose Multiplatform](https://johnoreilly.dev/posts/compose-multiplatform-chart/) |
| 25 | * [Using Jetpack Room in Kotlin Multiplatform shared code](https://johnoreilly.dev/posts/jetpack_room_kmp/) |
| 26 | * [Using Navigation 3 with Compose Multiplatform](https://johnoreilly.dev/posts/navigation3-cmp/) |
| 27 | |
| 28 | ## Running the app |
| 29 | |
| 30 | * **Android**: open the project in Android Studio and run the `app` configuration |
| 31 | * **iOS**: open `ios/FantasyPremierLeague/FantasyPremierLeague.xcodeproj` in Xcode and run |
| 32 | * **Desktop**: `./gradlew :compose-desktop:run` |
| 33 | * **MCP Server**: `./gradlew :mcp-server:shadowJar` (see MCP Server section below) |
| 34 | |
| 35 | Note: to use the AI agent you need a Gemini API key — set `apiKeyGoogle` in `FantasyPremierLeagueAgent`. |
| 36 | |
| 37 | ## Screenshots |
| 38 | |
| 39 | ### Android |
| 40 | <img width="300" alt="Screenshot_20251101_204058" src="https://github.com/user-attachments/assets/e75753e5-badb-4641-9b16-6cf23608d2ed" /> |
| 41 | |
| 42 | |
| 43 | ### iOS |
| 44 | <img width="300" alt="Simulator Screenshot - iPhone 17 Pro - 2025-11-01 at 20 37 58" src="https://github.com/user-attachments/assets/8a94c51c-b087-407a-ad7e-8caf2c793bc8" /> |
| 45 | |
| 46 | |
| 47 | ### Desktop |
| 48 | |
| 49 | <img width="912" height="888" alt="Screenshot 2025-11-01 at 20 38 24" src="https://github.com/user-attachments/assets/d9cbc228-7d1c-4b25-929b-d090ed99bf64" /> |
| 50 | |
| 51 | |
| 52 | |
| 53 | ### Kotlin Notebook |
| 54 | <img width="916" alt="Screenshot 2024-04-06 at 11 03 15" src="https://github.com/joreilly/FantasyPremierLeague/assets/6302/37fef7a1-190d-4c14-acdd-5dafc11e8e30"> |
| 55 | |
| 56 | <img width="932" alt="Screenshot 2024-04-06 at 11 03 36" src="https://github.com/joreilly/FantasyPremierLeague/assets/6302/53cba0ea-1175-4349-ab1f-9aba4f8f0066"> |
| 57 | |
| 58 | |
| 59 | |
| 60 | **MCP Server** |
| 61 | |
| 62 | The `mcp-server` module uses the [Kotlin MCP SDK](https://github.com/modelcontextprotocol/kotlin-sdk) to expose an MCP tools endpoint (returning player/fixture info) that |
| 63 | can for example be plugged in to Claude Desktop as shown below. That module uses same KMP shared code. |
| 64 | |
| 65 | <img width="1356" height="967" alt="Screenshot 2025-07-16 at 21 17 33" src="https://github.com/user-attachments/assets/73baa4d3-5f5d-4d6f-9e9f-1f9d601029ab" /> |
| 66 | |
| 67 | |
| 68 | |
| 69 | To integrate the MCP server with Claude Desktop for example you need to firstly run gradle `shadowJar` task and then select "Edit Config" under Developer Settings and add something |
| 70 | like the following (update with your path) |
| 71 | |
| 72 | |
| 73 | ``` |
| 74 | { |
| 75 | "mcpServers": { |
| 76 | "fantasy-premier-league": { |
| 77 | "command": "java", |
| 78 | "args": [ |
| 79 | "-jar", |
| 80 | "/Users/john.oreilly/github/FantasyPremierLeague/mcp-server/build/libs/serverAll.jar", |
| 81 | "--stdio" |
| 82 | ] |
| 83 | } |
| 84 | } |
| 85 | } |
| 86 | ``` |
| 87 | |
| 88 | |
| 89 | ## Full set of Kotlin Multiplatform/Compose/SwiftUI samples |
| 90 | |
| 91 | * PeopleInSpace (https://github.com/joreilly/PeopleInSpace) |
| 92 | * GalwayBus (https://github.com/joreilly/GalwayBus) |
| 93 | * Confetti (https://github.com/joreilly/Confetti) |
| 94 | * BikeShare (https://github.com/joreilly/BikeShare) |
| 95 | * FantasyPremierLeague (https://github.com/joreilly/FantasyPremierLeague) |
| 96 | * ClimateTrace (https://github.com/joreilly/ClimateTraceKMP) |
| 97 | * GeminiKMP (https://github.com/joreilly/GeminiKMP) |
| 98 | * MortyComposeKMM (https://github.com/joreilly/MortyComposeKMM) |
| 99 | * StarWars (https://github.com/joreilly/StarWars) |
| 100 | * WordMasterKMP (https://github.com/joreilly/WordMasterKMP) |
| 101 | * Chip-8 (https://github. |