LLM工具调用客户端

一个基于Spring AI和Ollama LLM的客户端,通过MCP服务器工具使本地LLM能够调用外部API数据。

  • by yongfire38
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 yongfire38/my-webmvc-mcp-client

使用说明

WebVC MCP客户端

Spring AI MCP Client with Ollama LLM示例项目。

使用WebMVC MCP服务器上的工具,使本地LLM可以利用外部API数据。

动作流

[사용자]
   ↓
[REST API /api/chat]
   ↓
[ChatController]
   ↓
[ChatService]
   ↓
[Ollama LLM] ←→ [MCP Client] ←→ [MCP Server (http://localhost:9090)]
   ↓                                    ↓
[응답 반환]                         [Tools: getTouristWeatherIndex, getCityInfo, getCurrentTime]

项目结构

my-webmvc-mcp-client/
├── pom.xml                                    # Maven 설정 (MCP Client, Ollama)
├── README.md
└── src/main/
    ├── java/com/example/client/
    │   ├── ClientApplication.java             # Main Application
    │   ├── config/
    │   │   ├── OllamaConfig.java              # Ollama API 설정
    │   │   └── SwaggerConfig.java             # Swagger 설정
    │   ├── controller/
    │   │   └── ChatController.java            # REST API 엔드포인트
    │   └── service/
    │       └── ChatService.java               # LLM + MCP Tool 통합
    └── resources/
        └── application.properties             # Ollama, MCP 서버 설정

事前准备

1.安装Ollama并下载型号

# Ollama 설치 (https://ollama.com/download)

# 모델 다운로드 (Tool Calling 지원 모델 필요)
ollama pull qwen2.5:7b

# Ollama 서버 실행 확인
ollama serve

Ollama服务器http://localhost:11434必须在中运行。

2.运行MCP服务器

首先,必须运行WebMVC MCP服务器:

cd C:\workspace-test\my-webmvc-mcp
mvn clean package
java -jar target/webmvc-mcp-0.0.1-SNAPSHOT.jar

服务器http://localhost:9090必须在中运行。

构建和运行

1.构建

cd C:\workspace-test\my-webmvc-mcp-client
mvn clean package

2.运行

java -jar target/webmvc-mcp-client-0.0.1-SNAPSHOT.jar

客户端http://localhost:8080在中运行。

测试

测试方案

通过以下流验证MCP Client是否正常运行:

  1. 向客户机提问 →向REST API发送问题
  2. 由本地LLM判断 →确定是否需要Tool
  3. MCP服务器的Tool调用 →在服务器上查看公共API数据
  4. 确认响应 →LLM使用Tool结果生成答案

1.景区天气查询测试

# GET 방식
curl "http://localhost:8080/api/chat?message=서울 강남구 관광지 날씨 알려줘"

# POST 방식
curl -X POST http://localhost:8080/api/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "제주도 관광지 TCI 지수는?"}'

预期动作:

  1. Ollama LLM分析问题
  2. getCityInfo 使用Tool检查城市代码
  3. getTouristWeatherIndex 认为需要Tool
  4. 向MCP服务器请求Tool调用
  5. 在公共API中查看旅游景点气候指数数据
  6. LLM用自然语言回答结果

2.测试时间查询

curl "http://localhost:8080/api/chat?message=서울 시간대의 현재 시간은?"

# 또는
curl -X POST http://localhost:8080/api/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "Asia/Seoul 타임존의 현재 날짜와 시간 알려줘"}'

预期动作:

  1. Ollama LLM分析问题
  2. getCurrentDateTimeWithZone 认为需要Tool
  3. 向MCP服务器请求Tool调用
  4. 在服务器上查看当前时间
  5. LLM用自然语言回答结果

3.确认日志

您可以在客户端控制台中查看以下日志:

INFO  c.e.c.service.ChatService - User message: 서울 강남구 관광지 날씨 알려줘
INFO  c.e.c.service.ChatService - Available tools: [getTouristWeatherIndex, getTouristWeatherByDate, getCityInfo, getCurrentDateTimeWithZone]
INFO  c.e.c.service.ChatService - AI response: ...

测试成功标准

✅ 成功测试:

  1. MCP Client连接到服务器并获取工具列表
  2. LLM为您的问题选择合适的工具
  3. 调用MCP服务器上的Tool以返回实际数据
  4. LLM使用Tool结果生成自然语言响应

主要设置

application.properties

# Ollama LLM
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.options.model=qwen3-4b:Q4_K_M
spring.ai.ollama.chat.options.temperature=0.7

# MCP Client 연결 설정
spring.ai.mcp.client.sse.connections.webmvc-weather-api.url=http://localhost:9090/mcp/sse

使用不同的LLM模型

要使用Ollama的其他型号(仅限支持Tool Calling的型号):

# Tool Calling 지원 모델 다운로드
ollama pull llama3.1
ollama pull mistral

# application.properties 수정
spring.ai.ollama.chat.options.model=llama3.1

注意:要使用Tool Calling,必须使用支持的模型(Llama 3.1+、Mistral、Qwen等)。

故障射击

1.“拒绝连接”错误

原因:MCP服务器未运行

解决:

cd C:\workspace-test\my-webmvc-mcp
java -jar target/webmvc-mcp-0.0.1-SNAPSHOT.jar

2.“Ollama not available”错误

原因:Ollama服务器无法运行

解决:

ollama serve

3.不调用Tool

原因:LLM不认为需要工具

解决:更具体地更改问题

  • “天气怎么样?”
  • “告诉我首尔江南区观光地的天气”
  • “济州岛观光地TCI指数是?”

扩展想法

  1. 添加Web UI:使用React、Vue等实现聊天界面
  2. 对话历史记录:记忆以前对话内容的功能
  3. 多MCP服务器:同时连接多个MCP服务器
  4. 流响应:实时响应流到SSE

STDIO与WebMVC比较

项目 STDIO MCP WebMVC MCP(当前方式)
运输 stdin/stdout HTTP/SSE
运行服务器 客户端启动独立运行
远程连接 不可能 可能
多客户端 不可能 可能
部署 在每台PC上安装 仅1台服务器

WebMVC方式的优点:

  • 集中式服务器管理
  • 多个客户端可同时使用
  • 通过网络提供远程工具