亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

.NET?MCP?文檔詳細指南

 更新時間:2025年04月15日 11:42:55   作者:許澤宇  
本文檔詳細介紹了?.NET?使用?MCP?的相關內(nèi)容,包括服務器端實現(xiàn)、客戶端實現(xiàn)以及?Cursor?集成配置等方面,通過使用?MCP,開發(fā)者可以創(chuàng)建強大的工具和服務,使?AI?模型能夠安全地訪問和操作各種數(shù)據(jù)源,感興趣的朋友一起看看吧

MCP 概述

MCP(Model Context Protocol)是由 Anthropic 推出的一種開放協(xié)議,類似 AI 的 USB-C 擴展塢,用于在大模型和數(shù)據(jù)源之間建立安全的通信(授權),讓 AI 應用能夠安全地訪問和操作本地或遠程數(shù)據(jù),例如操作本地文件、瀏覽器和 Web 服務。

為了更好地理解 MCP,我們可以用一個簡單的類比:如果把 AI 比作電腦主機,那么 MCP 就相當于 USB 協(xié)議,而 MCP Server 則類似于各種 USB 設備(如攝像頭、麥克風等)。通過實現(xiàn) MCP Server,我們可以讓 AI 輕松連接到各種數(shù)據(jù)源,大大擴展其功能范圍。

MCP 協(xié)議的核心價值在于標準化了 AI 模型與外部工具和數(shù)據(jù)源的交互方式,使開發(fā)者能夠創(chuàng)建可被多種 AI 應用程序使用的工具和服務。這種標準化的接口極大地簡化了 AI 應用的開發(fā)過程,并提高了工具和服務的可重用性。

MCP 的主要特點

  • 標準化的工具調(diào)用接口
  • 安全的雙向通信
  • 支持多種傳輸方式(stdio、SSE、WebSocket 等)
  • 豐富的數(shù)據(jù)類型支持
  • 與主流 LLM 的無縫集成
  • 跨平臺和跨語言支持

MCP 服務器

MCP 服務器是實現(xiàn) MCP 協(xié)議的服務端,負責注冊和提供工具,處理客戶端的工具調(diào)用請求,并返回結果。服務器可以使用多種傳輸方式與客戶端通信,如標準輸入輸出、SSE 或 WebSocket。

MCP 客戶端

MCP 客戶端是實現(xiàn) MCP 協(xié)議的客戶端,負責連接到 MCP 服務器,獲取可用工具列表,調(diào)用工具,并處理返回結果??蛻舳送ǔEc LLM 集成,使 LLM 能夠使用 MCP 工具。

.NET MCP 實現(xiàn)項目對比

在 .NET 生態(tài)系統(tǒng)中,目前有幾個主要的 MCP 實現(xiàn)項目,它們各有特點。以下是這些項目的對比分析:

官方 C# SDK:csharp-sdk

這是 Model Context Protocol(MCP)官方提供的 C# SDK,為 MCP 服務器和客戶端提供簡單易用的接口,主要由微軟維護。該項目已經(jīng)成為 MCP 社區(qū)的官方 SDK 項目,最近發(fā)布了 0.1.0-preview 版本。

GitHub 倉庫: 

https://github.com/modelcontextprotocol/csharp-sdk

MCPSharp

MCPSharp 是一個 .NET 庫,旨在幫助開發(fā)者構建 Model Context Protocol(MCP)服務器和客戶端。它提供了創(chuàng)建 MCP 合規(guī)的工具和函數(shù)、連接現(xiàn)有 MCP 服務器、將 .NET 方法暴露為 MCP 端點、處理 MCP 協(xié)議細節(jié)和 JSON-RPC 通信等功能。

特點:

  • 與 Microsoft.Extensions.AI 集成
  • Semantic Kernel 支持
  • 動態(tài)工具注冊
  • 工具變更通知
  • 復雜對象參數(shù)支持
  • 錯誤處理
  • 易用的基于屬性的 API
  • 內(nèi)置 JSON-RPC 支持
  • 自動參數(shù)驗證和類型轉換

GitHub 倉庫: 

https://github.com/afrise/MCPSharp

mcpdotnet

mcpdotnet 是一個 .NET 實現(xiàn)的模型上下文協(xié)議(MCP),使 .NET 應用程序能夠與 MCP 客戶端和服務器進行交互。該項目已經(jīng)進入歸檔狀態(tài),相關的開發(fā)工作都集中到了官方的 csharp-sdk。

