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

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

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

MCP 概述

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

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

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

MCP 的主要特點(diǎn)

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

MCP 服務(wù)器

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

MCP 客戶(hù)端

MCP 客戶(hù)端是實(shí)現(xiàn) MCP 協(xié)議的客戶(hù)端,負(fù)責(zé)連接到 MCP 服務(wù)器,獲取可用工具列表,調(diào)用工具,并處理返回結(jié)果??蛻?hù)端通常與 LLM 集成,使 LLM 能夠使用 MCP 工具。

.NET MCP 實(shí)現(xiàn)項(xiàng)目對(duì)比

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

官方 C# SDK:csharp-sdk

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

GitHub 倉(cāng)庫(kù): 

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

MCPSharp

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

特點(diǎn):

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

GitHub 倉(cāng)庫(kù): 

https://github.com/afrise/MCPSharp

mcpdotnet

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

特點(diǎn):

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

GitHub 倉(cāng)庫(kù): 

https://github.com/PederHP/mcpdotnet

ModelContextProtocol.NET

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

特點(diǎn):

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

GitHub倉(cāng)庫(kù):

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

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

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

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

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

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

AddMcpServer()

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

WithStdioServerTransport()

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

WithToolsFromAssembly()

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

工具注冊(cè)與實(shí)現(xiàn)

在 MCP 服務(wù)器中,工具是通過(guò)特性(Attribute)來(lái)注冊(cè)的。下面是一個(gè)簡(jiǎn)單的工具實(shí)現(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ù)雜的工具可以使用依賴(lài)注入和服務(wù)器交互:

在 QuickstartWeatherServer 示例中,我們可以看到更實(shí)際的工具實(shí)現(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()}
                """;
        }));
    }
}

工具注冊(cè)特性說(shuō)明: [McpServerToolType]

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

[McpServerTool]

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

[Description]

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

服務(wù)配置

MCP 服務(wù)器的配置主要通過(guò) .NET 的依賴(lài)注入系統(tǒng)完成。以下是一個(gè)配置 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;
});

高級(jí)配置選項(xiàng):

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

客戶(hù)端實(shí)現(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)建了一個(gè) MCP 客戶(hù)端,并連接到指定的服務(wù)器。TransportType 指定了通信方式(這里是標(biāo)準(zhǔn)輸入輸出),TransportOptions 提供了額外的配置選項(xiàng)。

支持的傳輸類(lèi)型: TransportTypes.Stdio

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

TransportTypes.Sse

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

TransportTypes.WebSocket

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

工具調(diào)用

連接到服務(wù)器后,客戶(hù)端可以列出可用的工具并調(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ù)說(shuō)明: toolName

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

parameters

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

cancellationToken

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

結(jié)果處理:

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

text

 - 純文本內(nèi)容

application/json

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

image/*

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

與 Claude 模型集成

MCP 客戶(hù)端可以與 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 模型處理用戶(hù)查詢(xún)
await foreach (var message in anthropicClient.GetStreamingResponseAsync(query, options))
{
    Console.Write(message);
}

集成步驟說(shuō)明:

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

Cursor 配置與集成

MCP Server 添加步驟

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

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

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

傳輸類(lèi)型配置

Cursor 支持兩種主要的傳輸類(lèi)型:

stdio

用于標(biāo)準(zhǔn)輸入輸出通信,適用于本地運(yù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 工具時(shí),你可以:

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

工具使用示例:

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

Claude: 我將使用 Web Search 工具來(lái)搜索這些關(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

最佳實(shí)踐與示例

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

使用依賴(lài)注入:

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

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

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

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

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

模塊化設(shè)計(jì):

將不同功能的工具分組到不同的類(lèi)中。

客戶(hù)端最佳實(shí)踐

異步操作:

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

資源管理:

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

錯(cuò)誤處理:

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

用戶(hù)體驗(yàn):

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

集成示例

以下是一個(gè)將 MCP 客戶(hù)端與 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()
{
    // 提示用戶(hù)輸入
}
static (string, string) GetCommandAndArguments(string[] args)
{
    // 解析命令行參數(shù)
}

這個(gè)示例展示了如何創(chuàng)建 MCP 客戶(hù)端,連接到服務(wù)器,獲取可用工具,并將這些工具與 Claude 模型集成,使模型能夠使用這些工具來(lái)響應(yīng)用戶(hù)查詢(xún)。

結(jié)論

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

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

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

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

相關(guān)文章

最新評(píng)論