本頁內容適用於 Apigee,但不適用於 Apigee Hybrid。
查看
Apigee Edge 說明文件。
本頁說明如何使用 Apigee API 產品控管 MCP 工具的存取權。無論您是使用 Apigee MCP Discovery Proxy,還是將流量 Proxy 至自己的 MCP 伺服器,都可以驗證 MCP 用戶端、套用各項工具的配額,以及根據 API 產品設定篩選工具顯示設定。
MCP 伺服器會使用單一端點 (例如 /mcp) 叫用所有工具。與 REST API 不同,MCP 會將作業嵌入 JSON-RPC 要求主體,而非透過網址路徑和 HTTP 方法區分作業。Apigee 會使用 ParsePayload 政策擷取這些作業,以便根據工具套用標準 API 管理政策 (驗證、配額強制執行和工具篩選)。
總覽
如要透過 API 產品管理 MCP 工具存取權,請完成下列步驟:
- 新增 ParsePayload 政策,從要求主體中擷取 MCP 工具名稱。
- 設定 API 產品,其中包含 MCP 工具作業和各工具配額。
- 註冊開發人員應用程式,取得用戶端憑證。
- 新增驗證策略 (API 金鑰或 OAuth 2.0),根據 API 產品驗證用戶端憑證。
- 新增配額政策,強制執行各項工具的頻率限制。
- 測試工具篩選,確認系統會根據 API 產品設定篩選
tools/list回應。
新增 ParsePayload 政策
ParsePayload 政策會剖析 JSON-RPC 要求主體,並擷取 MCP 作業,例如 tools/call/get_weather 或 tools/list。擷取的作業會儲存在以政策名稱為前置字元的流程變數中 (例如 parsepayload.ParsePayload-MCP.operation),供下游政策用於驗證和配額強制執行。
在 MCP Proxy 的要求 PreFlow 中新增下列 ParsePayload 政策:
<ParsePayload name="ParsePayload-MCP"> <DisplayName>Parse MCP Payload</DisplayName> <Source>request</Source> <PayloadType>JSON-RPC-2.0</PayloadType> <Protocol>MCP</Protocol> </ParsePayload>
其中:
<Source>:要剖析的訊息。預設值為request。<PayloadType>:酬載格式。必須為JSON-RPC-2.0。<Protocol>:用於剖析的通訊協定。必須是MCPMCP 伺服器。
執行後,政策會填入以政策執行個體名稱為前置字元的流程變數,模式為 parsepayload.policyName.suffix。如果是名為 ParsePayload-MCP 的政策,系統會設定下列變數:
| 流程變數 | 說明 | 範例值 |
|---|---|---|
parsepayload.ParsePayload-MCP.operation |
用於 API 產品比對和配額強制執行的衍生作業名稱。 | tools/call/get_weather |
parsepayload.ParsePayload-MCP.json-rpc.request.method |
要求中的 JSON-RPC method 欄位。 |
tools/call |
parsepayload.ParsePayload-MCP.json-rpc.request.id |
要求中的 JSON-RPC id 欄位。 |
1 |
parsepayload.ParsePayload-MCP.json-rpc.request.params.name |
要求中的 params.name 欄位。 |
get_weather |
使用 MCP 工具作業設定 API 產品
API 產品會定義用戶端應用程式可存取的 MCP 工具,以及每項工具的配額限制。您可以使用 API 產品定義中的 payloadOperationGroup 欄位,設定 MCP 工具作業。
payloadOperationGroup.operationConfigs 中的每個項目都會指定:
- 提供 MCP 工具的 API Proxy (
apiSource)。 - 一或多個工具作業 (例如
tools/call/get_stock_price、tools/list)。 - 這組作業的選用配額。
使用下列 API 呼叫,建立含有 MCP 工具作業的 API 產品:
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" } } ] } }'
其中:
ORG_NAME是 Apigee 機構的名稱。PRODUCT_NAME是 API 產品的內部名稱。PRODUCT_DISPLAY_NAME是 API 產品的顯示名稱。MCP_PROXY_NAME是將流量轉送至 MCP 伺服器的 API Proxy 名稱。這可以是 Apigee MCP 探索 Proxy,也可以是後端為您自有 MCP 伺服器的 Proxy。
設定各項工具的配額
您可以為個別工具設定不同配額。舉例來說,下列設定會將 get_stock_price 限制為每分鐘 300 次呼叫,但將 get_company_news 限制為每分鐘 3 次呼叫:
{ "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" } } ] } }
您可以建立多個 API 產品,提供不同的工具子集,藉此提供分級存取權。舉例來說,基本產品可能只包含 tools/call/get_stock_price,而進階產品則包含所有可用工具,且配額較高。每個開發人員應用程式都會與一或多個 API 產品建立關聯,因此不同的用戶端會自動取得不同工具組合的存取權,並有各自的速率限制。
註冊開發人員應用程式
如要取得 API 金鑰或 OAuth 憑證進行測試,請註冊開發人員,並建立與上一個步驟中建立的 API 產品相關聯的開發人員應用程式。
- 在 Apigee 機構中註冊應用程式開發人員。
- 建立開發人員應用程式,並與 API 產品建立關聯。
- 從應用程式憑證取得用戶端金鑰 (API 金鑰)。在後續的驗證範例中使用這個金鑰。
新增驗證政策
新增 ParsePayload 政策後,請新增驗證政策,確認用戶端已獲授權使用要求的 MCP 工具。Apigee 會比對擷取的作業與用戶端 API 產品中定義的作業。
如果要求的工具未列在用戶端的 API 產品中,Apigee 會傳回 401 Unauthorized 錯誤。
方法 1:API 金鑰驗證
使用 VerifyAPIKey 政策,透過 API 金鑰驗證用戶端。在 ParsePayload 政策之後,將這項政策新增至要求 PreFlow:
<VerifyAPIKey name="VerifyAPIKey-1"> <DisplayName>Verify API Key</DisplayName> <APIKey ref="request.queryparam.apikey"/> </VerifyAPIKey>
用戶端呼叫 MCP Proxy 時,會將 API 金鑰做為查詢參數傳遞:
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 }'
您也可以設定政策,從標頭讀取 API 金鑰:
<VerifyAPIKey name="VerifyAPIKey-1"> <DisplayName>Verify API Key</DisplayName> <APIKey ref="request.header.x-api-key"/> </VerifyAPIKey>
方法 2:OAuth 2.0 驗證
使用 OAuthV2 政策和 VerifyAccessToken 作業,透過 OAuth 2.0 存取權杖驗證用戶端。在 ParsePayload 政策之後,將這項政策新增至要求 PreFlow:
<OAuthV2 name="OAuthV2-VerifyAccessToken"> <DisplayName>Verify OAuth Access Token</DisplayName> <Operation>VerifyAccessToken</Operation> </OAuthV2>
用戶端會在 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 }'
如要進一步瞭解如何在 Apigee 中設定 OAuth 2.0,請參閱OAuth2 入門。
新增配額政策
新增Quota政策,強制執行 API 產品中定義的工具費率限制。
這項政策會使用 UseQuotaConfigInAPIProduct,自動套用相符 API 產品作業的配額設定。
在驗證政策之後,將下列配額政策新增至要求 PreFlow:
<Quota name="Quota-PerToolLimit"> <DisplayName>Per-Tool Quota</DisplayName> <UseQuotaConfigInAPIProduct stepName="AUTH_POLICY_STEP_NAME"/> <Distributed>true</Distributed> </Quota>
其中 AUTH_POLICY_STEP_NAME 是驗證政策 XML 元素中 name 屬性的值 (本頁範例中的 VerifyAPIKey-1 或 OAuthV2-VerifyAccessToken)。這必須與政策 name 屬性相符,而非 <DisplayName>。
完成這項設定後,系統會根據 API 產品中定義的配額,分別限制每項工具作業的速率。舉例來說,如果 tools/call/get_stock_price 的配額為每分鐘 300 個,而 tools/call/get_company_news 的配額為每分鐘 3 個,即使這兩個工具都是透過同一個 Proxy 存取,系統也會分別強制執行這兩項限制。
完成 Proxy 設定
以下範例顯示 MCP 代理的完整要求 PreFlow 設定,包含 ParsePayload、API 金鑰驗證和工具配額強制執行:
<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>
工具篩選
當用戶端透過 MCP 代理傳送 tools/list 要求,並使用 API 金鑰或 OAuth 驗證時,Apigee 會自動篩選回應,只納入在用戶端 API 產品中註冊的工具。
舉例來說,如果用戶端的 API 產品包含 tools/call/get_stock_price 和 tools/call/get_company_news 運算,即使 MCP 伺服器公開其他工具,MCP 伺服器的 tools/list 回應也會經過篩選,只傳回 get_stock_price 和 get_company_news。
如果符合下列設定,系統預設會進行這項篩選作業。不需要專屬的篩選政策:
- 要求 PreFlow 包含 ParsePayload 和驗證政策 (VerifyAPIKey 或 OAuthV2)。
- API 產品包含
payloadOperationGroup中的tools/list。 - API 產品會指定用戶端可存取的工具作業 (例如
tools/call/get_stock_price)。
如要測試工具篩選功能,請使用用戶端的 API 金鑰傳送 tools/list 要求:
curl -X POST "https://RUNTIME_HOSTNAME/mcp?apikey=API_KEY" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "method": "tools/list", "id": 1 }'
如果 API 產品包含 tools/call/get_stock_price 和 tools/call/get_company_news,即使 MCP 伺服器公開其他工具,經過篩選的回應也會類似以下內容:
{ "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 }
如果工具未列在 API 產品中 (例如 delete_account 或 admin_reset),系統會自動從回應中移除。
下列偵錯工作階段顯示回應流程中的 McpToolsFilterExecution 步驟,其中 mcp_flow_info.mcp.allowed.tools 屬性會列出 API 產品允許的工具:
針對每個工具的邏輯使用條件式流程
如果需要超出 API 產品配額的工具專屬邏輯,例如套用工具專屬的 SpikeArrest 速率、將要求傳送至不同的後端,或是為特定工具新增要求轉換,請使用條件式流程。條件式流程會使用 parsepayload.policyName.operation 流程變數,比對擷取的 MCP 作業。
針對名為 ParsePayload-MCP 的 ParsePayload 政策:
<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>
偵錯 Proxy 設定
使用 Apigee Debug 工具,確認 ParsePayload 政策是否正確擷取 MCP 作業,以及驗證和配額政策是否正常運作。
在偵錯工作階段中,請在 ParsePayload 政策步驟後檢查下列流程變數 (其中 ParsePayload-MCP 是政策名稱):
parsepayload.ParsePayload-MCP.operation:應包含完整作業名稱 (例如tools/call/get_stock_price)。parsepayload.ParsePayload-MCP.json-rpc.request.method:應包含 JSON-RPC 方法 (例如tools/call)。
限制
- ParsePayload 政策僅支援
JSON-RPC-2.0做為酬載類型。 - API 產品工具作業僅支援
tools/call和tools/list方法。工具篩選功能僅適用於 API 產品中設定的tools/call作業,可篩選tools/list回應。 - ParsePayload 政策會剖析完整的要求主體。Apigee 會強制執行預設要求主體大小限制 (10 MB),您可以使用
request.payload.parse.limit屬性將限制設為最多 30 MB。詳情請參閱端點屬性參考資料。 - 使用 MCP 通訊協定的 ParsePayload 政策只會剖析 JSON-RPC 要求酬載 (包含
method和params欄位)。不會剖析 MCP 回應負載。 - 如要篩選
tools/list回應,要求 PreFlow 中必須有 ParsePayload 和驗證政策。
後續步驟
- 如要進一步瞭解 Apigee 中的 MCP,請參閱 Apigee 中的 MCP 總覽。
- 如要開始使用 MCP Proxy,請參閱「開始使用 Apigee 和 MCP」。
- 瞭解 API 產品和管理 API 產品。
- 瞭解 Apigee 中的頻率限制。
- 瞭解 API 金鑰和 OAuth 2.0 驗證。