
1. 为什么 .NET 开发者需要 HTTP 方式的 MCP Server如果你最近在折腾 AI 编程工具大概率已经听过 MCPModel Context Protocol这个词。简单说它是一套让 AI 客户端比如 Trae、Claude Desktop、Cline去调用外部工具和数据源的协议。你写一个 MCP Server把公司内部的订单查询、日志检索、数据库只读接口包装成工具AI 就能在对话里直接调用。问题来了网上能搜到的教程九成都是本地 stdio 模式。也就是 MCP Server 和客户端跑在同一台机器上通过标准输入输出通信。个人玩没问题但放到企业里就尴尬了——工具服务要部署在内网服务器上多个同事共用总不能每个人本地都跑一份吧。这时候就需要 HTTP 传输方式让 Trae 通过一个 URL 远程调用你部署好的 .NET MCP Server。我试过在搜索里翻 HTTP MCP 的中文资料对 .NET 开发者来说确实少得可怜官方文档也写得比较克制。这篇就把我踩过的坑和最终跑通的配置完整写出来面向第一次接触 MCP 的 .NET 开发者目标是让你从零跑通「Trae → HTTP → .NET MCP Server」这条链路。适合谁看有 .NET 8 基础、想把自己的服务暴露给 AI 工具调用的后端同学或者你已经会用 stdio 模式想升级成团队共享的 HTTP 服务。核心检索词就是 Trae 通过 http 调用 .net 开发的 mcp server下面所有步骤都围绕它展开。先说清楚整体结构。你的 .NET 项目会变成一个 Web 应用监听某个端口比如 5229暴露一个 MCP 端点。Trae 侧只需要在配置文件里填一个 URL 和传输类型就能连上。中间不涉及任何复杂的网关就是标准的 HTTP 请求。理解这一点后面的配置就不会觉得神秘。我踩的第一个坑是以为要自己写 HTTP 路由和 JSON-RPC 解析。实际上ModelContextProtocol.AspNetCore这个包已经把传输层封装好了你只需要WithHttpTransport()加MapMcp()两行剩下的交给框架。这也是为什么我建议直接用官方包别自己造轮子。2. 前置准备TaoToken 与 .NET 环境怎么配在动手写代码之前先把两件事准备好一个是模型调用凭证一个是本地 .NET 运行环境。很多人卡在第一步是因为不知道 AI 客户端背后需要一个能访问模型的 API 入口。我目前用的是 TaoToken 作为模型接入层它提供 OpenAI 兼容的接口Trae 这类工具配置起来比较顺。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。注意 API 地址后面不加任何 UTM 参数直接用它就行。你需要先去控制台创建一个 API Key。打开 https://taotoken.net/console 登录后在 API Keys 页面新建一个复制出来保存好。这个 Key 后面要填到 Trae 的配置里。如果你还没决定用哪个模型可以先去模型对话页面 https://taotoken.net/models 试一下确认能正常出结果再往下走。.NET 环境这边确认你装了 .NET 8 SDK。命令行执行dotnet --version输出应该是8.0.x开头。如果没有去微软官网下载 .NET 8 SDK 装上。我建议用 8.0 而不是更早的版本因为ModelContextProtocol.AspNetCore这个包对框架版本有要求用 6.0 可能会遇到还原失败。另外准备一个测试工具MCP Inspector。它是官方提供的调试面板能让你在不接 Trae 的情况下先验证 Server 是否正常。需要 Node.js 环境装好后执行npx -y modelcontextprotocol/inspector这条命令会启动一个本地 Web 界面默认在 6274 端口。等会儿我们会用它来连你的 .NET Server确认工具列表能拉出来。关于 TaoToken 的 Coding Plan如果你打算长期用 AI 辅助写代码可以了解一下 https://taotoken.net/coding-plan 它针对编码场景做了额度优化。不过这篇的重点是 MCP 链路模型接入只是前置条件配好 Key 就行。这里提醒一个容易忽略的点Trae 调用 MCP Server 和调用模型是两条独立的链路。MCP Server 负责提供工具模型负责决策调用哪个工具。所以你的 TaoToken Key 是给 Trae 调模型用的MCP Server 本身不需要这个 Key。两者别搞混。3. 可复制配置.NET 侧暴露 HTTP MCP 端点这一节是核心直接给你能跑的工程文件和代码。新建一个 Web 项目或者在你现有项目里改都行。先看工程文件McpHttpServer.csprojProject SdkMicrosoft.NET.Sdk.Web PropertyGroup TargetFrameworknet8.0/TargetFramework Nullableenable/Nullable ImplicitUsingsenable/ImplicitUsings /PropertyGroup ItemGroup PackageReference IncludeModelContextProtocol.AspNetCore Version0.3.0-preview.4 / /ItemGroup /Project注意 SDK 是Microsoft.NET.Sdk.Web不是普通的Microsoft.NET.Sdk因为我们要用 ASP.NET Core 的宿主。包版本写0.3.0-preview.4这是目前能正常还原的版本别随手改成别的。然后是Program.csusing ModelContextProtocol.Server; using System.ComponentModel; var builder WebApplication.CreateBuilder(args); builder.Services.AddMcpServer() .WithHttpTransport() .WithToolsFromAssembly(); var app builder.Build(); app.MapMcp(); app.Run(http://localhost:5229); [McpServerToolType] public static class EchoTool { [McpServerTool, Description(Echoes the message back to the client.)] public static string Echo(string message) $hello {message}; }逐行解释一下关键点。AddMcpServer()注册 MCP 服务WithHttpTransport()指定用 HTTP 传输而不是 stdioWithToolsFromAssembly()会自动扫描当前程序集里所有带[McpServerToolType]的类把里面的[McpServerTool]方法注册成工具。app.MapMcp()是映射 MCP 端点默认路径是/。也就是说你的 Server 地址就是http://localhost:5229Trae 直接填这个。app.Run(http://localhost:5229)指定监听端口。如果你要部署到服务器让同事访问把localhost换成0.0.0.0这样外部才能连进来。本地测试先用 localhost。EchoTool是一个示例工具Echo方法接收一个字符串参数返回hello加原消息。这个工具用来验证链路是否通跑通后你可以照着这个模式加自己的业务工具。运行dotnet run看到控制台输出监听 5229 端口就说明起来了。如果报包还原失败检查 NuGet 源是否正常或者手动执行dotnet restore。这里有个坑WithToolsFromAssembly()默认扫描的是入口程序集。如果你的工具类写在别的类库里需要用WithToolsFromAssembly(typeof(SomeType).Assembly)指定。我第一次就是把工具放在单独项目里结果 Trae 那边一个工具都看不到排查了半天。4. 验证请求用 curl 和 Inspector 确认连通Server 起来之后别急着配 Trae先用工具确认它真的能响应 MCP 协议。这一步能帮你把问题定位在 Server 侧还是客户端侧。先试 curl。MCP over HTTP 用的是 JSON-RPC 2.0初始化请求长这样curl -X POST http://localhost:5229 \ -H Content-Type: application/json \ -H Accept: application/json, text/event-stream \ -d { jsonrpc: 2.0, id: 1, method: initialize, params: { protocolVersion: 2024-11-05, capabilities: {}, clientInfo: {name: curl-test, version: 1.0} } }如果返回里包含serverInfo和capabilities说明 Server 正常。注意Accept头必须同时包含application/json和text/event-stream因为 Streamable HTTP 传输可能用 SSE 返回。少了text/event-stream会报 406。接着拉工具列表curl -X POST http://localhost:5229 \ -H Content-Type: application/json \ -H Accept: application/json, text/event-stream \ -d { jsonrpc: 2.0, id: 2, method: tools/list, params: {} }返回里应该能看到Echo工具带描述和参数 schema。看到这个就说明工具注册成功了。再用 MCP Inspector 做可视化验证。执行npx -y modelcontextprotocol/inspector浏览器打开它提示的地址在传输方式里选Streamable HTTPURL 填http://localhost:5229点连接。左侧会列出所有工具点Echo可以填参数直接调用右侧看到返回hello xxx就完全通了。Inspector 的好处是能直观看到请求和响应的原始报文排查参数格式问题特别方便。我遇到过一次工具参数类型不对Inspector 里直接显示 schema 校验失败比看日志快多了。两个工具都验证通过后Server 侧就没问题了。接下来配 Trae。5. 常见报错排查401、local proxy failed、OAuth这一节把我踩过的报错集中列一下你遇到时可以直接对照。报错一401 Unauthorized如果你在 Trae 里连 MCP Server 时看到 401先确认是不是把 TaoToken 的 Key 填到了 MCP 配置里。MCP Server 本身如果没开鉴权是不需要 Key 的。401 更可能出现在 Trae 调用模型那一步检查 API Key 是否正确、有没有多余空格。TaoToken 的 Key 在 https://taotoken.net/api-keys 管理重新复制一次试试。报错二local proxy failed这个报错通常出现在 Trae 尝试连接本地地址时。原因可能是端口没监听、防火墙拦截或者地址写成了127.0.0.1但 Server 只绑了localhost。解决办法确认dotnet run还在运行用curl能通然后 Trae 配置里 URL 写http://localhost:5229。如果部署在远程服务器写服务器 IP并确认app.Run(http://0.0.0.0:5229)。报错三reading choices 相关错误这个一般不是 MCP 的问题而是模型返回格式异常。检查 Trae 里配置的模型 ID 是否正确TaoToken 支持的模型列表在 https://taotoken.net/models 可以查。模型 ID 写错会导致返回体里没有choices字段。报错四OAuth 相关提示有些 MCP 客户端会尝试走 OAuth 流程。如果你的 Server 没配鉴权在 Trae 里选择streamable-http类型并直接填 URL 即可不要选需要 OAuth 的模式。配置片段参考{ mcpServers: { dotnet-http-server: { type: streamable-http, url: http://localhost:5229 } } }注意type必须是streamable-http这是 Trae 识别 HTTP 传输的关键。写成http或sse都可能连不上。报错五工具列表为空Server 通了但 Trae 里看不到工具八成是WithToolsFromAssembly()没扫到你的工具类。确认工具类有[McpServerToolType]方法有[McpServerTool]并且类在入口程序集里。如果不在用WithToolsFromAssembly(typeof(YourTool).Assembly)显式指定。排查顺序建议先 curl 通再 Inspector 通最后配 Trae。这样每层都能独立验证不会一锅乱。6. 把链路用起来Trae 接入与后续扩展Server 和验证都通了最后一步是在 Trae 里正式接入。打开 Trae 的 MCP 配置一般在设置里的 MCP 或工具面板添加一个 Server类型选streamable-httpURL 填你的地址。保存后 Trae 会尝试连接连接成功会在工具列表里显示Echo。这时候你在对话里说「调用 Echo 工具参数是 world」模型就会决策调用这个工具你会在对话里看到工具调用和返回结果。整条链路就跑通了。后续扩展就是往EchoTool旁边加更多工具类。比如加一个查询订单的工具[McpServerToolType] public static class OrderTool { [McpServerTool, Description(根据订单号查询订单状态)] public static string GetOrderStatus(string orderId) { return $订单 {orderId} 状态已发货; } }重新dotnet runTrae 重新连接后就能看到新工具。真实业务里把这里换成查数据库、调内部 API 都行注意别把生产库直连暴露出去做好权限控制。部署到服务器时把app.Run的地址改成http://0.0.0.0:5229然后用 systemd 或 Docker 托管进程。团队同事的 Trae 里填服务器 IP 就能共用同一套工具。如果你还在选模型接入方案TaoToken 的接入文档在 https://taotoken.net/doc 有详细说明Coding Plan 在 https://taotoken.net/coding-plan 适合长期编码场景。MCP 链路配好后模型侧用哪个入口按自己需求选就行。最后留一个实用技巧Trae 里配置模型时如果下载依赖慢可以让它帮你把包源换成国内镜像比如直接说「把 NuGet 源设置为华为云镜像」还原速度会明显提升。这个和 MCP 无关但新手配环境时能省不少时间。