Langflow 1.6 Release Announcement
Langflow version 1.6 has been released. In this release, several fatal bugs that occurred when using MCP (Model Context Protocol) have been particularly fixed.
Critical MCP Bugs Fixed
1. Removing Admin User Restriction
Previously, in Langflow versions 1.5 and earlier, MCP functionality was limited to the "langflow" admin user only, and other users could not add or edit MCP settings. This restriction had been a major barrier in multi-user environments.
In version 1.6, this restriction has been removed, allowing all users to use MCP functionality equally.
2. Resolving Database Constraint Conflicts for Multiple Users
Due to constraints in the files table, conflicts occurred when multiple users attempted to manipulate MCP settings simultaneously, preventing proper addition or editing of settings. In this release, through database design review, this conflict issue has been fundamentally resolved.
These fixes make Langflow more practical for team development and multi-user environments.
Release Details
Detailed release notes for Langflow 1.6 are available on GitHub.
https://github.com/langflow-ai/langflow/releases
Remaining Timeout Constraints and Provisional Countermeasures
On the other hand, the constraint that MCP call timeout is hardcoded to 30 seconds has not been fixed in 1.6.0. This limitation may cause timeout errors during processing that requires long time or transferring large amounts of data.
As a provisional countermeasure, we have prepared a script to apply patches at startup. Below is an example script.
PATCH_MCP_TIMEOUTS="${PATCH_MCP_TIMEOUTS:-1}" # 0 to disable
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 patching is skipped."
fi
Script Configuration Explanation
-
PATCH_MCP_TIMEOUTS: Setting to enable (1) or disable (0) the patch -
MCP_TIMEOUT_SECONDS: Timeout time in seconds -
MCP_MAX_RETRIES: Maximum number of retries
This script relaxes the timeout limitation by rewriting timeout-related parameters in util.py using sed commands. This is a provisional measure, so please wait for the official fix in the next version.