精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

利用MCP創(chuàng)建AI代理:C#實(shí)踐指南

發(fā)布于 2025-10-31 10:35
瀏覽
0收藏

譯者 | 晶顏

審校 | 重樓

大型語言模型(LLMs)的快速演進(jìn)已對人工智能應(yīng)用領(lǐng)域產(chǎn)生顛覆性影響,其核心優(yōu)勢在于具備自然語言理解與生成能力及邏輯推理能力。然而,LLMs仍存在顯著局限性:無法訪問實(shí)時(shí)數(shù)據(jù)源,亦不能調(diào)用外部計(jì)算工具。這種“信息孤立”狀態(tài)使其無法提供實(shí)時(shí)更新的信息,同時(shí)限制了其在動態(tài)系統(tǒng)中的適配能力及文本生成之外的任務(wù)執(zhí)行能力。

當(dāng)前行業(yè)針對該問題的解決方案,要求開發(fā)人員為每個(gè)數(shù)據(jù)源或工具單獨(dú)構(gòu)建應(yīng)用連接,導(dǎo)致系統(tǒng)結(jié)構(gòu)復(fù)雜,不僅難以實(shí)現(xiàn)管理、擴(kuò)展,也無法在不同AI應(yīng)用間形成標(biāo)準(zhǔn)化體系。無論是通信協(xié)議、認(rèn)證機(jī)制還是數(shù)據(jù)轉(zhuǎn)換邏輯,均需針對每個(gè)集成項(xiàng)目開展定制化開發(fā),最終造成開發(fā)成本高企、跨系統(tǒng)兼容性不足等問題。

模型上下文協(xié)議(MCP)通過通用接口標(biāo)準(zhǔn)有效解決了上述痛點(diǎn),為AI系統(tǒng)與外部資源的連接提供了標(biāo)準(zhǔn)化方案。其運(yùn)作邏輯可簡化為:構(gòu)建“AI應(yīng)用的USB-C接口”,使所有符合MCP標(biāo)準(zhǔn)的客戶端,無需掌握具體實(shí)現(xiàn)細(xì)節(jié),即可與任意符合MCP標(biāo)準(zhǔn)的服務(wù)器建立連接。

憑借標(biāo)準(zhǔn)化特性,MCP為開發(fā)人員構(gòu)建AI代理提供了多重核心優(yōu)勢:其一,所有連接的API層面保持一致性,大幅簡化多數(shù)據(jù)源集成流程;其二,標(biāo)準(zhǔn)化的認(rèn)證與授權(quán)機(jī)制,提升系統(tǒng)安全性與隱私控制能力;其三,標(biāo)準(zhǔn)化特性支持開發(fā)可復(fù)用組件,供不同組織及各類AI應(yīng)用靈活調(diào)用。

MCP的價(jià)值不僅限于功能可用性層面。基于其標(biāo)準(zhǔn)協(xié)議,可構(gòu)建完善的生態(tài)系統(tǒng),使AI代理在不同工具與數(shù)據(jù)源之間切換時(shí),無需擔(dān)心上下文與狀態(tài)丟失。而開發(fā)需執(zhí)行復(fù)雜多步驟任務(wù)的AI代理,恰恰需要具備與多系統(tǒng)交互的能力,MCP的這一特性為此類開發(fā)提供了關(guān)鍵支撐。

C#編程語言和.NET生態(tài)系統(tǒng)為基于MCP的AI代理開發(fā)提供了最佳基礎(chǔ)。由Anthropic與微軟聯(lián)合開發(fā)的官方C# SDK,充分利用現(xiàn)代.NET應(yīng)用的依賴注入、托管及配置功能。這種深度集成使開發(fā)人員能夠構(gòu)建可擴(kuò)展、易維護(hù)的AI代理,且該類代理可適配多種部署環(huán)境,從本地開發(fā)機(jī)器到云端生產(chǎn)系統(tǒng)均能穩(wěn)定運(yùn)行。

本文為C#環(huán)境下基于MCP的AI代理開發(fā)與部署提供了詳盡指南,內(nèi)容涵蓋協(xié)議架構(gòu)解析、實(shí)現(xiàn)模式研究,以及如何依托MCP功能開發(fā)滿足安全、性能及維護(hù)要求的高效AI代理。

模型上下文協(xié)議基礎(chǔ)原理

模型上下文協(xié)議(MCP)的架構(gòu)設(shè)計(jì)基于業(yè)界廣泛認(rèn)可的通信標(biāo)準(zhǔn)與設(shè)計(jì)原則,核心目標(biāo)是實(shí)現(xiàn)系統(tǒng)間的互操作性、安全性與可擴(kuò)展性。MCP采用JSON-RPC 2.0作為消息格式,為客戶端與服務(wù)器間的遠(yuǎn)程過程調(diào)用提供高效且可靠的框架。協(xié)議設(shè)計(jì)過程中,未選擇開發(fā)全新通信方式,而是優(yōu)先采用已成熟驗(yàn)證的技術(shù),確保協(xié)議穩(wěn)定性與兼容性。

MCP采用客戶端-服務(wù)器架構(gòu)模式:AI應(yīng)用程序(主機(jī))運(yùn)行MCP客戶端,客戶端與MCP服務(wù)器建立連接;服務(wù)器通過資源、工具、提示等各類功能,向已連接的客戶端開放服務(wù)能力。系統(tǒng)組件呈現(xiàn)非對稱結(jié)構(gòu)特征:客戶端主動發(fā)起連接流程,隨后向服務(wù)器發(fā)送請求;服務(wù)器僅響應(yīng)客戶端請求,并可選擇性對請求進(jìn)行采樣處理。

MCP借鑒了語言服務(wù)器協(xié)議(LSP)的核心設(shè)計(jì)理念——LSP已在軟件開發(fā)生態(tài)中實(shí)現(xiàn)編程語言服務(wù)與開發(fā)工具交互的標(biāo)準(zhǔn)化。與LSP類似,MCP支持任意AI應(yīng)用通過標(biāo)準(zhǔn)化接口連接至任意數(shù)據(jù)源或工具,打破了傳統(tǒng)開發(fā)中的“接口壁壘”。

能力協(xié)商是MCP架構(gòu)的關(guān)鍵機(jī)制,旨在保障客戶端與服務(wù)器間的兼容性。連接建立初期,雙方會執(zhí)行握手流程,交換能力信息并明確各自可提供的功能。這一機(jī)制確保即便客戶端與服務(wù)器的功能集、版本或能力存在差異,系統(tǒng)仍能保持穩(wěn)定連接。

安全與信任是MCP架構(gòu)設(shè)計(jì)的核心考量因素。鑒于MCP支持任意數(shù)據(jù)訪問與代碼執(zhí)行,具備強(qiáng)大功能拓展性,因此對用戶授權(quán)、數(shù)據(jù)隱私及工具安全性提出了嚴(yán)格要求。安全設(shè)計(jì)貫穿協(xié)議架構(gòu)全流程,為基于MCP的系統(tǒng)在生產(chǎn)環(huán)境中的安全部署提供了底層保障。

核心組件與功能特性

MCP系統(tǒng)由多個(gè)關(guān)鍵組件構(gòu)成,各組件協(xié)同工作,實(shí)現(xiàn)AI系統(tǒng)與外部資源的深度整合。開發(fā)基于MCP的AI代理,需首先深入理解這些核心組件的功能與作用機(jī)制。

資源組件

資源是MCP系統(tǒng)中的核心數(shù)據(jù)訪問載體。通過資源組件,服務(wù)器可向AI模型及用戶提供標(biāo)準(zhǔn)化的內(nèi)容與關(guān)聯(lián)背景信息。每個(gè)資源均具備唯一URI,用于身份標(biāo)識,且可承載從基礎(chǔ)文本文件到復(fù)雜結(jié)構(gòu)化信息等各類內(nèi)容。資源抽象機(jī)制使服務(wù)器能夠?qū)崿F(xiàn)數(shù)據(jù)分發(fā),而無需客戶端掌握數(shù)據(jù)存儲方式或訪問協(xié)議,降低了客戶端開發(fā)復(fù)雜度。

根據(jù)內(nèi)容特性,資源可分為兩類:

  • 靜態(tài)資源:包含長期穩(wěn)定、極少變更的內(nèi)容,如文檔、配置文件等;
  • 動態(tài)資源:內(nèi)容會根據(jù)當(dāng)前系統(tǒng)數(shù)據(jù)及外部環(huán)境因素實(shí)時(shí)生成,支持AI代理整合實(shí)時(shí)信息。

憑借資源組件的靈活性,MCP服務(wù)器可作為AI系統(tǒng)與實(shí)時(shí)數(shù)據(jù)庫、API、監(jiān)控系統(tǒng)等外部資源的數(shù)據(jù)橋梁,實(shí)現(xiàn)多源數(shù)據(jù)的高效對接。

行動導(dǎo)向組件

MCP的行動導(dǎo)向組件包含能夠使AI模型在連接的系統(tǒng)中運(yùn)行功能并執(zhí)行操作的工具。工具定義需包含完整架構(gòu)細(xì)節(jié),明確輸入?yún)?shù)要求、預(yù)期輸出結(jié)果及行為描述?;跇?biāo)準(zhǔn)化架構(gòu)定義,AI模型可準(zhǔn)確理解工具使用方式,同時(shí)保障類型安全性與操作可驗(yàn)證性。

