探索 MCP C# SDK:实现大语言模型与应用的无缝对接

探索 MCP C# SDK:实现大语言模型与应用的无缝对接

在当今人工智能快速发展的时代,大语言模型(LLMs)已经成为众多应用的核心驱动力。然而,如何让这些强大的模型与各种数据源和工具进行有效集成,仍然是一个挑战。Model Context Protocol(MCP)正是为解决这一问题而设计的开放协议,它标准化了应用程序如何向大语言模型提供上下文信息。本文将介绍 MCP 的基本概念,并通过 C# SDK 展示如何实现客户端和服务器端的交互。

什么是 MCP?

Model Context Protocol(MCP)是一种开放协议,旨在标准化应用程序如何向大语言模型(LLMs)提供上下文信息。它允许安全地集成大语言模型与各种数据源和工具,使 LLMs 能够更智能地与外部系统交互。MCP 的核心优势在于它的灵活性和互操作性,支持不同的传输协议和数据格式。

MCP C# SDK 概述

MCP C# SDK 是官方提供的用于 .NET 应用程序的开发工具包,它使开发者能够轻松实现 MCP 客户端和服务器。该 SDK 包含三个主要包:

  • ModelContextProtocol:主包,包含主机和依赖注入扩展,适合大多数不需要 HTTP 服务器功能的项目。
  • ModelContextProtocol.AspNetCore:基于 HTTP 的 MCP 服务器库。
  • ModelContextProtocol.Core:提供客户端和低级服务器 API,依赖最少。

接下来,我们将通过具体示例展示如何使用 MCP C# SDK 实现客户端和服务器端功能。

实现 MCP 客户端

首先,让我们看看如何实现一个简单的 MCP 客户端,该客户端连接到服务器并调用可用的工具。

csharp 复制代码
using ModelContextProtocol.Client;
using ModelContextProtocol.Transport;
using System.CommandLine;

// 创建标准输入输出客户端传输
var clientTransport = new StdioClientTransport(new StdioClientTransportOptions
{
    Name = "Everything",
    Command = "npx",
    Arguments = ["-y", "@modelcontextprotocol/server-everything"],
});

// 创建并连接客户端
var client = await McpClientFactory.CreateAsync(clientTransport);

// 列出所有可用工具
Console.WriteLine("可用工具列表:");
foreach (var tool in await client.ListToolsAsync())
{
    Console.WriteLine($"- {tool.Name}: {tool.Description}");
}

// 调用 echo 工具
var result = await client.CallToolAsync(
    "echo",
    new Dictionary<string, object?>() { ["message"] = "Hello MCP!" },
    cancellationToken: CancellationToken.None);

// 输出结果
Console.WriteLine("\n调用 echo 工具结果:");
Console.WriteLine(result.Content.First(c => c.Type == "text").Text);

在这个示例中,我们首先创建了一个标准输入输出客户端传输,它连接到一个基于 Node.js 的 MCP 服务器。然后,我们使用 McpClientFactory 创建并连接客户端,列出所有可用工具,并调用其中一个工具(echo)。

实现 MCP 服务器

现在,让我们看看如何实现一个简单的 MCP 服务器,该服务器提供工具供客户端调用。

csharp 复制代码
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using ModelContextProtocol.Server;
using System.ComponentModel;

// 创建主机构建器
var builder = Host.CreateApplicationBuilder(args);
builder.Logging.AddConsole(consoleLogOptions =>
{
    // 配置所有日志输出到标准错误
    consoleLogOptions.LogToStandardErrorThreshold = LogLevel.Trace;
});

// 配置 MCP 服务器
builder.Services
    .AddMcpServer()
    .WithStdioServerTransport()
    .WithToolsFromAssembly();

// 构建并运行主机
await builder.Build().RunAsync();

// 定义一个简单的工具类
[McpServerToolType]
public static class EchoTool
{
    [McpServerTool, Description("Echoes the message back to the client.")]
    public static string Echo(string message) => $"Echo: {message}";
}