特點:

  • 支持多種 MCP 功能
  • 遵循規(guī)范的實現(xiàn)
  • 提供全面的日志支持
  • 兼容 .NET 8.0 及以上版本

GitHub 倉庫: 

https://github.com/PederHP/mcpdotnet

ModelContextProtocol.NET

ModelContextProtocol.NET 是一個 C# SDK,實現(xiàn)了模型上下文協(xié)議(MCP)。

特點:

  • 標準輸入輸出通信
  • 工具集成框架
  • 原生 AOT 兼容
  • 計算器演示實現(xiàn)
  • 開發(fā)中功能:WebSocket 支持、資源管理和提示系統(tǒng)

GitHub倉庫:

https://github.com/salty-flower/ModelContextProtocol.NET

服務器端實現(xiàn)

基本結構

使用官方的 C# SDK (csharp-sdk) 實現(xiàn) MCP 服務器的基本結構如下:

這段代碼展示了如何創(chuàng)建一個基本的 MCP 服務器,它使用標準輸入輸出(stdio)作為傳輸方式,并自動注冊當前程序集中的所有工具。

關鍵組件說明:

AddMcpServer()

 - 向依賴注入容器添加 MCP 服務器服務

WithStdioServerTransport()

 - 配置服務器使用標準輸入輸出作為傳輸方式

WithToolsFromAssembly()

 - 自動注冊當前程序集中的所有 MCP 工具

工具注冊與實現(xiàn)

在 MCP 服務器中,工具是通過特性(Attribute)來注冊的。下面是一個簡單的工具實現(xiàn)示例:

[McpServerToolType]
public static class EchoTool
{
    [McpServerTool, Description("Echoes the message back to the client.")]
    public static string Echo(string message) => $"hello {message}";
}

更復雜的工具可以使用依賴注入和服務器交互:

在 QuickstartWeatherServer 示例中,我們可以看到更實際的工具實現(xiàn):

[McpServerToolType]
public static class WeatherTools
{
    [McpServerTool, Description("Get weather alerts for a US state.")]
    public static async Task GetAlerts(
        HttpClient client,
        [Description("The US state to get alerts for.")] string state)
    {
        var jsonElement = await client.GetFromJsonAsync($"/alerts/active/area/{state}");
        var alerts = jsonElement.GetProperty("features").EnumerateArray();
        if (!alerts.Any())
        {
            return "No active alerts for this state.";
        }
        return string.Join("\n-\n", alerts.Select(alert =>
        {
            JsonElement properties = alert.GetProperty("properties");
            return $"""
                Event: {properties.GetProperty("event").GetString()}
                """;
        }));
    }
}

工具注冊特性說明: [McpServerToolType]

 - 標記一個類包含 MCP 工具

[McpServerTool]

 - 標記一個方法作為 MCP 工具

[Description]

 - 提供工具和參數(shù)的描述信息

服務配置

MCP 服務器的配置主要通過 .NET 的依賴注入系統(tǒng)完成。以下是一個配置 HttpClient 的示例:

builder.Services.AddSingleton(_ =>
{
    var client = new HttpClient() { BaseAddress = new Uri("https://api.weather.gov") };
    client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("weather-tool", "1.0"));
    return client;
});

高級配置選項:

  • 自定義傳輸方式:除了標準的 stdio 傳輸方式,還可以配置 SSE 或 WebSocket 傳輸
  • 工具過濾:可以選擇性地注冊特定的工具,而不是注冊所有工具
  • 中間件:可以添加自定義中間件來處理請求和響應
  • 錯誤處理:可以配置全局錯誤處理策略
  • 日志記錄:可以配置詳細的日志記錄選項

客戶端實現(xiàn)

連接到 MCP 服務器

使用官方的 C# SDK 連接到 MCP 服務器的基本代碼如下:

var mcpClient = await McpClientFactory.CreateAsync(new()
{
    Id = "demo-server",
    Name = "Demo Server",
    TransportType = TransportTypes.StdIo,
    TransportOptions = new()
    {
        ["command"] = command,
        ["arguments"] = arguments,
    }
});

