用 LINE Messaging API 打造 MCP 伺服器,c#如何實作

一、MCP說明

MCP(Model Context Protocol) 是一種協定,讓大型語言模型(LLM)可以與外部系統或服務進行互動,例如查詢資料庫、調用 API 或執行特定功能。其主要目的是解決 LLM 的「幻覺問題」(hallucination),即模型可能基於訓練數據生成不準確的回應。

MCP 的架構分為三個角色:

  1. Host:負責接收使用者請求的 LLM 應用程式,例如 Claude 桌面應用程式。

  2. Client:Host 的一部分,負責與 MCP server 通信。

  3. Server:提供外部功能或資料的服務端,具備工具(Tools)和資源(Resources)。

MCP 的運作流程:

  1. Host 啟動時,Client 會向 Server 請求工具清單。

  2. 根據使用者的輸入,LLM 決定使用哪些工具。

  3. Client 調用 Server 的工具,完成功能後回傳結果。

  4. Host 整合回應並傳遞給使用者。

應用案例: 可以用 MCP server 與 LINE Messaging API 結合,讓 LLM 發送訊息給 LINE 官方帳號的好友,或根據天氣資訊生成動態內容。


二、C# MVC 範例:簡易 MCP Server

以下是基於 C# ASP.NET Core MVC 實作的一個簡單 MCP Server 範例,實現一個名為 broadcast_message 的工具,用於模擬發送訊息。

1. 建立 Model(工具定義)

 // Models/Tool.cs
 public class Tool
 {
     public string Name { get; set; }
     public string Description { get; set; }
 }

2. 建立 Controller(處理請求)

 // Controllers/McpController.cs
 using Microsoft.AspNetCore.Mvc;
 
 [ApiController]
 [Route("mcp")]
 public class McpController : ControllerBase
 {
     // 模擬工具清單
     private static readonly List<Tool> Tools = new List<Tool>
     {
         new Tool { Name = "broadcast_message", Description = "Send a message to all users" }
     };
 
     // Endpoint: tools/list
     [HttpGet("tools/list")]
     public IActionResult GetTools()
     {
         return Ok(Tools);
     }
 
     // Endpoint: tools/call
     [HttpPost("tools/call")]
     public IActionResult CallTool([FromBody] dynamic request)
     {
         string toolName = request.tool;
         string message = request.parameters?.message;
 
         if (toolName == "broadcast_message" && !string.IsNullOrEmpty(message))
         {
             // 模擬訊息廣播
             return Ok(new { success = true, message = $"Broadcasted: {message}" });
         }
 
         return BadRequest(new { success = false, error = "Invalid tool or parameters" });
     }
 }

3. 建立 View(測試頁面)

 <!-- Views/Home/Index.cshtml -->
 <!DOCTYPE html>
 <html>
 <head>
     <title>MCP Test</title>
 </head>
 <body>
     <h1>MCP Server 測試</h1>
     <p>訪問 `/mcp/tools/list` 取得工具清單</p>
     <p>訪問 `/mcp/tools/call` 測試工具呼叫</p>
 </body>
 </html>

4. 啟動專案並測試

  1. 啟動 ASP.NET Core 專案。

  2. 測試工具清單:

    • 用瀏覽器訪問:http://localhost:5000/mcp/tools/list

    • 回應:

       [
           {
               "name": "broadcast_message",
               "description": "Send a message to all users"
           }
       ]
  3. 測試工具呼叫:

    • 用 Postman 或其他工具發送 POST 請求到 http://localhost:5000/mcp/tools/call,Body(JSON)如下:

       {
           "tool": "broadcast_message",
           "parameters": {
               "message": "Hello, MCP!"
           }
       }
    • 回應:

       {
           "success": true,
           "message": "Broadcasted: Hello, MCP!"
       }

總結

以上範例展示了如何用 C# MVC 實現一個簡單的 MCP Server,包含工具清單和工具調用功能,適用於理解 MCP 的基本概念與運作方式。

參考連結

作者: 林壽山

目前任職於軟體公司研究開發部門,擔任專業處長,專注於.NET C# 開發,並具備豐富的POS 收銀系統與金流整合開發經驗。我精通各類支付系統的設計與開發,包含第三方支付(如綠界、藍新、歐付寶、速買配、馬來西亞 ePay/HappyPay、台新 One 碼)、行動支付(悠遊卡、一卡通、支付寶、微信支付、街口支付)、以及信用卡支付(聯合信用卡)。 熟悉多種開發技術,擅長PHP 網頁開發(CodeIgniter、Laravel 框架)、Delphi 程式設計、資料庫設計、C# WinForm/WebForm 應用開發、ASP.NET MVC、API 串接設計,並具備LINE 串接開發的豐富經驗。 除了技術開發之外,我也熱衷於技術分享,曾擔任台中學校產業學院講師 5 年,培育新一代的軟體開發人才,致力於推動軟體技術的應用與創新。 我對技術充滿熱忱,始終保持學習與探索的心態,期望透過軟體開發為企業與社會創造更大的價值。