如何用Java构建MCP服务器
使用Java构建模型上下文协议(MCP)服务器的综合指南。该项目演示了如何创建一个基于Java的MCP服务器,该服务器通过Claude等AI助手可以使用的工具提供演示数据。
目录
概述
该项目实现了一个基于Java的MCP(模型上下文协议)服务器,该服务器通过标准化的接口公开演示数据。服务器使用 io.modelcontextprotocol.sdk 库来处理MCP通信,并提供AI助手可以调用的工具来检索有关Java演示文稿的信息。
什么是MCP?
模型上下文协议(MCP)是一个开放标准,使AI助手能够安全地连接到外部数据源和工具。它为应用程序向AI系统公开其功能提供了一种标准化的方式。
先决条件
- Java 21或更高版本 -此项目使用Java 21功能
- Maven 3.6+ -用于依赖关系管理和构建
- Node.js和npm -MCP检验员测试所需(可选)
- 克劳德桌面 -用于将服务器连接到Claude(可选)
项目结构
how-to-build-mcp-server-in-java/
├── src/main/java/
│ └── dev/
│ ├── Main.java # Main server entry point
│ └── aditya/
│ ├── Presentation.java # Data model for presentations
│ └── PresentationTools.java # Business logic for managing presentations
├── pom.xml # Maven configuration
├── README.md # This documentation
└── .gitignore # Git ignore rules入门指南
1.克隆存储库
git clone
cd how-to-build-mcp-server-in-java2.建设项目
mvn clean compile3.验证依赖关系
该项目使用以下关键依赖关系:
io.modelcontextprotocol.sdk:mcp-Java版MCP SDKorg.slf4j:slf4j-api和org.slf4j:slf4j-simple-日志记录
运行服务器
方法1:使用Maven
mvn exec:java -Dexec.mainClass="dev.Main"方法2:直接使用Java
# First compile
mvn compile
# Then run
java -cp target/classes:target/dependency/* dev.Main方法3:创建可执行JAR
mvn package
java -jar target/how-to-build-mcp-server-in-java-1.0-SNAPSHOT.jarMCP检验员测试
MCP检查器是一个调试工具,允许您以交互方式测试MCP服务器。
1.安装MCP检查器
npm install -g @modelcontextprotocol/inspector2.运行检查器
npx @modelcontextprotocol/inspector java -cp target/classes:$(mvn dependency:build-classpath -Dmdep.outputFile=/dev/stdout -q) dev.Main或者,如果你有一个编译好的JAR:
npx @modelcontextprotocol/inspector java -jar target/how-to-build-mcp-server-in-java-1.0-SNAPSHOT.jar3.使用检查器
- 检查器将在您的浏览器中打开
- 您将看到服务器功能和可用工具
- 您可以测试
get_presentations点击该工具 - 检查器将显示来自服务器的JSON响应
与Claude Desktop连接
要将此MCP服务器与Claude Desktop一起使用,您需要在Claude的设置中对其进行配置。
1.找到Claude桌面配置
在 macOS 上:
~/Library/Application Support/Claude/claude_desktop_config.json在Windows上:
%APPDATA%\Claude\claude_desktop_config.json2.添加服务器配置
将Java MCP服务器添加到配置文件中:
{
"mcpServers": {
"java-presentations": {
"command": "java",
"args": [
"-cp",
"/path/to/your/project/target/classes:/path/to/your/project/target/dependency/*",
"dev.Main"
],
"cwd": "/path/to/your/project"
}
}
}JAR文件的替代方案:
{
"mcpServers": {
"java-presentations": {
"command": "java",
"args": [
"-jar",
"/path/to/your/project/target/how-to-build-mcp-server-in-java-1.0-SNAPSHOT.jar"
]
}
}
}3.重新启动克劳德桌面
保存配置后,重新启动Claude Desktop。现在,您应该可以向Claude询问演示文稿,它将使用您的Java MCP服务器来获取数据。
4.测试连接
试着问克劳德:
- “有哪些可用的演示文稿?”
- “显示2025年以来的所有Java演示文稿”
- “列出演示文稿URL”
理解代码
主类
主类通过以下方式设置MCP服务器:
- 传输层:使用stdio进行通信
- 察看连接信息:定义服务器名称和版本
- 能力:声明服务器可以做什么(工具、日志记录)
- 工具注册:注册可用工具及其实现
演示文稿.java
一个简单的记录类,表示演示文稿,具有:
title:演示文稿标题url:链接到演示文稿year:发表演讲的年份
演示工具.java
包含用于管理演示文稿的业务逻辑:
- 初始化示例演示数据
- 提供检索演示文稿的方法
- 支持按年过滤
- 可以将演示文稿转换为不同的格式
可用工具
get_presences
描述:检索所有可用Java演示文稿的列表
参数:
operation(string):操作类型(当前未在实现中使用)
退货:包含标题、URL和年份信息的演示文稿列表
示例响应:
Presentation[title=Java 24 Launch - Live from JavaOne 2025, url=https://www.youtube.com/watch?v=mk_2MIWxLI0, year=2025]
Presentation[title=Java Turns 30 - Live from JavaOne 2025, url=https://www.youtube.com/watch?v=GwR7Gvi80Xo, year=2025]
...定制
添加新工具
要向MCP服务器添加新工具,请执行以下操作:
- 定义工具模式 JSON格式
- 创建工具规格 包含名称、描述和模式
- 执行工具逻辑 在处理函数中
- 注册该工具 使用服务器构建器
例子:
var newToolSpec = new McpServerFeatures.SyncToolSpecification(
new McpSchema.Tool("my_new_tool", "Description of what it does", schema),
(exchange, arguments) -> {
// Your tool implementation here
return new McpSchema.CallToolResult(contents, false);
}
);修改数据
要更改演示文稿数据,请执行以下操作:
- 在中编辑构造函数
PresentationTools.java - 添加、删除或修改
Presentation物体 - 重建并重新启动服务器
添加资源或提示
MCP SDK还支持资源和提示。您可以使用服务器构建器添加这些:
.resources(resourceSpecification)
.prompts(promptSpecification)故障排除
常见问题
- “未找到类”错误:确保所有依赖项都在类路径中
- 端口已在使用中:服务器使用stdio,因此不应发生端口冲突
- JSON解析错误:检查您的工具模式是否为有效的JSON
- 克劳德桌面未连接:验证配置文件路径和语法
调试日志记录
该项目使用SLF4J进行日志记录。要查看调试输出,您可以调整日志记录级别或添加更多日志语句。
依赖性问题
如果您遇到依赖关系解决问题:
mvn dependency:tree
mvn clean install -U后续步骤
- 添加具有复杂参数的更复杂的工具
- 实现用于提供文件或数据的资源端点
- 为常见的AI交互添加提示模板
- 创建与外部API或数据库交互的工具
- 添加身份验证和安全功能
贡献
欢迎通过以下方式为该项目做出贡献:
- 添加新的示例工具
- 改进文件
- 修复错误或问题
- 添加测试
