Halaman ini mencakup konfigurasi MCP untuk Agent SDK. Untuk menambahkan server MCP ke Claude Code CLI sehingga dimuat di setiap proyek, lihat Cakupan instalasi MCP.
Quickstart
Contoh ini terhubung ke server MCP dokumentasi Claude Code menggunakan transport HTTP dan menggunakanallowedTools dengan wildcard untuk mengizinkan semua alat dari server.
Tambahkan server MCP
Anda dapat mengonfigurasi server MCP dalam kode saat memanggilquery(), atau dalam file .mcp.json yang dimuat melalui settingSources.
Tambahkan server dalam kode
Teruskan server MCP secara langsung dalam opsimcpServers. Contoh ini memulai server MCP filesystem lokal untuk /Users/me/projects. Ganti jalur tersebut dengan direktori di mesin Anda:
Tambahkan server dari file konfigurasi
Buat file.mcp.json di root proyek Anda. File ini diambil ketika sumber pengaturan project diaktifkan, yang merupakan default untuk opsi query(). Jika Anda menetapkan settingSources secara eksplisit, sertakan "project" agar file ini dimuat. Ganti /Users/me/projects dengan direktori di mesin Anda:
Waktu koneksi
Claude Code mendaftarkan server yang Anda berikan dalamoptions.mcpServers saat startup dan mengirimkan pesan init setelah penundaan putaran pertama, jika ada, terselesaikan. Apakah setiap server options.mcpServers menunda putaran pertama, dan kapan server tersebut terhubung, tergantung pada jenisnya:
Server yang dimuat dari file pengaturan seperti
.mcp.json atau dari plugin biasanya menunjukkan pending dalam pesan init. Ketika options.mcpServers menyimpan server stdio, HTTP, atau SSE, putaran pertama menunggu server yang tertunda ini juga, hingga MCP_TIMEOUT. Ketika options.mcpServers kosong atau hanya menyimpan server SDK, putaran pertama menunggu hingga 2 detik sebagai gantinya:
- Dengan pencarian alat, default: penundaan mencakup server yang masih tertunda yang dikonfigurasi dengan
alwaysLoad: truedan bukan sisanya. Sisanya terus terhubung di latar belakang. Ketersediaan alat menjelaskan bagaimana Claude mencapai alat mereka setelah terhubung. - Tanpa pencarian alat: penundaan mencakup setiap server yang tertunda. Konfigurasi pencarian alat mencakup apa yang mematikan pencarian alat. Jika Anda mengecualikan alat
ToolSearchdari sesi, misalnya melaluidisallowedTools, sesi juga berjalan tanpa pencarian alat.
permissionPromptToolName, putaran pertama juga menunggu server alat tersebut dalam setiap kasus, hingga MCP_TIMEOUT.
Untuk menetapkan penundaan putaran pertama sendiri, tambahkan CLAUDE_CODE_MCP_STARTUP_WAIT_MS ke opsi env, misalnya CLAUDE_CODE_MCP_STARTUP_WAIT_MS: "5000". Putaran pertama kemudian menunggu hingga banyak milidetik untuk setiap server yang tertunda, terlepas dari apakah pencarian alat tersedia. Batas waktu ini juga menggantikan penundaan putaran pertama MCP_TIMEOUT untuk server stdio, HTTP, dan SSE dalam options.mcpServers. CLAUDE_CODE_MCP_STARTUP_WAIT_MS memerlukan Claude Code v2.1.274 atau lebih baru.
Server yang masih tertunda ketika penundaan berakhir terus terhubung di latar belakang. Atur variabel ke 0 untuk melewati penundaan. Server permissionPromptToolName mempertahankan penundaan MCP_TIMEOUT sendiri terlepas dari nilainya.
Untuk memblokir startup itu sendiri pada fase terpisah yang lebih awal daripada penundaan putaran pertama, sebelum pesan init dikirim:
- Atur
MCP_CONNECTION_NONBLOCKINGke0untuk memblokir seluruh batch koneksi. Claude Code membatasi penundaan tersebut pada 5 detik secara default. Sesuaikan batas dengan variabel lingkunganMCP_CONNECT_TIMEOUT_MS, dalam milidetik. Server yang masih tertunda pada batas waktu tersebut terus terhubung di latar belakang. - Atur
alwaysLoad: truepada konfigurasi server untuk membuat alatnya tersedia pada skema lengkap mereka pada putaran pertama, dikecualikan dari penundaan pencarian alat. Claude Code menunggu saat startup untuk alat server tersebut, dibatasi pada batas waktu yang sama, sementara server lain terus terhubung di latar belakang; server jarak jauh dengan daftar alat yang di-cache menyediakannya tanpa terhubung, sesuai tabel di atas.
system dengan subtipe init melaporkan status setiap server pada saat pesan tersebut dikirim; lihat Penanganan kesalahan untuk membaca status tersebut.
Izinkan alat MCP
Alat MCP memerlukan izin eksplisit sebelum Claude dapat menggunakannya. Tanpa izin, Claude akan melihat bahwa alat tersedia tetapi tidak akan dapat memanggilnya.Konvensi penamaan alat
Tool MCP diberi namamcp__<server-name>__<tool-name>, dengan <server-name> adalah nama yang Anda gunakan untuk mendaftarkan server, seperti kuncinya di mcpServers.
Karakter dalam nama server seperti . dan spasi diganti dengan _. Tabel ini menunjukkan nama lengkap tool list_issues untuk dua kunci server:
Gunakan nama tool lengkap di
allowedTools dan di aturan izin MCP. Untuk server yang disediakan oleh plugin, <server-name> menggunakan bentuk dengan cakupan plugin dan diawali dengan plugin_.
Auto-approve dengan allowedTools
GunakanallowedTools untuk auto-approve alat MCP tertentu sehingga Claude dapat menggunakannya tanpa prompt izin:
*) memungkinkan Anda untuk mengizinkan semua alat dari server tanpa mencantumkan masing-masing secara individual.
Lebih suka
allowedTools daripada mode izin untuk akses MCP. permissionMode: "acceptEdits" tidak auto-approve alat MCP (hanya edit file dan perintah Bash filesystem). permissionMode: "bypassPermissions" melakukan auto-approve alat MCP tetapi juga menonaktifkan sebagian besar prompt keamanan lainnya, yang lebih luas dari yang diperlukan; lihat Bagaimana izin dievaluasi untuk prompt yang tetap ada. Wildcard dalam allowedTools memberikan akses ke server MCP yang Anda inginkan dan tidak lebih. Lihat Mode izin untuk perbandingan lengkap.Temukan alat yang tersedia
Untuk melihat alat apa yang disediakan server MCP, periksa dokumentasi server atau inspeksi arraytools dalam pesan init system. Nama alat MCP dimulai dengan mcp__.
Claude Code memancarkan pesan init setelah penundaan koneksi giliran pertama untuk server yang dilewatkan dalam options.mcpServers, jadi array tools mencantumkan alat mcp__ dari setiap server yang telah terhubung pada saat itu, ditambah alat dari server dengan daftar alat yang di-cache, yang terhubung pada penggunaan pertama. Alat dari server lain yang belum terhubung tidak ada; lihat Penanganan kesalahan untuk membaca status setiap server.
Filter ini mencetak nama alat MCP:
Jenis transport
Server MCP berkomunikasi dengan agen Anda menggunakan protokol transport yang berbeda. Periksa dokumentasi server untuk melihat transport mana yang didukungnya:- Jika dokumen memberi Anda perintah untuk dijalankan (seperti
npx @modelcontextprotocol/server-filesystem), gunakan stdio - Jika dokumen memberi Anda URL, gunakan HTTP atau SSE
- Jika Anda membangun alat Anda sendiri dalam kode, gunakan server MCP SDK
Server stdio
Proses lokal yang berkomunikasi melalui stdin/stdout. Gunakan ini untuk server MCP yang Anda jalankan di mesin yang sama. Untuk bentuk.mcp.json, gunakan bidang yang sama seperti yang ditunjukkan di Menambahkan server dari file konfigurasi. Dalam kode, teruskan perintah dan argumennya. Ganti /Users/me/projects dengan direktori di mesin Anda:
Server HTTP/SSE
Gunakan HTTP atau SSE untuk server MCP yang dihosting di cloud dan API jarak jauh. Untuk bentuk.mcp.json, gunakan bidang yang sama seperti contoh di Header HTTP untuk server jarak jauh, dengan "type": "sse" untuk server SSE. Dalam kode, teruskan URL server:
"type": "http" sebagai gantinya. Dalam file konfigurasi .mcp.json dan JSON lainnya, "streamable-http" diterima sebagai alias untuk "http". Tipe McpHttpServerConfig SDK hanya mendeklarasikan "http", jadi gunakan "http" untuk server yang Anda teruskan dalam kode.
Server MCP SDK
Tentukan alat khusus langsung dalam kode aplikasi Anda alih-alih menjalankan proses server terpisah. Lihat panduan alat khusus untuk detail implementasi. Server MCP SDK yang didaftarkan oleh permintaan kontrolinitialize mulai terhubung segera setelah Claude Code memproses permintaan.
Pencarian tool MCP
Ketika Anda memiliki banyak tool MCP yang dikonfigurasi, definisi tool dapat mengonsumsi sebagian signifikan dari jendela konteks Anda. Pencarian tool mengatasi ini dengan menahan definisi tool dari konteks dan memuat hanya yang Claude butuhkan untuk setiap giliran. Pencarian tool diaktifkan secara default. Lihat Pencarian tool untuk opsi konfigurasi, praktik terbaik, dan menggunakan pencarian tool dengan tool SDK kustom.Autentikasi
Sebagian besar server MCP memerlukan autentikasi untuk mengakses layanan eksternal. Teruskan kredensial melalui variabel lingkungan dalam konfigurasi server.Teruskan kredensial melalui variabel lingkungan
Gunakan fieldenv untuk meneruskan kunci API, token, dan kredensial lainnya ke server MCP:
- Dalam kode
- .mcp.json
Header HTTP untuk server jarak jauh
Untuk server HTTP dan SSE, teruskan header autentikasi langsung dalam konfigurasi server:- Dalam kode
- .mcp.json
Autentikasi OAuth2
Spesifikasi MCP mendukung OAuth 2.1 untuk otorisasi. SDK tidak membuka browser atau menjalankan alur OAuth interaktif. Ketika server yang dikonfigurasi mengembalikan tantangan otorisasi dan tidak ada token yang disimpan tersedia, jalankan agen berlanjut tanpa alat server tersebut, dan server melaporkan statusneeds-auth. Array mcp_servers dari pesan inisialisasi sistem mungkin masih menunjukkan pending untuk server tersebut saat dipancarkan. Untuk mengonfirmasi apakah server memerlukan kredensial, polling mcpServerStatus() dalam SDK TypeScript atau get_mcp_status() dalam Python.
Untuk menyediakan kredensial, selesaikan alur OAuth dalam aplikasi Anda sendiri dan teruskan token akses yang dihasilkan dalam headers server:
Contoh
Daftar masalah dari repositori
Contoh ini terhubung ke server MCP GitHub jarak jauh untuk mencantumkan masalah terbaru. Contoh ini mencakup logging debug untuk memverifikasi koneksi MCP dan panggilan alat. Sebelum menjalankan, buat token akses pribadi GitHub dengan akses baca ke repositori yang ingin Anda kueri dan atur sebagai variabel lingkungan:MCP servers:, status sebesar connected untuk github mengkonfirmasi token berfungsi. Jika Claude Code memiliki daftar alat yang di-cache untuk server, status dapat membaca pending sebagai gantinya dan server terhubung pada panggilan alat pertamanya. Jika statusnya adalah failed atau needs-auth, lihat Penanganan kesalahan sebelum mempercayai hasilnya, karena Claude dapat kembali ke alat bawaan ketika server tidak tersedia.
Kueri basis data
Contoh ini menggunakan DBHub untuk mengueri basis data Postgres. Agen secara otomatis menemukan skema basis data, menulis kueri SQL, dan mengembalikan hasilnya. Alatexecute_sql DBHub menjalankan SQL apa pun yang dikeluarkan agen, termasuk penulisan, kecuali Anda membatasinya. Mengatur readonly = true dalam file konfigurasi DBHub membuat DBHub menolak pernyataan INSERT, UPDATE, DELETE, dan DDL, sehingga contoh tidak dapat memodifikasi data Anda bahkan jika agen mengeluarkan penulisan. DBHub menyelesaikan ${DATABASE_URL} dari lingkungan proses ketika memuat konfigurasi, sehingga string koneksi tetap keluar dari file. Buat dbhub.toml ini di sebelah skrip Anda:
dbhub.toml
DATABASE_URL ke string koneksi Anda. Ganti nilai placeholder dengan detail basis data Anda sendiri:
Penanganan kesalahan
Server MCP dapat gagal terhubung karena berbagai alasan: proses server mungkin tidak terinstal, kredensial mungkin tidak valid, atau server jarak jauh mungkin tidak dapat dijangkau. Claude Code mengirimkan pesansystem dengan subtype init di awal setiap kueri. Pesan ini mencakup status koneksi untuk setiap server MCP. Bidang status dapat berupa "pending", "connected", "failed", "needs-auth", atau "disabled". Claude Code mengirimkan pesan init setelah waktu tunggu koneksi putaran pertama untuk server yang dilewatkan dalam options.mcpServers, jadi server seperti itu yang terhubung dalam waktu tunggu menunjukkan "connected".
Dalam pesan init, jangan perlakukan "pending" sebagai kegagalan dengan sendirinya. Ini dapat berarti salah satu dari ini:
- Server belum terhubung. Lihat berapa lama Claude Code menunggu sebelum putaran pertama
- Daftar alat server disajikan dari cache, dengan koneksi yang dibuat pada penggunaan pertama
- Batas waktu koneksi telah kedaluwarsa. Server seperti itu melaporkan
"pending"atau"failed"tergantung pada waktu
"failed" atau "needs-auth" untuk mendeteksi server yang tidak akan dapat digunakan:
"connected". Ketika koneksi ke server itu terputus di tengah sesi, Claude Code memindahkan server kembali ke "pending" sambil menghubungkan kembali. Panggilan mcpServerStatus() yang lebih baru dalam TypeScript, atau ClaudeSDKClient.get_mcp_status() dalam Python, kemudian dapat melaporkan "pending" untuk server yang Anda lihat terhubung sebelumnya, tanpa perubahan konfigurasi di pihak Anda.
Setelah lima upaya penghubungan kembali gagal, server melaporkan "failed", atau "needs-auth" ketika perlu diotorisasi lagi. Server HTTP atau SSE yang berstatus "failed" masih dapat kembali ke "connected" tanpa panggilan dari Anda, karena Claude Code terus mencoba ulang di latar belakang setelah terjadi kesalahan sementara. Untuk mencoba ulang secara manual, panggil reconnectMcpServer() dalam TypeScript atau ClaudeSDKClient.reconnect_mcp_server() dalam Python.
Troubleshooting
Server menunjukkan status “failed”
Periksa pesaninit untuk melihat server mana yang gagal terhubung:
"pending" tidak berarti server gagal. Lihat Error handling untuk kasus-kasus yang dicakupnya saat init. Untuk mendapatkan status yang diperbarui nanti dalam sesi, panggil metode mcpServerStatus() query di TypeScript SDK, atau ClaudeSDKClient.get_mcp_status() di Python.
Penyebab umum:
- Variabel lingkungan yang hilang: Pastikan token dan kredensial yang diperlukan telah diatur. Untuk server stdio, periksa bahwa field
envcocok dengan apa yang diharapkan server. - Server tidak terinstal: Untuk perintah
npx, verifikasi bahwa paket ada dan Node.js berada di PATH Anda. - String koneksi tidak valid: Untuk server database, verifikasi format string koneksi dan bahwa database dapat diakses.
- Masalah jaringan: Untuk server HTTP/SSE jarak jauh, periksa bahwa URL dapat dijangkau dan firewall apa pun memungkinkan koneksi.
Tools tidak dipanggil
Jika Claude melihat tools tetapi tidak menggunakannya, periksa bahwa Anda telah memberikan izin denganallowedTools:
Tool hilang dari server MCP SDK
Di TypeScript SDK, ketika skema input suatu tool tidak dapat dikonversi ke JSON Schema, server yang Anda buat dengancreateSdkMcpServer() menghilangkan tool tersebut saat mencantumkan tool-nya. SDK mengeluarkan peringatan pada saat itu. Di bawah Node.js, peringatan tersebut adalah process warning dengan kode CLAUDE_SDK_MCP_TOOL_SCHEMA_UNCONVERTIBLE, dan diawali dengan teks berikut:
Connection timeouts
Koneksi server MCP habis waktu setelah 30 detik secara default. Untuk mengubah berapa lama panggilan tool yang sedang berjalan dapat memakan waktu, aturMCP_TOOL_TIMEOUT. Jika server Anda membutuhkan waktu lebih lama untuk memulai, koneksi gagal. Naikkan batas koneksi dengan variabel lingkungan MCP_TIMEOUT, dalam milidetik. Untuk server yang membutuhkan lebih banyak waktu startup, pertimbangkan juga:
- Menggunakan server yang lebih ringan jika tersedia
- Pre-warming server sebelum memulai agent Anda
- Memeriksa log server untuk penyebab inisialisasi yang lambat
timeout ke createSdkMcpServer().
Tool output melebihi token maksimal yang diizinkan
SDK menerapkan batas output MCP yang sama dengan Claude Code. Ketika hasil tool yang berhasil tanpa konten gambar lebih besar dari 25.000 token, Claude Code menyimpan output ke file dan mengganti hasil tool dengan pesan kesalahan yang menyebutkan jalur file, sehingga agent dapat membaca output kembali dalam porsi. Untuk mengubah batas token, atur environment variableMAX_MCP_OUTPUT_TOKENS. Kecuali tool mendeklarasikan anthropic/maxResultSizeChars, hasil teks yang berhasil dengan panjang lebih dari 50.000 karakter disimpan ke file terlepas dari batas token. Lihat MCP output limits and warnings untuk perilaku lengkap, termasuk bagaimana server mendeklarasikan anotasi tersebut.
Sumber daya terkait
- Panduan alat kustom: Bangun server MCP Anda sendiri yang berjalan dalam proses dengan aplikasi SDK Anda
- Izin: Kontrol alat MCP mana yang dapat digunakan agen Anda dengan
allowedToolsdandisallowedTools - Referensi TypeScript SDK: Referensi API lengkap termasuk opsi konfigurasi MCP
- Referensi Python SDK: Referensi API lengkap termasuk opsi konfigurasi MCP
- Direktori server MCP: Jelajahi server MCP yang tersedia untuk database, API, dan lainnya