系統(tǒng)安全與用戶管理是MCP工具執(zhí)行機(jī)制的核心設(shè)計(jì)原則:工具調(diào)用前需獲得用戶明確授權(quán),協(xié)議支持用戶在工具運(yùn)行前核查其使用范圍與權(quán)限。這種設(shè)計(jì)使AI代理能夠執(zhí)行復(fù)雜自動化任務(wù),同時(shí)有效防范未授權(quán)操作風(fēng)險(xiǎn)。

提示組件

提示組件使服務(wù)器能夠向AI應(yīng)用提供預(yù)置的通信模板與流程模板。與主要為AI模型提供數(shù)據(jù)支持的資源、工具不同,提示組件的核心作用是通過為任務(wù)與查詢提供結(jié)構(gòu)化模板,支撐人機(jī)交互過程。這些模板包含可自定義參數(shù),參數(shù)值可從當(dāng)前上下文自動獲取。

借助提示組件,開發(fā)人員可構(gòu)建可復(fù)用的交互模式,適配各類AI應(yīng)用場景。對于需建立標(biāo)準(zhǔn)化AI交互流程,或?yàn)槿狈ψ顑?yōu)提示策略的用戶提供分步指導(dǎo)的組織而言,該組件的價(jià)值尤為突出。

傳輸層與通信機(jī)制

MCP的傳輸層為客戶端與服務(wù)器間的通信提供基礎(chǔ)支撐,支持多種傳輸機(jī)制,以適配不同部署場景與業(yè)務(wù)需求。協(xié)議采用“傳輸無關(guān)”設(shè)計(jì)理念,確保相同應(yīng)用邏輯可在各類通信通道中直接運(yùn)行,無需修改代碼。

標(biāo)準(zhǔn)輸入/輸出(stdio)傳輸

stdio是MCP實(shí)現(xiàn)中最常用的傳輸機(jī)制,其核心優(yōu)勢在于依托各操作系統(tǒng)與編程環(huán)境中均具備的標(biāo)準(zhǔn)輸入/輸出流,實(shí)現(xiàn)廣泛兼容性。該傳輸方式尤其適用于本地開發(fā)場景,以及MCP服務(wù)器作為獨(dú)立進(jìn)程部署、且由客戶端應(yīng)用程序啟動和管理的場景。

在開發(fā)與測試階段,stdio傳輸具備顯著優(yōu)勢:通過標(biāo)準(zhǔn)日志機(jī)制實(shí)現(xiàn)便捷調(diào)試;支持進(jìn)程生命周期的簡化管理;配置需求極低;同時(shí)天然實(shí)現(xiàn)進(jìn)程隔離,避免服務(wù)器故障直接影響客戶端應(yīng)用程序運(yùn)行。

HTTP傳輸

HTTP傳輸機(jī)制將MCP的應(yīng)用范圍拓展至分布式系統(tǒng)與網(wǎng)絡(luò)化部署場景。通過支持標(biāo)準(zhǔn)HTTP協(xié)議,MCP服務(wù)器可作為網(wǎng)絡(luò)服務(wù)部署,實(shí)現(xiàn)任意聯(lián)網(wǎng)客戶端的訪問。這種傳輸方式使“共享MCP服務(wù)器(為多客戶端應(yīng)用提供服務(wù))”、“云端部署(服務(wù)器與客戶端處于不同環(huán)境)”等場景成為可能。

HTTP傳輸引入了額外的認(rèn)證、授權(quán)及網(wǎng)絡(luò)安全考量,MCP通過可擴(kuò)展頭部機(jī)制及對標(biāo)準(zhǔn)HTTP安全實(shí)踐的支持,滿足上述安全需求;同時(shí),協(xié)議還定義了針對HTTP特有問題(如連接池管理、超時(shí)控制、錯(cuò)誤處理)的解決方案。

服務(wù)器推送事件(SSE)傳輸

SSE傳輸采用混合策略,融合了HTTP通信的優(yōu)勢與實(shí)時(shí)流傳輸能力。該機(jī)制支持服務(wù)器主動向客戶端推送更新,無需客戶端持續(xù)輪詢,因此特別適用于實(shí)時(shí)數(shù)據(jù)流處理、長時(shí)間運(yùn)行操作等場景。

對于需實(shí)時(shí)感知外部條件變化、或接收相關(guān)事件通知的AI代理而言,SSE傳輸?shù)膬r(jià)值尤為顯著。它使開發(fā)更具響應(yīng)性與情境感知能力的AI系統(tǒng)成為可能——此類系統(tǒng)可在無需用戶手動干預(yù)的情況下,自動對外部環(huán)境變化做出反應(yīng)。

利用MCP創(chuàng)建AI代理:C#實(shí)踐指南-AI.x社區(qū)

圖1:模型上下文協(xié)議架構(gòu)圖,展示了主機(jī)之間的關(guān)系:通過協(xié)議層與客戶端、服務(wù)器以及外部系統(tǒng)進(jìn)行通信

C# SDK實(shí)現(xiàn)與架構(gòu)

針對模型上下文協(xié)議(MCP)的官方C#開發(fā)工具包(SDK),實(shí)現(xiàn)了協(xié)議的完整功能,并深度融合.NET生態(tài)系統(tǒng)的技術(shù)特性。該SDK由Anthropic與微軟聯(lián)合開發(fā),以三個(gè)獨(dú)立軟件包的形式提供,適配不同應(yīng)用場景的開發(fā)與部署需求。

  • ModelContextProtocol包:作為大多數(shù)應(yīng)用的核心入口,集成了托管擴(kuò)展、依賴注入能力及符合現(xiàn)代.NET開發(fā)標(biāo)準(zhǔn)的高級抽象。該包與微軟“Hosted”框架無縫兼容,支持開發(fā)人員通過標(biāo)準(zhǔn)化模式與約定創(chuàng)建MCP服務(wù)器和客戶端。
  • ModelContextProtocol.Core包:為僅需基礎(chǔ)依賴或需直接操作底層協(xié)議的應(yīng)用提供精簡版本。包含核心的客戶端/服務(wù)器API、協(xié)議類型定義及傳輸抽象,但不含托管與依賴注入功能,可適配從簡單控制臺應(yīng)用到復(fù)雜分布式系統(tǒng)的多類部署場景。
  • ModelContextProtocol.AspNetCore包:為ASP.NET Core應(yīng)用提供基于HTTP的MCP服務(wù)器功能,包含中間件、路由擴(kuò)展及服務(wù)器推送事件(SSE)支持,使MCP服務(wù)器可作為網(wǎng)絡(luò)服務(wù)運(yùn)行。通過與ASP.NET Core管道的集成,MCP服務(wù)器能直接復(fù)用框架內(nèi)置的認(rèn)證授權(quán)、日志監(jiān)控等能力。

SDK的模塊化設(shè)計(jì)展示了一種經(jīng)過深思熟慮的軟件開發(fā)方法,兼顧了易用性與適應(yīng)性。開發(fā)人員可根據(jù)需求選擇組件,確保應(yīng)用僅包含必要依賴,有效降低云原生環(huán)境下的資源占用與啟動耗時(shí),符合輕量化部署要求。

依賴注入與服務(wù)配置

C# SDK與微軟依賴注入框架的深度整合,是其核心架構(gòu)優(yōu)勢之一。這種整合允許開發(fā)人員復(fù)用在其他.NET應(yīng)用中的開發(fā)模式與實(shí)踐經(jīng)驗(yàn),降低學(xué)習(xí)成本并提升代碼可維護(hù)性。具體特性如下:

  • 無縫集成配置:SDK提供與 IServiceCollection 接口無縫對接的擴(kuò)展方法,支持MCP服務(wù)器、客戶端與其他應(yīng)用服務(wù)協(xié)同配置,可實(shí)現(xiàn)外部服務(wù)注入MCP工具、多傳輸機(jī)制配置、自定義認(rèn)證授權(quán)邏輯等復(fù)雜場景。
  • 自動化服務(wù)注冊:采用流暢配置模式,支持開發(fā)人員精準(zhǔn)定義MCP服務(wù)器需暴露的功能。例如, WithToolsFromAssembly() 方法通過反射自動發(fā)現(xiàn)并注冊帶有 McpServerTool 屬性的方法,無需手動操作且保持類型安全。
  • 便捷測試支持:MCP工具與資源均以服務(wù)形式注冊,在單元測試中可輕松模擬或替換為測試實(shí)現(xiàn),使AI代理能脫離外部依賴獨(dú)立完成驗(yàn)證,為構(gòu)建可靠、可測試的系統(tǒng)提供保障。

傳輸層實(shí)現(xiàn)

C# SDK的傳輸層功能為MCP接口提供抽象化通信方案,確保相同應(yīng)用邏輯無需修改即可適配多種傳輸類型,提升部署與集成的靈活性。

標(biāo)準(zhǔn)輸入輸出(stdio)傳輸基于各環(huán)境通用的標(biāo)準(zhǔn)輸入輸出流,構(gòu)建基礎(chǔ)且高效的通信系統(tǒng)。SDK封裝了進(jìn)程管理、流緩沖、錯(cuò)誤處理等底層操作,為開發(fā)人員提供簡潔接口,適用于本地開發(fā)環(huán)境及獨(dú)立進(jìn)程式MCP服務(wù)器部署場景。

