MCP协议服务器

一个基于Java实现的Model Context Protocol (MCP)服务器示例,提供工具调用、资源访问、提示模板和结构化日志等功能,适用于AI模型与工具间的标准化接口开发。

  • by madmaxbunny
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 LimKyunghyuk/MyMcpServer

使用说明

MCP服务器示例

此项目是直接用Java实现的Model Context Protocol(MCP)服务器示例。

概述

模型上下文协议(MCP)是提供AI模型和工具之间标准化接口的协议。该服务器提供以下功能:

  • “工具”(Tools):查询当前时间,计算器,人事功能
  • 资源(Resources):系统信息、服务器状态、设置信息
  • 提示符(Prompts):代码审查、文档摘要、技术问题模板
  • 记录:支持结构化日志消息

要求

  • Java 17或更高版本
  • Maven 3.6或更高版本
  • IntelliJ IDEA(版权所有)

构建和运行

1.在IntelliJ中打开项目

  1. 运行IntelliJ IDEA
  2. 打开项目文件夹
  3. 自动下载Maven依赖性

2.运行服务器

在IntelliJ上运行:

  1. src/main/java/com/example/mcp/McpServerMain.java 打开文件
  2. 单击类名称旁边的绿色箭头或 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)

  1. 当前时间:返回当前日期和时间

    • 参数: format (可选)-指定时间格式
  2. 计算器:执行基本数学计算

    • 参数: a (数字), b (数字), operation (加/减/乘/除)
  3. 问候:向用户问好

    • 参数: name (名称), language (korean/english,可选)

资源(Resources)

  1. system://info:系统信息(OS、Java版本、内存使用量等)
  2. server://status:服务器状态信息
  3. config://settings:关于服务器设置

提示符(Prompts)

  1. 代码查看:代码审查的结构化提示
  2. 文档_摘要:文档摘要提示
  3. 技术问题:提示回答技术问题

项目结构

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)

扩展方法

添加新工具

  1. ToolRegistry.java新的 Tool 将对象 tools 添加到列表
  2. handleToolCall() 向方法添加新案例
  3. 实现该工具的处理程序方法

添加新资源

  1. ResourceRegistry.java新的 Resource 将对象 resources 添加到列表
  2. handleResourceRead() 向方法添加新案例
  3. 实现该资源的处理程序方法

添加新提示

  1. PromptRegistry.java新的 Prompt 将对象 prompts 添加到列表
  2. handlePromptGet() 向方法添加新案例
  3. 实现该提示符的处理程序方法

客户端连接

此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"}
  }
}

故障射击

常见问题

  1. 依赖性问题

    • 在IntelliJ中刷新Maven: Ctrl+Shift+O
    • 从终端: mvn dependency:resolve
  2. 如果服务器无法启动

    • 验证是否已安装Java 17或更高版本
    • 验证IntelliJ项目SDK设置
  3. 如果未创建日志文件

    • logs/ 创建目录: mkdir logs
    • 验证文件写入权限

调试

将日志级别更改为DEBUG以进行调试:

<!-- logback.xml에서 -->
<logger name="com.example.mcp" level="DEBUG" />

参考资料

许可证

此项目符合MIT许可证。