用 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 目前主要包含几部分:
-
mcp-sdk- 核心 SDK
- 支持 stdio transport
- 支持 SSE transport
- 可以用 Java API 注册 tools、resources、prompts
- 支持注解式工具注册
-
mcp-spring-boot-starter- 面向 Spring Boot 项目的 MCP Server 集成
- 适合把已有 Java/Spring 业务能力暴露给 Agent
-
mcp-examples- 5 分钟 quick-start 示例
- 自定义 MCP Server 模板
- Spring Boot 示例
- 业务 Server 示例
-
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
然后在 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"
]
}
}
}
重启 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
一个简单的 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 + "!";
}
}
启动时扫描注解并通过 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());
这样就不用手写 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>
Spring Boot Starter:
<dependency>
<groupId>io.github.6000fish</groupId>
<artifactId>mcp-spring-boot-starter</artifactId>
<version>0.1.1</version>
</dependency>
MySQL MCP Server
项目里也提供了一个可直接运行的 MySQL MCP Server。
构建:
mvn package -pl mcp-server-collection/mcp-server-mysql -am -DskipTests
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"
}
}
}
}
支持的工具包括:
-
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 - 拒绝
DELETE、DROP、ALTER、TRUNCATE、权限变更和多语句 SQL
Redis MCP Server
Redis Server 也可以直接构建:
mvn package -pl mcp-server-collection/mcp-server-redis -am -DskipTests
配置示例:
{
"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": ""
}
}
}
}
支持常见 Redis 操作:
- key/value
- hash
- list
- set
- metadata
- diagnostics
并且默认禁用 destructive delete,对宽泛 key pattern 和集合读取数量也做了限制。
为什么 MySQL / Redis 选择本地 stdio?
数据库和缓存类 MCP Server 通常更适合本地 stdio,而不是远程公网 MCP endpoint。
原因很简单:
如果做成远程服务,用户可能需要把数据库连接信息交给第三方公网服务,甚至需要把数据库暴露到公网。这对安全和隐私都不友好。
所以更合理的方式是:
用户在能访问数据库的本机或内网机器上运行 MCP Server
Agent 通过 stdio 连接这个本地进程
数据库凭证只保存在用户本地配置里
这也是这个项目目前对 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)