RSSAmplifier

Blog

John O’Reilly

John O'Reilly's Blog

johnoreilly.devRSS feed ↗10 posts

Latest posts

Scanning bus stop codes with ML Kit and Vision in the GalwayBus Compose Multiplatform app

Every bus stop in Galway has a plate with a 6-digit stop code printed on it. We recently added a “Scan” tab to the GalwayBus app that lets you point the camera at that plate and jump straight to the stop’s departures. The text recognition runs entirely on device (ML Kit on Android, Apple’s Vision framework on iOS), with the camera preview, matching logic and UI all living in the shared Compose…

Adding a Koog AI assistant (with structured output) to the FantasyPremierLeague CMP sample

Koog is JetBrains’ Kotlin framework for building AI agents. In this article we’re going to use it to add an in-app “FPL Assistant” to the FantasyPremierLeague Compose Multiplatform sample. This is a chat screen where you can ask about players, fixtures and mini-league standings. The answers render as player and fixture cards rather than just as text.

Adding embeddings/RAG support to the Koog-based AI agent in Confetti

Recently I started looking at reworking the recommendation feature in the Confetti Compose Multiplatform sample (which uses Apollo Kotlin to consume a GraphQL API serving data for various conferences). The new implementation uses a Koog AIAgent with a ToolRegistry that includes session and speaker tools, giving the LLM on-demand access to the conference data it needs.

Using Navigation 3 with Compose Multiplatform

Navigation 3 is a new Compose based navigation library from Google that’s designed with ease of use and flexibility in mind.

Deploying a Kotlin-based remote MCP Server to Google Cloud Run

I wrote a previous post about how to develop an MCP Server using the Kotlin MCP SDK. That was primarily based on local deployment (using stdio protocol)…a setup that Claude Desktop for example could only support at the time. With the announcement that Claude now supports access to remote MCP Servers (from desktop and mobile) I thought I’d take a look at deploying the MCP Server in the…

Using Google’s Agent Development Kit for Java from Kotlin code

Google’s Agent Development Kit for Java is described as “an open-source, code-first Java toolkit for building, evaluating, and deploying sophisticated AI agents with flexibility and control”. In this article we’re going to see how it can be consumed in Kotlin code (specifically in the agents module in the ClimateTrace Kotlin Multiplatform sample).

Initial exploration of using Koog for developing Kotlin based AI agents

Koog, announced recently at KotlinConf, is a new Kotlin-based framework designed to build and run AI agents. This article will outline initial exploration of using Koog along with a number of configured MCP servers (specifically mcp-jetbrains which we’ll use to control the IntelliJ/Android Studio IDE and also one based on the ClimateTraceKMP Kotlin Multiplatform (KMP) sample built using the Kotlin…

Kotlin MCP 💜 Kotlin Multiplatform

MCP (Model Context Protocol) is a relatively new open standard that allows AI assistants to connect with external data sources and tools. In this article we’re going to show how we can use the Kotlin MCP SDK to create an MCP Server which in turn uses Kotlin Multiplatform (KMP) shared code to obtain the data that the server is providing. Specifically we’re going to add an MCP module to the…

Using Vertex AI in a Compose/Kotlin Multiplatform project

Update 2nd April 2025: Article now includes code for image generation and also cleaner approach for injecting iOS version of code using Koin.

Using Circuit with kotlin-inject in a Kotlin/Compose Multiplatform project

We’ve seen increasing use of the Circuit framework in Kotlin/Compose Multiplatform projects and I thought it was time to update one of the samples I have to make use of it. This article outlines some of the key changes made to use Circuit in the BikeShare sample. That project had already been using the kotlin-inject DI framework (more about that here) so we’ll also show how that can be used to…