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# Hubungkan Claude Code ke alat melalui MCP
6
7> Pelajari cara menghubungkan Claude Code ke alat Anda dengan Model Context Protocol.
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 dapat terhubung ke ratusan alat eksternal dan sumber data melalui [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction), standar sumber terbuka untuk integrasi AI-alat. Server MCP memberikan Claude Code akses ke alat, database, dan API Anda.
216
217Hubungkan server ketika Anda menemukan diri Anda menyalin data ke dalam chat dari alat lain, seperti pelacak masalah atau dasbor pemantauan. Setelah terhubung, Claude dapat membaca dan bertindak pada sistem tersebut secara langsung alih-alih bekerja dari apa yang Anda tempel.
218
219## Apa yang dapat Anda lakukan dengan MCP
220
221Dengan server MCP yang terhubung, Anda dapat meminta Claude Code untuk:
222
223* **Menerapkan fitur dari pelacak masalah**: "Tambahkan fitur yang dijelaskan dalam masalah JIRA ENG-4521 dan buat PR di GitHub."
224* **Menganalisis data pemantauan**: "Periksa Sentry dan Statsig untuk memeriksa penggunaan fitur yang dijelaskan dalam ENG-4521."
225* **Menanyakan database**: "Temukan email 10 pengguna acak yang menggunakan fitur ENG-4521, berdasarkan database PostgreSQL kami."
226* **Mengintegrasikan desain**: "Perbarui template email standar kami berdasarkan desain Figma baru yang diposting di Slack"
227* **Mengotomatisasi alur kerja**: "Buat draf Gmail mengundang 10 pengguna ini ke sesi umpan balik tentang fitur baru."
228* **Bereaksi terhadap peristiwa eksternal**: Server MCP juga dapat bertindak sebagai [saluran](/id/channels) yang mendorong pesan ke dalam sesi Anda, sehingga Claude bereaksi terhadap pesan Telegram, obrolan Discord, atau peristiwa webhook saat Anda sedang pergi.
229
230## Server MCP populer
231
232Berikut adalah beberapa server MCP yang umum digunakan yang dapat Anda hubungkan ke Claude Code:
233
234<Warning>
235 Gunakan server MCP pihak ketiga dengan risiko Anda sendiri - Anthropic belum memverifikasi
236 kebenaran atau keamanan semua server ini.
237 Pastikan Anda mempercayai server MCP yang Anda instal.
238 Berhati-hatilah terutama saat menggunakan server MCP yang dapat mengambil konten
239 yang tidak dipercaya, karena ini dapat mengekspos Anda ke risiko injeksi prompt.
240</Warning>
241
242<MCPServersTable platform="claudeCode" />
243
244<Note>
245 **Membutuhkan integrasi spesifik?** [Temukan ratusan server MCP lainnya di GitHub](https://github.com/modelcontextprotocol/servers), atau buat server Anda sendiri menggunakan [MCP SDK](https://modelcontextprotocol.io/quickstart/server).
246</Note>
247
248## Menginstal server MCP
249
250Server MCP dapat dikonfigurasi dengan tiga cara berbeda tergantung pada kebutuhan Anda:
251
252### Opsi 1: Tambahkan server HTTP jarak jauh
253
254Server HTTP adalah opsi yang direkomendasikan untuk terhubung ke server MCP jarak jauh. Ini adalah transport yang paling banyak didukung untuk layanan berbasis cloud.
255
256```bash theme={null}
257# Sintaks dasar
258claude mcp add --transport http <name> <url>
259
260# Contoh nyata: Hubungkan ke Notion
261claude mcp add --transport http notion https://mcp.notion.com/mcp
262
263# Contoh dengan token Bearer
264claude mcp add --transport http secure-api https://api.example.com/mcp \
265 --header "Authorization: Bearer your-token"
266```
267
268### Opsi 2: Tambahkan server SSE jarak jauh
269
270<Warning>
271 Transport SSE (Server-Sent Events) sudah usang. Gunakan server HTTP sebagai gantinya, jika tersedia.
272</Warning>
273
274```bash theme={null}
275# Sintaks dasar
276claude mcp add --transport sse <name> <url>
277
278# Contoh nyata: Hubungkan ke Asana
279claude mcp add --transport sse asana https://mcp.asana.com/sse
280
281# Contoh dengan header autentikasi
282claude mcp add --transport sse private-api https://api.company.com/sse \
283 --header "X-API-Key: your-key-here"
284```
285
286### Opsi 3: Tambahkan server stdio lokal
287
288Server stdio berjalan sebagai proses lokal di mesin Anda. Mereka ideal untuk alat yang memerlukan akses sistem langsung atau skrip khusus.
289
290```bash theme={null}
291# Sintaks dasar
292claude mcp add [options] <name> -- <command> [args...]
293
294# Contoh nyata: Tambahkan server Airtable
295claude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \
296 -- npx -y airtable-mcp-server
297```
298
299<Note>
300 **Penting: Urutan opsi**
301
302 Semua opsi (`--transport`, `--env`, `--scope`, `--header`) harus datang **sebelum** nama server. `--` (tanda hubung ganda) kemudian memisahkan nama server dari perintah dan argumen yang diteruskan ke server MCP.
303
304 Sebagai contoh:
305
306 * `claude mcp add --transport stdio myserver -- npx server` → menjalankan `npx server`
307 * `claude mcp add --transport stdio --env KEY=value myserver -- python server.py --port 8080` → menjalankan `python server.py --port 8080` dengan `KEY=value` di lingkungan
308
309 Ini mencegah konflik antara flag Claude dan flag server.
310</Note>
311
312### Mengelola server Anda
313
314Setelah dikonfigurasi, Anda dapat mengelola server MCP Anda dengan perintah ini:
315
316```bash theme={null}
317# Daftar semua server yang dikonfigurasi
318claude mcp list
319
320# Dapatkan detail untuk server tertentu
321claude mcp get github
322
323# Hapus server
324claude mcp remove github
325
326# (dalam Claude Code) Periksa status server
327/mcp
328```
329
330### Pembaruan alat dinamis
331
332Claude Code mendukung notifikasi `list_changed` MCP, memungkinkan server MCP untuk secara dinamis memperbarui alat, prompt, dan sumber daya yang tersedia tanpa memerlukan Anda untuk memutuskan dan menghubungkan kembali. Ketika server MCP mengirim notifikasi `list_changed`, Claude Code secara otomatis menyegarkan kemampuan yang tersedia dari server tersebut.
333
334### Koneksi ulang otomatis
335
336Jika server HTTP atau SSE terputus di tengah sesi, Claude Code secara otomatis menghubungkan kembali dengan backoff eksponensial: hingga lima upaya, dimulai dengan penundaan satu detik dan berlipat ganda setiap kali. Server muncul sebagai tertunda dalam `/mcp` saat koneksi ulang sedang berlangsung. Setelah lima upaya gagal, server ditandai sebagai gagal dan Anda dapat mencoba lagi secara manual dari `/mcp`. Server stdio adalah proses lokal dan tidak dihubungkan kembali secara otomatis.
337
338Backoff yang sama berlaku ketika server HTTP atau SSE gagal koneksi awalnya saat startup. Mulai dari v2.1.121, Claude Code mencoba ulang koneksi awal hingga tiga kali pada kesalahan transien seperti respons 5xx, koneksi ditolak, atau timeout, kemudian menandai server sebagai gagal jika masih tidak dapat terhubung. Kesalahan autentikasi dan not-found tidak dicoba ulang karena memerlukan perubahan konfigurasi untuk diselesaikan.
339
340### Dorong pesan dengan saluran
341
342Server MCP juga dapat mendorong pesan langsung ke dalam sesi Anda sehingga Claude dapat bereaksi terhadap peristiwa eksternal seperti hasil CI, peringatan pemantauan, atau pesan obrolan. Untuk mengaktifkan ini, server Anda mendeklarasikan kemampuan `claude/channel` dan Anda memilihnya dengan flag `--channels` saat startup. Lihat [Saluran](/id/channels) untuk menggunakan saluran yang didukung secara resmi, atau [Referensi saluran](/id/channels-reference) untuk membangun saluran Anda sendiri.
343
344<Tip>
345 Tips:
346
347 * Gunakan flag `--scope` untuk menentukan di mana konfigurasi disimpan:
348 * `local` (default): Hanya tersedia untuk Anda di proyek saat ini (disebut `project` di versi yang lebih lama)
349 * `project`: Dibagikan dengan semua orang di proyek melalui file `.mcp.json`
350 * `user`: Tersedia untuk Anda di semua proyek (disebut `global` di versi yang lebih lama)
351 * Atur variabel lingkungan dengan flag `--env` (misalnya, `--env KEY=value`)
352 * Konfigurasi waktu tunggu startup server MCP menggunakan variabel lingkungan MCP\_TIMEOUT (misalnya, `MCP_TIMEOUT=10000 claude` menetapkan waktu tunggu 10 detik)
353 * Claude Code akan menampilkan peringatan ketika output alat MCP melebihi 10.000 token. Untuk meningkatkan batas ini, atur variabel lingkungan `MAX_MCP_OUTPUT_TOKENS` (misalnya, `MAX_MCP_OUTPUT_TOKENS=50000`)
354 * Gunakan `/mcp` untuk autentikasi dengan server jarak jauh yang memerlukan autentikasi OAuth 2.0
355</Tip>
356
357### Server MCP yang disediakan plugin
358
359[Plugin](/id/plugins) dapat menggabungkan server MCP, secara otomatis menyediakan alat dan integrasi ketika plugin diaktifkan. Server MCP plugin bekerja identik dengan server yang dikonfigurasi pengguna.
360
361**Cara kerja server MCP plugin**:
362
363* Plugin menentukan server MCP dalam `.mcp.json` di root plugin atau inline dalam `plugin.json`
364* Ketika plugin diaktifkan, server MCP-nya dimulai secara otomatis
365* Alat MCP plugin muncul bersama alat MCP yang dikonfigurasi secara manual
366* Server plugin dikelola melalui instalasi plugin (bukan perintah `/mcp`)
367
368**Contoh konfigurasi MCP plugin**:
369
370Dalam `.mcp.json` di root plugin:
371
372```json theme={null}
373{
374 "mcpServers": {
375 "database-tools": {
376 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
377 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
378 "env": {
379 "DB_URL": "${DB_URL}"
380 }
381 }
382 }
383}
384```
385
386Atau inline dalam `plugin.json`:
387
388```json theme={null}
389{
390 "name": "my-plugin",
391 "mcpServers": {
392 "plugin-api": {
393 "command": "${CLAUDE_PLUGIN_ROOT}/servers/api-server",
394 "args": ["--port", "8080"]
395 }
396 }
397}
398```
399
400**Fitur MCP plugin**:
401
402* **Siklus hidup otomatis**: Pada startup sesi, server untuk plugin yang diaktifkan terhubung secara otomatis. Jika Anda mengaktifkan atau menonaktifkan plugin selama sesi, jalankan `/reload-plugins` untuk menghubungkan atau memutuskan server MCP-nya
403* **Variabel lingkungan**: gunakan `${CLAUDE_PLUGIN_ROOT}` untuk file plugin bundel dan `${CLAUDE_PLUGIN_DATA}` untuk [status persisten](/id/plugins-reference#persistent-data-directory) yang bertahan pembaruan plugin
404* **Akses lingkungan pengguna**: Akses ke variabel lingkungan yang sama seperti server yang dikonfigurasi secara manual
405* **Jenis transport berganda**: Dukungan transport stdio, SSE, dan HTTP (dukungan transport dapat bervariasi menurut server)
406
407**Melihat server MCP plugin**:
408
409```bash theme={null}
410# Dalam Claude Code, lihat semua server MCP termasuk yang dari plugin
411/mcp
412```
413
414Server plugin muncul dalam daftar dengan indikator yang menunjukkan mereka berasal dari plugin.
415
416**Manfaat server MCP plugin**:
417
418* **Distribusi bundel**: Alat dan server dikemas bersama
419* **Pengaturan otomatis**: Tidak perlu konfigurasi MCP manual
420* **Konsistensi tim**: Semua orang mendapatkan alat yang sama ketika plugin diinstal
421
422Lihat [referensi komponen plugin](/id/plugins-reference#mcp-servers) untuk detail tentang penggabungan server MCP dengan plugin.
423
424## Cakupan instalasi MCP
425
426Server MCP dapat dikonfigurasi pada tiga cakupan berbeda. Cakupan yang Anda pilih mengontrol proyek mana tempat server dimuat dan apakah konfigurasi dibagikan dengan tim Anda.
427
428| Cakupan | Dimuat dalam | Dibagikan dengan tim | Disimpan dalam |
429| ------------------------ | --------------------- | ------------------------- | -------------------------- |
430| [Lokal](#local-scope) | Hanya proyek saat ini | Tidak | `~/.claude.json` |
431| [Proyek](#project-scope) | Hanya proyek saat ini | Ya, melalui kontrol versi | `.mcp.json` di root proyek |
432| [Pengguna](#user-scope) | Semua proyek Anda | Tidak | `~/.claude.json` |
433
434### Cakupan lokal
435
436Cakupan lokal adalah default. Server dengan cakupan lokal hanya dimuat di proyek tempat Anda menambahkannya dan tetap pribadi untuk Anda. Claude Code menyimpannya dalam `~/.claude.json` di bawah jalur proyek tersebut, jadi server yang sama tidak akan muncul di proyek lain Anda. Gunakan cakupan lokal untuk server pengembangan pribadi, konfigurasi eksperimental, atau server dengan kredensial yang tidak ingin Anda masukkan ke dalam kontrol versi.
437
438<Note>
439 Istilah "cakupan lokal" untuk server MCP berbeda dari pengaturan lokal umum. Server MCP dengan cakupan lokal disimpan dalam `~/.claude.json` (direktori home Anda), sementara pengaturan lokal umum menggunakan `.claude/settings.local.json` (di direktori proyek). Lihat [Pengaturan](/id/settings#settings-files) untuk detail tentang lokasi file pengaturan.
440</Note>
441
442```bash theme={null}
443# Tambahkan server dengan cakupan lokal (default)
444claude mcp add --transport http stripe https://mcp.stripe.com
445
446# Tentukan cakupan lokal secara eksplisit
447claude mcp add --transport http stripe --scope local https://mcp.stripe.com
448```
449
450Perintah menulis server ke dalam entri untuk proyek saat ini di dalam `~/.claude.json`. Contoh di bawah menunjukkan hasilnya ketika Anda menjalankannya dari `/path/to/your/project`:
451
452```json theme={null}
453{
454 "projects": {
455 "/path/to/your/project": {
456 "mcpServers": {
457 "stripe": {
458 "type": "http",
459 "url": "https://mcp.stripe.com"
460 }
461 }
462 }
463 }
464}
465```
466
467### Cakupan proyek
468
469Server dengan cakupan proyek memungkinkan kolaborasi tim dengan menyimpan konfigurasi dalam file `.mcp.json` di direktori root proyek Anda. File ini dirancang untuk diperiksa ke dalam kontrol versi, memastikan semua anggota tim memiliki akses ke alat dan layanan MCP yang sama. Ketika Anda menambahkan server dengan cakupan proyek, Claude Code secara otomatis membuat atau memperbarui file ini dengan struktur konfigurasi yang sesuai.
470
471```bash theme={null}
472# Tambahkan server dengan cakupan proyek
473claude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp
474```
475
476File `.mcp.json` yang dihasilkan mengikuti format standar:
477
478```json theme={null}
479{
480 "mcpServers": {
481 "shared-server": {
482 "command": "/path/to/server",
483 "args": [],
484 "env": {}
485 }
486 }
487}
488```
489
490Untuk alasan keamanan, Claude Code meminta persetujuan sebelum menggunakan server dengan cakupan proyek dari file `.mcp.json`. Jika Anda perlu mengatur ulang pilihan persetujuan ini, gunakan perintah `claude mcp reset-project-choices`.
491
492### Cakupan pengguna
493
494Server dengan cakupan pengguna disimpan dalam `~/.claude.json` dan menyediakan aksesibilitas lintas proyek, menjadikannya tersedia di semua proyek di mesin Anda sambil tetap pribadi untuk akun pengguna Anda. Cakupan ini bekerja dengan baik untuk server utilitas pribadi, alat pengembangan, atau layanan yang sering Anda gunakan di berbagai proyek.
495
496```bash theme={null}
497# Tambahkan server pengguna
498claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic
499```
500
501### Hierarki cakupan dan prioritas
502
503Ketika server yang sama ditentukan di lebih dari satu tempat, Claude Code terhubung ke server tersebut sekali, menggunakan definisi dari sumber dengan prioritas tertinggi:
504
5051. Cakupan lokal
5062. Cakupan proyek
5073. Cakupan pengguna
5084. [Server yang disediakan plugin](/id/plugins)
5095. [Konektor claude.ai](#use-mcp-servers-from-claude-ai)
510
511Tiga cakupan mencocokkan duplikat berdasarkan nama. Plugin dan konektor mencocokkan berdasarkan endpoint, jadi yang menunjuk ke URL atau perintah yang sama dengan server di atas diperlakukan sebagai duplikat.
512
513### Ekspansi variabel lingkungan dalam `.mcp.json`
514
515Claude Code mendukung ekspansi variabel lingkungan dalam file `.mcp.json`, memungkinkan tim untuk berbagi konfigurasi sambil mempertahankan fleksibilitas untuk jalur spesifik mesin dan nilai sensitif seperti kunci API.
516
517**Sintaks yang didukung:**
518
519* `${VAR}` - Berkembang menjadi nilai variabel lingkungan `VAR`
520* `${VAR:-default}` - Berkembang menjadi `VAR` jika diatur, jika tidak menggunakan `default`
521
522**Lokasi ekspansi:**
523Variabel lingkungan dapat berkembang dalam:
524
525* `command` - Jalur executable server
526* `args` - Argumen baris perintah
527* `env` - Variabel lingkungan yang diteruskan ke server
528* `url` - Untuk jenis server HTTP
529* `headers` - Untuk autentikasi server HTTP
530
531**Contoh dengan ekspansi variabel:**
532
533```json theme={null}
534{
535 "mcpServers": {
536 "api-server": {
537 "type": "http",
538 "url": "${API_BASE_URL:-https://api.example.com}/mcp",
539 "headers": {
540 "Authorization": "Bearer ${API_KEY}"
541 }
542 }
543 }
544}
545```
546
547Jika variabel lingkungan yang diperlukan tidak diatur dan tidak memiliki nilai default, Claude Code akan gagal mengurai konfigurasi.
548
549## Contoh praktis
550
551{/* ### Contoh: Otomatisasi pengujian browser dengan Playwright
552
553```bash
554claude mcp add --transport stdio playwright -- npx -y @playwright/mcp@latest
555```
556
557Kemudian tulis dan jalankan tes browser:
558
559```text
560Test if the login flow works with test@example.com
561```
562```text
563Take a screenshot of the checkout page on mobile
564```
565```text
566Verify that the search feature returns results
567``` */}
568
569### Contoh: Pantau kesalahan dengan Sentry
570
571```bash theme={null}
572claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
573```
574
575Autentikasi dengan akun Sentry Anda:
576
577```text theme={null}
578/mcp
579```
580
581Kemudian debug masalah produksi:
582
583```text theme={null}
584What are the most common errors in the last 24 hours?
585```
586
587```text theme={null}
588Show me the stack trace for error ID abc123
589```
590
591```text theme={null}
592Which deployment introduced these new errors?
593```
594
595### Contoh: Hubungkan ke GitHub untuk tinjauan kode
596
597Token akses pribadi GitHub MCP server jarak jauh diautentikasi dengan token akses pribadi GitHub yang diteruskan sebagai header. Untuk mendapatkan satu, buka [pengaturan token GitHub Anda](https://github.com/settings/personal-access-tokens), hasilkan token baru yang bagus dengan akses ke repositori yang ingin Claude kerjakan, kemudian tambahkan server:
598
599```bash theme={null}
600claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
601 --header "Authorization: Bearer YOUR_GITHUB_PAT"
602```
603
604Kemudian bekerja dengan GitHub:
605
606```text theme={null}
607Review PR #456 and suggest improvements
608```
609
610```text theme={null}
611Create a new issue for the bug we just found
612```
613
614```text theme={null}
615Show me all open PRs assigned to me
616```
617
618### Contoh: Tanyakan database PostgreSQL Anda
619
620```bash theme={null}
621claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \
622 --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"
623```
624
625Kemudian tanyakan database Anda secara alami:
626
627```text theme={null}
628What's our total revenue this month?
629```
630
631```text theme={null}
632Show me the schema for the orders table
633```
634
635```text theme={null}
636Find customers who haven't made a purchase in 90 days
637```
638
639## Autentikasi dengan server MCP jarak jauh
640
641Banyak server MCP berbasis cloud memerlukan autentikasi. Claude Code mendukung OAuth 2.0 untuk koneksi yang aman.
642
643<Steps>
644 <Step title="Tambahkan server yang memerlukan autentikasi">
645 Sebagai contoh:
646
647 ```bash theme={null}
648 claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
649 ```
650 </Step>
651
652 <Step title="Gunakan perintah /mcp dalam Claude Code">
653 Dalam Claude Code, gunakan perintah:
654
655 ```text theme={null}
656 /mcp
657 ```
658
659 Kemudian ikuti langkah-langkah di browser Anda untuk login.
660 </Step>
661</Steps>
662
663<Tip>
664 Tips:
665
666 * Token autentikasi disimpan dengan aman dan disegarkan secara otomatis
667 * Gunakan "Clear authentication" dalam menu `/mcp` untuk mencabut akses
668 * Jika browser Anda tidak terbuka secara otomatis, salin URL yang disediakan dan buka secara manual
669 * Jika pengalihan browser gagal dengan kesalahan koneksi setelah autentikasi, tempel URL callback lengkap dari bilah alamat browser Anda ke prompt URL yang muncul di Claude Code
670 * Autentikasi OAuth bekerja dengan server HTTP
671</Tip>
672
673### Gunakan port callback OAuth tetap
674
675Beberapa server MCP memerlukan URI pengalihan tertentu yang terdaftar sebelumnya. Secara default, Claude Code memilih port acak yang tersedia untuk callback OAuth. Gunakan `--callback-port` untuk memperbaiki port sehingga cocok dengan URI pengalihan yang telah terdaftar sebelumnya dalam bentuk `http://localhost:PORT/callback`.
676
677Anda dapat menggunakan `--callback-port` sendiri (dengan pendaftaran klien dinamis) atau bersama dengan `--client-id` (dengan kredensial yang telah dikonfigurasi sebelumnya).
678
679```bash theme={null}
680# Port callback tetap dengan pendaftaran klien dinamis
681claude mcp add --transport http \
682 --callback-port 8080 \
683 my-server https://mcp.example.com/mcp
684```
685
686### Gunakan kredensial OAuth yang telah dikonfigurasi sebelumnya
687
688Beberapa server MCP tidak mendukung pengaturan OAuth otomatis melalui Dynamic Client Registration. Jika Anda melihat kesalahan seperti "Incompatible auth server: does not support dynamic client registration," server memerlukan kredensial yang telah dikonfigurasi sebelumnya. Claude Code juga mendukung server yang menggunakan Client ID Metadata Document (CIMD) alih-alih Dynamic Client Registration, dan menemukan ini secara otomatis. Jika penemuan otomatis gagal, daftarkan aplikasi OAuth melalui portal pengembang server terlebih dahulu, kemudian berikan kredensial saat menambahkan server.
689
690<Steps>
691 <Step title="Daftarkan aplikasi OAuth dengan server">
692 Buat aplikasi melalui portal pengembang server dan catat ID klien dan rahasia klien Anda.
693
694 Banyak server juga memerlukan URI pengalihan. Jika demikian, pilih port dan daftarkan URI pengalihan dalam format `http://localhost:PORT/callback`. Gunakan port yang sama dengan `--callback-port` di langkah berikutnya.
695 </Step>
696
697 <Step title="Tambahkan server dengan kredensial Anda">
698 Pilih salah satu metode berikut. Port yang digunakan untuk `--callback-port` dapat berupa port apa pun yang tersedia. Itu hanya perlu cocok dengan URI pengalihan yang Anda daftarkan di langkah sebelumnya.
699
700 <Tabs>
701 <Tab title="claude mcp add">
702 Gunakan `--client-id` untuk meneruskan ID klien aplikasi Anda. Flag `--client-secret` meminta rahasia dengan input yang disembunyikan:
703
704 ```bash theme={null}
705 claude mcp add --transport http \
706 --client-id your-client-id --client-secret --callback-port 8080 \
707 my-server https://mcp.example.com/mcp
708 ```
709 </Tab>
710
711 <Tab title="claude mcp add-json">
712 Sertakan objek `oauth` dalam konfigurasi JSON dan teruskan `--client-secret` sebagai flag terpisah:
713
714 ```bash theme={null}
715 claude mcp add-json my-server \
716 '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' \
717 --client-secret
718 ```
719 </Tab>
720
721 <Tab title="claude mcp add-json (callback port only)">
722 Gunakan `--callback-port` tanpa ID klien untuk memperbaiki port sambil menggunakan pendaftaran klien dinamis:
723
724 ```bash theme={null}
725 claude mcp add-json my-server \
726 '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"callbackPort":8080}}'
727 ```
728 </Tab>
729
730 <Tab title="CI / env var">
731 Atur rahasia melalui variabel lingkungan untuk melewati prompt interaktif:
732
733 ```bash theme={null}
734 MCP_CLIENT_SECRET=your-secret claude mcp add --transport http \
735 --client-id your-client-id --client-secret --callback-port 8080 \
736 my-server https://mcp.example.com/mcp
737 ```
738 </Tab>
739 </Tabs>
740 </Step>
741
742 <Step title="Autentikasi di Claude Code">
743 Jalankan `/mcp` di Claude Code dan ikuti alur login browser.
744 </Step>
745</Steps>
746
747<Tip>
748 Tips:
749
750 * Rahasia klien disimpan dengan aman di keychain sistem Anda (macOS) atau file kredensial, bukan di konfigurasi Anda
751 * Jika server menggunakan klien OAuth publik tanpa rahasia, gunakan hanya `--client-id` tanpa `--client-secret`
752 * `--callback-port` dapat digunakan dengan atau tanpa `--client-id`
753 * Flag ini hanya berlaku untuk transport HTTP dan SSE. Mereka tidak berpengaruh pada server stdio
754 * Gunakan `claude mcp get <name>` untuk memverifikasi bahwa kredensial OAuth dikonfigurasi untuk server
755</Tip>
756
757### Ganti penemuan metadata OAuth
758
759Arahkan Claude Code ke URL metadata otorisasi OAuth tertentu untuk melewati rantai penemuan default. Atur `authServerMetadataUrl` ketika endpoint standar server MCP mengembalikan kesalahan, atau ketika Anda ingin merutekan penemuan melalui proxy internal. Secara default, Claude Code pertama kali memeriksa Protected Resource Metadata RFC 9728 di `/.well-known/oauth-protected-resource`, kemudian kembali ke metadata server otorisasi RFC 8414 di `/.well-known/oauth-authorization-server`.
760
761Atur `authServerMetadataUrl` dalam objek `oauth` dari konfigurasi server Anda di `.mcp.json`:
762
763```json theme={null}
764{
765 "mcpServers": {
766 "my-server": {
767 "type": "http",
768 "url": "https://mcp.example.com/mcp",
769 "oauth": {
770 "authServerMetadataUrl": "https://auth.example.com/.well-known/openid-configuration"
771 }
772 }
773 }
774}
775```
776
777URL harus menggunakan `https://`. `authServerMetadataUrl` memerlukan Claude Code v2.1.64 atau lebih baru. `scopes_supported` dari URL metadata mengganti cakupan yang diiklankan server upstream.
778
779### Batasi cakupan OAuth
780
781Atur `oauth.scopes` untuk menyematkan cakupan yang diminta Claude Code selama alur otorisasi. Ini adalah cara yang didukung untuk membatasi server MCP ke subset yang disetujui tim keamanan ketika server otorisasi upstream mengiklankan lebih banyak cakupan daripada yang ingin Anda berikan. Nilainya adalah string tunggal yang dipisahkan spasi, cocok dengan format parameter `scope` dalam RFC 6749 §3.3.
782
783```json theme={null}
784{
785 "mcpServers": {
786 "slack": {
787 "type": "http",
788 "url": "https://mcp.slack.com/mcp",
789 "oauth": {
790 "scopes": "channels:read chat:write search:read"
791 }
792 }
793 }
794}
795```
796
797`oauth.scopes` mengambil prioritas atas `authServerMetadataUrl` dan cakupan yang ditemukan server di `/.well-known`. Biarkan tidak diatur untuk membiarkan server MCP menentukan set cakupan yang diminta.
798
799Jika server otorisasi mengiklankan `offline_access` dalam `scopes_supported`, Claude Code menambahkannya ke cakupan yang disematkan sehingga token akses dapat disegarkan tanpa login browser baru.
800
801Jika server kemudian mengembalikan 403 `insufficient_scope` untuk panggilan alat, Claude Code melakukan autentikasi ulang dengan cakupan yang disematkan yang sama. Perluas `oauth.scopes` ketika alat yang Anda butuhkan memerlukan cakupan di luar pin.
802
803### Gunakan header dinamis untuk autentikasi khusus
804
805Jika server MCP Anda menggunakan skema autentikasi selain OAuth (seperti Kerberos, token berumur pendek, atau SSO internal), gunakan `headersHelper` untuk menghasilkan header permintaan pada waktu koneksi. Claude Code menjalankan perintah dan menggabungkan outputnya ke dalam header koneksi.
806
807```json theme={null}
808{
809 "mcpServers": {
810 "internal-api": {
811 "type": "http",
812 "url": "https://mcp.internal.example.com",
813 "headersHelper": "/opt/bin/get-mcp-auth-headers.sh"
814 }
815 }
816}
817```
818
819Perintah juga dapat inline:
820
821```json theme={null}
822{
823 "mcpServers": {
824 "internal-api": {
825 "type": "http",
826 "url": "https://mcp.internal.example.com",
827 "headersHelper": "echo '{\"Authorization\": \"Bearer '\"$(get-token)\"'\"}'"
828 }
829 }
830}
831```
832
833**Persyaratan:**
834
835* Perintah harus menulis objek JSON dari pasangan kunci-nilai string ke stdout
836* Perintah berjalan dalam shell dengan waktu tunggu 10 detik
837* Header dinamis mengganti `headers` statis apa pun dengan nama yang sama
838
839Helper berjalan segar pada setiap koneksi (pada startup sesi dan pada reconnect). Tidak ada caching, jadi skrip Anda bertanggung jawab untuk penggunaan kembali token apa pun.
840
841Claude Code menetapkan variabel lingkungan ini saat menjalankan helper:
842
843| Variabel | Nilai |
844| :---------------------------- | :-------------- |
845| `CLAUDE_CODE_MCP_SERVER_NAME` | nama server MCP |
846| `CLAUDE_CODE_MCP_SERVER_URL` | URL server MCP |
847
848Gunakan ini untuk menulis satu skrip helper yang melayani beberapa server MCP.
849
850<Note>
851 `headersHelper` mengeksekusi perintah shell arbitrer. Ketika ditentukan pada cakupan proyek atau lokal, itu hanya berjalan setelah Anda menerima dialog kepercayaan ruang kerja.
852</Note>
853
854## Tambahkan server MCP dari konfigurasi JSON
855
856Jika Anda memiliki konfigurasi JSON untuk server MCP, Anda dapat menambahkannya secara langsung:
857
858<Steps>
859 <Step title="Tambahkan server MCP dari JSON">
860 ```bash theme={null}
861 # Sintaks dasar
862 claude mcp add-json <name> '<json>'
863
864 # Contoh: Menambahkan server HTTP dengan konfigurasi JSON
865 claude mcp add-json weather-api '{"type":"http","url":"https://api.weather.com/mcp","headers":{"Authorization":"Bearer token"}}'
866
867 # Contoh: Menambahkan server stdio dengan konfigurasi JSON
868 claude mcp add-json local-weather '{"type":"stdio","command":"/path/to/weather-cli","args":["--api-key","abc123"],"env":{"CACHE_DIR":"/tmp"}}'
869
870 # Contoh: Menambahkan server HTTP dengan kredensial OAuth yang telah dikonfigurasi sebelumnya
871 claude mcp add-json my-server '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' --client-secret
872 ```
873 </Step>
874
875 <Step title="Verifikasi server ditambahkan">
876 ```bash theme={null}
877 claude mcp get weather-api
878 ```
879 </Step>
880</Steps>
881
882<Tip>
883 Tips:
884
885 * Pastikan JSON diloloskan dengan benar di shell Anda
886 * JSON harus sesuai dengan skema konfigurasi server MCP
887 * Anda dapat menggunakan `--scope user` untuk menambahkan server ke konfigurasi pengguna Anda alih-alih yang spesifik proyek
888</Tip>
889
890## Impor server MCP dari Claude Desktop
891
892Jika Anda telah mengonfigurasi server MCP di Claude Desktop, Anda dapat mengimpornya:
893
894<Steps>
895 <Step title="Impor server dari Claude Desktop">
896 ```bash theme={null}
897 # Sintaks dasar
898 claude mcp add-from-claude-desktop
899 ```
900 </Step>
901
902 <Step title="Pilih server mana yang akan diimpor">
903 Setelah menjalankan perintah, Anda akan melihat dialog interaktif yang memungkinkan Anda memilih server mana yang ingin Anda impor.
904 </Step>
905
906 <Step title="Verifikasi server diimpor">
907 ```bash theme={null}
908 claude mcp list
909 ```
910 </Step>
911</Steps>
912
913<Tip>
914 Tips:
915
916 * Fitur ini hanya bekerja di macOS dan Windows Subsystem for Linux (WSL)
917 * Ini membaca file konfigurasi Claude Desktop dari lokasi standarnya di platform tersebut
918 * Gunakan flag `--scope user` untuk menambahkan server ke konfigurasi pengguna Anda
919 * Server yang diimpor akan memiliki nama yang sama seperti di Claude Desktop
920 * Jika server dengan nama yang sama sudah ada, mereka akan mendapatkan akhiran numerik (misalnya, `server_1`)
921</Tip>
922
923## Gunakan server MCP dari Claude.ai
924
925Jika Anda telah masuk ke Claude Code dengan akun [Claude.ai](https://claude.ai), server MCP yang telah Anda tambahkan di Claude.ai secara otomatis tersedia di Claude Code:
926
927<Steps>
928 <Step title="Konfigurasi server MCP di Claude.ai">
929 Tambahkan server di [claude.ai/customize/connectors](https://claude.ai/customize/connectors). Pada paket Tim dan Enterprise, hanya admin yang dapat menambahkan server.
930 </Step>
931
932 <Step title="Autentikasi server MCP">
933 Selesaikan langkah autentikasi yang diperlukan di Claude.ai.
934 </Step>
935
936 <Step title="Lihat dan kelola server di Claude Code">
937 Di Claude Code, gunakan perintah:
938
939 ```text theme={null}
940 /mcp
941 ```
942
943 Server Claude.ai muncul dalam daftar dengan indikator yang menunjukkan mereka berasal dari Claude.ai.
944 </Step>
945</Steps>
946
947Untuk menonaktifkan server MCP claude.ai di Claude Code, atur variabel lingkungan `ENABLE_CLAUDEAI_MCP_SERVERS` ke `false`:
948
949```bash theme={null}
950ENABLE_CLAUDEAI_MCP_SERVERS=false claude
951```
952
953## Gunakan Claude Code sebagai server MCP
954
955Anda dapat menggunakan Claude Code itu sendiri sebagai server MCP yang dapat terhubung oleh aplikasi lain:
956
957```bash theme={null}
958# Mulai Claude sebagai server MCP stdio
959claude mcp serve
960```
961
962Anda dapat menggunakan ini di Claude Desktop dengan menambahkan konfigurasi ini ke claude\_desktop\_config.json:
963
964```json theme={null}
965{
966 "mcpServers": {
967 "claude-code": {
968 "type": "stdio",
969 "command": "claude",
970 "args": ["mcp", "serve"],
971 "env": {}
972 }
973 }
974}
975```
976
977<Warning>
978 **Mengonfigurasi jalur executable**: Field `command` harus mereferensikan executable Claude Code. Jika perintah `claude` tidak ada di PATH sistem Anda, Anda perlu menentukan jalur lengkap ke executable.
979
980 Untuk menemukan jalur lengkap:
981
982 ```bash theme={null}
983 which claude
984 ```
985
986 Kemudian gunakan jalur lengkap dalam konfigurasi Anda:
987
988 ```json theme={null}
989 {
990 "mcpServers": {
991 "claude-code": {
992 "type": "stdio",
993 "command": "/full/path/to/claude",
994 "args": ["mcp", "serve"],
995 "env": {}
996 }
997 }
998 }
999 ```
1000
1001 Tanpa jalur executable yang benar, Anda akan mengalami kesalahan seperti `spawn claude ENOENT`.
1002</Warning>
1003
1004<Tip>
1005 Tips:
1006
1007 * Server menyediakan akses ke alat Claude seperti View, Edit, LS, dll.
1008 * Di Claude Desktop, coba minta Claude untuk membaca file di direktori, membuat edit, dan lainnya.
1009 * Perhatikan bahwa server MCP ini hanya mengekspos alat Claude Code ke klien MCP Anda, jadi klien Anda sendiri bertanggung jawab untuk menerapkan konfirmasi pengguna untuk panggilan alat individual.
1010</Tip>
1011
1012## Batas output MCP dan peringatan
1013
1014Ketika alat MCP menghasilkan output besar, Claude Code membantu mengelola penggunaan token untuk mencegah membanjiri konteks percakapan Anda:
1015
1016* **Ambang batas peringatan output**: Claude Code menampilkan peringatan ketika output alat MCP apa pun melebihi 10.000 token
1017* **Batas yang dapat dikonfigurasi**: Anda dapat menyesuaikan token output MCP maksimum yang diizinkan menggunakan variabel lingkungan `MAX_MCP_OUTPUT_TOKENS`
1018* **Batas default**: Maksimum default adalah 25.000 token
1019* **Cakupan**: Variabel lingkungan berlaku untuk alat yang tidak mendeklarasikan batas mereka sendiri. Alat yang menetapkan [`anthropic/maxResultSizeChars`](#raise-the-limit-for-a-specific-tool) menggunakan nilai itu sebagai gantinya untuk konten teks, terlepas dari apa yang `MAX_MCP_OUTPUT_TOKENS` diatur. Alat yang mengembalikan data gambar masih tunduk pada `MAX_MCP_OUTPUT_TOKENS`
1020
1021Untuk meningkatkan batas untuk alat yang menghasilkan output besar:
1022
1023```bash theme={null}
1024export MAX_MCP_OUTPUT_TOKENS=50000
1025claude
1026```
1027
1028Ini sangat berguna saat bekerja dengan server MCP yang:
1029
1030* Menanyakan dataset atau database besar
1031* Menghasilkan laporan atau dokumentasi terperinci
1032* Memproses file log atau informasi debugging yang luas
1033
1034### Naikkan batas untuk alat tertentu
1035
1036Jika Anda membangun server MCP, Anda dapat mengizinkan alat individual untuk mengembalikan hasil yang lebih besar dari ambang batas default dengan menetapkan `_meta["anthropic/maxResultSizeChars"]` dalam entri `tools/list` alat. Claude Code menaikkan ambang batas alat tersebut ke nilai yang dianotasi, hingga batas keras 500.000 karakter.
1037
1038Ini berguna untuk alat yang mengembalikan output yang secara inheren besar tetapi diperlukan, seperti skema database atau pohon file lengkap. Tanpa anotasi, hasil yang melebihi ambang batas default disimpan ke disk dan diganti dengan referensi file dalam percakapan.
1039
1040```json theme={null}
1041{
1042 "name": "get_schema",
1043 "description": "Returns the full database schema",
1044 "_meta": {
1045 "anthropic/maxResultSizeChars": 200000
1046 }
1047}
1048```
1049
1050Anotasi berlaku secara independen dari `MAX_MCP_OUTPUT_TOKENS` untuk konten teks, jadi pengguna tidak perlu menaikkan variabel lingkungan untuk alat yang mendeklarasikannya. Alat yang mengembalikan data gambar masih tunduk pada batas token.
1051
1052<Warning>
1053 Jika Anda sering mengalami peringatan output dengan server MCP tertentu yang tidak Anda kontrol, pertimbangkan untuk meningkatkan batas `MAX_MCP_OUTPUT_TOKENS`. Anda juga dapat meminta penulis server untuk menambahkan anotasi `anthropic/maxResultSizeChars` atau untuk membuat halaman respons mereka. Anotasi tidak berpengaruh pada alat yang mengembalikan konten gambar; untuk itu, menaikkan `MAX_MCP_OUTPUT_TOKENS` adalah satu-satunya opsi.
1054</Warning>
1055
1056## Tanggapi permintaan elicitasi MCP
1057
1058Server MCP dapat meminta input terstruktur dari Anda di tengah tugas menggunakan elicitasi. Ketika server memerlukan informasi yang tidak dapat diperolehnya sendiri, Claude Code menampilkan dialog interaktif dan meneruskan respons Anda kembali ke server. Tidak ada konfigurasi yang diperlukan di pihak Anda: dialog elicitasi muncul secara otomatis ketika server memintanya.
1059
1060Server dapat meminta input dengan dua cara:
1061
1062* **Mode formulir**: Claude Code menampilkan dialog dengan field formulir yang ditentukan oleh server (misalnya, prompt nama pengguna dan kata sandi). Isi field dan kirim.
1063* **Mode URL**: Claude Code membuka URL browser untuk autentikasi atau persetujuan. Selesaikan alur di browser, kemudian konfirmasi di CLI.
1064
1065Untuk merespons otomatis permintaan elicitasi tanpa menampilkan dialog, gunakan [hook `Elicitation`](/id/hooks#elicitation).
1066
1067Jika Anda membangun server MCP yang menggunakan elicitasi, lihat [spesifikasi elicitasi MCP](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation) untuk detail protokol dan contoh skema.
1068
1069## Gunakan sumber daya MCP
1070
1071Server MCP dapat mengekspos sumber daya yang dapat Anda referensikan menggunakan penyebutan @, mirip dengan cara Anda mereferensikan file.
1072
1073### Referensikan sumber daya MCP
1074
1075<Steps>
1076 <Step title="Daftar sumber daya yang tersedia">
1077 Ketik `@` dalam prompt Anda untuk melihat sumber daya yang tersedia dari semua server MCP yang terhubung. Sumber daya muncul bersama file dalam menu pelengkapan otomatis.
1078 </Step>
1079
1080 <Step title="Referensikan sumber daya tertentu">
1081 Gunakan format `@server:protocol://resource/path` untuk mereferensikan sumber daya:
1082
1083 ```text theme={null}
1084 Can you analyze @github:issue://123 and suggest a fix?
1085 ```
1086
1087 ```text theme={null}
1088 Please review the API documentation at @docs:file://api/authentication
1089 ```
1090 </Step>
1091
1092 <Step title="Referensi sumber daya berganda">
1093 Anda dapat mereferensikan beberapa sumber daya dalam satu prompt:
1094
1095 ```text theme={null}
1096 Compare @postgres:schema://users with @docs:file://database/user-model
1097 ```
1098 </Step>
1099</Steps>
1100
1101<Tip>
1102 Tips:
1103
1104 * Sumber daya secara otomatis diambil dan disertakan sebagai lampiran saat direferensikan
1105 * Jalur sumber daya dapat dicari fuzzy dalam pelengkapan otomatis penyebutan @
1106 * Claude Code secara otomatis menyediakan alat untuk membuat daftar dan membaca sumber daya MCP ketika server mendukungnya
1107 * Sumber daya dapat berisi jenis konten apa pun yang disediakan server MCP (teks, JSON, data terstruktur, dll.)
1108</Tip>
1109
1110## Skala dengan Pencarian Alat MCP
1111
1112Pencarian Alat menjaga penggunaan konteks MCP tetap rendah dengan menunda definisi alat sampai Claude membutuhkannya. Hanya nama alat yang dimuat saat startup sesi, jadi menambahkan lebih banyak server MCP memiliki dampak minimal pada jendela konteks Anda.
1113
1114### Cara kerjanya
1115
1116Pencarian Alat diaktifkan secara default. Alat MCP ditangguhkan daripada dimuat ke konteks sebelumnya, dan Claude menggunakan alat pencarian untuk menemukan yang relevan saat tugas membutuhkannya. Hanya alat yang benar-benar digunakan Claude yang memasuki konteks. Dari perspektif Anda, alat MCP bekerja persis seperti sebelumnya.
1117
1118Jika Anda lebih suka pemuatan berbasis ambang batas, atur `ENABLE_TOOL_SEARCH=auto` untuk memuat skema sebelumnya ketika mereka cocok dalam 10% jendela konteks dan hanya menunda overflow. Lihat [Konfigurasi pencarian alat](#configure-tool-search) untuk semua opsi.
1119
1120### Untuk penulis server MCP
1121
1122Jika Anda membangun server MCP, field instruksi server menjadi lebih berguna dengan Pencarian Alat yang diaktifkan. Instruksi server membantu Claude memahami kapan harus mencari alat Anda, mirip dengan cara [skills](/id/skills) bekerja.
1123
1124Tambahkan instruksi server yang jelas dan deskriptif yang menjelaskan:
1125
1126* Kategori tugas apa yang ditangani alat Anda
1127* Kapan Claude harus mencari alat Anda
1128* Kemampuan utama yang disediakan server Anda
1129
1130Claude Code memotong deskripsi alat dan instruksi server pada 2KB masing-masing. Jaga agar ringkas untuk menghindari pemotongan, dan letakkan detail penting di dekat awal.
1131
1132### Konfigurasi pencarian alat
1133
1134Pencarian alat diaktifkan secara default: alat MCP ditangguhkan dan ditemukan sesuai permintaan. Pencarian alat dinonaktifkan secara default di Vertex AI, yang tidak menerima header beta pencarian alat, dan ketika `ANTHROPIC_BASE_URL` menunjuk ke host non-pihak pertama, karena sebagian besar proxy tidak meneruskan blok `tool_reference`. Atur `ENABLE_TOOL_SEARCH` secara eksplisit untuk memilih. Fitur ini memerlukan model yang mendukung blok `tool_reference`: Sonnet 4 dan lebih baru, atau Opus 4 dan lebih baru. Model Haiku tidak mendukung pencarian alat.
1135
1136Kontrol perilaku pencarian alat dengan variabel lingkungan `ENABLE_TOOL_SEARCH`:
1137
1138| Nilai | Perilaku |
1139| :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1140| (tidak diatur) | Semua alat MCP ditangguhkan dan dimuat sesuai permintaan. Kembali ke pemuatan sebelumnya di Vertex AI atau ketika `ANTHROPIC_BASE_URL` adalah host non-pihak pertama |
1141| `true` | Semua alat MCP ditangguhkan, termasuk di Vertex AI dan untuk `ANTHROPIC_BASE_URL` non-pihak pertama |
1142| `auto` | Mode ambang batas: alat dimuat sebelumnya jika cocok dalam 10% jendela konteks, ditangguhkan sebaliknya |
1143| `auto:<N>` | Mode ambang batas dengan persentase khusus, di mana `<N>` adalah 0-100 (misalnya, `auto:5` untuk 5%) |
1144| `false` | Semua alat MCP dimuat sebelumnya, tidak ada penundaan |
1145
1146```bash theme={null}
1147# Gunakan ambang batas khusus 5%
1148ENABLE_TOOL_SEARCH=auto:5 claude
1149
1150# Nonaktifkan pencarian alat sepenuhnya
1151ENABLE_TOOL_SEARCH=false claude
1152```
1153
1154Atau atur nilai dalam [field `env` settings.json](/id/settings#available-settings) Anda.
1155
1156Anda juga dapat menonaktifkan alat ToolSearch secara khusus:
1157
1158```json theme={null}
1159{
1160 "permissions": {
1161 "deny": ["ToolSearch"]
1162 }
1163}
1164```
1165
1166### Keluarkan server dari penundaan
1167
1168Jika alat server harus selalu terlihat oleh Claude tanpa langkah pencarian, atur `alwaysLoad` ke `true` dalam konfigurasi server tersebut. Setiap alat dari server tersebut kemudian dimuat ke konteks saat startup sesi terlepas dari pengaturan `ENABLE_TOOL_SEARCH`. Gunakan ini untuk sejumlah kecil alat yang Claude butuhkan di setiap putaran, karena setiap alat sebelumnya mengonsumsi konteks yang sebaliknya akan tersedia untuk percakapan Anda.
1169
1170Entri `.mcp.json` berikut mengecualikan satu server HTTP sambil membiarkan server lain ditangguhkan:
1171
1172```json theme={null}
1173{
1174 "mcpServers": {
1175 "core-tools": {
1176 "type": "http",
1177 "url": "https://mcp.example.com/mcp",
1178 "alwaysLoad": true
1179 }
1180 }
1181}
1182```
1183
1184Field `alwaysLoad` tersedia di semua jenis server dan memerlukan Claude Code v2.1.121 atau lebih baru. Server MCP juga dapat menandai alat individual sebagai selalu-dimuat dengan menyertakan `"anthropic/alwaysLoad": true` dalam objek `_meta` alat, yang memiliki efek yang sama hanya untuk alat tersebut.
1185
1186## Gunakan prompt MCP sebagai perintah
1187
1188Server MCP dapat mengekspos prompt yang menjadi tersedia sebagai perintah di Claude Code.
1189
1190### Jalankan prompt MCP
1191
1192<Steps>
1193 <Step title="Temukan prompt yang tersedia">
1194 Ketik `/` untuk melihat semua perintah yang tersedia, termasuk yang dari server MCP. Prompt MCP muncul dengan format `/mcp__servername__promptname`.
1195 </Step>
1196
1197 <Step title="Jalankan prompt tanpa argumen">
1198 ```text theme={null}
1199 /mcp__github__list_prs
1200 ```
1201 </Step>
1202
1203 <Step title="Jalankan prompt dengan argumen">
1204 Banyak prompt menerima argumen. Teruskan mereka dipisahkan spasi setelah perintah:
1205
1206 ```text theme={null}
1207 /mcp__github__pr_review 456
1208 ```
1209
1210 ```text theme={null}
1211 /mcp__jira__create_issue "Bug in login flow" high
1212 ```
1213 </Step>
1214</Steps>
1215
1216<Tip>
1217 Tips:
1218
1219 * Prompt MCP ditemukan secara dinamis dari server yang terhubung
1220 * Argumen diurai berdasarkan parameter yang ditentukan prompt
1221 * Hasil prompt disuntikkan langsung ke dalam percakapan
1222 * Nama server dan prompt dinormalisasi (spasi menjadi garis bawah)
1223</Tip>
1224
1225## Konfigurasi MCP yang dikelola
1226
1227Untuk organisasi yang memerlukan kontrol terpusat atas server MCP, Claude Code mendukung dua opsi konfigurasi:
1228
12291. **Kontrol eksklusif dengan `managed-mcp.json`**: Terapkan set server MCP tetap yang tidak dapat dimodifikasi atau diperluas pengguna
12302. **Kontrol berbasis kebijakan dengan daftar putih/daftar hitam**: Izinkan pengguna menambahkan server mereka sendiri, tetapi batasi server mana yang diizinkan
1231
1232Opsi ini memungkinkan administrator IT untuk:
1233
1234* **Kontrol server MCP mana yang dapat diakses karyawan**: Terapkan set server MCP yang disetujui secara standar di seluruh organisasi
1235* **Cegah server MCP yang tidak sah**: Batasi pengguna dari menambahkan server MCP yang tidak disetujui
1236* **Nonaktifkan MCP sepenuhnya**: Hapus fungsionalitas MCP sepenuhnya jika diperlukan
1237
1238### Opsi 1: Kontrol eksklusif dengan managed-mcp.json
1239
1240Ketika Anda menerapkan file `managed-mcp.json`, file tersebut mengambil **kontrol eksklusif** atas semua server MCP. Pengguna tidak dapat menambahkan, memodifikasi, atau menggunakan server MCP apa pun selain yang ditentukan dalam file ini. Ini adalah pendekatan paling sederhana untuk organisasi yang menginginkan kontrol penuh.
1241
1242Administrator sistem menerapkan file konfigurasi ke direktori sistem:
1243
1244* macOS: `/Library/Application Support/ClaudeCode/managed-mcp.json`
1245* Linux dan WSL: `/etc/claude-code/managed-mcp.json`
1246* Windows: `C:\Program Files\ClaudeCode\managed-mcp.json`
1247
1248<Note>
1249 Ini adalah jalur sistem (bukan direktori home pengguna seperti `~/Library/...`) yang memerlukan hak istimewa administrator. Mereka dirancang untuk diterapkan oleh administrator IT.
1250</Note>
1251
1252File `managed-mcp.json` menggunakan format yang sama seperti file `.mcp.json` standar:
1253
1254```json theme={null}
1255{
1256 "mcpServers": {
1257 "github": {
1258 "type": "http",
1259 "url": "https://api.githubcopilot.com/mcp/"
1260 },
1261 "sentry": {
1262 "type": "http",
1263 "url": "https://mcp.sentry.dev/mcp"
1264 },
1265 "company-internal": {
1266 "type": "stdio",
1267 "command": "/usr/local/bin/company-mcp-server",
1268 "args": ["--config", "/etc/company/mcp-config.json"],
1269 "env": {
1270 "COMPANY_API_URL": "https://internal.company.com"
1271 }
1272 }
1273 }
1274}
1275```
1276
1277### Opsi 2: Kontrol berbasis kebijakan dengan daftar putih dan daftar hitam
1278
1279Alih-alih mengambil kontrol eksklusif, administrator dapat mengizinkan pengguna mengonfigurasi server MCP mereka sendiri sambil memberlakukan pembatasan pada server mana yang diizinkan. Pendekatan ini menggunakan `allowedMcpServers` dan `deniedMcpServers` dalam [file pengaturan yang dikelola](/id/settings#settings-files).
1280
1281<Note>
1282 **Memilih antara opsi**: Gunakan Opsi 1 (`managed-mcp.json`) ketika Anda ingin menerapkan set server tetap tanpa kustomisasi pengguna. Gunakan Opsi 2 (daftar putih/daftar hitam) ketika Anda ingin mengizinkan pengguna menambahkan server mereka sendiri dalam batasan kebijakan.
1283</Note>
1284
1285#### Opsi pembatasan
1286
1287Setiap entri dalam daftar putih atau daftar hitam dapat membatasi server dengan tiga cara:
1288
12891. **Berdasarkan nama server** (`serverName`): Cocok dengan nama server yang dikonfigurasi
12902. **Berdasarkan perintah** (`serverCommand`): Cocok dengan perintah dan argumen yang tepat yang digunakan untuk memulai server stdio
12913. **Berdasarkan pola URL** (`serverUrl`): Cocok dengan URL server jarak jauh dengan dukungan wildcard
1292
1293**Penting**: Setiap entri harus memiliki tepat satu dari `serverName`, `serverCommand`, atau `serverUrl`.
1294
1295#### Contoh konfigurasi
1296
1297```json theme={null}
1298{
1299 "allowedMcpServers": [
1300 // Izinkan berdasarkan nama server
1301 { "serverName": "github" },
1302 { "serverName": "sentry" },
1303
1304 // Izinkan berdasarkan perintah yang tepat (untuk server stdio)
1305 { "serverCommand": ["npx", "-y", "@modelcontextprotocol/server-filesystem"] },
1306 { "serverCommand": ["python", "/usr/local/bin/approved-server.py"] },
1307
1308 // Izinkan berdasarkan pola URL (untuk server jarak jauh)
1309 { "serverUrl": "https://mcp.company.com/*" },
1310 { "serverUrl": "https://*.internal.corp/*" }
1311 ],
1312 "deniedMcpServers": [
1313 // Blokir berdasarkan nama server
1314 { "serverName": "dangerous-server" },
1315
1316 // Blokir berdasarkan perintah yang tepat (untuk server stdio)
1317 { "serverCommand": ["npx", "-y", "unapproved-package"] },
1318
1319 // Blokir berdasarkan pola URL (untuk server jarak jauh)
1320 { "serverUrl": "https://*.untrusted.com/*" }
1321 ]
1322}
1323```
1324
1325#### Cara kerja pembatasan berbasis perintah
1326
1327**Pencocokan yang tepat**:
1328
1329* Array perintah harus cocok **persis** - baik perintah maupun semua argumen dalam urutan yang benar
1330* Contoh: `["npx", "-y", "server"]` akan TIDAK cocok dengan `["npx", "server"]` atau `["npx", "-y", "server", "--flag"]`
1331
1332**Perilaku server stdio**:
1333
1334* Ketika daftar putih berisi **entri** `serverCommand` apa pun, server stdio **harus** cocok dengan salah satu perintah tersebut
1335* Server stdio tidak dapat lulus berdasarkan nama saja ketika pembatasan perintah ada
1336* Ini memastikan administrator dapat memberlakukan perintah mana yang diizinkan untuk dijalankan
1337
1338**Perilaku server non-stdio**:
1339
1340* Server jarak jauh (HTTP, SSE, WebSocket) menggunakan pencocokan berbasis URL ketika entri `serverUrl` ada dalam daftar putih
1341* Jika tidak ada entri URL, server jarak jauh kembali ke pencocokan berbasis nama
1342* Pembatasan perintah tidak berlaku untuk server jarak jauh
1343
1344#### Cara kerja pembatasan berbasis URL
1345
1346Pola URL mendukung wildcard menggunakan `*` untuk mencocokkan urutan karakter apa pun. Ini berguna untuk mengizinkan seluruh domain atau subdomain.
1347
1348**Contoh wildcard**:
1349
1350* `https://mcp.company.com/*` - Izinkan semua jalur di domain tertentu
1351* `https://*.example.com/*` - Izinkan subdomain apa pun dari example.com
1352* `http://localhost:*/*` - Izinkan port apa pun di localhost
1353
1354**Perilaku server jarak jauh**:
1355
1356* Ketika daftar putih berisi **entri** `serverUrl` apa pun, server jarak jauh **harus** cocok dengan salah satu pola URL tersebut
1357* Server jarak jauh tidak dapat lulus berdasarkan nama saja ketika pembatasan URL ada
1358* Ini memastikan administrator dapat memberlakukan endpoint jarak jauh mana yang diizinkan
1359
1360<Accordion title="Contoh: Daftar putih hanya URL">
1361 ```json theme={null}
1362 {
1363 "allowedMcpServers": [
1364 { "serverUrl": "https://mcp.company.com/*" },
1365 { "serverUrl": "https://*.internal.corp/*" }
1366 ]
1367 }
1368 ```
1369
1370 **Hasil**:
1371
1372 * Server HTTP di `https://mcp.company.com/api`: ✅ Diizinkan (cocok dengan pola URL)
1373 * Server HTTP di `https://api.internal.corp/mcp`: ✅ Diizinkan (cocok dengan wildcard subdomain)
1374 * Server HTTP di `https://external.com/mcp`: ❌ Diblokir (tidak cocok dengan pola URL apa pun)
1375 * Server stdio dengan perintah apa pun: ❌ Diblokir (tidak ada entri nama atau perintah untuk dicocokkan)
1376</Accordion>
1377
1378<Accordion title="Contoh: Daftar putih hanya perintah">
1379 ```json theme={null}
1380 {
1381 "allowedMcpServers": [
1382 { "serverCommand": ["npx", "-y", "approved-package"] }
1383 ]
1384 }
1385 ```
1386
1387 **Hasil**:
1388
1389 * Server stdio dengan `["npx", "-y", "approved-package"]`: ✅ Diizinkan (cocok dengan perintah)
1390 * Server stdio dengan `["node", "server.js"]`: ❌ Diblokir (tidak cocok dengan perintah)
1391 * Server HTTP bernama "my-api": ❌ Diblokir (tidak ada entri nama untuk dicocokkan)
1392</Accordion>
1393
1394<Accordion title="Contoh: Daftar putih nama dan perintah campuran">
1395 ```json theme={null}
1396 {
1397 "allowedMcpServers": [
1398 { "serverName": "github" },
1399 { "serverCommand": ["npx", "-y", "approved-package"] }
1400 ]
1401 }
1402 ```
1403
1404 **Hasil**:
1405
1406 * Server stdio bernama "local-tool" dengan `["npx", "-y", "approved-package"]`: ✅ Diizinkan (cocok dengan perintah)
1407 * Server stdio bernama "local-tool" dengan `["node", "server.js"]`: ❌ Diblokir (entri perintah ada tetapi tidak cocok)
1408 * Server stdio bernama "github" dengan `["node", "server.js"]`: ❌ Diblokir (server stdio harus cocok dengan perintah ketika entri perintah ada)
1409 * Server HTTP bernama "github": ✅ Diizinkan (cocok dengan nama)
1410 * Server HTTP bernama "other-api": ❌ Diblokir (nama tidak cocok)
1411</Accordion>
1412
1413<Accordion title="Contoh: Daftar putih hanya nama">
1414 ```json theme={null}
1415 {
1416 "allowedMcpServers": [
1417 { "serverName": "github" },
1418 { "serverName": "internal-tool" }
1419 ]
1420 }
1421 ```
1422
1423 **Hasil**:
1424
1425 * Server stdio bernama "github" dengan perintah apa pun: ✅ Diizinkan (tidak ada pembatasan perintah)
1426 * Server stdio bernama "internal-tool" dengan perintah apa pun: ✅ Diizinkan (tidak ada pembatasan perintah)
1427 * Server HTTP bernama "github": ✅ Diizinkan (cocok dengan nama)
1428 * Server apa pun bernama "other": ❌ Diblokir (nama tidak cocok)
1429</Accordion>
1430
1431#### Perilaku daftar putih (`allowedMcpServers`)
1432
1433* `undefined` (default): Tidak ada pembatasan - pengguna dapat mengonfigurasi server MCP apa pun
1434* Array kosong `[]`: Penguncian lengkap - pengguna tidak dapat mengonfigurasi server MCP apa pun
1435* Daftar entri: Pengguna hanya dapat mengonfigurasi server yang cocok berdasarkan nama, perintah, atau pola URL
1436
1437#### Perilaku daftar hitam (`deniedMcpServers`)
1438
1439* `undefined` (default): Tidak ada server yang diblokir
1440* Array kosong `[]`: Tidak ada server yang diblokir
1441* Daftar entri: Server yang ditentukan secara eksplisit diblokir di semua cakupan
1442
1443#### Catatan penting
1444
1445* **Opsi 1 dan Opsi 2 dapat digabungkan**: Jika `managed-mcp.json` ada, file tersebut memiliki kontrol eksklusif dan pengguna tidak dapat menambahkan server. Daftar putih/daftar hitam masih berlaku untuk server yang dikelola itu sendiri.
1446* **Daftar hitam mengambil prioritas absolut**: Jika server cocok dengan entri daftar hitam (berdasarkan nama, perintah, atau URL), server akan diblokir bahkan jika ada di daftar putih
1447* Pembatasan berbasis nama, berbasis perintah, dan berbasis URL bekerja bersama: server lulus jika cocok dengan **entri** nama, entri perintah, atau pola URL (kecuali diblokir oleh daftar hitam)
1448
1449<Note>
1450 **Saat menggunakan `managed-mcp.json`**: Pengguna tidak dapat menambahkan server MCP melalui `claude mcp add` atau file konfigurasi. Pengaturan `allowedMcpServers` dan `deniedMcpServers` masih berlaku untuk memfilter server yang dikelola mana yang benar-benar dimuat.
1451</Note>