Alibaba Cloud の認証情報を処理できない AI アプリケーション向けに、aliyun mcp-proxy をローカル認証プロキシとして使用します。このプロキシは、OAuth 認可とトークンの更新を自動的に管理します。
aliyun mcp-proxy
aliyun mcp-proxy は、AI アプリケーション (Dify や LangChain など) と OpenAPI MCP サーバー間のリクエストをプロキシする CLI ツールです。初回起動時に 1 回限りの OAuth 認可が必要ですが、その後のトークンの更新はプロキシが自動的に処理します。
動作原理:アプリケーションは aliyun mcp-proxy にリクエストを送信し、プロキシが認証情報を追加して OpenAPI MCP サーバーに転送します。
aliyun mcp-proxy を開始すると、ホストマシン上の任意のユーザーが、CLI ユーザーの権限スコープ内でプロキシポート経由で MCP サーバーにアクセスできます。 プロキシは、信頼できるシングルユーザー環境でのみ実行し、ポートを外部に公開しないでください。 アクセス可能なサーバーを制限するには、--allowed-servers または --blocked-servers を使用してください。 セキュリティリスクと緩和策。
プロキシの設定と実行
手順 1:Alibaba Cloud CLI の設定
-
Alibaba Cloud CLI をバージョン
3.2.0以降にインストールまたはアップグレードするには、「Alibaba Cloud CLI をインストールまたは更新する」をご参照ください。 -
OAuth アプリケーションを作成する権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの認証情報で CLI を設定します。 既存の OAuth アプリケーションを使用するには、後のステップで
--oauth-app-nameを指定します。aliyun configure # プロンプトに従って、AccessKey ID、AccessKey Secret、デフォルトのリージョンを入力します。
手順 2:初回実行と OAuth 認可
初回実行時、mcp-proxy はリフレッシュトークンを取得するために、1回限りの OAuth 認可が必要です。
-
プロキシをフォアグラウンドで起動します。
-
GUI 環境では、
--no-browserが指定されている場合を除き、CLI は OAuth 認証のためにブラウザを開きます。認証後、ステップ 5 に進みます。aliyun mcp-proxy --host 127.0.0.1 --port 8088 -
ヘッドレス環境では、
--no-browserを追加します。 CLI から、認証コードを手動で取得するように求められます。aliyun mcp-proxy --host 127.0.0.1 --port 8088 --no-browser
説明--oauth-app-nameでカスタム OAuth アプリケーションを指定するには、アプリケーションは次の要件を満たす必要があります。-
OAuth スコープ:
/acs/mcp-serverにする必要があります。 -
リダイレクト URI:
aliyun mcp-proxyの認証で使用するものと一致させる必要があります。 -
アプリケーションタイプ:
Nativeアプリケーションである必要があります。
-
-
ターミナルに認可 URL が表示されます。
MCPOAuth プロファイル 'default-mcp' を設定しています... OAuth ログインのためにブラウザを開いています... 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 ブラウザが利用可能なマシンで認可 URL を開き、サインインを完了してください。 認可後、ブラウザはコールバック URL にリダイレクトされます。 ページがロードに失敗した場合 (接続エラーなど) でも、認可コードは URL に含まれています。 ブラウザのアドレスバーから `code` パラメーターの値をコピーしてください。 例:URL が次の場合: http://127.0.0.1:8088/callback?code=abc123xyz&state=... この場合、`abc123xyz` のみコピーします。 認可コードを入力してください: <YOUR CODE> -
ブラウザで URL を開き、サインインして認可を完了します。
-
承認後、ページは
codeパラメーターを含む URL にリダイレクトされるか、コードが直接表示されます。codeの値をコピーして、ターミナルに貼り付け、Enter キーを押します。 -
認証に成功すると、ターミナルに
OAuth login successful!と表示されます。2025/12/04 19:11:49 OAuth 認可が成功し、コードを受信しました: XXXX 2025/12/04 19:11:49 PKCE を使用してコードをトークンに交換します 2025/12/04 19:11:49 PKCE を使用したコードとトークンの交換に成功しました OAuth ログインに成功しました! -
プロキシの準備が整うと、ターミナルに
MCP Proxy Server Startedが表示されます。MCP プロファイル 'default-mcp' は OAuth アプリ 'aliyun-cli-mcp-proxy' 用に正常に設定されました! MCP プロキシサーバーが起動しました リッスン: 127.0.0.1:8088
手順 3:systemd サービスの設定 (CentOS)
安定した運用のために、OS 起動時に自動起動するよう、プロキシを systemd サービスとして設定します。
-
aliyun-mcp-proxy.service という名前の
systemdサービスファイルを作成します。注意:
-
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
手順 4:プロキシサービスの確認
サービスが実行中であることを確認します。
-
サービスステータスの表示
サービスステータスを確認します。
sudo systemctl status aliyun-mcp-proxy出力に
active (running)と表示されている場合、サービスは正常に起動しています。 -
プロキシポートへのリクエスト
プロキシポートにテストリクエストを送信します。
curl http://127.0.0.1:8088/正常に動作しているプロキシからは MCP サーバーからの 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 を設定します。
手順 1:ホスト IP の取得とプロキシの起動
Dify コンテナは、ホストマシンの Docker ブリッジ IP を介して mcp-proxy にアクセスします。
-
Docker ブリッジ 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
手順 2:Dify での MCP サーバーの設定
-
Dify で、[Tools] > [MCP] 設定ページに移動します。
-
[Add MCP Server (HTTP)] をクリックします。
-
[server endpoint URL] フィールドに、MCP プロキシアドレスを入力します。
OpenAPI MCP Service コンソールで [Streamable HTTP Endpoint] を確認し、ホストをプロキシアドレスに置き換えます。
変換例:
-
元のエンドポイント:
https://openapi-mcp.cn-hangzhou.aliyuncs.com/accounts/1234/custom/cli-proxy-test/id/1234/mcp -
プロキシ経由のエンドポイント: (プロキシが
172.17.0.1:8088で実行されている場合):http://172.17.0.1:8088/accounts/1234/custom/cli-proxy-test/id/1234/mcp
-
-
残りのフィールドを入力し、[Add & Authorize] をクリックします。Dify は、このプロキシ経由で MCP トラフィックをルーティングします。
セキュリティリスクと対策
mcp-proxy の起動後、ホストマシン上のすべてのユーザーが、CLI ユーザーの権限範囲内でプロキシポート経由で MCP サーバーにアクセスできます。主なリスクは次のとおりです。
-
内部権限の悪用:同じマシン上の他のユーザーが、プロキシポートを使用して不正な操作を実行し、権限の悪用やデータ漏洩につながる可能性があります。
-
外部公開: プロキシがファイアウォールなしで
0.0.0.0でリッスンする場合、ネットワーク上の誰でもそのポートを介して MCP サーバーにアクセスできます。
プロキシは、ログイン中の CLI ユーザーの Alibaba Cloud ID を使用します。アクセス権限は慎重に設定してください。
対策
-
環境の分離:信頼できる単一ユーザー環境でのみプロキシを実行してください。
-
ネットワークアクセス制御:
--hostを127.0.0.1(デフォルト) または特定の内部 IP アドレスにバインドします。ファイアウォールまたはセキュリティグループのルールを使用して、プロキシポートへのアクセスを制限します。ポートをパブリックインターネットに絶対に公開しないでください。 -
サーバーアクセス制御:
--allowed-servers(許可リスト) または--blocked-servers(ブロックリスト) を使用して、アクセス可能な MCP サーバーを制限します。 サーバーアクセス制御を構成する。 -
最小権限の原則:CLI ユーザーと MCP サーバーに必要最小限の権限のみを付与してください。読み取り専用アクセスを優先してください。
-
監査とモニタリング:プロキシアクセスログを定期的に確認してください。ブロックされたリクエストはログに記録されます。
サーバーアクセス制御の設定
aliyun mcp-proxy は、アクセス可能な MCP サーバーを制限するための許可リストモードとブロックリストモードをサポートしています。
優先順位ルール
アクセス制御は、次の順序で評価されます。
-
ブロックリスト優先:ブロックリストに一致するリクエストは、許可リストにも含まれている場合でも、即座に拒否されます。
-
許可リストフィルタリング:許可リストが設定されている場合、許可リストに記載されているサーバーのみが許可されます。
-
デフォルト許可:リストが設定されていない場合、すべてのサーバーへのアクセスが許可されます。
サーバー名と ID の取得
aliyun mcp-proxy を起動すると、ターミナルに利用可能な MCP サーバーが一覧表示されます。
利用可能なサーバー:
- 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 パラメーターは、値の形式によって自動的に識別される 3 つの照合パターンをサポートしています:
|
マッチングパターン |
形式 |
例 |
説明 |
|
サーバー名マッチング |
|
|
サーバーの |
|
サーバー ID マッチング |
|
|
サーバーの |
|
パスプレフィックスマッチング |
|
|
リクエスト URL のパスプレフィックスと一致します。 |
注意:
-
サーバー名と ID のマッチングは完全一致です。
-
パスプレフィックスマッチングは、プレフィックスによる比較です。例えば、
/acs/mcp-server/ecsは/acs/mcp-server/ecs/mcpと/acs/mcp-server/ecs/sseの両方に一致します。 -
同じパラメータ内で 3 つのパターンすべてを混在させることができます。
設定例
-
許可リストモード:指定したサーバーのみアクセスを許可
aliyun mcp-proxy --allowed-servers "ecs,oss"ecsとossのみにアクセスできます。他のサーバーへのリクエストでは、403 Forbidden が返されます。 -
ブロックリストモード:指定したサーバーへのアクセスを拒否
aliyun mcp-proxy --blocked-servers "ram"ram以外のすべてのサーバーにアクセスできます。 -
パスプレフィックスマッチングの使用
aliyun mcp-proxy --allowed-servers "/acs/mcp-server/ecs,/acs/mcp-server/oss"名前ベースのマッチングと同じ効果で、より正確なパス制御が可能です。
アクセス制御の確認
プロキシの起動後、ターミナルにアクセス制御設定とサーバーステータスが表示されます。
MCP プロキシサーバーが起動しました
リッスン: 127.0.0.1:8088
リージョン: CN
アクセス制御:
ブロックリスト (ブロックされたサーバー):
- ram
許可リスト (許可されたサーバー):
- ecs
- oss
利用可能なサーバー:
- 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 (ブロック済み)
ブロックされたリクエストは、トラブルシューティングのためにプロキシログに記録されます。
セキュリティインシデント対応
プロキシの認証トークンが漏洩または悪用された疑いがある場合:
-
MCP Proxy サービスを停止します。
-
ローカル設定ファイルを削除します:
rm ~/.aliyun/.mcpproxy_config。 -
Alibaba Cloud コンソールで OAuth 認可を取り消します。
-
API 呼び出しログを確認し、異常な操作を特定します。
-
MCP Proxy を再設定し、新しいトークンを生成します。
パラメータ
aliyun mcp-proxy コマンドはこれらのパラメーターをサポートしています。
|
パラメータ |
説明 |
デフォルト |
|
|
プロキシがリッスンするアドレスです。 |
|
|
|
プロキシがリッスンするポートです。 |
|
|
|
OAuth 認可時のブラウザ自動起動を無効にします。ヘッドレス環境では、CLI が認可 URL をターミナルに出力します。 |
無効 |
|
|
既存の OAuth アプリケーションの名前です。アプリケーションの自動作成をスキップします。 |
|
|
|
OpenAPI MCP サーバーのサービスサイトです。有効な値は |
|
|
|
デフォルトのアップストリーム OpenAPI MCP サーバーアドレスを上書きします。 |
中国サイト: |
|
|
アクセス可能な MCP サーバーの許可リスト (カンマ区切り) です。サーバー名、ID、またはパスプレフィックスをサポートします。指定しない場合、すべてのサーバーが許可されます。詳細については、「サーバーアクセス制御の設定」をご参照ください。 |
無効 |
|
|
アクセス不可能な MCP サーバーのブロックリスト (カンマ区切り) です。サーバー名、ID、またはパスプレフィックスをサポートします。許可リストよりも優先されます。詳細については、「サーバーアクセス制御の設定」をご参照ください。 |
無効 |
よくある質問
OAuth 認証のために aliyun mcp-proxy を実行した後、「ERROR: OAuth flow returned empty RefreshToken」エラーが発生してプロキシの起動に失敗します。なぜこのエラーが発生するのですか?
これは通常、OAuth アプリケーションのタイプまたは ID が正しくないことが原因です。次の点を確認してください。
-
使用する OAuth アプリケーションタイプが Native であること。
-
Alibaba Cloud アカウントまたは RAM ユーザーで認証していること。RAM ロールを引き受けた状態では、リフレッシュトークンは取得できません。
Dify で Connection Refused または Timeout エラーが発生します
次の設定を確認してください。
-
--hostを Docker ブリッジ IP またはホスト内部 IP に設定して、コンテナがmcp-proxyサービスにアクセスできるようにします。 -
ECS セキュリティグループまたはホストファイアウォールは、Docker コンテナからプロキシポート (例:
8088) への TCP トラフィックを許可する必要があります。
mcp-proxy のログを表示する方法は?
systemd デプロイメントでリアルタイムログを表示するには、次を使用します。
sudo journalctl -u aliyun-mcp-proxy -f