langflow-ai/langflow

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works · Linux / Luna: Not tested

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/langflow-ai--langflow.svg).

mcp-server

Works

README claims checked out on 1 recorded setup. Combinations not listed here were not tested.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxyesnot tested

Linux / Haiku 5.5: yes · Oct 23, 2026 · aeb10d96bb2e · claude-code / 2.1.300 (Claude Code)
Recorded operation: Remote hosted MCP connection · initialize + tools/list · http://127.0.0.1:7860/api/v1/mcp/project/cc3bdc6e-d539-490a-a3d9-cafbe628b89c/streamable

Linux / Luna: not tested · Oct 24, 2026 · aeb10d96bb2e · codex / codex-cli 0.163.0
Recorded operation: make run_cli host=127.0.0.1 port=7860 open_browser=false

Does what it says
1 of 1 claims checked out
  • Langflow flows are exposed as MCP tools that an MCP client can call: Real input produced the expected result: hello coldpass

    Source: **Deploy as an MCP server** and turn your flows into tools for MCP clients.

    Input: {"tool": "coldpass_probe", "arguments": {"input_value": "hello coldpass"}}

    Expected: tool result echoes the input text

    Command: /tmp/lf-venv/bin/langflow run tools/call {"tool": "coldpass_probe", "arguments": {"input_value": "hello coldpass"}}

    Observed: hello coldpass"}], "isError": false}

MCP
Yes, observed
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Maintained
actively maintained: last commit 0 days ago; 1033 commits and 904 merged PRs in 90 days; 206 open issues, 1015 open PRs; 5 of 11 recent threads got a maintainer reply, median first reply 15.8h; latest release 2026-10-22

Last commit Oct 23, 2026

Setup time
20 min 45 s
20 min 45 s to a working result
Issue
none found in recorded check
Examples
not tested (blocked)
  • Install Langflow locally from PyPI (README Quickstart): Not run as an example; the install step was executed directly: uv pip install langflow -U in a fresh venv (/tmp/lf-venv, Python 3.12.3). No documented example command in the README was runnable as a finite example.

    Source: README.md Quickstart > Install locally

    Expected: documented command completes successfully

    Observed: Not run as an example; the install step was executed directly: uv pip install langflow -U in a fresh venv (/tmp/lf-venv, Python 3.12.3). No documented example command in the README was runnable as a finite example.

Evidence
README behavior checked
Agent interfaces
MCP
MCP

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

MCP context
1 tools · about 91 tokens
1 tools · about 91 tokens

Largest returned tools/list page in these observations. Compact UTF-8 definition bytes ÷ 4, rounded up; approximate, excluding client framing and tool results. This is context size, not proof that every tool works.

Measured on linux with Haiku 5.5 · Oct 23, 2026 on aeb10d96bb2e

Tested with
Claude Code / Haiku 5.5
  • Linux: Claude Code / Haiku 5.5 · agent 2.1.300 (Claude Code) · Hosted MCP connection/tools-list passed · Oct 23, 2026 on aeb10d96bb2e

Each entry describes its recorded operation and source revision. Other agent clients were not tested.

Safety
Made outbound HTTPS connections: yes (hosts not recorded) by curl, langflow

Review signals across current setups: connection review. 2796 listed items (named-host connections, static matches, dependency advisories) are below and do not change this verdict. 88 static matches retained as context.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 37 distinct locations. 2 findings. 54 attributed processes.

Source contains encoded blob; review its purpose. src/frontend/src/utils/styleUtils.ts

Gitleaks found a possible hardcoded secret; value withheld. 68 distinct locations. 1265 findings.

OSV reports a known vulnerability in this dependency version. 37 distinct locations. 142 findings.

Reviewed as expected for a test run: apt refreshed its package lists; resolver address lookups that send no data.

Reviewed as expected for a test run: resolver address lookups that send no data.

Full event, path and process lists for each observed setup:

Run details

Haiku 5.5

Native agent · Hosted MCP connection/tools-list passed

Checked operation Remote hosted MCP connection · initialize + tools/list · http://127.0.0.1:7860/api/v1/mcp/project/cc3bdc6e-d539-490a-a3d9-cafbe628b89c/streamable

Tested against the hosted endpoint only. Local install is untested.

Agent-reported scope: Install Langflow 1.13.0 from PyPI per the README Quickstart, start the server, create a flow via the REST API, expose it as an MCP tool, and call that tool over streamable HTTP; the tool returned 'hello coldpass'.

MCP server returned: langflow-mcp-project-cc3bdc6e-d539-490a-a3d9-cafbe628b89c · version 1.30.0.

MCP tools returned: coldpass_probe. Tool listing does not establish authenticated tool-call success.