這段代碼創(chuàng)建了一個 MCP 客戶端,并連接到指定的服務器。TransportType 指定了通信方式(這里是標準輸入輸出),TransportOptions 提供了額外的配置選項。

支持的傳輸類型: TransportTypes.Stdio

 - 使用標準輸入輸出進行通信

TransportTypes.Sse

 - 使用服務器發(fā)送事件 (SSE) 進行通信

TransportTypes.WebSocket

 - 使用 WebSocket 進行通信

工具調(diào)用

連接到服務器后,客戶端可以列出可用的工具并調(diào)用它們:

var tools = await mcpClient.ListToolsAsync();
foreach (var tool in tools)
{
    Console.WriteLine($"Connected to server with tools: {tool.Name}");
}
// 調(diào)用工具示例
var result = await mcpClient.CallToolAsync(
    "echo",
    new Dictionary() { ["message"] = "Hello MCP!" },
    CancellationToken.None);
// 輸出結果
Console.WriteLine(result.Content.First(c => c.Type == "text").Text);

工具調(diào)用參數(shù)說明: toolName

 - 要調(diào)用的工具名稱

parameters

 - 工具參數(shù)字典,鍵為參數(shù)名,值為參數(shù)值

cancellationToken

 - 取消令牌,用于取消操作

結果處理:

工具調(diào)用結果包含一個 Content 集合,每個內(nèi)容項都有一個 Type 和一個 Text。常見的內(nèi)容類型包括:

text

 - 純文本內(nèi)容

application/json

 - JSON 格式的內(nèi)容

