vault backup: 2026-06-09 23:15:17

This commit is contained in:
2026-06-09 23:15:17 +08:00
parent 31fd89aafe
commit e92c0327d9
111 changed files with 7276 additions and 8846 deletions
@@ -1,14 +1,25 @@
---
title: "MCP 配置 - 多来源合并、作用域与策略管控"
description: "详细说明 Claude Code MCP 配置的来源层次、合并优先级、传输类型、企业策略管控、插件集成和保留名称机制。"
keywords: ["MCP", "配置", "settings.json", ".mcp.json", "企业策略", "插件"]
tags:
- MCP
- 配置
- 企业策略
- 插件
create time: 2026-06-09 22:30
---
## 配置来源与作用域
# MCP 配置 - 多来源合并、作用域与策略管控
## 概述
详细说明 Claude Code MCP 配置的来源层次、合并优先级、传输类型、企业策略管控、插件集成和保留名称机制。
## 正文
### 配置来源与作用域
Claude Code 的 MCP 配置来自多个来源,每个来源对应一个 `scope`(作用域)。配置按优先级合并,高优先级来源的同名配置覆盖低优先级。
### 来源列表
#### 来源列表
| 来源 | Scope | 文件/接口 | 说明 |
|------|-------|----------|------|
@@ -21,25 +32,20 @@ Claude Code 的 MCP 配置来自多个来源,每个来源对应一个 `scope`
| 内置动态 | `dynamic` | 代码中注册 | Computer Use / Chrome 等内置服务器 |
| IDE SDK | `sdk` | IDE 传入 | VS Code / JetBrains 嵌入模式 |
### 合并优先级(从低到高)
#### 合并优先级(从低到高)
```
claude.ai 连接器 ← 最低优先级
↓ 去重
插件服务器
↓ 去重
用户全局配置
↓
项目配置(.mcp.json) ← 需要用户审批
↓
本地项目配置
↓
动态配置(内置 MCP) ← 最高优先级
```mermaid
flowchart TD
A["claude.ai 连接器 最低优先级"] -->|"去重"| B["插件服务器"]
B -->|"去重"| C["用户全局配置"]
C --> D["项目配置 .mcp.json 需要用户审批"]
D --> E["本地项目配置"]
E --> F["动态配置 内置 MCP 最高优先级"]
```
`Object.assign({}, dedupedPluginServers, userServers, approvedProjectServers, localServers)` 实现合并——后出现的同名键覆盖前者。
## 企业管控模式
### 企业管控模式
当 `managed-mcp.json` 文件存在时,进入 **排他模式**:
@@ -57,9 +63,9 @@ if (doesEnterpriseMcpConfigExist()) {
- 仍然应用策略过滤(allowlist/denylist)
- 无法通过 CLI 添加新服务器(`addMcpConfig` 会拒绝)
## 传输类型与配置 Schema
### 传输类型与配置 Schema
### stdio(默认)
#### stdio(默认)
启动子进程,通过 stdin/stdout JSON-RPC 通信。
@@ -75,9 +81,10 @@ if (doesEnterpriseMcpConfigExist()) {
`type` 字段可省略(默认为 `stdio`)。环境变量通过 `env` 传递给子进程,会与当前进程环境合并。
**Windows 注意**:使用 `npx` 需要包装为 `cmd /c npx`,否则会报错。
> [!warning]
> **Windows 注意**:使用 `npx` 需要包装为 `cmd /c npx`,否则会报错。
### SSE(Server-Sent Events)
#### SSE(Server-Sent Events)
通过 HTTP SSE 连接远程 MCP 服务器。
@@ -97,7 +104,7 @@ if (doesEnterpriseMcpConfigExist()) {
支持 OAuth 认证流程。认证失败时进入 `needs-auth` 状态,15 分钟 TTL 缓存避免重复提示。
### HTTP(Streamable HTTP)
#### HTTP(Streamable HTTP)
HTTP 流式传输。
@@ -113,7 +120,7 @@ HTTP 流式传输。
支持与 SSE 相同的 OAuth 配置。
### WebSocket
#### WebSocket
```json
{
@@ -124,24 +131,24 @@ HTTP 流式传输。
}
```
### IDE 专用类型(内部)
#### IDE 专用类型(内部)
`sse-ide` 和 `ws-ide` 是 IDE 扩展专用类型,不由用户直接配置。
- `sse-ide`:使用 lockfile token 认证
- `ws-ide`:使用 `X-Claude-Code-Ide-Authorization` header
### SDK 类型(内部)
#### SDK 类型(内部)
`type: "sdk"` 由 IDE 嵌入模式传入,不经过保留名称检查和企业管控排他限制。
### claude.ai 代理类型(内部)
#### claude.ai 代理类型(内部)
`type: "claudeai-proxy"` 由 claude.ai 网页端配置的连接器使用,通过 OAuth bearer token 认证并支持 401 重试。
## 配置操作
### 配置操作
### 添加 MCP 服务器
#### 添加 MCP 服务器
通过 CLI 命令 `claude mcp add` 或 API 调用 `addMcpConfig()`:
@@ -164,19 +171,19 @@ claude mcp add my-remote -s user -t http -u https://mcp.example.com/mcp
4. **Schema 验证**:Zod 校验配置格式
5. **策略检查**:denylist 拒绝、allowlist 验证
### 移除 MCP 服务器
#### 移除 MCP 服务器
```bash
claude mcp remove my-server -s user
```
### 列出 MCP 服务器
#### 列出 MCP 服务器
```bash
claude mcp list
```
## 项目配置审批
### 项目配置审批
`.mcp.json` 中的项目配置需要用户显式审批才能生效:
@@ -192,7 +199,7 @@ for (const [name, config] of Object.entries(projectServers)) {
首次打开项目时,Claude Code 会提示用户审批 `.mcp.json` 中的每个服务器。审批状态持久化在本地配置中。
## 插件 MCP 集成
### 插件 MCP 集成
插件通过 manifest 中的 `.mcp.json` 或 `.mcpb` 文件声明 MCP 服务器:
@@ -204,11 +211,11 @@ const pluginServerResults = await Promise.all(
)
```
### 插件命名空间
#### 插件命名空间
插件 MCP 服务器名格式为 `plugin:<pluginName>:<serverName>`,不会与手动配置的名称冲突。
### 去重机制
#### 去重机制
插件服务器通过内容签名去重(`dedupPluginMcpServers`):
@@ -221,15 +228,15 @@ const pluginServerResults = await Promise.all(
2. 先加载的插件优先于后加载的
3. 被抑制的插件服务器在 `/plugin` UI 中显示提示
### claude.ai 连接器去重
#### claude.ai 连接器去重
claude.ai 连接器使用相同的内容签名机制去重(`dedupClaudeAiMcpServers`):
claude.ai 连接器使用相同的内容签名机制去重:
- 仅启用的手动配置参与去重(禁用的手动配置不应抑制连接器)
- 连接器名格式为 `claude.ai <DisplayName>`
## 策略管控
### 策略管控
### Allowlist / Denylist
#### Allowlist / Denylist
企业策略通过 allowlist 和 denylist 控制可用的 MCP 服务器:
@@ -248,11 +255,11 @@ for (const [name, serverConfig] of Object.entries(configs)) {
- stdio 类型的 command + args 匹配
- URL 类型的 URL 模式匹配(支持通配符)
### 插件专用模式
#### 插件专用模式
`isRestrictedToPluginOnly('mcp')` 启用时,只允许插件提供的 MCP 服务器——用户/项目级配置被忽略。
## 环境变量展开
### 环境变量展开
MCP 配置中的环境变量支持 `$VAR` 和 `${VAR}` 语法展开:
@@ -271,11 +278,11 @@ MCP 配置中的环境变量支持 `$VAR` 和 `${VAR}` 语法展开:
展开时缺失的变量会生成警告信息,但不阻止配置加载。
## 内置 MCP 动态注册
### 内置 MCP 动态注册
内置 MCP 服务器在 `main.tsx` 启动流程中动态注入配置:
### Computer Use MCP
#### Computer Use MCP
```typescript
// src/utils/computerUse/setup.ts
@@ -303,7 +310,7 @@ export function setupComputerUseMCP(): {
- 非非交互式会话
- GrowthBook gate `getChicagoEnabled()` 返回 true
### Claude in Chrome MCP
#### Claude in Chrome MCP
```typescript
// 类似 Computer Use,在 main.tsx 中注册
@@ -315,11 +322,11 @@ dynamicMcpConfig = { ...dynamicMcpConfig, ...mcpConfig }
- `--chrome` 参数或 `claudeInChromeDefaultEnabled` 配置
- Chrome 扩展已安装
### VSCode SDK MCP
#### VSCode SDK MCP
IDE 嵌入模式通过初始化消息传入 `type:'sdk'` 的配置,由 `setupVscodeSdkMcp()` 设置双向通知。
## 保留名称
### 保留名称
以下 MCP 服务器名称被保留,用户无法手动配置同名服务器:
@@ -333,7 +340,7 @@ IDE 嵌入模式通过初始化消息传入 `type:'sdk'` 的配置,由 `setupV
1. `addMcpConfig()`(`config.ts:636-648`)— 运行时拒绝
2. `main.tsx` 启动检查(`main.tsx:2351-2368`)— 启动时退出
## 关键源文件索引
### 关键源文件索引
| 文件 | 职责 |
|------|------|
@@ -344,3 +351,7 @@ IDE 嵌入模式通过初始化消息传入 `type:'sdk'` 的配置,由 `setupV
| `src/utils/computerUse/setup.ts` | Computer Use 动态注册 |
| `src/utils/claudeInChrome/common.ts` | Chrome MCP 保留名与工具名 |
| `src/services/mcp/vscodeSdkMcp.ts` | VSCode SDK 双向通知 |
## 关联笔记
- [[claude-code-best/docs/features/extensibility/mcp-protocol]]