DEV Community

Cover image for 用 Java 5 分钟写一个 MCP Server:我开源了 MCP Java SDK
6000fish
6000fish

Posted on

用 Java 5 分钟写一个 MCP Server:我开源了 MCP Java SDK

用 Java 5 分钟写一个 MCP Server:我开源了 MCP Java SDK

最近 MCP,也就是 Model Context Protocol,越来越多地出现在 AI Agent、Claude、Cursor、Codex 等工具生态里。

简单来说,MCP 可以让大模型通过统一协议调用外部工具、访问资源、读取上下文。比如让 Agent 查询数据库、读取 Redis、访问业务系统、执行某些内部工具等。

但我在使用和调研 MCP 的过程中发现一个问题:很多 MCP Server 示例都偏 Node.js / Python,而 Java 开发者如果想快速写一个自己的 MCP Server,入口并不是特别顺。

所以我做了一个开源项目:

GitHub:

https://github.com/6000fish/mcp-java

项目定位很简单:

用 Java 快速构建自定义 MCP Server。

它不是单纯的 MySQL MCP Server,也不是 Redis MCP Server 集合。MySQL 和 Redis 是 ready-to-use server,也是示例。项目核心是给 Java 开发者一个 MCP Server SDK。

这个项目能做什么?

MCP Java SDK 目前主要包含几部分:

  1. mcp-sdk

    • 核心 SDK
    • 支持 stdio transport
    • 支持 SSE transport
    • 可以用 Java API 注册 tools、resources、prompts
    • 支持注解式工具注册
  2. mcp-spring-boot-starter

    • 面向 Spring Boot 项目的 MCP Server 集成
    • 适合把已有 Java/Spring 业务能力暴露给 Agent
  3. mcp-examples

    • 5 分钟 quick-start 示例
    • 自定义 MCP Server 模板
    • Spring Boot 示例
    • 业务 Server 示例
  4. ready-to-use servers

    • MySQL MCP Server
    • Redis MCP Server

5 分钟跑起来

如果只是想体验 SDK,不需要先准备 MySQL 或 Redis。

直接构建 quick-start:

mvn package -pl mcp-examples/quick-start -am -DskipTests
Enter fullscreen mode Exit fullscreen mode

然后在 MCP 客户端或 Agent 里配置 stdio server:

