UiPath Documentation
orchestrator
latest
false
Orchestrator ユーザー ガイド
重要 :
このコンテンツの一部は機械翻訳によって処理されており、完全な翻訳を保証するものではありません。 新しいコンテンツの翻訳は、およそ 1 ~ 2 週間で公開されます。

MCP サーバーをトラブルシューティングする

UiPath MCP サーバーに関する一般的な非認証の問題 (フォルダー エラー、ランタイムの可用性、CLI またはクライアントのエラー、外部のアプリやツールの信頼性パターンなど) に対する解決策です。

このページでは、UiPath MCP サーバーを実行または呼び出すときに発生する一般的な非認証エラーについて説明します。認証エラー (401、403、OAuth) については、「 MCP サーバー認証のトラブルシューティング」をご覧ください。

400 Bad Request: "Folder key is required" (エラー コード 10500)

このエラーは、最初の呼び出しで MCP クライアント (MCP インスペクターなど) に HTTP 400 として表示され、エラー コードは 10500 になります。

エンドポイントにはフォルダー キーが必要ですが、MCP サーバーの URL に {folderKey} セグメントがありません。

URL にフォルダー キーが含まれていることを確認します。

https://cloud.uipath.com/{org}/{tenant}/agenthub_/mcp/{folderKey}/{slug}
https://cloud.uipath.com/{org}/{tenant}/agenthub_/mcp/{folderKey}/{slug}

フォルダー キーは GUID です (例: dfac03c4-b7d6-44f6-86b9-6f61bdd2c681)。Orchestrator の UI には直接表示されません。それを見つけるには、以下の手順を実行します。

  • ブラウザーから: 開発者ツールを開き、[ ネットワーク ] タブを選択して、Orchestrator のフォルダーに移動して、フォルダーの Key フィールドを含む API 呼び出しを探します。
  • API から: GET /orchestrator_/api/FoldersNavigation/GetFoldersForCurrentUserを呼び出します。各フォルダー オブジェクトの Key プロパティは GUID です。
  • [ MCP サーバー ] ページから: 表示されている URL には既にフォルダー キーが含まれています。

400 Bad Request: "A folder is required for this action (エラー コード 1101)

このエラーは、ツール呼び出しによってジョブが開始されたときに Orchestrator から送信される errorCode 1101 の HTTP 400 として表示されます。これは、上記のフォルダー キー エラーとは異なります。

外部アプリケーションは API アクセス権を持っていますが、フォルダーに割り当てられていません。

  1. Orchestrator で MCP サーバーを含むフォルダーを開きます。
  2. フォルダーの [ 設定 ] タブに移動します。
  3. 外部アプリケーションに適切な権限を割り当てます。

この MCP サーバー (400)には使用できるランタイムがありません

セッションの最初の要求 ( initialize 呼び出し)、またはコード化されたサーバーまたはコマンド サーバー上の 更新ツール からの要求では、HTTP 400 が本文 No runtimes available for this MCP server.

このエラーを返すことができるのは、コード化されたサーバー、コマンド サーバー、およびセルフホスト サーバーのみです。UiPath、Platform、Swagger、およびリモート サーバーは常にランタイムを解決します。

サーバーの種類原因解決方法
コード/コマンドサーバーは最初の要求でジョブを開始します。このエラーは、ジョブのリクエストは承認されたものの、戻ってこなかったジョブがあることを意味します。サーバーのフォルダーの ジョブ をチェックして、失敗したジョブや見つからないジョブがないか確認します。
セルフホストローカル ランタイムが接続されていません。uipath runを起動し、サーバーがアクティブと表示されることを確認します。設定については「 セルフホスト MCP サーバー」をご覧ください

確立されたセッションがセッションの途中で実行時間を失った場合、このエラーではなく 404 Not Found が返されます。

403 Forbidden

ライセンスが利用できません。

