← 返回博客

VS Code Copilot 接 MCP 自动发布内容:servers 和 mcpServers 写错一个,工具就是 0 个

·VS Code MCPCopilot MCP 配置mcp.jsonAI 自动发布AI 发布内容

VS Code Copilot 接 MCP 自动发布内容:servers 和 mcpServers 写错一个,工具就是 0 个

一句话回答: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

官方文档目前列了四个位置:

文档里还有一句值得注意:用 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,官方文档的建议恰恰是“把工作区配置纳入版本控制,团队共享”。接入地址就会跟着进仓库。仓库一旦公开,任何人拿到这条地址都能调用你这台电脑。

两种处理方式:

  1. 放用户配置,不进任何仓库(我自己用这个)
  2. 一定要放工作区,就用官方支持的输入变量:先在 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。工具的实际名字以列表里显示的为准。

边界要说清:用真实设备和真实登录态,不等于账号从此不会被平台限流。短时间往多个平台连发同一篇内容,平台照样可能处理。发布节奏、内容质量和合规,仍然要你自己把关。

接入前过一遍:

常见问题 / 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 配置参考为准。