# 把 MCP 服务器接入 Claude Desktop、Cursor 和 VS Code

> 这三个应用接入本地 MCP 服务器的方式相同：在 JSON 配置文件里写一条命令和它的参数。Claude Desktop 读 `claude_desktop_config.json`，Cursor 读 `.cursor/mcp.json`，两者都用 `mcpServers`；VS Code 读 `.vscode/mcp.json`，用的是 `servers`。路径要写绝对路径，写完再重新加载应用，让它读到这个文件。

Mindket 编辑部 · 发布于 2026-11-04 · 更新于 2026-11-05 · https://mindket.com/cn/learn/mcp/connect-mcp-servers

## 要点

- 你会把同一个本地服务器注册到 Claude Desktop、Cursor 和 VS Code 里，并清楚每个应用的配置放在哪里。
- 启动命令和参数在三个应用里是一样的，只有配置文件、顶层键和重新加载的方式不同。
- Claude Desktop 和 Cursor 用 `mcpServers`。VS Code 自己的格式用 `servers`，而且每个条目都要写 `type`。
- 远程服务器的做法不同。Claude Desktop 把它们当作自定义连接器来添加。

## 一条启动命令，三个配置文件

宿主只需要你给它一样东西：一条能当子进程启动、并通过 stdin 和 stdout 对话的命令。[第 1 课](https://mindket.com/cn/learn/mcp/build-mcp-server-python)和[第 2 课](https://mindket.com/cn/learn/mcp/build-mcp-server-typescript)的服务器都已经有了。TypeScript 服务器在项目文件夹里用 `npx tsx src/index.ts` 启动，Python 的用 `uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER/weather run weather.py`。每个应用都要求把这条命令拆成 `command` 和 `args` 两部分，写进各自的文件。

Claude Code 用 `claude mcp add` 接入同一条命令，[这篇文章](https://mindket.com/cn/blog/add-mcp-server-claude-code)已经讲过，所以这一课不再重复。

1. 先在终端里运行这条启动命令。正常的 stdio 服务器什么都不输出，或者只往 stderr 写一行，然后停在那里等待。要是出现报错堆栈或者立刻退出，就先把问题修好，再去动任何应用。
2. 按下面的表格打开应用的配置文件，文件不存在就新建一个。
3. 在应用的顶层键下加上这个服务器，写 `command` 和 `args`。除了应用会替你解析变量的地方，其余路径都写绝对路径。
4. 重新加载应用。Claude Desktop 要彻底退出再重启。VS Code 里，在 MCP: List Servers 中重启这个服务器。Cursor 里，服务器和它的开关在侧边栏的 Customize 下面。
5. 问一个只有这个服务器才知道的问题，比如德克萨斯州目前有哪些天气预警，应用询问时批准这次工具调用。

| 应用 | 配置文件 | 顶层键 |
| --- | --- | --- |
| Claude Desktop | macOS：`~/Library/Application Support/Claude/claude_desktop_config.json`，Windows：`%APPDATA%\Claude\claude_desktop_config.json`，Linux：`~/.config/Claude/claude_desktop_config.json` | `mcpServers` |
| Cursor | 某个项目里的 `.cursor/mcp.json`，或者对所有项目生效的 `~/.cursor/mcp.json` | `mcpServers` |
| VS Code | 工作区里的 `.vscode/mcp.json`，或者用户配置文件夹里的 `mcp.json` | `servers` |

## Claude Desktop：claude_desktop_config.json

从系统菜单栏里的 Claude 菜单打开 Settings，不是聊天窗口里面的设置。在 Developer 标签页里点 Edit Config。文件不存在时它会帮你创建，然后打开它。把服务器加到 `mcpServers` 下面，保存，再彻底退出 Claude Desktop 并重新打开。

下面这段是 MCP 文档里的第一个例子，文件系统服务器，写的是 macOS 的路径。Windows 的路径在 JSON 里要写双反斜杠。想接入天气服务器，就换成你自己服务器的启动命令。需要密钥的服务器，把密钥写在 `args` 旁边的 `env` 对象里。

如果你只想用现成的服务器，而不是自己写，[Anthropic 的帮助中心](https://support.claude.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop)介绍了桌面扩展，也就是能单击安装的本地服务器包。

````json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/username/Desktop",
        "/Users/username/Downloads"
      ]
    }
  }
}

