新闻详情

新闻详情

首页 / 资讯中心 / 详情

从 MCP 到 Agent Skills,TaoToken 视角下 AI 就绪的 .NET 10 正当时

发布时间:2026/10/1 19:59:53来源:尧图网络
从 MCP 到 Agent Skills,TaoToken 视角下 AI 就绪的 .NET 10 正当时
1. 为什么 .NET 10 让 MCP 与 Agent Skills 突然变得“顺手”了如果你最近在折腾 MCPModel Context Protocol服务端或者刚接触 Agent Skills 这套技能封装规范大概率会遇到一个很现实的尴尬写个能跑的小工具不难难的是让它在本地快速落地、能被 Agent 稳定调用、还能一键发布成不依赖运行时的可执行文件。过去用 Python 写脚本依赖散落在 requirements.txtAgent 读代码得同时翻好几个文件用 Node 写又得先确认目标机器有没有装对应版本的运行时。而 .NET 10 引入的 File-Based Apps 和 Native AOT恰好把这三个痛点一次性压平了。先说清楚这两个东西是什么、能做什么、适合谁。File-Based Apps是 .NET 10 的新特性允许你把单个.cs文件当成完整应用直接dotnet run依赖用#:package内联声明不需要.csproj、不需要.sln。Native AOT则是提前编译把程序直接编成机器码启动时间从 JIT 的几十毫秒压到十几毫秒甚至更低而且发布出来是单个可执行文件目标机器不用装 .NET 运行时。这两者叠加正好命中 MCP 服务端和 Agent Skills 脚本的核心诉求自包含、可理解、启动快、跨平台。适合谁三类人最该关注。第一类是正在给 AI Agent 写工具脚本的开发者尤其是那些希望脚本能被 Agent 直接读懂、少踩依赖坑的人第二类是做 MCP 服务端、需要本地快速验证连通性的工程师第三类是想把团队内部流程封装成可复用 Skill 的 .NET 开发者。我试过用传统 csproj 写 MCP 工具光是项目结构就让 Agent 在读取时多绕好几圈换成 File-Based App 之后一个文件把依赖、逻辑、发布配置全说清楚了。这一篇不会停在概念层面。我会带你从零把一个 MCP 服务端配置片段、一个 Agent Skills 声明文件、以及dotnet run的验证步骤全部跑通最后再给出 Native AOT 发布后的连通性检查动作。中间涉及 TaoToken 的统一 Key/API 通道我会把 Base URL、Key、Model ID 三件套写全方便你直接复制。整个流程围绕 .NET 10 的 File-Based Apps 展开你不需要预先建好任何项目。2. TaoToken 前置统一 Key 与 API 通道怎么准备在动手写 MCP 服务端之前得先把模型调用这条链路打通。MCP 服务端本身负责暴露工具能力但工具背后如果要调用大模型就需要一个稳定的 API 通道。TaoToken 在这里扮演的角色是统一入口你拿到一个 Key配好 Base URL就能在 MCP 服务端、Agent Skills 脚本、以及本地验证脚本里复用同一套凭证不用每个工具单独配一遍。先明确三件套这是后面所有配置的基础配置项值说明Base URLhttps://taotoken.net/apiAPI 请求根地址注意不带 UTMAPI Key在控制台创建形如sk-开头的一串字符Model ID按需选择例如对话类、编码类模型 IDKey 的获取入口在控制台的 API Keys 页面创建后只显示一次记得立刻复制保存。如果你还没建过 Key可以走这个路径先访问官网了解整体能力再进控制台创建。官网地址是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content控制台入口是https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI Keys 页面是https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。拿到 Key 之后建议先做一次最小连通性验证别急着写 MCP 服务端。用 curl 打一发最朴素的请求确认 Key 和 Base URL 没问题curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -d { model: your-model-id, messages: [{role: user, content: ping}] }如果返回里能看到choices数组说明通道是通的。这一步很关键因为后面 MCP 服务端报错时你得能区分是通道问题还是服务端代码问题。把 Key 写进环境变量别硬编码在脚本里export TAOTOKEN_API_KEYsk-你的key export TAOTOKEN_BASE_URLhttps://taotoken.net/api环境变量在 Windows 上用setx或 PowerShell 的$env:设置Linux/macOS 上写进~/.bashrc或~/.zshrc。这样 MCP 服务端和 Agent Skills 脚本都能读到同一份配置切换环境时只改一处。有一点要提醒Base URL 用https://taotoken.net/api不要在后面拼多余的路径具体端点由 SDK 或你的请求代码补全。很多 401 报错其实是 Base URL 多写了或漏写了/v1导致的后面排障章节会细说。3. 可复制配置MCP 服务端与 Agent Skills 声明文件这一节是整篇的核心我会给出两个可直接复制的配置一个是 MCP 服务端的 File-Based App 脚本一个是 Agent Skills 的SKILL.md声明文件。两者都围绕 .NET 10 的 File-Based Apps 写法依赖内联声明不需要 csproj。先看 MCP 服务端的 File-Based App。新建一个文件mcp-server.cs内容如下#!/usr/bin/env dotnet #:package ModelContextProtocol0.1.0-preview #:package Microsoft.Extensions.Hosting10.0.0 #:property PublishAottrue #:property InvariantGlobalizationtrue 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 EchoTool { [McpServerTool, Description(回显输入文本用于连通性验证)] public static string Echo( [Description(要回显的文本)] string message) { return $echo: {message}; } }这里有几个关键点。#:package声明了两个 NuGet 包版本号写明确避免 Agent 或 CI 拉到不兼容的版本。#:property PublishAottrue是为后面 Native AOT 发布做准备InvariantGlobalizationtrue能减小发布体积。WithStdioServerTransport()表示用标准输入输出做传输这是本地 MCP 服务端最常用的方式Agent 通过 stdio 跟它通信。再看 Agent Skills 的声明文件。按规范一个 Skill 就是一个包含SKILL.md的文件夹name必须和目录名一致。建目录mcp-echo-skill/在里面写SKILL.md--- name: mcp-echo-skill description: 通过本地 MCP 服务端回显文本用于验证 MCP 通道连通性与 Agent 工具调用链路。Use when you need to test MCP server connectivity or verify tool invocation. license: MIT metadata: author: your-org version: 1.0.0 --- # MCP Echo Skill 通过本地 MCP 服务端回显输入文本验证 Agent 与 MCP 工具之间的调用链路。 ## 使用场景 - 验证 MCP 服务端是否正常启动 - 测试 Agent 能否发现并调用 MCP 工具 - 排查 stdio 传输通道问题 ## 使用方法 启动 MCP 服务端 bash dotnet run mcp-server.csAgent 调用Echo工具传入message参数返回echo: {message}。依赖项ModelContextProtocol 0.1.0-previewMicrosoft.Extensions.Hosting 10.0.0注意 description 里塞了关键词MCP、connectivity、tool invocation这些是给 Agent 做任务匹配用的。name 是 mcp-echo-skill目录名也必须是这个不能有下划线或大写。 如果你用的是 Claude Code 这类支持 MCP 配置文件的工具还需要一份 MCP 客户端配置。以 Claude Code 的配置为例在项目根目录的 .mcp.json 里写 json { mcpServers: { echo-server: { command: dotnet, args: [run, mcp-server.cs], env: { TAOTOKEN_API_KEY: ${TAOTOKEN_API_KEY}, TAOTOKEN_BASE_URL: https://taotoken.net/api } } } }这份配置把 Base URL、Key、以及启动命令都写全了。command是dotnetargs是run加脚本路径env里透传环境变量。这样 Agent 启动时就会拉起这个 MCP 服务端并通过 stdio 跟它通信。三件套在这里的体现Base URL 是https://taotoken.net/apiKey 通过环境变量注入Model ID 在需要调用模型时由具体工具指定。如果你后续要在这个 MCP 服务端里加一个真正调用大模型的工具就在EchoTool旁边再加一个类用HttpClient打 TaoToken 的 API把三件套用上。4. 验证请求dotnet run 跑通与成功结果确认配置写完了接下来是验证。这一步的目标是确认 MCP 服务端能启动、工具能被发现、调用能返回预期结果。整个过程分三个动作直接运行、手动发请求、Agent 集成验证。第一个动作直接运行 File-Based App。在mcp-server.cs所在目录执行dotnet run mcp-server.cs第一次运行会还原 NuGet 包可能需要几十秒。如果看到进程挂起、没有报错退出说明 stdio 服务端已经起来了它在等标准输入。这时候你可以按 CtrlC 退出或者保持运行另开一个终端做下一步。第二个动作手动发一个 MCP 请求验证工具列表。MCP 用 JSON-RPC 2.0 格式通过 stdio 传输。你可以用一段简单的 shell 把请求喂进去echo {jsonrpc:2.0,id:1,method:tools/list,params:{}} | dotnet run mcp-server.cs预期返回里应该包含Echo工具的定义类似{ jsonrpc: 2.0, id: 1, result: { tools: [ { name: Echo, description: 回显输入文本用于连通性验证, inputSchema: { type: object, properties: { message: { type: string } } } } ] } }看到tools数组里有Echo说明服务端注册工具成功。接着验证调用echo {jsonrpc:2.0,id:2,method:tools/call,params:{name:Echo,arguments:{message:hello}}} | dotnet run mcp-server.cs预期返回result.content里包含echo: hello。到这一步MCP 服务端的核心链路就通了。第三个动作Agent 集成验证。如果你用 Claude Code把前面那份.mcp.json放好重启会话然后问它“帮我用 echo-server 回显一下 test”。Agent 应该能发现Echo工具并调用返回echo: test。如果 Agent 没发现工具先检查.mcp.json路径和command是否正确再确认dotnet在 PATH 里。验证通过后可以顺手把 Agent Skills 也测一下。把mcp-echo-skill/放到 Agent 的技能目录不同工具路径不同Claude Code 常见是.claude/skills/重启后问“用 mcp-echo-skill 验证一下 MCP 通道”。Agent 会读取SKILL.md按里面的说明执行dotnet run mcp-server.cs再调用工具。这里有个细节dotnet run每次都会做一次构建检查虽然 File-Based App 已经很快但如果你要频繁调用建议先dotnet build一次或者直接用 Native AOT 发布后的可执行文件启动会快一个数量级。下一节会讲发布和连通性检查。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节把几个高频报错拆开讲每个都给出真实错误形态和定位思路。这些坑我在不同项目里都踩过按顺序排查能省不少时间。401 Unauthorized。典型返回是{error:{message:Invalid API key,type:invalid_request_error}}。原因通常有三个Key 没设置、Key 拼错、或者 Base URL 不对导致请求打到了错误端点。先确认环境变量echo $TAOTOKEN_API_KEY如果为空说明没导出。如果非空用 curl 直接打一发验证 Key 本身有效。Base URL 要确认是https://taotoken.net/api不要多写/v1或少写。很多 SDK 会自动补/v1/chat/completions你手动拼反而会变成/api/v1/v1/...。local proxy failed。这个报错通常出现在 MCP 客户端启动服务端时形态类似MCP error -32000: Connection closed或local proxy failed to start。根因是客户端拉不起你的command。检查.mcp.json里的command是不是dotnetargs路径是不是相对路径导致找不到文件。建议把脚本路径写成绝对路径或者确认工作目录正确。另一个常见原因是dotnet不在客户端的 PATH 里尤其是 GUI 启动的客户端环境变量可能和终端不一致。reading choices 相关报错。形态类似Cannot read properties of undefined (reading choices)或reading choices failed。这说明请求发出去了但返回体里没有choices字段。原因可能是Model ID 写错服务端返回了错误对象而不是正常响应或者请求体格式不对比如messages为空。先打印完整返回体别只看错误信息。用 curl 复现一次确认返回结构。OAuth 相关报错。形态类似OAuth token exchange failed或invalid_grant。如果你用的是需要 OAuth 的客户端比如某些 Claude Code 场景要确认认证方式选对了。TaoToken 的 API Key 走的是 Bearer Token不是 OAuth 流程。如果你在客户端里误选了 OAuth 登录就会走到错误的认证分支。检查客户端配置里认证类型是不是 API Key而不是 OAuth。再补一个 Codex 场景的auth.json。如果你用 Codex 类工具认证信息可能写在~/.codex/auth.json里格式大致是{ OPENAI_API_KEY: sk-你的key, OPENAI_BASE_URL: https://taotoken.net/api }这里同样要把 Base URL 和 Key 写全Model ID 在具体请求里指定。三件套缺一不可少一个就会在调用时报错。排查顺序建议先 curl 验证通道再验证 MCP 服务端单独运行最后验证 Agent 集成。这样能把问题范围一层层缩小不会一上来就怀疑 Agent 配置。6. Native AOT 发布与连通性检查以及后续怎么走前面都是开发态验证这一节讲生产态。Native AOT 发布后你会得到一个不依赖 .NET 运行时的单文件可执行程序启动快、体积可控适合放进 Agent 的技能目录或 CI 流程。发布命令dotnet publish mcp-server.cs -r linux-x64 -c ReleaseWindows 上把-r换成win-x64macOS 用osx-x64或osx-arm64。发布产物在bin/Release/net10.0/rid/publish/下文件名类似mcp-server。因为脚本里已经写了#:property PublishAottrue发布时会走 AOT 编译。第一次编译可能慢一些因为要做静态分析。发布完成后做连通性检查。第一步直接运行可执行文件确认能起来./bin/Release/net10.0/linux-x64/publish/mcp-server第二步用同样的 JSON-RPC 请求验证工具列表echo {jsonrpc:2.0,id:1,method:tools/list,params:{}} | ./bin/Release/net10.0/linux-x64/publish/mcp-server第三步把 MCP 客户端配置里的command从dotnet改成发布后的可执行文件绝对路径args清空。这样 Agent 启动时直接拉起原生程序省掉dotnet run的构建开销。{ mcpServers: { echo-server: { command: /abs/path/to/publish/mcp-server, args: [], env: { TAOTOKEN_API_KEY: ${TAOTOKEN_API_KEY}, TAOTOKEN_BASE_URL: https://taotoken.net/api } } } }AOT 发布有几个坑要注意。反射相关的代码在 AOT 下可能被裁剪掉如果你的 MCP 工具用了反射做序列化要加[DynamicallyAccessedMembers]或改用源生成器。InvariantGlobalizationtrue会去掉全球化数据如果你的工具需要处理多语言文本去掉这行。发布体积方面一个简单的 MCP 服务端大概几 MB 到十几 MB比带运行时的发布小很多。后续怎么走如果你只是本地验证开发态dotnet run就够了。如果要长期跑、频繁调用AOT 发布后的可执行文件更合适。如果你要把这套东西做成团队共享的 Agent Skills把SKILL.md和脚本一起放进版本控制在 README 里写清楚依赖和发布命令。需要长期编码或 Agent 场景的可以了解 Coding Plan入口是https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。想直接验证模型对话的走模型对话入口https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI Keys 在https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。Claude Code 相关配置参考https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。最后留一个实用技巧把 MCP 服务端的启动日志写到 stderr别写 stdout。因为 stdio 传输下 stdout 是给 JSON-RPC 用的你往 stdout 打日志会污染协议导致 Agent 解析失败。这个坑我在第一次写 MCP 服务端时就踩了排查了半天才发现是日志输出位置不对。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Coze扣子部署openclaw小龙虾 保姆级小白版本教程:从零到飞书机器人 2026/10/1 20:46:52