这个示例展示了如何创建一个简单的 MCP 服务器。我们使用 Microsoft.Extensions.Hosting 创建一个主机应用程序,并配置 MCP 服务器使用标准输入输出传输。然后,我们定义了一个简单的工具类 EchoTool,其中包含一个 Echo 方法,用于将输入的消息回显给客户端。

高级工具实现

MCP 还支持更复杂的工具实现,例如需要依赖注入或与客户端交互的工具。下面是一个示例,展示了如何实现一个从 URL 获取内容并进行摘要的工具。

csharp 复制代码
[McpServerTool(Name = "SummarizeContentFromUrl"), Description("Summarizes content downloaded from a specific URI")]
public static async Task<string> SummarizeDownloadedContent(
    IMcpServer thisServer,
    HttpClient httpClient,
    [Description("The url from which to download the content to summarize")] string url,
    CancellationToken cancellationToken)
{
    // 从 URL 获取内容
    string content = await httpClient.GetStringAsync(url);

    // 创建聊天消息
    ChatMessage[] messages =
    [
        new(ChatRole.User, "Briefly summarize the following downloaded content:"),
        new(ChatRole.User, content),
    ];
    
    // 配置聊天选项
    ChatOptions options = new()
    {
        MaxOutputTokens = 256,
        Temperature = 0.3f,
    };

    // 使用服务器作为采样聊天客户端获取摘要
    return $"Summary: {await thisServer.AsSamplingChatClient().GetResponseAsync(messages, options, cancellationToken)}";
}

这个工具接受一个 URL 参数,使用注入的 HttpClient 下载内容,然后使用注入的 IMcpServer 与客户端交互,请求客户端对内容进行摘要。

总结

MCP C# SDK 为 .NET 开发者提供了一个强大而灵活的工具,用于实现与大语言模型的无缝集成。通过标准化的协议,开发者可以更轻松地构建能够与各种数据源和工具交互的智能应用程序。

本文展示了如何使用 MCP C# SDK 实现基本的客户端和服务器功能,以及如何创建简单和复杂的工具。随着人工智能技术的不断发展,像 MCP 这样的协议将变得越来越重要,因为它们提供了一种标准化的方式来连接不同的系统和组件。

如果你对 MCP 或 C# SDK 有更多兴趣,可以查看官方文档和示例代码,进一步探索这个令人兴奋的领域。

小智MCP示例项目

https://github.com/zhulige/xiaozhi-sharp

相关推荐
连合机器人18 小时前
城市脉搏中的“绿色卫士”:当智能科技邂逅城市清洁
人工智能·ai·设备租赁·连合直租·智能清洁专家·有鹿巡扫机器人
贾全18 小时前
准备篇:搭建你的AI“炼丹炉“
人工智能·ai·vlm·多模态ai·vlm环境配置
即兴小索奇19 小时前
Gamma AI:高效制作PPT的智能生成工具
ai·商业·ai商业洞察·即兴小索奇
Ai尚研修-贾莲20 小时前
全链路自主构建智慧科研写作系统——融合LLM语义理解、多智能体任务协同与n8n自动化工作流构建
人工智能·agent·智能体·deepseek·n8n·智慧科研写作·llm语义理解
胡耀超21 小时前
大模型架构演进全景:从Transformer到下一代智能系统的技术路径(MoE、Mamba/SSM、混合架构)
人工智能·深度学习·ai·架构·大模型·transformer·技术趋势分析
m0_603888711 天前
Delta Activations A Representation for Finetuned Large Language Models
人工智能·ai·语言模型·自然语言处理·论文速览
即兴小索奇1 天前
CodePerfAI体验:AI代码性能分析工具如何高效排查性能瓶颈、优化SQL执行耗时?
ai·商业·ai商业洞察·即兴小索奇
大模型教程1 天前
AI Agent 发展趋势与架构演进
程序员·llm·agent
即兴小索奇1 天前
Codeium:免费开源代码自动补全工具,高效管理代码片段告别开发卡壳
ai·商业·ai商业洞察·即兴小索奇
我没想到原来他们都是一堆坏人1 天前
通过Gen AI SDK调用gemini 2.5 pro,单独上传pdf文件 | ai agent 开发笔记 2025.9.2 Day 2
ai·google·pdf·sdk·gemini