Model Context Protocol (MCP) - 嘗試創建和測試一下MCP Server

1.簡單介紹

MCP是Model Context Protocol的縮寫,是Anthropic開源的一個標準協議。MCP使得大語言模型可以和外部的數據源,工具進行集成。當前MCP在社區逐漸地流行起來了。同時official C# SDK(倉庫是csharp-sdk)?也在不斷更新中,目前最新版本是0.1.0-preview.7,相對之前的版本還是在不斷更新的(發現最新版的McpClientFactory.CreateAsync方法好像有變更)。關于MCP的具體信息可以參考官方網站。

MCP使用的是client-server架構,下圖為官網上面的一張圖片

????????

目前MCP client和MCP server交互使用的TransportType有兩種,一種是Stdio(標準輸入輸出),另外一種是SSE(Server Sent Event),http目前還未支持。在集成本地command-line tool或者Shell腳本場景方面,Stdio可能適合些。SSE支持Server-to-Client streaming。

????????

????????

這邊簡單嘗試一個MCP server去獲取Microsoft 365 Planner中的Plan, Task信息,然后使用MCP Inspector去調用一下看看,

2.具體說明

2.1 準備階段

假定存在一個Microsoft 365 Planner

????????

在Microsoft 365 Planer中,一個Microsoft 365 Group對應多個Plan, 一個Plan對應多個Task的。

2.2?創建WebApi項目

1) 創建一個基于.NET9的Asp.NET Core WebApi項目

2) 添加nuget package?ModelContextProtocol.AspNetCore (版本是0.1.0-preview.7)?

? ? 添加了這個package,就不需要再為IEndpointRouteBuilder添加拓展方法了(MapMcpSse)

3)由于要獲取Microsoft 365 Planer的信息,需要使用Microsfot Graph Rest Api,添加一下Microsoft Graph nuget package

????????

?4) program.cs的代碼如下

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer().WithToolsFromAssembly();
var app = builder.Build();
app.MapMcp();
app.Run();

note, 其中WithToolsFromAssembly方法會掃描程序集當中標注了[McpServerToolType] attribute的類進行注冊的

?5)在項目中添加一個Tools文件夾,然后添加一個靜態類

????????

[McpServerToolType]
public static class M365PlannerInfoQueryTool
{...[McpServerTool, Description("List the Microsoft 365 Groups the user belong to")]public static string[] ListAllGroupsTheUserBelongTo(){...GraphServiceClient graphClient = _appClient!;var groupResponse = graphClient?.Groups.GetAsync().Result;var groups = groupResponse?.Value;List<string> groupList = new List<string>();foreach (var group in groups!){Console.WriteLine($"Group Display Name: {group.DisplayName} - Group Id: {group.Id}");groupList.Add($"Group Name: {group.DisplayName} - Group Id: {group.Id}");}return groupList.ToArray();}...
}

2.3 運行一下

運行項目后,這邊得到的地址是http://localhost:5266

????????

2.4 使用MCP Inspector測試

1) 在命令行中運行 npx @modelcontextprotocol/inspector

2) 在打開的MCP Inspector界面中,設定Transport Type為SSE,URL為之前運行起來的MCP Server地址http://localhost:5266/sse,點擊Connect

????????

連接成功之后的界面如下

????????

3)點擊? MCP Inspector界面右側的List Tools按鈕

????????

發現MCP Server中有標注[McpServerTool] attribute的方法被列出來了,

????????

4)點擊第一個Tool - ListAllGroupsTheUserBelongTo,界面變成如下的樣子

????????

5)點擊最右側的Run Tool按鈕,發現確實有結果返回,也就是MCP Server的方法被調用了

?????????? ?

有了MCP Server之后,就可以在MCP Client中進行調用了, 在MCP Client中,可以結合大語言模型的能力進行MCP Server的 tool的調用。其實MCP使用也是基于Function Calling的。

假定嘗試一下將MCP Client和GitHub Copilot extension結合起來(使用LLM),則運行效果如下

????????

后續將會嘗試一下在MCP Client中使用Semantic Kernel或者Microsoft.Extensions.AI。

3.總結

本文簡單介紹了一下MCP的一些知識以及如何創建一個MCP Server。創建好的MCP Server也可以在VS Code中進行配置。配置好后,在GitHub Copilot界面中添加對應的tool,后續就可以基于自然語言進行tool的調用了。