Coze扣子部署openclaw小龙虾 保姆级小白版本教程:从零到飞书机器人

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
实测 DeepSeek Harness + TitanIDE:Agent 编程从 Workspace Write 到可复现工程 2026/10/1 20:46:52

实测 DeepSeek Harness + TitanIDE:Agent 编程从 Workspace Write 到可复现工程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
还在手动处理文件?DeepSeek+MCP 让 AI 帮你自动搞定:Cherry Studio 配置 TaoToken 统一 API 通道实战 2026/10/1 20:46:52

还在手动处理文件?DeepSeek+MCP 让 AI 帮你自动搞定:Cherry Studio 配置 TaoToken 统一 API 通道实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
DeepSeek Harness Desktop 安全完全指南:沙箱隔离、双鉴权闸门与本地代码执行的风险边界 2026/10/1 20:46:52

DeepSeek Harness Desktop 安全完全指南:沙箱隔离、双鉴权闸门与本地代码执行的风险边界

DeepSeek Harness Desktop 安全完全指南:沙箱隔离、双鉴权闸门与本地代码执行的风险边界 【免费下载链接】deepseek-harness-desktop DeepSeek Harness Tauri 桌面版 | Only 5mb installer, zero environment setup, preset plugins, Windows / macOS / Linux. 项…

阅读更多 →
CentOS 7图形界面本质:四层服务栈与命令行到GUI的系统级切换 2026/10/1 20:46:52

CentOS 7图形界面本质:四层服务栈与命令行到GUI的系统级切换

1. 这不是“装个桌面”那么简单:CentOS 7 图形界面的本质是系统角色的切换你搜“CentOS 7 图形界面安装”,十有八九是刚配好一台新服务器,或者在 VMware 里跑起了最小化安装的镜像,结果发现——黑乎乎的命令行,连个鼠标…

阅读更多 →
安全审计做完了,为什么数据异动还是查不清楚?遇到泄密排查先看这几个环节 2026/10/1 20:46:46

安全审计做完了,为什么数据异动还是查不清楚?遇到泄密排查先看这几个环节

很多企业的信息安全负责人或者运维团队,大概都经历过这种让人血压飙升的场景: 某天业务部门急匆匆跑来反馈,说疑似有核心研发图纸或客户报价单流到了外面;或者合规审计流程走完了,导出一看,系统日志密密麻麻…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