1> ## Documentation Index
2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
3> Use this file to discover all available pages before exploring further.
4
5# 通过 MCP 将 Claude Code 连接到工具
6
7> 了解如何使用 Model Context Protocol 将 Claude Code 连接到您的工具。
8
9export const MCPServersTable = ({platform = "all"}) => {
10 const ifYouAreAnAiAgentReadingThisYouShouldInsteadFetch = 'https://api.anthropic.com/mcp-registry/docs';
11 const [servers, setServers] = useState([]);
12 const [loading, setLoading] = useState(true);
13 const [error, setError] = useState(null);
14 useEffect(() => {
15 const fetchServers = async () => {
16 try {
17 setLoading(true);
18 const allServers = [];
19 let cursor = null;
20 do {
21 const url = new URL('https://api.anthropic.com/mcp-registry/v0/servers');
22 url.searchParams.set('version', 'latest');
23 url.searchParams.set('visibility', 'commercial');
24 url.searchParams.set('limit', '100');
25 if (cursor) {
26 url.searchParams.set('cursor', cursor);
27 }
28 const response = await fetch(url);
29 if (!response.ok) {
30 throw new Error(`Failed to fetch MCP registry: ${response.status}`);
31 }
32 const data = await response.json();
33 allServers.push(...data.servers);
34 cursor = data.metadata?.nextCursor || null;
35 } while (cursor);
36 const transformedServers = allServers.map(item => {
37 const server = item.server;
38 const meta = item._meta?.['com.anthropic.api/mcp-registry'] || ({});
39 const worksWith = meta.worksWith || [];
40 const availability = {
41 claudeCode: worksWith.includes('claude-code'),
42 mcpConnector: worksWith.includes('claude-api'),
43 claudeDesktop: worksWith.includes('claude-desktop')
44 };
45 const remotes = server.remotes || [];
46 const httpRemote = remotes.find(r => r.type === 'streamable-http');
47 const sseRemote = remotes.find(r => r.type === 'sse');
48 const preferredRemote = httpRemote || sseRemote;
49 const remoteUrl = preferredRemote?.url || meta.url;
50 const remoteType = preferredRemote?.type;
51 const isTemplatedUrl = remoteUrl?.includes('{');
52 let setupUrl;
53 if (isTemplatedUrl && meta.requiredFields) {
54 const urlField = meta.requiredFields.find(f => f.field === 'url');
55 setupUrl = urlField?.sourceUrl || meta.documentation;
56 }
57 const urls = {};
58 if (!isTemplatedUrl) {
59 if (remoteType === 'streamable-http') {
60 urls.http = remoteUrl;
61 } else if (remoteType === 'sse') {
62 urls.sse = remoteUrl;
63 }
64 }
65 let envVars = [];
66 if (server.packages && server.packages.length > 0) {
67 const npmPackage = server.packages.find(p => p.registryType === 'npm');
68 if (npmPackage) {
69 urls.stdio = `npx -y ${npmPackage.identifier}`;
70 if (npmPackage.environmentVariables) {
71 envVars = npmPackage.environmentVariables;
72 }
73 }
74 }
75 return {
76 name: meta.displayName || server.title || server.name,
77 description: meta.oneLiner || server.description,
78 documentation: meta.documentation,
79 urls: urls,
80 envVars: envVars,
81 availability: availability,
82 customCommands: meta.claudeCodeCopyText ? {
83 claudeCode: meta.claudeCodeCopyText
84 } : undefined,
85 setupUrl: setupUrl
86 };
87 });
88 setServers(transformedServers);
89 setError(null);
90 } catch (err) {
91 setError(err.message);
92 console.error('Error fetching MCP registry:', err);
93 } finally {
94 setLoading(false);
95 }
96 };
97 fetchServers();
98 }, []);
99 const generateClaudeCodeCommand = server => {
100 if (server.customCommands && server.customCommands.claudeCode) {
101 return server.customCommands.claudeCode.replace('--transport streamable-http', '--transport http');
102 }
103 const serverSlug = server.name.toLowerCase().replace(/[^a-z0-9]/g, '-');
104 if (server.urls.http) {
105 return `claude mcp add ${serverSlug} --transport http ${server.urls.http}`;
106 }
107 if (server.urls.sse) {
108 return `claude mcp add ${serverSlug} --transport sse ${server.urls.sse}`;
109 }
110 if (server.urls.stdio) {
111 const envFlags = server.envVars && server.envVars.length > 0 ? server.envVars.map(v => `--env ${v.name}=YOUR_${v.name}`).join(' ') : '';
112 const baseCommand = `claude mcp add ${serverSlug} --transport stdio`;
113 return envFlags ? `${baseCommand} ${envFlags} -- ${server.urls.stdio}` : `${baseCommand} -- ${server.urls.stdio}`;
114 }
115 return null;
116 };
117 if (loading) {
118 return <div>Loading MCP servers...</div>;
119 }
120 if (error) {
121 return <div>Error loading MCP servers: {error}</div>;
122 }
123 const filteredServers = servers.filter(server => {
124 if (platform === "claudeCode") {
125 return server.availability.claudeCode;
126 } else if (platform === "mcpConnector") {
127 return server.availability.mcpConnector;
128 } else if (platform === "claudeDesktop") {
129 return server.availability.claudeDesktop;
130 } else if (platform === "all") {
131 return true;
132 } else {
133 throw new Error(`Unknown platform: ${platform}`);
134 }
135 });
136 return <>
137 <style jsx>{`
138 .cards-container {
139 display: grid;
140 gap: 1rem;
141 margin-bottom: 2rem;
142 }
143 .server-card {
144 border: 1px solid var(--border-color, #e5e7eb);
145 border-radius: 6px;
146 padding: 1rem;
147 }
148 .command-row {
149 display: flex;
150 align-items: center;
151 gap: 0.25rem;
152 }
153 .command-row code {
154 font-size: 0.75rem;
155 overflow-x: auto;
156 }
157 `}</style>
158
159 <div className="cards-container">
160 {filteredServers.map(server => {
161 const claudeCodeCommand = generateClaudeCodeCommand(server);
162 const mcpUrl = server.urls.http || server.urls.sse;
163 const commandToShow = platform === "claudeCode" ? claudeCodeCommand : mcpUrl;
164 return <div key={server.name} className="server-card">
165 <div>
166 {server.documentation ? <a href={server.documentation}>
167 <strong>{server.name}</strong>
168 </a> : <strong>{server.name}</strong>}
169 </div>
170
171 <p style={{
172 margin: '0.5rem 0',
173 fontSize: '0.9rem'
174 }}>
175 {server.description}
176 </p>
177
178 {server.setupUrl && <p style={{
179 margin: '0.25rem 0',
180 fontSize: '0.8rem',
181 fontStyle: 'italic',
182 opacity: 0.7
183 }}>
184 Requires user-specific URL.{' '}
185 <a href={server.setupUrl} style={{
186 textDecoration: 'underline'
187 }}>
188 Get your URL here
189 </a>.
190 </p>}
191
192 {commandToShow && !server.setupUrl && <>
193 <p style={{
194 display: 'block',
195 fontSize: '0.75rem',
196 fontWeight: 500,
197 minWidth: 'fit-content',
198 marginTop: '0.5rem',
199 marginBottom: 0
200 }}>
201 {platform === "claudeCode" ? "Command" : "URL"}
202 </p>
203 <div className="command-row">
204 <code>
205 {commandToShow}
206 </code>
207 </div>
208 </>}
209 </div>;
210 })}
211 </div>
212 </>;
213};
214
215Claude Code 可以通过 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction)(一个用于 AI 工具集成的开源标准)连接到数百个外部工具和数据源。MCP 服务器为 Claude Code 提供对您的工具、数据库和 API 的访问权限。
216
217当您发现自己从另一个工具(如问题跟踪器或监控仪表板)复制数据到聊天中时,请连接一个服务器。连接后,Claude 可以直接读取和操作该系统,而不是从您粘贴的内容中工作。
218
219## 使用 MCP 可以做什么
220
221连接 MCP 服务器后,您可以要求 Claude Code:
222
223* **从问题跟踪器实现功能**:"添加 JIRA 问题 ENG-4521 中描述的功能,并在 GitHub 上创建 PR。"
224* **分析监控数据**:"检查 Sentry 和 Statsig 以检查 ENG-4521 中描述的功能的使用情况。"
225* **查询数据库**:"根据我们的 PostgreSQL 数据库,查找使用功能 ENG-4521 的 10 个随机用户的电子邮件。"
226* **集成设计**:"根据在 Slack 中发布的新 Figma 设计更新我们的标准电子邮件模板"
227* **自动化工作流**:"创建 Gmail 草稿,邀请这 10 个用户参加关于新功能的反馈会议。"
228* **对外部事件做出反应**:MCP 服务器也可以充当[频道](/zh-CN/channels),将消息推送到您的会话中,因此当您不在时,Claude 可以对 Telegram 消息、Discord 聊天或 webhook 事件做出反应。
229
230## 流行的 MCP 服务器
231
232以下是一些您可以连接到 Claude Code 的常用 MCP 服务器:
233
234<Warning>
235 使用第三方 MCP 服务器需自担风险 - Anthropic 尚未验证所有这些服务器的正确性或安全性。
236 请确保您信任正在安装的 MCP 服务器。
237 使用可能获取不受信任内容的 MCP 服务器时要特别小心,因为这些可能会使您面临提示注入风险。
238</Warning>
239
240<MCPServersTable platform="claudeCode" />
241
242<Note>
243 **需要特定的集成?** [在 GitHub 上查找数百个更多 MCP 服务器](https://github.com/modelcontextprotocol/servers),或使用 [MCP SDK](https://modelcontextprotocol.io/quickstart/server) 构建您自己的服务器。
244</Note>
245
246## 安装 MCP 服务器
247
248MCP 服务器可以根据您的需求以三种不同的方式进行配置:
249
250### 选项 1:添加远程 HTTP 服务器
251
252HTTP 服务器是连接到远程 MCP 服务器的推荐选项。这是云服务最广泛支持的传输方式。
253
254```bash theme={null}
255# 基本语法
256claude mcp add --transport http <name> <url>
257
258# 真实示例:连接到 Notion
259claude mcp add --transport http notion https://mcp.notion.com/mcp
260
261# 带有 Bearer 令牌的示例
262claude mcp add --transport http secure-api https://api.example.com/mcp \
263 --header "Authorization: Bearer your-token"
264```
265
266### 选项 2:添加远程 SSE 服务器
267
268<Warning>
269 SSE (Server-Sent Events) 传输已弃用。请在可用的地方使用 HTTP 服务器。
270</Warning>
271
272```bash theme={null}
273# 基本语法
274claude mcp add --transport sse <name> <url>
275
276# 真实示例:连接到 Asana
277claude mcp add --transport sse asana https://mcp.asana.com/sse
278
279# 带有身份验证标头的示例
280claude mcp add --transport sse private-api https://api.company.com/sse \
281 --header "X-API-Key: your-key-here"
282```
283
284### 选项 3:添加本地 stdio 服务器
285
286Stdio 服务器作为您机器上的本地进程运行。它们非常适合需要直接系统访问或自定义脚本的工具。
287
288```bash theme={null}
289# 基本语法
290claude mcp add [options] <name> -- <command> [args...]
291
292# 真实示例:添加 Airtable 服务器
293claude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \
294 -- npx -y airtable-mcp-server
295```
296
297<Note>
298 **重要:选项顺序**
299
300 所有选项(`--transport`、`--env`、`--scope`、`--header`)必须在服务器名称**之前**。然后 `--`(双破折号)将服务器名称与传递给 MCP 服务器的命令和参数分开。
301
302 例如:
303
304 * `claude mcp add --transport stdio myserver -- npx server` → 运行 `npx server`
305 * `claude mcp add --transport stdio --env KEY=value myserver -- python server.py --port 8080` → 运行 `python server.py --port 8080`,环境中有 `KEY=value`
306
307 这可以防止 Claude 的标志与服务器标志之间的冲突。
308</Note>
309
310### 管理您的服务器
311
312配置后,您可以使用这些命令管理您的 MCP 服务器:
313
314```bash theme={null}
315# 列出所有配置的服务器
316claude mcp list
317
318# 获取特定服务器的详细信息
319claude mcp get github
320
321# 删除服务器
322claude mcp remove github
323
324# (在 Claude Code 中)检查服务器状态
325/mcp
326```
327
328### 动态工具更新
329
330Claude Code 支持 MCP `list_changed` 通知,允许 MCP 服务器动态更新其可用工具、提示和资源,而无需您断开连接并重新连接。当 MCP 服务器发送 `list_changed` 通知时,Claude Code 会自动刷新来自该服务器的可用功能。
331
332### 自动重新连接
333
334如果 HTTP 或 SSE 服务器在会话中途断开连接,Claude Code 会自动以指数退避方式重新连接:最多五次尝试,从一秒延迟开始,每次加倍。服务器在 `/mcp` 中显示为待处理状态,同时重新连接正在进行中。五次失败尝试后,服务器被标记为失败,您可以从 `/mcp` 手动重试。Stdio 服务器是本地进程,不会自动重新连接。
335
336相同的退避策略也适用于 HTTP 或 SSE 服务器在启动时初始连接失败的情况。从 v2.1.121 开始,Claude Code 在瞬时错误(如 5xx 响应、连接被拒绝或超时)上最多重试初始连接三次,如果仍然无法连接,则将服务器标记为失败。身份验证和未找到错误不会重试,因为它们需要配置更改才能解决。
337
338### 使用频道推送消息
339
340MCP 服务器也可以直接将消息推送到您的会话中,以便 Claude 可以对外部事件(如 CI 结果、监控警报或聊天消息)做出反应。要启用此功能,您的服务器声明 `claude/channel` 功能,并在启动时使用 `--channels` 标志选择加入。请参阅[频道](/zh-CN/channels)以使用官方支持的频道,或[频道参考](/zh-CN/channels-reference)以构建您自己的频道。
341
342<Tip>
343 提示:
344
345 * 使用 `--scope` 标志指定配置的存储位置:
346 * `local`(默认):仅在当前项目中对您可用(在较旧版本中称为 `project`)
347 * `project`:通过 `.mcp.json` 文件与项目中的每个人共享
348 * `user`:在所有项目中对您可用(在较旧版本中称为 `global`)
349 * 使用 `--env` 标志设置环境变量(例如,`--env KEY=value`)
350 * 使用 MCP\_TIMEOUT 环境变量配置 MCP 服务器启动超时(例如,`MCP_TIMEOUT=10000 claude` 设置 10 秒超时)
351 * 当 MCP 工具输出超过 10,000 个令牌时,Claude Code 将显示警告。要增加此限制,请设置 `MAX_MCP_OUTPUT_TOKENS` 环境变量(例如,`MAX_MCP_OUTPUT_TOKENS=50000`)
352 * 使用 `/mcp` 对需要 OAuth 2.0 身份验证的远程服务器进行身份验证
353</Tip>
354
355### 插件提供的 MCP 服务器
356
357[插件](/zh-CN/plugins)可以捆绑 MCP 服务器,在启用插件时自动提供工具和集成。插件 MCP 服务器的工作方式与用户配置的服务器相同。
358
359**插件 MCP 服务器的工作原理**:
360
361* 插件在插件根目录的 `.mcp.json` 中或在 `plugin.json` 中内联定义 MCP 服务器
362* 启用插件时,其 MCP 服务器会自动启动
363* 插件 MCP 工具与手动配置的 MCP 工具一起出现
364* 插件服务器通过插件安装进行管理(不是 `/mcp` 命令)
365
366**示例插件 MCP 配置**:
367
368在插件根目录的 `.mcp.json` 中:
369
370```json theme={null}
371{
372 "mcpServers": {
373 "database-tools": {
374 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
375 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
376 "env": {
377 "DB_URL": "${DB_URL}"
378 }
379 }
380 }
381}
382```
383
384或在 `plugin.json` 中内联:
385
386```json theme={null}
387{
388 "name": "my-plugin",
389 "mcpServers": {
390 "plugin-api": {
391 "command": "${CLAUDE_PLUGIN_ROOT}/servers/api-server",
392 "args": ["--port", "8080"]
393 }
394 }
395}
396```
397
398**插件 MCP 功能**:
399
400* **自动生命周期**:在会话启动时,启用的插件的服务器会自动连接。如果您在会话期间启用或禁用插件,请运行 `/reload-plugins` 以连接或断开其 MCP 服务器
401* **环境变量**:对插件相对路径使用 `${CLAUDE_PLUGIN_ROOT}`,对[持久状态](/zh-CN/plugins-reference#persistent-data-directory)使用 `${CLAUDE_PLUGIN_DATA}`,该状态在插件更新后仍然存在
402* **用户环境访问**:访问与手动配置的服务器相同的环境变量
403* **多种传输类型**:支持 stdio、SSE 和 HTTP 传输(传输支持可能因服务器而异)
404
405**查看插件 MCP 服务器**:
406
407```bash theme={null}
408# 在 Claude Code 中,查看所有 MCP 服务器,包括插件服务器
409/mcp
410```
411
412插件服务器在列表中出现,并带有指示它们来自插件的指示符。
413
414**插件 MCP 服务器的优势**:
415
416* **捆绑分发**:工具和服务器打包在一起
417* **自动设置**:无需手动 MCP 配置
418* **团队一致性**:安装插件时每个人都获得相同的工具
419
420有关使用插件捆绑 MCP 服务器的详细信息,请参阅[插件组件参考](/zh-CN/plugins-reference#mcp-servers)。
421
422## MCP 安装范围
423
424MCP 服务器可以在三个不同的范围级别进行配置。您选择的范围控制服务器在哪些项目中加载以及配置是否与您的团队共享。
425
426| 范围 | 加载位置 | 与团队共享 | 存储位置 |
427| -------------------- | ------ | -------- | ------------------- |
428| [本地](#local-scope) | 仅当前项目 | 否 | `~/.claude.json` |
429| [项目](#project-scope) | 仅当前项目 | 是,通过版本控制 | 项目根目录中的 `.mcp.json` |
430| [用户](#user-scope) | 您的所有项目 | 否 | `~/.claude.json` |
431
432### 本地范围
433
434本地范围是默认范围。本地范围的服务器仅在您添加它的项目中加载,并对您保持私密。Claude Code 将其存储在 `~/.claude.json` 中该项目的路径下,因此相同的服务器不会出现在您的其他项目中。对个人开发服务器、实验配置或包含您不想在版本控制中的凭据的服务器使用本地范围。
435
436<Note>
437 MCP 服务器的"本地范围"术语与一般本地设置不同。MCP 本地范围的服务器存储在 `~/.claude.json`(您的主目录)中,而一般本地设置使用 `.claude/settings.local.json`(在项目目录中)。有关设置文件位置的详细信息,请参阅[设置](/zh-CN/settings#settings-files)。
438</Note>
439
440```bash theme={null}
441# 添加本地范围的服务器(默认)
442claude mcp add --transport http stripe https://mcp.stripe.com
443
444# 显式指定本地范围
445claude mcp add --transport http stripe --scope local https://mcp.stripe.com
446```
447
448从 `/path/to/your/project` 运行时,该命令将服务器写入 `~/.claude.json` 中您当前项目的条目。下面的示例显示结果:
449
450```json theme={null}
451{
452 "projects": {
453 "/path/to/your/project": {
454 "mcpServers": {
455 "stripe": {
456 "type": "http",
457 "url": "https://mcp.stripe.com"
458 }
459 }
460 }
461 }
462}
463```
464
465### 项目范围
466
467项目范围的服务器通过在项目根目录中存储配置在 `.mcp.json` 文件中来启用团队协作。此文件设计为检入版本控制,确保所有团队成员都可以访问相同的 MCP 工具和服务。添加项目范围的服务器时,Claude Code 会自动创建或更新此文件,使用适当的配置结构。
468
469```bash theme={null}
470# 添加项目范围的服务器
471claude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp
472```
473
474生成的 `.mcp.json` 文件遵循标准化格式:
475
476```json theme={null}
477{
478 "mcpServers": {
479 "shared-server": {
480 "command": "/path/to/server",
481 "args": [],
482 "env": {}
483 }
484 }
485}
486```
487
488出于安全原因,Claude Code 在使用来自 `.mcp.json` 文件的项目范围的服务器之前会提示批准。如果您需要重置这些批准选择,请使用 `claude mcp reset-project-choices` 命令。
489
490### 用户范围
491
492用户范围的服务器存储在 `~/.claude.json` 中,并提供跨项目可访问性,使其在您机器上的所有项目中可用,同时对您的用户帐户保持私密。此范围适用于个人实用程序服务器、开发工具或您在不同项目中经常使用的服务。
493
494```bash theme={null}
495# 添加用户服务器
496claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic
497```
498
499### 范围层次结构和优先级
500
501当具有相同名称的服务器在多个位置定义时,Claude Code 连接到它一次,使用来自最高优先级源的定义:
502
5031. 本地范围
5042. 项目范围
5053. 用户范围
5064. [插件提供的服务器](/zh-CN/plugins)
5075. [claude.ai 连接器](#use-mcp-servers-from-claude-ai)
508
509三个范围按名称匹配重复项。插件和连接器按端点匹配,因此指向与上述服务器相同的 URL 或命令的连接器被视为重复项。
510
511### `.mcp.json` 中的环境变量扩展
512
513Claude Code 支持 `.mcp.json` 文件中的环境变量扩展,允许团队共享配置,同时为特定于机器的路径和 API 密钥等敏感值保持灵活性。
514
515**支持的语法:**
516
517* `${VAR}` - 扩展为环境变量 `VAR` 的值
518* `${VAR:-default}` - 如果设置了 `VAR`,则扩展为 `VAR`,否则使用 `default`
519
520**扩展位置:**
521环境变量可以在以下位置扩展:
522
523* `command` - 服务器可执行文件路径
524* `args` - 命令行参数
525* `env` - 传递给服务器的环境变量
526* `url` - 对于 HTTP 服务器类型
527* `headers` - 对于 HTTP 服务器身份验证
528
529**带有变量扩展的示例:**
530
531```json theme={null}
532{
533 "mcpServers": {
534 "api-server": {
535 "type": "http",
536 "url": "${API_BASE_URL:-https://api.example.com}/mcp",
537 "headers": {
538 "Authorization": "Bearer ${API_KEY}"
539 }
540 }
541 }
542}
543```
544
545如果未设置所需的环境变量且没有默认值,Claude Code 将无法解析配置。
546
547## 实际示例
548
549{/* ### 示例:使用 Playwright 自动化浏览器测试
550
551```bash
552claude mcp add --transport stdio playwright -- npx -y @playwright/mcp@latest
553```
554
555然后编写并运行浏览器测试:
556
557```text
558Test if the login flow works with test@example.com
559```
560```text
561Take a screenshot of the checkout page on mobile
562```
563```text
564Verify that the search feature returns results
565``` */}
566
567### 示例:使用 Sentry 监控错误
568
569```bash theme={null}
570claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
571```
572
573使用您的 Sentry 帐户进行身份验证:
574
575```text theme={null}
576/mcp
577```
578
579然后调试生产问题:
580
581```text theme={null}
582过去 24 小时内最常见的错误是什么?
583```
584
585```text theme={null}
586显示我错误 ID abc123 的堆栈跟踪
587```
588
589```text theme={null}
590哪个部署引入了这些新错误?
591```
592
593### 示例:连接到 GitHub 进行代码审查
594
595GitHub 的远程 MCP 服务器使用作为标头传递的 GitHub 个人访问令牌进行身份验证。要获取一个,请打开您的 [GitHub 令牌设置](https://github.com/settings/personal-access-tokens),生成一个新的细粒度令牌,具有对您希望 Claude 使用的存储库的访问权限,然后添加服务器:
596
597```bash theme={null}
598claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
599 --header "Authorization: Bearer YOUR_GITHUB_PAT"
600```
601
602然后使用 GitHub:
603
604```text theme={null}
605审查 PR #456 并建议改进
606```
607
608```text theme={null}
609为我们刚发现的错误创建新问题
610```
611
612```text theme={null}
613显示分配给我的所有开放 PR
614```
615
616### 示例:查询您的 PostgreSQL 数据库
617
618```bash theme={null}
619claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \
620 --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"
621```
622
623然后自然地查询您的数据库:
624
625```text theme={null}
626本月我们的总收入是多少?
627```
628
629```text theme={null}
630显示订单表的架构
631```
632
633```text theme={null}
634查找 90 天内未进行购买的客户
635```
636
637## 使用远程 MCP 服务器进行身份验证
638
639许多基于云的 MCP 服务器需要身份验证。Claude Code 支持 OAuth 2.0 以实现安全连接。
640
641<Steps>
642 <Step title="添加需要身份验证的服务器">
643 例如:
644
645 ```bash theme={null}
646 claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
647 ```
648 </Step>
649
650 <Step title="在 Claude Code 中使用 /mcp 命令">
651 在 Claude Code 中,使用命令:
652
653 ```text theme={null}
654 /mcp
655 ```
656
657 然后按照浏览器中的步骤登录。
658 </Step>
659</Steps>
660
661<Tip>
662 提示:
663
664 * 身份验证令牌安全存储并自动刷新
665 * 使用 `/mcp` 菜单中的"清除身份验证"撤销访问权限
666 * 如果您的浏览器没有自动打开,请复制提供的 URL 并手动打开
667 * 如果浏览器重定向在身份验证后失败并出现连接错误,请将浏览器地址栏中的完整回调 URL 粘贴到 Claude Code 中出现的 URL 提示中
668 * OAuth 身份验证适用于 HTTP 服务器
669</Tip>
670
671### 使用固定的 OAuth 回调端口
672
673某些 MCP 服务器需要预先注册的特定重定向 URI。默认情况下,Claude Code 为 OAuth 回调选择随机可用端口。使用 `--callback-port` 固定端口,使其与 `http://localhost:PORT/callback` 形式的预注册重定向 URI 匹配。
674
675您可以单独使用 `--callback-port`(使用动态客户端注册)或与 `--client-id` 一起使用(使用预配置的凭据)。
676
677```bash theme={null}
678# 使用动态客户端注册的固定回调端口
679claude mcp add --transport http \
680 --callback-port 8080 \
681 my-server https://mcp.example.com/mcp
682```
683
684### 使用预配置的 OAuth 凭据
685
686某些 MCP 服务器不支持通过动态客户端注册进行自动 OAuth 设置。如果您看到类似"不兼容的身份验证服务器:不支持动态客户端注册"的错误,服务器需要预配置的凭据。Claude Code 也支持使用客户端 ID 元数据文档 (CIMD) 而不是动态客户端注册的服务器,并自动发现这些服务器。如果自动发现失败,请首先通过服务器的开发者门户注册 OAuth 应用,然后在添加服务器时提供凭据。
687
688<Steps>
689 <Step title="使用服务器注册 OAuth 应用">
690 通过服务器的开发者门户创建应用,并记下您的客户端 ID 和客户端密钥。
691
692 许多服务器还需要重定向 URI。如果是这样,请选择一个端口并以 `http://localhost:PORT/callback` 的格式注册重定向 URI。在下一步中使用该相同的端口与 `--callback-port`。
693 </Step>
694
695 <Step title="使用您的凭据添加服务器">
696 选择以下方法之一。用于 `--callback-port` 的端口可以是任何可用的端口。它只需要与您在上一步中注册的重定向 URI 匹配。
697
698 <Tabs>
699 <Tab title="claude mcp add">
700 使用 `--client-id` 传递您的应用的客户端 ID。`--client-secret` 标志使用掩盖的输入提示输入密钥:
701
702 ```bash theme={null}
703 claude mcp add --transport http \
704 --client-id your-client-id --client-secret --callback-port 8080 \
705 my-server https://mcp.example.com/mcp
706 ```
707 </Tab>
708
709 <Tab title="claude mcp add-json">
710 在 JSON 配置中包含 `oauth` 对象,并将 `--client-secret` 作为单独的标志传递:
711
712 ```bash theme={null}
713 claude mcp add-json my-server \
714 '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' \
715 --client-secret
716 ```
717 </Tab>
718
719 <Tab title="claude mcp add-json(仅回调端口)">
720 使用 `--callback-port` 而不使用客户端 ID 来固定端口,同时使用动态客户端注册:
721
722 ```bash theme={null}
723 claude mcp add-json my-server \
724 '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"callbackPort":8080}}'
725 ```
726 </Tab>
727
728 <Tab title="CI / 环境变量">
729 通过环境变量设置密钥以跳过交互式提示:
730
731 ```bash theme={null}
732 MCP_CLIENT_SECRET=your-secret claude mcp add --transport http \
733 --client-id your-client-id --client-secret --callback-port 8080 \
734 my-server https://mcp.example.com/mcp
735 ```
736 </Tab>
737 </Tabs>
738 </Step>
739
740 <Step title="在 Claude Code 中进行身份验证">
741 在 Claude Code 中运行 `/mcp` 并按照浏览器登录流程。
742 </Step>
743</Steps>
744
745<Tip>
746 提示:
747
748 * 客户端密钥安全地存储在您的系统钥匙链(macOS)或凭据文件中,而不是在您的配置中
749 * 如果服务器使用没有密钥的公共 OAuth 客户端,仅使用 `--client-id` 而不使用 `--client-secret`
750 * `--callback-port` 可以与或不与 `--client-id` 一起使用
751 * 这些标志仅适用于 HTTP 和 SSE 传输。它们对 stdio 服务器没有影响
752 * 使用 `claude mcp get <name>` 验证为服务器配置了 OAuth 凭据
753</Tip>
754
755### 覆盖 OAuth 元数据发现
756
757指向 Claude Code 一个特定的 OAuth 授权服务器元数据 URL 以绕过默认发现链。当 MCP 服务器的标准端点出错时,或当您想通过内部代理路由发现时,设置 `authServerMetadataUrl`。默认情况下,Claude Code 首先检查 RFC 9728 受保护资源元数据(位于 `/.well-known/oauth-protected-resource`),然后回退到 RFC 8414 授权服务器元数据(位于 `/.well-known/oauth-authorization-server`)。
758
759在您的服务器配置中的 `.mcp.json` 的 `oauth` 对象中设置 `authServerMetadataUrl`:
760
761```json theme={null}
762{
763 "mcpServers": {
764 "my-server": {
765 "type": "http",
766 "url": "https://mcp.example.com/mcp",
767 "oauth": {
768 "authServerMetadataUrl": "https://auth.example.com/.well-known/openid-configuration"
769 }
770 }
771 }
772}
773```
774
775URL 必须使用 `https://`。`authServerMetadataUrl` 需要 Claude Code v2.1.64 或更高版本。元数据 URL 的 `scopes_supported` 覆盖上游服务器公开的范围。
776
777### 限制 OAuth 范围
778
779设置 `oauth.scopes` 以固定 Claude Code 在授权流程中请求的范围。这是限制 MCP 服务器到安全团队批准的子集的支持方式,当上游授权服务器公开的范围超过您想要授予的范围时。该值是单个空格分隔的字符串,与 RFC 6749 §3.3 中的 `scope` 参数格式匹配。
780
781```json theme={null}
782{
783 "mcpServers": {
784 "slack": {
785 "type": "http",
786 "url": "https://mcp.slack.com/mcp",
787 "oauth": {
788 "scopes": "channels:read chat:write search:read"
789 }
790 }
791 }
792}
793```
794
795`oauth.scopes` 优先于 `authServerMetadataUrl` 和服务器在 `/.well-known` 发现的范围。将其保留未设置以让 MCP 服务器确定请求的范围集。
796
797如果授权服务器在 `scopes_supported` 中公开 `offline_access`,Claude Code 会将其附加到固定范围,以便可以在没有新浏览器登录的情况下刷新访问令牌。
798
799如果服务器稍后为工具调用返回 403 `insufficient_scope`,Claude Code 会使用相同的固定范围重新进行身份验证。当您需要的工具需要固定范围之外的范围时,扩展 `oauth.scopes`。
800
801### 使用动态标头进行自定义身份验证
802
803如果您的 MCP 服务器使用 OAuth 以外的身份验证方案(例如 Kerberos、短期令牌或内部 SSO),请使用 `headersHelper` 在连接时生成请求标头。Claude Code 运行命令并将其输出合并到连接标头中。
804
805```json theme={null}
806{
807 "mcpServers": {
808 "internal-api": {
809 "type": "http",
810 "url": "https://mcp.internal.example.com",
811 "headersHelper": "/opt/bin/get-mcp-auth-headers.sh"
812 }
813 }
814}
815```
816
817命令也可以是内联的:
818
819```json theme={null}
820{
821 "mcpServers": {
822 "internal-api": {
823 "type": "http",
824 "url": "https://mcp.internal.example.com",
825 "headersHelper": "echo '{\"Authorization\": \"Bearer '\"$(get-token)\"'\"}'"
826 }
827 }
828}
829```
830
831**要求:**
832
833* 命令必须将字符串键值对的 JSON 对象写入标准输出
834* 命令在 shell 中运行,超时时间为 10 秒
835* 动态标头覆盖任何具有相同名称的静态 `headers`
836
837助手在每次连接时运行(在会话启动和重新连接时)。没有缓存,因此您的脚本负责任何令牌重用。
838
839Claude Code 在执行助手时设置这些环境变量:
840
841| 变量 | 值 |
842| :---------------------------- | :----------- |
843| `CLAUDE_CODE_MCP_SERVER_NAME` | MCP 服务器的名称 |
844| `CLAUDE_CODE_MCP_SERVER_URL` | MCP 服务器的 URL |
845
846使用这些来编写一个为多个 MCP 服务器服务的单个助手脚本。
847
848<Note>
849 `headersHelper` 执行任意 shell 命令。在项目或本地范围定义时,它仅在您接受工作区信任对话框后运行。
850</Note>
851
852## 从 JSON 配置添加 MCP 服务器
853
854如果您有 MCP 服务器的 JSON 配置,您可以直接添加它:
855
856<Steps>
857 <Step title="从 JSON 添加 MCP 服务器">
858 ```bash theme={null}
859 # 基本语法
860 claude mcp add-json <name> '<json>'
861
862 # 示例:添加带有 JSON 配置的 HTTP 服务器
863 claude mcp add-json weather-api '{"type":"http","url":"https://api.weather.com/mcp","headers":{"Authorization":"Bearer token"}}'
864
865 # 示例:添加带有 JSON 配置的 stdio 服务器
866 claude mcp add-json local-weather '{"type":"stdio","command":"/path/to/weather-cli","args":["--api-key","abc123"],"env":{"CACHE_DIR":"/tmp"}}'
867
868 # 示例:添加带有预配置 OAuth 凭据的 HTTP 服务器
869 claude mcp add-json my-server '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' --client-secret
870 ```
871 </Step>
872
873 <Step title="验证服务器已添加">
874 ```bash theme={null}
875 claude mcp get weather-api
876 ```
877 </Step>
878</Steps>
879
880<Tip>
881 提示:
882
883 * 确保 JSON 在您的 shell 中正确转义
884 * JSON 必须符合 MCP 服务器配置架构
885 * 您可以使用 `--scope user` 将服务器添加到您的用户配置而不是项目特定的配置
886</Tip>
887
888## 从 Claude Desktop 导入 MCP 服务器
889
890如果您已在 Claude Desktop 中配置了 MCP 服务器,您可以导入它们:
891
892<Steps>
893 <Step title="从 Claude Desktop 导入服务器">
894 ```bash theme={null}
895 # 基本语法
896 claude mcp add-from-claude-desktop
897 ```
898 </Step>
899
900 <Step title="选择要导入的服务器">
901 运行命令后,您将看到一个交互式对话框,允许您选择要导入的服务器。
902 </Step>
903
904 <Step title="验证服务器已导入">
905 ```bash theme={null}
906 claude mcp list
907 ```
908 </Step>
909</Steps>
910
911<Tip>
912 提示:
913
914 * 此功能仅在 macOS 和 Windows Subsystem for Linux (WSL) 上有效
915 * 它从这些平台上的标准位置读取 Claude Desktop 配置文件
916 * 使用 `--scope user` 标志将服务器添加到您的用户配置
917 * 导入的服务器将具有与 Claude Desktop 中相同的名称
918 * 如果具有相同名称的服务器已存在,它们将获得数字后缀(例如,`server_1`)
919</Tip>
920
921## 使用来自 Claude.ai 的 MCP 服务器
922
923如果您已使用 [Claude.ai](https://claude.ai) 帐户登录 Claude Code,您在 Claude.ai 中添加的 MCP 服务器会自动在 Claude Code 中可用:
924
925<Steps>
926 <Step title="在 Claude.ai 中配置 MCP 服务器">
927 在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 添加服务器。在 Team 和 Enterprise 计划上,仅管理员可以添加服务器。
928 </Step>
929
930 <Step title="对 MCP 服务器进行身份验证">
931 在 Claude.ai 中完成任何必需的身份验证步骤。
932 </Step>
933
934 <Step title="在 Claude Code 中查看和管理服务器">
935 在 Claude Code 中,使用命令:
936
937 ```text theme={null}
938 /mcp
939 ```
940
941 Claude.ai 服务器在列表中出现,并带有指示它们来自 Claude.ai 的指示符。
942 </Step>
943</Steps>
944
945要在 Claude Code 中禁用 claude.ai MCP 服务器,请将 `ENABLE_CLAUDEAI_MCP_SERVERS` 环境变量设置为 `false`:
946
947```bash theme={null}
948ENABLE_CLAUDEAI_MCP_SERVERS=false claude
949```
950
951## 将 Claude Code 用作 MCP 服务器
952
953您可以将 Claude Code 本身用作 MCP 服务器,其他应用程序可以连接到它:
954
955```bash theme={null}
956# 启动 Claude 作为 stdio MCP 服务器
957claude mcp serve
958```
959
960您可以通过将此配置添加到 claude\_desktop\_config.json 在 Claude Desktop 中使用它:
961
962```json theme={null}
963{
964 "mcpServers": {
965 "claude-code": {
966 "type": "stdio",
967 "command": "claude",
968 "args": ["mcp", "serve"],
969 "env": {}
970 }
971 }
972}
973```
974
975<Warning>
976 **配置可执行文件路径**:`command` 字段必须引用 Claude Code 可执行文件。如果 `claude` 命令不在您的系统 PATH 中,您需要指定可执行文件的完整路径。
977
978 要查找完整路径:
979
980 ```bash theme={null}
981 which claude
982 ```
983
984 然后在您的配置中使用完整路径:
985
986 ```json theme={null}
987 {
988 "mcpServers": {
989 "claude-code": {
990 "type": "stdio",
991 "command": "/full/path/to/claude",
992 "args": ["mcp", "serve"],
993 "env": {}
994 }
995 }
996 }
997 ```
998
999 没有正确的可执行文件路径,您会遇到类似 `spawn claude ENOENT` 的错误。
1000</Warning>
1001
1002<Tip>
1003 提示:
1004
1005 * 服务器提供对 Claude 的工具(如 View、Edit、LS 等)的访问权限。
1006 * 在 Claude Desktop 中,尝试要求 Claude 读取目录中的文件、进行编辑等。
1007 * 请注意,此 MCP 服务器仅向您的 MCP 客户端公开 Claude Code 的工具,因此您自己的客户端负责为单个工具调用实现用户确认。
1008</Tip>
1009
1010## MCP 输出限制和警告
1011
1012当 MCP 工具产生大量输出时,Claude Code 可帮助管理令牌使用情况,以防止压倒您的对话上下文:
1013
1014* **输出警告阈值**:当任何 MCP 工具输出超过 10,000 个令牌时,Claude Code 显示警告
1015* **可配置限制**:您可以使用 `MAX_MCP_OUTPUT_TOKENS` 环境变量调整最大允许的 MCP 输出令牌
1016* **默认限制**:默认最大值为 25,000 个令牌
1017* **范围**:环境变量适用于不声明自己限制的工具。声明 [`anthropic/maxResultSizeChars`](#raise-the-limit-for-a-specific-tool) 的工具对文本内容使用该值,无论 `MAX_MCP_OUTPUT_TOKENS` 设置为什么。返回图像数据的工具仍受 `MAX_MCP_OUTPUT_TOKENS` 限制
1018
1019要为产生大量输出的工具增加限制:
1020
1021```bash theme={null}
1022export MAX_MCP_OUTPUT_TOKENS=50000
1023claude
1024```
1025
1026这在使用以下 MCP 服务器时特别有用:
1027
1028* 查询大型数据集或数据库
1029* 生成详细的报告或文档
1030* 处理广泛的日志文件或调试信息
1031
1032### 为特定工具提高限制
1033
1034如果您正在构建 MCP 服务器,您可以通过在工具的 `tools/list` 响应条目中设置 `_meta["anthropic/maxResultSizeChars"]` 来允许单个工具返回大于默认持久化到磁盘阈值的结果。Claude Code 将该工具的阈值提高到注释值,最高为 500,000 个字符的硬上限。
1035
1036这对于返回本质上很大但必要的输出的工具很有用,例如数据库架构或完整文件树。没有注释,超过默认阈值的结果会被持久化到磁盘,并在对话中被文件引用替换。
1037
1038```json theme={null}
1039{
1040 "name": "get_schema",
1041 "description": "Returns the full database schema",
1042 "_meta": {
1043 "anthropic/maxResultSizeChars": 200000
1044 }
1045}
1046```
1047
1048对于文本内容,注释独立于 `MAX_MCP_OUTPUT_TOKENS` 应用,因此用户不需要为声明它的工具提高环境变量。返回图像数据的工具仍受令牌限制。
1049
1050<Warning>
1051 如果您经常遇到特定 MCP 服务器的输出警告,而您不控制这些服务器,请考虑增加 `MAX_MCP_OUTPUT_TOKENS` 限制。您也可以要求服务器作者添加 `anthropic/maxResultSizeChars` 注释或对其响应进行分页。注释对返回图像内容的工具没有影响;对于这些,提高 `MAX_MCP_OUTPUT_TOKENS` 是唯一的选择。
1052</Warning>
1053
1054## 响应 MCP 引发请求
1055
1056MCP 服务器可以在任务中途使用引发来请求您的结构化输入。当服务器需要无法自行获取的信息时,Claude Code 会显示交互式对话框并将您的响应传递回服务器。您无需进行任何配置:当服务器请求时,引发对话框会自动出现。
1057
1058服务器可以通过两种方式请求输入:
1059
1060* **表单模式**:Claude Code 显示一个对话框,其中包含服务器定义的表单字段(例如,用户名和密码提示)。填写字段并提交。
1061* **URL 模式**:Claude Code 打开浏览器 URL 以进行身份验证或批准。在浏览器中完成流程,然后在 CLI 中确认。
1062
1063要自动响应引发请求而不显示对话框,请使用 [`Elicitation` hook](/zh-CN/hooks#Elicitation)。
1064
1065如果您正在构建使用引发的 MCP 服务器,请参阅 [MCP 引发规范](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation)以了解协议详细信息和架构示例。
1066
1067## 使用 MCP 资源
1068
1069MCP 服务器可以公开资源,您可以使用 @ 提及来引用,类似于您引用文件的方式。
1070
1071### 引用 MCP 资源
1072
1073<Steps>
1074 <Step title="列出可用资源">
1075 在您的提示中键入 `@` 以查看来自所有连接的 MCP 服务器的可用资源。资源与文件一起出现在自动完成菜单中。
1076 </Step>
1077
1078 <Step title="引用特定资源">
1079 使用格式 `@server:protocol://resource/path` 来引用资源:
1080
1081 ```text theme={null}
1082 Can you analyze @github:issue://123 and suggest a fix?
1083 ```
1084
1085 ```text theme={null}
1086 Please review the API documentation at @docs:file://api/authentication
1087 ```
1088 </Step>
1089
1090 <Step title="多个资源引用">
1091 您可以在单个提示中引用多个资源:
1092
1093 ```text theme={null}
1094 Compare @postgres:schema://users with @docs:file://database/user-model
1095 ```
1096 </Step>
1097</Steps>
1098
1099<Tip>
1100 提示:
1101
1102 * 资源在引用时会自动获取并作为附件包含
1103 * 资源路径在 @ 提及自动完成中可进行模糊搜索
1104 * Claude Code 在服务器支持时自动提供列出和读取 MCP 资源的工具
1105 * 资源可以包含 MCP 服务器提供的任何类型的内容(文本、JSON、结构化数据等)
1106</Tip>
1107
1108## 使用 MCP 工具搜索进行扩展
1109
1110工具搜索通过延迟工具定义直到 Claude 需要它们来保持 MCP 上下文使用低。仅工具名称在会话启动时加载,因此添加更多 MCP 服务器对您的上下文窗口的影响最小。
1111
1112### 工作原理
1113
1114工具搜索默认启用。MCP 工具被延迟而不是预先加载到上下文中,Claude 使用搜索工具在任务需要时发现相关的工具。仅 Claude 实际使用的工具进入上下文。从您的角度来看,MCP 工具的工作方式与之前完全相同。
1115
1116如果您更喜欢基于阈值的加载,请设置 `ENABLE_TOOL_SEARCH=auto` 以在工具适合上下文窗口的 10% 内时预先加载架构,仅延迟溢出部分。有关所有选项,请参阅[配置工具搜索](#configure-tool-search)。
1117
1118### 对于 MCP 服务器作者
1119
1120如果您正在构建 MCP 服务器,启用工具搜索时服务器说明字段会变得更有用。服务器说明可帮助 Claude 了解何时搜索您的工具,类似于 [skills](/zh-CN/skills) 的工作方式。
1121
1122添加清晰、描述性的服务器说明,说明:
1123
1124* 您的工具处理的任务类别
1125* Claude 应何时搜索您的工具
1126* 您的服务器提供的关键功能
1127
1128Claude Code 将工具描述和服务器说明截断为每个 2KB。保持它们简洁以避免截断,并将关键详细信息放在开头。
1129
1130### 配置工具搜索
1131
1132工具搜索默认启用:MCP 工具被延迟并按需发现。在 Vertex AI 上默认禁用,它不接受工具搜索 beta 标头,以及当 `ANTHROPIC_BASE_URL` 指向非第一方主机时,因为大多数代理不转发 `tool_reference` 块。显式设置 `ENABLE_TOOL_SEARCH` 以选择加入。此功能需要支持 `tool_reference` 块的模型:Sonnet 4 及更高版本,或 Opus 4 及更高版本。Haiku 模型不支持工具搜索。
1133
1134使用 `ENABLE_TOOL_SEARCH` 环境变量控制工具搜索行为:
1135
1136| 值 | 行为 |
1137| :--------- | :--------------------------------------------------------------------- |
1138| (未设置) | 所有 MCP 工具被延迟并按需加载。在 Vertex AI 上或当 `ANTHROPIC_BASE_URL` 是非第一方主机时回退到预先加载 |
1139| `true` | 所有 MCP 工具被延迟,包括在 Vertex AI 上和对于非第一方 `ANTHROPIC_BASE_URL` |
1140| `auto` | 阈值模式:如果工具适合上下文窗口的 10% 内,则预先加载,否则延迟 |
1141| `auto:<N>` | 阈值模式,带有自定义百分比,其中 `<N>` 是 0-100(例如,`auto:5` 表示 5%) |
1142| `false` | 所有 MCP 工具预先加载,无延迟 |
1143
1144```bash theme={null}
1145# 使用自定义 5% 阈值
1146ENABLE_TOOL_SEARCH=auto:5 claude
1147
1148# 完全禁用工具搜索
1149ENABLE_TOOL_SEARCH=false claude
1150```
1151
1152或在您的[settings.json `env` 字段](/zh-CN/settings#available-settings)中设置值。
1153
1154您也可以专门禁用 `ToolSearch` 工具:
1155
1156```json theme={null}
1157{
1158 "permissions": {
1159 "deny": ["ToolSearch"]
1160 }
1161}
1162```
1163
1164### 豁免服务器延迟
1165
1166如果服务器的工具应始终对 Claude 可见而无需搜索步骤,请在该服务器的配置中将 `alwaysLoad` 设置为 `true`。来自该服务器的每个工具随后在会话启动时加载到上下文中,无论 `ENABLE_TOOL_SEARCH` 设置如何。对于 Claude 在每个回合都需要的少量工具,请使用此选项,因为每个预先加载的工具会消耗本来可用于您的对话的上下文。
1167
1168以下 `.mcp.json` 条目豁免一个 HTTP 服务器,同时保持其他服务器延迟:
1169
1170```json theme={null}
1171{
1172 "mcpServers": {
1173 "core-tools": {
1174 "type": "http",
1175 "url": "https://mcp.example.com/mcp",
1176 "alwaysLoad": true
1177 }
1178 }
1179}
1180```
1181
1182`alwaysLoad` 字段在所有服务器类型上可用,需要 Claude Code v2.1.121 或更高版本。MCP 服务器也可以通过在工具的 `_meta` 对象中包含 `"anthropic/alwaysLoad": true` 来标记单个工具为始终加载,这对该工具仅具有相同的效果。
1183
1184## 将 MCP 提示用作命令
1185
1186MCP 服务器可以公开在 Claude Code 中作为命令可用的提示。
1187
1188### 执行 MCP 提示
1189
1190<Steps>
1191 <Step title="发现可用的提示">
1192 键入 `/` 以查看所有可用的命令,包括来自 MCP 服务器的命令。MCP 提示以 `/mcp__servername__promptname` 的格式出现。
1193 </Step>
1194
1195 <Step title="执行不带参数的提示">
1196 ```text theme={null}
1197 /mcp__github__list_prs
1198 ```
1199 </Step>
1200
1201 <Step title="执行带参数的提示">
1202 许多提示接受参数。在命令后面用空格分隔传递它们:
1203
1204 ```text theme={null}
1205 /mcp__github__pr_review 456
1206 ```
1207
1208 ```text theme={null}
1209 /mcp__jira__create_issue "Bug in login flow" high
1210 ```
1211 </Step>
1212</Steps>
1213
1214<Tip>
1215 提示:
1216
1217 * MCP 提示从连接的服务器动态发现
1218 * 参数根据提示的定义参数进行解析
1219 * 提示结果直接注入到对话中
1220 * 服务器和提示名称被规范化(空格变为下划线)
1221</Tip>
1222
1223## 托管 MCP 配置
1224
1225对于需要对 MCP 服务器进行集中控制的组织,Claude Code 支持两个配置选项:
1226
12271. **使用 `managed-mcp.json` 的独占控制**:部署用户无法修改或扩展的固定 MCP 服务器集
12282. **使用允许列表/拒绝列表的基于策略的控制**:允许用户添加自己的服务器,但限制允许的服务器
1229
1230这些选项允许 IT 管理员:
1231
1232* **控制员工可以访问哪些 MCP 服务器**:在整个组织中部署一组标准化的已批准 MCP 服务器
1233* **防止未授权的 MCP 服务器**:限制用户添加未批准的 MCP 服务器
1234* **完全禁用 MCP**:如果需要,完全删除 MCP 功能
1235
1236### 选项 1:使用 managed-mcp.json 的独占控制
1237
1238部署 `managed-mcp.json` 文件时,它对所有 MCP 服务器进行**独占控制**。用户无法添加、修改或使用此文件中定义的任何 MCP 服务器以外的任何 MCP 服务器。这是希望完全控制的组织的最简单方法。
1239
1240系统管理员将配置文件部署到系统范围的目录:
1241
1242* macOS:`/Library/Application Support/ClaudeCode/managed-mcp.json`
1243* Linux 和 WSL:`/etc/claude-code/managed-mcp.json`
1244* Windows:`C:\Program Files\ClaudeCode\managed-mcp.json`
1245
1246<Note>
1247 这些是系统范围的路径(不是像 `~/Library/...` 这样的用户主目录),需要管理员权限。它们设计为由 IT 管理员部署。
1248</Note>
1249
1250`managed-mcp.json` 文件使用与标准 `.mcp.json` 文件相同的格式:
1251
1252```json theme={null}
1253{
1254 "mcpServers": {
1255 "github": {
1256 "type": "http",
1257 "url": "https://api.githubcopilot.com/mcp/"
1258 },
1259 "sentry": {
1260 "type": "http",
1261 "url": "https://mcp.sentry.dev/mcp"
1262 },
1263 "company-internal": {
1264 "type": "stdio",
1265 "command": "/usr/local/bin/company-mcp-server",
1266 "args": ["--config", "/etc/company/mcp-config.json"],
1267 "env": {
1268 "COMPANY_API_URL": "https://internal.company.com"
1269 }
1270 }
1271 }
1272}
1273```
1274
1275### 选项 2:使用允许列表和拒绝列表的基于策略的控制
1276
1277管理员可以允许用户配置自己的 MCP 服务器,而不是进行独占控制,同时对允许的服务器进行限制。此方法在[托管设置文件](/zh-CN/settings#settings-files)中使用 `allowedMcpServers` 和 `deniedMcpServers`。
1278
1279<Note>
1280 **在选项之间选择**:当您想要部署一组固定的服务器而不进行用户自定义时,使用选项 1(`managed-mcp.json`)。当您想要允许用户在策略约束内添加自己的服务器时,使用选项 2(允许列表/拒绝列表)。
1281</Note>
1282
1283#### 限制选项
1284
1285允许列表或拒绝列表中的每个条目可以通过三种方式限制服务器:
1286
12871. **按服务器名称** (`serverName`):匹配服务器的配置名称
12882. **按命令** (`serverCommand`):匹配用于启动 stdio 服务器的确切命令和参数
12893. **按 URL 模式** (`serverUrl`):匹配带有通配符支持的远程服务器 URL
1290
1291**重要**:每个条目必须恰好具有 `serverName`、`serverCommand` 或 `serverUrl` 之一。
1292
1293#### 示例配置
1294
1295```json theme={null}
1296{
1297 "allowedMcpServers": [
1298 // 按服务器名称允许
1299 { "serverName": "github" },
1300 { "serverName": "sentry" },
1301
1302 // 按确切命令允许(对于 stdio 服务器)
1303 { "serverCommand": ["npx", "-y", "@modelcontextprotocol/server-filesystem"] },
1304 { "serverCommand": ["python", "/usr/local/bin/approved-server.py"] },
1305
1306 // 按 URL 模式允许(对于远程服务器)
1307 { "serverUrl": "https://mcp.company.com/*" },
1308 { "serverUrl": "https://*.internal.corp/*" }
1309 ],
1310 "deniedMcpServers": [
1311 // 按服务器名称阻止
1312 { "serverName": "dangerous-server" },
1313
1314 // 按确切命令阻止(对于 stdio 服务器)
1315 { "serverCommand": ["npx", "-y", "unapproved-package"] },
1316
1317 // 按 URL 模式阻止(对于远程服务器)
1318 { "serverUrl": "https://*.untrusted.com/*" }
1319 ]
1320}
1321```
1322
1323#### 基于命令的限制如何工作
1324
1325**精确匹配**:
1326
1327* 命令数组必须**精确**匹配 - 命令和所有参数的顺序正确
1328* 示例:`["npx", "-y", "server"]` 将**不**匹配 `["npx", "server"]` 或 `["npx", "-y", "server", "--flag"]`
1329
1330**Stdio 服务器行为**:
1331
1332* 当允许列表包含**任何** `serverCommand` 条目时,stdio 服务器**必须**匹配其中一个命令
1333* Stdio 服务器在存在命令限制时无法仅按名称通过
1334* 这确保管理员可以强制执行允许运行哪些命令
1335
1336**非 stdio 服务器行为**:
1337
1338* 远程服务器(HTTP、SSE、WebSocket)在允许列表中存在 `serverUrl` 条目时使用基于 URL 的匹配
1339* 如果不存在 URL 条目,远程服务器回退到基于名称的匹配
1340* 命令限制不适用于远程服务器
1341
1342#### 基于 URL 的限制如何工作
1343
1344URL 模式使用 `*` 支持通配符以匹配任何字符序列。这对于允许整个域或子域很有用。
1345
1346**通配符示例**:
1347
1348* `https://mcp.company.com/*` - 允许特定域上的所有路径
1349* `https://*.example.com/*` - 允许 example.com 的任何子域
1350* `http://localhost:*/*` - 允许 localhost 上的任何端口
1351
1352**远程服务器行为**:
1353
1354* 当允许列表包含**任何** `serverUrl` 条目时,远程服务器**必须**匹配其中一个 URL 模式
1355* 远程服务器在存在 URL 限制时无法仅按名称通过
1356* 这确保管理员可以强制执行允许哪些远程端点
1357
1358<Accordion title="示例:仅 URL 允许列表">
1359 ```json theme={null}
1360 {
1361 "allowedMcpServers": [
1362 { "serverUrl": "https://mcp.company.com/*" },
1363 { "serverUrl": "https://*.internal.corp/*" }
1364 ]
1365 }
1366 ```
1367
1368 **结果**:
1369
1370 * `https://mcp.company.com/api` 处的 HTTP 服务器:✅ 允许(匹配 URL 模式)
1371 * `https://api.internal.corp/mcp` 处的 HTTP 服务器:✅ 允许(匹配通配符子域)
1372 * `https://external.com/mcp` 处的 HTTP 服务器:❌ 阻止(不匹配任何 URL 模式)
1373 * 任何命令的 Stdio 服务器:❌ 阻止(没有名称或命令条目可匹配)
1374</Accordion>
1375
1376<Accordion title="示例:仅命令允许列表">
1377 ```json theme={null}
1378 {
1379 "allowedMcpServers": [
1380 { "serverCommand": ["npx", "-y", "approved-package"] }
1381 ]
1382 }
1383 ```
1384
1385 **结果**:
1386
1387 * 带有 `["npx", "-y", "approved-package"]` 的 Stdio 服务器:✅ 允许(匹配命令)
1388 * 带有 `["node", "server.js"]` 的 Stdio 服务器:❌ 阻止(不匹配命令)
1389 * 名为"my-api"的 HTTP 服务器:❌ 阻止(没有名称条目可匹配)
1390</Accordion>
1391
1392<Accordion title="示例:混合名称和命令允许列表">
1393 ```json theme={null}
1394 {
1395 "allowedMcpServers": [
1396 { "serverName": "github" },
1397 { "serverCommand": ["npx", "-y", "approved-package"] }
1398 ]
1399 }
1400 ```
1401
1402 **结果**:
1403
1404 * 名为"local-tool"、带有 `["npx", "-y", "approved-package"]` 的 Stdio 服务器:✅ 允许(匹配命令)
1405 * 名为"local-tool"、带有 `["node", "server.js"]` 的 Stdio 服务器:❌ 阻止(命令条目存在但不匹配)
1406 * 名为"github"、带有 `["node", "server.js"]` 的 Stdio 服务器:❌ 阻止(当命令条目存在时,stdio 服务器必须匹配命令)
1407 * 名为"github"的 HTTP 服务器:✅ 允许(匹配名称)
1408 * 名为"other-api"的 HTTP 服务器:❌ 阻止(名称不匹配)
1409</Accordion>
1410
1411<Accordion title="示例:仅名称允许列表">
1412 ```json theme={null}
1413 {
1414 "allowedMcpServers": [
1415 { "serverName": "github" },
1416 { "serverName": "internal-tool" }
1417 ]
1418 }
1419 ```
1420
1421 **结果**:
1422
1423 * 名为"github"、任何命令的 Stdio 服务器:✅ 允许(没有命令限制)
1424 * 名为"internal-tool"、任何命令的 Stdio 服务器:✅ 允许(没有命令限制)
1425 * 名为"github"的 HTTP 服务器:✅ 允许(匹配名称)
1426 * 任何名为"other"的服务器:❌ 阻止(名称不匹配)
1427</Accordion>
1428
1429#### 允许列表行为 (`allowedMcpServers`)
1430
1431* `undefined`(默认):无限制 - 用户可以配置任何 MCP 服务器
1432* 空数组 `[]`:完全锁定 - 用户无法配置任何 MCP 服务器
1433* 条目列表:用户只能配置按名称、命令或 URL 模式匹配的服务器
1434
1435#### 拒绝列表行为 (`deniedMcpServers`)
1436
1437* `undefined`(默认):没有服务器被阻止
1438* 空数组 `[]`:没有服务器被阻止
1439* 条目列表:指定的服务器在所有范围内被显式阻止
1440
1441#### 重要说明
1442
1443* **选项 1 和选项 2 可以组合**:如果 `managed-mcp.json` 存在,它具有独占控制,用户无法添加服务器。允许列表/拒绝列表仍然适用于托管服务器本身。
1444* **拒绝列表具有绝对优先级**:如果服务器匹配拒绝列表条目(按名称、命令或 URL),即使它在允许列表上,它也会被阻止
1445* 基于名称、基于命令和基于 URL 的限制一起工作:如果服务器匹配**任何**名称条目、命令条目或 URL 模式,它就会通过(除非被拒绝列表阻止)
1446
1447<Note>
1448 **使用 `managed-mcp.json` 时**:用户无法通过 `claude mcp add` 或配置文件添加 MCP 服务器。`allowedMcpServers` 和 `deniedMcpServers` 设置仍然适用于过滤实际加载的托管服务器。
1449</Note>