Halaman ini berlaku untuk Apigee dan Apigee hybrid.
Lihat dokumentasi
Apigee Edge.
Halaman ini menjelaskan cara menggunakan produk Apigee API untuk mengontrol akses ke alat MCP. Baik Anda menggunakan Apigee MCP Discovery Proxy atau mem-proxy traffic ke server MCP Anda sendiri, Anda dapat mengautentikasi klien MCP, menerapkan kuota per alat, dan memfilter visibilitas alat berdasarkan konfigurasi produk API.
Server MCP menggunakan satu endpoint (misalnya, /mcp) untuk semua pemanggilan alat. Tidak seperti REST API yang membedakan operasi berdasarkan jalur URL dan metode HTTP, MCP menyematkan operasi dalam isi permintaan JSON-RPC. Apigee menggunakan kebijakan
ParsePayload untuk mengekstrak operasi ini sehingga kebijakan pengelolaan API standar—autentikasi, penerapan kuota, dan pemfilteran alat—dapat diterapkan berdasarkan per alat.
Ringkasan
Untuk mengelola akses alat MCP dengan produk API, selesaikan langkah-langkah berikut:
- Tambahkan kebijakan ParsePayload untuk mengekstrak nama alat MCP dari isi permintaan.
- Konfigurasi produk API dengan operasi alat MCP dan kuota per alat.
- Daftarkan aplikasi developer untuk mendapatkan kredensial klien.
- Tambahkan kebijakan autentikasi (kunci API atau OAuth 2.0) untuk memverifikasi kredensial klien terhadap produk API.
- Tambahkan kebijakan Quota untuk menerapkan batas frekuensi per alat.
- Pemfilteran alat pengujian untuk mengonfirmasi bahwa
tools/listrespons difilter berdasarkan konfigurasi produk API.
Menambahkan kebijakan ParsePayload
Kebijakan ParsePayload mengurai isi permintaan JSON-RPC dan mengekstrak operasi MCP, seperti tools/call/get_weather atau tools/list. Operasi yang diekstrak disimpan dalam flow variable yang diawali dengan nama kebijakan (misalnya, parsepayload.ParsePayload-MCP.operation), yang digunakan oleh kebijakan hilir untuk autentikasi dan penerapan kuota.
Tambahkan kebijakan ParsePayload berikut ke PreFlow permintaan proxy MCP Anda:
<ParsePayload name="ParsePayload-MCP"> <DisplayName>Parse MCP Payload</DisplayName> <Source>request</Source> <PayloadType>JSON-RPC-2.0</PayloadType> <Protocol>MCP</Protocol> </ParsePayload>
Dengan:
<Source>: Pesan yang akan diurai. Nilai defaultnya adalahrequest.<PayloadType>: Format payload. Harus berupaJSON-RPC-2.0.<Protocol>: Protokol yang akan digunakan untuk parsing. Harus berupaMCPuntuk server MCP.
Setelah eksekusi, kebijakan akan mengisi variabel alur yang diawali dengan nama instance kebijakan, mengikuti pola parsepayload.policyName.suffix.
Untuk kebijakan bernama ParsePayload-MCP, variabel berikut ditetapkan:
| Variabel alur | Deskripsi | Nilai contoh |
|---|---|---|
parsepayload.ParsePayload-MCP.operation |
Nama operasi turunan yang digunakan untuk pencocokan produk API dan penerapan kuota. | tools/call/get_weather |
parsepayload.ParsePayload-MCP.json-rpc.request.method |
Kolom method JSON-RPC dari permintaan. |
tools/call |
parsepayload.ParsePayload-MCP.json-rpc.request.id |
Kolom id JSON-RPC dari permintaan. |
1 |
parsepayload.ParsePayload-MCP.json-rpc.request.params.name |
Kolom params.name dari permintaan. |
get_weather |
Mengonfigurasi produk API dengan operasi alat MCP
Produk API menentukan alat MCP mana yang dapat diakses oleh aplikasi klien dan batas kuota untuk setiap alat. Anda mengonfigurasi operasi alat MCP menggunakan
kolom payloadOperationGroup dalam definisi produk API.
Setiap entri di payloadOperationGroup.operationConfigs menentukan:
- Proxy API yang melayani alat MCP (
apiSource). - Satu atau beberapa operasi alat (misalnya,
tools/call/get_stock_price,tools/list). - Kuota opsional untuk serangkaian operasi tersebut.
Gunakan panggilan API berikut untuk membuat produk API dengan operasi alat MCP:
curl -X POST \ "https://apigee.googleapis.com/v1/organizations/ORG_NAME/apiproducts" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "name": "PRODUCT_NAME", "displayName": "PRODUCT_DISPLAY_NAME", "approvalType": "auto", "payloadOperationGroup": { "operationConfigs": [ { "apiSource": "MCP_PROXY_NAME", "operations": [ { "operation": "tools/call/get_stock_price" }, { "operation": "tools/call/get_company_news" } ], "quota": { "limit": "100", "interval": "1", "timeUnit": "minute" } }, { "apiSource": "MCP_PROXY_NAME", "operations": [ { "operation": "tools/list" } ], "quota": { "limit": "300", "interval": "1", "timeUnit": "minute" } } ] } }'
Dengan:
ORG_NAMEadalah nama organisasi Apigee Anda.PRODUCT_NAMEadalah nama internal produk API.PRODUCT_DISPLAY_NAMEadalah nama tampilan produk API.MCP_PROXY_NAMEadalah nama proxy API yang merutekan traffic ke server MCP Anda. Ini dapat berupa Proxy Penemuan MCP Apigee atau proxy dengan server MCP Anda sendiri sebagai backend.
Mengonfigurasi kuota per alat
Anda dapat mengonfigurasi kuota yang berbeda untuk setiap alat. Misalnya, konfigurasi berikut membatasi get_stock_price hingga 300 panggilan per menit, tetapi membatasi get_company_news hanya hingga 3 panggilan per menit:
{ "payloadOperationGroup": { "operationConfigs": [ { "apiSource": "MCP_PROXY_NAME", "operations": [ { "operation": "tools/call/get_stock_price" } ], "quota": { "limit": "300", "interval": "1", "timeUnit": "minute" } }, { "apiSource": "MCP_PROXY_NAME", "operations": [ { "operation": "tools/call/get_company_news" } ], "quota": { "limit": "3", "interval": "1", "timeUnit": "minute" } }, { "apiSource": "MCP_PROXY_NAME", "operations": [ { "operation": "tools/list" } ], "quota": { "limit": "300", "interval": "1", "timeUnit": "minute" } } ] } }
Anda dapat membuat beberapa produk API dengan subset alat yang berbeda untuk menawarkan akses bertingkat.
Misalnya, produk Basic mungkin hanya menyertakan tools/call/get_stock_price,
sementara produk Premium menyertakan semua alat yang tersedia dengan kuota yang lebih tinggi. Setiap
aplikasi developer dikaitkan dengan satu atau beberapa produk API, sehingga klien yang berbeda
akan otomatis mendapatkan akses ke berbagai set alat dengan batas kecepatan yang berbeda.
Mendaftarkan aplikasi developer
Untuk mendapatkan kredensial API atau OAuth untuk pengujian, daftarkan developer dan buat aplikasi developer yang terkait dengan produk API yang Anda buat pada langkah sebelumnya.
- Daftarkan developer aplikasi di organisasi Apigee Anda.
- Buat aplikasi developer dan kaitkan dengan produk API Anda.
- Dapatkan kunci konsumen (kunci API) dari kredensial aplikasi. Gunakan kunci ini dalam contoh autentikasi berikut.
Menambahkan kebijakan autentikasi
Setelah menambahkan kebijakan ParsePayload, tambahkan kebijakan autentikasi untuk memverifikasi bahwa klien diizinkan menggunakan alat MCP yang diminta. Apigee mencocokkan operasi yang diekstrak dengan operasi yang ditentukan dalam produk API klien.
Jika alat yang diminta tidak tercantum dalam produk API klien, Apigee akan menampilkan error 401 Unauthorized.
Opsi 1: Autentikasi kunci API
Gunakan kebijakan VerifyAPIKey untuk mengautentikasi klien menggunakan kunci API. Tambahkan kebijakan ini ke PreFlow permintaan setelah kebijakan ParsePayload:
<VerifyAPIKey name="VerifyAPIKey-1"> <DisplayName>Verify API Key</DisplayName> <APIKey ref="request.queryparam.apikey"/> </VerifyAPIKey>
Klien meneruskan kunci API sebagai parameter kueri saat memanggil proxy MCP:
curl -X POST "https://RUNTIME_HOSTNAME/mcp?apikey=API_KEY" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "get_stock_price", "arguments": { "ticker": "GOOGL" } }, "id": 1 }'
Anda juga dapat mengonfigurasi kebijakan untuk membaca kunci API dari header:
<VerifyAPIKey name="VerifyAPIKey-1"> <DisplayName>Verify API Key</DisplayName> <APIKey ref="request.header.x-api-key"/> </VerifyAPIKey>
Opsi 2: Autentikasi OAuth 2.0
Gunakan kebijakan OAuthV2 dengan operasi VerifyAccessToken untuk
mengautentikasi klien menggunakan token akses OAuth 2.0. Tambahkan kebijakan ini ke PreFlow permintaan setelah kebijakan ParsePayload:
<OAuthV2 name="OAuthV2-VerifyAccessToken"> <DisplayName>Verify OAuth Access Token</DisplayName> <Operation>VerifyAccessToken</Operation> </OAuthV2>
Klien meneruskan token akses di header Authorization:
curl -X POST "https://RUNTIME_HOSTNAME/mcp" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -d '{ "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "get_stock_price", "arguments": { "ticker": "GOOGL" } }, "id": 1 }'
Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi OAuth 2.0 di Apigee, lihat Mulai menggunakan OAuth2.
Menambahkan kebijakan Kuota
Tambahkan kebijakan Quota untuk menerapkan batas kapasitas per alat yang ditentukan dalam produk API.
Kebijakan ini menggunakan UseQuotaConfigInAPIProduct untuk menerapkan konfigurasi kuota secara otomatis dari operasi produk API yang cocok.
Tambahkan kebijakan Kuota berikut ke PreFlow permintaan setelah kebijakan autentikasi:
<Quota name="Quota-PerToolLimit"> <DisplayName>Per-Tool Quota</DisplayName> <UseQuotaConfigInAPIProduct stepName="AUTH_POLICY_STEP_NAME"/> <Distributed>true</Distributed> </Quota>
Dengan AUTH_POLICY_STEP_NAME adalah nilai atribut name
dalam elemen XML kebijakan autentikasi (baik VerifyAPIKey-1 maupun
OAuthV2-VerifyAccessToken dalam contoh di halaman ini). Nilai ini harus cocok dengan
atribut name kebijakan, bukan <DisplayName>.
Dengan konfigurasi ini, setiap operasi alat dibatasi lajunya secara independen sesuai dengan
kuota yang ditentukan dalam produk API. Misalnya, jika
tools/call/get_stock_price memiliki kuota 300 per menit dan
tools/call/get_company_news memiliki kuota 3 per menit, setiap batas akan
diterapkan secara terpisah meskipun kedua alat diakses melalui proxy yang sama.
Menyelesaikan konfigurasi proxy
Contoh berikut menunjukkan konfigurasi PreFlow permintaan lengkap untuk proxy MCP dengan ParsePayload, autentikasi kunci API, dan penerapan kuota per alat:
<ProxyEndpoint name="default"> <PreFlow> <Request> <Step> <Name>ParsePayload-MCP</Name> </Step> <Step> <Name>VerifyAPIKey-1</Name> </Step> <Step> <Name>Quota-PerToolLimit</Name> </Step> </Request> </PreFlow> <HTTPProxyConnection> <BasePath>/mcp</BasePath> </HTTPProxyConnection> <RouteRule name="default"> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
Pemfilteran alat
Saat klien mengirim permintaan tools/list melalui proxy MCP dengan autentikasi kunci API atau OAuth, Apigee akan otomatis memfilter respons untuk menyertakan hanya alat yang terdaftar di produk API klien.
Misalnya, jika produk API klien mencakup operasi
tools/call/get_stock_price dan tools/call/get_company_news, respons
tools/list dari server MCP akan difilter untuk menampilkan hanya
get_stock_price dan get_company_news, meskipun server MCP
mengekspos alat tambahan.
Pemfilteran ini terjadi secara default jika konfigurasi berikut diterapkan. Tidak diperlukan kebijakan pemfilteran khusus:
- PreFlow permintaan mencakup ParsePayload dan kebijakan autentikasi (VerifyAPIKey atau OAuthV2).
- Produk API mencakup
tools/listdipayloadOperationGroup. - Produk API menentukan operasi alat (misalnya,
tools/call/get_stock_price) yang diizinkan untuk diakses klien.
Untuk menguji pemfilteran alat, kirim permintaan tools/list dengan kunci API
klien:
curl -X POST "https://RUNTIME_HOSTNAME/mcp?apikey=API_KEY" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "method": "tools/list", "id": 1 }'
Jika produk API mencakup tools/call/get_stock_price dan
tools/call/get_company_news, respons yang difilter akan terlihat mirip dengan
berikut, meskipun server MCP mengekspos alat tambahan:
{ "jsonrpc": "2.0", "result": { "tools": [ { "name": "get_stock_price", "description": "Get the current stock price for a given ticker symbol.", "inputSchema": { "type": "object", "properties": { "ticker": { "type": "string", "description": "Stock ticker symbol" } }, "required": ["ticker"] } }, { "name": "get_company_news", "description": "Get recent news articles for a company.", "inputSchema": { "type": "object", "properties": { "company": { "type": "string", "description": "Company name" } }, "required": ["company"] } } ] }, "id": 1 }
Alat yang tidak tercantum dalam produk API (misalnya, delete_account
atau admin_reset) akan otomatis dihapus dari respons.
Sesi debug berikut menunjukkan langkah McpToolsFilterExecution dalam alur respons, dengan properti mcp_flow_info.mcp.allowed.tools yang mencantumkan alat yang diizinkan oleh produk API:
Menggunakan alur bersyarat untuk logika per alat
Gunakan alur bersyarat saat Anda memerlukan logika per alat di luar yang disediakan kuota produk API, seperti menerapkan tarif SpikeArrest khusus alat, merutekan ke backend yang berbeda, atau menambahkan transformasi permintaan untuk alat tertentu. Flow bersyarat menggunakan
variabel flow parsepayload.policyName.operation untuk mencocokkan
operasi MCP yang diekstrak.
Untuk kebijakan ParsePayload bernama ParsePayload-MCP:
<Flows> <Flow name="ListTools"> <Condition>(parsepayload.ParsePayload-MCP.operation = "tools/list")</Condition> <Request/> </Flow> <Flow name="GetStockPrice"> <Condition>(parsepayload.ParsePayload-MCP.operation = "tools/call/get_stock_price")</Condition> <Request> <Step> <Name>SpikeArrest-StockPrice</Name> </Step> </Request> </Flow> <Flow name="GetCompanyNews"> <Condition>(parsepayload.ParsePayload-MCP.operation = "tools/call/get_company_news")</Condition> <Request> <Step> <Name>SpikeArrest-CompanyNews</Name> </Step> </Request> </Flow> </Flows>
Men-debug konfigurasi proxy
Gunakan alat Debug Apigee untuk memverifikasi bahwa kebijakan ParsePayload mengekstrak operasi MCP dengan benar dan kebijakan autentikasi dan kuota berfungsi seperti yang diharapkan.
Dalam sesi debug, periksa variabel alur berikut setelah langkah kebijakan ParsePayload (dengan ParsePayload-MCP adalah nama kebijakan):
parsepayload.ParsePayload-MCP.operation: Harus berisi nama operasi lengkap (misalnya,tools/call/get_stock_price).parsepayload.ParsePayload-MCP.json-rpc.request.method: Harus berisi metode JSON-RPC (misalnya,tools/call).
Batasan
- Kebijakan ParsePayload hanya mendukung
JSON-RPC-2.0sebagai jenis payload. - Operasi alat produk API hanya mendukung metode
tools/calldantools/list. Pemfilteran alat untuk responstools/listhanya berlaku untuk operasitools/callyang dikonfigurasi di produk API. - Kebijakan ParsePayload mengurai seluruh isi permintaan. Apigee menerapkan batas ukuran isi permintaan default sebesar 10 MB, yang dapat dikonfigurasi hingga 30 MB menggunakan properti
request.payload.parse.limit. Untuk mengetahui detailnya, lihat Referensi properti endpoint. - Kebijakan ParsePayload dengan protokol MCP hanya mem-parsing payload permintaan JSON-RPC
(yang berisi kolom
methoddanparams). Payload respons MCP tidak diuraikan. - Pemfilteran alat untuk respons
tools/listmemerlukan kebijakan ParsePayload dan autentikasi di PreFlow permintaan.
Langkah berikutnya
- Pelajari lebih lanjut MCP di Apigee dalam Ringkasan MCP di Apigee.
- Mulai menggunakan proxy MCP di Mulai menggunakan Apigee dan MCP.
- Pelajari produk API dan mengelola produk API.
- Pelajari pembatasan kapasitas di Apigee.
- Pelajari kunci API dan autentikasi OAuth 2.0.