什么是 MCP(模型上下文协议)?.NET 开发者如何抢占 AI 工具链新风口

什么是 MCP(模型上下文协议)?.NET 开发者如何抢占 AI 工具链新风口

2024 年 11 月,Anthropic 把 MCP(Model Context Protocol,模型上下文协议)推到台前;到 2026 年,它已经被微软、OpenAI、Google、Linux 基金会 AAIF、VS Code、Copilot Studio、Cursor、Claude 等一整条 AI 工具链共同接纳,成为"LLM 连接外部世界"的默认插座。

对 .NET 开发者来说,这不是又一个 Python 优先的 AI 标准------微软亲自下场维护了官方 C# SDK,并把 MCP 塞进了 ASP.NET Core、Microsoft.Extensions.AI、Agent Framework、Azure Functions 的默认路径里。风口已经不是在"要不要看",而是在"谁先把存量系统包成 MCP Server"。

一、MCP 到底是什么:AI 界的 USB-C

MCP 是一个开放、与模型无关、与传输无关 的上下文交换协议。它解决的是那个被讲烂了的 M×N 集成地狱

  • M 个模型(Claude / GPT / 通义 / 本地模型)
  • N 个工具/数据源(SQL、ERP、文件系统、内部 API、K8s、工单系统)
  • 传统做法:M×N 套胶水代码,换模型或换工具就重写

MCP 在中间插了一层标准协议:Host(AI 应用)→ Client(每 Server 一个)→ Server(能力提供方) ,通信基于 JSON-RPC 2.0,能力通过握手协商。

三个核心原语是开发者最常打交道的:

  • Tools :AI 可调用的函数(类似 POST,可有副作用),比如 QueryOrdersCreateTicket
  • Resources:只读上下文数据(类似 GET),比如配置文件、表结构、日志片段
  • Prompts:可复用的提示词模板,把复杂工作流固化下来

两种传输层开箱即用:

  • Stdio:本机进程间,零网络开销,适合 CLI / IDE 插件 / 本地代理
  • Streamable HTTP(含 SSE):跨网络、可远端托管、走 OAuth2.1/Bearer,适合企业内网服务

类比:MCP 之于 AI 应用,约等于 LSP(语言服务器协议)之于编辑器------一次实现,处处可插。

二、为什么 .NET 开发者特别该盯这块

企业核心业务系统大量躺在 .NET 上:ERP、MES、金融清算、政务内网、遗留 WCF/ASP.NET 服务。过去要让 LLM 碰这些系统,要么写 Python 中间件做桥,要么把业务重写成 Python------都不划算。

MCP C# SDK 把这件事变成"给老代码贴标签":

  • 官方包 ModelContextProtocol(及 .Core / .AspNetCore)由 Microsoft + Anthropic 协同维护,2026 年已到稳定大版本,支持最新规范、Streamable HTTP、Native AOT、Sampling/Elicitation/Roots 等完整特性
  • Microsoft.Extensions.DependencyInjectionHostingMicrosoft.Extensions.AI 原生打通,ASP.NET Core 里 AddMcpServer().WithHttpTransport() + app.MapMcp() 就能挂一个远端点
  • 工具发现靠属性:[McpServerToolType] + [McpServerTool] + [Description],自动生成 JSON Schema,Claude/Cursor/Copilot 都能秒级列出你的工具
  • 模型无关:上层接 Azure OpenAI、OpenAI、Semantic Kernel、Agent Framework 都行,MCP 层不动

风口本质:未来 2 年,企业采购 AI 能力时会默认问"你这套系统有没有 MCP 接口"。先包的人吃存量红利,后包的人给别人当下游。

三、.NET 侧两条最短落地路径

路径 A:把现有业务包成 MCP Server(卖铲子)

最小 stdio 版,5 分钟跑起来:

csharp 复制代码
dotnet new console -n MyMcpServer
cd MyMcpServer
dotnet add package ModelContextProtocol
dotnet add package Microsoft.Extensions.Hosting
csharp 复制代码
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using ModelContextProtocol.Server;
using System.ComponentModel;

var builder = Host.CreateApplicationBuilder(args);
builder.Services
    .AddMcpServer()
    .WithStdioServerTransport()
    .WithToolsFromAssembly();

await builder.Build().RunAsync();

[McpServerToolType]
public static class OrderTools
{
    [McpServerTool, Description("按客户ID查询最近订单")]
    public static string QueryOrders(
        [Description("客户唯一标识")] string customerId)
    {
        // 这里调你现有的 EF Core / Dapper / gRPC
        return $"customer={customerId} orders: SO-1001, SO-1002";
    }
}

要暴露给远端 Agent,换成 ASP.NET Core:

csharp 复制代码
dotnet add package ModelContextProtocol.AspNetCore
ini 复制代码
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer()
    .WithHttpTransport()
    .WithToolsFromAssembly();

var app = builder.Build();
app.MapMcp();
app.Run();