````

## Cursor：mcp.json

Cursor 读取项目里的 `.cursor/mcp.json` 和主目录里的 `~/.cursor/mcp.json`，两个文件里都是同样的 `mcpServers` 对象。下面这段是第 2 课的天气服务器，用的是 TypeScript SDK 指南给出的 Cursor 条目。

Cursor 会解析 `command`、`args`、`env`、`url` 和 `headers` 里的变量。`${workspaceFolder}` 是项目根目录，`${env:NAME}` 读取环境变量，所以项目里的文件可以不写绝对路径，也能让密钥不出现在文件里。文档里有一处小矛盾：字段表把 `type` 标为 stdio 服务器的必填项，可 JSON 示例里却没有它。照着示例抄，条目加载不上时先检查这个字段。

Cursor 在运行 MCP 工具之前会先询问，工具名旁边的箭头能展开它的参数。想知道服务器为什么失败，就打开 Output 面板，在下拉菜单里选 MCP Logs。

````json
{
  "mcpServers": {
    "weather": {
      "command": "npx",
      "args": ["tsx", "src/index.ts"]
    }
  }
}

````

## VS Code：.vscode/mcp.json

VS Code 自己的格式用 `servers`，不是 `mcpServers`，而且每个 stdio 条目都要写明 `type`。VS Code 的参考页说，它的属性表描述的是 VS Code 自己的格式，不是所有 MCP 客户端共用的结构，所以把 Cursor 的片段原样粘进来是对不上的。下面这段是 TypeScript SDK 指南里的天气服务器条目。

命令面板里的 MCP: Add Server 是较新的引导方式，它的用户级目标是 `~/.copilot/mcp-config.json`（设置了 `COPILOT_HOME` 就改用那里），用的是另一种可移植格式，顶层键是 `mcpServers`。VS Code 的页面说，`.vscode/mcp.json` 这个目标仍然可用，只是为了兼容，在引导流程里被标为已弃用。参考页仍然写着它的用法，而且它是支持 `inputs` 的格式，`inputs` 会弹出提示让你输入密钥。

在受信任的工作区里，VS Code 的文档说，工作区里的服务器可以不经单独的 MCP 信任提示就启动。运行 MCP: List Servers 能看到服务器的状态，选 Show Output 能看它的日志。

````json
{
  "servers": {
    "weather": {
      "type": "stdio",
      "command": "npx",
      "args": ["tsx", "src/index.ts"]
    }
  }
}

````

## 本地服务器和远程服务器的设置方式不同

远程服务器是指放在某个网址上的服务器，而不是你电脑上的程序。Cursor 把它写成 `url` 加一个 `headers` 对象，VS Code 写成 `type` 为 `http` 并带 `url`。

Claude Desktop 把远程服务器当作自定义连接器来添加。Anthropic 的帮助文章把通过 `claude_desktop_config.json` 配置的本地服务器称为另一套机制，连接器的流程是 Connectors，再点 Add custom connector，在里面填名称和服务器的网址。MCP 指南把 Connectors 放在 Settings 下面，Anthropic 的帮助文章则放在 Customize 下面。

**每个应用能从配置里读到什么**

| | Claude Desktop | Cursor | VS Code |
| --- | --- | --- | --- |
| JSON 文件里的本地服务器 | ✓ 是 | ✓ 是 | ✓ 是 |
| JSON 文件里以 url 条目写的远程服务器 | 在连接器里添加 | ✓ 是 | ✓ 是 |
| 每个项目一个配置文件 | 一个用户级文件 | ✓ 是 | ✓ 是 |
| 密钥写在哪里 | env 对象 | ${env:NAME} | ${env:NAME} 或弹出提示 |

