数学计算服务器

一个基于Java的简单MCP服务器,提供计算两个数的最大公约数(GCD)和最小公倍数(LCM)的数学工具。

  • by Abhishek-Aditya-bs
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 abhishek-aditya-bs/java-mcp-server-experiment

使用说明

简单Java MCP服务器

Java中的一个简单的模型上下文协议(MCP)服务器实现,它提供了计算两个数字的最大公除数(GCD)和最小公倍数(LCM)的数学工具。

特性

  • GCD工具:使用欧几里德算法计算两个正整数的最大公除子
  • LCM工具:使用公式LCM(a,b)=(a×b)/GCD(a,b)计算两个正整数的最小公倍数
  • 错误处理:全面的输入验证和错误报告
  • 日志记录:用于调试和监控的内置日志支持

先决条件

  • Java 17或更高版本
  • Maven 3.6或更高版本

项目结构

simple-java-mcp/
├── pom.xml                           # Maven configuration
├── README.md                         # This file
└── src/
    └── main/
        └── java/
            └── com/
                └── example/
                    └── mcp/
                        └── MathMcpServer.java    # Main server implementation

建设项目

  1. 克隆或导航到项目目录:

    cd simple-java-mcp
    
  2. 编译项目:

    mvn clean compile
    
  3. 打包应用程序:

    mvn clean package
    

    这将在 target/ 目录: simple-java-mcp-1.0.0.jar

运行服务器

选项1:使用Maven

mvn exec:java -Dexec.mainClass="com.example.mcp.MathMcpServer"

选项2:使用JAR文件

java -jar target/simple-java-mcp-1.0.0.jar

服务器将通过STDIO(标准输入/输出)启动并监听MCP请求。

可用工具

1.GCD工具

  • 名字: gcd
  • 描述:计算两个正整数的最大公约数(GCD)
  • 参数:
    • a (integer):第一个正整数
    • b (integer):第二个正整数

请求示例:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "gcd",
    "arguments": {
      "a": 48,
      "b": 18
    }
  }
}

示例响应:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": {
          "operation": "gcd",
          "input_a": 48,
          "input_b": 18,
          "result": 6,
          "explanation": "GCD of 48 and 18 is 6"
        }
      }
    ]
  }
}

2.LCM工具

  • 名字: lcm
  • 描述:计算两个正整数的最小公倍数(LCM)
  • 参数:
    • a (integer):第一个正整数
    • b (integer):第二个正整数

请求示例:

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "lcm",
    "arguments": {
      "a": 12,
      "b": 8
    }
  }
}

示例响应:

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": {
          "operation": "lcm",
          "input_a": 12,
          "input_b": 8,
          "result": 24,
          "explanation": "LCM of 12 and 8 is 24"
        }
      }
    ]
  }
}

测试服务器

您可以使用任何MCP客户端或通过STDIO直接发送JSON-RPC消息来测试服务器。

使用curl(用于测试目的):

# First, list available tools
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | java -jar target/simple-java-mcp-1.0.0.jar

# Test GCD calculation
echo '{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "gcd", "arguments": {"a": 48, "b": 18}}}' | java -jar target/simple-java-mcp-1.0.0.jar

# Test LCM calculation
echo '{"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "lcm", "arguments": {"a": 12, "b": 8}}}' | java -jar target/simple-java-mcp-1.0.0.jar

错误处理

该服务器包括全面的错误处理功能,用于:

  • 缺少参数
  • 数字格式无效
  • 非正整数
  • 整数溢出(用于LCM计算)

错误响应示例:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": {
          "error": "Both numbers must be positive integers"
        }
      }
    ],
    "isError": true
  }
}

发展

添加新工具

要添加新的数学工具,请执行以下操作:

  1. 创建类似于以下内容的新工具注册方法 createGcdTool() 或 createLcmTool()
  2. 在中注册该工具 main() 方法使用 server.addTool()
  3. 通过适当的错误处理来实现工具逻辑

依赖项

该项目使用以下关键依赖关系:

  • MCP Java SDK核心 (0.5.0):核心MCP协议实现
  • 杰克逊数据绑定 (2.17.0):JSON处理
  • SLF4J简单 (2.0.9):日志框架

许可证

该项目是作为Java中模型上下文协议的示例实现提供的。

贡献

请随时提交问题和增强请求!