image/*

 - 圖像內(nèi)容(如 image/png、image/jpeg 等)

與 Claude 模型集成

MCP 客戶端可以與 Claude 等 AI 模型集成,使模型能夠使用 MCP 工具:

var anthropicClient = new AnthropicClient(new APIAuthentication(builder.Configuration["ANTHROPIC_API_KEY"]))
    .Messages
    .AsBuilder()
    .UseFunctionInvocation()
    .Build();
var options = new ChatOptions
{
    MaxOutputTokens = 1000,
    ModelId = "claude-3-5-sonnet-20240229",
    Tools = [.. tools]
};
// 使用 Claude 模型處理用戶查詢
await foreach (var message in anthropicClient.GetStreamingResponseAsync(query, options))
{
    Console.Write(message);
}

集成步驟說明:

  • 創(chuàng)建 Anthropic 客戶端并配置 API 密鑰
  • 啟用函數(shù)調(diào)用功能
  • 創(chuàng)建聊天選項,包括模型 ID、最大輸出令牌數(shù)和工具列表
  • 使用流式響應 API 處理用戶查詢
  • 處理模型返回的消息,包括工具調(diào)用和文本響應

Cursor 配置與集成

MCP Server 添加步驟

在 Cursor 中配置 MCP Server 的步驟如下:

  • 導航至 Cursor Settings > FeaturesMCP
  • 點擊+ Add New MCP Server按鈕
  • 在配置窗口中:
    • 選擇傳輸類型
    • 配置服務器信息
  • 完成添加后,服務器將顯示在 MCP 服務器列表中
  • 如需更新工具列表,可能需要手動點擊刷新按鈕

Cursor MCP 服務器配置界面示例

傳輸類型配置

Cursor 支持兩種主要的傳輸類型:

stdio

用于標準輸入輸出通信,適用于本地運行的 MCP 服務器。

配置方式:輸入可執(zhí)行命令
示例:

npx -y @smithery/cli@latest run @mzxrai/mcp-webresearch --config "{}"

sse

用于服務器發(fā)送事件通信,適用于遠程 MCP 服務器。

配置方式:輸入服務器 URL
示例:

https://example.com/mcp

工具使用方法

在 Cursor 的 Composer 中使用 MCP 工具時,你可以:

  • 讓 Composer Agent 自動選擇合適的工具
  • 明確指定使用特定工具
  • 查看工具調(diào)用的詳細信息
  • 對工具調(diào)用進行管理:
    • 檢查調(diào)用參數(shù)
    • 決定是否批準調(diào)用
    • 查看調(diào)用結果

工具使用示例:

用戶: 搜索關鍵詞 cursor mcp server,列出 Top 5 熱度的關鍵詞

Claude: 我將使用 Web Search 工具來搜索這些關鍵詞。

工具調(diào)用:Web Search
參數(shù):{"query": "cursor mcp server"}

Claude: 根據(jù)搜索結果,關于 "cursor mcp server" 的 Top 5 熱度關鍵詞是:

Model Context Protocol (MCP) Integration

Custom MCP Server Development

MCP Server Templates

Database Integration

Desktop Application Integration

最佳實踐與示例

服務器端最佳實踐

使用依賴注入:

利用 .NET 的依賴注入系統(tǒng)管理服務和工具的依賴關系。

適當?shù)腻e誤處理:

確保工具實現(xiàn)中包含適當?shù)腻e誤處理邏輯。

詳細的工具描述:

使用Description特性為工具和參數(shù)提供清晰的描述。

模塊化設計:

將不同功能的工具分組到不同的類中。

客戶端最佳實踐

異步操作:

使用異步方法處理 MCP 客戶端的所有操作。

資源管理:

確保適當釋放客戶端資源。

錯誤處理:

實現(xiàn)適當?shù)腻e誤處理邏輯,處理服務器連接和工具調(diào)用中可能出現(xiàn)的問題。

用戶體驗:

提供清晰的用戶反饋,特別是在工具調(diào)用過程中。

集成示例

以下是一個將 MCP 客戶端與 Claude 模型集成的完整示例:

using Anthropic.SDK;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using ModelContextProtocol.Client;
using ModelContextProtocol.Protocol.Transport;
using System.ComponentModel;
var builder = Host.CreateApplicationBuilder(args);
builder.Configuration
    .AddEnvironmentVariables()
    .AddUserSecrets();
var (command, arguments) = GetCommandAndArguments(args);
await using var mcpClient = await McpClientFactory.CreateAsync(new()
{
    Id = "demo-server",
    Name = "Demo Server",
    TransportType = TransportTypes.StdIo,
    TransportOptions = new()
    {
        ["command"] = command,
        ["arguments"] = arguments,
    }
});
var tools = await mcpClient.ListToolsAsync();
foreach (var tool in tools)
{
    Console.WriteLine($"Connected to server with tools: {tool.Name}");
}
var anthropicClient = new AnthropicClient(new APIAuthentication(builder.Configuration["ANTHROPIC_API_KEY"]))
    .Messages
    .AsBuilder()
    .UseFunctionInvocation()
    .Build();
var options = new ChatOptions
{
    MaxOutputTokens = 1000,
    ModelId = "claude-3-5-sonnet-20240229",
    Tools = [.. tools]
};
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("MCP Client Started!");
Console.ResetColor();
PromptForInput();
while(Console.ReadLine() is string query && !("exit".Equals(query, StringComparison.OrdinalIgnoreCase)))
{
    if (string.IsNullOrWhiteSpace(query))
    {
        PromptForInput();
        continue;
    }
    await foreach (var message in anthropicClient.GetStreamingResponseAsync(query, options))
    {
        Console.Write(message);
    }
    Console.WriteLine();
    PromptForInput();
}
static void PromptForInput()
{
    // 提示用戶輸入
}
static (string, string) GetCommandAndArguments(string[] args)
{
    // 解析命令行參數(shù)
}

這個示例展示了如何創(chuàng)建 MCP 客戶端,連接到服務器,獲取可用工具,并將這些工具與 Claude 模型集成,使模型能夠使用這些工具來響應用戶查詢。

結論

本文檔詳細介紹了 .NET 使用 MCP 的相關內(nèi)容,包括服務器端實現(xiàn)、客戶端實現(xiàn)以及 Cursor 集成配置等方面。通過使用 MCP,開發(fā)者可以創(chuàng)建強大的工具和服務,使 AI 模型能夠安全地訪問和操作各種數(shù)據(jù)源。

隨著 MCP 生態(tài)系統(tǒng)的不斷發(fā)展,我們可以期待更多的功能和改進。官方的 C# SDK 提供了一個穩(wěn)定的基礎,使 .NET 開發(fā)者能夠輕松地實現(xiàn) MCP 服務器和客戶端。

我們鼓勵開發(fā)者探索 MCP 的各種可能性,創(chuàng)建創(chuàng)新的工具和服務,并為 MCP 社區(qū)做出貢獻。

到此這篇關于.NET MCP 文檔的文章就介紹到這了,更多相關.NET MCP 文檔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論