真实场景里你可以把 QueryOrders 换成:PostgreSQL 表结构探测、Kubernetes Pod 日志拉取、用 HttpClient 调内部 ERP、用 Npgsql 直连库------AWS 官方博客就给过一套 .NET MCP Server 接 Postgres 的完整数例。

路径 B:在 .NET 里写 MCP Client,给自有系统接脑子

csharp 复制代码
dotnet add package ModelContextProtocol
dotnet add package Microsoft.Extensions.AI
dotnet add package Azure.AI.OpenAI
ini 复制代码
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;

// 1. 连一个 MCP Server(本地 stdio 或远端 HTTP 都行)
var transport = new StdioClientTransport(new StdioClientTransportOptions
{
    Name = "LocalTools",
    Command = "dotnet",
    Arguments = ["run", "--project", "../MyMcpServer"]
});
var mcp = await McpClient.CreateAsync(transport);
var tools = await mcp.ListToolsAsync();

// 2. 接 LLM(这里用 Azure OpenAI,可换任意 IChatClient)
IChatClient chat = new ChatClientBuilder(
    new AzureOpenAIClient(new Uri("https://xxx.openai.azure.com"),
        new DefaultAzureCredential())
    .GetChatClient("gpt-4o").AsIChatClient())
    .UseFunctionInvocation().Build();

// 3. 对话循环里把 MCP 工具喂给模型
List<ChatMessage> history = [];
while (true)
{
    Console.Write("你> ");
    history.Add(new ChatRole(User, Console.ReadLine()));
    await foreach (var u in chat.GetStreamingResponseAsync(
        history, new() { Tools = [.. tools] }))
        Console.Write(u.Text);
}

这段代码的价值:你的 WinForms/Web API/后台服务,不用改架构,就能让运营人员用自然语言查订单、排工单、审日志。

四、抢风口的四层姿势(从浅到深)

  1. 工具化存量:挑 3~5 个高频内部操作(查权限、查库存、发通知)先包成 MCP Tools,接 VS Code + Copilot Agent Mode 自测,团队效率立刻感知。
  2. 服务化对外 :把核心业务系统用 ModelContextProtocol.AspNetCore 暴露成内网 MCP 端点,配 OAuth2.1 + Scopes,让其他部门 Agent 自助接入,你从"需求接单人"变"平台提供方"。
  3. Client 嵌入式:在自有产品里嵌 MCP Client,支持用户自带 MCP Server(比如客户把自己的 CRM 挂进来),产品瞬间变成"可编排的 AI 工作台"。
  4. 组合式 Agent:MCP + Microsoft Agent Framework / Semantic Kernel,把多个 MCP Server(GitHub、Azure、内部 ERP)拼成多步工作流,做审批链、运维巡检、报表生成。

安全边界别裸奔:MCP 规范明确 Tool = 任意代码执行,必须走用户显式授权、最小权限、工具描述不可信原则;HTTP 传输务必上 OAuth/PKCE,别把 WithHttpTransport 直接绑公网。

五、结论

MCP 不是"又一个 AI 概念",它是AI 应用与企业系统之间的 TCP/IP 层。对 .NET 开发者而言,优势在于:

  • 存量代码几乎零改写,属性标注即接入
  • 微软官方 SDK 已生产可用,传输/DI/AOT/Auth 全齐
  • 上游 Host(Copilot、Cursor、Claude、Agent Framework)全认
  • 先发者能把内部系统变成"被 Agent 调用的基础设施"

最该做的动作 :这周挑一个你最熟的 .NET 服务,用 ModelContextProtocol 包两个 Tool 跑通 stdio,再换成 ASP.NET Core HTTP 版------跑通那一刻,你就已经从"用 AI 的人"切换到"被 AI 调用的人",这才是工具链风口里真正值钱的位置。

相关推荐
名字还没想好☜1 小时前
Java 21 switch 模式匹配实战:sealed 接口 + record 替代 if-instanceof 链
java·人工智能·后端·python·spring
__zRainy__2 小时前
Node系列 · ORM:mysql 驱动程序
数据库·后端·mysql·node.js·orm
掘金者阿豪2 小时前
极空间开启 SSH 后能做什么?从终端登录到公网远程管理完整实战
后端
用户7813667114452 小时前
RGW Beast 前端流程详解
后端
智驭未来掌门人2 小时前
告别手动配置!用SDKMAN!一键管理你的所有开发工具包
后端
__zRainy__3 小时前
Node系列 · ORM:Sequelize 模型
数据库·后端·node.js
摇滚侠3 小时前
《SpringBoot 3:入门与应用实战》第 6 章 Spring Boot 最佳实践 阅读笔记 11
spring boot·笔记·后端
对象存储与RustFS4 小时前
用 rclone 把现有 S3/MinIO 数据同步到 RustFS
后端·rust·开源
魔兽大山哥4 小时前
【NL2SQL 实战 05】sqlglot 这把刀:把 SQL 当结构处理,安全校验才不靠碰运气
后端