.NET平台MCP

缘起

2025年3月,mcp这个协议突然爆火刷屏,很多大咖纷纷宣传讲解。这个伟大的协议统一了通过自然语言的描述让ai可以自动认识并正确的使用工具的标准,让agent可以更快走进现实。在当前这个协议的应用已经很广泛了,甚至很多agent框架内部可以把一些开发的函数以mcp的形式进行封装,从而更好地实现对工具的智能调用。

交互原理

包含客户端与服务器的概念,用户、Host、客户端、服务器已经工具之间大概的调用关系如下图:
MCP 工具 MCP 服务器 MCP 客户端 MCP 主机 用户 MCP 工具 MCP 服务器 MCP 客户端 MCP 主机 用户 打开 UI / 发送首条请求 Initialize(sessionId, authToken) Initialize(sessionId, capabilities) InitAck(version, supportedTools) GetTools() ToolsList(工具A, 工具B, ...) 选择需要的工具(如果有客户端过滤) "请告诉我巴黎的天气" BuildMCPPayload(message="请告诉我巴黎的天气") SendMessage(payload) MergePayloadWithMemory() ValidateMCP() BuildPromptFromContext() InvokeLLM(prompt) LLMResponse(assistantMessage=null, toolCall=WeatherAPI(city="Paris")) ExecuteTool(WeatherAPI, {"city":"Paris"}) ToolResult({temp:12, condition:"多云"}) AppendToolResultToContext() Re‑buildPrompt() InvokeLLM(prompt) LLMResponse(assistantMessage="巴黎当前气温 12 °C,天气多云。") ReturnResponse(payload) DeliverMCP(payload) RenderAssistantMessage("巴黎当前气温 12 °C,天气多云。") PersistSessionMemory()

最小实现

作为开发者,其实最常做的应该就是mcp server的开发,用来丰富ai可以实现的能力。

怎么写msp server已经有很多大佬做过分享了,但都是基于大佬们现有的项目。下面我们以.NET 8平台的api做一个最小实现。

使用的依赖

官方依赖包ModelContextProtocol.AspNetCore,需要留意是preview版本,截止到本文时间,最新版为0.7.0 preview。

  1. 创建McpTool.cs
c# 复制代码
    [McpServerToolType]
    public class McpTool
    {
        [McpServerTool(Name = "getNow"), Description("Gets the current server time in ISO-8601.")]
        public static string Now() => DateTimeOffset.UtcNow.ToString("O");
        [McpServerTool(Name = "cityWeather"), Description("Weather using a configurable set of descriptors.")]
        public static string GetCityWeather(
            [Description("City name")] string city)
        {
            var choices = Environment.GetEnvironmentVariable("WEATHER_CHOICES") ?? "sunny,rainy,stormy";
            var pick = choices.Split(',')[Random.Shared.Next(0, choices.Split(',').Length)];
            return $"The weather in {city} is {pick}.";
        }
    }
  1. 更改Program.cs
c# 复制代码
    builder.Services.AddMcpServer(
        options =>
        {
            options.InitializationTimeout = TimeSpan.FromSeconds(30);
        })
        .WithHttpTransport().WithToolsFromAssembly(typeof(McpTool).Assembly).WithPromptsFromAssembly();
    //其他代码
    var app = builder.Build();
    //其他代码
    app.MapMcp();

可以了。是不是很简单,如果要注入依赖,在参数的地方注入就好了。目前官方包不仅支持工具,还支持prompt。具体可以看官方链接

一点废话

其实目前的主流ai应用热点,无论是rag、mcp还是skill,全部都是让硅基模仿碳基。或者说因为使用者是碳基,所以越近似碳基越容易找到应用方向,越容易被重视从而获得资金支持。

但是就像中文歌曲很难在保留原有风味的同时体现日系的细腻,很难体现西语的奔放一样,就算同是碳基,基于人脑的不同语言也有迥异的风格与表达效率;换个比喻,就算使用同样的语言,同样的环境,花一天敲代码达到的社会学效应,恐怕与别人花一小时pmp达到的也是迥异的,这取决于不同人的生存策略导致的不同的表达风格。

综上,我认为目前的道路在ai应用场景探索上是对的,但是我相信在ai未来的发展中,必然会有类似向量数据库这样的更适合硅基生命的infra或者技术的涌现。

保持空杯心态,持续学习吧,朋友们。

相关推荐
云烟成雨TD12 小时前
LlamaIndex 系列【31】检索增强策略:命名实体识别(NER)
ai·agent·rag·llamaindex
slacker-kian12 小时前
本地大模型 + 自建 MCP Server + SAP OData:让 LLM 代理 SAP 业务操作
大模型·llm·sap·agent·mcp·odata
2601_9548118213 小时前
AI科学实验室自律系统:闭环自动化与智能实验设计技术路径 — 自动化技术
ai
2601_9548118214 小时前
AI智能教育多智能体协同:备教辅全链路架构实现 — 技术架构
ai
Java后端的Ai之路14 小时前
Python进阶探索17 - Python中的深拷贝与浅拷贝
人工智能·python·ai·浅拷贝·深拷贝
龙智DevSecOps解决方案15 小时前
AI驱动的知识管理指南:基于Atlassian Intelligence、Rovo、Teamwork Collection打造团队知识引擎
ai·atlassian·需求管理·团队协作·知识管理
李燚15 小时前
Agent 要用 API key,但明文一次都不能进模型——Secret Runtime 落地实录(第110篇)
ai·agent·credential·secret·eino·deepflux·secret runtime
奇牙coding15 小时前
gpt-5.6-luna 接入踩坑实录:model_not_found 排查与 reasoning_summary 字段使用说明
ai
霸道流氓气质15 小时前
Prompt 工程最佳实践与企业级模板库建设
ai
海带紫菜菠萝汤16 小时前
本周 AI 观察:嘴上喊着降速,手上全踩油门
人工智能·深度学习·ai·开源·大模型