欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET?MCP?文檔詳細(xì)指南

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

MCP 概述

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

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

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

MCP 的主要特點

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

MCP 服務(wù)器

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

MCP 客戶端

MCP 客戶端是實現(xiàn) MCP 協(xié)議的客戶端,負(fù)責(zé)連接到 MCP 服務(wù)器,獲取可用工具列表,調(diào)用工具,并處理返回結(jié)果。客戶端通常與 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 服務(wù)器和客戶端提供簡單易用的接口,主要由微軟維護(hù)。該項目已經(jīng)成為 MCP 社區(qū)的官方 SDK 項目,最近發(fā)布了 0.1.0-preview 版本。

GitHub 倉庫: 

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

MCPSharp

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

特點:

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

GitHub 倉庫: 

https://github.com/afrise/MCPSharp

mcpdotnet

mcpdotnet 是一個 .NET 實現(xiàn)的模型上下文協(xié)議(MCP),使 .NET 應(yīng)用程序能夠與 MCP 客戶端和服務(wù)器進(jìn)行交互。該項目已經(jīng)進(jìn)入歸檔狀態(tài),相關(guān)的開發(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)。

特點:

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

GitHub倉庫:

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

服務(wù)器端實現(xiàn)

基本結(jié)構(gòu)

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

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

關(guān)鍵組件說明:

AddMcpServer()

 - 向依賴注入容器添加 MCP 服務(wù)器服務(wù)

WithStdioServerTransport()

 - 配置服務(wù)器使用標(biāo)準(zhǔn)輸入輸出作為傳輸方式

WithToolsFromAssembly()

 - 自動注冊當(dāng)前程序集中的所有 MCP 工具

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

在 MCP 服務(wù)器中,工具是通過特性(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}";
}

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

在 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]

 - 標(biāo)記一個類包含 MCP 工具

[McpServerTool]

 - 標(biāo)記一個方法作為 MCP 工具

[Description]

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

服務(wù)配置

MCP 服務(wù)器的配置主要通過 .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;
});

高級配置選項:

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

客戶端實現(xiàn)

連接到 MCP 服務(wù)器

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

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

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

支持的傳輸類型: TransportTypes.Stdio

 - 使用標(biāo)準(zhǔn)輸入輸出進(jìn)行通信

TransportTypes.Sse

 - 使用服務(wù)器發(fā)送事件 (SSE) 進(jìn)行通信

TransportTypes.WebSocket

 - 使用 WebSocket 進(jìn)行通信

工具調(diào)用

連接到服務(wù)器后,客戶端可以列出可用的工具并調(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);
// 輸出結(jié)果
Console.WriteLine(result.Content.First(c => c.Type == "text").Text);

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

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

parameters

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

cancellationToken

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

結(jié)果處理:

工具調(diào)用結(jié)果包含一個 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ù)和工具列表
  • 使用流式響應(yīng) API 處理用戶查詢
  • 處理模型返回的消息,包括工具調(diào)用和文本響應(yīng)

Cursor 配置與集成

MCP Server 添加步驟

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

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

Cursor MCP 服務(wù)器配置界面示例

傳輸類型配置

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

stdio

用于標(biāo)準(zhǔn)輸入輸出通信,適用于本地運行的 MCP 服務(wù)器。

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

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

sse

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

配置方式:輸入服務(wù)器 URL
示例:

https://example.com/mcp

工具使用方法

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

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

工具使用示例:

用戶: 搜索關(guān)鍵詞 cursor mcp server,列出 Top 5 熱度的關(guān)鍵詞

Claude: 我將使用 Web Search 工具來搜索這些關(guān)鍵詞。

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

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

Model Context Protocol (MCP) Integration

Custom MCP Server Development

MCP Server Templates

Database Integration

Desktop Application Integration

最佳實踐與示例

服務(wù)器端最佳實踐

使用依賴注入:

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

適當(dāng)?shù)腻e誤處理:

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

詳細(xì)的工具描述:

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

模塊化設(shè)計:

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

客戶端最佳實踐

異步操作:

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

資源管理:

確保適當(dāng)釋放客戶端資源。

錯誤處理:

實現(xiàn)適當(dāng)?shù)腻e誤處理邏輯,處理服務(wù)器連接和工具調(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 客戶端,連接到服務(wù)器,獲取可用工具,并將這些工具與 Claude 模型集成,使模型能夠使用這些工具來響應(yīng)用戶查詢。

結(jié)論

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

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

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

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

相關(guān)文章

最新評論