該傳輸實(shí)現(xiàn)具備完善的錯(cuò)誤檢測與恢復(fù)機(jī)制:通信異常時(shí),SDK會輸出具體錯(cuò)誤信息并嘗試重連,以可靠性為核心設(shè)計(jì)目標(biāo),保障系統(tǒng)在生產(chǎn)環(huán)境中的穩(wěn)定運(yùn)行。

HTTP傳輸實(shí)現(xiàn)使MCP能夠在分布式環(huán)境以及網(wǎng)絡(luò)部署中運(yùn)行。該軟件開發(fā)工具包依托ASP.NET Core的HTTP處理能力,構(gòu)建強(qiáng)大可擴(kuò)展的分布式通信基礎(chǔ),支持壓縮、緩存、連接池化等標(biāo)準(zhǔn)HTTP功能,適配分布式環(huán)境與網(wǎng)絡(luò)部署場景。

針對網(wǎng)絡(luò)型AI代理部署的特定需求,該實(shí)現(xiàn)支持跨源資源共享(CORS),生產(chǎn)環(huán)境可復(fù)用標(biāo)準(zhǔn)HTTP認(rèn)證機(jī)制;同時(shí)整合ASP.NET Core內(nèi)置可觀測性特性,提供完整的日志與監(jiān)控功能。

服務(wù)器推送事件(SSE)傳輸融合了HTTP通信優(yōu)勢與實(shí)時(shí)流傳輸能力,尤其適用于需監(jiān)測外部條件、接收事件通知的智能代理。

C# SDK 通過其 SSE 實(shí)現(xiàn)方式處理了長期連接的復(fù)雜性,為開發(fā)者提供了一種簡便的編程模型。該SDK會自動維護(hù)連接生命周期、保障客戶端平穩(wěn)斷開,并支持向多連接客戶端廣播更新,降低實(shí)時(shí)通信功能的開發(fā)難度。

利用MCP創(chuàng)建AI代理:C#實(shí)踐指南-AI.x社區(qū)

圖 2:MCP通信流程圖,展示了各組件之間交互的順序

實(shí)際應(yīng)用示例

本示例旨在闡釋使用 C# SDK 構(gòu)建 MCP 服務(wù)器的核心概念,通過簡潔的配置流程,實(shí)現(xiàn)一個(gè)可正常運(yùn)行的 MCP 服務(wù)器,并向連接的客戶端提供可用工具。