来源：[MCP 文档：连接远程 MCP 服务器](https://modelcontextprotocol.io/docs/2026-07-28/develop/connect-remote-servers) (2026-11-04 查阅)；[Cursor 文档：Model Context Protocol](https://cursor.com/docs/mcp) (2026-11-04 查阅)；[VS Code 文档：MCP 配置参考](https://code.visualstudio.com/docs/agents/reference/mcp-configuration) (2026-11-04 查阅)

## 连接不是你写的服务器之前

本地服务器以你的用户账户的权限运行，所以凡是你能手动做的事，它都能做。Claude 帮助中心说，自定义连接器可以连到 Anthropic 没有验证过的服务；Cursor 的文档说，只从可信来源安装服务器，并使用权限受限的 API 密钥；VS Code 的文档说，信任一个仓库之前要先检查它的 MCP 配置，因为 stdio 服务器能运行代码。

> 要检查哪些地方，[MCP 服务器安全吗？](https://mindket.com/cn/blog/are-mcp-servers-safe)这篇文章从头讲了一遍，连接别人写的服务器之前先读它。

## VS Code 的 Agent Plugins，和 Kenton Varda 谈 MCP 认证

Visual Studio Code 团队在 2026 年 8 月[在 X 上](https://x.com/code/status/2087640853783232562)宣布，VS Code 支持 Agent Plugins 1.0：技能、MCP 服务器和 AI 扩展可以打包成一个能直接安装的插件。

GitHub 的[更新日志](https://github.blog/changelog/2026-08-12-agent-plugins-1-0-in-vs-code-copilot-cli-and-the-copilot-app/)列出了插件的组成：一个 `plugin.json`、一个 `skills/` 文件夹和一个 `mcp.json`，从插件市场安装。服务器能靠配置文件跑起来之后，做成插件交给同事，他们就不用各自改 JSON 了。

Kenton Varda 是 Cloudflare Workers 的技术负责人。他在 2025 年底[在 X 上](https://x.com/KentonVarda/status/1987208904724652273)说，MCP 比 OpenAPI 强的地方在于它把认证讲得很清楚：OpenAPI 支持的认证方式太多，接口描述里的信息也未必够机器人走完认证流程。

同一个服务如果既有用 OAuth 的远程服务器，又有要密钥的本地服务器，选远程的那个，长期有效的密钥就不会留在你的 JSON 文件里。

> OpenAPI 支持的认证方式太多，而且接口描述里的信息未必足够让机器人走完认证流程。
>
> Kenton Varda, Cloudflare Workers 技术负责人，引文为译文, [X](https://x.com/KentonVarda/status/1987208904724652273) (2026-11-05 查阅)

[![Visual Studio Code（@code）2026 年 8 月 12 日在 X 上发帖：VS Code 现已支持 Agent Plugins 1.0。把你的技能、MCP 服务器和 AI 扩展打包成一个可以安装的插件](https://mindket.com/blog/shots/x-code-agent-plugins-1-0.webp?v=d67fab0d83eb)](https://x.com/code/status/2087640853783232562)

Visual Studio Code 在 X 上，2026 年 8 月 12 日

[![Kenton Varda（@KentonVarda）2025 年 11 月 8 日在 X 上发帖，引用了 Steve Krouse 一条谈 Anthropic 和 Cloudflare 发布 code mode 的帖子：MCP 比 OpenAPI 强的一大优势，是它把认证讲得非常清楚。OpenAPI 支持的认证方式太多，接口描述里的信息也未必够机器人走完认证流程](https://mindket.com/blog/shots/x-kentonvarda-mcp-auth.webp?v=c758357843c9)](https://x.com/KentonVarda/status/1987208904724652273)

Kenton Varda 在 X 上，2025 年 11 月 8 日

> X 官方嵌入卡片的截图，拍摄于 2026 年 11 月 5 日，时间为 UTC。VS Code 那条帖子被 X 用“Show more”截断了。点击截图可到 X 上打开原帖。

## 常见错误

- 写相对路径。宿主从自己的工作目录启动服务器，这个目录可能没有定义，所以光写 `./data` 或 `weather.py` 会失败。请用绝对路径。
- JSON 有语法错误。MCP 的排错清单第一条就是检查文件的语法。
- 把一个应用的片段原样粘进另一个应用。顶层键不同，VS Code 自己的格式还要求写 `type`。
- 只关掉 Claude Desktop 的窗口，没有退出应用。调试指南说，要彻底退出再重新打开，只关窗口是不够的。
- 应用找不到命令。指南说，`command` 字段里可能要写 `uv` 的完整路径，用 `which uv` 或 `where uv` 就能查到。
- Windows 上，服务器日志里出现提到 `${APPDATA}` 的 ENOENT 错误。MCP 文档的办法是，把展开后的 `APPDATA` 路径加进条目的 `env` 键，并且全局安装 npm。

| 应用 | 日志在哪里 |
| --- | --- |
| Claude Desktop | `mcp.log` 以及每个服务器一个 `mcp-server-NAME.log`，位置：macOS 在 `~/Library/Logs/Claude`，Windows 在 `%APPDATA%\Claude\logs`，Linux 在 `~/.config/Claude/logs` |
| Cursor | Output 面板，下拉菜单里选 MCP Logs |
| VS Code | MCP: List Servers，选中服务器，再选 Show Output |

## 动手试试

- 把第 1 课或第 2 课的天气服务器注册到一个应用里，然后问问德克萨斯州以外某个州的预警。
- 打开那个应用的日志，找到服务器启动的那一行。
- 把同一个条目搬到第二个应用里，记下你改动的每一处。

## 下一课：Claude API 课程

MCP 课程到这里就结束了。你用两种语言写了服务器，用 Inspector 测试了它，还把它接入了三个应用。想拿自己的服务器和现成的比一比，可以逛逛 Mindket 上的 MCP 服务器。

自然的下一步是 [Claude API 课程](https://mindket.com/cn/learn/claude-api/claude-api-quickstart)。它从第一次 API 调用讲起，再讲工具调用、提示词缓存和智能体循环，你会亲手写出让模型请求工具、再由代码去执行的那一半。

## 自测一下

1. VS Code 的 `.vscode/mcp.json` 用哪个顶层键来放 MCP 服务器？

   A. `mcpServers`
   B. `servers`
   C. `mcp`

   答案：B。 VS Code 自己的格式用 `servers`，每个 stdio 条目还要写明 `type`，而 Claude Desktop 和 Cursor 用 `mcpServers`。

2. 你改了 `claude_desktop_config.json`，服务器却没有出现，该怎么办？

   A. 关掉 Claude Desktop 的窗口，再重新打开窗口
   B. 新开一个对话来刷新列表
   C. 在终端里运行 `claude mcp add`
   D. 彻底退出 Claude Desktop，再重新打开

   答案：D。 只关窗口是不够的，应用必须彻底退出再重新打开，才会读到这个文件。

3. 一个服务器条目里只写了 `weather.py`，前面没有文件夹，会出什么问题？

   A. 宿主从自己的工作目录启动服务器，相对路径可能解析不到
   B. 宿主只运行用 TypeScript 写的服务器
   C. 宿主会先把这个文件复制进它的配置文件夹

   答案：A。 宿主启动服务器时的工作目录可能没有定义，所以路径要写绝对路径。

4. 在 Claude Desktop 里，远程 MCP 服务器该怎么添加？

   A. 在 `claude_desktop_config.json` 的 `mcpServers` 下写一个 `url` 条目
   B. 写进 `.vscode/mcp.json` 的 `servers` 下
   C. 添加成自定义连接器，路径是 Connectors，再点 Add custom connector

   答案：C。 Claude Desktop 把远程服务器当作自定义连接器，这是和本地配置文件不同的另一套机制。

## 常见问题

### 怎样把远程 MCP 服务器加到 Claude Desktop？

把它加成自定义连接器，而不是去改 JSON 文件。打开 Connectors，点 Add，再点 Add custom connector，填入服务器的名称和网址。免费计划最多只能添加一个自定义连接器。

### VS Code 能用我在 Claude Desktop 或 Cursor 里设置好的服务器吗？

它能发现这些服务器。`chat.mcp.discovery.enabled` 这个设置控制是否从其他应用发现，VS Code 的参考页说，对 Claude Desktop 和 Cursor，它默认是关闭的。

### 一个 MCP 配置文件能在所有应用里通用吗？

做不成一个通用文件，因为每个应用包在条目外面的那一层不一样。把启动命令和参数记在项目的 README 里，接入哪个应用，就按那个应用的格式粘进去。

### 改完配置一定要重启应用吗？

Claude Desktop 要，它只在启动时读取这个文件。VS Code 在 MCP: List Servers 菜单里有 Restart Server，它的文档把它列为配置改动之后要用的操作。Cursor 的文档讲的是 Customize 下每个服务器的开关。

### 怎样给本地服务器一个 API 密钥？

在 Claude Desktop 里，给服务器的条目加一个 `env` 对象，把密钥放进去。Cursor 支持 `${env:API_KEY}` 这样的引用，能让密钥不出现在文件里。VS Code 可以通过 `inputs` 条目来询问，把 `password` 设为 true，再用 `${input:id}` 引用。

### Claude Code 用的是同一个配置文件吗？

不是。Claude Code 用 `claude mcp add` 命令添加服务器，Mindket 上讲给 Claude Code 添加 MCP 服务器的那篇文章有完整的讲解。

## 资料来源

- [MCP docs: Connect to local MCP servers](https://modelcontextprotocol.io/docs/2026-07-28/develop/connect-local-servers) (2026-11-04 查阅)
- [MCP docs: Connect to remote MCP servers](https://modelcontextprotocol.io/docs/2026-07-28/develop/connect-remote-servers) (2026-11-04 查阅)
- [MCP docs: Debugging](https://modelcontextprotocol.io/docs/2026-07-28/tools/debugging) (2026-11-04 查阅)
- [Claude Help Center: Get started with custom connectors using remote MCP](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) (2026-11-04 查阅)
- [Claude Help Center: Getting started with local MCP servers on Claude Desktop](https://support.claude.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop) (2026-11-04 查阅)
- [Cursor docs: Model Context Protocol](https://cursor.com/docs/mcp) (2026-11-04 查阅)
- [VS Code docs: MCP configuration reference](https://code.visualstudio.com/docs/agents/reference/mcp-configuration) (2026-11-04 查阅)
- [VS Code docs: Manage and troubleshoot MCP servers](https://code.visualstudio.com/docs/agents/run/manage-mcp-servers) (2026-11-04 查阅)
- [VS Code docs: Add and manage MCP servers](https://code.visualstudio.com/docs/agent-customization/mcp-servers) (2026-11-04 查阅)
- [MCP TypeScript SDK docs: Plug into a real host](https://github.com/modelcontextprotocol/typescript-sdk/blob/main/docs/get-started/real-host.md) (2026-11-04 查阅)
- [MCP Python SDK docs: Connect to a real host](https://py.sdk.modelcontextprotocol.io/get-started/real-host/) (2026-11-04 查阅)
- [GitHub changelog: Agent Plugins 1.0 in VS Code, Copilot CLI and the Copilot app](https://github.blog/changelog/2026-08-12-agent-plugins-1-0-in-vs-code-copilot-cli-and-the-copilot-app/) (2026-11-05 查阅)
- [Visual Studio Code on X: Agent Plugins 1.0](https://x.com/code/status/2087640853783232562) (2026-11-05 查阅)
- [Kenton Varda on X: MCP is very clear about auth](https://x.com/KentonVarda/status/1987208904724652273) (2026-11-05 查阅)

[浏览 MCP 服务器](https://mindket.com/cn/mcp-servers)
