GitHub Copilot Custom Chat Mode 实战:用 MCP 接入 TaoToken 分析亚洲杯男篮球员数据
1. 为什么要在 VS Code 里给 Copilot 造一个「亚洲杯球员分析」专属模式GitHub Copilot 内置的 Ask、Edit、Agent 三种模式已经能覆盖大部分编码场景但当你反复问同一类问题——比如「中国队这次亚洲杯的平均身高是多少」「哪支球队平均年龄最大」——每次都要重新贴数据、重新解释字段含义多轮对话里上下文越堆越长回答反而越来越飘。Custom Chat Mode 就是解决这个痛点的它把一段固定的系统指令、一组允许调用的工具、以及一个明确的角色定位固化成一个.chatmode.md文件之后你在下拉框里选中它Copilot 就自动带着这套规则开始工作。我这次做的场景很具体2025 亚洲杯男篮已经打到四强澳大利亚、新西兰也参赛我想在 VS Code 里直接问球员数据而不是切到浏览器查表格。做法是两条线并行——一条是 Custom Chat Mode 定义「我是谁、我该怎么答」另一条是 MCPModel Context Protocol把模型请求和本地数据接口接起来同时把模型通道统一走 TaoToken 的 Key/API这样不用在多个供应商之间来回换配置。适合谁看已经在用 VS Code GitHub Copilot、想给 Copilot 加「领域专精」能力的开发者手头有 .NET 项目、想用 MCP C# SDK 暴露数据库查询能力的后端同学以及想把模型调用收敛到统一入口、不想每个工具都单独配一遍 Key 的人。下面从零开始配置、代码、验证、排错都给全。2. TaoToken 前置准备统一 Key 与 API 通道怎么接在动手写 chatmode 之前先把模型通道这件事定下来。GitHub Copilot 本身支持添加额外模型但如果你希望 MCP 服务端、以及后续其他工具都走同一个入口用 TaoToken 会比较省心——一个 Key 覆盖多种模型Base URL 固定换模型只改 Model ID。2.1 拿到 API Key 和 Base URL打开 TaoToken 控制台在 API Keys 页面创建一个新 Key。建议按用途命名比如vscode-copilot-mcp方便以后区分。创建后立刻复制保存页面刷新后就不再完整显示。控制台入口https://taotoken.net/consoleAPI Keys 页面https://taotoken.net/api-keys接入文档https://taotoken.net/docBase URL 统一用https://taotoken.net/api注意这个地址后面不要加 UTM 参数直接作为 OpenAI 兼容接口的根地址使用。2.2 确认可用模型在模型对话页面可以先试一下目标模型是否可用比如claude-sonnet-4-5或gpt-4o这类。试的时候把 Base URL 填https://taotoken.net/apiKey 填刚创建的发一句「你好」确认返回正常。模型对话入口https://taotoken.net/chat2.3 三件套先记牢不管后面是配 MCP 服务端还是配 Copilot 的模型通道永远就这三样项目值Base URLhttps://taotoken.net/apiAPI Key控制台创建的sk-...Model ID如claude-sonnet-4-5、gpt-4o这三件套在后面的settings.json、MCP 服务端环境变量、以及 chatmode 的 tools 声明里都会出现先记牢配的时候不容易漏。2.4 为什么不让 MCP 直连生产库这里要强调一个安全边界MCP 服务端暴露给模型的工具应该是只读查询而且最好走独立的只读账号或视图。我这次的数据是亚洲杯球员信息存在 SQL Server 里MCP 服务端只提供「按球队查球员」「按球队算平均年龄身高」这类查询方法不提供任何写操作。生产库直连给模型是危险动作别做。3. 可复制配置chatmode 文件 MCP 服务端 .NET 数据接口这一节是全文的核心三块配置都给可直接复制的片段。3.1 创建 Custom Chat Mode 文件在 VS Code 里打开 GitHub Copilot 面板点下方的 mode 下拉框选Configure Modes...再点Create new custom chat mode file选择.github\chatmodes目录输入文件名亚洲杯球员分析.chatmode.md回车生成。生成后把内容替换成下面这份。注意tools里既列了内置工具也列了后面要接的 MCP 工具集--- description: 分析2025亚洲杯男篮各国球员信息包括名单、平均年龄、平均身高、CBA现役球员等 tools: - codebase - search - my-mcp-server --- 你是亚洲杯男篮数据分析助手。你的职责是基于 MCP 工具返回的真实数据回答球员相关问题。 规则 1. 所有球员数据必须来自 my-mcp-server 的工具调用结果不得凭记忆编造。 2. 回答涉及统计时先调用工具获取数据再给出结论。 3. 涉及排名时明确说明排序依据如按平均年龄从大到小。 4. 如果工具返回为空直接说明「未查询到该队数据」不要猜测。 5. 回答用中文统计数字保留一位小数。description决定这个模式在下拉框里显示什么tools决定它能调用哪些能力正文部分是 instructions也就是系统提示词。这三块就是 chatmode 的全部结构。3.2 MCP 服务端项目结构MCP 服务端用 .NET 9 ModelContextProtocol.AspNetCore数据访问用 EF Core 9。项目文件里加包引用PackageReference IncludeModelContextProtocol.AspNetCore Version0.1.0-preview.7 / PackageReference IncludeMicrosoft.EntityFrameworkCore.SqlServer Version9.0.0 /目录结构大致这样AsiaCupMcpServer/ ├── Program.cs ├── Data/ │ ├── AsiaCupContext.cs │ └── Player.cs ├── Tools/ │ └── PlayerTools.cs └── appsettings.json3.3 数据模型与 DbContextpublic class Player { public int Id { get; set; } public string Team { get; set; } ; public string Name { get; set; } ; public int Age { get; set; } public double HeightCm { get; set; } public string Position { get; set; } ; public bool IsCbaActive { get; set; } } public class AsiaCupContext : DbContext { public AsiaCupContext(DbContextOptionsAsiaCupContext options) : base(options) { } public DbSetPlayer Players SetPlayer(); }3.4 MCP 工具方法工具方法用[McpServerTool]标注模型会根据 description 决定调哪个public class PlayerTools { private readonly AsiaCupContext _db; public PlayerTools(AsiaCupContext db) _db db; [McpServerTool, Description(查询指定球队的球员名单)] public async TaskListPlayer GetPlayersByTeam(string team) await _db.Players.Where(p p.Team team).ToListAsync(); [McpServerTool, Description(查询指定球队的平均年龄和平均身高)] public async Taskobject GetTeamStats(string team) { var q _db.Players.Where(p p.Team team); return new { Team team, AvgAge await q.AverageAsync(p p.Age), AvgHeight await q.AverageAsync(p p.HeightCm), Count await q.CountAsync() }; } [McpServerTool, Description(按平均年龄从大到小返回所有球队统计)] public async TaskListobject GetAllTeamsRankedByAge() await _db.Players.GroupBy(p p.Team) .Select(g new { Team g.Key, AvgAge g.Average(p p.Age), AvgHeight g.Average(p p.HeightCm) }) .OrderByDescending(x x.AvgAge) .ToListAsyncobject(); }3.5 Program.cs 注册 MCP 服务var builder WebApplication.CreateBuilder(args); builder.Services.AddDbContextAsiaCupContext(o o.UseSqlServer(builder.Configuration.GetConnectionString(AsiaCup))); builder.Services.AddMcpServer() .WithHttpTransport() .WithToolsPlayerTools(); var app builder.Build(); app.MapMcp(); app.Run();3.6 VS Code 侧 MCP 配置在 VS Code 的settings.json里加 MCP 服务端定义。如果你用的是 Cline 或 CC Switch 这类工具配置结构类似核心还是 Base URL Key Model ID 三件套{ mcp: { servers: { my-mcp-server: { type: http, url: http://localhost:4421/mcp } } } }如果 MCP 服务端内部还要调模型环境变量里带上{ env: { OPENAI_BASE_URL: https://taotoken.net/api, OPENAI_API_KEY: sk-你的Key, OPENAI_MODEL: claude-sonnet-4-5 } }3.7 把 MCP 工具挂进 chatmode回到亚洲杯球员分析.chatmode.md确认tools列表里有my-mcp-server。保存后在 Copilot 面板的 mode 下拉框里就能看到「亚洲杯球员分析」。鼠标悬停在工具集名称上会弹出它包含的三个工具GetPlayersByTeam、GetTeamStats、GetAllTeamsRankedByAge。4. 验证请求一次球员数据问答的完整过程配置完启动 MCP 服务端cd AsiaCupMcpServer dotnet run看到监听http://localhost:4421就说明起来了。4.1 选中自定义模式在 VS Code 的 Copilot 面板下方mode 下拉框选「亚洲杯球员分析」。这时 Copilot 已经带着那段 instructions 在工作了。4.2 问中国队输入「中国队」Copilot 会自动调用GetPlayersByTeam返回中国队参赛球员名单再调GetTeamStats给出平均年龄和平均身高。因为 instructions 里写了「统计数字保留一位小数」返回的格式是规整的。4.3 问排名输入「各国球员平均年龄和身高按平均年龄从大到小排序」Copilot 调GetAllTeamsRankedByAge返回排序后的列表。实测下来菲律宾队平均年龄超过 30 岁年龄最小的是新西兰和澳大利亚这两支大洋洲球队阵容年轻化明显。4.4 问中国台北队输入「中国台北队」返回平均身高相对其他队偏低中锋是规划球员高博凯队里有 3 名现役 CBA 球员胡珑贸此前也有 CBA 经历。4.5 验证成功的标志判断 MCP 是否真的被调用看两点一是 Copilot 回答里出现了工具调用卡片显示调用了哪个 tool二是回答里的数字和直接查数据库一致。如果只是模型自己编数字往往对不上或者格式不统一。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth配这套东西报错基本集中在几个地方逐个对照。5.1 401 Unauthorized最常见。原因通常是 Key 没填对或者 Base URL 写成了带路径的形式。检查Base URL 必须是https://taotoken.net/api不要写成https://taotoken.net/api/v1或带其他后缀。Key 是否完整复制有没有多余空格。如果 MCP 服务端读的是环境变量确认OPENAI_API_KEY真的被注入进去了可以在启动日志里打印一下前几位确认。5.2 local proxy failed这个报错一般出现在 VS Code 侧连 MCP 服务端时。原因多是 MCP 服务端没启动或者端口不对。检查dotnet run是否还在运行settings.json里的url端口是否和Program.cs里监听的一致。如果服务端监听的是https客户端却用http也会报这个。5.3 reading choices 相关报错这类报错通常出现在模型返回格式不符合预期时比如 MCP 工具返回了模型无法解析的结构。检查工具方法的返回类型尽量返回简单对象或列表避免嵌套过深。如果返回的是 EF Core 的跟踪实体先.Select成匿名对象再返回。5.4 OAuth 相关报错如果你在 MCP 配置里启用了 OAuth 认证但服务端没配对应的授权端点会报 OAuth 错误。本地开发阶段MCP 服务端用http 无认证最简单先跑通再考虑加认证。5.5 工具没被调用Copilot 回答正常但没调 MCP 工具通常是 chatmode 的tools列表里没写my-mcp-server或者工具方法的Description写得太模糊模型判断不出该不该调。把 description 写具体比如「查询指定球队的平均年龄和平均身高」比「获取统计」有效得多。5.6 三件套再核对一遍只要涉及模型调用Base URL、Key、Model ID 三样缺一不可。CC Switch、Cline MCP、Codex 的auth.json里都是这三个字段配的时候对照着填别只填两个。6. 把模型通道收敛到一处长期用起来更省事这套配置跑通之后你会发现真正的价值不在「问一次球员数据」而在于模式可以复用。下次想分析别的赛事改 chatmode 的 instructions 和 MCP 工具的数据源就行模型通道那层不用动。如果你打算长期在 VS Code 里做这类领域问答或者把 MCP 接到更多 Agent 工作流里可以考虑 Coding Plan把模型调用额度固定下来不用每次单独算。入口https://taotoken.net/coding-plan接入文档里对 Base URL、Key、Model ID 的说明最全配的时候对着看https://taotoken.net/doc想先验证模型通不通用模型对话页面最快https://taotoken.net/chatKey 管理在控制台https://taotoken.net/api-keys最后留一个我踩过的坑chatmode 文件保存后如果 Copilot 面板没刷新出新模式把 VS Code 窗口重载一下Developer: Reload Window比反复点下拉框管用。

