🤖

Langflow 1.6リリース:MCP使用時の致命的バグ修正とタイムアウト対処法

に公開

Langflow 1.6リリースのお知らせ

Langflowバージョン1.6がリリースされました。本リリースでは、特にMCP(Model Context Protocol)を使用する際に発生していた致命的な不具合が複数修正されております。

MCP使用時の致命的バグが修正されました

1. 管理者ユーザー制限の解消

従来、Langflow 1.5以前のバージョンでは、MCP機能を利用できるユーザーが「langflow」という管理者ユーザーに限定されており、他のユーザーではMCP設定の追加や編集が不可能でした。この制約により、多人数での使用環境において大きな障壁となっておりました。

バージョン1.6では、この制限が解消され、全ユーザーがMCP機能を平等に利用できるようになりました。

2. データベース制約による複数ユーザー競合の解決

filesテーブルの制約により、複数のユーザーが同時にMCP設定を操作しようとすると競合が発生し、設定の追加や編集が正常に行えないという問題がありました。本リリースでは、データベース設計の見直しにより、この競合問題が根本的に解決されております。

これらの修正により、チーム開発や複数ユーザー環境でのLangflow使用がより実用的になりました。

リリース詳細

Langflow 1.6の詳細なリリースノートは、GitHubにて公開されております。

https://github.com/langflow-ai/langflow/releases

残されたタイムアウト制約と暫定対処策

一方で、MCPコールのタイムアウトが30秒にハードコードされている制約については、1.6.0では修正されておりません。この制限により、長時間を要する処理や大量データの転送時にタイムアウトエラーが発生する可能性があります。

暫定的な対処策として、起動時にパッチを適用するスクリプトをご用意いたしました。以下にスクリプト例を示します。

PATCH_MCP_TIMEOUTS="${PATCH_MCP_TIMEOUTS:-1}"   # 0 で無効
MCP_TIMEOUT_SECONDS="${MCP_TIMEOUT_SECONDS:-300}"
MCP_MAX_RETRIES="${MCP_MAX_RETRIES:-2}"

if [ "${PATCH_MCP_TIMEOUTS}" = "1" ]; then
  echo "Patching MCP timeouts and retries in util.py..."
  UTIL_PY_PATH="$(uv run python - <<'PY'
import importlib
for name in ("langflow.base.mcp.util", "lfx.base.mcp.util"):
    try:
        mod = importlib.import_module(name)
        print(mod.__file__)
        break
    except Exception:
        pass
PY
)"
  if [ -n "$UTIL_PY_PATH" ] && [ -f "$UTIL_PY_PATH" ]; then
    echo "Found util.py at: $UTIL_PY_PATH"
    sed -E -i \
      -e "s/(timeout\s*=\s*)30(\.0)?/\1${MCP_TIMEOUT_SECONDS}.0/g" \
      -e "s/(sse_read_timeout\s*=\s*)30(\.0)?/\1${MCP_TIMEOUT_SECONDS}.0/g" \
      -e "s/(DEFAULT_TIMEOUT\s*=\s*)30(\.0)?/\1${MCP_TIMEOUT_SECONDS}.0/g" \
      -e "s/httpx\.Timeout\(\s*30(\.0)?\s*\)/httpx.Timeout(${MCP_TIMEOUT_SECONDS}.0)/g" \
      -e "s/(asyncio\.wait_for\([[:alnum:]_ ,.*]*,\s*timeout=)30(\.0)?/\1${MCP_TIMEOUT_SECONDS}.0/g" \
      -e "s/(anyio\.fail_after\(\s*)30(\.0)?/\1${MCP_TIMEOUT_SECONDS}.0/g" \
      -e "s/(MAX_RETRIES\s*=\s*)2/\1${MCP_MAX_RETRIES}/g" \
      -e "s/(max_retries\s*=\s*)2/\1${MCP_MAX_RETRIES}/g" \
      "$UTIL_PY_PATH"

    echo "Patched. Showing diffs around timeouts/retries:"
    grep -nE 'timeout|DEFAULT_TIMEOUT|MAX_RETRIES|Timeout\(' "$UTIL_PY_PATH" || true
  else
    echo "WARN: util.py not found; patch skipped. (searched: $UTIL_PY_PATH)"
  fi
else
  echo MCP パッチはスキップします。"
fi

スクリプトの設定説明

  • PATCH_MCP_TIMEOUTS: パッチを有効(1)または無効(0)にする設定
  • MCP_TIMEOUT_SECONDS: タイムアウト時間を秒単位で設定
  • MCP_MAX_RETRIES: 最大リトライ回数

このスクリプトは、util.pyファイル内のタイムアウト関連パラメータをsedコマンドで書き換えることで、制限時間を緩和します。本対処は暫定的なものですので、次期バージョンでの正式修正をお待ちください。

Discussion