什么是 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,可有副作用),比如
QueryOrders、CreateTicket - 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.DependencyInjection、Hosting、Microsoft.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/后台服务,不用改架构,就能让运营人员用自然语言查订单、排工单、审日志。
四、抢风口的四层姿势(从浅到深)
- 工具化存量:挑 3~5 个高频内部操作(查权限、查库存、发通知)先包成 MCP Tools,接 VS Code + Copilot Agent Mode 自测,团队效率立刻感知。
- 服务化对外 :把核心业务系统用
ModelContextProtocol.AspNetCore暴露成内网 MCP 端点,配 OAuth2.1 + Scopes,让其他部门 Agent 自助接入,你从"需求接单人"变"平台提供方"。 - Client 嵌入式:在自有产品里嵌 MCP Client,支持用户自带 MCP Server(比如客户把自己的 CRM 挂进来),产品瞬间变成"可编排的 AI 工作台"。
- 组合式 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 调用的人",这才是工具链风口里真正值钱的位置。