此服務透過 Model Context Protocol (MCP) 並使用 Spring Boot 搭配 WebFlux 傳輸,提供基本計算機運算功能。它設計為初學者學習 MCP 實作的簡單範例。
更多資訊請參考 MCP Server Boot Starter 參考文件。
此服務展示了:
- 支援 SSE(Server-Sent Events)
- 使用 Spring AI 的
@Tool註解自動註冊工具 - 基本計算機功能:
- 加法、減法、乘法、除法
- 次方計算與平方根
- 取餘數與絕對值
- 提供操作說明的幫助功能
此計算機服務提供以下功能:
-
基本算術運算:
- 兩數相加
- 一數減去另一數
- 兩數相乘
- 一數除以另一數(含除以零檢查)
-
進階運算:
- 次方計算(底數的指數次方)
- 平方根計算(含負數檢查)
- 取餘數計算
- 絕對值計算
-
幫助系統:
- 內建幫助函式,說明所有可用操作
此服務透過 MCP 協定公開以下 API 端點:
add(a, b):將兩數相加subtract(a, b):將第二個數從第一個數中減去multiply(a, b):將兩數相乘divide(a, b):將第一個數除以第二個數(含除以零檢查)power(base, exponent):計算次方squareRoot(number):計算平方根(含負數檢查)modulus(a, b):計算除法餘數absolute(number):計算絕對值help():取得可用操作的說明資訊
在 com.microsoft.mcp.sample.client 套件中包含一個簡單的測試用戶端。SampleCalculatorClient 類別展示了計算機服務的可用操作。
專案中包含一個 LangChain4j 範例用戶端,位於 com.microsoft.mcp.sample.client.LangChain4jClient,示範如何將計算機服務與 LangChain4j 及 GitHub 模型整合:
-
GitHub Token 設定:
若要使用 GitHub 的 AI 模型(如 phi-4),需要 GitHub 個人存取權杖:
a. 前往 GitHub 帳號設定頁面:https://github.com/settings/tokens
b. 點選「Generate new token」→「Generate new token (classic)」
c. 為權杖命名以便識別
d. 選擇以下權限範圍:
repo(私有倉庫完整控制權)read:org(讀取組織與團隊成員資格、讀取組織專案)gist(建立 gist)user:email(讀取使用者電子郵件地址(唯讀))
e. 點選「Generate token」並複製新權杖
f. 設定為環境變數:
Windows 系統:
set GITHUB_TOKEN=your-github-tokenmacOS/Linux 系統:
export GITHUB_TOKEN=your-github-tokeng. 若需永久設定,請透過系統設定將其加入環境變數
-
將 LangChain4j GitHub 依賴加入專案(已包含於 pom.xml):
<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-github</artifactId> <version>${langchain4j.version}</version> </dependency>
-
確保計算機伺服器正在
localhost:8080運行
此範例示範:
- 透過 SSE 傳輸連接計算機 MCP 伺服器
- 使用 LangChain4j 建立聊天機器人,利用計算機功能
- 整合 GitHub AI 模型(目前使用 phi-4 模型)
用戶端會發送以下範例查詢以展示功能:
- 計算兩數和
- 計算數字平方根
- 取得計算機可用操作的幫助資訊
執行範例並查看主控台輸出,了解 AI 模型如何使用計算機工具回應查詢。
LangChain4j 用戶端設定使用 GitHub 的 phi-4 模型,設定如下:
ChatLanguageModel model = GitHubChatModel.builder()
.apiKey(System.getenv("GITHUB_TOKEN"))
.timeout(Duration.ofSeconds(60))
.modelName("phi-4")
.logRequests(true)
.logResponses(true)
.build();若要使用其他 GitHub 模型,只需將 modelName 參數改為其他支援的模型(例如 "claude-3-haiku-20240307"、"llama-3-70b-8192" 等)。
專案需要以下主要依賴:
<!-- For MCP Server -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
<!-- For LangChain4j integration -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-mcp</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<!-- For GitHub models support -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-github</artifactId>
<version>${langchain4j.version}</version>
</dependency>使用 Maven 建置專案:
./mvnw clean install -DskipTestsjava -jar target/calculator-server-0.0.1-SNAPSHOT.jarMCP Inspector 是一個方便與 MCP 服務互動的工具。使用此計算機服務時:
-
安裝並啟動 MCP Inspector,在新終端視窗執行:
npx @modelcontextprotocol/inspector
-
透過瀏覽器開啟網頁介面,點擊應用程式顯示的 URL(通常是 http://localhost:6274)
-
設定連線:
- 傳輸類型選擇「SSE」
- URL 設為正在運行伺服器的 SSE 端點:
http://localhost:8080/sse - 點擊「Connect」
-
使用工具:
- 點擊「List Tools」查看可用的計算機操作
- 選擇工具後點擊「Run Tool」執行操作
專案包含 Dockerfile 以便容器化部署:
-
建置 Docker 映像檔:
docker build -t calculator-mcp-service . -
執行 Docker 容器:
docker run -p 8080:8080 calculator-mcp-service
此操作將:
- 使用 Maven 3.9.9 與 Eclipse Temurin 24 JDK 建置多階段 Docker 映像
- 建立優化的容器映像
- 開放服務於 8080 埠口
- 在容器內啟動 MCP 計算機服務
容器啟動後,可透過 http://localhost:8080 存取服務。
-
權杖權限問題:若遇到 403 Forbidden 錯誤,請確認權杖擁有前述正確權限。
-
找不到權杖:若出現「No API key found」錯誤,請確認 GITHUB_TOKEN 環境變數已正確設定。
-
速率限制:GitHub API 有速率限制,若遇到 429 錯誤,請稍候幾分鐘後再試。
-
權杖過期:GitHub 權杖可能會過期,若一段時間後出現認證錯誤,請重新產生權杖並更新環境變數。
如需進一步協助,請參考 LangChain4j 文件 或 GitHub API 文件。
免責聲明:
本文件係使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們致力於確保準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於重要資訊,建議採用專業人工翻譯。我們不對因使用本翻譯而產生的任何誤解或誤釋負責。
