當第三方 AI 應用程式通過 HTTP 協議與 OpenAPI MCP Server 通訊時,若應用程式自身不具備處理阿里雲認證的能力,可使用aliyun mcp-proxy作為本地認證代理。該代理可自動完成 OAuth 授權與 Token 管理,使應用程式無需處理憑證即可調用阿里雲服務 API。
aliyun mcp-proxy介紹
aliyun mcp-proxy 是阿里雲 CLI 提供的 MCP Server 代理工具,用於簡化第三方 AI 應用程式(例如 Dify、LangChain)與 OpenAPI MCP Server 的互動。初次開機時需手動完成 OAuth 授權,後續代理服務將自動處理 Token 重新整理。
工作原理:應用程式將 API 請求發送至 aliyun mcp-proxy。代理服務添加憑證後,將請求轉寄至 OpenAPI MCP Server。
啟動 aliyun mcp-proxy 後,本機所有使用者均可通過代理連接埠,以啟動代理的 CLI 使用者身份訪問其許可權範圍內的 MCP Server。為避免許可權濫用,請確保在受信任的單使用者環境中使用,並禁止代理連接埠對外暴露。建議通過 --allowed-servers 或 --blocked-servers 參數限制可訪問的伺服器範圍,並為 MCP Server 配置最小必要許可權。更多資訊,請參見本文安全風險與防護。
配置並運行代理
步驟一:配置阿里雲 CLI
安裝或升級阿里雲 CLI,確保版本不低於
3.2.0。安裝方法,請參見安裝CLI(Linux)。使用具備建立 OAuth 應用許可權的阿里雲帳號或 RAM 使用者憑證配置 CLI。也可在後續步驟中使用
--oauth-app-name參數指定一個已建立的 OAuth 應用。aliyun configure # 根據提示輸入AccessKey ID、AccessKey Secret和預設地區。
步驟二:首次運行代理並完成 OAuth 授權
首次運行 mcp-proxy 時,需完成一次性 OAuth 授權以擷取重新整理 Token 的許可權。
在前台啟動。
在有圖形介面的環境中,不帶
--no-browser參數時,CLI 會自動拉起瀏覽器執行 OAuth 授權登入流程,完成授權後無需手動輸入code。完成後您可直接跳至第5步。aliyun mcp-proxy --host 127.0.0.1 --port 8088在無圖形介面的伺服器環境中操作時,請添加
--no-browser參數,後續將引導您擷取code。aliyun mcp-proxy --host 127.0.0.1 --port 8088 --no-browser
說明您可以使用
--oauth-app-name參數指定自訂 OAuth 應用,該應用必須滿足以下條件:Oauth範圍(Scope):必須為
/acs/mcp-server。回調地址(Redirect URI):必須與
aliyun mcp-proxy認證時使用的回調地址一致。應用類型:必須為
Native類型的應用。
終端將輸出授權 URL。
Setting up MCPOAuth profile 'default-mcp'... Opening browser for OAuth login... URL: https://signin.aliyun.com/oauth2/v1/auth?client_id=XXX8&response_type=code&scope=%2Facs%2Fmcp-server&redirect_uri=http://0.0.0.0:8088/callback&code_challenge=XXX&code_challenge_method=S256 Please open the authorization URL on a machine with a browser and complete the sign-in. After authorization, the browser will redirect to a callback URL. Even if the page fails to load (connection error), the authorization code is in the URL. Please copy the value of the `code` parameter from the browser's address bar. Example: If the URL is: http://127.0.0.1:8088/callback?code=abc123xyz&state=... Then copy only: abc123xyz Enter authorization code: <YOUR CODE>在瀏覽器中開啟該 URL,登入並完成授權。
授權成功後,頁面會跳轉至包含
code參數的地址或直接顯示授權碼。將code值複製並粘貼至終端,按斷行符號鍵確認。當終端顯示
OAuth login successful!資訊時,表示授權登入成功。2025/12/04 19:11:49 Oauth authorization successfully, code received: XXXX 2025/12/04 19:11:49 Start to exchange code for token with PKCE 2025/12/04 19:11:49 Exchange code for token with PKCE successfully OAuth login successful!當終端顯示
MCP Proxy Server Started資訊時,表示代理啟動成功。MCP Profile 'default-mcp' configured for oauth app 'aliyun-cli-mcp-proxy' successfully! MCP Proxy Server Started Listen: 127.0.0.1:8088
步驟三:配置為 systemd 後台服務(以CentOS為例)
為確保代理穩定運行,建議將其配置為開機自啟的 systemd 服務。
建立
systemd服務檔案:aliyun-mcp-proxy。說明:
將命令中的
your-user替換為實際運行此命令的非root使用者名稱。該使用者必須是已通過aliyun configure配置憑據的使用者。ExecStart中的$(which aliyun)可自動定位aliyun命令路徑。如果定位失敗,可手動將其替換為which aliyun命令的輸出結果(例如/usr/local/bin/aliyun)。
sudo tee /etc/systemd/system/aliyun-mcp-proxy.service << 'EOF' [Unit] Description=Aliyun CLI MCP Proxy After=network.target [Service] Type=simple User=your-user ExecStart=$(which aliyun) mcp-proxy --host 127.0.0.1 --port 8088 --no-browser Restart=always RestartSec=10 Environment=HOME=/home/your-user [Install] WantedBy=multi-user.target EOF重新載入
systemd配置並啟動服務。# 重新載入配置 sudo systemctl daemon-reload # 啟動服務 sudo systemctl start aliyun-mcp-proxy # 設定開機自啟 sudo systemctl enable aliyun-mcp-proxy
步驟四:驗證代理服務
通過以下任一方式驗證服務是否正常運行。
查看服務狀態
執行以下命令查看服務狀態。
sudo systemctl status aliyun-mcp-proxy若輸出中包含
active (running),則表示服務已成功啟動。請求代理連接埠
執行以下命令,直接請求代理連接埠。
curl http://127.0.0.1:8088/如果代理工作正常,將收到來自 MCP Server 的 XML 格式錯誤響應,表明代理與服務之間的鏈路已連通。
<?xml version='1.0' encoding='UTF-8'?><Error><RequestId>B3311876-XXXXX</RequestId><HostId>openapi-mcp.cn-hangzhou.aliyuncs.com</HostId><Code>InvalidAction.NotFound</Code><Message>Specified api is not found, please check your url and method.</Message><Recommend><![CDATA[https://api.aliyun.com/troubleshoot?q=InvalidAction.NotFound&product=OpenAPIExplorer&requestId=B3311876-XXX]]></Recommend></Error>
應用案例:在 Dify 中整合
以在同一台 ECS 上通過 Docker Compose 部署的 Dify 為例,介紹如何在應用中配置並使用 mcp-proxy 代理。
步驟一:擷取宿主機 Docker 橋接器IP並啟動mcp-proxy代理服務
Dify 容器需通過宿主機的 Docker 橋接器 IP 位址訪問 mcp-proxy 服務。
執行以下命令,擷取並記錄該 IP 位址。
ip addr show docker0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1執行後會得到類似
172.17.0.1的 IP 位址。在前台啟動 aliyun mcp-proxy 代理服務。或者,在
systemd中修改啟動命令然後通過服務啟動。aliyun mcp-proxy --host 172.17.0.1 --port 8088 --no-browser
步驟二:在 Dify 中配置 MCP Server
進入 Dify 的 工具 > MCP 配置頁面。
點擊 添加 MCP 服務(HTTP)。
在 服務端點 URL 欄位中,填入您的 MCP Proxy 位址。
您可在 阿里雲 OpenAPI MCP 服務控制台中擷取原始的 Streamable HTTP Endpoint 地址。並將該地址中的網域名稱部分(host)替換為本地或內網Proxy 位址。
樣本轉換:
原始 Endpoint:
https://openapi-mcp.cn-hangzhou.aliyuncs.com/accounts/1234/custom/cli-proxy-test/id/1234/mcp替換為Proxy 位址(假設代理運行在
172.17.0.1:8088):http://172.17.0.1:8088/accounts/1234/custom/cli-proxy-test/id/1234/mcp
按需填入其他資訊後點擊添加並授權。Dify 將通過該Proxy 位址與您的 MCP 服務通訊。
安全風險與防護
啟動 mcp-proxy 後,本機所有使用者均可通過代理連接埠,以啟動代理的 CLI 使用者身份訪問其許可權範圍內的所有 MCP Server。主要風險包括:
內部許可權濫用:同一機器上的其他使用者可利用代理連接埠執行越權操作,導致許可權濫用或資料泄露。
外部暴露風險:代理連接埠監聽在
0.0.0.0且未配置防火牆時,任何人均可通過該連接埠訪問 MCP Server。
MCP Proxy 使用 CLI 登入使用者的阿里雲身份代理請求,請務必合理配置 MCP Proxy 的存取權限。
防護措施
環境隔離:僅在受信任的單使用者環境中運行代理,避免在多使用者共用伺服器上使用。
網路存取控制:將代理監聽地址(
--host)綁定到127.0.0.1(預設)或特定內網 IP。使用防火牆或安全性群組規則限制代理連接埠存取範圍(例如僅允許特定應用伺服器 IP 訪問),嚴禁對公網暴露。存取控制:通過
--allowed-servers或--blocked-servers參數限制可訪問的 MCP Server 範圍,避免代理被用於訪問非預期的服務。配置方法詳見本文設定管理員存取控制。最小許可權原則:為代理使用的 CLI 使用者及其關聯的 MCP Server 配置最小必要許可權,優先授予唯讀許可權。
審計與監控:定期審查代理服務的訪問日誌,監控異常請求。被存取控制攔截的請求會記錄在代理日誌中。
設定管理員存取控制
aliyun mcp-proxy 支援白名單和黑名單機制,限制可通過代理訪問的 MCP Server 範圍。
優先順序規則
存取控制按以下順序判定:
黑名單優先:命中黑名單的請求直接拒絕,即使同時存在於白名單中。
白名單過濾:白名單非空時,僅允許存取白名單中的伺服器。
預設允許存取:未配置任何名單時,允許所有伺服器訪問。
擷取伺服器名稱和伺服器ID
啟動 aliyun mcp-proxy 後,終端會列出所有可用的 MCP Server 名稱。樣本輸出:
Available Servers:
- cloudphone
MCP: http://127.0.0.1:8088/accounts/0000000000000000/system/eds-aic/cloudphone/id/XSkb9v4dXx000000/mcp
SSE: http://127.0.0.1:8088/accounts/0000000000000000/system/eds-aic/cloudphone/id/XSkb9v4dXx000000/sse
- multi_account
MCP: http://127.0.0.1:8088/accounts/0000000000000000/custom/multi_account/id/OV0Qkpxh0Uodx000/mcp
SSE: http://127.0.0.1:8088/accounts/0000000000000000/custom/multi_account/id/OV0Qkpxh0Uodx000/sse輸出中的
cloudphone、multi_account就是伺服器name(通常位於id關鍵字前)。輸出中的
XSkb9v4dXx000000、OV0Qkpxh0Uodx000就是伺服器id(通常位於mcp關鍵字前)。
URL 路徑通常滿足以下規則:
......./system/eds-aic/$server_name/id/$server_id/mcp
......./custom/$server_name/id/$server_id/mcp匹配模式
--allowed-servers 和 --blocked-servers 支援三種匹配模式,通過值的格式自動識別:
匹配模式 | 格式 | 樣本 | 說明 |
伺服器名稱匹配 | 不以 |
| 精確匹配伺服器的 |
伺服器 ID 匹配 | 不以 |
| 精確匹配伺服器的 |
路徑首碼匹配 | 以 |
| 匹配請求 URL 的路徑首碼 |
說明
伺服器名稱和 ID 為精確匹配。
路徑首碼匹配使用首碼比較,例如
/acs/mcp-server/ecs同時匹配/acs/mcp-server/ecs/mcp和/acs/mcp-server/ecs/sse。三種模式可在同一參數中混合使用。
配置樣本
白名單模式:僅允許訪問指定伺服器
aliyun mcp-proxy --allowed-servers "ecs,oss"啟動後僅
ecs和oss可訪問,其他伺服器的請求返回 403 錯誤。黑名單模式:禁止訪問指定伺服器
aliyun mcp-proxy --blocked-servers "ram"啟動後除
ram外的所有伺服器均可訪問。使用路徑首碼匹配
aliyun mcp-proxy --allowed-servers "/acs/mcp-server/ecs,/acs/mcp-server/oss"效果與按名稱指定相同,適用於需要精確控制路徑的情境。
驗證存取控制配置
啟動代理後,終端輸出會顯示當前的存取控制配置和各伺服器的狀態:
MCP Proxy Server Started
Listen: 127.0.0.1:8088
Region: CN
Access Control:
Blacklist (blocked servers):
- ram
Whitelist (allowed servers):
- ecs
- oss
Available Servers:
- ecs
MCP: http://127.0.0.1:8088/acs/mcp-server/ecs/mcp
- oss
MCP: http://127.0.0.1:8088/acs/mcp-server/oss/mcp
- ram (blocked)被攔截的請求會在代理日誌中記錄,便於排查問題。
安全事件處理
如果懷疑代理認證 Token 泄露或被濫用,立即執行以下操作:
停止 MCP Proxy 服務。
刪除本地設定檔:
rm ~/.aliyun/.mcpproxy_config。在阿里雲控制台撤銷 OAuth 授權。
檢查 API 呼叫日誌,確認是否存在異常操作。
重新設定 MCP Proxy 並產生新的 Token。
參數說明
aliyun mcp-proxy 命令支援通過不同參數以適應特定情境。
參數 | 描述 | 預設值 |
| 代理監聽的主機地址。使用者可以根據使用情境管理。 |
|
| 代理監聽的連接埠。 |
|
| 在無圖形介面的環境中進行 OAuth 認證時使用。啟用後,認證連結將直接列印在終端。 | 未啟用 |
| 指定已存在的 OAuth 應用程式名稱。使用此參數時,CLI 不會嘗試自動建立應用。 |
|
| 選擇 OpenAPI MCP Server 的服務網站。 |
|
| 手動指定上遊 OpenAPI MCP Server 的地址,以覆蓋預設地址。 | 中國站: |
| 允許訪問的 MCP Server 白名單,多個值用英文逗號分隔。支援伺服器名稱、ID 或路徑首碼。未指定時允許所有伺服器。詳見本文設定管理員存取控制。 | 未啟用 |
| 禁止訪問的 MCP Server 黑名單,多個值用英文逗號分隔。支援伺服器名稱、ID 或路徑首碼。黑名單優先順序高於白名單。詳見本文設定管理員存取控制。 | 未啟用 |
常見問題
執行 aliyun mcp-proxy 進行 OAuth 認證後,出現 “ERROR: OAuth flow returned empty RefreshToken” 錯誤且代理啟動失敗,是什麼原因?
此問題通常是由於 OAuth 應用類型或認證身份不正確導致。請確保:
使用的 OAuth 應用類型為 Native 類型。
使用主帳號或 RAM 使用者進行認證,RAM 角色扮演不支援擷取OAuth Refresh Token。
在 Dify 中配置後,提示“Connection Refused”或“Timeout”?
請檢查以下配置:
mcp-proxy服務啟動時,--host參數是否已配置為 Docker 橋接器 IP 或宿主機內網 IP,以確保 Docker 容器可以訪問。雲端服務器安全性群組或宿主機防火牆是否已允許存取從 Docker 容器到代理連接埠(例如
8088)的 TCP 流量。
如何查看mcp-proxy服務的作業記錄?
若已配置為systemd服務,可使用以下命令即時查看日誌:
sudo journalctl -u aliyun-mcp-proxy -f