zio-ella logo

zio-ella

by otobrglez

zio-ella is a framework for writing MCP (Model Context Protocol) servers for modern AI platforms using Scala 3 and ZIO with `zio-http`. It allows developers to easily define capabilities and tools for AI agents.

View on GitHub

Last updated: N/A

zio-ella

zio-ella is a framework for writing MCP (Model Context Protocol) servers for modern AI platforms with Scala 3 and ZIO with zio-http.

⚠️ The project is in its early phase and is bound to rapid change. Please feel free to reach-out with ideas and use-cases.

Example capabilities and tools definition within a service might look like:

import zio.ZIO
import zio.dev.ella.*

object MyService:
  val capabilities = Capabilities(
    // Tool that only returns current server time
    Tool("get-time") -> { _ =>
      zio.Clock.instant.map(_.toString)
    },

    // Exemple tool to get where we accept city as an argument.
    Tool("get-weather", ArgDef.string("city")) -> {
      _.string("city").flatMap(city => ZIO.succeed(s"Weather in $city is sunny!"))
    }
  )

  def run = MCPServer(capabilities).run

Integration with the ZIO Stack as follows:

object Main extends ZIOAppDefault:
  def program = for
    _ <- logInfo("Booting...")
    _ <- MyService.run
  yield ()

  def configuredServer: TaskLayer[Server] =
    ZLayer
      .fromZIO(ZIO.config(Config.int("port")).tap(port => logInfo(s"Starting server on port $port")))
      .flatMap(portEnv => Server.defaultWithPort(portEnv.get))

  def run = program.provide(configuredServer)

Resources