使用说明
MCP服务器示例
此项目是直接用Java实现的Model Context Protocol(MCP)服务器示例。
概述
模型上下文协议(MCP)是提供AI模型和工具之间标准化接口的协议。该服务器提供以下功能:
- “工具”(Tools):查询当前时间,计算器,人事功能
- 资源(Resources):系统信息、服务器状态、设置信息
- 提示符(Prompts):代码审查、文档摘要、技术问题模板
- 记录:支持结构化日志消息
要求
- Java 17或更高版本
- Maven 3.6或更高版本
- IntelliJ IDEA(版权所有)
构建和运行
1.在IntelliJ中打开项目
- 运行IntelliJ IDEA
- 打开项目文件夹
- 自动下载Maven依赖性
2.运行服务器
在IntelliJ上运行:
src/main/java/com/example/mcp/McpServerMain.java打开文件- 单击类名称旁边的绿色箭头或
Ctrl+Shift+F10单击
在终端上运行:
# Maven을 통한 실행
mvn exec:java -Dexec.mainClass="com.example.mcp.McpServerMain"
# 또는 JAR 파일 생성 후 실행
mvn clean package
java -jar target/mcp-server-example-1.0.0.jar
3.测试
运行测试客户端以验证服务器功能:
# 테스트 클라이언트 실행
mvn exec:java -Dexec.mainClass="com.example.mcp.TestClient"
或在IntelliJ中 src/test/java/com/example/mcp/TestClient.java可以直接运行。
提供的功能
“工具”(Tools)
-
当前时间:返回当前日期和时间
- 参数:
format(可选)-指定时间格式
- 参数:
-
计算器:执行基本数学计算
- 参数:
a(数字),b(数字),operation(加/减/乘/除)
- 参数:
-
问候:向用户问好
- 参数:
name(名称),language(korean/english,可选)
- 参数:
资源(Resources)
- system://info:系统信息(OS、Java版本、内存使用量等)
- server://status:服务器状态信息
- config://settings:关于服务器设置
提示符(Prompts)
- 代码查看:代码审查的结构化提示
- 文档_摘要:文档摘要提示
- 技术问题:提示回答技术问题
项目结构
MyMcpServer/
├── src/
│ ├── main/
│ │ ├── java/com/example/mcp/
│ │ │ ├── McpServerMain.java # 메인 서버 클래스
│ │ │ ├── ToolRegistry.java # 도구 등록 및 관리
│ │ │ ├── ResourceRegistry.java # 리소스 등록 및 관리
│ │ │ ├── PromptRegistry.java # 프롬프트 등록 및 관리
│ │ │ └── schema/ # MCP 스키마 클래스들
│ │ │ ├── McpMessage.java # JSON-RPC 메시지
│ │ │ ├── McpError.java # 에러 정의
│ │ │ ├── Tool.java # 도구 스키마
│ │ │ ├── Resource.java # 리소스 스키마
│ │ │ └── Prompt.java # 프롬프트 스키마
│ │ └── resources/
│ │ └── logback.xml # 로깅 설정
│ └── test/
│ └── java/com/example/mcp/
│ └── TestClient.java # 테스트 클라이언트
├── pom.xml # Maven 설정
├── README.md # 프로젝트 설명서
└── .gitignore # Git 무시 파일
实施MCP协议
该项目使用直接实现的代码,而不是MCP Java SDK:
- JSON-RPC 2.0:使用标准JSON-RPC协议进行通信
- STDIO传输:通过标准I/O进行客户机-服务器通信
- 异步处理:异步处理请求
- 错误处理:支持标准JSON-RPC错误代码
设置
日志记录设置
src/main/resources/logback.xml 您可以在文件中控制记录级别和输出格式:
- 同时支持控制台输出和文件输出
- 每天滚动日志文件
- 设置最大文件大小和存档时间
服务器设置
服务器的默认设置为 McpServerMain 可以在类中进行更改:
- 服务器名称和版本
- 支持的功能(tools、resources、prompts、logging)
扩展方法
添加新工具
ToolRegistry.java新的Tool将对象tools添加到列表handleToolCall()向方法添加新案例- 实现该工具的处理程序方法
添加新资源
ResourceRegistry.java新的Resource将对象resources添加到列表handleResourceRead()向方法添加新案例- 实现该资源的处理程序方法
添加新提示
PromptRegistry.java新的Prompt将对象prompts添加到列表handlePromptGet()向方法添加新案例- 实现该提示符的处理程序方法
客户端连接
此MCP服务器通过标准I/O(STDIO)与客户机通信:
JSON-RPC消息示例
初始化请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "test-client", "version": "1.0.0"}
}
}
工具调用请求:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "calculator",
"arguments": {"a": 10, "b": 5, "operation": "add"}
}
}
故障射击
常见问题
-
依赖性问题
- 在IntelliJ中刷新Maven:
Ctrl+Shift+O - 从终端:
mvn dependency:resolve
- 在IntelliJ中刷新Maven:
-
如果服务器无法启动
- 验证是否已安装Java 17或更高版本
- 验证IntelliJ项目SDK设置
-
如果未创建日志文件
logs/创建目录:mkdir logs- 验证文件写入权限
调试
将日志级别更改为DEBUG以进行调试:
<!-- logback.xml에서 -->
<logger name="com.example.mcp" level="DEBUG" />
参考资料
许可证
此项目符合MIT许可证。