呼び出し元の ID に使用できるライセンスがない場合、Orchestrator は errorCode 10000 の 403 を返します。組織の [管理者ライセンス] > [ライセンス ] を調べて、MCP サーバーに関連付けられている製品エディションのライセンスが利用可能であるかを確認します。

UiPath の実行が「You are not authorized」(403)で失敗する

このエラーは、CLI の uipath run コマンド出力に表示されます。

クライアント資格情報 (外部アプリケーション) を使用して uipath run を実行すると、SDK は GetFoldersForCurrentUser を呼び出して UIPATH_FOLDER_PATH をフォルダー キーに解決します。この Orchestrator エンドポイントはクライアント資格情報認証をサポートしておらず、すべての OAuth トークンを拒否し、対話型のユーザー ログインのみを受け入れます。

オプション 1: フォルダー キーを直接設定する

export UIPATH_FOLDER_KEY=<your-folder-key>
uipath run my-mcp
export UIPATH_FOLDER_KEY=<your-folder-key>
uipath run my-mcp

SDK は GetFoldersForCurrentUser 呼び出しを完全にスキップします。

オプション 2: 対話型認証を使用する

uipath auth
uipath auth

Playwright MCP 「Streamable HTTP Post response completed without a reply (ストリーム可能な HTTP 投稿: 応答が返信なしで完了しました。)」というエラー

Playwright MCP サーバーをコマンド MCP サーバーとして使用している場合、呼び出し元のクライアント (ChatGPT や Claude など) が断続的に出現することがあります。

「Tool of type MCP failed because: Streamable HTTP Post response completed without a reply to request with ID (ID が X の要求への応答なしでストリーミング可能な HTTP 投稿応答が完了しました。)」

これは、Playwright MCP の Streamable HTTP 実装における既知の問題であり、UiPath の問題ではありません。大きな DOM スナップショットや待機を伴うページ ナビゲーションなど、実行時間の長い操作中に、Playwright MCP サーバーが接続を切断し、セッションを途中で終了する可能性があります。UiPath MCP クライアントでは、これは MCP プロトコル仕様に従ってエラーとして正しく表示され、フォローアップ要求は「セッションが見つかりません」というエラーで失敗します。

一般的なパターン

次のパターンは、上記のエラーを防ぐのに役立ちます。

外部アプリの権限を確認する

次のシーケンスを使用して、認証、フォルダー解決、ライブ ツール呼び出しを組み合わせて、外部アプリケーションが MCP サーバーにアクセスできるように完全に設定されていることを確認します。

# 1. Authenticate
uipath auth \
  --client-id "<client-id>" \
  --client-secret "<client-secret>" \
  --base-url "https://cloud.uipath.com/{org}/{tenant}" \
  --scope "OR.Default OR.Execution OR.Jobs"

# 2. Set folder key to skip folder lookup issues
echo "UIPATH_FOLDER_KEY=<your-folder-key>" >> .env

# 3. Test with MCP Inspector or cURL
npx @modelcontextprotocol/inspector@0.22.0
# 1. Authenticate
uipath auth \
  --client-id "<client-id>" \
  --client-secret "<client-secret>" \
  --base-url "https://cloud.uipath.com/{org}/{tenant}" \
  --scope "OR.Default OR.Execution OR.Jobs"

# 2. Set folder key to skip folder lookup issues
echo "UIPATH_FOLDER_KEY=<your-folder-key>" >> .env

# 3. Test with MCP Inspector or cURL
npx @modelcontextprotocol/inspector@0.22.0

スコープやフォルダーの割り当てなど、外部アプリケーションの完全な設定については、「 外部アプリケーションで認証する」をご覧ください。

Python MCP サーバーでのエラー処理

コード化された MCP サーバーを構築するときは、エラーを処理して、呼び出し元の LLM に役立つメッセージを生成します。FastMCP は、発生した例外をキャッチし、MCP エラー応答として返します。

from mcp.server.fastmcp import FastMCP
import httpx
import os

mcp = FastMCP("My Server")