本文如果哪里有錯誤,麻煩告之,謝謝謝謝!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901203.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(三)行為模式:12、訪問者模式(Visitor Pattern)(C++示例)

目錄 1、訪問者模式含義 2、訪問者模式的UML圖學習 3、訪問者模式的應用場景 4、訪問者模式的優缺點 5、訪問者模式C實現的實例 1、訪問者模式含義 訪問者模式&#xff08;Visitor Pattern&#xff09;是一種行為型設計模式&#xff0c;它允許將一個作用于某對象結構中的各…

windows安卓子系統wsa隱藏應用列表的安裝激活使用

Windows 11 安卓子系統應用部署全攻略 windows安卓子系統wsa隱藏應用列表的安裝激活使用|過檢測核心前端 在 Windows 11 系統中&#xff0c;安卓子系統為用戶帶來了在電腦上運行安卓應用的便利。經過一系列的操作&#xff0c;我們已經完成了 Windows 11 安卓子系統的底層和前端…

Elasticsearch 集群搭建

一、集群規劃 1.1 節點角色規劃 節點類型配置要求推薦數量Master節點低磁盤、中等CPU/內存3&#xff08;奇數防止腦裂&#xff09;Data節點高磁盤、高內存、多核CPU根據數據量擴展Coordinating節點高CPU/內存、低磁盤2&#xff08;可選&#xff09; 1.2 硬件建議 內存&…

React 響應事件

開發環境&#xff1a;Reacttsantd 使用 React 可以在 JSX 中添加 事件處理函數。其中事件處理函數為自定義函數&#xff0c;它將在響應交互&#xff08;如點擊、懸停、表單輸入框獲得焦點等&#xff09;時觸發。 學習內容 1.編寫事件處理函數的不同方法 2.如何從父組件傳遞事件…

SQL基礎入門:從CRUD到JOIN再到索引(通俗易懂版)

一、為什么需要SQL&#xff1f; 想象你在管理一個圖書館&#xff1a; 傳統方法&#xff1a;手動記錄每本書的位置、借閱者、歸還日期SQL方法&#xff1a;用數據庫系統自動管理&#xff0c;快速查詢《Java編程思想》在哪個書架 SQL&#xff08;Structured Query Language&…

MINIQMT學習課程Day11

現在開始進行策略的交易買賣分析&#xff1a; 還是之前的步驟&#xff0c;打開qmt&#xff0c;選擇獨立交易&#xff0c; 之后使用pycharm&#xff0c;編寫py文件 導入包&#xff1a; import time, datetime, traceback, sys from xtquant import xtdata from xtquant.xttr…

# 實時人臉性別與年齡識別:基于OpenCV與深度學習模型的實現

實時人臉性別與年齡識別&#xff1a;基于OpenCV與深度學習模型的實現 在當今數字化時代&#xff0c;計算機視覺技術正以前所未有的速度改變著我們的生活與工作方式。其中&#xff0c;人臉檢測與分析作為計算機視覺領域的重要分支&#xff0c;已廣泛應用于安防監控、智能交互、…

Python Cookbook-5.14 給字典類型增加排名功能

任務 你需要用字典存儲一些鍵和“分數”的映射關系。你經常需要以自然順序(即以分數的升序)訪問鍵和分數值&#xff0c;并能夠根據那個順序檢查一個鍵的排名。對這個問題&#xff0c;用dict 似乎不太合適。 解決方案 我們可以使用 dict 的子類&#xff0c;根據需要增加或者重…

十四種邏輯器件綜合對比——《器件手冊--邏輯器件》

目錄 邏輯器件 簡述 按功能分類 按工藝分類 按電平分類 特殊功能邏輯器件 應用領域 詳盡闡述 1 邏輯門 一、基本概念 二、主要類型 三、實現方式 四、應用領域 2 反相器 工作原理 基本功能 主要應用 常見類型 特點 未來發展趨勢 3 鎖存器 基本概念 工作原理 主要類型…

如何更改wsl2中的ubuntu默認安裝位置

先前的一篇文章提到了如何更改wsl里面ubuntu的home目錄&#xff0c;wsl裝ubuntu的home目錄在哪&#xff0c;如何更改home&#xff1f;_wsl安裝的ubuntu在哪里-CSDN博客 這次是要更改wsl中ubuntu的安裝目錄&#xff0c;畢竟默認安裝到c盤下會占用不少空間的。 從微軟商店get后…

