mcpField
Z
zio-ella

zio-ella

Local
github.com/otobrglezDeveloper Tools3Updated 82w ago

About zio-ella

zio-ella is a framework for building MCP servers with Scala 3, ZIO, and zio-http. It is intended for developers integrating MCP server capabilities with the ZIO stack; the project is in an early phase.

Key features

  1. 01Scala 3 server framework
  2. 02ZIO integration
  3. 03zio-http support
  4. 04Tool and capability definitions

Use cases

  1. 01Building MCP servers with Scala 3 and ZIO
  2. 02Defining tools within a ZIO service

MCP support

Provides a framework for implementing MCP servers, including definitions for server capabilities and tools.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

No install method listed yet

We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.

Repository

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

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

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.