MCP-scala
Uma implementação de servidor do Model Context Protocol escrita em Scala 3.
GitHub
37
Experimente este MCPPatrocinadoDocumentação
MCP-scala
Servidor do Model Context Protocol escrito em Scala 3
Estágio de desenvolvimento
Este software está atualmente em estado ALPHA.
- Derivação automática de JSON Schema
- Defina sua ferramenta
- Parte de conteúdo de texto
- Outras partes de conteúdo
- Tratamento de notificações
- Tratamento de capacidades
- transporte stdio
- transporte HTTP
- Recurso de autorização
Esta implementação precisa da sua atenção e contribuição.
Sinta-se à vontade para abrir Issue / PR para contribuir com este projeto.
Demonstração
Primeiro, compile o servidor para JS:
sbt example/fastLinkJS
Em seguida, utilize o servidor no seu cliente MCP:
// Example for Cline
{
"mcpServers": {
"mcpscala": {
"disabled": false,
"timeout": 30,
"command": "sh",
"args": ["/path/to/run.sh"],
"transportType": "stdio"
}
}
}
Você pode executar algumas ferramentas:
randomNumber- gera um número aleatório entre
minemax.
- gera um número aleatório entre
iota- gera uma sequência de números de
minamax.
- gera uma sequência de números de
sum- calcula a soma de uma sequência de números.
Implemente sua ferramenta
Veja Main.scala para detalhes.
//> using scala 3
//> using toolkit typelevel:default
//> using dep dev.capslock::mcpscala:0.1.0
package dev.capslock.mcpscala
import cats.effect.IO
import cats.effect.IOApp
import dev.capslock.mcpscala.transport.StdioServer
import dev.capslock.mcpscala.mcp.ContentPart
import sttp.tapir.Schema.annotations.description
case class RandomNumberInput(
@description("Minimum value (inclusive)") min: Int,
@description("Maximum value (exclusive)") max: Int
) derives io.circe.Decoder,
sttp.tapir.Schema
def randomNumber(input: RandomNumberInput): IO[Seq[ContentPart]] = IO {
val random = scala.util.Random.between(input.min, input.max)
Seq(ContentPart.TextContentPart(random.toString))
}
/** Entry point for the Stdio server.
*/
object StdioMain extends McpIOApp(
name = "random-number",
header = "Generate a random number",
):
val handlers = Handler.methodHandlers(
Map(
"randomNumber" -> server.Tool(randomNumber),
)
)