最近在工作中感受到了設計模式的重要性

之前了解設計模式&#xff1a;只是應付一下面試 在之前一年多的工作中也沒遇到使用場景 最近在搭建驗證環境的時候&#xff0c;才發現這玩意這么重要 首先是設計模式的使用場景一定是在很復雜繁瑣的場景下進行的 之所以說是復雜/繁瑣的場景&#xff0c;因為一些場景也許邏輯不難…

Python深度學習基礎——卷積神經網絡(CNN)(PyTorch)

CNN原理 從DNN到CNN 卷積層與匯聚 深度神經網絡DNN中&#xff0c;相鄰層的所有神經元之間都有連接&#xff0c;這叫全連接&#xff1b;卷積神經網絡 CNN 中&#xff0c;新增了卷積層&#xff08;Convolution&#xff09;與匯聚&#xff08;Pooling&#xff09;。DNN 的全連接…

Linux 第三講 --- 基礎指令(三)

前言&#xff1a; 在前面我們已經講了有十幾個Linux的基礎指令&#xff0c;今天我們再補充幾個常用的基礎指令&#xff0c;為后面的學習做準備 。 目錄 前言&#xff1a; 一、兩個與時間相關的指令 1.date指令 演示 &#xff1a; 時間戳 設置時間 2、cal指令 演示&#x…

基于SiamFC的紅外目標跟蹤

基于SiamFC的紅外目標跟蹤 1,背景與原理2,SiamFC跟蹤方法概述2.1 核心思想2.2 算法優勢3,基于SiamFC的紅外跟蹤代碼詳解3.1 網絡定義與交叉相關模塊3.2 SiamFC 跟蹤器實現3.3 主程序:利用 OpenCV 實現視頻跟蹤4,總結與展望在紅外監控、無人機防御以及低光照場景中,紅外圖…

Odoo 部署本地 把現時的excel計算表格部署上odoo 教程

要將現有的 Excel 計算表格部署到 Odoo 平臺上&#xff0c;您可以按照以下步驟進行操作&#xff1a; 將 Excel 表格中的數據轉移到 Odoo 模塊中&#xff1a;首先&#xff0c;您需要將 Excel 表格中的數據導出為 CSV 格式&#xff0c;然后可以使用 Odoo 的數據導入功能將這些數據…

KWDB創作者計劃—KWDB認知引擎:數據流動架構與時空感知計算的范式突破

引言&#xff1a;數據智能的第三范式 在數字化轉型進入深水區的2025年&#xff0c;企業數據系統正面臨三重悖論&#xff1a;數據規模指數級增長與實時決策需求之間的矛盾、多模態數據孤島與業務連續性要求之間的沖突、靜態存儲范式與動態場景適配之間的鴻溝。KWDB&#xff08;K…

C語言 數據結構 【棧】動態模擬實現

引言 動態模擬實現棧的各個接口 一、棧的概念與結構 棧&#xff1a;一種特殊的線性表&#xff0c;其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂&#xff0c;另一端稱為棧底。棧中的數據元素遵守后進先出LIFO&#xff08;LastInFirstOut…

Python itertools模塊的groupby函數介紹

itertools.groupby 是 Python 標準庫 itertools 模塊中的一個函數&#xff0c;它的主要功能是對可迭代對象中相鄰的相同元素進行分組。 itertools.groupby(iterable, keyNone) 函數 作用&#xff1a; 將連續的&#xff08;相鄰的&#xff09;相同元素分組&#xff0c;返回 (…

Python實例題:使用Python生成分形圖片

目錄 Python實例題 題目 題目分析 需求理解 關鍵知識點 實現思路分析 代碼實現 代碼解釋 mandelbrot 函數&#xff1a; 設置復平面區域和圖像參數&#xff1a; 計算分形數據&#xff1a; 繪圖展示&#xff1a; 運行思路 Python實例題 題目 使用Python生成分形圖…

系統編程1(進程的概念與原理)

進程的概念與原理 計算機組成部分一般遵循馮諾依曼結構&#xff0c;也就是由控制器、運算器、存儲器、輸入設備、輸出設備五個部分組成。 ? 程序的編譯 一般在編寫出程序之后&#xff0c;并不能直接運行&#xff0c;而是需要把程序通過編譯器進行編譯&#xff0c;生成可執行…