相关新闻

YOLOv8猴子检测:4690张带标签数据集的训练与避坑全流程

YOLOv8猴子检测:4690张带标签数据集的训练与避坑全流程

简介:一套可直接用于yolo系列训练的猴子检测数据集,面向目标检测算法学习者和智能监控应用开发者,包含4690张猴子图像及标注,适配yolov5、yolov7、yolov8、yolov9、yolov10、yolo11等主流框架。压缩包约240MB,共2000个…

2026/10/11 15:37:09 阅读更多 →
多模态Agent如何重新定义UI测试路径规划

多模态Agent如何重新定义UI测试路径规划

UI 自动化做了不少年头,从录制回放到页面对象模型,技术栈换了一波又一波,可有一件事始终让人头疼:测试路径怎么规划。页面一改,脚本就崩;元素一变,定位就失效;更别提那些只有视觉上才…

2026/10/11 15:36:09 阅读更多 →
YOLOv5香烟破损检测实战:工业级缺陷识别闭环方案

YOLOv5香烟破损检测实战:工业级缺陷识别闭环方案

简介:本资源是一个面向计算机视觉初学者与工业质检开发者的YOLOv5实战项目,聚焦香烟生产线上6类破损缺陷(如头部破损、滤嘴破损等)的高精度目标检测任务。项目提供完整可运行方案:含320张训练图80张验证图的大尺度RGB数…

2026/10/11 15:36:09 阅读更多 →

最新新闻

Spring Boot + Vue民宿预订网站全栈开发实战与部署指南

Spring Boot + Vue民宿预订网站全栈开发实战与部署指南

1. 项目概述手记做民宿房源预订网站,这几年算是个非常典型的全栈练手项目,同时也是很多毕业设计、个人作品集里的常客。市面上类似的系统不少,但大多数要么只停留在管理后台,要么前端拿模板硬套,真正能做到前后端分离、…

2026/10/11 18:06:40 阅读更多 →
输电线路分布式故障诊断系统合规设计指南

输电线路分布式故障诊断系统合规设计指南

简介:本资源为《国家标准 输电线路分布式故障诊断系统(征求意见稿)》正式文本,面向电力系统设计、运维、检测及标准研究领域的工程师、科研人员与高校师生,旨在支撑高电压等级输电线路故障快速定位与智能诊断技术的规范…

2026/10/11 18:06:40 阅读更多 →
SQL数据库课程设计宾馆房间管理系统:从ER图到窗口函数的完整落地

SQL数据库课程设计宾馆房间管理系统:从ER图到窗口函数的完整落地

简介:《SQL数据库课程设计宾馆房间管理系统.doc》是面向软件工程专业学生的课程设计参考文档,以宾馆客房管理为业务场景,完整演示从需求分析、概念结构设计、逻辑/物理设计到SQL Server 2000建库建表及C#.NET程序实现的全过程。文档包含数据流…

2026/10/11 18:06:40 阅读更多 →
编译原理实验:词法分析与语法分析器从零实现指南

编译原理实验:词法分析与语法分析器从零实现指南

简介:面向编译原理课程实验的词法分析与语法分析报告,系统讲解单词识别原理、状态图设计以及LL(1)语法分析表构造。资源围绕标识符、关键字、十进制整数、运算符和分隔符的识别展开,给出使用C语言实现的扫描函数完整代码,并以表达…

2026/10/11 18:06:40 阅读更多 →
Spring Boot+Vue前后端分离旅游订票系统实战:从库存防超卖到订单状态机

Spring Boot+Vue前后端分离旅游订票系统实战:从库存防超卖到订单状态机

上个季度我完整做了一个“旅游线路展示 在线订票”的前后端分离项目:Spring Boot 做后端接口,Vue 做前端页面,整个系统包含线路浏览、景点详情、日期团期选择、订单提交、支付状态回跳、后台线路维护这些核心环节。项目不大,但业…

2026/10/11 18:06:40 阅读更多 →
Linux线程同步指南:从互斥锁、条件变量到生产者消费者模型

Linux线程同步指南:从互斥锁、条件变量到生产者消费者模型

1. 一条计数器的崩溃现场:竞态条件到底怎么回事上一周我在调一个批量图片压缩工具,开了四个线程同时去处理任务队列,结果跑出来的图片里有好几张是花的,还有一次直接段错误。我排查了很久,最后定位到问题根源不在压缩算…

2026/10/11 18:05:40 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/11 14:36:54 阅读更多 →