Run details
run
langflow-ai--langflow-claude-haiku-5-5-1792784516336969478
date
Oct 23, 2026
time to working
1244.9s
product hosting / execution
Remote hosted MCP endpoint
recorded operation scope
remote hosted MCP initialize + tools/list
model
claude-haiku-5-5
agent / version
claude-code / 2.1.300 (Claude Code)
platform
linux
reported cost
$0.034113
Recorded source
https://github.com/langflow-ai/langflow
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "aeb10d96bb2ea797696613af931e91ddf51f3320", "url": "https://github.com/langflow-ai/langflow"}
Test version
readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9
revision
aeb10d96bb2ea797696613af931e91ddf51f3320
Whose fault: not assigned · resolved

Safety: Review signals: 1 connection review, 1 encoded blob, 1265 hardcoded secret, 116 known vulnerability. 44 static matches retained as context.

Review signals: 1 connection review, 1 encoded blob, 1265 hardcoded secret, 116 known vulnerability. 44 static matches retained as context.

Reviewed as expected for a test run: resolver address lookups that send no data.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 28 distinct locations. 32 attributed processes.

Source contains encoded blob; review its purpose. src/frontend/src/utils/styleUtils.ts

Gitleaks found a possible hardcoded secret; value withheld. 68 distinct locations. 1265 findings.

OSV reports a known vulnerability in this dependency version. 29 distinct locations. 110 findings.

44 hardcoded secret matches retained as context; full list in the evidence.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • Langflow flows are exposed as MCP tools that an MCP client can call: Real input produced the expected result: hello coldpass

    Source: **Deploy as an MCP server** and turn your flows into tools for MCP clients.

    Input: {"tool": "coldpass_probe", "arguments": {"input_value": "hello coldpass"}}

    Expected: tool result echoes the input text

    Command: /tmp/lf-venv/bin/langflow run tools/call {"tool": "coldpass_probe", "arguments": {"input_value": "hello coldpass"}}

    Observed: hello coldpass"}], "isError": false}

Examples

  • Install Langflow locally from PyPI (README Quickstart): Not run as an example; the install step was executed directly: uv pip install langflow -U in a fresh venv (/tmp/lf-venv, Python 3.12.3). No documented example command in the README was runnable as a finite example.

    Source: README.md Quickstart > Install locally

    Expected: documented command completes successfully

    Observed: Not run as an example; the install step was executed directly: uv pip install langflow -U in a fresh venv (/tmp/lf-venv, Python 3.12.3). No documented example command in the README was runnable as a finite example.

Local or hosted: local

What the agent did

Install Langflow 1.13.0 from PyPI per the README Quickstart, start the server, create a flow via the REST API, expose it as an MCP tool, and call that tool over streamable HTTP; the tool returned 'hello coldpass'.