{
  "mcpServers": {
    "quick-start": {
      "type": "stdio",
      "command": "java",
      "args": [
        "-jar",
        "/absolute/path/to/mcp-java/mcp-examples/quick-start/target/quick-start-0.1.1.jar"
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

重启 Agent 后,就可以调用示例工具。

quick-start 示例里包含:

  • greet
  • current_time
  • calculate
  • text_transform
  • resource: server://info

用注解写一个 MCP Tool

项目里也提供了一个可复制的自定义 Server 模板:

mvn package -pl mcp-examples/custom-server-template -am -DskipTests
Enter fullscreen mode Exit fullscreen mode

一个简单的 MCP Tool 大概长这样:

@McpServer(name = "my-server", version = "1.0.0")
public class MyServer {

    @McpTool(name = "hello", description = "Say hello")
    public String hello(@Param(name = "name") String name) {
        return "Hello, " + name + "!";
    }
}
Enter fullscreen mode Exit fullscreen mode

启动时扫描注解并通过 stdio 暴露给 MCP 客户端:

CustomMcpServer customServer = new CustomMcpServer();

McpServer server = DefaultMcpServer.builder()
        .name("custom-server-template")
        .version("1.0.0")
        .build();

McpAnnotationScanner.scan(server, customServer);
server.start(new StdioTransport());
Enter fullscreen mode Exit fullscreen mode

这样就不用手写 JSON-RPC 细节,可以直接把 Java 方法变成 MCP 工具。

Maven Central

项目已经发布到 Maven Central。

核心 SDK:

<dependency>
    <groupId>io.github.6000fish</groupId>
    <artifactId>mcp-sdk</artifactId>
    <version>0.1.1</version>
</dependency>
Enter fullscreen mode Exit fullscreen mode

Spring Boot Starter:

<dependency>
    <groupId>io.github.6000fish</groupId>
    <artifactId>mcp-spring-boot-starter</artifactId>
    <version>0.1.1</version>
</dependency>
Enter fullscreen mode Exit fullscreen mode

MySQL MCP Server

项目里也提供了一个可直接运行的 MySQL MCP Server。

构建:

mvn package -pl mcp-server-collection/mcp-server-mysql -am -DskipTests
Enter fullscreen mode Exit fullscreen mode

Agent 配置示例:

{
  "mcpServers": {
    "mysql": {
      "type": "stdio",
      "command": "java",
      "args": [
        "-jar",
        "/absolute/path/to/mcp-java/mcp-server-collection/mcp-server-mysql/target/mcp-server-mysql-0.1.1.jar"
      ],
      "env": {
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_DATABASE": "mcp_demo",
        "MYSQL_USERNAME": "my_user",
        "MYSQL_PASSWORD": "your_password"
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

支持的工具包括:

  • query(sql)
  • execute(sql)
  • list_databases()
  • list_tables(database?)
  • describe_table(table, database?)
  • explain_query(sql)
  • get_table_status(database?)

安全上做了限制:

  • query 只允许单条 SELECT
  • execute 只允许 INSERT 和 UPDATE
  • 拒绝 DELETEDROPALTERTRUNCATE、权限变更和多语句 SQL

Redis MCP Server

Redis Server 也可以直接构建:

mvn package -pl mcp-server-collection/mcp-server-redis -am -DskipTests
Enter fullscreen mode Exit fullscreen mode

配置示例:

{
  "mcpServers": {
    "redis": {
      "type": "stdio",
      "command": "java",
      "args": [
        "-jar",
        "/absolute/path/to/mcp-java/mcp-server-collection/mcp-server-redis/target/mcp-server-redis-0.1.1.jar"
      ],
      "env": {
        "REDIS_HOST": "localhost",
        "REDIS_PORT": "6379",
        "REDIS_PASSWORD": ""
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

支持常见 Redis 操作:

  • key/value
  • hash
  • list
  • set
  • metadata
  • diagnostics

并且默认禁用 destructive delete,对宽泛 key pattern 和集合读取数量也做了限制。

为什么 MySQL / Redis 选择本地 stdio?

数据库和缓存类 MCP Server 通常更适合本地 stdio,而不是远程公网 MCP endpoint。

原因很简单:

如果做成远程服务,用户可能需要把数据库连接信息交给第三方公网服务,甚至需要把数据库暴露到公网。这对安全和隐私都不友好。

所以更合理的方式是:

用户在能访问数据库的本机或内网机器上运行 MCP Server
Agent 通过 stdio 连接这个本地进程
数据库凭证只保存在用户本地配置里
Enter fullscreen mode Exit fullscreen mode

这也是这个项目目前对 MySQL / Redis 的定位。

已收录到 MCP.so

目前 MySQL 和 Redis 两个 ready-to-use server 已经发布到 MCP.so:

MySQL MCP Server for Java:

https://mcp.so/zh/server/mysql-mcp-server-for-java/6000fish

Redis MCP Server for Java:

https://mcp.so/zh/server/redis-mcp-server-for-java/6000fish

项目地址

Gitee:

https://gitee.com/liuqianyu666/mcp-java

GitHub:

https://github.com/6000fish/mcp-java

GitHub Release:

https://github.com/6000fish/mcp-java/releases/tag/v0.1.1

如果你是 Java 开发者,想把自己的业务系统、内部工具、数据库、缓存或 Spring Boot 服务接入 AI Agent,可以试试这个项目。

也欢迎提 issue、反馈使用场景,或者一起完善 Java MCP Server 生态。

Top comments (0)