Halaman ini berlaku untuk Apigee dan Apigee hybrid.
Lihat dokumentasi
Apigee Edge.
Halaman ini menjelaskan cara memecahkan masalah dan menyelesaikan masalah terkait deployment proxy penemuan MCP. Anda dapat menggunakan halaman ini untuk memahami siklus proses penyediaan asinkron deployment MCP, menyelesaikan kode error, dan memverifikasi konektivitas runtime.
Memahami deployment MCP
Deployment Proxy Penemuan MCP adalah proses asinkron multi-langkah yang memastikan konfigurasi disebarkan sepenuhnya di seluruh infrastruktur Apigee dan Google Cloud sebelum deployment proxy selesai.
Saat langkah-langkah penyediaan downstream ini berlangsung, UI akan menampilkan proxy dalam status Provisioning. Setelah proses selesai, statusnya akan berubah menjadi Deployed. Status ini mengonfirmasi bahwa semua komponen downstream telah disediakan sepenuhnya dan proxy siap menangani traffic.
Pemecahan masalah
Bagian berikut menjelaskan error dan masalah umum yang mungkin Anda alami saat menggunakan MCP di Apigee.
Backend tidak menerima argumen alat di lokasi yang diharapkan
Masalah: Backend membaca argumen alat dari satu lokasi permintaan
— string kueri, header, atau cookie — tetapi spesifikasi OpenAPI
menyatakan parameter in di lokasi yang berbeda, sehingga
argumen tiba di tempat lain pada permintaan backend. Panggilan akan gagal atau
berperilaku seolah-olah argumen tidak ada.
Gejala: Permintaan tools/call berhasil di lapisan MCP
dan klien MCP menyediakan argumen, tetapi backend merespons seolah-olah
nilai tidak ada — misalnya 400 untuk
nilai yang diperlukan, atau default yang diterapkan sebagai pengganti nilai yang dikirim.
Penyebab: Parameter dideklarasikan sebagai in: header atau
in: cookie dalam spesifikasi OpenAPI, sehingga Apigee mengirimkan
nilainya sebagai header permintaan atau di header Cookie, bukan
dalam string kueri. Backend yang membaca nilai hanya dari string kueri tidak akan melihatnya. Lihat
Penempatan
argumen alat pada permintaan backend.
Penyelesaian: Tentukan tempat nilai berada dan buat spesifikasi serta backend setuju:
- Untuk mempertahankan nilai dalam string kueri, deklarasikan parameter
in: query. - Untuk mengirimkannya sebagai header atau cookie, biarkan deklarasi apa adanya dan baca nilai dari lokasi tersebut di backend Anda.
Backend berhenti menerima cookie yang dibawa oleh permintaan klien MCP
Masalah: Cookie yang tiba di permintaan HTTP yang dibuat klien MCP — misalnya, cookie sesi dari klien berbasis browser — berhenti mencapai backend pada beberapa panggilan alat.
Gejala: Backend berperilaku seolah-olah pemanggil tidak diautentikasi atau tidak dalam sesi, dan perilakunya tidak konsisten: operasi yang sama berfungsi pada beberapa panggilan dan tidak pada panggilan lainnya.
Penyebab: Operasi mendeklarasikan satu atau beberapa parameter in: cookie, dan panggilan yang terpengaruh menyediakan setidaknya salah satunya. Header
Cookie ditulis ulang secara keseluruhan, bukan ditambahkan, sehingga
pada panggilan tersebut, header hanya membawa parameter cookie yang dideklarasikan dan setiap cookie
lainnya dihapus. Panggilan yang tidak menyediakan parameter cookie akan meneruskan header tanpa perubahan, sehingga hanya beberapa panggilan yang gagal. Lihat
Cookie
pada permintaan ke backend Anda.
Penyelesaian: Deklarasikan setiap cookie yang diperlukan backend sebagai parameter in: cookie pada setiap operasi yang memerlukannya, sehingga nilainya selalu disediakan oleh panggilan alat, bukan diwarisi dari permintaan klien. Tidak ada setelan yang mempertahankan cookie yang tidak dideklarasikan.
Kode status respons error untuk panggilan alat dan metadata
Endpoint MCP Apigee menampilkan kode status HTTP yang mengikuti spesifikasi Model Context Protocol (MCP) dan standar OAuth terkait. Memahami perilaku ini akan membantu Anda menangani error dengan benar di klien MCP atau agen AI Anda.
Tabel berikut merangkum kode status yang ditampilkan oleh endpoint MCP Apigee:
| Skenario | Kode status HTTP | Isi respons |
|---|---|---|
Eksekusi alat gagal di tools/call (misalnya, API backend menampilkan error 4xx atau 5xx, seperti error validasi atau kolom wajib diisi yang tidak ada). |
200 OK |
CallToolResult dengan result.isError yang ditetapkan ke
true dan detail error di content. Hal ini memungkinkan klien MCP dan agen LLM membaca error dan memulihkan (misalnya, dengan meminta ulang input yang tidak ada dan mencoba lagi) daripada menghentikan sesi. |
Metadata Resource yang Dilindungi OAuth (PRM) tidak dikonfigurasi atau tidak dapat
ditemukan di /.well-known/oauth-protected-resource/mcp. |
404 Not Found |
Menunjukkan bahwa tidak ada metadata resource yang dilindungi yang tersedia di lokasi yang diminta. |
| Token akses tidak ada, tidak valid, atau sudah tidak berlaku. | 401 Unauthorized |
Menyertakan tantangan WWW-Authenticate untuk mendorong alur penemuan OAuth. |
| Token akses tidak memiliki cakupan yang memadai. | 403 Forbidden |
Menyertakan tantangan WWW-Authenticate untuk mendorong alur otorisasi peningkatan. |
Contoh: isi respons error eksekusi alat
Jika panggilan alat gagal, Apigee MCP akan menampilkan HTTP 200 OK dan
melaporkan kegagalan dalam objek result JSON-RPC, dengan
isError ditetapkan ke true. Error asli yang ditampilkan oleh backend Anda dipertahankan: isi respons backend ditempatkan secara verbatim (sebagai string) di result.content[].text. Misalnya, jika backend menampilkan
HTTP 404 dengan isi {"error":"User 42 not found"}, respons
MCP adalah:
{ "jsonrpc": "2.0", "id": 1, "result": { "content": [ { "type": "text", "text": "{\"error\":\"User 42 not found\"}" } ], "isError": true } }
id cocok dengan id permintaan tools/call Anda.
Jika backend tidak menampilkan isi respons, text akan berisi ringkasan yang dihasilkan, seperti Operation failed (HTTP 500).
Klien MCP Anda harus memeriksa result.isError (bukan kode status HTTP)
untuk mendeteksi panggilan alat yang gagal. Jika kode klien Anda secara khusus mengharapkan status HTTP 4xx atau 5xx untuk menandakan error eksekusi alat, kode tersebut tidak akan mendeteksi error, karena responsnya adalah HTTP 200 OK. Update klien tersebut untuk membaca result.isError dan
array content.
Error tingkat protokol (misalnya, permintaan JSON-RPC yang salah format) berbeda dengan
error eksekusi alat: error tersebut terus ditampilkan dalam objek error
JSON-RPC (misalnya, {"jsonrpc": "2.0", "error": {"code": -32700, ...}})
bukan di result.isError.
Rekomendasi: Klien MCP yang mematuhi standar menangani kode status ini
melalui logika defaultnya, sehingga tidak diperlukan perubahan. Jika sebelumnya Anda menambahkan
solusi sisi klien untuk menangani kode status non-standar—misalnya, mengurai
isi respons non-2xx untuk error tools/call, atau memperlakukan
respons 500 dari endpoint PRM sebagai "metadata tidak dikonfigurasi"—sebaiknya
hapus solusi tersebut. Jika tidak, klien Anda mungkin akan terus menggunakan
logika penanganan yang sudah tidak berlaku, bukan memproses kode status yang telah diperbaiki seperti biasa.
Kebijakan CORS untuk panggilan MCP berbasis browser
Kebijakan Cross-Origin Resource Sharing (CORS) diperlukan saat panggilan MCP Apigee dilakukan langsung dari browser (misalnya, saat pemeriksa MCP menggunakan setelan "Direct", bukan "Via Proxy"). Template Proxy Discovery MCP menyertakan kebijakan CORS Apigee di PreFlow Permintaan Endpoint Proxy dari paket proxy secara default untuk mengaktifkan panggilan berbasis browser.
Jika Anda mengalami masalah terkait CORS saat melakukan panggilan langsung dari browser, Anda mungkin perlu menyesuaikan setelan kebijakan CORS di PreFlow Permintaan Endpoint Proxy dari paket proxy MCP Discovery Anda.
Error penguraian JSON saat mengirim permintaan ke endpoint MCP
Anda mungkin menerima pesan error yang mirip dengan berikut ini (atau dengan kode dan pesan error yang berbeda) saat mengirim permintaan ke endpoint MCP Anda:
{
"error": {
"code": -32700,
"message": "JSON parse error"
},
"id": null,
"jsonrpc": "2.0"
}Jika demikian, sebaiknya konfirmasi informasi berikut:
- Anda telah memasukkan URL endpoint MCP yang benar.
- Permintaan Anda diformat dengan benar.
- Anda mengakses metode yang didukung.
- Anda telah mengaktifkan dan mengonfigurasi Proxy Penemuan MCP di wilayah yang didukung. Untuk mengetahui daftar region yang mungkin memiliki batas kapasitas, lihat kegagalan deployment.
Kegagalan deployment
Jika deployment Proxy Discovery MCP Anda gagal dengan status Failed di UI, periksa pesan error untuk mengetahui detail selengkapnya. Kegagalan umum meliputi:
- Networking configuration failed atau Unsupported Schema in OAS: Error ini biasanya menunjukkan masalah pada spesifikasi OpenAPI Anda. Pastikan spesifikasi Anda valid dan menggunakan versi yang didukung.
- Batas kapasitas region (khusus Apigee): Jika Anda melihat error terkait kegagalan penyediaan load balancer, atau status penyediaan tidak pernah berubah menjadi Deployed, hal ini mungkin disebabkan oleh batas kapasitas infrastruktur sementara di salah satu region berikut:
asia-east2asia-northeast3asia-southeast2australia-southeast1europe-central2europe-west12europe-west9me-central2us-central2
Untuk mengatasi error, coba deploy proxy ke lingkungan di region lain. Mode kegagalan ini tidak berlaku untuk Apigee hybrid, yang infrastruktur runtime-nya adalah cluster Anda sendiri.
- MCP tidak diaktifkan di cluster (khusus Apigee hybrid): Jika deployment proxy MCP Anda tetap dalam status Provisioning tanpa batas waktu dan tidak pernah mencapai Deployed, pastikan MCP diaktifkan di cluster Anda. Lihat Diagnosis sisi cluster di bawah.
Diagnosis sisi cluster (khusus Apigee hybrid)
Karena bidang data MCP hybrid Apigee berjalan di dalam cluster Kubernetes Anda sendiri,
mode kegagalan dalam cluster didiagnosis dengan kubectl terhadap cluster.
Ikuti checklist diagnostik berikut secara berurutan.
Langkah 1: Pastikan MCP diaktifkan di cluster
MCP di-deploy sebagai resource kustom ApigeeDeployment (dikelola oleh operator Apigee), bukan sebagai Deployment Kubernetes standar. Periksa
MCP ApigeeDeployment:
kubectl -n APIGEE_NAMESPACE get apigeedeployment -l app=apigee-mcp-server
Output yang diharapkan (nama resource menyertakan akhiran yang berasal dari organisasi, yang ditampilkan di sini sebagai
ORG_CR_SUFFIX):
NAME STATE NESTEDSTATE AGE apigee-mcp-server-default-ORG_CR_SUFFIX running 1h
Jika perintah menampilkan No resources found in APIGEE_NAMESPACE namespace.,
MCP tidak diaktifkan. Kembali ke
Mengaktifkan MCP di Apigee hybrid dan
pastikan enableMcpServer: true ditetapkan sebagai kunci level teratas di
overrides.yaml, dan Anda telah mengupgrade rilis Helm
apigee-operator sebelum rilis apigee-org. Lihat
Langkah 3
dan Langkah 4
dari prosedur pengaktifan untuk perintah helm yang benar.
Langkah 2: Pastikan pod MCP berjalan
kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-mcp-server
Output yang diharapkan (akhiran pod akan berbeda):
NAME READY STATUS RESTARTS AGE apigee-mcp-server-default-ORG_CR_SUFFIX-1170-abcd1234 2/2 Running 0 1h apigee-mcp-server-default-ORG_CR_SUFFIX-1170-efgh5678 2/2 Running 0 1h
Nama pod mengikuti template
apigee-mcp-server-default-ORG_CR_SUFFIX-REV-POD_HASH,
dengan REV adalah revisi rilis hybrid empat digit (misalnya, 1170
untuk hybrid 1.17.0) dan POD_HASH adalah akhiran alfanumerik delapan karakter yang
berbeda untuk setiap pod.
Setiap pod harus menampilkan 2/2 di kolom READY dan
Running di kolom STATUS. Jika pod tidak Running,
kubectl -n APIGEE_NAMESPACE describe pod POD_NAME akan menampilkan
alasannya. Penyebab umumnya adalah kegagalan pull image (verifikasi egress dari cluster Anda ke registry image yang dikonfigurasi di overrides.yaml) dan headroom CPU atau memori yang tidak memadai (naikkan mcpServer.resources.requests di overrides.yaml).
Langkah 3: Periksa status pull konfigurasi sidecar
Container sidecar apigee-mcp-server-config di setiap pod MCP
secara berkala mengambil konfigurasi MCP dari bidang kontrol Apigee. Setiap pull mengambil
referensi konfigurasi saat ini dari apigee.googleapis.com, lalu
mengambil paket konfigurasi yang direferensikan dari Cloud Storage. Data plane MCP
mulai menyalurkan traffic alat MCP di https://mcp.apigee.internal/mcp setelah
pull berhasil diselesaikan dengan konfigurasi yang valid.
Sebelum pull pertama yang berhasil dengan konfigurasi yang valid (baik karena belum ada Proxy Discovery MCP yang di-deploy untuk organisasi Anda, atau karena sidecar tidak dapat menjangkau bidang kontrol), pod MCP tetap Ready, tetapi permintaan ke https://mcp.apigee.internal/mcp gagal dengan koneksi ditolak.
Periksa log file bantuan untuk menentukan kasus yang Anda alami:
kubectl -n APIGEE_NAMESPACE logs -l app=apigee-mcp-server -c apigee-mcp-server-config --tail=100
- Baris
infoberulang yang menunjukkan tidak ada konfigurasi MCP dari bidang kontrol: Bidang kontrol Apigee menampilkan respons yang berhasil, tetapi belum ada Proxy Discovery MCP yang di-deploy untuk organisasi Anda. Ini adalah status stabil yang diharapkan selama orientasi. Untuk mentransisikan bidang data MCP ke status penyajian, deploy Proxy Penemuan MCP sesuai dengan panduan memulai MCP.{"level":"info","ts":1787582542.68,"caller":"mcpsidecar/sidecar.go:397","msg":"mcpsidecar: no MCP config from CP yet; skipping tick, pod stays Ready via seed","org":"YOUR_ORG","mcp_server_id":"default"} errorbaris dengan penghitungconsecutive_failures: Log sidecar adalah JSON terstruktur. Saat Anda melihat{"level":"error","ts":1787613247.74,"caller":"mcpsidecar/sidecar.go:...","msg":"mcpsidecar: ...","org":"YOUR_ORG","mcp_server_id":"default","consecutive_failures":185,"error":"<wrapped error text>"}"level":"error"dengan penghitungconsecutive_failuresyang meningkat, sidecar tidak dapat menyelesaikan pengambilan konfigurasi. Sidecar akan otomatis mencoba lagi dengan backoff dan mereset penghitung ke 0 pada penarikan berikutnya yang berhasil.Penyebab utama yang umum untuk diperiksa saat penghitung ini terus meningkat:
- Akun layanan Google Cloud
apigee-watchertidak ada dalam daftarwatcher_identitiesdi resourcecontrolPlaneAccessorganisasi Apigee Anda. Lihat Langkah 2: Berikan akses identitas watcher ke konfigurasi MCP di bidang kontrol dalam prosedur pengaktifan untuk menambahkan pemberian dan memverifikasi bahwa pemberian tersebut telah diterapkan. - Egress dari cluster Anda ke
apigee.googleapis.comataustorage.googleapis.comdiblokir. Kedua endpoint harus dapat dijangkau dari pod MCP (lihat Persyaratan jaringan keluar dalam prosedur pengaktifan). - Akun layanan
apigee-watchertidak dapat memperoleh token akses Google Cloud dari cluster ini. Jika komponen Apigee hybrid yang ada di namespace yang sama juga melaporkan kegagalan autentikasi, selesaikan masalah autentikasi bersama terlebih dahulu. - Error sementara pada bidang kontrol Apigee atau Cloud Storage. Jika penghitung terus meningkat dalam jangka waktu yang lama setelah mengesampingkan penyebab di atas, hubungi Dukungan Apigee.
- Akun layanan Google Cloud
Langkah 4: Pastikan hostAliases Message Processor telah dimasukkan
Saat Anda mengaktifkan MCP, operator Apigee memasukkan satu entri hostAliases ke dalam
spesifikasi pod Message Processor (MP). Entri ini berisi satu IP (ClusterIP Layanan MCP) dan dua
nama host: mcp.apigee.internal dan ORG_NAME.mcp.apigee.internal dalam huruf kecil. Pastikan injeksi berhasil:
kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-runtime \ -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.hostAliases}{"\n"}{end}'
Setiap pod MP yang tercantum harus memiliki entri hostAliases yang berisi
mcp.apigee.internal dan
ORG_NAME.mcp.apigee.internal dalam huruf kecil yang mengarah ke ClusterIP Layanan MCP. Setiap pod MP yang menampilkan entri kosong atau tidak ada dibuat sebelum MCP diaktifkan. Hapus
pod MP yang terpengaruh sehingga pengontrol ApigeeDeployment membuatnya ulang dari
spesifikasi pod saat ini (yang mencakup entri hostAliases yang dimasukkan):
kubectl -n APIGEE_NAMESPACE delete pod -l app=apigee-runtime
Langkah 5: Verifikasi menyeluruh
Untuk pengujian menyeluruh yang mengirimkan permintaan initialize MCP yang sebenarnya melalui
bidang data MCP, deploy Proxy Discovery MCP dan ikuti
panduan memulai MCP.
Sebelum Proxy Discovery MCP di-deploy untuk organisasi Anda, permintaan ke
https://mcp.apigee.internal/mcp akan gagal dengan pesan connection refused,
terlepas dari apakah Message Processor dapat menjangkau pod MCP atau tidak (lihat Langkah 3).
Kasus dukungan
Jika Anda membuka kasus dukungan yang melibatkan bidang data MCP hybrid Apigee, lampirkan output berikut untuk mempercepat diagnosis:
kubectl -n APIGEE_NAMESPACE logs -l app=apigee-mcp-server --all-containers --tail=1000kubectl -n APIGEE_NAMESPACE describe pod -l app=apigee-mcp-serverkubectl -n APIGEE_NAMESPACE get pods -l app=apigee-mcp-server -o widedankubectl -n APIGEE_NAMESPACE get svc -l app=apigee-mcp-server.- Output
overrides.yamldanhelm history APIGEE_ORG_RELEASE_NAME -n APIGEE_NAMESPACEterbaru (denganAPIGEE_ORG_RELEASE_NAMEadalah nama rilis Helm untuk diagramapigee-org; temukan denganhelm list -n APIGEE_NAMESPACE | grep apigee-org). Sebelum membagikanoverrides.yaml, edit materi rahasia, termasuk:- Kunci akun layanan inline apa pun di bagian
gcp.workloadIdentity,envs[].serviceAccountPaths, ataumcpServer.serviceAccountPath. - Setiap sertifikat TLS atau kunci pribadi di bagian
virtualhosts. - Kolom sandi
cassandra.auth. - Kredensial inline apa pun yang diteruskan penggantian Anda ke operator.
- Kunci akun layanan inline apa pun di bagian
- Perintah dan respons
curllengkap yang mereproduksi masalah.
Tidak dapat mengubah gaya API ke MCP di API Hub
Jika resource API dengan operasi API yang ada sudah ada di hub API Apigee, Anda tidak dapat mengubah atribut API style untuk resource tersebut menjadi MCP. Untuk mendaftarkan API ke hub API Apigee sebagai API MCP, Anda harus memilih gaya MCP saat pertama kali mendaftarkan API, atau memastikan tidak ada operasi yang ada di resource API sebelum mengubah gaya ke MCP.
Jika Anda mengalami masalah lain, lihat Menggunakan debug untuk mengetahui informasi mendetail tentang cara menggunakan alat Debug di konsol Google Cloud untuk menganalisis permintaan dan respons ke dan dari Proxy Discovery MCP Anda.