@mcp.tool()
async def get_customer(customer_id: str) -> dict:
    """Retrieve customer by ID.

    Args:
        customer_id: Customer identifier (e.g., "CUST-12345")
    """
    if not customer_id or not customer_id.startswith("CUST-"):
        raise ValueError(f"Invalid customer_id format: '{customer_id}'. Expected 'CUST-XXXXX'.")
    try:
        async with httpx.AsyncClient(timeout=30) as client:
            response = await client.get(
                f"https://api.internal.com/customers/{customer_id}",
                headers={"Authorization": f"Bearer {os.getenv('CRM_API_KEY')}"},
            )
            if response.status_code == 404:
                raise RuntimeError(f"Customer {customer_id} not found.")
            response.raise_for_status()
            return response.json()
    except httpx.TimeoutException:
        raise RuntimeError("CRM API timed out. Try again.")
    except httpx.HTTPStatusError as e:
        raise RuntimeError(f"CRM API returned {e.response.status_code}.")
from mcp.server.fastmcp import FastMCP
import httpx
import os

mcp = FastMCP("My Server")

@mcp.tool()
async def get_customer(customer_id: str) -> dict:
    """Retrieve customer by ID.

    Args:
        customer_id: Customer identifier (e.g., "CUST-12345")
    """
    if not customer_id or not customer_id.startswith("CUST-"):
        raise ValueError(f"Invalid customer_id format: '{customer_id}'. Expected 'CUST-XXXXX'.")
    try:
        async with httpx.AsyncClient(timeout=30) as client:
            response = await client.get(
                f"https://api.internal.com/customers/{customer_id}",
                headers={"Authorization": f"Bearer {os.getenv('CRM_API_KEY')}"},
            )
            if response.status_code == 404:
                raise RuntimeError(f"Customer {customer_id} not found.")
            response.raise_for_status()
            return response.json()
    except httpx.TimeoutException:
        raise RuntimeError("CRM API timed out. Try again.")
    except httpx.HTTPStatusError as e:
        raise RuntimeError(f"CRM API returned {e.response.status_code}.")

はじめにの完全なガイドについては、「 uipath-mcp クイック スタート」をご覧ください。

MCP クライアント コードのリトライ ロジック

コード化されたエージェントから MCP サーバーを呼び出す場合は、一時的な障害に対してリトライ ロジックを使用します。

import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async def call_with_retry(url: str, token: str, tool: str, args: dict, retries: int = 3):
    """Call an MCP tool with exponential backoff."""
    for attempt in range(retries):
        try:
            async with streamablehttp_client(
                url=url,
                headers={"Authorization": f"Bearer {token}"},
                timeout=60,
            ) as (read, write, _):
                async with ClientSession(read, write) as session:
                    await session.initialize()
                    result = await session.call_tool(tool, args)
                    if result.isError:
                        raise RuntimeError(result.content[0].text if result.content else "Unknown error")
                    return result
        except Exception as e:
            if attempt < retries - 1:
                wait = 2 ** attempt
                await asyncio.sleep(wait)
            else:
                raise
import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async def call_with_retry(url: str, token: str, tool: str, args: dict, retries: int = 3):
    """Call an MCP tool with exponential backoff."""
    for attempt in range(retries):
        try:
            async with streamablehttp_client(
                url=url,
                headers={"Authorization": f"Bearer {token}"},
                timeout=60,
            ) as (read, write, _):
                async with ClientSession(read, write) as session:
                    await session.initialize()
                    result = await session.call_tool(tool, args)
                    if result.isError:
                        raise RuntimeError(result.content[0].text if result.content else "Unknown error")
                    return result
        except Exception as e:
            if attempt < retries - 1:
                wait = 2 ** attempt
                await asyncio.sleep(wait)
            else:
                raise

このページは役に立ちましたか?

接続

ヘルプ リソース サポート

学習する UiPath アカデミー

質問する UiPath フォーラム

最新情報を取得