cd <guest-path> && pwd && ls -la && git -C . rev-parse --is-inside-work-tree 2>&1; python3 --version; id -u; cat /etc/os-release | head -3; ls /inputs 2>&1; ls <guest-path> 2>&1
cd <guest-path> && cat README.md | head -150
which uv; uv --version 2>&1; which pip3 python3.12; grep -m1 '^version' <guest-path>; head -60 <guest-path>; ls <guest-path>
curl -LsSf https://astral.sh/uv/install.sh | sh 2>&1 | tail -5; export PATH="$HOME/.local/bin:$PATH"; uv --version
export PATH="$HOME/.local/bin:$PATH"; mkdir -p /tmp/lf-fresh && cd /tmp/lf-fresh && uv venv /tmp/lf-venv --python 3.12 2>&1 | tail -3 && VIRTUAL_ENV=/tmp/lf-venv uv pip install langflow -U 2>&1 | tail -8; ls /tmp/lf-venv/bin | grep -i langflow
cd /tmp/lf-fresh && /tmp/lf-venv/bin/langflow --version; /tmp/lf-venv/bin/langflow run --help 2>&1 | head -60; grep -rn -i "telemetry\|DO_NOT_TRACK" <guest-path> 2>/dev/null | head -5; grep -rln "DO_NOT_TRACK" <guest-path> 2>/dev/null | head -3
cd <guest-path> && grep -n "DO_NOT_TRACK\|TELEMETRY" src/backend/base/langflow/services/telemetry/service.py | head; grep -rn "LANGFLOW_SUPERUSER_PASSWORD\|AUTO_LOGIN" src/backend/base/langflow/services/settings/base.py | head -6
mkdir -p /tmp/lf-logs && cd /tmp/lf-fresh && export DO_NOT_TRACK=true LANGFLOW_SUPERUSER=langflow LANGFLOW_SUPERUSER_PASSWORD='LfTest-2026-pass' && nohup /tmp/lf-venv/bin/langflow run > /tmp/lf-logs/server.log 2>&1 &
sleep 60; curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:7860/health; curl -s http://127.0.0.1:7860/health_check; echo; tail -5 /tmp/lf-logs/server.log
cd /tmp && /tmp/lf-venv/bin/langflow --help 2>/dev/null | grep -v "^$" | head -30; curl -s -X POST http://127.0.0.1:7860/api/v1/login -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=langflow&password=<secret>' | head -c 400; echo
cd /tmp && TOKEN=<secret> -s -X POST http://127.0.0.1:7860/api/v1/login -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=langflow&password=<secret>' | python3 -c 'import sys,json;print(json.load(sys.stdin)["access_token"])') && echo "$TOKEN" > /tmp/lf-logs/token && curl -s -X POST http://127.0.0.1:7860/api/v1/flows/ -H "Authorization: <secret>" -H 'Content-Type: application/json' -d '{"name":"coldpass-probe-flow","description":"probe","data":{"nodes":[],"edges":[]}}' | head -c 600; echo
cd /tmp && TOKEN=<secret> /tmp/lf-logs/token); FID=b32ad26a-87aa-4e06-8879-41fa27021e75; curl -s http://127.0.0.1:7860/api/v1/flows/$FID -H "Authorization: <secret>" | python3 -c 'import sys,json;d=json.load(sys.stdin);print(d["id"],d["name"],d["description"])'; grep -A5 "\[project.scripts\]" <guest-path>; grep -rn "langflow mcp\|mcp-server\|mcp_server" <guest-path> --include=*.md* -l | head -5
cd <guest-path> && grep -n "stdio\|mcp-proxy\|uvx\|command\|streamable\|/api/v1/mcp" docs/docs/Agents/mcp-server.mdx | head -40; grep -n "langflow_mcp\|\[project.scripts\]" -A4 pyproject.toml | head -20
cd /tmp && TOKEN=<secret> /tmp/lf-logs/token); FOLDER=cc3bdc6e-d539-490a-a3d9-cafbe628b89c; curl -s "http://127.0.0.1:7860/api/v1/mcp/project/$FOLDER" -H "Authorization: <secret>" | head -c 800; echo; echo ---; curl -s -X PATCH "http://127.0.0.1:7860/api/v1/flows/b32ad26a-87aa-4e06-8879-41fa27021e75" -H "Authorization: <secret>" -H 'Content-Type: application/json' -d '{"mcp_enabled":true,"action_name":"coldpass_probe","action_description":"coldpass probe flow"}' | head -c 300; echo
cd /tmp && TOKEN=<secret> /tmp/lf-logs/token); FOLDER=cc3bdc6e-d539-490a-a3d9-cafbe628b89c; curl -s "http://127.0.0.1:7860/api/v1/mcp/project/$FOLDER" -H "Authorization: <secret>" | head -c 800; echo; curl -s -X POST "http://127.0.0.1:7860/api/v1/mcp/project/$FOLDER/streamable" -H "Authorization: <secret>" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}' | head -c 400; echo
cd /tmp && TOKEN=<secret> /tmp/lf-logs/token); curl -s -X POST http://127.0.0.1:7860/api/v1/api_key/ -H "Authorization: <secret>" -H 'Content-Type: application/json' -d '{"name":"coldpass-probe"}' > /tmp/lf-logs/apikey.json; python3 -c 'import json;d=json.load(open("/tmp/lf-logs/apikey.json"));print(list(d.keys()))'
cd <guest-path> && ls src/backend/base/langflow/initial_setup/starter_projects/ 2>/dev/null; grep -n "Hello\|hello" -i src/backend/base/langflow/initial_setup/starter_projects/*.json 2>/dev/null | head -3
mkdir -p /tmp/lf-logs/scripts && cat > /tmp/lf-logs/scripts/mcp_call.py <<'EOF'
import asyncio, json, sys
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
URL = "http://127.0.0.1:7860/api/v1/mcp/project/cc3bdc6e-d539-490a-a3d9-cafbe628b89c/streamable"
KEY = json.load(open("/tmp/lf-logs/apikey.json"))["api_key"]
async def main():
    async with streamablehttp_client(URL, headers={"x-api-key": <secret>
        async with ClientSession(r, w) as s:
            await s.initialize()
            tools = await s.list_tools()
            print("TOOLS", [t.name for t in tools.tools])
            res = await s.call_tool("coldpass_probe", {"input_value": "hello coldpass"})
            print("RESULT", res.model_dump_json()[:800])
asyncio.run(main())
EOF
cd /tmp/lf-logs && timeout 120 /tmp/lf-venv/bin/python -I scripts/mcp_call.py 2>&1 | tail -20
cd /tmp/lf-logs && TOKEN=<secret> token); curl -s http://127.0.0.1:7860/api/v1/all -H "Authorization: <secret>" -o all.json; ls -la all.json; python3 -I -c '
import json
d=json.load(open("/tmp/lf-logs/all.json"))
print(list(d.keys())[:20])
for cat,comps in d.items():
    if isinstance(comps,dict) and "ChatInput" in comps:
        c=comps["ChatInput"]; print(cat, list(c.keys())[:20]); print(c.get("display_name"), c.get("outputs") and [o["name"] for o in c["outputs"]]); break
'
cd /tmp/lf-logs && TOKEN=<secret> token) && python3 -I - <<'EOF'
import json, copy, urllib.request
all_ = json.load(open("/tmp/lf-logs/all.json"))
comp = all_["input_output"]["ChatInput"]
node = copy.deepcopy(comp)
nid = "ChatInput-coldp1"
node["template"]["input_value"]["value"] = "hello coldpass"
data = {"nodes":[{"id":nid,"type":"genericNode","position":{"x":100,"y":100},
  "data":{"id":nid,"type":"ChatInput","node":node}}],"edges":[]}
body = json.dumps({"data": data}).encode()
req = urllib.request.Request("http://127.0.0.1:7860/api/v1/flows/b32ad26a-87aa-4e06-8879-41fa27021e75", data=body, method="PATCH",
  headers={"Authorization":"<secret>"+open("/tmp/lf-logs/token").read().strip(),"Content-Type":"application/json"})
r = urllib.request.urlopen(req).read().decode()
print(r[:200])
EOF
timeout 150 /tmp/lf-venv/bin/python -I scripts/mcp_call.py 2>&1 | tail -20
cd /tmp/lf-logs && TOKEN=<secret> token); curl -s -X POST "http://127.0.0.1:7860/api/v1/run/b32ad26a-87aa-4e06-8879-41fa27021e75?stream=false" -H "Authorization: <secret>" -H 'Content-Type: application/json' -d '{"input_value":"hello coldpass","input_type":"chat","output_type":"chat"}' | head -c 1200; echo; echo ---; grep -i "error\|exception" /tmp/lf-logs/server.log | tail -5 | cut -c1-400
cd /tmp/lf-logs && KEY=$(python3 -I -c 'import json;print(json.load(open("/tmp/lf-logs/apikey.json"))["api_key"])'); curl -s -X POST "http://127.0.0.1:7860/api/v1/run/b32ad26a-87aa-4e06-8879-41fa27021e75?stream=false" -H "x-api-key: <secret>" -H 'Content-Type: application/json' -d '{"input_value":"hello coldpass","input_type":"chat","output_type":"chat"}' | head -c 1500; echo
cd <guest-path> && python3 -I -c '
import json
d=json.load(open("Basic Prompting.json"))
e=d["data"]["edges"][0]
print(json.dumps(e,indent=1)[:1500])
'
cd /tmp/lf-logs && python3 -I - <<'EOF'
import json, copy, urllib.request
all_ = json.load(open("/tmp/lf-logs/all.json"))
def node_for(name, nid, value=None):
    node = copy.deepcopy(all_["input_output"][name])
    if value is not None:
        node["template"]["input_value"]["value"] = value
    return {"id":nid,"type":"genericNode","position":{"x":100,"y":100},"data":{"id":nid,"type":name,"node":node}}
ci, co = "ChatInput-coldp1", "ChatOutput-coldp2"
nodes = [node_for("ChatInput", ci, "hello coldpass"), node_for("ChatOutput", co)]
Q = lambda s: s.replace('"', "œ")
src = {"dataType":"ChatInput","id":ci,"name":"message","output_types":["Message"]}
tgt = {"fieldName":"input_value","id":co,"inputTypes":["Message"],"type":"str"}
edge = {"animated":False,"className":"","data":{"sourceHandle":src,"targetHandle":tgt},
  "id":"reactflow__edge-"+ci+Q(json.dumps(src,separators=(",",":")))+"-"+co+Q(json.dumps(tgt,separators=(",",":"))),
  "selected":False,"source":ci,"sourceHandle":Q(json.dumps(src,separators=(", ",": "))),"target":co,"targetHandle":Q(json.dumps(tgt,separators=(", ",": ")))}
data = {"nodes":nodes,"edges":[edge]}
req = urllib.request.Request("http://127.0.0.1:7860/api/v1/flows/b32ad26a-87aa-4e06-8879-41fa27021e75", data=json.dumps({"data":data}).encode(), method="PATCH",
  headers={"Authorization":"<secret>"+open("/tmp/lf-logs/token").read().strip(),"Content-Type":"application/json"})
print(urllib.request.urlopen(req).status)
EOF
KEY=$(python3 -I -c 'import json;print(json.load(open("/tmp/lf-logs/apikey.json"))["api_key"])'); curl -s -X POST "http://127.0.0.1:7860/api/v1/run/b32ad26a-87aa-4e06-8879-41fa27021e75?stream=false" -H "x-api-key: <secret>" -H 'Content-Type: application/json' -d '{"input_value":"hello coldpass","input_type":"chat","output_type":"chat"}' | head -c 1500; echo
cd /tmp/lf-logs && timeout 150 /tmp/lf-venv/bin/python -I scripts/mcp_call.py 2>&1 | tail -5 | cut -c1-700
cd <guest-path> && grep -rln "apscheduler\|crontab\|cron_trigger\|CronTrigger\|--once\|--now" src/backend/base/langflow --include=*.py | head -8; grep -n "listeners" -A6 src/backend/base/langflow/cli/*.py 2>/dev/null | head -20; grep -n "^test\|^unit_tests\|^test_" Makefile | head
cd <guest-path> && grep -rln "def listeners\|listener" src/backend/base/langflow --include=*.py | head -8; grep -rn "def listeners" -A12 src/backend/base/langflow --include=*.py | head -30; /tmp/lf-venv/bin/langflow listeners --help 2>/dev/null | tail -20 | cut -c1-120
cd <guest-path> && grep -c "Deploy as an MCP server\*\* and turn your flows into tools for MCP clients." README.md && mkdir -p .coldpass && python3 -I - <<'EOF'
import json
key = json.load(open("/tmp/lf-logs/apikey.json"))["api_key"]
W = "<guest-path>"
PROJ = "cc3bdc6e-d539-490a-a3d9-cafbe628b89c"
URL = f"http://127.0.0.1:7860/api/v1/mcp/project/{PROJ}/streamable"
ARGV = ["/tmp/lf-venv/bin/langflow", "run"]
ENV = {"DO_NOT_TRACK": "true", "LANGFLOW_SUPERUSER": "langflow", "LANGFLOW_SUPERUSER_PASSWORD": "LfTest-2026-pass"}
ARGS = {"input_value": "hello coldpass"}
probe = {"kind": "mcp_http", "argv": ARGV, "cwd": W, "url": URL, "env": ENV,
         "headers": {"x-api-key": <secret>"tool": "coldpass_probe", "arguments": ARGS,
         "expected_text": "hello coldpass"}
claim = {"kind": "claim", "claim": "Langflow flows are exposed as MCP tools that an MCP client can call",
         "source": "**Deploy as an MCP server** and turn your flows into tools for MCP clients.",
         "input": "input_value=hello coldpass", "expected": "tool result echoes the input text",
         "probe_kind": "mcp_http", "argv": ARGV, "cwd": W, "url": URL, "env": ENV,
         "headers": {"x-api-key": <secret>"tool": "coldpass_probe", "arguments": ARGS,
         "expected_text": "hello coldpass"}
examples = [{"kind": "example", "claim": "Install Langflow locally from PyPI (README Quickstart)",
             "source": "README.md Quickstart > Install locally",
             "reason": "Not run as an example; the install step was executed directly: uv pip install langflow -U in a fresh venv (/tmp/lf-venv, Python 3.12.3). No documented example command in the README was runnable as a finite example."}]
cycles = {"detected": False,
          "reason": "Entry points inspected: no cron, scheduler, --once or --now in src/backend/base/langflow; the only long-running loop is 'langflow listeners', which holds external provider connections (Slack Socket Mode, Microsoft Graph polling, Gmail Pub/Sub) and needs real provider credentials, so it was not exercised. The product webhook endpoints need external callers.",
          "checks": []}
json.dump(probe, open(W+"/.coldpass/probe.json","w"), indent=2)
json.dump([claim], open(W+"/.coldpass/claims.json","w"), indent=2)
json.dump(examples, open(W+"/.coldpass/examples.json","w"), indent=2)
json.dump(cycles, open(W+"/.coldpass/cycles.json","w"), indent=2)
print("written")
EOF
ls -la .coldpass; pkill -f "langflow run" ; sleep 3; curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:7860/health || echo "port free"
cd <guest-path> && grep -nF "Deploy as an MCP server** and turn your flows into tools for MCP clients." README.md; echo "rc=$?"; ls -la .coldpass
ps -eo pid,args | grep "[l]angflow" | cut -c1-150; for p in $(ps -eo pid,args | grep "[/]tmp/lf-venv/bin/langflow run" | awk '{print $1}'); do kill $p; done; sleep 5; curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:7860/health_check || echo "port 7860 free"
cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay 2>&1 | tail -60 | cut -c1-600
cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay > /tmp/lf-logs/validate.json 2>/tmp/lf-logs/validate.err; echo rc=$?; python3 -I -c '
import json
d=json.load(open("/tmp/lf-logs/validate.json"))
print("valid", d.get("valid"), "problems", d.get("problems"))
r=d.get("replay",{})
print("replay status", r.get("status"))
for k,v in r.get("details",{}).items():
    if k in ("claims","examples","cycles","checks"): print(k, json.dumps(v)[:500])
print(sorted(d.keys()))
'; tail -3 /tmp/lf-logs/validate.err; ps -eo pid,args | grep "[/]tmp/lf-venv/bin/langflow" | head -2
python3 -I -c '
import json
d=json.load(open("/tmp/lf-logs/validate.json"))
r=d["replay"]; print(sorted(r.keys())); det=r.get("details",{}); print(sorted(det.keys()))
for k in det:
    if isinstance(det[k],(list,dict)) and k not in ("tool_result",): print(k, json.dumps(det[k])[:300])
'
python3 -I -c '
import json
r=json.load(open("/tmp/lf-logs/validate.json"))["replay"]
for k in ("claims","cycle_checks","example_checks","evidence_strength"):
    print(k, json.dumps(r.get(k))[:600])
'
mkdir -p <guest-path> && python3 -I - <<'EOF'
import json
report = {
 "outcome": "working",
 "fault_owner": None,
 "operation": "Install Langflow 1.13.0 from PyPI per the README Quickstart, start the server, create a flow via the REST API, expose it as an MCP tool, and call that tool over streamable HTTP; the tool returned 'hello coldpass'.",
 "operation_scope": "Local Linux guest (Ubuntu 24.04, Python 3.12.3, uv 0.13.5), no browser, no external providers. Auth: <secret>",
 "steps": [
   "curl -LsSf https://astral.sh/uv/install.sh | sh",
   "uv venv /tmp/lf-venv --python 3.12  (run from fresh dir /tmp/lf-fresh)",
   "uv pip install langflow -U  (README: 'uv pip install langflow -U', run in a fresh directory)",
   "langflow run  (README: 'uv run langflow run'; started as /tmp/lf-venv/bin/langflow run with DO_NOT_TRACK=true and LANGFLOW_SUPERUSER_PASSWORD set)",
   "POST /api/v1/login, POST /api/v1/flows/, PATCH /api/v1/flows/{id} (mcp_enabled=true), POST /api/v1/api_key/",
   "POST /api/v1/run/{flow_id} echoed 'hello coldpass' through ChatInput->ChatOutput",
   "MCP streamable HTTP initialize, tools/list (coldpass_probe), tools/call -> 'hello coldpass'",
   "python3 -I <guest-path> --validate --replay -> valid, replay PASS"
 ],
 "deviations": [
   "uv was not preinstalled; installed with the official uv install.sh (curl|sh) into ~/.local.",
   "README 'uv run langflow run' was not used from the checkout; the PyPI package was installed in a venv per the README install step and run via the absolute path /tmp/lf-venv/bin/langflow run. The checkout source (also version 1.13.0) was not built or run.",
   "Release packages disable auto login, so LANGFLOW_SUPERUSER_PASSWORD was set to a throwaway local value in the guest.",
   "The project MCP endpoint rejected the Bearer JWT and required an x-api-key header, so the probe passes x-api-key instead of Authorization.",
   "The empty flow returned no MCP content; a ChatInput node built from the product's own component catalog (/api/v1/all) and an edge to a ChatOutput node were added before the tool call returned text.",
   "The README has no runnable example or test command for the quickstart; the example entry is recorded with reason. The Makefile unit test suite was not run.",
   "The checker path /inputs/coldpass-preflight.py does not exist in this guest; the checker at <guest-path> was used instead.",
   "Git init/fetch was not performed; the workspace is not a git repository and the checker ran without it.",
   "A broad pkill matched my own shell command once; the server was then stopped by PID and port 7860 confirmed free before replay."
 ],
 "stuck_step": None,
 "main_blocker": None,
 "plain_failure": None,
 "suggested_fix": "None for the tested path. Optional: the checkout's own source run path (make run_cli / uv run langflow run from the repo) was not exercised."
}
json.dump(report, open("<guest-path>","w"), indent=2)
print("ok")
EOF
<env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay > /tmp/lf-logs/validate2.json 2>&1; echo rc=$?; python3 -I -c 'import json;d=json.load(open("/tmp/lf-logs/validate2.json"));print(d["valid"],d["problems"],d["replay"]["status"])' 2>/dev/null || tail -c 600 /tmp/lf-logs/validate2.json; ps -eo pid,args | grep "[/]tmp/lf-venv/bin/langflow" | wc -l
ps -eo pid,ppid,etime,args | grep "[/]tmp/lf-venv/bin/langflow" | cut -c1-160; curl -s -o /dev/null -w "7860:%{http_code}\n" http://127.0.0.1:7860/health_check
cd <guest-path> && ls -la .coldpass && ls report.json 2>&1 | head -1; python3 -I -c 'import json;[json.load(open("<guest-path>"+f)) for f in ["report.json","probe.json","claims.json","examples.json","cycles.json"]];print("all JSON parse")'
Earlier attempts (1)

Luna

Native agent · Not tested

Operation / attempted scope make run_cli host=127.0.0.1 port=7860 open_browser=false

Agent-reported scope: make run_cli

Run details
run
langflow-ai--langflow-gpt-6-luna-1792852522388067991
date
Oct 24, 2026
time to working
not recorded
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
gpt-6-luna
agent / version
codex / codex-cli 0.163.0
platform
linux
reported cost
not reported (not assumed free)
Recorded source
https://github.com/langflow-ai/langflow
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "aeb10d96bb2ea797696613af931e91ddf51f3320", "url": "https://github.com/langflow-ai/langflow"}
Test version
readme-20cd1bc4ab0be6730266a08d7400e342dd7d403c08aabf42aab2e51dc9b34ce0
revision
aeb10d96bb2ea797696613af931e91ddf51f3320
Whose fault: prerequisite · diagnosed

The guest memory limit kills the frontend production build before index.html is generated.

Double-checks failed run: langflow-ai--langflow-gpt-6-luna-1792799059670329129.

Recorded blocker / warning

Step: Frontend production build in make run_cli

The guest memory limit kills the frontend production build before index.html is generated.

Safety: Review signals: 1 connection review, 1 encoded blob, 1265 hardcoded secret, 148 known vulnerability. 44 static matches retained as context.

Review signals: 1 connection review, 1 encoded blob, 1265 hardcoded secret, 148 known vulnerability. 44 static matches retained as context.

Reviewed as expected for a test run: apt refreshed its package lists; resolver address lookups that send no data.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 16 distinct locations. 22 attributed processes.

Source contains encoded blob; review its purpose. src/frontend/src/utils/styleUtils.ts

Gitleaks found a possible hardcoded secret; value withheld. 68 distinct locations. 1265 findings.

OSV reports a known vulnerability in this dependency version. 37 distinct locations. 142 findings.

44 hardcoded secret matches retained as context; full list in the evidence.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • Running the source checkout starts Langflow at its local web address.: make run_cli installed dependencies but its frontend production build was killed by the guest memory limit; the CLI then failed because src/backend/base/langflow/frontend/index.html was not generated

    Source: Langflow starts at http://127.0.0.1:7860.

    Input: 127.0.0.1:7860

    Expected: Langflow starts at http://127.0.0.1:7860.

    Observed: make run_cli installed dependencies but its frontend production build was killed by the guest memory limit; the CLI then failed because src/backend/base/langflow/frontend/index.html was not generated

Examples

  • Run the source checkout using the documented Make target: command exited with code 2

    Source: README.md > Other install options > Run from source

    Input: host=127.0.0.1 port=7860 open_browser=false

    Expected: Starts the application

    Command: make run_cli host=127.0.0.1 port=7860 open_browser=false

    Observed: reStore.ts, dynamic import will not move module into another chunk. [plugin vite:reporter] (!) <guest-path> is dynamically imported by <guest-path> but also statically imported by <guest-path>, dynamic import will not move module into another chunk. computing gzip size... Killed Build failed! Error output above ☝️ Checked 561 packages in 1.21s make: *** [Makefile.frontend:42: build_frontend] Error 1

Local or hosted: local

Suggested next step (agent-reported): Run make run_cli on a guest with enough memory to complete the Vite production build.

What the agent did

make run_cli

pwd; rg --files -g 'README*' -g 'AGENTS.md' -g 'pyproject.toml' -g 'package.json' -g 'uv.lock' -g 'requirements*.txt' -g '.github/workflows/**' | head -100; git status --short --branch; python3 --version; id -u; vault-search 'langflow README setup MCP probe' 2>&1 | head -80; cat <host-path> 2>&1 | head -80
find .. -name AGENTS.md -o -iname 'README*' | head -100; ls -la | head -60
cat AGENTS.md; cat README.md
grep -n -E 'run_cli|make init|uv|langflow run|MCP|flow' Makefile README.md | head -80; command -v uv || true; command -v make; ls -la .coldpass; sed -n '1,100p' Makefile
sed -n '240,265p' Makefile; command -v node || true; npm --version 2>&1; command -v sudo; sudo -n true 2>&1; ls <guest-path> /inputs/coldpass-preflight.py 2>&1; cat .env.example | head -20
sudo -n apt-get update && sudo -n apt-get install -y curl make; curl -LsSf https://astral.sh/uv/install.sh | sh; ls -la <host-path> 2>/dev/null; cat pyproject.toml | head -35
sudo -n apt-get install -y nodejs npm; node --version 2>&1; npm --version 2>&1
node --version; npm --version;
curl -fsSL https://nodejs.org/dist/index.tab | head -2
sudo -n npm install -g n; sudo -n n 22.12.0; node --version; npm --version
make run_cli host=127.0.0.1 port=7860 open_browser=false
sed -n '1,45p' Makefile.frontend; sed -n '1,70p' src/frontend/package.json; ls src/frontend | head; cd src/frontend && npm ci
cd src/frontend && PUPPETEER_SKIP_DOWNLOAD=1 npm ci
make run_cli host=127.0.0.1 port=7860 open_browser=false
cat <guest-path>; ls <guest-path>;
PATH=<guest-path> make run_cli host=127.0.0.1 port=7860 open_browser=false
curl -fsSL https://nodejs.org/dist/index.tab | head -25
sudo -n n 22.13.0; node --version;
NODE_OPTIONS=--max-old-space-size=4096 PATH=<guest-path> make run_cli host=127.0.0.1 port=7860 open_browser=false
find src/backend/base/langflow/frontend -maxdepth 2 -type f | head; ls src/frontend/build 2>/dev/null; rg -n 'list_flows|/api/v1/flows|GET.*flows' src/backend/base/langflow/api
PATH=<guest-path> LANGFLOW_AUTO_LOGIN=true uv run langflow run --host 127.0.0.1 --port 7860 --no-open-browser > /tmp/lf.log 2>&1 & echo $! > /tmp/lf.pid; for i in $(seq 1 90); do curl -sS http://127.0.0.1:7860/api/v1/flows/ > /tmp/flowresponse && break; sleep 2; done; cat /tmp/lf.log; head -c 1500 /tmp/flowresponse; kill $(cat /tmp/lf.pid) 2>/dev/null || true; pkill -f 'langflow run' || true
cat /tmp/lf.log 2>&1 | tail -80; cat /tmp/flowresponse 2>&1; ps aux | grep '[l]angflow'
mkdir -p .coldpass; cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["make","run_cli","host=127.0.0.1","port=7860","open_browser=false"],"cwd":"<guest-path>","env":{"PATH":"<guest-path>","NODE_OPTIONS":"--max-old-space-size=4096","PUPPETEER_SKIP_DOWNLOAD":"1"},"expected_returncode":2,"expected_text":"Killed"}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"Running the source checkout starts Langflow at its local web address.","source":"From a fresh directory, run:\n```shell\nuv pip install langflow -U\n```\nThe latest Langflow package is installed.\nFor more information, see [Install and run the Langflow OSS Python package](https://docs.langflow.org/get-started-installation#install-and-run-the-langflow-oss-python-package).\n\n#### Run\n\nOfficial release packages and tagged source archives disable automatic login by default. Set `LANGFLOW_SUPERUSER_PASSWORD` before starting Langflow, then sign in with the username `langflow` (or your configured `LANGFLOW_SUPERUSER`). Development branches retain automatic login by default. See [authentication configuration](https://docs.langflow.org/api-keys-and-authentication#start-a-langflow-server-with-authentication-enabled).\n\nTo start Langflow, run:\n```shell\nuv run langflow run\n```\n\nLangflow starts at http://127.0.0.1:7860.","input":"127.0.0.1:7860","expected":"Langflow starts at http://127.0.0.1:7860.","testable":false,"reason":"make run_cli installed dependencies but its frontend production build was killed by the guest memory limit; the CLI then failed because src/backend/base/langflow/frontend/index.html was not generated"}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"Run the source checkout using the documented Make target","source":"README.md > Other install options > Run from source","input":"host=127.0.0.1 port=7860 open_browser=false","expected":"Starts the application","argv":["make","run_cli","host=127.0.0.1","port=7860","open_browser=false"],"cwd":"<guest-path>","env":{"PATH":"<guest-path>","NODE_OPTIONS":"--max-old-space-size=4096","PUPPETEER_SKIP_DOWNLOAD":"1"},"expected_returncode":2,"expected_text":"Killed"}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"README and product entrypoints inspected: Langflow is an interactive workflow builder/server; no built-in product scheduler cycle is exposed for this documented source launch","checks":[]}
EOF

<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
python3 - <<'PY'
import json
p='.coldpass/claims.json'; d=json.load(open(p)); d[0]['source']='Langflow starts at http://127.0.0.1:7860.'; open(p,'w').write(json.dumps(d,indent=2))
PY
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
mkdir -p src/backend/base/langflow/frontend; cp -a src/frontend/build/. src/backend/base/langflow/frontend/ 2>/dev/null || true; ls src/backend/base/langflow/frontend/index.html;
find src/frontend/build -type f | head -20; df -h /tmp; free -h
NODE_OPTIONS=--max-old-space-size=3072 PATH=<guest-path> make run_cli host=127.0.0.1 port=7860 open_browser=false > /tmp/make.log 2>&1 & echo $! >/tmp/make.pid; for i in $(seq 1 180); do if curl -fsS http://127.0.0.1:7860/api/v1/flows/ >/tmp/flowresponse 2>/dev/null; then break; fi; sleep 2; done; tail -20 /tmp/make.log; head -c 500 /tmp/flowresponse 2>/dev/null; kill $(cat /tmp/make.pid) 2>/dev/null || true
mkdir -p .coldpass; python3 - <<'PY'
import json
p='.coldpass/probe.json'; x=json.load(open(p)); x['expected_text']='Killed'; open(p,'w').write(json.dumps(x,indent=2))
p='.coldpass/examples.json'; x=json.load(open(p)); x[0]['expected_text']='Killed'; open(p,'w').write(json.dumps(x,indent=2))
p='.coldpass/report.json'; json.dump({'outcome':'blocked','fault_owner':'prerequisite','operation':'make run_cli','operation_scope':'Source checkout install, frontend build, and application launch','steps':['Installed make, uv 0.13.5, Node.js 22.13.0 and npm 10.9.2.','Installed frontend dependencies with PUPPETEER_SKIP_DOWNLOAD=1 to honor the no-browser-download constraint.','Ran README source command make run_cli host=127.0.0.1 port=7860 open_browser=false.'],'deviations':['Frontend builds were killed during Vite rendering/gzip under guest memory constraints despite increasing Node heap.','Checker replay confirmed make run_cli exits 2 with Killed; app launch and useful API call could not proceed.'],'stuck_step':'Frontend production build in make run_cli','main_blocker':'The guest memory limit kills the frontend production build before index.html is generated.','plain_failure':'Langflow could not start because the required frontend bundle build is killed by the guest memory limit.','suggested_fix':'Run make run_cli on a guest with enough memory to complete the Vite production build.'},open(p,'w'),indent=2)
PY
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay