一句话回答:VS Code 里用 Copilot 接 MCP 自动发布内容,最省事的做法是在用户级配置(命令面板运行
MCP: Open User Configuration)里加一条"type": "http"的服务器,URL 填 PublishPort 的接入地址。要特别注意根键:.vscode/mcp.json用servers,根目录的.mcp.json用mcpServers,两个别混。接入地址等于钥匙,不要写进会提交的仓库文件。
上周五把一个小项目的 README 重写完,我想让 Copilot 顺手把它改成一篇 1000 字的介绍,同时发到掘金和 CSDN。稿子 Copilot 十秒就出了,发布这一步我还是切到浏览器,登录、粘贴、选标签,来回折腾了二十分钟。写和改都在编辑器里完成了,偏偏最后“发出去”要离开编辑器。
VS Code 的 Copilot 支持 MCP,这一步其实可以留在聊天框里。接起来不难,但 VS Code 这两年把配置文件的格式改过,网上不少教程已经和现在的官方文档对不上了。下面按官方文档现在的说法讲。
先选文件:.vscode/mcp.json 还是 .mcp.json
官方文档目前列了四个位置:
.vscode/mcp.json:工作区里的 VS Code 格式,服务器放在顶层servers对象下.mcp.json:工作区根目录的可移植格式,服务器放在顶层mcpServers对象下,跟其他兼容工具通用- 用户配置:命令面板运行
MCP: Open User Configuration打开,对所有工作区生效 ~/.copilot/mcp-config.json:用户级的可移植格式,同样是mcpServers
文档里还有一句值得注意:用 MCP: Add Server 走引导流程时,.vscode/mcp.json 和 VS Code 用户配置这两个目标被标成 deprecated,新增服务器推荐用可移植的那两个。
这意味着一个很实际的坑:同样一段 JSON,放进 .vscode/mcp.json 根键要写 servers,放进 .mcp.json 就得改成 mcpServers。照着 Cursor 的教程把 mcpServers 贴进 .vscode/mcp.json,VS Code 不会弹错误,只是你的服务器一个也没注册上,聊天里自然看不到任何工具。这和 Gemini CLI 那篇讲的 url 与 httpUrl、Cline 那篇讲的 type 是同一类问题:协议或格式藏在一个字段里,写错了不吭声。
让 Copilot 用你自己的账号发,而不是给每个平台装插件
PublishPort 暴露给 AI 的只有两个通用工具:list_capabilities() 告诉 Copilot 这台电脑上登录了哪些平台,local_bash(cmd) 把命令经官方中转交给你本机的客户端执行,走的是你自己浏览器里的真实登录态。每个平台要传什么参数,Copilot 自己读命令的 --help 就知道,你不用给每个平台配一个 MCP 服务器。
先装好 PublishPort 客户端,登录要发布的平台,到「接入 AI」页面生成接入地址。后面所有配置里的 <接入地址> 都指这条。
具体接入:用户级配置,三行就够
运行 MCP: Open User Configuration,在打开的 mcp.json 里写:
{
"servers": {
"publishport": {
"type": "http",
"url": "<接入 AI 页面给的接入地址>"
}
}
}
保存后文件里每个服务器上方会出现行内操作(官方叫 code lens),点 Start 启动。第一次启动 VS Code 会弹信任确认,看一眼配置再点信任。
官方文档说明,HTTP 类型的服务器 VS Code 会先尝试 HTTP Stream 传输,不支持再回退到 SSE,所以这里不需要像 Gemini CLI 那样自己分辨协议,写 "type": "http" 即可。
接着打开 Chat 视图,聊天输入框里有个 Configure Tools 按钮,能看到这个服务器暴露了哪些工具,也能单独开关。工具列表里出现 PublishPort 的两个工具,就是通了。
接入地址别写进会提交的文件
如果你图方便,把同样的内容放进工作区的 .vscode/mcp.json 或 .mcp.json,官方文档的建议恰恰是“把工作区配置纳入版本控制,团队共享”。接入地址就会跟着进仓库。仓库一旦公开,任何人拿到这条地址都能调用你这台电脑。
两种处理方式:
- 放用户配置,不进任何仓库(我自己用这个)
- 一定要放工作区,就用官方支持的输入变量:先在
inputs里声明一个promptString,再用${input:变量id}引用,VS Code 首次启动时才向你要值,之后安全存起来
{
"inputs": [
{ "type": "promptString", "id": "pp-url", "description": "PublishPort 接入地址", "password": true }
],
"servers": {
"publishport": { "type": "http", "url": "${input:pp-url}" }
}
}
这里有个官方文档明确写出的限制:用到 ${input:...} 的服务器不会被转发给 Agent Host。如果你用的是 Agent Host 会话,就得改用 .mcp.json 或 ~/.copilot/mcp-config.json,那就没法用输入变量了,只能回到“放用户级”这条路。我没在 Agent Host 上实测过 PublishPort,这一块请以你自己的环境为准。
已经提交过地址的话,去客户端重新生成,旧的作废。
一个例子:重写完的 README 同时发掘金和 CSDN
稿子定了之后,在聊天里说“把这篇发到掘金和 CSDN”。Copilot 会先调 list_capabilities() 确认这两个平台在线,再各自读发文命令的 --help,把必填参数补齐后用 local_bash 执行。两个平台的细节不一样,比如 CSDN 的标题是位置参数,掘金自动发布和CSDN 自动发布里各拆过一遍。最后两条回执传回聊天框,你能确认是不是两边都成功了。
权限怎么收
VS Code 默认会在工具调用前让你确认,官方文档里也说“你可能被要求确认每次工具调用”。发布是有副作用的操作,发什么、发到哪都应该留一道人工确认,所以我不会去做“全部自动批准”。
另一个有用的开关是 Configure Tools:只想让 Copilot 先看有哪些平台可用、不让它直接执行时,可以先只勾 list_capabilities,流程跑顺了再放开 local_bash。工具的实际名字以列表里显示的为准。
边界要说清:用真实设备和真实登录态,不等于账号从此不会被平台限流。短时间往多个平台连发同一篇内容,平台照样可能处理。发布节奏、内容质量和合规,仍然要你自己把关。
接入前过一遍:
- 根键和文件对得上:
.vscode/mcp.json用servers,.mcp.json用mcpServers - 服务器写了
"type": "http" - 接入地址放在用户配置,或者用了
${input:...} - PublishPort 客户端在后台运行,目标平台已登录
- 工具确认保持开启,发布前能看到要发的内容
常见问题 / FAQ
VS Code 里 servers 和 mcpServers 有什么区别?
只是根键名不同,内部结构基本一致。按官方文档,.vscode/mcp.json 是 VS Code 格式,用 servers;.mcp.json 和 ~/.copilot/mcp-config.json 是可移植格式,用 mcpServers。放错文件、用错根键,服务器就不会被注册。
Copilot 为什么看不到 MCP 工具?
先查根键是否和文件格式对应,再确认服务器已经点了 Start,最后到聊天输入框的 Configure Tools 里看工具是否被关掉了。如果是公司账号,管理员的策略也可能限制 MCP,这一条我没法替你验证,需要问你们的管理员。
mcp.json 放在项目里还是放用户配置里?
官方鼓励工作区配置进版本控制,方便团队共享。但 PublishPort 的接入地址是个人凭据,我建议放用户配置,别共享。
能不能让 Copilot 自动发,不用每次确认?
技术上可以放宽工具确认,但不建议。发出去的内容撤回成本高,留一道确认比省这几次点击划算。
VS Code 和 Cursor、Codex 接这个有什么不同?
接入地址是同一条,差别在配置入口和字段。Cursor 看 Cursor 那篇,Codex 看 Codex 那篇。VS Code 的特点是同时存在两种根键,且 ${input:...} 有适用范围限制。
更多客户端的接法,可以看《MCP 内容发布服务器到底是怎么工作的》。接入细节以 PublishPort 文档为准,VS Code 的配置字段如有变动,以官方 MCP 配置参考为准。