C#

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using ModelContextProtocol.Server;
using System.ComponentModel;
namespace MCPExamples
{
  public class Program
  {
    public static async Task Main(string[] args)
    {
        var builder = Host.CreateApplicationBuilder(args);
        // Configure logging to stderr for MCP compatibility
        builder.Logging.AddConsole(consoleLogOptions =>
        {
        consoleLogOptions.LogToStandardErrorThreshold = LogLevel.Trace;
        });
        // Configure MCP server with stdio transport and tool discovery
        builder.Services
        .AddMcpServer()
        .WithStdioServerTransport()
        .WithToolsFromAssembly();
        await builder.Build().RunAsync();
     }
  }
  [McpServerToolType]
  public static class BasicTools
	{
        [McpServerTool, Description("Echoes the provided message back to the
        client")]
        public static string Echo(
        [Description("The message to echo back")] string message)
        {
          return $"Echo: {message}";
        }
        [McpServerTool, Description("Calculates the length of the provided
        text")]
        public static int TextLength(
        [Description("The text to measure")] string text)
        {
          return text?.Length ?? 0;
        }
    }
}

此基本實(shí)現(xiàn)展示了幾個(gè)關(guān)鍵概念。Host.CreateApplicationBuilder() 方法創(chuàng)建了一個(gè)包含依賴注入、配置和日志功能的.NET 應(yīng)用程序。其中日志定向至標(biāo)準(zhǔn)錯(cuò)誤流,是因標(biāo)準(zhǔn)輸出流被協(xié)議通信獨(dú)占,避免二者沖突。

AddMcpServer() 擴(kuò)展方法為 MCP 服務(wù)器功能提供了必要的服務(wù),而WithStdioServerTransport()則配置服務(wù)器以使用標(biāo)準(zhǔn)輸入/輸出進(jìn)行通信。WithToolsFromAssembly() 方法開啟工具自動發(fā)現(xiàn)機(jī)制,無需手動注冊,SDK會自動識別帶有指定屬性的工具方法。

該工具的實(shí)現(xiàn)展示了如何通過屬性來展示功能:類通過 [McpServerToolType] 屬性標(biāo)識為“MCP工具容器”;單個(gè)方法通過 [McpServerTool] 屬性成為可被調(diào)用的工具;[Description] 屬性提供可讀說明,幫助AI模型理解工具的功能及參數(shù)用途,提升交互適配性。

支持外部服務(wù)集成的高級服務(wù)器示例

大多數(shù)復(fù)雜的MCP服務(wù)器通常需與外部數(shù)據(jù)庫、服務(wù)及API對接。本示例展示如何通過依賴注入實(shí)現(xiàn)外部服務(wù)訪問,并實(shí)現(xiàn)MCP專屬邏輯與業(yè)務(wù)邏輯的解耦。

C#

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using ModelContextProtocol.Server;
using System.ComponentModel;
using System.Text.Json;
namespace MCPExamples.Advanced
{
  public class Program
  {
    public static async Task Main(string[] args)
    {
      var builder = Host.CreateApplicationBuilder(args);
      // Register external services
      builder.Services.AddHttpClient();
      builder.Services.AddSingleton<IWeatherService, WeatherService>();
      builder.Services.AddSingleton<IDataAnalysisService,
      DataAnalysisService>();
      builder.Services
      .AddMcpServer()
      .WithStdioServerTransport()
      .WithToolsFromAssembly()
      .WithPromptsFromAssembly();
      await builder.Build().RunAsync();
    }
  }
  [McpServerToolType]
  public static class AdvancedTools
    {
      [McpServerTool, Description("Gets current weather information for a
      specified location")]
      public static async Task<string> GetWeather(
      IWeatherService weatherService,
      [Description("The location to get weather for")] string location)
      {
        var weather = await weatherService.GetWeatherAsync(location);
        return JsonSerializer.Serialize(weather, new JsonSerializerOptions
        { WriteIndented = true });
      }
      [McpServerTool, Description("Performs statistical analysis on numerical
      data")]
      public static async Task<string> AnalyzeData(
      IDataAnalysisService analysisService,
      [Description("Array of numerical values to analyze")] double[]
      data)
      {
        var analysis = await analysisService.AnalyzeDataAsync(data);
        var report = await analysisService.GenerateReportAsync(analysis);
        return report;
      }
   }
}

該高級示例呈現(xiàn)了構(gòu)建生產(chǎn)級MCP服務(wù)器的核心設(shè)計(jì)模式。通過對 IWeatherService (天氣服務(wù))與 IDataAnalysisService (數(shù)據(jù)分析服務(wù))等外部服務(wù)實(shí)施依賴注入,實(shí)現(xiàn)了MCP專屬邏輯與業(yè)務(wù)邏輯的徹底解耦。這種代碼分離架構(gòu)提高了可測試性和可維護(hù)性,并允許在不同的環(huán)境中重復(fù)使用業(yè)務(wù)邏輯。

基于接口定義外部服務(wù)的設(shè)計(jì),支持開發(fā)人員在單元測試中用模擬實(shí)現(xiàn)替換真實(shí)服務(wù),輕松構(gòu)建復(fù)雜測試場景。這種方式對開發(fā)獨(dú)立驗(yàn)證功能、無外部依賴的高可靠AI代理至關(guān)重要,是保障生產(chǎn)級系統(tǒng)穩(wěn)定性的關(guān)鍵實(shí)踐。

客戶端實(shí)現(xiàn)與集成模式

MCP客戶端是AI應(yīng)用與MCP服務(wù)器建立連接、實(shí)現(xiàn)通信的核心組件。以下內(nèi)容詳細(xì)說明完整MCP客戶端的構(gòu)建邏輯,及其如何檢測并調(diào)用服務(wù)器功能。

C#

using ModelContextProtocol;
using ModelContextProtocol.Client;
using Microsoft.Extensions.AI;
using System.Text.Json;
namespace MCPExamples.Client
{
  public class MCPClientExample
  {
    private IMcpClient? _client;
    public async Task<bool> ConnectToServerAsync(string serverCommand,
    string[] arguments)
    {
    try
      {
        var clientTransport = new StdioClientTransport(new
        StdioClientTransportOptions
        {
        Name = "ExampleClient",
        Command = serverCommand,
        Arguments = arguments
        });
        _client = await McpClientFactory.CreateAsync(clientTransport);
        return true;
      }
      catch (Exception ex)
      {
        Console.WriteLine($"Failed to connect to server:
        {ex.Message}");
        return false;
      }
    }
    public async Task<string?> ExecuteToolAsync(string toolName,
    Dictionary<string, object?> arguments)
    {
      if (_client == null) return null;
      try
      {
        var result = await _client.CallToolAsync(toolName, arguments,
        CancellationToken.None);
        var textContent = result.Content.FirstOrDefault(c => c.Type ==
        "text");
        return textContent?.Text;
      }
      catch (Exception ex)
      {
        Console.WriteLine($"Error executing tool {toolName}:
        {ex.Message}");
        return null;
      }
    }
  }
}

客戶端實(shí)現(xiàn)封裝了MCP服務(wù)器連接與交互的標(biāo)準(zhǔn)化模式,核心流程如下:

  1. 傳輸配置定義: StdioClientTransport 配置項(xiàng)同時(shí)指定服務(wù)器進(jìn)程的啟動方式與通信協(xié)議,為客戶端與服務(wù)器的底層通信提供基礎(chǔ)參數(shù);
  2. 連接與能力協(xié)商: McpClientFactory.CreateAsync() 方法負(fù)責(zé)完成服務(wù)器連接的建立,并自動執(zhí)行客戶端與服務(wù)器的能力協(xié)商,確保雙方功能兼容;
  3. 工具調(diào)用與結(jié)果處理: ExecuteToolAsync() 方法定義了服務(wù)器工具的調(diào)用流程,包含工具啟動、結(jié)果解析及錯(cuò)誤處理。其完善的錯(cuò)誤處理機(jī)制,可幫助客戶端有效應(yīng)對服務(wù)器故障、通信中斷等異常場景,保障交互穩(wěn)定性。

ASP.NET Core HTTP 服務(wù)器實(shí)現(xiàn)

ASP.NET Core 這個(gè)軟件包提供了基于 HTTP 的完整 MCP 服務(wù)器支持,適用于需要進(jìn)行基于Web部署或與現(xiàn)有Web應(yīng)用程序集成的場景。

C#

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.AspNetCore;
using ModelContextProtocol.Server;
namespace MCPExamples.AspNetCore
{
  public class Program
  {
    public static void Main(string[] args)
    {
      var builder = WebApplication.CreateBuilder(args);
      // Configure services
      builder.Services.AddHttpClient();
      builder.Services.AddSingleton<IDocumentService, DocumentService>();
      // Configure MCP server with HTTP transport
      builder.Services
      .AddMcpServer()
      .WithHttpServerTransport()
      .WithToolsFromAssembly();
      // Add CORS for web client access
      builder.Services.AddCors(options =>
      {
      options.AddDefaultPolicy(policy =>
      {
      policy.AllowAnyOrigin()
      .AllowAnyMethod()
      .AllowAnyHeader();
      });
      });
      var app = builder.Build();
      app.UseCors();
      app.UseRouting();
      app.MapMcpServer();
      app.Run();
    }
  }
}

ASP.NET Core 實(shí)現(xiàn)方案清晰展示了MCP服務(wù)器與Web應(yīng)用程序的整合邏輯:WithHttpServerTransport() 方法為 MCP 服務(wù)器配置基于 HTTP 協(xié)議的通信傳輸方式,奠定服務(wù)器與外部交互的網(wǎng)絡(luò)通信基礎(chǔ);MapMcpServer() 方法將MCP服務(wù)器運(yùn)行所需的通信端點(diǎn)注冊至 ASP.NET Core 路由系統(tǒng),實(shí)現(xiàn)HTTP請求與MCP服務(wù)的自動關(guān)聯(lián)。

CORS(跨域資源共享)配置是關(guān)鍵支撐,允許基于網(wǎng)絡(luò)的AI應(yīng)用程序與MCP服務(wù)器建立跨域連接,從而兼容瀏覽器端、Web 服務(wù)端等多種客戶端實(shí)現(xiàn)。該配置是構(gòu)建運(yùn)行于網(wǎng)絡(luò)瀏覽器及各類網(wǎng)絡(luò)系統(tǒng)中AI代理的核心要素,直接決定了Web場景下MCP服務(wù)器的可用性。


利用MCP創(chuàng)建AI代理:C#實(shí)踐指南-AI.x社區(qū)


圖3:C# SDK組件架構(gòu)圖,展示了包與其依賴項(xiàng)之間的關(guān)系

安全考量與最佳實(shí)踐

安全架構(gòu)與信任模型

MCP協(xié)議設(shè)計(jì)圍繞AI系統(tǒng)訪問外部數(shù)據(jù)源、執(zhí)行代碼所帶來的安全風(fēng)險(xiǎn)展開,其安全模型的核心是用戶同意與控制,確保用戶對數(shù)據(jù)共享及操作執(zhí)行擁有絕對掌控權(quán)。

  1. 多層級安全架構(gòu):通過定義協(xié)議層面的職責(zé)邊界,明確客戶端與服務(wù)器的安全職責(zé),對敏感操作要求明確授權(quán);客戶端-服務(wù)器架構(gòu)在AI應(yīng)用與外部資源間構(gòu)建天然屏障,阻止對安全控制的未授權(quán)直接訪問。
  2. 用戶授權(quán)機(jī)制:所有工具調(diào)用均需用戶授權(quán)后方可執(zhí)行,協(xié)議定義了客戶端在執(zhí)行前向用戶展示工具描述、參數(shù)信息的標(biāo)準(zhǔn)化方式,使用戶可提前知曉操作后果,保持對AI代理活動的人工監(jiān)督。
  3. 數(shù)據(jù)隱私保護(hù):主機(jī)在向服務(wù)器傳輸用戶數(shù)據(jù)前,必須獲得用戶直接許可;協(xié)議提供數(shù)據(jù)傳輸管理工具,助力企業(yè)在滿足審計(jì)要求的同時(shí),嚴(yán)格管控敏感數(shù)據(jù),適配企業(yè)級安全規(guī)范。

認(rèn)證與授權(quán)模式

C# SDK支持開發(fā)人員為MCP系統(tǒng)構(gòu)建靈活的認(rèn)證與授權(quán)體系,可根據(jù)安全需求適配從基礎(chǔ)API密鑰認(rèn)證到企業(yè)級復(fù)雜身份管理系統(tǒng)(如JWT令牌、OAuth 2.0、Azure Active Directory)等多種方案。

對于基于HTTP的MCP服務(wù)器,SDK深度集成ASP.NET Core的身份認(rèn)證與授權(quán)功能,直接復(fù)用框架的標(biāo)準(zhǔn)化認(rèn)證方案。以下為基于HTTP的MCP服務(wù)器身份認(rèn)證配置示例:

C#

public void ConfigureServices(IServiceCollection services)
{
  services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
  .AddJwtBearer(options =>
  {
    options.TokenValidationParameters = new TokenValidationParameters
    {
      ValidateIssuer = true,
      ValidateAudience = true,
      ValidateLifetime = true,
      ValidateIssuerSigningKey = true,
      ValidIssuer = Configuration["Jwt:Issuer"],
      ValidAudience = Configuration["Jwt:Audience"],
      IssuerSigningKey = new SymmetricSecurityKey(
      Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
    };
  });
  services.AddAuthorization(options =>
  {
    options.AddPolicy("MCPAccess", policy =>
    policy.RequireAuthenticatedUser()
    .RequireClaim("scope", "mcp:read", "mcp:write"));
  });
  services.AddMcpServer()
  .WithHttpServerTransport()
  .WithToolsFromAssembly();
}

該配置方案展示了如何借助標(biāo)準(zhǔn).NET認(rèn)證模式為MCP服務(wù)器配置權(quán)限控制,確保服務(wù)器功能僅對授權(quán)客戶端開放。其中,基于策略的授權(quán)系統(tǒng)支持管理員為用戶配置精細(xì)化權(quán)限,可精準(zhǔn)管控用戶對特定工具及資源的訪問范圍。

基于stdio的MCP服務(wù)器的認(rèn)證過程通過操作系統(tǒng)安全機(jī)制在進(jìn)程級別實(shí)現(xiàn)。SDK提供多維度配置選項(xiàng),支持通過環(huán)境變量、命令行參數(shù)及配置文件完成客戶端認(rèn)證,進(jìn)程級隔離特性在本地開發(fā)環(huán)境及同類安全場景中適配性優(yōu)異。

輸入驗(yàn)證與清理機(jī)制

MCP服務(wù)器需處理用戶輸入數(shù)據(jù)并執(zhí)行外部命令,因此必須具備高強(qiáng)度輸入驗(yàn)證能力。C# SDK內(nèi)置多重安全防護(hù)功能,為全面輸入驗(yàn)證提供技術(shù)支撐。

其中,基于屬性的工具定義系統(tǒng)集成標(biāo)準(zhǔn).NET驗(yàn)證屬性,可直接用于工具參數(shù)驗(yàn)證。以下示例展示如何為MCP工具配置完整的輸入驗(yàn)證邏輯:

C#

[McpServerToolType]
public static class SecureTools
{
  [McpServerTool, Description("Processes user data with comprehensive
  validation")]
  public static async Task<string> ProcessUserData(
  [Description("User email address")]
  [EmailAddress]
  [Required]
  string email,
  [Description("User age")]
  [Range(0, 150)]
  int age,
  [Description("User input text")]
  [StringLength(1000, MinimumLength = 1)]
  [RegularExpression(@"^[a-zA-Z0-9\s\.,!?-]*$")]
  string inputText)
  {
    // Additional custom validation logic
    if (ContainsSuspiciousContent(inputText))
    {
      throw new ArgumentException("Input contains potentially harmful
      content");
    }
    // Process validated input
    return await ProcessValidatedInput(email, age, inputText);
  }
  private static bool ContainsSuspiciousContent(string input)
  {
    var suspiciousPatterns = new[]
    {
      @"<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>",
      @"javascript:",
      @"vbscript:",
      @"on\w+\s*="
    };
    return suspiciousPatterns.Any(pattern =>
    Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase));
  }
}

該示例呈現(xiàn)了多維度驗(yàn)證方案,以標(biāo)準(zhǔn).NET驗(yàn)證屬性為基礎(chǔ),逐步拓展至針對危險(xiǎn)內(nèi)容的自定義驗(yàn)證檢查。這套完整的安全機(jī)制確保MCP工具可安全接收用戶輸入,同時(shí)避免因注入攻擊或其他安全威脅導(dǎo)致系統(tǒng)漏洞暴露,為工具的輸入安全構(gòu)建全流程防護(hù)屏障。

錯(cuò)誤處理與日志記錄

完善的錯(cuò)誤處理與日志記錄系統(tǒng),是保障系統(tǒng)安全及生產(chǎn)環(huán)境問題診斷的核心支撐。C# SDK通過對接.NET內(nèi)置日志框架,提供了全面的可觀測性能力。

該SDK通過一種將安全措施與用戶友好的錯(cuò)誤提示相結(jié)合的方式來處理錯(cuò)誤,這種做法能夠防止攻擊者獲取敏感信息。以下為安全錯(cuò)誤處理模式的示例:

C#

[McpServerToolType]
public static class SecureErrorHandling
{
  private static readonly ILogger _logger = LoggerFactory.Create(builder =>
  builder.AddConsole()).CreateLogger<SecureErrorHandling>();
  [McpServerTool, Description("Demonstrates secure error handling")]
  public static async Task<string> SecureOperation(
  [Description("Operation parameter")] string parameter)
   {
    try
    {
      // Log the operation attempt (without sensitive data)
      _logger.LogInformation("Executing secure operation with parameter
      length: {Length}",
      parameter?.Length ?? 0);
      // Perform the operation
      var result = await PerformSensitiveOperation(parameter);
      _logger.LogInformation("Secure operation completed successfully");
      return result;
    }
    catch (ArgumentException ex)
    {
      // Log validation errors with details for debugging
      _logger.LogWarning("Validation error in secure operation:
      {Message}", ex.Message);
      throw new McpException("Invalid parameter provided");
    }
    catch (UnauthorizedAccessException ex)
    {
      // Log security violations without exposing details
      _logger.LogError("Unauthorized access attempt in secure
      operation");
      throw new McpException("Access denied");
    }
    catch (Exception ex)
    {
      // Log unexpected errors with full details for debugging
      _logger.LogError(ex, "Unexpected error in secure operation");
      throw new McpException("An error occurred while processing the
      request");
    }
  }
}

這種錯(cuò)誤處理方案實(shí)現(xiàn)了雙重核心目標(biāo):可捕獲充足的錯(cuò)誤信息,為問題定位提供完整依據(jù);錯(cuò)誤消息不會泄露敏感數(shù)據(jù),避免給攻擊者可乘之機(jī)。同時(shí),結(jié)構(gòu)化日志記錄機(jī)制支持對生產(chǎn)環(huán)境進(jìn)行高效監(jiān)控與實(shí)時(shí)告警,為系統(tǒng)穩(wěn)定性提供可視化運(yùn)維支撐。

性能優(yōu)化與可擴(kuò)展性

連接管理與資源優(yōu)化

高效的連接管理系統(tǒng)是實(shí)現(xiàn)MCP-based AI代理可擴(kuò)展性的核心前提。C# SDK提供多維度工具,支持針對不同部署環(huán)境優(yōu)化資源利用率與連接管理策略。

該SDK采用先進(jìn)的進(jìn)程生命周期管理技術(shù),在降低資源占用的同時(shí),確保系統(tǒng)響應(yīng)速度不受影響;通過連接池機(jī)制,實(shí)現(xiàn)不同邏輯連接共享傳輸資源,大幅降低進(jìn)程創(chuàng)建與管理的成本。

基于HTTP的MCP 服務(wù)器深度融合了ASP.NET Core成熟的可擴(kuò)展性特性(包括連接池、請求管道、高效內(nèi)存管理等),使MCP服務(wù)器能夠承載高吞吐量業(yè)務(wù),同時(shí)保障系統(tǒng)可靠性與性能穩(wěn)定。

下述示例展示了如何利用連接管理來實(shí)現(xiàn)最佳性能:

C#

public void ConfigureServices(IServiceCollection services)
{
  // Configure HTTP client with optimized settings
  services.AddHttpClient<IExternalService, ExternalService>(client =>
  {
    client.Timeout = TimeSpan.FromSeconds(30);
    client.DefaultRequestHeaders.Add("User-Agent", "MCP-Server/1.0");
  })
  .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
  {
    MaxConnectionsPerServer = 10,
    PooledConnectionLifetime = TimeSpan.FromMinutes(5)
  });
  // Configure MCP server with performance optimizations
  services.AddMcpServer(options =>
  {
    options.MaxConcurrentConnections = 100;
    options.ConnectionTimeout = TimeSpan.FromMinutes(10);
    options.EnableConnectionPooling = true;
  })
  .WithHttpServerTransport()
  .WithToolsFromAssembly();
}

緩存與數(shù)據(jù)管理策略

基于MCP的AI代理在執(zhí)行高資源消耗決策(如復(fù)雜計(jì)算、數(shù)據(jù)庫檢索類任務(wù))時(shí),高效緩存策略可顯著提升運(yùn)行性能。C# SDK支持開發(fā)人員將應(yīng)用與多類緩存系統(tǒng)集成,覆蓋從基礎(chǔ)內(nèi)存緩存到分布式緩存的全場景需求。

下述示例將展示如何借助緩存增強(qiáng)MCP工具功能:

C#

[McpServerToolType]
public static class CachedTools
{
  private static readonly IMemoryCache _cache = new MemoryCache(new
  MemoryCacheOptions
  {
  	SizeLimit = 1000
  });
  [McpServerTool, Description("Gets cached weather data")]
  public static async Task<string> GetCachedWeather(
  IWeatherService weatherService,
  [Description("Location to get weather for")] string location)
  {
    var cacheKey = $"weather:{location.ToLowerInvariant()}";
    if (_cache.TryGetValue(cacheKey, out string cachedResult))
    {
    	return cachedResult;
    }
    var weather = await weatherService.GetWeatherAsync(location);
    var result = JsonSerializer.Serialize(weather);
    var cacheOptions = new MemoryCacheEntryOptions
    {
      AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(15),
      Size = 1
    };
    _cache.Set(cacheKey, result, cacheOptions);
    return result;
  }
}

這種緩存系統(tǒng)通過優(yōu)化高頻信息獲取路徑,確保用戶便捷獲取常用數(shù)據(jù);同時(shí)通過時(shí)效性管控機(jī)制避免推送過期內(nèi)容,實(shí)現(xiàn)性能穩(wěn)定性與數(shù)據(jù)時(shí)效性的平衡。

測試與質(zhì)量保證

MCP 組件的單元測試策略

基于MCP的AI代理測試需采用針對性方法,既要適配系統(tǒng)的分布式特性,也要兼顧AI交互的復(fù)雜性。C# SDK憑借依賴注入與接口化抽象設(shè)計(jì),為組件的完整測試提供了技術(shù)支撐,支持開發(fā)人員構(gòu)建全面的測試用例。

下述示例將展示如何為MCP工具編寫高效單元測試:

C#

[TestClass]
public class MCPToolTests
{
  private Mock<IWeatherService> _mockWeatherService;
  private Mock<ILogger<WeatherTools>> _mockLogger;
  [TestInitialize]
  public void Setup()
  {
    _mockWeatherService = new Mock<IWeatherService>();
    _mockLogger = new Mock<ILogger<WeatherTools>>();
  }
  [TestMethod]
  public async Task GetWeather_ValidLocation_ReturnsWeatherData()
  {
    // Arrange
    var expectedWeather = new WeatherData
    {
    Location = "New York",
    Temperature = 22.5,
    Description = "Sunny"
    };
    _mockWeatherService
    .Setup(s => s.GetWeatherAsync("New York"))
    .ReturnsAsync(expectedWeather);
    // Act
    var result = await WeatherTools.GetWeather(_mockWeatherService.Object,
    "New York");
    // Assert
    Assert.IsNotNull(result);
    var weatherData = JsonSerializer.Deserialize<WeatherData>(result);
    Assert.AreEqual("New York", weatherData.Location);
    Assert.AreEqual(22.5, weatherData.Temperature);
  }
  [TestMethod]
  public async Task GetWeather_ServiceThrowsException_HandlesGracefully()
  {
    // Arrange
    _mockWeatherService
    .Setup(s => s.GetWeatherAsync(It.IsAny<string>()))
    .ThrowsAsync(new HttpRequestException("Service unavailable"));
    // Act & Assert
    await Assert.ThrowsExceptionAsync<HttpRequestException>(
    () => WeatherTools.GetWeather(_mockWeatherService.Object,
    "Invalid"));
  }
}

集成測試與端到端驗(yàn)證

MCP系統(tǒng)的集成測試需對存在外部依賴關(guān)系的多系統(tǒng)組件開展協(xié)同驗(yàn)證。C# SDK內(nèi)置專屬測試工具,為開發(fā)人員構(gòu)建全面的集成測試場景提供支撐,可有效覆蓋組件間交互、外部依賴調(diào)用等復(fù)雜測試需求。

C#

[TestClass]
public class MCPIntegrationTests
{
  private TestServer _testServer;
  private HttpClient _httpClient;
  private IMcpClient _mcpClient;
  [TestInitialize]
  public async Task Setup()
  {
    var builder = WebApplication.CreateBuilder();
    builder.Services.AddMcpServer()
    .WithHttpServerTransport()
    .WithToolsFromAssembly();
    var app = builder.Build();
    app.MapMcpServer();
    _testServer = new TestServer(app);
    _httpClient = _testServer.CreateClient();
    var transport = new HttpClientTransport(_httpClient,
    "http://localhost");
    _mcpClient = await McpClientFactory.CreateAsync(transport);
  }
  [TestMethod]
  public async Task EndToEndToolExecution_Success()
  {
    // Act
    var tools = await _mcpClient.ListToolsAsync();
    var echoTool = tools.FirstOrDefault(t => t.Name == "Echo");
    Assert.IsNotNull(echoTool);
    var result = await _mcpClient.CallToolAsync("Echo",
    new Dictionary<string, object?> { ["message"] = "Test" });
    // Assert
    Assert.IsNotNull(result);
    var textContent = result.Content.FirstOrDefault(c => c.Type == "text");
    Assert.IsNotNull(textContent);
    Assert.AreEqual("Echo: Test", textContent.Text);
  }
}

部署與生產(chǎn)環(huán)境考量

現(xiàn)代部署實(shí)踐中,基于MCP的AI代理常采用容器化技術(shù)實(shí)現(xiàn)跨環(huán)境一致性部署,C# SDK依托內(nèi)置的.NET容器功能,天然支持容器化部署。盡管當(dāng)前仍有企業(yè)采用傳統(tǒng)非容器化部署(如本地部署、云原生部署等),但本文將重點(diǎn)聚焦于應(yīng)用更廣泛的容器化部署方案。

基于容器的部署策略

容器化部署是當(dāng)前MCP AI代理的主流現(xiàn)代部署方式,其核心優(yōu)勢在于保障開發(fā)、測試、生產(chǎn)環(huán)境的一致性,簡化部署流程與運(yùn)維成本。C# SDK通過原生支持.NET容器特性,進(jìn)一步降低了容器化部署的實(shí)施難度。

以下為用于構(gòu)建MCP服務(wù)器容器的Dockerfile示例:

Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MCPServer.csproj", "."]
RUN dotnet restore "MCPServer.csproj"
COPY . .
WORKDIR "/src"
RUN dotnet build "MCPServer.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MCPServer.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MCPServer.dll"]

監(jiān)控與可觀測性

部署于生產(chǎn)環(huán)境的MCP系統(tǒng),需配備完善的監(jiān)控體系與可觀測性工具,這是保障系統(tǒng)穩(wěn)定運(yùn)行、實(shí)現(xiàn)高效故障排查的核心前提。C# SDK與.NET原生可觀測性功能深度集成,能夠?qū)崟r(shí)輸出系統(tǒng)行為的詳細(xì)數(shù)據(jù),為運(yùn)維監(jiān)控提供全面支撐。

C#

public void ConfigureServices(IServiceCollection services)
{
  // Configure telemetry
  services.AddApplicationInsightsTelemetry();
  // Configure health checks
  services.AddHealthChecks()
  .AddCheck<MCPServerHealthCheck>("mcp-server")
  .AddCheck<ExternalServiceHealthCheck>("external-services");
  // Configure metrics
  services.AddSingleton<IMeterFactory, MeterFactory>();
  services.AddMcpServer()
  .WithHttpServerTransport()
  .WithToolsFromAssembly();
  }
  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  {
  app.UseHealthChecks("/health");
  app.UseMetrics();
  app.MapMcpServer();
}

在VS Code中結(jié)合GitHub Copilot與MCP構(gòu)建AI代理

設(shè)置與配置流程

開發(fā)人員需先完成GitHub Copilot擴(kuò)展的安裝與訂閱激活,方可在Visual Studio Code(以下簡稱VS Code)中搭建融合GitHub Copilot與模型上下文協(xié)議(MCP)的AI代理。具體流程為:在完成擴(kuò)展安裝與訂閱驗(yàn)證后,通過VS Code的系統(tǒng)設(shè)置配置MCP服務(wù)器連接;集成的核心步驟是在工作區(qū)的 .vscode 文件夾或用戶設(shè)置目錄下,創(chuàng)建或修改 mcp.json 配置文件,以此定義包含傳輸配置的MCP服務(wù)器參數(shù)。

步驟1:必備條件

  • 在VS Code中安裝GitHub Copilot擴(kuò)展程序。
  • 擁有有效的GitHub Copilot訂閱服務(wù)。
  • 部署并運(yùn)行可用的MCP服務(wù)器(上述提供了C#示例)。

步驟2:MCP 服務(wù)器配置

在工作區(qū)的 .vscode 文件夾內(nèi),創(chuàng)建名為 mcp.json 的配置文件,并按以下指定結(jié)構(gòu)完成參數(shù)設(shè)置:

JSON

{
  "servers": {
    "MyMCPServer": {
      "type": "stdio",
      "command": "dotnet",
      "args": ["run", "--project", "path/to/your/MCPServer.csproj"]
    }
  }
}

步驟3:激活代理模式

  1. 啟動VS Code并打開已完成配置的目標(biāo)工作區(qū);
  2. 打開GitHub Copilot聊天面板:Windows/Linux系統(tǒng)按 Ctrl+Shift+I ,Mac系統(tǒng)按 Cmd+Shift+I ;
  3. 開啟代理模式:在聊天界面中找到代理圖標(biāo),將“代理模式”切換為啟用狀態(tài);
  4. 完成激活:此時(shí)AI代理已準(zhǔn)備就緒,可調(diào)用配置的MCP工具開展業(yè)務(wù)操作。

步驟4:使用人工智能代理

代理模式啟用后,GitHub Copilot可訪問已配置MCP服務(wù)器提供的工具、資源及提示模板,支持以下操作場景:

  • 提出需結(jié)合數(shù)據(jù)分析或調(diào)用外部工具的復(fù)雜問題;
  • 發(fā)起特定任務(wù)請求,例如“分析此文本文件并生成報(bào)告”;
  • 執(zhí)行多步驟串聯(lián)操作,如數(shù)據(jù)獲取、數(shù)據(jù)處理、可視化圖表生成等。

步驟5:工具執(zhí)行流程

在AI代理調(diào)用工具的過程中,VS Code將按以下流程自動執(zhí)行操作:

1. 工具信息展示:清晰呈現(xiàn)待調(diào)用工具的名稱、功能描述及所需參數(shù);

2. 用戶授權(quán)請求:彈出對話框,向用戶發(fā)起工具執(zhí)行許可請求;

3. 已授權(quán)工具執(zhí)行:根據(jù)用戶確認(rèn)的許可,使用指定參數(shù)運(yùn)行工具;

4. 結(jié)果整合反饋:將工具輸出結(jié)果整合至AI響應(yīng)內(nèi)容中,同步展示給用戶。

遠(yuǎn)程MCP服務(wù)器訪問配置

以下示例為遠(yuǎn)程部署MCP服務(wù)器的訪問方案,適用于跨環(huán)境使用需求。

重要提示:本示例僅用于教學(xué)演示。在生產(chǎn)環(huán)境中,必須采用符合安全規(guī)范的方式管理API密鑰、令牌及各類認(rèn)證信息,嚴(yán)防數(shù)據(jù)泄露與未授權(quán)訪問。

基于HTTP的遠(yuǎn)程MCP服務(wù)器

基本的HTTP配置

JSON

{
   "servers": {
       "remote-api-server": {
         "type": "http",
         "url": "https://api.example.com/mcp",
         "headers": {
         "User-Agent": "VSCode-MCP-Client/1.0",
         "Accept": "application/json"
       }
     }
   }
}

配置API密鑰認(rèn)證的HTTP協(xié)議

JSON

{
    "servers": {
        "authenticated-server": {
            "type": "http",
            "url": "https://secure-api.company.com/mcp",
            "headers": {
                "Authorization": "your-api-key-here",
                "X-API-Version": "2024-01-01",
                "Content-Type": "application/json"
            },
            "timeout": 30000
        }
    }
}

配置自定義標(biāo)頭和環(huán)境變量的HTTP協(xié)議

JSON

{
    "servers": {
        "enterprise-server": {
            "type": "http",
            "url": "https://internal.company.com/mcp-gateway",
            "headers": {
                "Authorization": "Bearer ${MCP_API_TOKEN}",
                "X-Client-ID": "${MCP_CLIENT_ID}",
                "X-Environment": "production"
            },
            "env": {
                "MCP_API_TOKEN": "your-token-from-env",
                "MCP_CLIENT_ID": "your-client-id"
            }
        }
    }
}

服務(wù)器推送事件(SSE)配置

基本的SSE配置

JSON

{
    "servers": {
        "realtime-data-server": {
            "type": "sse",
            "url": "https://streaming.example.com/mcp/events",
            "headers": {
                "Authorization": "your-streaming-token",
                "Cache-Control": "no-cache"
            },
            "reconnect": true,
            "reconnectInterval": 5000
        }
    }
}

帶有自定義配置的SSE

JSON

{
    "servers": {
        "live-analytics": {
            "type": "sse",
            "url": "https://analytics.company.com/mcp/stream",
            "headers": {
                "Authorization": "Bearer ${ANALYTICS_TOKEN}",
                "X-Stream-Type": "mcp-events"
            },
            "options": {
                "withCredentials": true,
                "heartbeatTimeout": 30000,
                "maxRetries": 3
            }
        }
    }
}

Azure云托管的MCP服務(wù)器

JSON

{
    "servers": {
        "azure-mcp-service": {
            "type": "http",
            "url": "https://your-app.azurewebsites.net/mcp",
            "headers": {
                "Authorization": "Bearer ${AZURE_MCP_TOKEN}",
                "X-Azure-Region": "eastus",
                "X-Subscription-ID": "${AZURE_SUBSCRIPTION_ID}"
            },
            "env": {
                "AZURE_MCP_TOKEN": "your-azure-token",
                "AZURE_SUBSCRIPTION_ID": "your-subscription-id"
            }
        }
    }
}

未來發(fā)展趨勢與新出現(xiàn)的模式

AI代理架構(gòu)的演進(jìn)

模型上下文協(xié)議(MCP)雖已確立AI代理的標(biāo)準(zhǔn)化架構(gòu),但該領(lǐng)域仍處于快速發(fā)展階段。未來AI代理的核心發(fā)展方向是強(qiáng)化復(fù)雜場景適配能力,能夠在多步驟工作流中統(tǒng)籌管理各類工具與數(shù)據(jù)源,實(shí)現(xiàn)更高效的任務(wù)協(xié)同。

C# SDK以靈活性設(shè)計(jì)適配未來需求變化:協(xié)議內(nèi)置的能力協(xié)商機(jī)制具備良好兼容性,支持無縫新增功能與特性,確保MCP實(shí)現(xiàn)可隨協(xié)議迭代持續(xù)運(yùn)行,無需中斷服務(wù),從而快速響應(yīng)新場景、新需求。

與大型語言模型(LLM)生態(tài)的深度整合

MCP通過持續(xù)迭代功能,保持與各類LLM生態(tài)的緊密集成。C# SDK與 Microsoft.Extensions.AI 深度對接,依托統(tǒng)一的接口與行為模式,為適配不同LLM提供商奠定技術(shù)基礎(chǔ)。

未來發(fā)展將聚焦三大方向:

  • 強(qiáng)化多模態(tài)交互支持;
  • 優(yōu)化擴(kuò)展對話中的上下文管理能力;
  • 提供更先進(jìn)的工具組合策略。

SDK的模塊化結(jié)構(gòu)與依賴注入特性,為新功能的快速落地提供了穩(wěn)定支撐,確保技術(shù)迭代的高效性。

結(jié)語

模型上下文協(xié)議(MCP)是AI代理發(fā)展的重要里程碑,為AI系統(tǒng)與外部數(shù)據(jù)、工具的交互提供了標(biāo)準(zhǔn)化框架。本文研究表明,開發(fā)人員可依托C#語言及.NET生態(tài),通過MCP的架構(gòu)落地、實(shí)踐應(yīng)用,構(gòu)建安全可擴(kuò)展的復(fù)雜AI代理。

該研究全面剖析了MCP的設(shè)計(jì)原則、架構(gòu)邏輯,結(jié)合官方C# SDK的實(shí)施指南與實(shí)際應(yīng)用示例,形成完整的技術(shù)落地體系。安全指南和最佳實(shí)踐為生產(chǎn)環(huán)境部署MCP系統(tǒng)提供關(guān)鍵指導(dǎo),滿足高可靠性、高安全性的核心需求。

C# SDK與.NET生態(tài)的深度集成,提升了企業(yè)開發(fā)效率。依賴注入、完備測試功能及現(xiàn)有.NET基礎(chǔ)設(shè)施的復(fù)用,助力開發(fā)人員構(gòu)建符合企業(yè)開發(fā)標(biāo)準(zhǔn)的人工智能代理。

隨著AI技術(shù)迭代及代理系統(tǒng)復(fù)雜度提升,MCP的標(biāo)準(zhǔn)化框架將成為開發(fā)安全、可維護(hù)、可協(xié)同AI系統(tǒng)的核心支撐,在AI代理生態(tài)中的重要性將持續(xù)凸顯。

本文提供的示例與模式,為開發(fā)人員構(gòu)建生產(chǎn)級AI代理奠定基礎(chǔ)——這類代理能夠連接大型語言模型(LLM)與真實(shí)世界數(shù)據(jù)源,兼具功能完整性與能力擴(kuò)展性,同時(shí)保障安全性、可靠性與可維護(hù)性。

MCP與C# SDK仍在不斷演進(jìn),將為開發(fā)人員提供更先進(jìn)的工具以構(gòu)建下一代AI代理。MCP的標(biāo)準(zhǔn)化方法,結(jié)合.NET生態(tài)的強(qiáng)大開發(fā)能力,將共同打造高效、穩(wěn)定的AI代理開發(fā)平臺,推動AI技術(shù)在實(shí)際場景中的深度應(yīng)用。

原文標(biāo)題:??Creating AI Agents Using the Model Context Protocol: A Comprehensive Guide to Implementation with C#???,作者:??Nilesh Bhandarwar??


標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
激情丁香综合五月| 欧美日韩国产色综合一二三四| 一本色道综合亚洲| 亚洲欧洲三级| 亚洲av永久无码国产精品久久| 日韩视频一区二区三区在线播放免费观看| 日韩av综合网| 亚洲 欧美 另类人妖| 人人超在线公开视频| 91蜜桃婷婷狠狠久久综合9色| 国产成人在线一区| 印度午夜性春猛xxx交| 婷婷精品在线观看| 91精品国产麻豆国产自产在线 | 自拍偷拍欧美| 亚洲乱码av中文一区二区| 中文字幕视频三区| 松下纱荣子在线观看| 亚洲欧美自拍偷拍| 久久综合久久久| 精品人妻av一区二区三区| 亚洲欧美激情诱惑| 色综合91久久精品中文字幕| 国产美女精品久久| 国产日韩三级| 欧美猛男男办公室激情| 91黄色小网站| 2020日本在线视频中文字幕| 综合久久久久久| 日本精品一区二区三区视频 | 99视频精品全部免费看| 日本中文字幕一区二区有码在线| 国产精品99久久久久| 国产高清在线不卡| 精品国产乱码一区二区| 综合久久十次| 久久亚洲综合国产精品99麻豆精品福利| 国产肉体xxxx裸体784大胆| 精品一区二区三区中文字幕 | 欧美一乱一性一交一视频| 国产女人18水真多毛片18精品| 精品国产一区二区三区香蕉沈先生| 欧美大黄免费观看| 波多野结衣网页| 日韩黄色三级| 欧美美女直播网站| 欧美成人三级在线播放| 欧美日一区二区三区| 色综合久久88色综合天天6| 国产精品国产对白熟妇| 在线观看免费视频你懂的| 亚洲同性gay激情无套| 无遮挡亚洲一区| lutube成人福利在线观看| 久久久久久99精品| 蜜桃狠狠色伊人亚洲综合网站| 欧美 日韩 国产 成人 在线 91| 韩国一区二区视频| 91精品视频在线看| 99精品免费观看| 国产精品1024久久| av观看久久| 亚洲精品中文字幕成人片| 国产剧情一区二区| 不卡一区二区三区视频| 亚洲成熟女性毛茸茸| 国产丶欧美丶日本不卡视频| 99re在线国产| 色婷婷激情五月| 久久一区二区三区四区| 欧美一进一出视频| 求av网址在线观看| 亚洲欧美激情在线| 和岳每晚弄的高潮嗷嗷叫视频| 国产蜜臀av在线播放| 亚洲国产成人tv| 欧美韩国日本在线| 电影在线观看一区二区| 欧美精品久久一区| 潘金莲一级淫片aaaaaaa| 6080亚洲理论片在线观看| 精品国产免费人成在线观看| 性欧美丰满熟妇xxxx性久久久| 亚洲人成网站77777在线观看| 亚洲性生活视频| 色哟哟一一国产精品| 欧美日韩国产一区精品一区| 2018日韩中文字幕| 怡红院男人天堂| 国产激情视频一区二区三区欧美 | 思热99re视热频这里只精品| 亚洲情综合五月天| 成人涩涩小片视频日本| 一区福利视频| 国产精品日韩久久久久| 性生活免费网站| 久久久99精品久久| 中文字幕在线中文| 成人日韩精品| 亚洲成年人在线播放| 谁有免费的黄色网址| 中文字幕一区二区av| 国产91|九色| 国产精品爽爽久久久久久| 成人污视频在线观看| 先锋在线资源一区二区三区| 啦啦啦中文在线观看日本| 91国产免费看| 精品人妻一区二区免费| 日韩1区在线| 91国语精品自产拍在线观看性色| 在线视频欧美亚洲| aa级大片欧美| 国产日产欧美一区二区| 91tv亚洲精品香蕉国产一区| 亚洲国产古装精品网站| 日韩欧美国产成人精品免费| 日韩精品1区2区3区| 狠狠色狠狠色综合人人| 色噜噜狠狠狠综合欧洲色8| 欧美日韩国产精品成人| 日本黄色网址大全| 亚洲黄页一区| aa成人免费视频| 岛国成人毛片| 欧美午夜片在线看| 性欧美成人播放77777| 欧美freesex交免费视频| 国产欧美精品日韩精品| 毛片免费在线观看| 高跟丝袜欧美一区| 污污免费在线观看| 黑丝一区二区三区| 91视频网页| 丝袜综合欧美| 日韩一级片在线播放| 希岛爱理中文字幕| 久久精品国产久精国产| 视频一区二区三区免费观看| 一区二区乱码| 精品无码久久久久久国产| 日韩欧美高清在线观看| 岛国av在线一区| 亚洲国产精品无码av| 精品伊人久久| 久久91超碰青草是什么| www.xxxx国产| 亚洲一区在线观看视频| 好吊操视频这里只有精品| 国产精品vip| 成人高清在线观看| a'aaa级片在线观看| 精品国产亚洲在线| 日本一本高清视频| av一区二区三区| 美女av免费在线观看| 日韩精品a在线观看91| 91chinesevideo永久地址| 天堂а在线中文在线无限看推荐| 精品久久久精品| 中文字幕在线看高清电影| 日韩精品成人一区二区在线| 亚洲精品一区二区毛豆| 欧美成人xxxx| 久久国产精品偷| www.com在线观看| 亚洲mv在线观看| 亚洲自拍偷拍一区二区| 日韩成人一区二区| 一区二区三区偷拍| 亚洲网址在线观看| 韩国精品久久久999| 久青青在线观看视频国产| 欧美亚洲高清一区| 91嫩草丨国产丨精品| 粉嫩aⅴ一区二区三区四区| 久色视频在线播放| 精品一区二区三区在线 | 免费在线观看毛片网站| 日产午夜精品一线二线三线| 91中文字幕在线| 大菠萝精品导航| 自拍偷拍亚洲欧美| 精品久久久无码中文字幕| 欧美日韩国产精品一区二区三区四区 | 成人夜色视频网站在线观看| 能在线观看的av| 国产精品88久久久久久| 国产精品一区二区三区免费观看| 在线看的毛片| 久久亚洲精品网站| 女人偷人在线视频| 欧美一卡二卡在线| 精品免费囯产一区二区三区| 国产精品久久久久久一区二区三区| 日本少妇一区二区三区| 蜜桃久久av| 男女啪啪免费观看| 欧美手机视频| 国产欧美日韩伦理| 日韩第二十一页| 热久久这里只有精品| 尤物视频在线看| 亚洲欧美日韩中文在线| 性一交一乱一色一视频麻豆| 在线观看中文字幕不卡| 国产一级片久久| 国产精品久久久久久久久搜平片| 亚洲一级Av无码毛片久久精品| 免费人成黄页网站在线一区二区| 一二三四视频社区在线| 手机亚洲手机国产手机日韩| 久久99精品久久久久久久青青日本| 国产亚洲人成a在线v网站| 91精品国产成人| 色女人在线视频| 精品精品国产国产自在线| 欧美拍拍视频| 亚洲国产另类久久精品| 国产手机视频在线| 欧美精品18+| 国产情侣呻吟对白高潮| 天天色天天操综合| 久草网视频在线观看| 亚洲欧美激情插| 午夜黄色福利视频| 国产日韩成人精品| 少妇按摩一区二区三区| 成人精品小蝌蚪| 国产一级片中文字幕| 免费在线观看日韩欧美| 男人亚洲天堂网| 亚洲美女毛片| 免费看毛片的网址| 国内在线观看一区二区三区| 中文字幕第50页| 亚洲天堂一区二区三区四区| 夜夜爽99久久国产综合精品女不卡| 免费久久精品| 欧美国产视频在线观看| 同性恋视频一区| 久久婷婷国产综合尤物精品| 老司机aⅴ在线精品导航| 国产伦精品一区二区三区四区免费| 精品国产一区二区三区性色av| 国产原创欧美精品| 日韩乱码在线观看| 伊人激情综合| 丁香六月激情婷婷| 亚洲精品系列| 男人操女人免费软件| 久久狠狠一本精品综合网| 免费日韩中文字幕| 日本在线不卡一区| 午夜精品免费看| 精彩视频一区二区| 欧洲成人午夜精品无码区久久| 国产成人精品免费在线| 动漫美女无遮挡免费| 成人激情小说乱人伦| 国产精品麻豆入口| 久久亚洲一区二区三区四区| 波多野在线播放| 中文字幕第一页久久| 天堂а√在线中文在线鲁大师| 中文字幕色av一区二区三区| 青青青在线免费观看| 亚洲国产欧美一区二区三区丁香婷| 日本天堂网在线观看| 欧美日韩在线观看视频| 羞羞色院91蜜桃| 欧美一区二区三区男人的天堂| 91美女高潮出水| 国产精品影院在线| 日韩色av导航| 成人福利电影| 日本久久久久亚洲中字幕| 久久亚洲国产精品尤物| 99se婷婷在线视频观看| 天海翼精品一区二区三区| 日韩av电影免费播放| 国产一区二区区别| 四虎精品欧美一区二区免费| 亚洲精品孕妇| 成年人网站大全| 国产剧情一区二区三区| 实拍女处破www免费看| 国产精品久久久久一区 | 国产精品久久久久久久免费观看 | 日韩一区二区高清| 亚洲欧美自偷自拍| 日韩在线观看网站| 爱看av在线| 国产精品视频999| 动漫视频在线一区| 四虎永久国产精品| 9色国产精品| 伊人色在线观看| 97精品国产露脸对白| 波多野结衣喷潮| 欧美日韩一区二区免费视频| 国产精品毛片一区二区在线看舒淇 | 国产精品亚洲人成在99www| 欧美一级特黄aaaaaa在线看片| 久久精品一区| 动漫美女无遮挡免费| 中文字幕亚洲区| 日韩免费视频一区二区视频在线观看| 欧美精品三级日韩久久| 人妻91麻豆一区二区三区| 最近2019年日本中文免费字幕 | 色欧美片视频在线观看| 超碰人人人人人人| 色香阁99久久精品久久久| а√天堂8资源在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 免费视频亚洲| 毛片在线视频播放| 国产精品99久| 色哟哟一一国产精品| 欧美在线影院一区二区| 青青草娱乐在线| 国内精品久久久久久影视8| 国产精品亚洲一区二区在线观看| 日本在线视频不卡| 午夜在线精品偷拍| 中文字幕乱视频| 一区二区三区精品在线| 国产乱码精品一区二三区蜜臂 | 亚洲国产精彩中文乱码av| 成人影院在线观看| 国产免费久久av| 成人vr资源| 久久婷婷国产91天堂综合精品| 久久综合九色综合久久久精品综合| 妺妺窝人体色www聚色窝仙踪| 7777精品久久久大香线蕉| 午夜激情视频在线| 国产精品一二三在线| 日韩激情在线| 日本中文字幕影院| 国产精品国产自产拍高清av | 亚洲国产欧美一区二区三区同亚洲 | av免费在线播放网站| 久久影音资源网| 秋霞av一区二区三区| 亚洲天堂开心观看| 日韩免费小视频| 亚洲免费不卡| 精品一区二区精品| 天堂网avav| 精品88久久久久88久久久 | 国产精品视频99| 99精品视频在线| 国产精品久久久久久久99| 亚洲精品免费在线观看| 国产乱淫a∨片免费观看| 久久精品久久久久电影| 日韩精品一区二区三区中文在线| 国产成人免费高清视频| 国产.精品.日韩.另类.中文.在线.播放| 国产精品九九九九九九| 亚洲国内精品在线| 成人爽a毛片免费啪啪| 无遮挡亚洲一区| 国产精品一区二区三区网站| 久久亚洲国产成人精品性色| 日韩av资源在线播放| 巨胸喷奶水www久久久免费动漫| 亚洲欧洲精品一区二区三区波多野1战4 | 中文字幕在线不卡视频| 丰满熟妇乱又伦| 国产成人一区二区三区| 永久91嫩草亚洲精品人人| 国产伦精品一区三区精东| 色婷婷亚洲综合| 成人看av片| 久久99精品久久久久久久久久| 蜜桃av一区二区三区电影| 九九热国产在线| 亚洲乱亚洲乱妇无码| 97精品资源在线观看| 欧美不卡在线播放| 欧美国产精品一区二区三区| 国产成人精品毛片| 欧美伊久线香蕉线新在线| 五月开心六月丁香综合色啪| 李丽珍裸体午夜理伦片| 欧美日韩在线免费视频| free性欧美| 欧美爱爱视频网站| 99热在这里有精品免费| 亚洲一线在线观看| 97久久精品国产| 久久婷婷蜜乳一本欲蜜臀| 欧产日产国产精品98| 欧美精品 国产精品| 亚洲天堂电影| 国产成人一二三区| 中文无字幕一区二区三区|