返回 MCP 目录
public公开dns本地运行

JSON-RPC 2.0

一个用Scala 3编写的MCP协议服务器,支持多种工具功能。

article

README

🚀 MCP-Scala

一个基于模型上下文协议(Model Context Protocol)的服务器,使用 Scala 3 编写,能够为相关应用提供强大的支持。

🚀 快速开始

构建服务器

首先,使用以下命令构建服务器:

sbt fastLinkJS

客户端配置

然后,在你的 MCP 客户端中使用该服务器:

// 示例配置
{
  "mcpServers": {
    "mcpscala": {
      "disabled": false,
      "timeout": 30,
      "command": "sh",
      "args": ["/path/to/run.sh"],
      "transportType": "stdio"
    }
  }
}

运行工具

你可以运行以下工具:

  • randomNumber
    • minmax 之间生成一个随机数。
  • iota
    • 生成从 minmax 的数字序列。
  • sum
    • 计算一组数字的和。

✨ 主要特性

开发阶段信息

此软件目前处于ALPHA版本,以下是开发进度:

  • [x] 自动推导 JSON 模式
  • [x] 定义你的工具
  • [x] 文本内容部分
  • [ ] 其他内容部分
  • [ ] 通知处理
  • [ ] 功能处理
  • [x] 标准输入输出(stdio)传输
  • [ ] HTTP 传输
  • [ ] 授权功能

此实现需要你的关注和贡献。欢迎通过打开问题或提交拉取请求来参与此项目。

💻 使用示例

基础用法

查看 StdioMain.scala 文件以获取详细信息。

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("最小值(包含在内)") min: Int,
    @description("最大值(不包含)") 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))
}

/** 标准输入输出服务器的主入口点。
  */
object StdioMain extends IOApp.Simple {
  val tools = Map(
    "randomNumber" -> server.Tool(randomNumber),
  )

  def run: IO[Unit] = {
    StdioServer.serve(Handler.methodHandlers(tools))
  }
}
help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端