From f0892121a85d554ee98df99666a40e2970586393 Mon Sep 17 00:00:00 2001 From: "github-merge-queue[bot]" Date: Thu, 30 Oct 2025 21:41:39 +0000 Subject: [PATCH] deploy: c4e77ada454cac4259da2a357cc391cfbea248c8 --- 404.html | 2 +- agent-tutorial.html | 2 +- agents-tools.html | 2 +- agents.html | 2 +- api-build.html | 2 +- api-files.html | 2 +- api-flows-run.html | 2 +- api-flows.html | 2 +- api-keys-and-authentication.html | 2 +- api-logs.html | 2 +- api-monitor.html | 2 +- api-openai-responses.html | 2 +- api-projects.html | 2 +- api-reference-api-examples.html | 2 +- api-users.html | 2 +- api.html | 2 +- api/openapi.json.html | 2 +- api/openapi.yaml.html | 2 +- assets/js/3bfbe7c9.6b37443c.js | 1 - assets/js/3bfbe7c9.ee160c19.js | 1 + assets/js/4c09a7b3.1b93466d.js | 1 + assets/js/4c09a7b3.e67b8da5.js | 1 - assets/js/70909872.4826cc3c.js | 1 + assets/js/70909872.b871d080.js | 1 - assets/js/fe6d5b4f.107bf5c4.js | 1 + assets/js/fe6d5b4f.a266d6b4.js | 1 - ...runtime~main.dc9112dc.js => runtime~main.f495a36a.js} | 2 +- bundles-aiml.html | 2 +- bundles-amazon.html | 2 +- bundles-anthropic.html | 2 +- bundles-apify.html | 2 +- bundles-arxiv.html | 2 +- bundles-assemblyai.html | 2 +- bundles-azure.html | 2 +- bundles-baidu.html | 2 +- bundles-bing.html | 2 +- bundles-cassandra.html | 2 +- bundles-chroma.html | 2 +- bundles-cleanlab.html | 2 +- bundles-clickhouse.html | 2 +- bundles-cloudflare.html | 2 +- bundles-cohere.html | 2 +- bundles-composio.html | 2 +- bundles-couchbase.html | 2 +- bundles-datastax.html | 2 +- bundles-deepseek.html | 2 +- bundles-docling.html | 2 +- bundles-duckduckgo.html | 2 +- bundles-elastic.html | 2 +- bundles-exa.html | 2 +- bundles-faiss.html | 2 +- bundles-glean.html | 2 +- bundles-google.html | 2 +- bundles-groq.html | 2 +- bundles-huggingface.html | 2 +- bundles-ibm.html | 2 +- bundles-icosacomputing.html | 2 +- bundles-langchain.html | 2 +- bundles-lmstudio.html | 2 +- bundles-maritalk.html | 2 +- bundles-mem0.html | 2 +- bundles-milvus.html | 2 +- bundles-mistralai.html | 2 +- bundles-mongodb.html | 2 +- bundles-notion.html | 2 +- bundles-novita.html | 2 +- bundles-nvidia.html | 2 +- bundles-ollama.html | 2 +- bundles-openai.html | 2 +- bundles-openrouter.html | 2 +- bundles-perplexity.html | 2 +- bundles-pgvector.html | 2 +- bundles-pinecone.html | 2 +- bundles-qdrant.html | 2 +- bundles-redis.html | 2 +- bundles-sambanova.html | 2 +- bundles-searchapi.html | 2 +- bundles-serper.html | 2 +- bundles-supabase.html | 2 +- bundles-upstash.html | 2 +- bundles-vectara.html | 2 +- bundles-vertexai.html | 2 +- bundles-weaviate.html | 2 +- bundles-wikipedia.html | 2 +- bundles-xai.html | 2 +- chat-with-files.html | 2 +- chat-with-rag.html | 2 +- components-agents.html | 2 +- components-bundle-components.html | 2 +- components-custom-components.html | 2 +- components-data.html | 2 +- components-embedding-models.html | 2 +- components-helpers.html | 2 +- components-io.html | 2 +- components-logic.html | 2 +- components-models.html | 2 +- components-processing.html | 2 +- components-prompts.html | 2 +- components-tools.html | 2 +- concepts-components.html | 2 +- concepts-file-management.html | 2 +- concepts-flows-import.html | 2 +- concepts-flows.html | 2 +- concepts-overview.html | 2 +- concepts-playground.html | 2 +- concepts-publish.html | 2 +- concepts-voice-mode.html | 2 +- configuration-cli.html | 2 +- configuration-custom-database.html | 2 +- configuration-global-variables.html | 2 +- contributing-bundles.html | 2 +- contributing-community.html | 2 +- contributing-component-tests.html | 2 +- contributing-components.html | 2 +- contributing-github-issues.html | 2 +- contributing-how-to-contribute.html | 2 +- contributing-telemetry.html | 2 +- contributing-templates.html | 2 +- data-types.html | 2 +- deployment-architecture.html | 2 +- deployment-caddyfile.html | 2 +- deployment-docker.html | 4 +++- deployment-gcp.html | 2 +- deployment-hugging-face-spaces.html | 2 +- deployment-kubernetes-dev.html | 2 +- deployment-kubernetes-prod.html | 2 +- deployment-nginx-ssl.html | 2 +- deployment-overview.html | 2 +- deployment-prod-best-practices.html | 2 +- deployment-public-server.html | 2 +- deployment-railway.html | 2 +- deployment-render.html | 2 +- develop-application.html | 3 ++- enterprise-database-guide.html | 2 +- environment-variables.html | 2 +- get-started-installation.html | 2 +- get-started-quickstart.html | 2 +- index.html | 2 +- install-custom-dependencies.html | 2 +- integrations-arize.html | 2 +- integrations-instana-traceloop.html | 2 +- integrations-langfuse.html | 2 +- integrations-langsmith.html | 2 +- integrations-langwatch.html | 2 +- integrations-opik.html | 2 +- logging.html | 2 +- luna-for-langflow.html | 2 +- mcp-client.html | 6 ++---- mcp-component-astra.html | 9 +++++---- mcp-server.html | 2 +- mcp-tutorial.html | 2 +- memory.html | 2 +- release-notes.html | 2 +- search.html | 2 +- session-id.html | 2 +- sitemap.xml | 2 +- troubleshoot.html | 2 +- typescript-client.html | 2 +- webhook.html | 2 +- 159 files changed, 163 insertions(+), 161 deletions(-) delete mode 100644 assets/js/3bfbe7c9.6b37443c.js create mode 100644 assets/js/3bfbe7c9.ee160c19.js create mode 100644 assets/js/4c09a7b3.1b93466d.js delete mode 100644 assets/js/4c09a7b3.e67b8da5.js create mode 100644 assets/js/70909872.4826cc3c.js delete mode 100644 assets/js/70909872.b871d080.js create mode 100644 assets/js/fe6d5b4f.107bf5c4.js delete mode 100644 assets/js/fe6d5b4f.a266d6b4.js rename assets/js/{runtime~main.dc9112dc.js => runtime~main.f495a36a.js} (98%) diff --git a/404.html b/404.html index cb4e5fa672..60d5f04cfd 100644 --- a/404.html +++ b/404.html @@ -24,7 +24,7 @@ - + diff --git a/agent-tutorial.html b/agent-tutorial.html index d2b62a0ba8..32af375bf4 100644 --- a/agent-tutorial.html +++ b/agent-tutorial.html @@ -24,7 +24,7 @@ - + diff --git a/agents-tools.html b/agents-tools.html index d6c4f1f9f4..f90c3e60ba 100644 --- a/agents-tools.html +++ b/agents-tools.html @@ -24,7 +24,7 @@ - + diff --git a/agents.html b/agents.html index 4d6a1c2467..bd380503a2 100644 --- a/agents.html +++ b/agents.html @@ -24,7 +24,7 @@ - + diff --git a/api-build.html b/api-build.html index e1b4cdeae7..9750404fb6 100644 --- a/api-build.html +++ b/api-build.html @@ -24,7 +24,7 @@ - + diff --git a/api-files.html b/api-files.html index 379c5127d2..f7f6d506ac 100644 --- a/api-files.html +++ b/api-files.html @@ -24,7 +24,7 @@ - + diff --git a/api-flows-run.html b/api-flows-run.html index 9cd67412c7..c9f10ad2c9 100644 --- a/api-flows-run.html +++ b/api-flows-run.html @@ -24,7 +24,7 @@ - + diff --git a/api-flows.html b/api-flows.html index b29e85df72..b63888a492 100644 --- a/api-flows.html +++ b/api-flows.html @@ -24,7 +24,7 @@ - + diff --git a/api-keys-and-authentication.html b/api-keys-and-authentication.html index 6233dc93ed..2252b50aaa 100644 --- a/api-keys-and-authentication.html +++ b/api-keys-and-authentication.html @@ -24,7 +24,7 @@ - + diff --git a/api-logs.html b/api-logs.html index 3922798d77..811eeb3c33 100644 --- a/api-logs.html +++ b/api-logs.html @@ -24,7 +24,7 @@ - + diff --git a/api-monitor.html b/api-monitor.html index 6ad63520f9..9f6593f4b6 100644 --- a/api-monitor.html +++ b/api-monitor.html @@ -24,7 +24,7 @@ - + diff --git a/api-openai-responses.html b/api-openai-responses.html index aa81aa44ae..75aeddeec1 100644 --- a/api-openai-responses.html +++ b/api-openai-responses.html @@ -24,7 +24,7 @@ - + diff --git a/api-projects.html b/api-projects.html index fdc830f1b0..d6be8bb12d 100644 --- a/api-projects.html +++ b/api-projects.html @@ -24,7 +24,7 @@ - + diff --git a/api-reference-api-examples.html b/api-reference-api-examples.html index 6b6140b378..c90488b86d 100644 --- a/api-reference-api-examples.html +++ b/api-reference-api-examples.html @@ -24,7 +24,7 @@ - + diff --git a/api-users.html b/api-users.html index 49220c88f4..e3181e74b5 100644 --- a/api-users.html +++ b/api-users.html @@ -24,7 +24,7 @@ - + diff --git a/api.html b/api.html index bab0f91959..7e87eb18c6 100644 --- a/api.html +++ b/api.html @@ -24,7 +24,7 @@ - + diff --git a/api/openapi.json.html b/api/openapi.json.html index 64286d9122..ad62201882 100644 --- a/api/openapi.json.html +++ b/api/openapi.json.html @@ -24,7 +24,7 @@ - + diff --git a/api/openapi.yaml.html b/api/openapi.yaml.html index 0ba07d8261..ece067dc7b 100644 --- a/api/openapi.yaml.html +++ b/api/openapi.yaml.html @@ -24,7 +24,7 @@ - + diff --git a/assets/js/3bfbe7c9.6b37443c.js b/assets/js/3bfbe7c9.6b37443c.js deleted file mode 100644 index 516bdf9545..0000000000 --- a/assets/js/3bfbe7c9.6b37443c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7720],{8787:(e,o,n)=>{n.r(o),n.d(o,{CH:()=>p,assets:()=>d,chCodeConfig:()=>h,contentTitle:()=>a,default:()=>g,frontMatter:()=>c,metadata:()=>t,toc:()=>f});const t=JSON.parse('{"id":"Deployment/develop-application","title":"Containerize a Langflow application","description":"Designing flows in the visual editor is only the first step in building an application that uses Langflow.","source":"@site/docs/Deployment/develop-application.mdx","sourceDirName":"Deployment","slug":"/develop-application","permalink":"/develop-application","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Containerize a Langflow application","slug":"/develop-application"},"sidebar":"docs","previous":{"title":"Deploy Langflow with Nginx and SSL","permalink":"/deployment-nginx-ssl"},"next":{"title":"Langflow Docker images","permalink":"/deployment-docker"}}');var s=n(74848),r=n(28453),l=n(24754),i=n(40619);const c={title:"Containerize a Langflow application",slug:"/develop-application"},a=void 0,d={},p={annotations:l.hk,Code:l.Cy},h={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},f=[{value:"Directory structure",id:"directory-structure",level:2},{value:"Package management",id:"package-management",level:3},{value:"Environment variables",id:"docker-env",level:3},{value:"Secrets",id:"secrets",level:3},{value:"Storage",id:"storage",level:3},{value:"Flows",id:"flows",level:3},{value:"Components",id:"components",level:3},{value:"Langflow Dockerfile",id:"dockerfile",level:2},{value:"Backend-only mode",id:"backend-only-mode",level:3},{value:"Test your Langflow Docker image",id:"test-your-langflow-docker-image",level:2},{value:"Deploy to Docker Hub and Kubernetes",id:"deploy-docker",level:2}];function u(e){const o={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Details:n}=o;return p||y("CH",!1),p.Code||y("CH.Code",!0),n||y("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(o.p,{children:"Designing flows in the visual editor is only the first step in building an application that uses Langflow."}),"\n",(0,s.jsx)(o.p,{children:"Once you have a functional flow, you can use that flow in a larger application, such as a website or mobile app.\nBecause Langflow is both an IDE and a runtime, you can use Langflow to build and test your flows locally, and then package and serve your flows in a production environment."}),"\n",(0,s.jsx)(o.p,{children:"This guide introduces application development with Langflow from initial setup through packaging and deployment.\nThis documentation doesn't explain how to write a complete application; it only describes how to include Langflow in the context of a larger application."}),"\n",(0,s.jsx)(o.h2,{id:"directory-structure",children:"Directory structure"}),"\n",(0,s.jsx)(o.p,{children:"The following example describes the directory structure for a minimal Langflow application:"}),"\n",(0,s.jsx)(p.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"LANGFLOW-APPLICATION/",props:{}}]},{tokens:[{content:"\u251c\u2500\u2500 docker.env",props:{}}]},{tokens:[{content:"\u251c\u2500\u2500 Dockerfile",props:{}}]},{tokens:[{content:"\u251c\u2500\u2500 flows/",props:{}}]},{tokens:[{content:"\u2502 \u251c\u2500\u2500 flow1.json",props:{}}]},{tokens:[{content:"\u2502 \u2514\u2500\u2500 flow2.json",props:{}}]},{tokens:[{content:"\u251c\u2500\u2500 langflow-config-dir/",props:{}}]},{tokens:[{content:"\u251c\u2500\u2500 README.md",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(o.p,{children:"This directory contains the following:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.a,{href:"#docker-env",children:(0,s.jsx)(o.code,{children:"docker.env"})}),": This file is copied to the Docker image as a ",(0,s.jsx)(o.code,{children:".env"})," file in the container root."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.a,{href:"#dockerfile",children:(0,s.jsx)(o.code,{children:"Dockerfile"})}),": This file controls how your Langflow image is built."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.a,{href:"#flows",children:(0,s.jsx)(o.code,{children:"/flows"})}),": This folder holds the flows you want to host, which are the flows that your application uses."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:"/langflow-config-dir"}),": This folder is referenced in the Dockerfile as the location for your Langflow deployment's configuration files, database, and logs."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:"README.md"}),": This is a typical README file for your application's documentation."]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["This is a minimal example of a Langflow application directory.\nYour application might have additional files and folders, such as a ",(0,s.jsx)(o.code,{children:"/components"})," folder for custom components, or a ",(0,s.jsx)(o.code,{children:"pyproject.toml"})," file for additional dependencies."]}),"\n",(0,s.jsx)(o.h3,{id:"package-management",children:"Package management"}),"\n",(0,s.jsxs)(o.p,{children:["The base Langflow Docker image includes the Langflow core dependencies because it uses ",(0,s.jsx)(o.code,{children:"langflowai/langflow:latest"})," as the parent image."]}),"\n",(0,s.jsxs)(o.p,{children:["If your application requires additional dependencies, create a ",(0,s.jsx)(o.a,{href:"https://packaging.python.org/en/latest/guides/writing-pyproject-toml",children:(0,s.jsx)(o.code,{children:"pyproject.toml"})})," file for the additional dependencies.\nFor more information, see ",(0,s.jsx)(o.a,{href:"/install-custom-dependencies",children:"Install custom dependencies"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["To deploy an application with additional dependencies to Docker, you must copy the ",(0,s.jsx)(o.code,{children:"pyproject.toml"})," and ",(0,s.jsx)(o.code,{children:"uv.lock"})," files to the Docker image.\nTo do this, add the following to your Langflow application's Dockerfile:"]}),"\n",(0,s.jsx)(p.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"COPY pyproject.toml uv.lock /app/",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(o.h3,{id:"docker-env",children:"Environment variables"}),"\n",(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:"docker.env"})," file is a ",(0,s.jsx)(o.code,{children:".env"})," file loaded into your Docker image.\nIt contains ",(0,s.jsx)(o.a,{href:"/environment-variables",children:"Langflow environment variables"})," that are used in flows or control Langflow's behavior, such as authentication, database storage, API keys, and server configurations.\nFor example:"]}),"\n",(0,s.jsx)(p.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"LANGFLOW_AUTO_LOGIN=True",props:{}}]},{tokens:[{content:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True",props:{}}]},{tokens:[{content:"LANGFLOW_BASE_URL=http://0.0.0.0:7860",props:{}}]},{tokens:[{content:"OPENAI_API_KEY=sk-...",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsxs)(o.p,{children:["You can set environment variables in the Dockerfile as well.\nHowever, if you set an environment variable in both ",(0,s.jsx)(o.code,{children:"docker.env"})," and the Dockerfile, Langflow uses the value set in ",(0,s.jsx)(o.code,{children:"docker.env"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["Langflow can also ",(0,s.jsx)(o.a,{href:"/configuration-global-variables#add-custom-global-variables-from-the-environment",children:"create global variables from your environment variables"}),", or ",(0,s.jsx)(o.a,{href:"/configuration-global-variables#use-environment-variables-for-missing-global-variables",children:"use environment variables as a backup for missing global variables"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"secrets",children:"Secrets"}),"\n",(0,s.jsx)(o.p,{children:"For simplicity, the examples in the Langflow documentation might use direct references to API keys and other sensitive values.\nIn your own applications, you should always follow industry best practices for managing secrets, such as using environment variables or secret management tools."}),"\n",(0,s.jsxs)(o.p,{children:["For information about generating authentication keys and managing secrets in Langflow, see ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication",children:"API keys and authentication"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"storage",children:"Storage"}),"\n",(0,s.jsxs)(o.p,{children:["By default, Langflow uses an ",(0,s.jsx)(o.a,{href:"https://www.sqlite.org/",children:"SQLite"})," database for storage.\nIf you prefer to use PostgreSQL, see ",(0,s.jsx)(o.a,{href:"/configuration-custom-database",children:"Configure an external PostgreSQL database"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["For more information about storage, including cache and memory, see ",(0,s.jsx)(o.a,{href:"/memory",children:"Memory management options"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"flows",children:"Flows"}),"\n",(0,s.jsx)(o.p,{children:"Your local Langflow instance might have many flows for different applications.\nWhen you package Langflow as a dependency of an application, you only want to include the flows your application uses."}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.a,{href:"/concepts-flows-import",children:"Export flows"})," that are relevant to your application."]}),"\n",(0,s.jsxs)(o.p,{children:["If you have chained flows (flows that trigger other flows), make sure you export ",(0,s.jsx)(o.em,{children:"all"})," necessary flows."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Add the exported Langflow JSON files to the ",(0,s.jsx)(o.code,{children:"/flows"})," folder in your application directory."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(o.h3,{id:"components",children:"Components"}),"\n",(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(i.A,{name:"Component","aria-hidden":"true"})," ",(0,s.jsx)(o.strong,{children:"Core components"})," and ",(0,s.jsx)(i.A,{name:"Blocks","aria-hidden":"true"})," [",(0,s.jsx)(o.strong,{children:"Bundles"}),"] that you see in the Langflow visual editor are automatically included in the base Langflow Docker image."]}),"\n",(0,s.jsxs)(o.p,{children:["If you have any ",(0,s.jsx)(o.a,{href:"/components-custom-components",children:"custom components"})," that you created for your application, you must include these components in your application directory:"]}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["Create a ",(0,s.jsx)(o.code,{children:"/components"})," folder in your application directory."]}),"\n",(0,s.jsxs)(o.li,{children:["Add your custom component files to the ",(0,s.jsx)(o.code,{children:"/components"})," folder."]}),"\n",(0,s.jsxs)(o.li,{children:["Specify the path to ",(0,s.jsx)(o.code,{children:"/components"})," in your ",(0,s.jsx)(o.code,{children:"docker.env"}),"."]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"dockerfile",children:"Langflow Dockerfile"}),"\n",(0,s.jsx)(o.p,{children:"The Dockerfile determines how your Langflow image is built, including the dependencies, flows, components, and configuration files."}),"\n",(0,s.jsx)(o.p,{children:"At minimum, you need to specify the base Langflow image, create the necessary folders in the container, copy folders and files to the container, and provide a startup command."}),"\n",(0,s.jsx)(p.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Use the latest version of the base Langflow image",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"FROM",props:{style:{color:"#FF7B72"}}},{content:" langflowai/langflow:latest",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Create folders and set the working directory in the container",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" mkdir /app/flows",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" mkdir /app/langflow-config-dir",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"WORKDIR",props:{style:{color:"#FF7B72"}}},{content:" /app",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Copy flows, langflow-config-dir, and docker.env to the container",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" flows /app/flows",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" langflow-config-dir /app/langflow-config-dir",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" docker.env /app/.env",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Optional: Copy custom components to the container",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" components /app/components",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Optional: Use custom dependencies",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" pyproject.toml uv.lock /app/",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Set environment variables if not set in docker.env",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" PYTHONPATH=/app",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" LANGFLOW_LOAD_FLOWS_PATH=/app/flows",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" LANGFLOW_CONFIG_DIR=/app/langflow-config-dir",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" LANGFLOW_COMPONENTS_PATH=/app/components",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" LANGFLOW_LOG_ENV=container",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Command to run the Langflow server on port 7860",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"EXPOSE",props:{style:{color:"#FF7B72"}}},{content:" 7860",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"CMD",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}},{content:'"langflow"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"run"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"--backend-only"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"--env-file"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}},{content:'"/app/.env"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}},{content:'"--host"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"0.0.0.0"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"--port"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"7860"',props:{style:{color:"#A5D6FF"}}},{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"dockerfile"},annotations:[]}]}),"\n",(0,s.jsxs)(o.p,{children:["The environment variables set directly in this Dockerfile specify resource paths for Langflow.\nIf these variables are also set in ",(0,s.jsx)(o.code,{children:"docker.env"}),", the values in ",(0,s.jsx)(o.code,{children:"docker.env"})," override the values set in the Dockerfile."]}),"\n",(0,s.jsxs)(o.p,{children:["In this example, ",(0,s.jsx)(o.code,{children:"ENV LANGFLOW_LOG_ENV=container"})," sets the logging behavior for serialized JSON to ",(0,s.jsx)(o.code,{children:"stdout"})," to track the application's behavior in a containerized environment. For more information, see ",(0,s.jsx)(o.a,{href:"/logging",children:"Logging"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"backend-only-mode",children:"Backend-only mode"}),"\n",(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:"--backend-only"})," flag in ",(0,s.jsx)(o.code,{children:"CMD"})," starts Langflow in backend-only mode, which provides programmatic access only.\nThis is recommended when running Langflow as a dependency of an application where you don't need access to the visual editor."]}),"\n",(0,s.jsxs)(o.p,{children:["If you want to serve the Langflow visual editor ",(0,s.jsx)(o.em,{children:"and"})," backend, then omit ",(0,s.jsx)(o.code,{children:"--backend-only"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["For more information, see ",(0,s.jsx)(o.a,{href:"/deployment-docker",children:"Deploy Langflow on Docker"}),"."]}),"\n",(0,s.jsx)(o.h2,{id:"test-your-langflow-docker-image",children:"Test your Langflow Docker image"}),"\n",(0,s.jsx)(o.p,{children:"Build and run your Langflow Docker image to test it."}),"\n",(0,s.jsxs)(o.p,{children:["This example runs the container locally.\nFor information about publishing your image on Docker Hub and running a Langflow container remotely, see ",(0,s.jsx)(o.a,{href:"#deploy-docker",children:"Deploy to Docker Hub and Kubernetes"}),"."]}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Build the Docker image:"}),"\n",(0,s.jsx)(p.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"build ",props:{style:{color:"#A5D6FF"}}},{content:"-t ",props:{style:{color:"#79C0FF"}}},{content:"langflow-pokedex:",props:{style:{color:"#A5D6FF"}}},{content:"1.2.0 ",props:{style:{color:"#79C0FF"}}},{content:".",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Run the Docker container to start your Langflow server:"}),"\n",(0,s.jsx)(p.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 ",props:{style:{color:"#79C0FF"}}},{content:"langflow-pokedex:",props:{style:{color:"#A5D6FF"}}},{content:"1.2.0",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"To confirm that the container is serving your flows as expected, use the Langflow API to run a flow:"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Open one of the JSON files in your application's ",(0,s.jsx)(o.code,{children:"/flows"})," folder, and then find the flow's ",(0,s.jsx)(o.code,{children:"id"})," in the ",(0,s.jsx)(o.a,{href:"/concepts-flows-import#additional-metadata-and-project-information",children:"additional metadata and project information"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["There are many ",(0,s.jsx)(o.code,{children:"id"})," values; make sure you get the ID for the entire flow, not the ID for an individual component.\nIf your flow is complex, try searching for the flow's name, which is typically near the flow's ",(0,s.jsx)(o.code,{children:"id"}),"."]}),"\n",(0,s.jsx)(p.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'"name"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Basic Prompting"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:'"description"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Perform basic prompting with an OpenAI model."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:'"id"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"e4167236-938f-4aca-845b-21de3f399858"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Send a POST request to the ",(0,s.jsx)(o.a,{href:"/api-flows-run#run-flow",children:(0,s.jsx)(o.code,{children:"/v1/run/$FLOW_ID"})})," endpoint using the flow ID from the previous step ."]}),"\n",(0,s.jsxs)(o.p,{children:["The following example runs a simple LLM chat flow that responds to a chat input string.\nIf necessary, modify the payload for your flow.\nFor example, if your flow doesn't have a ",(0,s.jsx)(o.strong,{children:"Chat Input"})," component, you must modify the payload to provide the expected input for your flow."]}),"\n",(0,s.jsx)(p.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl ",props:{style:{color:"#FFA657"}}},{content:"--request ",props:{style:{color:"#79C0FF"}}},{content:"POST ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" --url ",props:{style:{color:"#79C0FF"}}},{content:"'http://localhost:7860/api/v1/run/e4167236-938f-4aca-845b-21de3f399858?stream=true' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" --header ",props:{style:{color:"#79C0FF"}}},{content:"'Content-Type: application/json' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" --data ",props:{style:{color:"#79C0FF"}}},{content:"'{",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "input_value": "Tell me about Charizard.",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "output_type": "chat",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "input_type": "chat",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "session_id": "charizard_test_request"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}'",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"About this example"}),(0,s.jsxs)(o.p,{children:["This command runs the ",(0,s.jsx)(o.strong,{children:"Pok\xe9dex"})," template flow.\nIt provides chat input about a specific Pok\xe9mon, uses an optional custom ",(0,s.jsx)(o.code,{children:"session_id"}),", and enables response streaming with ",(0,s.jsx)(o.code,{children:"?stream=true"}),"."]}),(0,s.jsxs)(o.p,{children:["The default ",(0,s.jsx)(o.a,{href:"/session-id",children:"session ID"})," is the flow ID.\nCustom session IDs can help isolate unique conversation threads to keep the LLM's context clean, and they can help identify specific conversations in flow logs to make debugging easier."]}),(0,s.jsxs)(o.p,{children:["This command uses response streaming because the Pok\xe9dex flow can return a large amount of text.\nTo use batching, set ",(0,s.jsx)(o.code,{children:"?stream=false"}),"."]})]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Verify that the request succeeds and the response is valid, depending on the specific flow you ran."}),"\n",(0,s.jsx)(o.p,{children:"This confirms that your Langflow Docker image is correctly configured and this flow is accessible through the Langflow API server that is hosted on the container.\nWhen you build and test your entire application stack, your front-end application can use Langflow API requests to trigger the flows served by your Langflow container in the same way you manually tested the flow in the previous step."}),"\n",(0,s.jsxs)(o.p,{children:["This example triggered a flow by sending chat input to the ",(0,s.jsx)(o.code,{children:"/v1/run/$FLOW_ID"})," endpoint.\nFor more examples of flow triggers, see ",(0,s.jsx)(o.a,{href:"/webhook",children:"Trigger flows with webhooks"})," and the tutorial to ",(0,s.jsx)(o.a,{href:"/chat-with-files",children:"Create a chatbot that can ingest files"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"deploy-docker",children:"Deploy to Docker Hub and Kubernetes"}),"\n",(0,s.jsx)(o.p,{children:"When you're ready to share your application with the world, you need to serve Langflow in a production environment.\nFor more information about deploying Langflow, see the following:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.a,{href:"/deployment-overview",children:"Learn about Langflow deployments"})}),"\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.a,{href:"/deployment-docker",children:"Deploy Langflow on Docker"})}),"\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.a,{href:"/deployment-kubernetes-prod",children:"Deploy the Langflow production environment on Kubernetes"})}),"\n"]})]})}function g(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}function y(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]); \ No newline at end of file diff --git a/assets/js/3bfbe7c9.ee160c19.js b/assets/js/3bfbe7c9.ee160c19.js new file mode 100644 index 0000000000..7707ed0e8e --- /dev/null +++ b/assets/js/3bfbe7c9.ee160c19.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7720],{8787:(e,o,n)=>{n.r(o),n.d(o,{CH:()=>h,assets:()=>p,chCodeConfig:()=>f,contentTitle:()=>d,default:()=>y,frontMatter:()=>a,metadata:()=>t,toc:()=>u});const t=JSON.parse('{"id":"Deployment/develop-application","title":"Containerize a Langflow application","description":"Designing flows in the visual editor is only the first step in building an application that uses Langflow.","source":"@site/docs/Deployment/develop-application.mdx","sourceDirName":"Deployment","slug":"/develop-application","permalink":"/develop-application","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Containerize a Langflow application","slug":"/develop-application"},"sidebar":"docs","previous":{"title":"Deploy Langflow with Nginx and SSL","permalink":"/deployment-nginx-ssl"},"next":{"title":"Langflow Docker images","permalink":"/deployment-docker"}}');var s=n(74848),r=n(28453),l=n(24754),i=n(40619),c=n(63905);const a={title:"Containerize a Langflow application",slug:"/develop-application"},d=void 0,p={},h={annotations:l.hk,Code:l.Cy},f={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},u=[...c.RM,{value:"Directory structure",id:"directory-structure",level:2},{value:"Package management",id:"package-management",level:3},{value:"Environment variables",id:"docker-env",level:3},{value:"Secrets",id:"secrets",level:3},{value:"Storage",id:"storage",level:3},{value:"Flows",id:"flows",level:3},{value:"Components",id:"components",level:3},{value:"Langflow Dockerfile",id:"dockerfile",level:2},{value:"Backend-only mode",id:"backend-only-mode",level:3},{value:"Test your Langflow Docker image",id:"test-your-langflow-docker-image",level:2},{value:"Deploy to Docker Hub and Kubernetes",id:"deploy-docker",level:2}];function g(e){const o={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Details:n}=o;return h||m("CH",!1),h.Code||m("CH.Code",!0),n||m("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(c.Ay,{}),"\n",(0,s.jsx)(o.p,{children:"Designing flows in the visual editor is only the first step in building an application that uses Langflow."}),"\n",(0,s.jsx)(o.p,{children:"Once you have a functional flow, you can use that flow in a larger application, such as a website or mobile app.\nBecause Langflow is both an IDE and a runtime, you can use Langflow to build and test your flows locally, and then package and serve your flows in a production environment."}),"\n",(0,s.jsx)(o.p,{children:"This guide introduces application development with Langflow from initial setup through packaging and deployment.\nThis documentation doesn't explain how to write a complete application; it only describes how to include Langflow in the context of a larger application."}),"\n",(0,s.jsx)(o.h2,{id:"directory-structure",children:"Directory structure"}),"\n",(0,s.jsx)(o.p,{children:"The following example describes the directory structure for a minimal Langflow application:"}),"\n",(0,s.jsx)(h.Code,{codeConfig:f,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"LANGFLOW-APPLICATION/",props:{}}]},{tokens:[{content:"\u251c\u2500\u2500 docker.env",props:{}}]},{tokens:[{content:"\u251c\u2500\u2500 Dockerfile",props:{}}]},{tokens:[{content:"\u251c\u2500\u2500 flows/",props:{}}]},{tokens:[{content:"\u2502 \u251c\u2500\u2500 flow1.json",props:{}}]},{tokens:[{content:"\u2502 \u2514\u2500\u2500 flow2.json",props:{}}]},{tokens:[{content:"\u251c\u2500\u2500 langflow-config-dir/",props:{}}]},{tokens:[{content:"\u251c\u2500\u2500 README.md",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(o.p,{children:"This directory contains the following:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.a,{href:"#docker-env",children:(0,s.jsx)(o.code,{children:"docker.env"})}),": This file is copied to the Docker image as a ",(0,s.jsx)(o.code,{children:".env"})," file in the container root."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.a,{href:"#dockerfile",children:(0,s.jsx)(o.code,{children:"Dockerfile"})}),": This file controls how your Langflow image is built."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.a,{href:"#flows",children:(0,s.jsx)(o.code,{children:"/flows"})}),": This folder holds the flows you want to host, which are the flows that your application uses."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:"/langflow-config-dir"}),": This folder is referenced in the Dockerfile as the location for your Langflow deployment's configuration files, database, and logs."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:"README.md"}),": This is a typical README file for your application's documentation."]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["This is a minimal example of a Langflow application directory.\nYour application might have additional files and folders, such as a ",(0,s.jsx)(o.code,{children:"/components"})," folder for custom components, or a ",(0,s.jsx)(o.code,{children:"pyproject.toml"})," file for additional dependencies."]}),"\n",(0,s.jsx)(o.h3,{id:"package-management",children:"Package management"}),"\n",(0,s.jsxs)(o.p,{children:["The base Langflow Docker image includes the Langflow core dependencies because it uses ",(0,s.jsx)(o.code,{children:"langflowai/langflow:latest"})," as the parent image."]}),"\n",(0,s.jsxs)(o.p,{children:["If your application requires additional dependencies, create a ",(0,s.jsx)(o.a,{href:"https://packaging.python.org/en/latest/guides/writing-pyproject-toml",children:(0,s.jsx)(o.code,{children:"pyproject.toml"})})," file for the additional dependencies.\nFor more information, see ",(0,s.jsx)(o.a,{href:"/install-custom-dependencies",children:"Install custom dependencies"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["To deploy an application with additional dependencies to Docker, you must copy the ",(0,s.jsx)(o.code,{children:"pyproject.toml"})," and ",(0,s.jsx)(o.code,{children:"uv.lock"})," files to the Docker image.\nTo do this, add the following to your Langflow application's Dockerfile:"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:f,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"COPY pyproject.toml uv.lock /app/",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(o.h3,{id:"docker-env",children:"Environment variables"}),"\n",(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:"docker.env"})," file is a ",(0,s.jsx)(o.code,{children:".env"})," file loaded into your Docker image.\nIt contains ",(0,s.jsx)(o.a,{href:"/environment-variables",children:"Langflow environment variables"})," that are used in flows or control Langflow's behavior, such as authentication, database storage, API keys, and server configurations.\nFor example:"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:f,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"LANGFLOW_AUTO_LOGIN=True",props:{}}]},{tokens:[{content:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True",props:{}}]},{tokens:[{content:"LANGFLOW_BASE_URL=http://0.0.0.0:7860",props:{}}]},{tokens:[{content:"OPENAI_API_KEY=sk-...",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsxs)(o.p,{children:["You can set environment variables in the Dockerfile as well.\nHowever, if you set an environment variable in both ",(0,s.jsx)(o.code,{children:"docker.env"})," and the Dockerfile, Langflow uses the value set in ",(0,s.jsx)(o.code,{children:"docker.env"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["Langflow can also ",(0,s.jsx)(o.a,{href:"/configuration-global-variables#add-custom-global-variables-from-the-environment",children:"create global variables from your environment variables"}),", or ",(0,s.jsx)(o.a,{href:"/configuration-global-variables#use-environment-variables-for-missing-global-variables",children:"use environment variables as a backup for missing global variables"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"secrets",children:"Secrets"}),"\n",(0,s.jsx)(o.p,{children:"For simplicity, the examples in the Langflow documentation might use direct references to API keys and other sensitive values.\nIn your own applications, you should always follow industry best practices for managing secrets, such as using environment variables or secret management tools."}),"\n",(0,s.jsxs)(o.p,{children:["For information about generating authentication keys and managing secrets in Langflow, see ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication",children:"API keys and authentication"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"storage",children:"Storage"}),"\n",(0,s.jsxs)(o.p,{children:["By default, Langflow uses an ",(0,s.jsx)(o.a,{href:"https://www.sqlite.org/",children:"SQLite"})," database for storage.\nIf you prefer to use PostgreSQL, see ",(0,s.jsx)(o.a,{href:"/configuration-custom-database",children:"Configure an external PostgreSQL database"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["For more information about storage, including cache and memory, see ",(0,s.jsx)(o.a,{href:"/memory",children:"Memory management options"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"flows",children:"Flows"}),"\n",(0,s.jsx)(o.p,{children:"Your local Langflow instance might have many flows for different applications.\nWhen you package Langflow as a dependency of an application, you only want to include the flows your application uses."}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.a,{href:"/concepts-flows-import",children:"Export flows"})," that are relevant to your application."]}),"\n",(0,s.jsxs)(o.p,{children:["If you have chained flows (flows that trigger other flows), make sure you export ",(0,s.jsx)(o.em,{children:"all"})," necessary flows."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Add the exported Langflow JSON files to the ",(0,s.jsx)(o.code,{children:"/flows"})," folder in your application directory."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(o.h3,{id:"components",children:"Components"}),"\n",(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(i.A,{name:"Component","aria-hidden":"true"})," ",(0,s.jsx)(o.strong,{children:"Core components"})," and ",(0,s.jsx)(i.A,{name:"Blocks","aria-hidden":"true"})," [",(0,s.jsx)(o.strong,{children:"Bundles"}),"] that you see in the Langflow visual editor are automatically included in the base Langflow Docker image."]}),"\n",(0,s.jsxs)(o.p,{children:["If you have any ",(0,s.jsx)(o.a,{href:"/components-custom-components",children:"custom components"})," that you created for your application, you must include these components in your application directory:"]}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["Create a ",(0,s.jsx)(o.code,{children:"/components"})," folder in your application directory."]}),"\n",(0,s.jsxs)(o.li,{children:["Add your custom component files to the ",(0,s.jsx)(o.code,{children:"/components"})," folder."]}),"\n",(0,s.jsxs)(o.li,{children:["Specify the path to ",(0,s.jsx)(o.code,{children:"/components"})," in your ",(0,s.jsx)(o.code,{children:"docker.env"}),"."]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"dockerfile",children:"Langflow Dockerfile"}),"\n",(0,s.jsx)(o.p,{children:"The Dockerfile determines how your Langflow image is built, including the dependencies, flows, components, and configuration files."}),"\n",(0,s.jsx)(o.p,{children:"At minimum, you need to specify the base Langflow image, create the necessary folders in the container, copy folders and files to the container, and provide a startup command."}),"\n",(0,s.jsx)(h.Code,{codeConfig:f,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Use the latest version of the base Langflow image",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"FROM",props:{style:{color:"#FF7B72"}}},{content:" langflowai/langflow:latest",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Create folders and set the working directory in the container",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" mkdir /app/flows",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" mkdir /app/langflow-config-dir",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"WORKDIR",props:{style:{color:"#FF7B72"}}},{content:" /app",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Copy flows, langflow-config-dir, and docker.env to the container",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" flows /app/flows",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" langflow-config-dir /app/langflow-config-dir",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" docker.env /app/.env",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Optional: Copy custom components to the container",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" components /app/components",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Optional: Use custom dependencies",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" pyproject.toml uv.lock /app/",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Set environment variables if not set in docker.env",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" PYTHONPATH=/app",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" LANGFLOW_LOAD_FLOWS_PATH=/app/flows",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" LANGFLOW_CONFIG_DIR=/app/langflow-config-dir",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" LANGFLOW_COMPONENTS_PATH=/app/components",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" LANGFLOW_LOG_ENV=container",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Command to run the Langflow server on port 7860",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"EXPOSE",props:{style:{color:"#FF7B72"}}},{content:" 7860",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"CMD",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}},{content:'"langflow"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"run"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"--backend-only"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"--env-file"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}},{content:'"/app/.env"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}},{content:'"--host"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"0.0.0.0"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"--port"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"7860"',props:{style:{color:"#A5D6FF"}}},{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"dockerfile"},annotations:[]}]}),"\n",(0,s.jsxs)(o.p,{children:["The environment variables set directly in this Dockerfile specify resource paths for Langflow.\nIf these variables are also set in ",(0,s.jsx)(o.code,{children:"docker.env"}),", the values in ",(0,s.jsx)(o.code,{children:"docker.env"})," override the values set in the Dockerfile."]}),"\n",(0,s.jsxs)(o.p,{children:["In this example, ",(0,s.jsx)(o.code,{children:"ENV LANGFLOW_LOG_ENV=container"})," sets the logging behavior for serialized JSON to ",(0,s.jsx)(o.code,{children:"stdout"})," to track the application's behavior in a containerized environment. For more information, see ",(0,s.jsx)(o.a,{href:"/logging",children:"Logging"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"backend-only-mode",children:"Backend-only mode"}),"\n",(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:"--backend-only"})," flag in ",(0,s.jsx)(o.code,{children:"CMD"})," starts Langflow in backend-only mode, which provides programmatic access only.\nThis is recommended when running Langflow as a dependency of an application where you don't need access to the visual editor."]}),"\n",(0,s.jsxs)(o.p,{children:["If you want to serve the Langflow visual editor ",(0,s.jsx)(o.em,{children:"and"})," backend, then omit ",(0,s.jsx)(o.code,{children:"--backend-only"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["For more information, see ",(0,s.jsx)(o.a,{href:"/deployment-docker",children:"Deploy Langflow on Docker"}),"."]}),"\n",(0,s.jsx)(o.h2,{id:"test-your-langflow-docker-image",children:"Test your Langflow Docker image"}),"\n",(0,s.jsx)(o.p,{children:"Build and run your Langflow Docker image to test it."}),"\n",(0,s.jsxs)(o.p,{children:["This example runs the container locally.\nFor information about publishing your image on Docker Hub and running a Langflow container remotely, see ",(0,s.jsx)(o.a,{href:"#deploy-docker",children:"Deploy to Docker Hub and Kubernetes"}),"."]}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Build the Docker image:"}),"\n",(0,s.jsx)(h.Code,{codeConfig:f,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"build ",props:{style:{color:"#A5D6FF"}}},{content:"-t ",props:{style:{color:"#79C0FF"}}},{content:"langflow-pokedex:",props:{style:{color:"#A5D6FF"}}},{content:"1.2.0 ",props:{style:{color:"#79C0FF"}}},{content:".",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Run the Docker container to start your Langflow server:"}),"\n",(0,s.jsx)(h.Code,{codeConfig:f,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 ",props:{style:{color:"#79C0FF"}}},{content:"langflow-pokedex:",props:{style:{color:"#A5D6FF"}}},{content:"1.2.0",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"To confirm that the container is serving your flows as expected, use the Langflow API to run a flow:"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Open one of the JSON files in your application's ",(0,s.jsx)(o.code,{children:"/flows"})," folder, and then find the flow's ",(0,s.jsx)(o.code,{children:"id"})," in the ",(0,s.jsx)(o.a,{href:"/concepts-flows-import#additional-metadata-and-project-information",children:"additional metadata and project information"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["There are many ",(0,s.jsx)(o.code,{children:"id"})," values; make sure you get the ID for the entire flow, not the ID for an individual component.\nIf your flow is complex, try searching for the flow's name, which is typically near the flow's ",(0,s.jsx)(o.code,{children:"id"}),"."]}),"\n",(0,s.jsx)(h.Code,{codeConfig:f,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'"name"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Basic Prompting"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:'"description"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Perform basic prompting with an OpenAI model."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:'"id"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"e4167236-938f-4aca-845b-21de3f399858"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Send a POST request to the ",(0,s.jsx)(o.a,{href:"/api-flows-run#run-flow",children:(0,s.jsx)(o.code,{children:"/v1/run/$FLOW_ID"})})," endpoint using the flow ID from the previous step ."]}),"\n",(0,s.jsxs)(o.p,{children:["The following example runs a simple LLM chat flow that responds to a chat input string.\nIf necessary, modify the payload for your flow.\nFor example, if your flow doesn't have a ",(0,s.jsx)(o.strong,{children:"Chat Input"})," component, you must modify the payload to provide the expected input for your flow."]}),"\n",(0,s.jsx)(h.Code,{codeConfig:f,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl ",props:{style:{color:"#FFA657"}}},{content:"--request ",props:{style:{color:"#79C0FF"}}},{content:"POST ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" --url ",props:{style:{color:"#79C0FF"}}},{content:"'http://localhost:7860/api/v1/run/e4167236-938f-4aca-845b-21de3f399858?stream=true' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" --header ",props:{style:{color:"#79C0FF"}}},{content:"'Content-Type: application/json' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" --data ",props:{style:{color:"#79C0FF"}}},{content:"'{",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "input_value": "Tell me about Charizard.",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "output_type": "chat",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "input_type": "chat",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "session_id": "charizard_test_request"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}'",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"About this example"}),(0,s.jsxs)(o.p,{children:["This command runs the ",(0,s.jsx)(o.strong,{children:"Pok\xe9dex"})," template flow.\nIt provides chat input about a specific Pok\xe9mon, uses an optional custom ",(0,s.jsx)(o.code,{children:"session_id"}),", and enables response streaming with ",(0,s.jsx)(o.code,{children:"?stream=true"}),"."]}),(0,s.jsxs)(o.p,{children:["The default ",(0,s.jsx)(o.a,{href:"/session-id",children:"session ID"})," is the flow ID.\nCustom session IDs can help isolate unique conversation threads to keep the LLM's context clean, and they can help identify specific conversations in flow logs to make debugging easier."]}),(0,s.jsxs)(o.p,{children:["This command uses response streaming because the Pok\xe9dex flow can return a large amount of text.\nTo use batching, set ",(0,s.jsx)(o.code,{children:"?stream=false"}),"."]})]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Verify that the request succeeds and the response is valid, depending on the specific flow you ran."}),"\n",(0,s.jsx)(o.p,{children:"This confirms that your Langflow Docker image is correctly configured and this flow is accessible through the Langflow API server that is hosted on the container.\nWhen you build and test your entire application stack, your front-end application can use Langflow API requests to trigger the flows served by your Langflow container in the same way you manually tested the flow in the previous step."}),"\n",(0,s.jsxs)(o.p,{children:["This example triggered a flow by sending chat input to the ",(0,s.jsx)(o.code,{children:"/v1/run/$FLOW_ID"})," endpoint.\nFor more examples of flow triggers, see ",(0,s.jsx)(o.a,{href:"/webhook",children:"Trigger flows with webhooks"})," and the tutorial to ",(0,s.jsx)(o.a,{href:"/chat-with-files",children:"Create a chatbot that can ingest files"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"deploy-docker",children:"Deploy to Docker Hub and Kubernetes"}),"\n",(0,s.jsx)(o.p,{children:"When you're ready to share your application with the world, you need to serve Langflow in a production environment.\nFor more information about deploying Langflow, see the following:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.a,{href:"/deployment-overview",children:"Learn about Langflow deployments"})}),"\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.a,{href:"/deployment-docker",children:"Deploy Langflow on Docker"})}),"\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.a,{href:"/deployment-kubernetes-prod",children:"Deploy the Langflow production environment on Kubernetes"})}),"\n"]})]})}function y(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(g,{...e})}):g(e)}function m(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},63905:(e,o,n)=>{n.d(o,{Ay:()=>i,RM:()=>r});var t=n(74848),s=n(28453);const r=[];function l(e){const o={a:"a",admonition:"admonition",p:"p",...(0,s.R)(),...e.components};return(0,t.jsx)(o.admonition,{type:"tip",children:(0,t.jsxs)(o.p,{children:["Podman can be used instead of Docker for all commands shown here. For more information, see the ",(0,t.jsx)(o.a,{href:"https://podman.io/docs",children:"Podman documentation"}),"."]})})}function i(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}}}]); \ No newline at end of file diff --git a/assets/js/4c09a7b3.1b93466d.js b/assets/js/4c09a7b3.1b93466d.js new file mode 100644 index 0000000000..3666534143 --- /dev/null +++ b/assets/js/4c09a7b3.1b93466d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7512],{45794:(o,e,t)=>{t.r(e),t.d(e,{CH:()=>d,assets:()=>p,chCodeConfig:()=>h,contentTitle:()=>a,default:()=>f,frontMatter:()=>i,metadata:()=>n,toc:()=>y});const n=JSON.parse('{"id":"Deployment/deployment-docker","title":"Deploy Langflow on Docker","description":"Running applications in Docker containers ensures consistent behavior across different systems and eliminates dependency conflicts.","source":"@site/docs/Deployment/deployment-docker.mdx","sourceDirName":"Deployment","slug":"/deployment-docker","permalink":"/deployment-docker","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Deploy Langflow on Docker","slug":"/deployment-docker"},"sidebar":"docs","previous":{"title":"Containerize a Langflow application","permalink":"/develop-application"},"next":{"title":"Deploy Langflow on a remote server","permalink":"/deployment-caddyfile"}}');var s=t(74848),r=t(28453),c=t(24754),l=t(63905);const i={title:"Deploy Langflow on Docker",slug:"/deployment-docker"},a=void 0,p={},d={annotations:c.hk,Code:c.Cy},h={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},y=[...l.RM,{value:"Quickstart: Start a Langflow container with default values",id:"quickstart",level:2},{value:"Clone the repo and run the Langflow Docker container",id:"clone",level:2},{value:"Customize your deployment",id:"customize-your-deployment",level:3},{value:"Package your flow as a Docker image",id:"package-your-flow-as-a-docker-image",level:2},{value:"Customize the Langflow Docker image with your own code",id:"customize-the-langflow-docker-image",level:2}];function u(o){const e={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...o.components};return d||g("CH",!1),d.Code||g("CH.Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(l.Ay,{}),"\n",(0,s.jsx)(e.p,{children:"Running applications in Docker containers ensures consistent behavior across different systems and eliminates dependency conflicts."}),"\n",(0,s.jsx)(e.p,{children:"You can use the Langflow Docker image to start a Langflow container."}),"\n",(0,s.jsxs)(e.p,{children:["This guide demonstrates several ways to deploy Langflow with ",(0,s.jsx)(e.a,{href:"https://docs.docker.com/",children:"Docker"})," and ",(0,s.jsx)(e.a,{href:"https://docs.docker.com/compose/",children:"Docker Compose"}),":"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.a,{href:"#quickstart",children:"Quickstart"}),": Start a Langflow container with default values."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.a,{href:"#clone",children:"Use Docker Compose"}),": Clone the Langflow repo, and then use Docker Compose to build the Langflow Docker container.\nThis option provides more control over the configuration, including a persistent PostgreSQL database service, while still using the base Langflow Docker image."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.a,{href:"#package-your-flow-as-a-docker-image",children:"Create a custom flow image"}),": Use a Dockerfile to package a flow as a Docker image."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.a,{href:"#customize-the-langflow-docker-image",children:"Create a custom Langflow image"}),": Use a Dockerfile to package a custom Langflow Docker image that includes your own code, custom dependencies, or other modifications."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"quickstart",children:"Quickstart: Start a Langflow container with default values"}),"\n",(0,s.jsx)(e.p,{children:"With Docker installed and running on your system, run the following command:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 ",props:{style:{color:"#79C0FF"}}},{content:"langflowai/langflow:latest",props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,s.jsxs)(e.p,{children:["Then, access Langflow at ",(0,s.jsx)(e.code,{children:"http://localhost:7860/"}),"."]}),"\n",(0,s.jsxs)(e.p,{children:["This container runs a pre-built Docker image with default settings.\nFor more control over the configuration, see ",(0,s.jsx)(e.a,{href:"#clone",children:"Clone the repo and run the Langflow Docker container"}),"."]}),"\n",(0,s.jsx)(e.h2,{id:"clone",children:"Clone the repo and run the Langflow Docker container"}),"\n",(0,s.jsx)(e.p,{children:"Cloning the Langflow repository and using Docker Compose gives you more control over your configuration, allowing you to customize environment variables, use a persistent PostgreSQL database service (instead of the default SQLite database), and include custom dependencies."}),"\n",(0,s.jsx)(e.p,{children:"The default deployment with Docker Compose includes the following:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Langflow service"}),": Runs the latest Langflow image with PostgreSQL as the database."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"PostgreSQL service"}),": Provides persistent data storage for flows, users, and settings."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Persistent volumes"}),": Ensures your data survives container restarts."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["The complete Docker Compose configuration is available in ",(0,s.jsx)(e.code,{children:"docker_example/docker-compose.yml"}),"."]}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Clone the Langflow repository:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"git ",props:{style:{color:"#FFA657"}}},{content:"clone https://github.com/langflow-ai/langflow.git",props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Navigate to the ",(0,s.jsx)(e.code,{children:"docker_example"})," directory:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"cd ",props:{style:{color:"#79C0FF"}}},{content:"langflow/docker_example",props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Run the Docker Compose file:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"compose up",props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Access Langflow at ",(0,s.jsx)(e.code,{children:"http://localhost:7860/"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"customize-your-deployment",children:"Customize your deployment"}),"\n",(0,s.jsx)(e.p,{children:"You can customize the Docker Compose configuration to fit your specific deployment."}),"\n",(0,s.jsxs)(e.p,{children:["For example, to configure the container's database credentials using a ",(0,s.jsx)(e.code,{children:".env"})," file, do the following:"]}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Create a ",(0,s.jsx)(e.code,{children:".env"})," file with your database credentials in the same directory as ",(0,s.jsx)(e.code,{children:"docker-compose.yml"}),":"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Database credentials",props:{}}]},{tokens:[{content:"POSTGRES_USER=myuser",props:{}}]},{tokens:[{content:"POSTGRES_PASSWORD=mypassword",props:{}}]},{tokens:[{content:"POSTGRES_DB=langflow",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"# Langflow configuration",props:{}}]},{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://myuser:mypassword@postgres:5432/langflow",props:{}}]},{tokens:[{content:"LANGFLOW_CONFIG_DIR=/app/langflow",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Modify the ",(0,s.jsx)(e.code,{children:"docker-compose.yml"})," file to reference the ",(0,s.jsx)(e.code,{children:".env"})," file for both the ",(0,s.jsx)(e.code,{children:"langflow"})," and ",(0,s.jsx)(e.code,{children:"postgres"})," services:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"services",props:{style:{color:"#7EE787"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" langflow",props:{style:{color:"#7EE787"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" environment",props:{style:{color:"#7EE787"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" - ",props:{style:{color:"#C9D1D9"}}},{content:"LANGFLOW_DATABASE_URL=${LANGFLOW_DATABASE_URL}",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" - ",props:{style:{color:"#C9D1D9"}}},{content:"LANGFLOW_CONFIG_DIR=${LANGFLOW_CONFIG_DIR}",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" postgres",props:{style:{color:"#7EE787"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" environment",props:{style:{color:"#7EE787"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" - ",props:{style:{color:"#C9D1D9"}}},{content:"POSTGRES_USER=${POSTGRES_USER}",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" - ",props:{style:{color:"#C9D1D9"}}},{content:"POSTGRES_PASSWORD=${POSTGRES_PASSWORD}",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" - ",props:{style:{color:"#C9D1D9"}}},{content:"POSTGRES_DB=${POSTGRES_DB}",props:{style:{color:"#A5D6FF"}}}]}],lang:"yaml"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["For a complete list of available environment variables, see ",(0,s.jsx)(e.a,{href:"/environment-variables",children:"Langflow environment variables"}),"."]}),"\n",(0,s.jsxs)(e.p,{children:["For more customization options, see ",(0,s.jsx)(e.a,{href:"#customize-the-langflow-docker-image",children:"Customize the Langflow Docker image with your own code"}),"."]}),"\n",(0,s.jsx)(e.h2,{id:"package-your-flow-as-a-docker-image",children:"Package your flow as a Docker image"}),"\n",(0,s.jsx)(e.p,{children:"This section shows you how to create a Dockerfile that builds a Docker image containing your Langflow flow. This approach is useful when you want to distribute a specific flow as a standalone container or deploy it to environments like Kubernetes."}),"\n",(0,s.jsx)(e.p,{children:"Unlike the previous sections that use pre-built images, this method builds a custom image with your flow embedded inside it."}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Create a project directory, and change directory into it."}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"mkdir ",props:{style:{color:"#FFA657"}}},{content:"langflow-custom",props:{style:{color:"#A5D6FF"}}},{content:" && ",props:{style:{color:"#C9D1D9"}}},{content:"cd ",props:{style:{color:"#79C0FF"}}},{content:"langflow-custom",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Add your flow's JSON file to the directory. You can download an example, or use your own:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Download an example flow",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"wget ",props:{style:{color:"#FFA657"}}},{content:"https://raw.githubusercontent.com/langflow-ai/langflow-helm-charts/refs/heads/main/examples/flows/basic-prompting-hello-world.json",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Or copy your own flow file",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"cp ",props:{style:{color:"#FFA657"}}},{content:"/path/to/your/flow.json .",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Create a Dockerfile to build your custom image:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"FROM",props:{style:{color:"#FF7B72"}}},{content:" langflowai/langflow:latest",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" mkdir /app/flows",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" ./*.json /app/flows/",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" LANGFLOW_LOAD_FLOWS_PATH=/app/flows",props:{style:{color:"#C9D1D9"}}}]}],lang:"dockerfile"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"This Dockerfile uses the official Langflow image as the base, creates a directory for your flows, copies your JSON flow files into the directory, and sets the environment variable to tell Langflow where to find the flows."}),"\n",(0,s.jsxs)(e.ol,{start:"4",children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Build and test your custom image:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"build ",props:{style:{color:"#A5D6FF"}}},{content:"-t ",props:{style:{color:"#79C0FF"}}},{content:"myuser/langflow-custom:",props:{style:{color:"#A5D6FF"}}},{content:"1.0.0 ",props:{style:{color:"#79C0FF"}}},{content:".",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 ",props:{style:{color:"#79C0FF"}}},{content:"myuser/langflow-custom:",props:{style:{color:"#A5D6FF"}}},{content:"1.0.0",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Push your image to Docker Hub (optional):"}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"push myuser/langflow-custom:",props:{style:{color:"#A5D6FF"}}},{content:"1.0.0",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["Your custom image now contains your flow and can be deployed anywhere Docker runs. For Kubernetes deployment, see ",(0,s.jsx)(e.a,{href:"/deployment-kubernetes-prod",children:"Deploy the Langflow production environment on Kubernetes"}),"."]}),"\n",(0,s.jsx)(e.h2,{id:"customize-the-langflow-docker-image",children:"Customize the Langflow Docker image with your own code"}),"\n",(0,s.jsx)(e.p,{children:"While the previous section showed how to package a flow with a Docker image, this section shows how to customize the Langflow application itself. This is useful when you need to add custom Python packages or dependencies, modify Langflow's configuration or settings, include custom components or tools, or add your own code to extend Langflow's functionality."}),"\n",(0,s.jsxs)(e.p,{children:["This example demonstrates how to customize the ",(0,s.jsx)(e.strong,{children:"Message History"})," component, but the same approach can be used for any code modifications."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"FROM",props:{style:{color:"#FF7B72"}}},{content:" langflowai/langflow:latest",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Set working directory",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"WORKDIR",props:{style:{color:"#FF7B72"}}},{content:" /app",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Copy your modified memory component",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" src/backend/base/langflow/components/helpers/memory.py /tmp/memory.py",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Find the site-packages directory where langflow is installed",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" python -c ",props:{style:{color:"#C9D1D9"}}},{content:'"import site; print(site.getsitepackages()[0])"',props:{style:{color:"#A5D6FF"}}},{content:" > /tmp/site_packages.txt",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Replace the file in the site-packages location",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" SITE_PACKAGES=$(cat /tmp/site_packages.txt) && \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" echo ",props:{style:{color:"#C9D1D9"}}},{content:'"Site packages at: $SITE_PACKAGES"',props:{style:{color:"#A5D6FF"}}},{content:" && \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" mkdir -p ",props:{style:{color:"#C9D1D9"}}},{content:'"$SITE_PACKAGES/langflow/components/helpers"',props:{style:{color:"#A5D6FF"}}},{content:" && \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" cp /tmp/memory.py ",props:{style:{color:"#C9D1D9"}}},{content:'"$SITE_PACKAGES/langflow/components/helpers/"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Clear Python cache in the site-packages directory only",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" SITE_PACKAGES=$(cat /tmp/site_packages.txt) && \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" find ",props:{style:{color:"#C9D1D9"}}},{content:'"$SITE_PACKAGES"',props:{style:{color:"#A5D6FF"}}},{content:" -name ",props:{style:{color:"#C9D1D9"}}},{content:'"*.pyc"',props:{style:{color:"#A5D6FF"}}},{content:" -delete && \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" find ",props:{style:{color:"#C9D1D9"}}},{content:'"$SITE_PACKAGES"',props:{style:{color:"#A5D6FF"}}},{content:" -name ",props:{style:{color:"#C9D1D9"}}},{content:'"__pycache__"',props:{style:{color:"#A5D6FF"}}},{content:" -type d -exec rm -rf {} +",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Expose the default Langflow port",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"EXPOSE",props:{style:{color:"#FF7B72"}}},{content:" 7860",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Command to run Langflow",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"CMD",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}},{content:'"python"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"-m"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"langflow"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"run"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"--host"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"0.0.0.0"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"--port"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"7860"',props:{style:{color:"#A5D6FF"}}},{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"dockerfile"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"To use this custom Dockerfile, do the following:"}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Create a directory for your custom Langflow setup:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"mkdir ",props:{style:{color:"#FFA657"}}},{content:"langflow-custom",props:{style:{color:"#A5D6FF"}}},{content:" && ",props:{style:{color:"#C9D1D9"}}},{content:"cd ",props:{style:{color:"#79C0FF"}}},{content:"langflow-custom",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Create the necessary directory structure for your custom code.\nIn this example, Langflow expects ",(0,s.jsx)(e.code,{children:"memory.py"})," to exist in the ",(0,s.jsx)(e.code,{children:"/helpers"})," directory, so you create a directory in that location."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"mkdir ",props:{style:{color:"#FFA657"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"src/backend/base/langflow/components/helpers",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Place your modified ",(0,s.jsx)(e.code,{children:"memory.py"})," file in the ",(0,s.jsx)(e.code,{children:"/helpers"})," directory."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Create a new file named ",(0,s.jsx)(e.code,{children:"Dockerfile"})," in your ",(0,s.jsx)(e.code,{children:"langflow-custom"})," directory, and then copy the Dockerfile contents shown above into it."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Build and run the image:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"build ",props:{style:{color:"#A5D6FF"}}},{content:"-t ",props:{style:{color:"#79C0FF"}}},{content:"myuser/langflow-custom:",props:{style:{color:"#A5D6FF"}}},{content:"1.0.0 ",props:{style:{color:"#79C0FF"}}},{content:".",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 ",props:{style:{color:"#79C0FF"}}},{content:"myuser/langflow-custom:",props:{style:{color:"#A5D6FF"}}},{content:"1.0.0",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"This approach can be adapted for any other components or custom code you want to add to Langflow by modifying the file paths and component names."})]})}function f(o={}){const{wrapper:e}={...(0,r.R)(),...o.components};return e?(0,s.jsx)(e,{...o,children:(0,s.jsx)(u,{...o})}):u(o)}function g(o,e){throw new Error("Expected "+(e?"component":"object")+" `"+o+"` to be defined: you likely forgot to import, pass, or provide it.")}},63905:(o,e,t)=>{t.d(e,{Ay:()=>l,RM:()=>r});var n=t(74848),s=t(28453);const r=[];function c(o){const e={a:"a",admonition:"admonition",p:"p",...(0,s.R)(),...o.components};return(0,n.jsx)(e.admonition,{type:"tip",children:(0,n.jsxs)(e.p,{children:["Podman can be used instead of Docker for all commands shown here. For more information, see the ",(0,n.jsx)(e.a,{href:"https://podman.io/docs",children:"Podman documentation"}),"."]})})}function l(o={}){const{wrapper:e}={...(0,s.R)(),...o.components};return e?(0,n.jsx)(e,{...o,children:(0,n.jsx)(c,{...o})}):c(o)}}}]); \ No newline at end of file diff --git a/assets/js/4c09a7b3.e67b8da5.js b/assets/js/4c09a7b3.e67b8da5.js deleted file mode 100644 index 60720608eb..0000000000 --- a/assets/js/4c09a7b3.e67b8da5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7512],{45794:(o,e,t)=>{t.r(e),t.d(e,{CH:()=>p,assets:()=>a,chCodeConfig:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"Deployment/deployment-docker","title":"Deploy Langflow on Docker","description":"Running applications in Docker containers ensures consistent behavior across different systems and eliminates dependency conflicts.","source":"@site/docs/Deployment/deployment-docker.mdx","sourceDirName":"Deployment","slug":"/deployment-docker","permalink":"/deployment-docker","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Deploy Langflow on Docker","slug":"/deployment-docker"},"sidebar":"docs","previous":{"title":"Containerize a Langflow application","permalink":"/develop-application"},"next":{"title":"Deploy Langflow on a remote server","permalink":"/deployment-caddyfile"}}');var s=t(74848),r=t(28453),c=t(24754);const l={title:"Deploy Langflow on Docker",slug:"/deployment-docker"},i=void 0,a={},p={annotations:c.hk,Code:c.Cy},d={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},h=[{value:"Quickstart: Start a Langflow container with default values",id:"quickstart",level:2},{value:"Clone the repo and run the Langflow Docker container",id:"clone",level:2},{value:"Customize your deployment",id:"customize-your-deployment",level:3},{value:"Package your flow as a Docker image",id:"package-your-flow-as-a-docker-image",level:2},{value:"Customize the Langflow Docker image with your own code",id:"customize-the-langflow-docker-image",level:2}];function y(o){const e={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...o.components};return p||f("CH",!1),p.Code||f("CH.Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n",(0,s.jsx)(e.p,{children:"Running applications in Docker containers ensures consistent behavior across different systems and eliminates dependency conflicts."}),"\n",(0,s.jsx)(e.p,{children:"You can use the Langflow Docker image to start a Langflow container."}),"\n",(0,s.jsxs)(e.p,{children:["This guide demonstrates several ways to deploy Langflow with ",(0,s.jsx)(e.a,{href:"https://docs.docker.com/",children:"Docker"})," and ",(0,s.jsx)(e.a,{href:"https://docs.docker.com/compose/",children:"Docker Compose"}),":"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.a,{href:"#quickstart",children:"Quickstart"}),": Start a Langflow container with default values."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.a,{href:"#clone",children:"Use Docker Compose"}),": Clone the Langflow repo, and then use Docker Compose to build the Langflow Docker container.\nThis option provides more control over the configuration, including a persistent PostgreSQL database service, while still using the base Langflow Docker image."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.a,{href:"#package-your-flow-as-a-docker-image",children:"Create a custom flow image"}),": Use a Dockerfile to package a flow as a Docker image."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.a,{href:"#customize-the-langflow-docker-image",children:"Create a custom Langflow image"}),": Use a Dockerfile to package a custom Langflow Docker image that includes your own code, custom dependencies, or other modifications."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"quickstart",children:"Quickstart: Start a Langflow container with default values"}),"\n",(0,s.jsx)(e.p,{children:"With Docker installed and running on your system, run the following command:"}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 ",props:{style:{color:"#79C0FF"}}},{content:"langflowai/langflow:latest",props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,s.jsxs)(e.p,{children:["Then, access Langflow at ",(0,s.jsx)(e.code,{children:"http://localhost:7860/"}),"."]}),"\n",(0,s.jsxs)(e.p,{children:["This container runs a pre-built Docker image with default settings.\nFor more control over the configuration, see ",(0,s.jsx)(e.a,{href:"#clone",children:"Clone the repo and run the Langflow Docker container"}),"."]}),"\n",(0,s.jsx)(e.h2,{id:"clone",children:"Clone the repo and run the Langflow Docker container"}),"\n",(0,s.jsx)(e.p,{children:"Cloning the Langflow repository and using Docker Compose gives you more control over your configuration, allowing you to customize environment variables, use a persistent PostgreSQL database service (instead of the default SQLite database), and include custom dependencies."}),"\n",(0,s.jsx)(e.p,{children:"The default deployment with Docker Compose includes the following:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Langflow service"}),": Runs the latest Langflow image with PostgreSQL as the database."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"PostgreSQL service"}),": Provides persistent data storage for flows, users, and settings."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Persistent volumes"}),": Ensures your data survives container restarts."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["The complete Docker Compose configuration is available in ",(0,s.jsx)(e.code,{children:"docker_example/docker-compose.yml"}),"."]}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Clone the Langflow repository:"}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"git ",props:{style:{color:"#FFA657"}}},{content:"clone https://github.com/langflow-ai/langflow.git",props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Navigate to the ",(0,s.jsx)(e.code,{children:"docker_example"})," directory:"]}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"cd ",props:{style:{color:"#79C0FF"}}},{content:"langflow/docker_example",props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Run the Docker Compose file:"}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"compose up",props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Access Langflow at ",(0,s.jsx)(e.code,{children:"http://localhost:7860/"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"customize-your-deployment",children:"Customize your deployment"}),"\n",(0,s.jsx)(e.p,{children:"You can customize the Docker Compose configuration to fit your specific deployment."}),"\n",(0,s.jsxs)(e.p,{children:["For example, to configure the container's database credentials using a ",(0,s.jsx)(e.code,{children:".env"})," file, do the following:"]}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Create a ",(0,s.jsx)(e.code,{children:".env"})," file with your database credentials in the same directory as ",(0,s.jsx)(e.code,{children:"docker-compose.yml"}),":"]}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Database credentials",props:{}}]},{tokens:[{content:"POSTGRES_USER=myuser",props:{}}]},{tokens:[{content:"POSTGRES_PASSWORD=mypassword",props:{}}]},{tokens:[{content:"POSTGRES_DB=langflow",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"# Langflow configuration",props:{}}]},{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://myuser:mypassword@postgres:5432/langflow",props:{}}]},{tokens:[{content:"LANGFLOW_CONFIG_DIR=/app/langflow",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Modify the ",(0,s.jsx)(e.code,{children:"docker-compose.yml"})," file to reference the ",(0,s.jsx)(e.code,{children:".env"})," file for both the ",(0,s.jsx)(e.code,{children:"langflow"})," and ",(0,s.jsx)(e.code,{children:"postgres"})," services:"]}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"services",props:{style:{color:"#7EE787"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" langflow",props:{style:{color:"#7EE787"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" environment",props:{style:{color:"#7EE787"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" - ",props:{style:{color:"#C9D1D9"}}},{content:"LANGFLOW_DATABASE_URL=${LANGFLOW_DATABASE_URL}",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" - ",props:{style:{color:"#C9D1D9"}}},{content:"LANGFLOW_CONFIG_DIR=${LANGFLOW_CONFIG_DIR}",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" postgres",props:{style:{color:"#7EE787"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" environment",props:{style:{color:"#7EE787"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" - ",props:{style:{color:"#C9D1D9"}}},{content:"POSTGRES_USER=${POSTGRES_USER}",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" - ",props:{style:{color:"#C9D1D9"}}},{content:"POSTGRES_PASSWORD=${POSTGRES_PASSWORD}",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" - ",props:{style:{color:"#C9D1D9"}}},{content:"POSTGRES_DB=${POSTGRES_DB}",props:{style:{color:"#A5D6FF"}}}]}],lang:"yaml"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["For a complete list of available environment variables, see ",(0,s.jsx)(e.a,{href:"/environment-variables",children:"Langflow environment variables"}),"."]}),"\n",(0,s.jsxs)(e.p,{children:["For more customization options, see ",(0,s.jsx)(e.a,{href:"#customize-the-langflow-docker-image",children:"Customize the Langflow Docker image with your own code"}),"."]}),"\n",(0,s.jsx)(e.h2,{id:"package-your-flow-as-a-docker-image",children:"Package your flow as a Docker image"}),"\n",(0,s.jsx)(e.p,{children:"This section shows you how to create a Dockerfile that builds a Docker image containing your Langflow flow. This approach is useful when you want to distribute a specific flow as a standalone container or deploy it to environments like Kubernetes."}),"\n",(0,s.jsx)(e.p,{children:"Unlike the previous sections that use pre-built images, this method builds a custom image with your flow embedded inside it."}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Create a project directory, and change directory into it."}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"mkdir ",props:{style:{color:"#FFA657"}}},{content:"langflow-custom",props:{style:{color:"#A5D6FF"}}},{content:" && ",props:{style:{color:"#C9D1D9"}}},{content:"cd ",props:{style:{color:"#79C0FF"}}},{content:"langflow-custom",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Add your flow's JSON file to the directory. You can download an example, or use your own:"}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Download an example flow",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"wget ",props:{style:{color:"#FFA657"}}},{content:"https://raw.githubusercontent.com/langflow-ai/langflow-helm-charts/refs/heads/main/examples/flows/basic-prompting-hello-world.json",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Or copy your own flow file",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"cp ",props:{style:{color:"#FFA657"}}},{content:"/path/to/your/flow.json .",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Create a Dockerfile to build your custom image:"}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"FROM",props:{style:{color:"#FF7B72"}}},{content:" langflowai/langflow:latest",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" mkdir /app/flows",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" ./*.json /app/flows/",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"ENV",props:{style:{color:"#FF7B72"}}},{content:" LANGFLOW_LOAD_FLOWS_PATH=/app/flows",props:{style:{color:"#C9D1D9"}}}]}],lang:"dockerfile"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"This Dockerfile uses the official Langflow image as the base, creates a directory for your flows, copies your JSON flow files into the directory, and sets the environment variable to tell Langflow where to find the flows."}),"\n",(0,s.jsxs)(e.ol,{start:"4",children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Build and test your custom image:"}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"build ",props:{style:{color:"#A5D6FF"}}},{content:"-t ",props:{style:{color:"#79C0FF"}}},{content:"myuser/langflow-custom:",props:{style:{color:"#A5D6FF"}}},{content:"1.0.0 ",props:{style:{color:"#79C0FF"}}},{content:".",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 ",props:{style:{color:"#79C0FF"}}},{content:"myuser/langflow-custom:",props:{style:{color:"#A5D6FF"}}},{content:"1.0.0",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Push your image to Docker Hub (optional):"}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"push myuser/langflow-custom:",props:{style:{color:"#A5D6FF"}}},{content:"1.0.0",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["Your custom image now contains your flow and can be deployed anywhere Docker runs. For Kubernetes deployment, see ",(0,s.jsx)(e.a,{href:"/deployment-kubernetes-prod",children:"Deploy the Langflow production environment on Kubernetes"}),"."]}),"\n",(0,s.jsx)(e.h2,{id:"customize-the-langflow-docker-image",children:"Customize the Langflow Docker image with your own code"}),"\n",(0,s.jsx)(e.p,{children:"While the previous section showed how to package a flow with a Docker image, this section shows how to customize the Langflow application itself. This is useful when you need to add custom Python packages or dependencies, modify Langflow's configuration or settings, include custom components or tools, or add your own code to extend Langflow's functionality."}),"\n",(0,s.jsxs)(e.p,{children:["This example demonstrates how to customize the ",(0,s.jsx)(e.strong,{children:"Message History"})," component, but the same approach can be used for any code modifications."]}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"FROM",props:{style:{color:"#FF7B72"}}},{content:" langflowai/langflow:latest",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Set working directory",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"WORKDIR",props:{style:{color:"#FF7B72"}}},{content:" /app",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Copy your modified memory component",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"COPY",props:{style:{color:"#FF7B72"}}},{content:" src/backend/base/langflow/components/helpers/memory.py /tmp/memory.py",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Find the site-packages directory where langflow is installed",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" python -c ",props:{style:{color:"#C9D1D9"}}},{content:'"import site; print(site.getsitepackages()[0])"',props:{style:{color:"#A5D6FF"}}},{content:" > /tmp/site_packages.txt",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Replace the file in the site-packages location",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" SITE_PACKAGES=$(cat /tmp/site_packages.txt) && \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" echo ",props:{style:{color:"#C9D1D9"}}},{content:'"Site packages at: $SITE_PACKAGES"',props:{style:{color:"#A5D6FF"}}},{content:" && \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" mkdir -p ",props:{style:{color:"#C9D1D9"}}},{content:'"$SITE_PACKAGES/langflow/components/helpers"',props:{style:{color:"#A5D6FF"}}},{content:" && \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" cp /tmp/memory.py ",props:{style:{color:"#C9D1D9"}}},{content:'"$SITE_PACKAGES/langflow/components/helpers/"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Clear Python cache in the site-packages directory only",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" SITE_PACKAGES=$(cat /tmp/site_packages.txt) && \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" find ",props:{style:{color:"#C9D1D9"}}},{content:'"$SITE_PACKAGES"',props:{style:{color:"#A5D6FF"}}},{content:" -name ",props:{style:{color:"#C9D1D9"}}},{content:'"*.pyc"',props:{style:{color:"#A5D6FF"}}},{content:" -delete && \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" find ",props:{style:{color:"#C9D1D9"}}},{content:'"$SITE_PACKAGES"',props:{style:{color:"#A5D6FF"}}},{content:" -name ",props:{style:{color:"#C9D1D9"}}},{content:'"__pycache__"',props:{style:{color:"#A5D6FF"}}},{content:" -type d -exec rm -rf {} +",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Expose the default Langflow port",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"EXPOSE",props:{style:{color:"#FF7B72"}}},{content:" 7860",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Command to run Langflow",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"CMD",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}},{content:'"python"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"-m"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"langflow"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"run"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"--host"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"0.0.0.0"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"--port"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"7860"',props:{style:{color:"#A5D6FF"}}},{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"dockerfile"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"To use this custom Dockerfile, do the following:"}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Create a directory for your custom Langflow setup:"}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"mkdir ",props:{style:{color:"#FFA657"}}},{content:"langflow-custom",props:{style:{color:"#A5D6FF"}}},{content:" && ",props:{style:{color:"#C9D1D9"}}},{content:"cd ",props:{style:{color:"#79C0FF"}}},{content:"langflow-custom",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Create the necessary directory structure for your custom code.\nIn this example, Langflow expects ",(0,s.jsx)(e.code,{children:"memory.py"})," to exist in the ",(0,s.jsx)(e.code,{children:"/helpers"})," directory, so you create a directory in that location."]}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"mkdir ",props:{style:{color:"#FFA657"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"src/backend/base/langflow/components/helpers",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Place your modified ",(0,s.jsx)(e.code,{children:"memory.py"})," file in the ",(0,s.jsx)(e.code,{children:"/helpers"})," directory."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Create a new file named ",(0,s.jsx)(e.code,{children:"Dockerfile"})," in your ",(0,s.jsx)(e.code,{children:"langflow-custom"})," directory, and then copy the Dockerfile contents shown above into it."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Build and run the image:"}),"\n",(0,s.jsx)(p.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"build ",props:{style:{color:"#A5D6FF"}}},{content:"-t ",props:{style:{color:"#79C0FF"}}},{content:"myuser/langflow-custom:",props:{style:{color:"#A5D6FF"}}},{content:"1.0.0 ",props:{style:{color:"#79C0FF"}}},{content:".",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 ",props:{style:{color:"#79C0FF"}}},{content:"myuser/langflow-custom:",props:{style:{color:"#A5D6FF"}}},{content:"1.0.0",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"This approach can be adapted for any other components or custom code you want to add to Langflow by modifying the file paths and component names."})]})}function u(o={}){const{wrapper:e}={...(0,r.R)(),...o.components};return e?(0,s.jsx)(e,{...o,children:(0,s.jsx)(y,{...o})}):y(o)}function f(o,e){throw new Error("Expected "+(e?"component":"object")+" `"+o+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]); \ No newline at end of file diff --git a/assets/js/70909872.4826cc3c.js b/assets/js/70909872.4826cc3c.js new file mode 100644 index 0000000000..041c6bb529 --- /dev/null +++ b/assets/js/70909872.4826cc3c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5333],{6892:(e,n,t)=>{t.d(n,{A:()=>o});const o=t.p+"assets/images/component-mcp-astra-db-efbe2da591a955d0a6fa5259bd659a0e.png"},23521:(e,n,t)=>{t.r(n),t.d(n,{CH:()=>p,assets:()=>h,chCodeConfig:()=>g,contentTitle:()=>l,default:()=>f,frontMatter:()=>d,metadata:()=>o,toc:()=>m});const o=JSON.parse('{"id":"Agents/mcp-component-astra","title":"Connect an Astra DB MCP server to Langflow","description":"This guide demonstrates how to use Langflow as an MCP client by using the MCP Tools component to run a DataStax Astra DB MCP server in an agent flow.","source":"@site/docs/Agents/mcp-component-astra.mdx","sourceDirName":"Agents","slug":"/mcp-component-astra","permalink":"/mcp-component-astra","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Connect an Astra DB MCP server to Langflow","slug":"/mcp-component-astra"},"sidebar":"docs","previous":{"title":"Use Langflow as an MCP server","permalink":"/mcp-server"},"next":{"title":"API keys and authentication","permalink":"/api-keys-and-authentication"}}');var a=t(74848),s=t(28453),r=t(24754),c=t(40619),i=t(76493);const d={title:"Connect an Astra DB MCP server to Langflow",slug:"/mcp-component-astra"},l=void 0,h={},p={annotations:r.hk,Code:r.Cy},g={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},m=[...i.RM];function u(e){const n={a:"a",admonition:"admonition",code:"code",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,s.R)(),...e.components};return p||x("CH",!1),p.Code||x("CH.Code",!0),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,a.jsxs)(n.p,{children:["This guide demonstrates how to ",(0,a.jsx)(n.a,{href:"/mcp-client",children:"use Langflow as an MCP client"})," by using the ",(0,a.jsx)(n.strong,{children:"MCP Tools"})," component to run a ",(0,a.jsx)(n.a,{href:"https://github.com/datastax/astra-db-mcp",children:"DataStax Astra DB MCP server"})," in an agent flow."]}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["Install an LTS release of ",(0,a.jsx)(n.a,{href:"https://docs.npmjs.com/downloading-and-installing-node-js-and-npm",children:"Node.js"}),"."]}),"\n"]}),"\n",(0,a.jsx)(i.Ay,{}),"\n",(0,a.jsxs)(n.ol,{start:"2",children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Create an ",(0,a.jsx)(n.a,{href:"https://platform.openai.com/",children:"OpenAI"})," API key."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Create an ",(0,a.jsx)(n.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/create-database.html#create-vector-database",children:"Astra DB Serverless (Vector) database"}),", if you don't already have one."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Get your database's Astra DB API endpoint and an Astra application token with the ",(0,a.jsx)(n.strong,{children:"Database Administrator"})," role. For more information, see ",(0,a.jsx)(n.a,{href:"https://docs.datastax.com/en/astra-db-serverless/administration/manage-application-tokens.html#database-token",children:"Generate an application token for a database"}),"."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["To follow along with this guide, create a flow based on the ",(0,a.jsx)(n.strong,{children:"Simple Agent"})," template."]}),"\n",(0,a.jsx)(n.p,{children:"You can also use an existing flow or create a blank flow."}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Remove the ",(0,a.jsx)(n.strong,{children:"URL"})," tool, and then replace it with an ",(0,a.jsxs)(n.a,{href:"/mcp-client",children:[(0,a.jsx)(n.strong,{children:"MCP Tools"})," component"]}),"."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Configure the ",(0,a.jsx)(n.strong,{children:"MCP Tools"})," component as follows:"]}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Select ",(0,a.jsx)(n.strong,{children:"Stdio"})," mode."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.strong,{children:"MCP server"})," field, add the following code to connect to an Astra DB MCP server:"]}),"\n",(0,a.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"npx ",props:{style:{color:"#FFA657"}}},{content:"-y ",props:{style:{color:"#79C0FF"}}},{content:"@datastax/astra-db-mcp",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.strong,{children:"Env"})," fields, add variables for ",(0,a.jsx)(n.code,{children:"ASTRA_DB_APPLICATION_TOKEN"})," and ",(0,a.jsx)(n.code,{children:"ASTRA_DB_API_ENDPOINT"})," with the values from your Astra database."]}),"\n",(0,a.jsxs)(n.admonition,{type:"info",children:[(0,a.jsxs)(n.p,{children:["Environment variables declared in your Langflow ",(0,a.jsx)(n.code,{children:".env"})," file can be referenced in your MCP server commands, but you cannot reference global variables declared in Langflow."]}),(0,a.jsxs)(n.p,{children:["If you want to use variables for ",(0,a.jsx)(n.code,{children:"ASTRA_DB_APPLICATION_TOKEN"})," and ",(0,a.jsx)(n.code,{children:"ASTRA_DB_API_ENDPOINT"}),", add them to Langflow's ",(0,a.jsx)(n.code,{children:".env"})," file, and then restart Langflow.\nFor more information, see ",(0,a.jsx)(n.a,{href:"/configuration-global-variables",children:"global variables"}),"."]})]}),"\n",(0,a.jsxs)(n.p,{children:["Add each variable separately.\nTo add another variable field click ",(0,a.jsx)(c.A,{name:"Plus","aria-hidden":"true"})," ",(0,a.jsx)(n.strong,{children:"Add More"}),"."]}),"\n",(0,a.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"ASTRA_DB_APPLICATION_TOKEN",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"AstraCS:...",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,a.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"ASTRA_DB_API_ENDPOINT",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"https://...-us-east-2.apps.astra.datastax.com",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.strong,{children:"Agent"})," component, add your OpenAI API key."]}),"\n",(0,a.jsxs)(n.p,{children:["The default model is an OpenAI model.\nIf you want to use a different model, edit the ",(0,a.jsx)(n.strong,{children:"Model Provider"}),", ",(0,a.jsx)(n.strong,{children:"Model Name"}),", and ",(0,a.jsx)(n.strong,{children:"API Key"})," fields accordingly."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"The Simple Agent flow with the URL tool replaced by an MCP Tools component, and the MCP Tools component launching an Astra DB MCP server",src:t(6892).A+"",width:"4000",height:"2450"})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Open the ",(0,a.jsx)(n.strong,{children:"Playground"}),", and then ask the agent, ",(0,a.jsx)(n.code,{children:"What collections are available?"})]}),"\n",(0,a.jsx)(n.p,{children:"Since Langflow is connected to your Astra DB database through the MCP server, the agent chooses the correct tool and connects to your database to retrieve the answer.\nFor example:"}),"\n",(0,a.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"The available collections in your database are:",props:{}}]},{tokens:[{content:"collection_002",props:{}}]},{tokens:[{content:"hardware_requirements",props:{}}]},{tokens:[{content:"load_collection",props:{}}]},{tokens:[{content:"nvidia_collection",props:{}}]},{tokens:[{content:"software_requirements",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n"]})]})}function f(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}function x(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},76493:(e,n,t)=>{t.d(n,{Ay:()=>c,RM:()=>s});var o=t(74848),a=t(28453);const s=[];function r(e){const n={a:"a",admonition:"admonition",code:"code",p:"p",...(0,a.R)(),...e.components};return(0,o.jsxs)(n.admonition,{type:"tip",children:[(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"uvx"})," is included with ",(0,o.jsx)(n.code,{children:"uv"})," in the Langflow package."]}),(0,o.jsxs)(n.p,{children:["To use ",(0,o.jsx)(n.code,{children:"npx"})," server commands, you must first install an LTS release of ",(0,o.jsx)(n.a,{href:"https://docs.npmjs.com/downloading-and-installing-node-js-and-npm",children:"Node.js"}),". If you run Langflow in Docker, install Node.js inside the container image and rebuild so that ",(0,o.jsx)(n.code,{children:"npx"}),"-based MCP servers are available at runtime. For more information, see ",(0,o.jsx)(n.a,{href:"/develop-application#package-management",children:"Package management"}),"."]}),(0,o.jsxs)(n.p,{children:["For an example of an ",(0,o.jsx)(n.code,{children:"npx"})," MCP server in Langflow, see ",(0,o.jsx)(n.a,{href:"/mcp-component-astra",children:"Connect an Astra DB MCP server to Langflow"}),"."]})]})}function c(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(r,{...e})}):r(e)}}}]); \ No newline at end of file diff --git a/assets/js/70909872.b871d080.js b/assets/js/70909872.b871d080.js deleted file mode 100644 index 5e36d3f86c..0000000000 --- a/assets/js/70909872.b871d080.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5333],{6892:(e,n,t)=>{t.d(n,{A:()=>o});const o=t.p+"assets/images/component-mcp-astra-db-efbe2da591a955d0a6fa5259bd659a0e.png"},23521:(e,n,t)=>{t.r(n),t.d(n,{CH:()=>h,assets:()=>l,chCodeConfig:()=>p,contentTitle:()=>d,default:()=>f,frontMatter:()=>i,metadata:()=>o,toc:()=>g});const o=JSON.parse('{"id":"Agents/mcp-component-astra","title":"Connect an Astra DB MCP server to Langflow","description":"This guide demonstrates how to use Langflow as an MCP client by using the MCP Tools component to run a DataStax Astra DB MCP server in an agent flow.","source":"@site/docs/Agents/mcp-component-astra.mdx","sourceDirName":"Agents","slug":"/mcp-component-astra","permalink":"/mcp-component-astra","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Connect an Astra DB MCP server to Langflow","slug":"/mcp-component-astra"},"sidebar":"docs","previous":{"title":"Use Langflow as an MCP server","permalink":"/mcp-server"},"next":{"title":"API keys and authentication","permalink":"/api-keys-and-authentication"}}');var a=t(74848),s=t(28453),r=t(24754),c=t(40619);const i={title:"Connect an Astra DB MCP server to Langflow",slug:"/mcp-component-astra"},d=void 0,l={},h={annotations:r.hk,Code:r.Cy},p={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},g=[];function u(e){const n={a:"a",admonition:"admonition",code:"code",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,s.R)(),...e.components};return h||m("CH",!1),h.Code||m("CH.Code",!0),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,a.jsxs)(n.p,{children:["This guide demonstrates how to ",(0,a.jsx)(n.a,{href:"/mcp-client",children:"use Langflow as an MCP client"})," by using the ",(0,a.jsx)(n.strong,{children:"MCP Tools"})," component to run a ",(0,a.jsx)(n.a,{href:"https://github.com/datastax/astra-db-mcp",children:"DataStax Astra DB MCP server"})," in an agent flow."]}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Install an LTS release of ",(0,a.jsx)(n.a,{href:"https://docs.npmjs.com/downloading-and-installing-node-js-and-npm",children:"Node.js"}),"."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Create an ",(0,a.jsx)(n.a,{href:"https://platform.openai.com/",children:"OpenAI"})," API key."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Create an ",(0,a.jsx)(n.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/create-database.html#create-vector-database",children:"Astra DB Serverless (Vector) database"}),", if you don't already have one."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Get your database's Astra DB API endpoint and an Astra application token with the ",(0,a.jsx)(n.strong,{children:"Database Administrator"})," role. For more information, see ",(0,a.jsx)(n.a,{href:"https://docs.datastax.com/en/astra-db-serverless/administration/manage-application-tokens.html#database-token",children:"Generate an application token for a database"}),"."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["To follow along with this guide, create a flow based on the ",(0,a.jsx)(n.strong,{children:"Simple Agent"})," template."]}),"\n",(0,a.jsx)(n.p,{children:"You can also use an existing flow or create a blank flow."}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Remove the ",(0,a.jsx)(n.strong,{children:"URL"})," tool, and then replace it with an ",(0,a.jsxs)(n.a,{href:"/mcp-client",children:[(0,a.jsx)(n.strong,{children:"MCP Tools"})," component"]}),"."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Configure the ",(0,a.jsx)(n.strong,{children:"MCP Tools"})," component as follows:"]}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Select ",(0,a.jsx)(n.strong,{children:"Stdio"})," mode."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.strong,{children:"MCP server"})," field, add the following code to connect to an Astra DB MCP server:"]}),"\n",(0,a.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"npx ",props:{style:{color:"#FFA657"}}},{content:"-y ",props:{style:{color:"#79C0FF"}}},{content:"@datastax/astra-db-mcp",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.strong,{children:"Env"})," fields, add variables for ",(0,a.jsx)(n.code,{children:"ASTRA_DB_APPLICATION_TOKEN"})," and ",(0,a.jsx)(n.code,{children:"ASTRA_DB_API_ENDPOINT"})," with the values from your Astra database."]}),"\n",(0,a.jsxs)(n.admonition,{type:"info",children:[(0,a.jsxs)(n.p,{children:["Environment variables declared in your Langflow ",(0,a.jsx)(n.code,{children:".env"})," file can be referenced in your MCP server commands, but you cannot reference global variables declared in Langflow."]}),(0,a.jsxs)(n.p,{children:["If you want to use variables for ",(0,a.jsx)(n.code,{children:"ASTRA_DB_APPLICATION_TOKEN"})," and ",(0,a.jsx)(n.code,{children:"ASTRA_DB_API_ENDPOINT"}),", add them to Langflow's ",(0,a.jsx)(n.code,{children:".env"})," file, and then restart Langflow.\nFor more information, see ",(0,a.jsx)(n.a,{href:"/configuration-global-variables",children:"global variables"}),"."]})]}),"\n",(0,a.jsxs)(n.p,{children:["Add each variable separately.\nTo add another variable field click ",(0,a.jsx)(c.A,{name:"Plus","aria-hidden":"true"})," ",(0,a.jsx)(n.strong,{children:"Add More"}),"."]}),"\n",(0,a.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"ASTRA_DB_APPLICATION_TOKEN",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"AstraCS:...",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,a.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"ASTRA_DB_API_ENDPOINT",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"https://...-us-east-2.apps.astra.datastax.com",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.strong,{children:"Agent"})," component, add your OpenAI API key."]}),"\n",(0,a.jsxs)(n.p,{children:["The default model is an OpenAI model.\nIf you want to use a different model, edit the ",(0,a.jsx)(n.strong,{children:"Model Provider"}),", ",(0,a.jsx)(n.strong,{children:"Model Name"}),", and ",(0,a.jsx)(n.strong,{children:"API Key"})," fields accordingly."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"The Simple Agent flow with the URL tool replaced by an MCP Tools component, and the MCP Tools component launching an Astra DB MCP server",src:t(6892).A+"",width:"4000",height:"2450"})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Open the ",(0,a.jsx)(n.strong,{children:"Playground"}),", and then ask the agent, ",(0,a.jsx)(n.code,{children:"What collections are available?"})]}),"\n",(0,a.jsx)(n.p,{children:"Since Langflow is connected to your Astra DB database through the MCP server, the agent chooses the correct tool and connects to your database to retrieve the answer.\nFor example:"}),"\n",(0,a.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"The available collections in your database are:",props:{}}]},{tokens:[{content:"collection_002",props:{}}]},{tokens:[{content:"hardware_requirements",props:{}}]},{tokens:[{content:"load_collection",props:{}}]},{tokens:[{content:"nvidia_collection",props:{}}]},{tokens:[{content:"software_requirements",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n"]})]})}function f(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}function m(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]); \ No newline at end of file diff --git a/assets/js/fe6d5b4f.107bf5c4.js b/assets/js/fe6d5b4f.107bf5c4.js new file mode 100644 index 0000000000..268f42c7c0 --- /dev/null +++ b/assets/js/fe6d5b4f.107bf5c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1345],{23209:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>o,toc:()=>p});const o=JSON.parse('{"id":"Agents/mcp-client","title":"Use Langflow as an MCP client","description":"Langflow integrates with the Model Context Protocol (MCP) as both an MCP server and an MCP client.","source":"@site/docs/Agents/mcp-client.mdx","sourceDirName":"Agents","slug":"/mcp-client","permalink":"/mcp-client","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Use Langflow as an MCP client","slug":"/mcp-client"},"sidebar":"docs","previous":{"title":"Configure tools for agents","permalink":"/agents-tools"},"next":{"title":"Use Langflow as an MCP server","permalink":"/mcp-server"}}');var t=s(74848),r=s(28453),l=s(40619),a=s(45783),i=s(76493);const c={title:"Use Langflow as an MCP client",slug:"/mcp-client"},d=void 0,h={},p=[{value:"Use the MCP tools component",id:"use-the-mcp-tools-component",level:2},{value:"Connect to a non-Langflow MCP server",id:"mcp-stdio-mode",level:3},...i.RM,{value:"Connect a Langflow MCP server",id:"mcp-sse-mode",level:3},{value:"MCP Tools parameters",id:"mcp-tools-parameters",level:2},{value:"Manage connected MCP servers",id:"manage-connected-mcp-servers",level:2},{value:"See also",id:"see-also",level:2}];function x(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["Langflow integrates with the ",(0,t.jsx)(n.a,{href:"https://modelcontextprotocol.io/introduction",children:"Model Context Protocol (MCP)"})," as both an MCP server and an MCP client."]}),"\n",(0,t.jsxs)(n.p,{children:["This page describes how to use Langflow as an MCP client with the ",(0,t.jsxs)(n.a,{href:"#use-the-mcp-tools-component",children:[(0,t.jsx)(n.strong,{children:"MCP Tools"})," component"]})," and connected ",(0,t.jsx)(n.a,{href:"#manage-connected-mcp-servers",children:"MCP servers"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["For information about using Langflow as an MCP server, see ",(0,t.jsx)(n.a,{href:"/mcp-server",children:"Use Langflow as an MCP server"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"use-the-mcp-tools-component",children:"Use the MCP tools component"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component connects to an MCP server so that a ",(0,t.jsx)(n.a,{href:"/agents",children:"Langflow agent"})," can use the server's tools when responding to user queries."]}),"\n",(0,t.jsx)(n.p,{children:"This component has two modes, depending on the type of server you want to access:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#mcp-stdio-mode",children:"Connect to a non-Langflow MCP server"})," with a JSON configuration file, server start command, or SSE URL to access tools provided by external, non-Langflow MCP servers."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#mcp-sse-mode",children:"Connect to a Langflow MCP server"})," to use flows from your ",(0,t.jsx)(n.a,{href:"/concepts-flows#projects",children:"Langflow projects"})," as MCP tools."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"mcp-stdio-mode",children:"Connect to a non-Langflow MCP server"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add an ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component to your flow."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"MCP Server"})," field, select a previously connected server or click ",(0,t.jsx)(l.A,{name:"Plus","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Add MCP Server"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"There are multiple ways to add a new server:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"JSON"}),": Paste the MCP server's JSON configuration object into the field, including required and optional parameters that you want to use, and then click ",(0,t.jsx)(n.strong,{children:"Add Server"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"STDIO"}),": Enter the MCP server's ",(0,t.jsx)(n.strong,{children:"Name"}),", ",(0,t.jsx)(n.strong,{children:"Command"}),", and any ",(0,t.jsx)(n.strong,{children:"Arguments"})," and ",(0,t.jsx)(n.strong,{children:"Environment Variables"})," the server uses, and then click ",(0,t.jsx)(n.strong,{children:"Add Server"}),".\nFor example, to start a ",(0,t.jsx)(n.a,{href:"https://github.com/modelcontextprotocol/servers/tree/main/src/fetch",children:"Fetch"})," server, the ",(0,t.jsx)(n.strong,{children:"Command"})," is ",(0,t.jsx)(n.code,{children:"uvx mcp-server-fetch"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"SSE"}),": Enter your Langflow MCP server's ",(0,t.jsx)(n.strong,{children:"Name"}),", ",(0,t.jsx)(n.strong,{children:"SSE URL"}),", and any ",(0,t.jsx)(n.strong,{children:"Headers"})," and ",(0,t.jsx)(n.strong,{children:"Environment Variables"})," the server uses, and then click ",(0,t.jsx)(n.strong,{children:"Add Server"}),".\nThe default ",(0,t.jsx)(n.strong,{children:"SSE URL"})," is ",(0,t.jsx)(n.code,{children:"http://localhost:7860/api/v1/mcp/sse"}),". For more information, see ",(0,t.jsx)(n.a,{href:"#mcp-sse-mode",children:"Use SSE mode"}),"."]}),"\n"]}),"\n",(0,t.jsx)(i.Ay,{}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To use environment variables in your server command, enter each variable in the ",(0,t.jsx)(n.strong,{children:"Env"})," fields as key-value pairs."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Langflow passes environment variables from the ",(0,t.jsx)(n.code,{children:".env"})," file to MCP, but it doesn't pass global variables declared in your Langflow ",(0,t.jsx)(n.strong,{children:"Settings"}),".\nTo define an MCP server environment variable as a global variable, add it to Langflow's ",(0,t.jsx)(n.code,{children:".env"})," file at startup.\nFor more information, see ",(0,t.jsx)(n.a,{href:"/configuration-global-variables",children:"global variables"}),"."]})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Tool"})," field, select a tool that you want this component to use, or leave the field blank to allow access to all tools provided by the MCP server."]}),"\n",(0,t.jsx)(n.p,{children:"If you select a specific tool, you might need to configure additional tool-specific fields. For information about tool-specific fields, see your MCP server's documentation."}),"\n",(0,t.jsxs)(n.p,{children:["At this point, the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component is serving a tool, but nothing is using the tool. The next steps explain how to make the tool available to an ",(0,t.jsxs)(n.a,{href:"/components-agents",children:[(0,t.jsx)(n.strong,{children:"Agent"})," component"]})," so that the agent can use the tool in its responses."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),", enable ",(0,t.jsx)(n.strong,{children:"Tool mode"})," so you can use the component with an agent."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Connect the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component's ",(0,t.jsx)(n.strong,{children:"Toolset"})," port to an ",(0,t.jsx)(n.strong,{children:"Agent"})," component's ",(0,t.jsx)(n.strong,{children:"Tools"})," port."]}),"\n",(0,t.jsxs)(n.p,{children:["If not already present in your flow, make sure you also attach ",(0,t.jsx)(n.strong,{children:"Chat Input"})," and ",(0,t.jsx)(n.strong,{children:"Chat Output"})," components to the ",(0,t.jsx)(n.strong,{children:"Agent"})," component."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"MCP Tools component in STDIO mode",src:s(63963).A+"",width:"4000",height:"2608"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Test your flow to make sure the MCP server is connected and the selected tool is used by the agent. Open the ",(0,t.jsx)(n.strong,{children:"Playground"}),", and then enter a prompt that uses the tool you connected through the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component."]}),"\n",(0,t.jsxs)(n.p,{children:["For example, if you use ",(0,t.jsx)(n.code,{children:"mcp-server-fetch"})," with the ",(0,t.jsx)(n.code,{children:"fetch"})," tool, you could ask the agent to summarize recent tech news. The agent calls the MCP server function ",(0,t.jsx)(n.code,{children:"fetch"}),", and then returns the response."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If you want the agent to be able to use more tools, repeat these steps to add more tools components with different servers or tools."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"mcp-sse-mode",children:"Connect a Langflow MCP server"}),"\n",(0,t.jsxs)(n.p,{children:["Every Langflow project runs a separate MCP server that exposes the project's flows as MCP tools.\nFor more information about your projects' MCP servers, including exposing flows as MCP tools, see ",(0,t.jsx)(n.a,{href:"/mcp-server",children:"Use Langflow as an MCP server"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["To leverage flows-as-tools, use the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component in ",(0,t.jsx)(n.strong,{children:"Server-Sent Events (SSE)"})," mode to connect to a project's ",(0,t.jsx)(n.code,{children:"/api/v1/mcp/sse"})," endpoint:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add an ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component to your flow, click ",(0,t.jsx)(l.A,{name:"Plus","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Add MCP Server"}),", and then select ",(0,t.jsx)(n.strong,{children:"SSE"})," mode."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"MCP SSE URL"})," field, modify the default address to point at your Langflow server's SSE endpoint. The default value for other Langflow installations is ",(0,t.jsx)(n.code,{children:"http://localhost:7860/api/v1/mcp/sse"}),".\nIn SSE mode, all flows available from the targeted server are treated as tools."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),", enable ",(0,t.jsx)(n.strong,{children:"Tool Mode"})," so you can use the component with an agent."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Connect the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component's ",(0,t.jsx)(n.strong,{children:"Toolset"})," port to an ",(0,t.jsx)(n.strong,{children:"Agent"})," component's ",(0,t.jsx)(n.strong,{children:"Tools"})," port."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If not already present in your flow, make sure you also attach ",(0,t.jsx)(n.strong,{children:"Chat Input"})," and ",(0,t.jsx)(n.strong,{children:"Chat Output"})," components to the ",(0,t.jsx)(n.strong,{children:"Agent"})," component."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"MCP component with SSE mode enabled",src:s(68347).A+"",width:"4000",height:"2438"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Test your flow to make sure the agent uses your flows to respond to queries. Open the ",(0,t.jsx)(n.strong,{children:"Playground"}),", and then enter a prompt that uses a flow that you connected through the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If you want the agent to be able to use more tools, repeat these steps to add more tools components with different servers or tools."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"mcp-tools-parameters",children:"MCP Tools parameters"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"command"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Input parameter. Stdio mode only. The MCP server startup command. Default: ",(0,t.jsx)(n.code,{children:"uvx mcp-sse-shim@latest"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"sse_url"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Input parameter. SSE mode only. The SSE URL for a Langflow project's MCP server. Default for Langflow Desktop: ",(0,t.jsx)(n.code,{children:"http://localhost:7868/"}),". Default for other installations: ",(0,t.jsx)(n.code,{children:"http://localhost:7860/api/v1/mcp/sse"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"tools"}),(0,t.jsx)(n.td,{children:"List[Tool]"}),(0,t.jsxs)(n.td,{children:["Output parameter. ",(0,t.jsx)(n.a,{href:"/data-types#tool",children:(0,t.jsx)(n.code,{children:"Tool"})})," object containing a list of tools exposed by the MCP server."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"manage-connected-mcp-servers",children:"Manage connected MCP servers"}),"\n",(0,t.jsxs)(n.p,{children:["To manage all MCP server connections for your Langflow client, click ",(0,t.jsx)(a.A,{})," ",(0,t.jsx)(n.strong,{children:"MCP servers"})," in the visual editor, or click your profile icon, select ",(0,t.jsx)(n.strong,{children:"Settings"}),", and then click ",(0,t.jsx)(n.strong,{children:"MCP Servers"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["To add a new MCP server, click ",(0,t.jsx)(n.strong,{children:"Add MCP Server"}),", and then follow the steps in ",(0,t.jsx)(n.a,{href:"#use-the-mcp-tools-component",children:"Use the MCP Tools component"})," to configure the connection and use the server in a flow."]}),"\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(l.A,{name:"Ellipsis","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"More"})," to edit or delete an MCP server connection."]}),"\n",(0,t.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/mcp-server",children:"Use Langflow as an MCP server"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/mcp-component-astra",children:"Use a DataStax Astra DB MCP server with the MCP Tools component"})}),"\n"]})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(x,{...e})}):x(e)}},45783:(e,n,s)=>{s.d(n,{A:()=>a});var o,t,r=s(96540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var n=1;nr.createElement("svg",l({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},s),e?r.createElement("title",{id:n},e):null,o||(o=r.createElement("g",{fill:"#fff",clipPath:"url(#a)"},r.createElement("path",{d:"M10.352 1.675a1.655 1.655 0 0 0-2.341 0L1.769 7.917a.552.552 0 1 1-.78-.78L7.23.893a2.759 2.759 0 0 1 4.682 2.341 2.75 2.75 0 0 1 2.34.78l.033.033a2.76 2.76 0 0 1 0 3.901L8.64 13.595a.184.184 0 0 0 0 .26l1.16 1.159a.552.552 0 0 1-.78.78l-1.16-1.16a1.287 1.287 0 0 1 0-1.82l5.645-5.645a1.655 1.655 0 0 0 0-2.34l-.032-.033a1.655 1.655 0 0 0-2.34-.002l-4.65 4.65-.002.003-.063.063a.552.552 0 1 1-.78-.78l4.715-4.716a1.655 1.655 0 0 0-.001-2.34"}),r.createElement("path",{d:"M9.572 3.235a.552.552 0 1 0-.78-.78L4.174 7.07a2.759 2.759 0 0 0 3.901 3.902l4.617-4.617a.552.552 0 0 0-.78-.78l-4.617 4.617a1.655 1.655 0 0 1-2.341-2.341z"}))),t||(t=r.createElement("defs",null,r.createElement("clipPath",{id:"a"},r.createElement("path",{fill:"#fff",d:"M0 0h16v16H0z"})))))},63963:(e,n,s)=>{s.d(n,{A:()=>o});const o=s.p+"assets/images/component-mcp-stdio-a13a643e61ceea972c4a3f64dd1ae72f.png"},68347:(e,n,s)=>{s.d(n,{A:()=>o});const o=s.p+"assets/images/component-mcp-sse-mode-2e742342a52231247733d8486ab612fd.png"},76493:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>r});var o=s(74848),t=s(28453);const r=[];function l(e){const n={a:"a",admonition:"admonition",code:"code",p:"p",...(0,t.R)(),...e.components};return(0,o.jsxs)(n.admonition,{type:"tip",children:[(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"uvx"})," is included with ",(0,o.jsx)(n.code,{children:"uv"})," in the Langflow package."]}),(0,o.jsxs)(n.p,{children:["To use ",(0,o.jsx)(n.code,{children:"npx"})," server commands, you must first install an LTS release of ",(0,o.jsx)(n.a,{href:"https://docs.npmjs.com/downloading-and-installing-node-js-and-npm",children:"Node.js"}),". If you run Langflow in Docker, install Node.js inside the container image and rebuild so that ",(0,o.jsx)(n.code,{children:"npx"}),"-based MCP servers are available at runtime. For more information, see ",(0,o.jsx)(n.a,{href:"/develop-application#package-management",children:"Package management"}),"."]}),(0,o.jsxs)(n.p,{children:["For an example of an ",(0,o.jsx)(n.code,{children:"npx"})," MCP server in Langflow, see ",(0,o.jsx)(n.a,{href:"/mcp-component-astra",children:"Connect an Astra DB MCP server to Langflow"}),"."]})]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}}}]); \ No newline at end of file diff --git a/assets/js/fe6d5b4f.a266d6b4.js b/assets/js/fe6d5b4f.a266d6b4.js deleted file mode 100644 index 84bb68702a..0000000000 --- a/assets/js/fe6d5b4f.a266d6b4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1345],{23209:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>x,frontMatter:()=>i,metadata:()=>o,toc:()=>h});const o=JSON.parse('{"id":"Agents/mcp-client","title":"Use Langflow as an MCP client","description":"Langflow integrates with the Model Context Protocol (MCP) as both an MCP server and an MCP client.","source":"@site/docs/Agents/mcp-client.mdx","sourceDirName":"Agents","slug":"/mcp-client","permalink":"/mcp-client","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Use Langflow as an MCP client","slug":"/mcp-client"},"sidebar":"docs","previous":{"title":"Configure tools for agents","permalink":"/agents-tools"},"next":{"title":"Use Langflow as an MCP server","permalink":"/mcp-server"}}');var t=s(74848),r=s(28453),l=s(40619),a=s(45783);const i={title:"Use Langflow as an MCP client",slug:"/mcp-client"},c=void 0,d={},h=[{value:"Use the MCP tools component",id:"use-the-mcp-tools-component",level:2},{value:"Connect to a non-Langflow MCP server",id:"mcp-stdio-mode",level:3},{value:"Connect a Langflow MCP server",id:"mcp-sse-mode",level:3},{value:"MCP Tools parameters",id:"mcp-tools-parameters",level:2},{value:"Manage connected MCP servers",id:"manage-connected-mcp-servers",level:2},{value:"See also",id:"see-also",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["Langflow integrates with the ",(0,t.jsx)(n.a,{href:"https://modelcontextprotocol.io/introduction",children:"Model Context Protocol (MCP)"})," as both an MCP server and an MCP client."]}),"\n",(0,t.jsxs)(n.p,{children:["This page describes how to use Langflow as an MCP client with the ",(0,t.jsxs)(n.a,{href:"#use-the-mcp-tools-component",children:[(0,t.jsx)(n.strong,{children:"MCP Tools"})," component"]})," and connected ",(0,t.jsx)(n.a,{href:"#manage-connected-mcp-servers",children:"MCP servers"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["For information about using Langflow as an MCP server, see ",(0,t.jsx)(n.a,{href:"/mcp-server",children:"Use Langflow as an MCP server"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"use-the-mcp-tools-component",children:"Use the MCP tools component"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component connects to an MCP server so that a ",(0,t.jsx)(n.a,{href:"/agents",children:"Langflow agent"})," can use the server's tools when responding to user queries."]}),"\n",(0,t.jsx)(n.p,{children:"This component has two modes, depending on the type of server you want to access:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#mcp-stdio-mode",children:"Connect to a non-Langflow MCP server"})," with a JSON configuration file, server start command, or SSE URL to access tools provided by external, non-Langflow MCP servers."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#mcp-sse-mode",children:"Connect to a Langflow MCP server"})," to use flows from your ",(0,t.jsx)(n.a,{href:"/concepts-flows#projects",children:"Langflow projects"})," as MCP tools."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"mcp-stdio-mode",children:"Connect to a non-Langflow MCP server"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add an ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component to your flow."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"MCP Server"})," field, select a previously connected server or click ",(0,t.jsx)(l.A,{name:"Plus","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Add MCP Server"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"There are multiple ways to add a new server:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"JSON"}),": Paste the MCP server's JSON configuration object into the field, including required and optional parameters that you want to use, and then click ",(0,t.jsx)(n.strong,{children:"Add Server"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"STDIO"}),": Enter the MCP server's ",(0,t.jsx)(n.strong,{children:"Name"}),", ",(0,t.jsx)(n.strong,{children:"Command"}),", and any ",(0,t.jsx)(n.strong,{children:"Arguments"})," and ",(0,t.jsx)(n.strong,{children:"Environment Variables"})," the server uses, and then click ",(0,t.jsx)(n.strong,{children:"Add Server"}),".\nFor example, to start a ",(0,t.jsx)(n.a,{href:"https://github.com/modelcontextprotocol/servers/tree/main/src/fetch",children:"Fetch"})," server, the ",(0,t.jsx)(n.strong,{children:"Command"})," is ",(0,t.jsx)(n.code,{children:"uvx mcp-server-fetch"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"SSE"}),": Enter your Langflow MCP server's ",(0,t.jsx)(n.strong,{children:"Name"}),", ",(0,t.jsx)(n.strong,{children:"SSE URL"}),", and any ",(0,t.jsx)(n.strong,{children:"Headers"})," and ",(0,t.jsx)(n.strong,{children:"Environment Variables"})," the server uses, and then click ",(0,t.jsx)(n.strong,{children:"Add Server"}),".\nThe default ",(0,t.jsx)(n.strong,{children:"SSE URL"})," is ",(0,t.jsx)(n.code,{children:"http://localhost:7860/api/v1/mcp/sse"}),". For more information, see ",(0,t.jsx)(n.a,{href:"#mcp-sse-mode",children:"Use SSE mode"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"uvx"})," is included with ",(0,t.jsx)(n.code,{children:"uv"})," in the Langflow package.\nTo use ",(0,t.jsx)(n.code,{children:"npx"})," server commands, you must first install an LTS release of ",(0,t.jsx)(n.a,{href:"https://docs.npmjs.com/downloading-and-installing-node-js-and-npm",children:"Node.js"}),".\nFor an example of an ",(0,t.jsx)(n.code,{children:"npx"})," MCP server in Langflow, see ",(0,t.jsx)(n.a,{href:"/mcp-component-astra",children:"Connect an Astra DB MCP server to Langflow"}),"."]})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To use environment variables in your server command, enter each variable in the ",(0,t.jsx)(n.strong,{children:"Env"})," fields as key-value pairs."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Langflow passes environment variables from the ",(0,t.jsx)(n.code,{children:".env"})," file to MCP, but it doesn't pass global variables declared in your Langflow ",(0,t.jsx)(n.strong,{children:"Settings"}),".\nTo define an MCP server environment variable as a global variable, add it to Langflow's ",(0,t.jsx)(n.code,{children:".env"})," file at startup.\nFor more information, see ",(0,t.jsx)(n.a,{href:"/configuration-global-variables",children:"global variables"}),"."]})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Tool"})," field, select a tool that you want this component to use, or leave the field blank to allow access to all tools provided by the MCP server."]}),"\n",(0,t.jsx)(n.p,{children:"If you select a specific tool, you might need to configure additional tool-specific fields. For information about tool-specific fields, see your MCP server's documentation."}),"\n",(0,t.jsxs)(n.p,{children:["At this point, the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component is serving a tool, but nothing is using the tool. The next steps explain how to make the tool available to an ",(0,t.jsxs)(n.a,{href:"/components-agents",children:[(0,t.jsx)(n.strong,{children:"Agent"})," component"]})," so that the agent can use the tool in its responses."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),", enable ",(0,t.jsx)(n.strong,{children:"Tool mode"})," so you can use the component with an agent."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Connect the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component's ",(0,t.jsx)(n.strong,{children:"Toolset"})," port to an ",(0,t.jsx)(n.strong,{children:"Agent"})," component's ",(0,t.jsx)(n.strong,{children:"Tools"})," port."]}),"\n",(0,t.jsxs)(n.p,{children:["If not already present in your flow, make sure you also attach ",(0,t.jsx)(n.strong,{children:"Chat Input"})," and ",(0,t.jsx)(n.strong,{children:"Chat Output"})," components to the ",(0,t.jsx)(n.strong,{children:"Agent"})," component."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"MCP Tools component in STDIO mode",src:s(63963).A+"",width:"4000",height:"2608"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Test your flow to make sure the MCP server is connected and the selected tool is used by the agent. Open the ",(0,t.jsx)(n.strong,{children:"Playground"}),", and then enter a prompt that uses the tool you connected through the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component."]}),"\n",(0,t.jsxs)(n.p,{children:["For example, if you use ",(0,t.jsx)(n.code,{children:"mcp-server-fetch"})," with the ",(0,t.jsx)(n.code,{children:"fetch"})," tool, you could ask the agent to summarize recent tech news. The agent calls the MCP server function ",(0,t.jsx)(n.code,{children:"fetch"}),", and then returns the response."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If you want the agent to be able to use more tools, repeat these steps to add more tools components with different servers or tools."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"mcp-sse-mode",children:"Connect a Langflow MCP server"}),"\n",(0,t.jsxs)(n.p,{children:["Every Langflow project runs a separate MCP server that exposes the project's flows as MCP tools.\nFor more information about your projects' MCP servers, including exposing flows as MCP tools, see ",(0,t.jsx)(n.a,{href:"/mcp-server",children:"Use Langflow as an MCP server"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["To leverage flows-as-tools, use the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component in ",(0,t.jsx)(n.strong,{children:"Server-Sent Events (SSE)"})," mode to connect to a project's ",(0,t.jsx)(n.code,{children:"/api/v1/mcp/sse"})," endpoint:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add an ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component to your flow, click ",(0,t.jsx)(l.A,{name:"Plus","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Add MCP Server"}),", and then select ",(0,t.jsx)(n.strong,{children:"SSE"})," mode."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"MCP SSE URL"})," field, modify the default address to point at your Langflow server's SSE endpoint. The default value for other Langflow installations is ",(0,t.jsx)(n.code,{children:"http://localhost:7860/api/v1/mcp/sse"}),".\nIn SSE mode, all flows available from the targeted server are treated as tools."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),", enable ",(0,t.jsx)(n.strong,{children:"Tool Mode"})," so you can use the component with an agent."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Connect the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component's ",(0,t.jsx)(n.strong,{children:"Toolset"})," port to an ",(0,t.jsx)(n.strong,{children:"Agent"})," component's ",(0,t.jsx)(n.strong,{children:"Tools"})," port."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If not already present in your flow, make sure you also attach ",(0,t.jsx)(n.strong,{children:"Chat Input"})," and ",(0,t.jsx)(n.strong,{children:"Chat Output"})," components to the ",(0,t.jsx)(n.strong,{children:"Agent"})," component."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"MCP component with SSE mode enabled",src:s(68347).A+"",width:"4000",height:"2438"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Test your flow to make sure the agent uses your flows to respond to queries. Open the ",(0,t.jsx)(n.strong,{children:"Playground"}),", and then enter a prompt that uses a flow that you connected through the ",(0,t.jsx)(n.strong,{children:"MCP Tools"})," component."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If you want the agent to be able to use more tools, repeat these steps to add more tools components with different servers or tools."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"mcp-tools-parameters",children:"MCP Tools parameters"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"command"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Input parameter. Stdio mode only. The MCP server startup command. Default: ",(0,t.jsx)(n.code,{children:"uvx mcp-sse-shim@latest"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"sse_url"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Input parameter. SSE mode only. The SSE URL for a Langflow project's MCP server. Default for Langflow Desktop: ",(0,t.jsx)(n.code,{children:"http://localhost:7868/"}),". Default for other installations: ",(0,t.jsx)(n.code,{children:"http://localhost:7860/api/v1/mcp/sse"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"tools"}),(0,t.jsx)(n.td,{children:"List[Tool]"}),(0,t.jsxs)(n.td,{children:["Output parameter. ",(0,t.jsx)(n.a,{href:"/data-types#tool",children:(0,t.jsx)(n.code,{children:"Tool"})})," object containing a list of tools exposed by the MCP server."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"manage-connected-mcp-servers",children:"Manage connected MCP servers"}),"\n",(0,t.jsxs)(n.p,{children:["To manage all MCP server connections for your Langflow client, click ",(0,t.jsx)(a.A,{})," ",(0,t.jsx)(n.strong,{children:"MCP servers"})," in the visual editor, or click your profile icon, select ",(0,t.jsx)(n.strong,{children:"Settings"}),", and then click ",(0,t.jsx)(n.strong,{children:"MCP Servers"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["To add a new MCP server, click ",(0,t.jsx)(n.strong,{children:"Add MCP Server"}),", and then follow the steps in ",(0,t.jsx)(n.a,{href:"#use-the-mcp-tools-component",children:"Use the MCP Tools component"})," to configure the connection and use the server in a flow."]}),"\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(l.A,{name:"Ellipsis","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"More"})," to edit or delete an MCP server connection."]}),"\n",(0,t.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/mcp-server",children:"Use Langflow as an MCP server"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/mcp-component-astra",children:"Use a DataStax Astra DB MCP server with the MCP Tools component"})}),"\n"]})]})}function x(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},45783:(e,n,s)=>{s.d(n,{A:()=>a});var o,t,r=s(96540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var n=1;nr.createElement("svg",l({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},s),e?r.createElement("title",{id:n},e):null,o||(o=r.createElement("g",{fill:"#fff",clipPath:"url(#a)"},r.createElement("path",{d:"M10.352 1.675a1.655 1.655 0 0 0-2.341 0L1.769 7.917a.552.552 0 1 1-.78-.78L7.23.893a2.759 2.759 0 0 1 4.682 2.341 2.75 2.75 0 0 1 2.34.78l.033.033a2.76 2.76 0 0 1 0 3.901L8.64 13.595a.184.184 0 0 0 0 .26l1.16 1.159a.552.552 0 0 1-.78.78l-1.16-1.16a1.287 1.287 0 0 1 0-1.82l5.645-5.645a1.655 1.655 0 0 0 0-2.34l-.032-.033a1.655 1.655 0 0 0-2.34-.002l-4.65 4.65-.002.003-.063.063a.552.552 0 1 1-.78-.78l4.715-4.716a1.655 1.655 0 0 0-.001-2.34"}),r.createElement("path",{d:"M9.572 3.235a.552.552 0 1 0-.78-.78L4.174 7.07a2.759 2.759 0 0 0 3.901 3.902l4.617-4.617a.552.552 0 0 0-.78-.78l-4.617 4.617a1.655 1.655 0 0 1-2.341-2.341z"}))),t||(t=r.createElement("defs",null,r.createElement("clipPath",{id:"a"},r.createElement("path",{fill:"#fff",d:"M0 0h16v16H0z"})))))},63963:(e,n,s)=>{s.d(n,{A:()=>o});const o=s.p+"assets/images/component-mcp-stdio-a13a643e61ceea972c4a3f64dd1ae72f.png"},68347:(e,n,s)=>{s.d(n,{A:()=>o});const o=s.p+"assets/images/component-mcp-sse-mode-2e742342a52231247733d8486ab612fd.png"}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.dc9112dc.js b/assets/js/runtime~main.f495a36a.js similarity index 98% rename from assets/js/runtime~main.dc9112dc.js rename to assets/js/runtime~main.f495a36a.js index d0a570e6ec..ae4bc6920f 100644 --- a/assets/js/runtime~main.dc9112dc.js +++ b/assets/js/runtime~main.f495a36a.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,d,b,c={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=c,r.c=t,e=[],r.O=(a,f,d,b)=>{if(!f){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every(e=>r.O[e](f[o]))?f.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[f,d,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,r.d(b,c),b},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((a,f)=>(r.f[f](e,a),a),[])),r.u=e=>"assets/js/"+({15:"d803fa53",30:"db8c087e",38:"a99a45c9",44:"e3f369d5",78:"b768a3a5",93:"a3702f61",126:"ae70dfbf",129:"dfa3dc90",188:"7f7a8893",253:"bb45d4f9",351:"b9acb8d9",375:"3d81f1cf",446:"a4232cf8",598:"db4f3bbd",600:"ee87c775",681:"ffa0f8b1",750:"33b5ee95",824:"5015646b",879:"8bee5443",956:"03735ec1",957:"c141421f",1006:"47e58a89",1151:"890279ba",1162:"f7e6b9d6",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1345:"fe6d5b4f",1408:"2fc7e024",1446:"c78349fc",1490:"0f761898",1567:"22dd74f7",1861:"8ad67c3b",1876:"5c3b537a",1895:"d375ca1d",2076:"common",2102:"755d162a",2138:"1a4e3797",2272:"ca5faf5d",2278:"c4280da9",2348:"f2da9399",2360:"017d425f",2394:"c2ea283c",2423:"19bcb67f",2457:"46abd5bb",2460:"954b19af",2469:"cd086441",2475:"1ab69cbd",2565:"622fd833",2651:"8cd0650d",2741:"43ad9ba4",2752:"e14655eb",2888:"32270e71",2969:"f0ad3fbb",2990:"1d50b418",3164:"67f2dc6c",3240:"b079b393",3247:"f0b67137",3263:"730da84e",3345:"040305fb",3353:"2b4d41d7",3361:"8f633f11",3368:"efa0f9ee",3387:"3d67876e",3468:"c76bd485",3500:"c3c63498",3536:"2eb731bc",4036:"fbcfc90d",4085:"cb17b4e0",4218:"d5bb0e16",4314:"f6a246db",4341:"e1a0f423",4384:"622bdc6f",4573:"baacc2a1",4612:"6a9eca1a",4614:"e55b8e98",4644:"d3e886ab",4876:"44691977",4907:"86116998",4995:"62266e9d",5048:"3c440e04",5110:"e9fe1d10",5144:"944c5f91",5200:"ff7f32ba",5333:"70909872",5397:"eba86ea4",5412:"a6d50436",5660:"1b208f60",5663:"b1379b2b",5739:"69079906",5742:"aba21aa0",5757:"ad42ff54",5761:"7f193c41",5838:"bbb8ec1d",5903:"69d616f2",6006:"7819cc1c",6108:"2fed9fb3",6224:"ef9aa223",6256:"6888b60e",6289:"45e5859c",6311:"cce672fb",6459:"290c78e6",6513:"f13693f0",6538:"719cba95",6601:"81bb6a5c",6801:"acefda8b",6999:"d5ec984b",7098:"a7bd4aaa",7118:"7996108c",7243:"5d9d4350",7356:"2ea623f2",7484:"ad01e028",7502:"1a547ad8",7512:"4c09a7b3",7586:"17856424",7720:"3bfbe7c9",7807:"1a8a0a64",7824:"2b56b65e",7829:"7c27dc91",7841:"0132780e",7859:"593d9d00",7902:"619c7267",7964:"ff35961a",7968:"9b0af131",8090:"6e85978c",8267:"02f8077b",8268:"a4b6c971",8269:"c7f91cbe",8294:"f2bedfce",8336:"e7fd9095",8392:"20177945",8401:"17896441",8571:"da1ad91e",8593:"56350599",8607:"681e5335",8649:"7de42fc9",8702:"42962acd",8750:"8a484c94",8765:"1a2eaade",8822:"555ae514",8862:"e87b52ac",8963:"56c23a02",8990:"5f1a63c6",9033:"9f55b2fc",9048:"a94703ab",9213:"62d1268c",9227:"7e40e6b3",9264:"c7f32161",9315:"16faf8bf",9331:"ffcd190c",9363:"f3312674",9459:"97254d1d",9482:"a9c1003f",9610:"453ae64a",9640:"3b25a2ae",9647:"5e95c892",9674:"feac1fba",9712:"d8c8efb9",9763:"aece522a",9781:"b796be74",9897:"f0eeb72e",9976:"230d5fdc",9986:"d1f3cfe5"}[e]||e)+"."+{15:"9c473cc0",30:"588897ea",38:"b8ed027f",44:"3af5a9c7",78:"7ad009cf",93:"9ea9cffa",126:"a7a5f9a6",129:"3ba52b1c",188:"4e4792ff",253:"602a1444",351:"51b77e3f",375:"acd073ae",416:"3c613765",446:"6fa3dbda",598:"b3822b4a",600:"0b7c16ab",681:"c0f429a0",750:"2685b869",824:"f6020b6d",879:"ab0d5951",956:"c0e5141d",957:"da9e1d2b",1006:"6ce8a2b3",1151:"0dd8c326",1162:"b63a4c1a",1193:"242eecf4",1303:"e992c50d",1308:"cae4889c",1345:"a266d6b4",1408:"5dcb045e",1446:"983947c6",1490:"fe4345ff",1567:"03827990",1861:"ad6f13d6",1876:"6bdd7026",1895:"e4c10299",2076:"cb526175",2102:"bd1ad4bd",2138:"ba6348e7",2237:"8bc4ac99",2272:"7051a23a",2278:"1ddd08e1",2348:"b86340f7",2360:"b5c0fc56",2394:"121a1bfa",2423:"5c01df73",2457:"acf2700c",2460:"9974300d",2469:"e484157e",2475:"750b5600",2565:"c0855ab5",2651:"7e09ae01",2741:"d019d0b4",2752:"c3faf5cc",2888:"60c72989",2969:"01715cea",2990:"5d4c787b",3164:"29b40649",3240:"45c91752",3247:"57df4572",3263:"eed80395",3345:"21c3547d",3353:"103e3390",3361:"b088dd3a",3368:"c96c639e",3387:"90f48fa7",3468:"adfc951f",3500:"18393c47",3536:"c0823170",4036:"bce8d46d",4085:"63c3ce67",4115:"24161c0a",4218:"71769542",4314:"b71b2f50",4341:"3378ef63",4384:"1a41038a",4573:"f98dc6da",4612:"b3b7c321",4614:"0976692d",4644:"78148375",4754:"5b9f9c4a",4876:"5ecf010a",4907:"dac44b60",4995:"5a913426",5048:"0ff3b516",5110:"33b03681",5144:"a356ed87",5200:"d646b528",5333:"b871d080",5397:"d8120b97",5412:"9f3949c5",5660:"4f9d6a2a",5663:"9ab44bc6",5739:"45ed451e",5742:"60b1d5b2",5757:"303d31a7",5761:"c1b1a11e",5838:"f4c986e1",5903:"7bfe45dc",6006:"3782eff4",6108:"739b3f08",6224:"ba0a329e",6256:"2d642783",6289:"71aa9f57",6311:"51b089df",6459:"c563dca9",6513:"5855f531",6538:"13f4f1bb",6601:"2c7b9168",6801:"7a082c1b",6999:"f53cf682",7098:"fc1f6434",7118:"99cbb21e",7243:"b03b36c5",7356:"9e767a97",7484:"7e1f923c",7502:"e9ba960c",7512:"e67b8da5",7586:"addc410c",7720:"6b37443c",7807:"488d1d4c",7824:"b8b871bd",7829:"e275577d",7841:"1294a085",7859:"fe6d9284",7902:"141ef15f",7964:"bd456230",7968:"7e2db735",8090:"4dfa2cd0",8158:"20de8b80",8267:"01bbf89b",8268:"b958c68a",8269:"1c2a69de",8294:"a8414e18",8336:"753075cb",8392:"af9b5e46",8401:"56391867",8571:"28795f86",8593:"9d81778d",8607:"0a35e402",8649:"71663b3e",8702:"cbda211f",8750:"e022c31a",8765:"01d94d6b",8822:"66b38a8d",8862:"282df59f",8913:"47209f3b",8963:"18acdb77",8990:"0a8bb11a",9033:"4598527a",9048:"8548a600",9213:"fbd36b40",9227:"e123f26e",9264:"04d2186d",9315:"38238c02",9331:"db87598b",9363:"6229918d",9459:"36722d67",9482:"2068dcd9",9610:"d9faf170",9640:"58b339b5",9647:"5cb928a1",9674:"7677c370",9712:"517bdf0f",9763:"4c61d226",9781:"500582d3",9897:"e22bb448",9976:"ecd52ce3",9986:"5f537262"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},b="langflow-docs:",r.l=(e,a,f,c)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach(e=>e(f)),a)return a(f)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17856424:"7586",17896441:"8401",20177945:"8392",44691977:"4876",56350599:"8593",69079906:"5739",70909872:"5333",86116998:"4907",d803fa53:"15",db8c087e:"30",a99a45c9:"38",e3f369d5:"44",b768a3a5:"78",a3702f61:"93",ae70dfbf:"126",dfa3dc90:"129","7f7a8893":"188",bb45d4f9:"253",b9acb8d9:"351","3d81f1cf":"375",a4232cf8:"446",db4f3bbd:"598",ee87c775:"600",ffa0f8b1:"681","33b5ee95":"750","5015646b":"824","8bee5443":"879","03735ec1":"956",c141421f:"957","47e58a89":"1006","890279ba":"1151",f7e6b9d6:"1162","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",fe6d5b4f:"1345","2fc7e024":"1408",c78349fc:"1446","0f761898":"1490","22dd74f7":"1567","8ad67c3b":"1861","5c3b537a":"1876",d375ca1d:"1895",common:"2076","755d162a":"2102","1a4e3797":"2138",ca5faf5d:"2272",c4280da9:"2278",f2da9399:"2348","017d425f":"2360",c2ea283c:"2394","19bcb67f":"2423","46abd5bb":"2457","954b19af":"2460",cd086441:"2469","1ab69cbd":"2475","622fd833":"2565","8cd0650d":"2651","43ad9ba4":"2741",e14655eb:"2752","32270e71":"2888",f0ad3fbb:"2969","1d50b418":"2990","67f2dc6c":"3164",b079b393:"3240",f0b67137:"3247","730da84e":"3263","040305fb":"3345","2b4d41d7":"3353","8f633f11":"3361",efa0f9ee:"3368","3d67876e":"3387",c76bd485:"3468",c3c63498:"3500","2eb731bc":"3536",fbcfc90d:"4036",cb17b4e0:"4085",d5bb0e16:"4218",f6a246db:"4314",e1a0f423:"4341","622bdc6f":"4384",baacc2a1:"4573","6a9eca1a":"4612",e55b8e98:"4614",d3e886ab:"4644","62266e9d":"4995","3c440e04":"5048",e9fe1d10:"5110","944c5f91":"5144",ff7f32ba:"5200",eba86ea4:"5397",a6d50436:"5412","1b208f60":"5660",b1379b2b:"5663",aba21aa0:"5742",ad42ff54:"5757","7f193c41":"5761",bbb8ec1d:"5838","69d616f2":"5903","7819cc1c":"6006","2fed9fb3":"6108",ef9aa223:"6224","6888b60e":"6256","45e5859c":"6289",cce672fb:"6311","290c78e6":"6459",f13693f0:"6513","719cba95":"6538","81bb6a5c":"6601",acefda8b:"6801",d5ec984b:"6999",a7bd4aaa:"7098","7996108c":"7118","5d9d4350":"7243","2ea623f2":"7356",ad01e028:"7484","1a547ad8":"7502","4c09a7b3":"7512","3bfbe7c9":"7720","1a8a0a64":"7807","2b56b65e":"7824","7c27dc91":"7829","0132780e":"7841","593d9d00":"7859","619c7267":"7902",ff35961a:"7964","9b0af131":"7968","6e85978c":"8090","02f8077b":"8267",a4b6c971:"8268",c7f91cbe:"8269",f2bedfce:"8294",e7fd9095:"8336",da1ad91e:"8571","681e5335":"8607","7de42fc9":"8649","42962acd":"8702","8a484c94":"8750","1a2eaade":"8765","555ae514":"8822",e87b52ac:"8862","56c23a02":"8963","5f1a63c6":"8990","9f55b2fc":"9033",a94703ab:"9048","62d1268c":"9213","7e40e6b3":"9227",c7f32161:"9264","16faf8bf":"9315",ffcd190c:"9331",f3312674:"9363","97254d1d":"9459",a9c1003f:"9482","453ae64a":"9610","3b25a2ae":"9640","5e95c892":"9647",feac1fba:"9674",d8c8efb9:"9712",aece522a:"9763",b796be74:"9781",f0eeb72e:"9897","230d5fdc":"9976",d1f3cfe5:"9986"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var b=new Promise((f,b)=>d=e[a]=[f,b]);f.push(d[2]=b);var c=r.p+r.u(a),t=new Error;r.l(c,f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var b=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,d[1](t)}},"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,b,c=f[0],t=f[1],o=f[2],n=0;if(c.some(a=>0!==e[a])){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n{"use strict";var e,a,f,d,b,c={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=c,r.c=t,e=[],r.O=(a,f,d,b)=>{if(!f){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every(e=>r.O[e](f[o]))?f.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[f,d,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,r.d(b,c),b},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((a,f)=>(r.f[f](e,a),a),[])),r.u=e=>"assets/js/"+({15:"d803fa53",30:"db8c087e",38:"a99a45c9",44:"e3f369d5",78:"b768a3a5",93:"a3702f61",126:"ae70dfbf",129:"dfa3dc90",188:"7f7a8893",253:"bb45d4f9",351:"b9acb8d9",375:"3d81f1cf",446:"a4232cf8",598:"db4f3bbd",600:"ee87c775",681:"ffa0f8b1",750:"33b5ee95",824:"5015646b",879:"8bee5443",956:"03735ec1",957:"c141421f",1006:"47e58a89",1151:"890279ba",1162:"f7e6b9d6",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1345:"fe6d5b4f",1408:"2fc7e024",1446:"c78349fc",1490:"0f761898",1567:"22dd74f7",1861:"8ad67c3b",1876:"5c3b537a",1895:"d375ca1d",2076:"common",2102:"755d162a",2138:"1a4e3797",2272:"ca5faf5d",2278:"c4280da9",2348:"f2da9399",2360:"017d425f",2394:"c2ea283c",2423:"19bcb67f",2457:"46abd5bb",2460:"954b19af",2469:"cd086441",2475:"1ab69cbd",2565:"622fd833",2651:"8cd0650d",2741:"43ad9ba4",2752:"e14655eb",2888:"32270e71",2969:"f0ad3fbb",2990:"1d50b418",3164:"67f2dc6c",3240:"b079b393",3247:"f0b67137",3263:"730da84e",3345:"040305fb",3353:"2b4d41d7",3361:"8f633f11",3368:"efa0f9ee",3387:"3d67876e",3468:"c76bd485",3500:"c3c63498",3536:"2eb731bc",4036:"fbcfc90d",4085:"cb17b4e0",4218:"d5bb0e16",4314:"f6a246db",4341:"e1a0f423",4384:"622bdc6f",4573:"baacc2a1",4612:"6a9eca1a",4614:"e55b8e98",4644:"d3e886ab",4876:"44691977",4907:"86116998",4995:"62266e9d",5048:"3c440e04",5110:"e9fe1d10",5144:"944c5f91",5200:"ff7f32ba",5333:"70909872",5397:"eba86ea4",5412:"a6d50436",5660:"1b208f60",5663:"b1379b2b",5739:"69079906",5742:"aba21aa0",5757:"ad42ff54",5761:"7f193c41",5838:"bbb8ec1d",5903:"69d616f2",6006:"7819cc1c",6108:"2fed9fb3",6224:"ef9aa223",6256:"6888b60e",6289:"45e5859c",6311:"cce672fb",6459:"290c78e6",6513:"f13693f0",6538:"719cba95",6601:"81bb6a5c",6801:"acefda8b",6999:"d5ec984b",7098:"a7bd4aaa",7118:"7996108c",7243:"5d9d4350",7356:"2ea623f2",7484:"ad01e028",7502:"1a547ad8",7512:"4c09a7b3",7586:"17856424",7720:"3bfbe7c9",7807:"1a8a0a64",7824:"2b56b65e",7829:"7c27dc91",7841:"0132780e",7859:"593d9d00",7902:"619c7267",7964:"ff35961a",7968:"9b0af131",8090:"6e85978c",8267:"02f8077b",8268:"a4b6c971",8269:"c7f91cbe",8294:"f2bedfce",8336:"e7fd9095",8392:"20177945",8401:"17896441",8571:"da1ad91e",8593:"56350599",8607:"681e5335",8649:"7de42fc9",8702:"42962acd",8750:"8a484c94",8765:"1a2eaade",8822:"555ae514",8862:"e87b52ac",8963:"56c23a02",8990:"5f1a63c6",9033:"9f55b2fc",9048:"a94703ab",9213:"62d1268c",9227:"7e40e6b3",9264:"c7f32161",9315:"16faf8bf",9331:"ffcd190c",9363:"f3312674",9459:"97254d1d",9482:"a9c1003f",9610:"453ae64a",9640:"3b25a2ae",9647:"5e95c892",9674:"feac1fba",9712:"d8c8efb9",9763:"aece522a",9781:"b796be74",9897:"f0eeb72e",9976:"230d5fdc",9986:"d1f3cfe5"}[e]||e)+"."+{15:"9c473cc0",30:"588897ea",38:"b8ed027f",44:"3af5a9c7",78:"7ad009cf",93:"9ea9cffa",126:"a7a5f9a6",129:"3ba52b1c",188:"4e4792ff",253:"602a1444",351:"51b77e3f",375:"acd073ae",416:"3c613765",446:"6fa3dbda",598:"b3822b4a",600:"0b7c16ab",681:"c0f429a0",750:"2685b869",824:"f6020b6d",879:"ab0d5951",956:"c0e5141d",957:"da9e1d2b",1006:"6ce8a2b3",1151:"0dd8c326",1162:"b63a4c1a",1193:"242eecf4",1303:"e992c50d",1308:"cae4889c",1345:"107bf5c4",1408:"5dcb045e",1446:"983947c6",1490:"fe4345ff",1567:"03827990",1861:"ad6f13d6",1876:"6bdd7026",1895:"e4c10299",2076:"cb526175",2102:"bd1ad4bd",2138:"ba6348e7",2237:"8bc4ac99",2272:"7051a23a",2278:"1ddd08e1",2348:"b86340f7",2360:"b5c0fc56",2394:"121a1bfa",2423:"5c01df73",2457:"acf2700c",2460:"9974300d",2469:"e484157e",2475:"750b5600",2565:"c0855ab5",2651:"7e09ae01",2741:"d019d0b4",2752:"c3faf5cc",2888:"60c72989",2969:"01715cea",2990:"5d4c787b",3164:"29b40649",3240:"45c91752",3247:"57df4572",3263:"eed80395",3345:"21c3547d",3353:"103e3390",3361:"b088dd3a",3368:"c96c639e",3387:"90f48fa7",3468:"adfc951f",3500:"18393c47",3536:"c0823170",4036:"bce8d46d",4085:"63c3ce67",4115:"24161c0a",4218:"71769542",4314:"b71b2f50",4341:"3378ef63",4384:"1a41038a",4573:"f98dc6da",4612:"b3b7c321",4614:"0976692d",4644:"78148375",4754:"5b9f9c4a",4876:"5ecf010a",4907:"dac44b60",4995:"5a913426",5048:"0ff3b516",5110:"33b03681",5144:"a356ed87",5200:"d646b528",5333:"4826cc3c",5397:"d8120b97",5412:"9f3949c5",5660:"4f9d6a2a",5663:"9ab44bc6",5739:"45ed451e",5742:"60b1d5b2",5757:"303d31a7",5761:"c1b1a11e",5838:"f4c986e1",5903:"7bfe45dc",6006:"3782eff4",6108:"739b3f08",6224:"ba0a329e",6256:"2d642783",6289:"71aa9f57",6311:"51b089df",6459:"c563dca9",6513:"5855f531",6538:"13f4f1bb",6601:"2c7b9168",6801:"7a082c1b",6999:"f53cf682",7098:"fc1f6434",7118:"99cbb21e",7243:"b03b36c5",7356:"9e767a97",7484:"7e1f923c",7502:"e9ba960c",7512:"1b93466d",7586:"addc410c",7720:"ee160c19",7807:"488d1d4c",7824:"b8b871bd",7829:"e275577d",7841:"1294a085",7859:"fe6d9284",7902:"141ef15f",7964:"bd456230",7968:"7e2db735",8090:"4dfa2cd0",8158:"20de8b80",8267:"01bbf89b",8268:"b958c68a",8269:"1c2a69de",8294:"a8414e18",8336:"753075cb",8392:"af9b5e46",8401:"56391867",8571:"28795f86",8593:"9d81778d",8607:"0a35e402",8649:"71663b3e",8702:"cbda211f",8750:"e022c31a",8765:"01d94d6b",8822:"66b38a8d",8862:"282df59f",8913:"47209f3b",8963:"18acdb77",8990:"0a8bb11a",9033:"4598527a",9048:"8548a600",9213:"fbd36b40",9227:"e123f26e",9264:"04d2186d",9315:"38238c02",9331:"db87598b",9363:"6229918d",9459:"36722d67",9482:"2068dcd9",9610:"d9faf170",9640:"58b339b5",9647:"5cb928a1",9674:"7677c370",9712:"517bdf0f",9763:"4c61d226",9781:"500582d3",9897:"e22bb448",9976:"ecd52ce3",9986:"5f537262"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},b="langflow-docs:",r.l=(e,a,f,c)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach(e=>e(f)),a)return a(f)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17856424:"7586",17896441:"8401",20177945:"8392",44691977:"4876",56350599:"8593",69079906:"5739",70909872:"5333",86116998:"4907",d803fa53:"15",db8c087e:"30",a99a45c9:"38",e3f369d5:"44",b768a3a5:"78",a3702f61:"93",ae70dfbf:"126",dfa3dc90:"129","7f7a8893":"188",bb45d4f9:"253",b9acb8d9:"351","3d81f1cf":"375",a4232cf8:"446",db4f3bbd:"598",ee87c775:"600",ffa0f8b1:"681","33b5ee95":"750","5015646b":"824","8bee5443":"879","03735ec1":"956",c141421f:"957","47e58a89":"1006","890279ba":"1151",f7e6b9d6:"1162","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",fe6d5b4f:"1345","2fc7e024":"1408",c78349fc:"1446","0f761898":"1490","22dd74f7":"1567","8ad67c3b":"1861","5c3b537a":"1876",d375ca1d:"1895",common:"2076","755d162a":"2102","1a4e3797":"2138",ca5faf5d:"2272",c4280da9:"2278",f2da9399:"2348","017d425f":"2360",c2ea283c:"2394","19bcb67f":"2423","46abd5bb":"2457","954b19af":"2460",cd086441:"2469","1ab69cbd":"2475","622fd833":"2565","8cd0650d":"2651","43ad9ba4":"2741",e14655eb:"2752","32270e71":"2888",f0ad3fbb:"2969","1d50b418":"2990","67f2dc6c":"3164",b079b393:"3240",f0b67137:"3247","730da84e":"3263","040305fb":"3345","2b4d41d7":"3353","8f633f11":"3361",efa0f9ee:"3368","3d67876e":"3387",c76bd485:"3468",c3c63498:"3500","2eb731bc":"3536",fbcfc90d:"4036",cb17b4e0:"4085",d5bb0e16:"4218",f6a246db:"4314",e1a0f423:"4341","622bdc6f":"4384",baacc2a1:"4573","6a9eca1a":"4612",e55b8e98:"4614",d3e886ab:"4644","62266e9d":"4995","3c440e04":"5048",e9fe1d10:"5110","944c5f91":"5144",ff7f32ba:"5200",eba86ea4:"5397",a6d50436:"5412","1b208f60":"5660",b1379b2b:"5663",aba21aa0:"5742",ad42ff54:"5757","7f193c41":"5761",bbb8ec1d:"5838","69d616f2":"5903","7819cc1c":"6006","2fed9fb3":"6108",ef9aa223:"6224","6888b60e":"6256","45e5859c":"6289",cce672fb:"6311","290c78e6":"6459",f13693f0:"6513","719cba95":"6538","81bb6a5c":"6601",acefda8b:"6801",d5ec984b:"6999",a7bd4aaa:"7098","7996108c":"7118","5d9d4350":"7243","2ea623f2":"7356",ad01e028:"7484","1a547ad8":"7502","4c09a7b3":"7512","3bfbe7c9":"7720","1a8a0a64":"7807","2b56b65e":"7824","7c27dc91":"7829","0132780e":"7841","593d9d00":"7859","619c7267":"7902",ff35961a:"7964","9b0af131":"7968","6e85978c":"8090","02f8077b":"8267",a4b6c971:"8268",c7f91cbe:"8269",f2bedfce:"8294",e7fd9095:"8336",da1ad91e:"8571","681e5335":"8607","7de42fc9":"8649","42962acd":"8702","8a484c94":"8750","1a2eaade":"8765","555ae514":"8822",e87b52ac:"8862","56c23a02":"8963","5f1a63c6":"8990","9f55b2fc":"9033",a94703ab:"9048","62d1268c":"9213","7e40e6b3":"9227",c7f32161:"9264","16faf8bf":"9315",ffcd190c:"9331",f3312674:"9363","97254d1d":"9459",a9c1003f:"9482","453ae64a":"9610","3b25a2ae":"9640","5e95c892":"9647",feac1fba:"9674",d8c8efb9:"9712",aece522a:"9763",b796be74:"9781",f0eeb72e:"9897","230d5fdc":"9976",d1f3cfe5:"9986"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var b=new Promise((f,b)=>d=e[a]=[f,b]);f.push(d[2]=b);var c=r.p+r.u(a),t=new Error;r.l(c,f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var b=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,d[1](t)}},"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,b,c=f[0],t=f[1],o=f[2],n=0;if(c.some(a=>0!==e[a])){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n - + diff --git a/bundles-amazon.html b/bundles-amazon.html index 51d90af080..367a6fc065 100644 --- a/bundles-amazon.html +++ b/bundles-amazon.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-anthropic.html b/bundles-anthropic.html index 3ecf2f6c1e..0d4224e2e2 100644 --- a/bundles-anthropic.html +++ b/bundles-anthropic.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-apify.html b/bundles-apify.html index 0987114138..ea8828bbc1 100644 --- a/bundles-apify.html +++ b/bundles-apify.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-arxiv.html b/bundles-arxiv.html index 7f95473bb8..c7a9d4b81a 100644 --- a/bundles-arxiv.html +++ b/bundles-arxiv.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-assemblyai.html b/bundles-assemblyai.html index 902f1a2d25..29d99d3fb1 100644 --- a/bundles-assemblyai.html +++ b/bundles-assemblyai.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-azure.html b/bundles-azure.html index b34426d671..8fd69dd97d 100644 --- a/bundles-azure.html +++ b/bundles-azure.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-baidu.html b/bundles-baidu.html index 68d6929632..ef384ec458 100644 --- a/bundles-baidu.html +++ b/bundles-baidu.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-bing.html b/bundles-bing.html index 6ae8bbd9fc..4d196d84c1 100644 --- a/bundles-bing.html +++ b/bundles-bing.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-cassandra.html b/bundles-cassandra.html index 68b8ec3f22..f047cb6605 100644 --- a/bundles-cassandra.html +++ b/bundles-cassandra.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-chroma.html b/bundles-chroma.html index b2a846726c..164f3ad123 100644 --- a/bundles-chroma.html +++ b/bundles-chroma.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-cleanlab.html b/bundles-cleanlab.html index 2b33ff3f08..3b7773358a 100644 --- a/bundles-cleanlab.html +++ b/bundles-cleanlab.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-clickhouse.html b/bundles-clickhouse.html index 8d967ebb87..588bb64674 100644 --- a/bundles-clickhouse.html +++ b/bundles-clickhouse.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-cloudflare.html b/bundles-cloudflare.html index a9b2488e59..0406a34bf3 100644 --- a/bundles-cloudflare.html +++ b/bundles-cloudflare.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-cohere.html b/bundles-cohere.html index faeaa9d7d7..18a2a59554 100644 --- a/bundles-cohere.html +++ b/bundles-cohere.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-composio.html b/bundles-composio.html index e2ab619657..128826e247 100644 --- a/bundles-composio.html +++ b/bundles-composio.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-couchbase.html b/bundles-couchbase.html index bf5a898210..167aa16a22 100644 --- a/bundles-couchbase.html +++ b/bundles-couchbase.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-datastax.html b/bundles-datastax.html index 2fd2f8bf33..d25b7f2be5 100644 --- a/bundles-datastax.html +++ b/bundles-datastax.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-deepseek.html b/bundles-deepseek.html index 24942846d5..d521b15852 100644 --- a/bundles-deepseek.html +++ b/bundles-deepseek.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-docling.html b/bundles-docling.html index 22161588c7..6ce46b573e 100644 --- a/bundles-docling.html +++ b/bundles-docling.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-duckduckgo.html b/bundles-duckduckgo.html index 01e3831a3c..d58cfe7178 100644 --- a/bundles-duckduckgo.html +++ b/bundles-duckduckgo.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-elastic.html b/bundles-elastic.html index 0c01dbbf6d..840b17e84d 100644 --- a/bundles-elastic.html +++ b/bundles-elastic.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-exa.html b/bundles-exa.html index 5418c2eb98..783283555b 100644 --- a/bundles-exa.html +++ b/bundles-exa.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-faiss.html b/bundles-faiss.html index 17102c2d78..da6eae4844 100644 --- a/bundles-faiss.html +++ b/bundles-faiss.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-glean.html b/bundles-glean.html index bd517d1033..406c89414e 100644 --- a/bundles-glean.html +++ b/bundles-glean.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-google.html b/bundles-google.html index 1883b4f14c..46909b0e1d 100644 --- a/bundles-google.html +++ b/bundles-google.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-groq.html b/bundles-groq.html index 1d778142f5..98ff0e1127 100644 --- a/bundles-groq.html +++ b/bundles-groq.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-huggingface.html b/bundles-huggingface.html index 2886fe0590..e23a05c53f 100644 --- a/bundles-huggingface.html +++ b/bundles-huggingface.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-ibm.html b/bundles-ibm.html index 54858a0ece..0068c3c638 100644 --- a/bundles-ibm.html +++ b/bundles-ibm.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-icosacomputing.html b/bundles-icosacomputing.html index abce1ecfd3..3d0707b4e8 100644 --- a/bundles-icosacomputing.html +++ b/bundles-icosacomputing.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-langchain.html b/bundles-langchain.html index b13bb46e1f..8e1caea7f2 100644 --- a/bundles-langchain.html +++ b/bundles-langchain.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-lmstudio.html b/bundles-lmstudio.html index 799e62f7e6..2aa463b24b 100644 --- a/bundles-lmstudio.html +++ b/bundles-lmstudio.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-maritalk.html b/bundles-maritalk.html index 254bf45584..25b78f93c6 100644 --- a/bundles-maritalk.html +++ b/bundles-maritalk.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-mem0.html b/bundles-mem0.html index 4b589cfbf4..d6786a1aee 100644 --- a/bundles-mem0.html +++ b/bundles-mem0.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-milvus.html b/bundles-milvus.html index d94704c324..f9040e77af 100644 --- a/bundles-milvus.html +++ b/bundles-milvus.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-mistralai.html b/bundles-mistralai.html index 442daa475b..126b44180d 100644 --- a/bundles-mistralai.html +++ b/bundles-mistralai.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-mongodb.html b/bundles-mongodb.html index 005f7d80f4..d8edf2749f 100644 --- a/bundles-mongodb.html +++ b/bundles-mongodb.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-notion.html b/bundles-notion.html index 9d7649ae7e..84edc8cd29 100644 --- a/bundles-notion.html +++ b/bundles-notion.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-novita.html b/bundles-novita.html index 542a4d301c..7010a1f2da 100644 --- a/bundles-novita.html +++ b/bundles-novita.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-nvidia.html b/bundles-nvidia.html index e818cba099..0f5e81a05b 100644 --- a/bundles-nvidia.html +++ b/bundles-nvidia.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-ollama.html b/bundles-ollama.html index e3998b6342..2397267348 100644 --- a/bundles-ollama.html +++ b/bundles-ollama.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-openai.html b/bundles-openai.html index e43eaa71d1..6a4add1761 100644 --- a/bundles-openai.html +++ b/bundles-openai.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-openrouter.html b/bundles-openrouter.html index 99417e859e..f9426b632c 100644 --- a/bundles-openrouter.html +++ b/bundles-openrouter.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-perplexity.html b/bundles-perplexity.html index 0fd4639e58..0f1e8585c0 100644 --- a/bundles-perplexity.html +++ b/bundles-perplexity.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-pgvector.html b/bundles-pgvector.html index 362d03af66..8edbb9265a 100644 --- a/bundles-pgvector.html +++ b/bundles-pgvector.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-pinecone.html b/bundles-pinecone.html index 8d86516440..89cc83c66b 100644 --- a/bundles-pinecone.html +++ b/bundles-pinecone.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-qdrant.html b/bundles-qdrant.html index 3a0512ab4c..6a24c07c1f 100644 --- a/bundles-qdrant.html +++ b/bundles-qdrant.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-redis.html b/bundles-redis.html index 2aaa942207..aa8f8b264e 100644 --- a/bundles-redis.html +++ b/bundles-redis.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-sambanova.html b/bundles-sambanova.html index c0b5ea8cde..21aa5993e5 100644 --- a/bundles-sambanova.html +++ b/bundles-sambanova.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-searchapi.html b/bundles-searchapi.html index a487c4bf94..137402d534 100644 --- a/bundles-searchapi.html +++ b/bundles-searchapi.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-serper.html b/bundles-serper.html index 44926ed63f..d81fb94624 100644 --- a/bundles-serper.html +++ b/bundles-serper.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-supabase.html b/bundles-supabase.html index 624b92f01f..9f451af93f 100644 --- a/bundles-supabase.html +++ b/bundles-supabase.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-upstash.html b/bundles-upstash.html index 988a73d68b..a58afacb7f 100644 --- a/bundles-upstash.html +++ b/bundles-upstash.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-vectara.html b/bundles-vectara.html index 14edc39c78..ea7796fd7a 100644 --- a/bundles-vectara.html +++ b/bundles-vectara.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-vertexai.html b/bundles-vertexai.html index 6a9a165077..e9ba4d12f0 100644 --- a/bundles-vertexai.html +++ b/bundles-vertexai.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-weaviate.html b/bundles-weaviate.html index 3029e6b026..59abfe2799 100644 --- a/bundles-weaviate.html +++ b/bundles-weaviate.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-wikipedia.html b/bundles-wikipedia.html index 22e4736ad2..df79ab1843 100644 --- a/bundles-wikipedia.html +++ b/bundles-wikipedia.html @@ -24,7 +24,7 @@ - + diff --git a/bundles-xai.html b/bundles-xai.html index 76dd6e909d..4e825757e7 100644 --- a/bundles-xai.html +++ b/bundles-xai.html @@ -24,7 +24,7 @@ - + diff --git a/chat-with-files.html b/chat-with-files.html index 2b669cfbbe..793fcc4a51 100644 --- a/chat-with-files.html +++ b/chat-with-files.html @@ -24,7 +24,7 @@ - + diff --git a/chat-with-rag.html b/chat-with-rag.html index b23e0737ae..ac987d7b34 100644 --- a/chat-with-rag.html +++ b/chat-with-rag.html @@ -24,7 +24,7 @@ - + diff --git a/components-agents.html b/components-agents.html index 63ad4ea3b3..91052bb07b 100644 --- a/components-agents.html +++ b/components-agents.html @@ -24,7 +24,7 @@ - + diff --git a/components-bundle-components.html b/components-bundle-components.html index 744cac0fbd..33cb770838 100644 --- a/components-bundle-components.html +++ b/components-bundle-components.html @@ -24,7 +24,7 @@ - + diff --git a/components-custom-components.html b/components-custom-components.html index 2e0fbffdf8..18f0efd306 100644 --- a/components-custom-components.html +++ b/components-custom-components.html @@ -24,7 +24,7 @@ - + diff --git a/components-data.html b/components-data.html index cf36820cc4..0897fe1815 100644 --- a/components-data.html +++ b/components-data.html @@ -24,7 +24,7 @@ - + diff --git a/components-embedding-models.html b/components-embedding-models.html index 0af7b7bf90..d8d23ddcf0 100644 --- a/components-embedding-models.html +++ b/components-embedding-models.html @@ -24,7 +24,7 @@ - + diff --git a/components-helpers.html b/components-helpers.html index 09eaa39b43..59921b2e00 100644 --- a/components-helpers.html +++ b/components-helpers.html @@ -24,7 +24,7 @@ - + diff --git a/components-io.html b/components-io.html index 5add45b232..87dcb8d20c 100644 --- a/components-io.html +++ b/components-io.html @@ -24,7 +24,7 @@ - + diff --git a/components-logic.html b/components-logic.html index 4f718d29f6..d3275af2cb 100644 --- a/components-logic.html +++ b/components-logic.html @@ -24,7 +24,7 @@ - + diff --git a/components-models.html b/components-models.html index 402a085059..2cf7388a8c 100644 --- a/components-models.html +++ b/components-models.html @@ -24,7 +24,7 @@ - + diff --git a/components-processing.html b/components-processing.html index 01c749174c..4b926c0069 100644 --- a/components-processing.html +++ b/components-processing.html @@ -24,7 +24,7 @@ - + diff --git a/components-prompts.html b/components-prompts.html index f8d7949c92..041c98a485 100644 --- a/components-prompts.html +++ b/components-prompts.html @@ -24,7 +24,7 @@ - + diff --git a/components-tools.html b/components-tools.html index 589b7b9849..140eeae83d 100644 --- a/components-tools.html +++ b/components-tools.html @@ -24,7 +24,7 @@ - + diff --git a/concepts-components.html b/concepts-components.html index 8e824a722f..4104a254e3 100644 --- a/concepts-components.html +++ b/concepts-components.html @@ -24,7 +24,7 @@ - + diff --git a/concepts-file-management.html b/concepts-file-management.html index 37d3c9b6c4..339489b60c 100644 --- a/concepts-file-management.html +++ b/concepts-file-management.html @@ -24,7 +24,7 @@ - + diff --git a/concepts-flows-import.html b/concepts-flows-import.html index 8d68fa9bee..bbbdb48fdf 100644 --- a/concepts-flows-import.html +++ b/concepts-flows-import.html @@ -24,7 +24,7 @@ - + diff --git a/concepts-flows.html b/concepts-flows.html index 27ab8598a0..a7402b22e1 100644 --- a/concepts-flows.html +++ b/concepts-flows.html @@ -24,7 +24,7 @@ - + diff --git a/concepts-overview.html b/concepts-overview.html index 325ed46f67..9780741582 100644 --- a/concepts-overview.html +++ b/concepts-overview.html @@ -24,7 +24,7 @@ - + diff --git a/concepts-playground.html b/concepts-playground.html index ae66817d7c..7b9f6061c8 100644 --- a/concepts-playground.html +++ b/concepts-playground.html @@ -24,7 +24,7 @@ - + diff --git a/concepts-publish.html b/concepts-publish.html index f6095153d0..9ba1a854cd 100644 --- a/concepts-publish.html +++ b/concepts-publish.html @@ -24,7 +24,7 @@ - + diff --git a/concepts-voice-mode.html b/concepts-voice-mode.html index 4d48cc1b24..64fd0035a4 100644 --- a/concepts-voice-mode.html +++ b/concepts-voice-mode.html @@ -24,7 +24,7 @@ - + diff --git a/configuration-cli.html b/configuration-cli.html index 4a804e6ee2..aee735b8b9 100644 --- a/configuration-cli.html +++ b/configuration-cli.html @@ -24,7 +24,7 @@ - + diff --git a/configuration-custom-database.html b/configuration-custom-database.html index 8783678266..24b2748671 100644 --- a/configuration-custom-database.html +++ b/configuration-custom-database.html @@ -24,7 +24,7 @@ - + diff --git a/configuration-global-variables.html b/configuration-global-variables.html index e3e54eeba2..278cb46659 100644 --- a/configuration-global-variables.html +++ b/configuration-global-variables.html @@ -24,7 +24,7 @@ - + diff --git a/contributing-bundles.html b/contributing-bundles.html index d539bd34f9..01f5b0015c 100644 --- a/contributing-bundles.html +++ b/contributing-bundles.html @@ -24,7 +24,7 @@ - + diff --git a/contributing-community.html b/contributing-community.html index f6801cfc18..c02143bd01 100644 --- a/contributing-community.html +++ b/contributing-community.html @@ -24,7 +24,7 @@ - + diff --git a/contributing-component-tests.html b/contributing-component-tests.html index 383c1757a1..8fd0495dfb 100644 --- a/contributing-component-tests.html +++ b/contributing-component-tests.html @@ -24,7 +24,7 @@ - + diff --git a/contributing-components.html b/contributing-components.html index 15a270ce4d..2c6684077b 100644 --- a/contributing-components.html +++ b/contributing-components.html @@ -24,7 +24,7 @@ - + diff --git a/contributing-github-issues.html b/contributing-github-issues.html index 200d313d9c..8ba071edf9 100644 --- a/contributing-github-issues.html +++ b/contributing-github-issues.html @@ -24,7 +24,7 @@ - + diff --git a/contributing-how-to-contribute.html b/contributing-how-to-contribute.html index 33a97c3a66..2f719d4079 100644 --- a/contributing-how-to-contribute.html +++ b/contributing-how-to-contribute.html @@ -24,7 +24,7 @@ - + diff --git a/contributing-telemetry.html b/contributing-telemetry.html index a9474fce72..10e80c8310 100644 --- a/contributing-telemetry.html +++ b/contributing-telemetry.html @@ -24,7 +24,7 @@ - + diff --git a/contributing-templates.html b/contributing-templates.html index fd0f186b71..9d937cb1bc 100644 --- a/contributing-templates.html +++ b/contributing-templates.html @@ -24,7 +24,7 @@ - + diff --git a/data-types.html b/data-types.html index b144b08413..3c29ad99ad 100644 --- a/data-types.html +++ b/data-types.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-architecture.html b/deployment-architecture.html index 8f39facfe1..9768f9409f 100644 --- a/deployment-architecture.html +++ b/deployment-architecture.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-caddyfile.html b/deployment-caddyfile.html index b2a5983f7a..3641c434e6 100644 --- a/deployment-caddyfile.html +++ b/deployment-caddyfile.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-docker.html b/deployment-docker.html index dd6887bcd0..10dbf7ba81 100644 --- a/deployment-docker.html +++ b/deployment-docker.html @@ -24,7 +24,7 @@ - + @@ -49,6 +49,8 @@

Deploy Langflow on Docker

+ +
tip

Podman can be used instead of Docker for all commands shown here. For more information, see the Podman documentation.

Running applications in Docker containers ensures consistent behavior across different systems and eliminates dependency conflicts.

You can use the Langflow Docker image to start a Langflow container.

This guide demonstrates several ways to deploy Langflow with Docker and Docker Compose:

diff --git a/deployment-gcp.html b/deployment-gcp.html index 11759674b2..3f4f2f88b5 100644 --- a/deployment-gcp.html +++ b/deployment-gcp.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-hugging-face-spaces.html b/deployment-hugging-face-spaces.html index 80d507f35a..bfd67d663f 100644 --- a/deployment-hugging-face-spaces.html +++ b/deployment-hugging-face-spaces.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-kubernetes-dev.html b/deployment-kubernetes-dev.html index 6e06898c3b..0ca2f4e23d 100644 --- a/deployment-kubernetes-dev.html +++ b/deployment-kubernetes-dev.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-kubernetes-prod.html b/deployment-kubernetes-prod.html index 9a542fc323..36728cef80 100644 --- a/deployment-kubernetes-prod.html +++ b/deployment-kubernetes-prod.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-nginx-ssl.html b/deployment-nginx-ssl.html index d14802f2af..3e21fa5027 100644 --- a/deployment-nginx-ssl.html +++ b/deployment-nginx-ssl.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-overview.html b/deployment-overview.html index 43e84270b5..967fc7cf9a 100644 --- a/deployment-overview.html +++ b/deployment-overview.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-prod-best-practices.html b/deployment-prod-best-practices.html index 8f225394b5..8a1a78cb0e 100644 --- a/deployment-prod-best-practices.html +++ b/deployment-prod-best-practices.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-public-server.html b/deployment-public-server.html index 80cc70c5f7..b9ccd0c556 100644 --- a/deployment-public-server.html +++ b/deployment-public-server.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-railway.html b/deployment-railway.html index 928e65878a..e587904dfa 100644 --- a/deployment-railway.html +++ b/deployment-railway.html @@ -24,7 +24,7 @@ - + diff --git a/deployment-render.html b/deployment-render.html index 4ec175a9cd..2e15caa499 100644 --- a/deployment-render.html +++ b/deployment-render.html @@ -24,7 +24,7 @@ - + diff --git a/develop-application.html b/develop-application.html index dc0a21cec8..01894d47f8 100644 --- a/develop-application.html +++ b/develop-application.html @@ -24,7 +24,7 @@ - + @@ -50,6 +50,7 @@

Containerize a Langflow application

+
tip

Podman can be used instead of Docker for all commands shown here. For more information, see the Podman documentation.

Designing flows in the visual editor is only the first step in building an application that uses Langflow.

Once you have a functional flow, you can use that flow in a larger application, such as a website or mobile app. Because Langflow is both an IDE and a runtime, you can use Langflow to build and test your flows locally, and then package and serve your flows in a production environment.

diff --git a/enterprise-database-guide.html b/enterprise-database-guide.html index 15f1e29224..92b2562075 100644 --- a/enterprise-database-guide.html +++ b/enterprise-database-guide.html @@ -24,7 +24,7 @@ - + diff --git a/environment-variables.html b/environment-variables.html index 4cc91f94ed..4a95716d73 100644 --- a/environment-variables.html +++ b/environment-variables.html @@ -24,7 +24,7 @@ - + diff --git a/get-started-installation.html b/get-started-installation.html index 48349ad7f8..e31cff3fe6 100644 --- a/get-started-installation.html +++ b/get-started-installation.html @@ -24,7 +24,7 @@ - + diff --git a/get-started-quickstart.html b/get-started-quickstart.html index d933d89a91..f7731089e9 100644 --- a/get-started-quickstart.html +++ b/get-started-quickstart.html @@ -24,7 +24,7 @@ - + diff --git a/index.html b/index.html index 4908b39741..d9b50b2b25 100644 --- a/index.html +++ b/index.html @@ -24,7 +24,7 @@ - + diff --git a/install-custom-dependencies.html b/install-custom-dependencies.html index fd07f2ec82..ebca8950bd 100644 --- a/install-custom-dependencies.html +++ b/install-custom-dependencies.html @@ -24,7 +24,7 @@ - + diff --git a/integrations-arize.html b/integrations-arize.html index 69fa916337..2d040993cb 100644 --- a/integrations-arize.html +++ b/integrations-arize.html @@ -24,7 +24,7 @@ - + diff --git a/integrations-instana-traceloop.html b/integrations-instana-traceloop.html index 7c032cd48b..33e40bb761 100644 --- a/integrations-instana-traceloop.html +++ b/integrations-instana-traceloop.html @@ -24,7 +24,7 @@ - + diff --git a/integrations-langfuse.html b/integrations-langfuse.html index 8a17822471..5b74210b11 100644 --- a/integrations-langfuse.html +++ b/integrations-langfuse.html @@ -24,7 +24,7 @@ - + diff --git a/integrations-langsmith.html b/integrations-langsmith.html index d3e27b98c2..8857a909df 100644 --- a/integrations-langsmith.html +++ b/integrations-langsmith.html @@ -24,7 +24,7 @@ - + diff --git a/integrations-langwatch.html b/integrations-langwatch.html index 2ee98b70e5..c71c9fdc7e 100644 --- a/integrations-langwatch.html +++ b/integrations-langwatch.html @@ -24,7 +24,7 @@ - + diff --git a/integrations-opik.html b/integrations-opik.html index 4e4a242797..004ce49980 100644 --- a/integrations-opik.html +++ b/integrations-opik.html @@ -24,7 +24,7 @@ - + diff --git a/logging.html b/logging.html index f796dbe388..682d1c27b5 100644 --- a/logging.html +++ b/logging.html @@ -24,7 +24,7 @@ - + diff --git a/luna-for-langflow.html b/luna-for-langflow.html index 68e56232ba..a4483f59bf 100644 --- a/luna-for-langflow.html +++ b/luna-for-langflow.html @@ -24,7 +24,7 @@ - + diff --git a/mcp-client.html b/mcp-client.html index 31a163e65d..0d5a64c51d 100644 --- a/mcp-client.html +++ b/mcp-client.html @@ -24,7 +24,7 @@ - + @@ -73,9 +73,7 @@ For example, to start a Use SSE mode. -
tip

uvx is included with uv in the Langflow package. -To use npx server commands, you must first install an LTS release of Node.js. -For an example of an npx MCP server in Langflow, see Connect an Astra DB MCP server to Langflow.

+
tip

uvx is included with uv in the Langflow package.

To use npx server commands, you must first install an LTS release of Node.js. If you run Langflow in Docker, install Node.js inside the container image and rebuild so that npx-based MCP servers are available at runtime. For more information, see Package management.

For an example of an npx MCP server in Langflow, see Connect an Astra DB MCP server to Langflow.

  • To use environment variables in your server command, enter each variable in the Env fields as key-value pairs.

    diff --git a/mcp-component-astra.html b/mcp-component-astra.html index afc7af62ae..7858ab7f4a 100644 --- a/mcp-component-astra.html +++ b/mcp-component-astra.html @@ -24,7 +24,7 @@ - + @@ -52,9 +52,10 @@

    This guide demonstrates how to use Langflow as an MCP client by using the MCP Tools component to run a DataStax Astra DB MCP server in an agent flow.

      -
    1. -

      Install an LTS release of Node.js.

      -
    2. +
    3. Install an LTS release of Node.js.
    4. +
    +
    tip

    uvx is included with uv in the Langflow package.

    To use npx server commands, you must first install an LTS release of Node.js. If you run Langflow in Docker, install Node.js inside the container image and rebuild so that npx-based MCP servers are available at runtime. For more information, see Package management.

    For an example of an npx MCP server in Langflow, see Connect an Astra DB MCP server to Langflow.

    +
    1. Create an OpenAI API key.

    2. diff --git a/mcp-server.html b/mcp-server.html index cb9c5293ec..a62a053751 100644 --- a/mcp-server.html +++ b/mcp-server.html @@ -24,7 +24,7 @@ - + diff --git a/mcp-tutorial.html b/mcp-tutorial.html index d17bac64a3..e792ca450d 100644 --- a/mcp-tutorial.html +++ b/mcp-tutorial.html @@ -24,7 +24,7 @@ - + diff --git a/memory.html b/memory.html index b88889c998..294d675aeb 100644 --- a/memory.html +++ b/memory.html @@ -24,7 +24,7 @@ - + diff --git a/release-notes.html b/release-notes.html index 837f4a8b76..599d7d775a 100644 --- a/release-notes.html +++ b/release-notes.html @@ -24,7 +24,7 @@ - + diff --git a/search.html b/search.html index dea3bd3a91..492ced166c 100644 --- a/search.html +++ b/search.html @@ -24,7 +24,7 @@ - + diff --git a/session-id.html b/session-id.html index 8b4931248d..391c9fd947 100644 --- a/session-id.html +++ b/session-id.html @@ -24,7 +24,7 @@ - + diff --git a/sitemap.xml b/sitemap.xml index 17055ad7a3..bebc2f8dfa 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://docs.langflow.org/apihttps://docs.langflow.org/api/openapi.jsonhttps://docs.langflow.org/api/openapi.yamlhttps://docs.langflow.org/searchhttps://docs.langflow.org/agent-tutorial2025-10-30T20:40:44.000Zhttps://docs.langflow.org/agents2025-10-30T20:40:44.000Zhttps://docs.langflow.org/agents-tools2025-10-30T20:40:44.000Zhttps://docs.langflow.org/api-build2025-10-30T20:40:44.000Zhttps://docs.langflow.org/api-files2025-10-30T20:40:44.000Zhttps://docs.langflow.org/api-flows2025-10-30T20:40:44.000Zhttps://docs.langflow.org/api-flows-run2025-10-30T20:40:44.000Zhttps://docs.langflow.org/api-keys-and-authentication2025-10-30T20:40:44.000Zhttps://docs.langflow.org/api-logs2025-10-30T20:40:44.000Zhttps://docs.langflow.org/api-monitor2025-10-30T20:40:44.000Zhttps://docs.langflow.org/api-openai-responses2025-10-30T20:40:44.000Zhttps://docs.langflow.org/api-projects2025-10-30T20:40:44.000Zhttps://docs.langflow.org/api-reference-api-examples2025-10-30T20:40:44.000Zhttps://docs.langflow.org/api-users2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-aiml2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-amazon2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-anthropic2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-apify2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-arxiv2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-assemblyai2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-azure2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-baidu2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-bing2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-cassandra2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-chroma2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-cleanlab2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-clickhouse2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-cloudflare2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-cohere2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-composio2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-couchbase2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-datastax2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-deepseek2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-docling2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-duckduckgo2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-elastic2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-exa2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-faiss2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-glean2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-google2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-groq2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-huggingface2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-ibm2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-icosacomputing2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-langchain2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-lmstudio2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-maritalk2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-mem02025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-milvus2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-mistralai2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-mongodb2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-notion2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-novita2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-nvidia2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-ollama2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-openai2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-openrouter2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-perplexity2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-pgvector2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-pinecone2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-qdrant2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-redis2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-sambanova2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-searchapi2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-serper2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-supabase2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-upstash2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-vectara2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-vertexai2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-weaviate2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-wikipedia2025-10-30T20:40:44.000Zhttps://docs.langflow.org/bundles-xai2025-10-30T20:40:44.000Zhttps://docs.langflow.org/chat-with-files2025-10-30T20:40:44.000Zhttps://docs.langflow.org/chat-with-rag2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-agents2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-bundle-components2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-custom-components2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-data2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-embedding-models2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-helpers2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-io2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-logic2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-models2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-processing2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-prompts2025-10-30T20:40:44.000Zhttps://docs.langflow.org/components-tools2025-10-30T20:40:44.000Zhttps://docs.langflow.org/concepts-components2025-10-30T20:40:44.000Zhttps://docs.langflow.org/concepts-file-management2025-10-30T20:40:44.000Zhttps://docs.langflow.org/concepts-flows2025-10-30T20:40:44.000Zhttps://docs.langflow.org/concepts-flows-import2025-10-30T20:40:44.000Zhttps://docs.langflow.org/concepts-overview2025-10-30T20:40:44.000Zhttps://docs.langflow.org/concepts-playground2025-10-30T20:40:44.000Zhttps://docs.langflow.org/concepts-publish2025-10-30T20:40:44.000Zhttps://docs.langflow.org/concepts-voice-mode2025-10-30T20:40:44.000Zhttps://docs.langflow.org/configuration-cli2025-10-30T20:40:44.000Zhttps://docs.langflow.org/configuration-custom-database2025-10-30T20:40:44.000Zhttps://docs.langflow.org/configuration-global-variables2025-10-30T20:40:44.000Zhttps://docs.langflow.org/contributing-bundles2025-10-30T20:40:44.000Zhttps://docs.langflow.org/contributing-community2025-10-30T20:40:44.000Zhttps://docs.langflow.org/contributing-component-tests2025-10-30T20:40:44.000Zhttps://docs.langflow.org/contributing-components2025-10-30T20:40:44.000Zhttps://docs.langflow.org/contributing-github-issues2025-10-30T20:40:44.000Zhttps://docs.langflow.org/contributing-how-to-contribute2025-10-30T20:40:44.000Zhttps://docs.langflow.org/contributing-telemetry2025-10-30T20:40:44.000Zhttps://docs.langflow.org/contributing-templates2025-10-30T20:40:44.000Zhttps://docs.langflow.org/data-types2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-architecture2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-caddyfile2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-docker2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-gcp2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-hugging-face-spaces2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-kubernetes-dev2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-kubernetes-prod2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-nginx-ssl2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-overview2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-prod-best-practices2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-public-server2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-railway2025-10-30T20:40:44.000Zhttps://docs.langflow.org/deployment-render2025-10-30T20:40:44.000Zhttps://docs.langflow.org/develop-application2025-10-30T20:40:44.000Zhttps://docs.langflow.org/enterprise-database-guide2025-10-30T20:40:44.000Zhttps://docs.langflow.org/environment-variables2025-10-30T20:40:44.000Zhttps://docs.langflow.org/get-started-installation2025-10-30T20:40:44.000Zhttps://docs.langflow.org/get-started-quickstart2025-10-30T20:40:44.000Zhttps://docs.langflow.org/install-custom-dependencies2025-10-30T20:40:44.000Zhttps://docs.langflow.org/integrations-arize2025-10-30T20:40:44.000Zhttps://docs.langflow.org/integrations-instana-traceloop2025-10-30T20:40:44.000Zhttps://docs.langflow.org/integrations-langfuse2025-10-30T20:40:44.000Zhttps://docs.langflow.org/integrations-langsmith2025-10-30T20:40:44.000Zhttps://docs.langflow.org/integrations-langwatch2025-10-30T20:40:44.000Zhttps://docs.langflow.org/integrations-opik2025-10-30T20:40:44.000Zhttps://docs.langflow.org/logging2025-10-30T20:40:44.000Zhttps://docs.langflow.org/luna-for-langflow2025-10-30T20:40:44.000Zhttps://docs.langflow.org/mcp-client2025-10-30T20:40:44.000Zhttps://docs.langflow.org/mcp-component-astra2025-10-30T20:40:44.000Zhttps://docs.langflow.org/mcp-server2025-10-30T20:40:44.000Zhttps://docs.langflow.org/mcp-tutorial2025-10-30T20:40:44.000Zhttps://docs.langflow.org/memory2025-10-30T20:40:44.000Zhttps://docs.langflow.org/release-notes2025-10-30T20:40:44.000Zhttps://docs.langflow.org/session-id2025-10-30T20:40:44.000Zhttps://docs.langflow.org/troubleshoot2025-10-30T20:40:44.000Zhttps://docs.langflow.org/typescript-client2025-10-30T20:40:44.000Zhttps://docs.langflow.org/webhook2025-10-30T20:40:44.000Zhttps://docs.langflow.org/2025-10-30T20:40:44.000Z \ No newline at end of file +https://docs.langflow.org/apihttps://docs.langflow.org/api/openapi.jsonhttps://docs.langflow.org/api/openapi.yamlhttps://docs.langflow.org/searchhttps://docs.langflow.org/agent-tutorial2025-10-30T21:28:50.000Zhttps://docs.langflow.org/agents2025-10-30T21:28:50.000Zhttps://docs.langflow.org/agents-tools2025-10-30T21:28:50.000Zhttps://docs.langflow.org/api-build2025-10-30T21:28:50.000Zhttps://docs.langflow.org/api-files2025-10-30T21:28:50.000Zhttps://docs.langflow.org/api-flows2025-10-30T21:28:50.000Zhttps://docs.langflow.org/api-flows-run2025-10-30T21:28:50.000Zhttps://docs.langflow.org/api-keys-and-authentication2025-10-30T21:28:50.000Zhttps://docs.langflow.org/api-logs2025-10-30T21:28:50.000Zhttps://docs.langflow.org/api-monitor2025-10-30T21:28:50.000Zhttps://docs.langflow.org/api-openai-responses2025-10-30T21:28:50.000Zhttps://docs.langflow.org/api-projects2025-10-30T21:28:50.000Zhttps://docs.langflow.org/api-reference-api-examples2025-10-30T21:28:50.000Zhttps://docs.langflow.org/api-users2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-aiml2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-amazon2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-anthropic2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-apify2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-arxiv2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-assemblyai2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-azure2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-baidu2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-bing2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-cassandra2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-chroma2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-cleanlab2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-clickhouse2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-cloudflare2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-cohere2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-composio2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-couchbase2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-datastax2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-deepseek2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-docling2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-duckduckgo2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-elastic2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-exa2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-faiss2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-glean2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-google2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-groq2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-huggingface2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-ibm2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-icosacomputing2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-langchain2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-lmstudio2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-maritalk2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-mem02025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-milvus2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-mistralai2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-mongodb2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-notion2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-novita2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-nvidia2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-ollama2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-openai2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-openrouter2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-perplexity2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-pgvector2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-pinecone2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-qdrant2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-redis2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-sambanova2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-searchapi2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-serper2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-supabase2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-upstash2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-vectara2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-vertexai2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-weaviate2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-wikipedia2025-10-30T21:28:50.000Zhttps://docs.langflow.org/bundles-xai2025-10-30T21:28:50.000Zhttps://docs.langflow.org/chat-with-files2025-10-30T21:28:50.000Zhttps://docs.langflow.org/chat-with-rag2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-agents2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-bundle-components2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-custom-components2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-data2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-embedding-models2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-helpers2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-io2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-logic2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-models2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-processing2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-prompts2025-10-30T21:28:50.000Zhttps://docs.langflow.org/components-tools2025-10-30T21:28:50.000Zhttps://docs.langflow.org/concepts-components2025-10-30T21:28:50.000Zhttps://docs.langflow.org/concepts-file-management2025-10-30T21:28:50.000Zhttps://docs.langflow.org/concepts-flows2025-10-30T21:28:50.000Zhttps://docs.langflow.org/concepts-flows-import2025-10-30T21:28:50.000Zhttps://docs.langflow.org/concepts-overview2025-10-30T21:28:50.000Zhttps://docs.langflow.org/concepts-playground2025-10-30T21:28:50.000Zhttps://docs.langflow.org/concepts-publish2025-10-30T21:28:50.000Zhttps://docs.langflow.org/concepts-voice-mode2025-10-30T21:28:50.000Zhttps://docs.langflow.org/configuration-cli2025-10-30T21:28:50.000Zhttps://docs.langflow.org/configuration-custom-database2025-10-30T21:28:50.000Zhttps://docs.langflow.org/configuration-global-variables2025-10-30T21:28:50.000Zhttps://docs.langflow.org/contributing-bundles2025-10-30T21:28:50.000Zhttps://docs.langflow.org/contributing-community2025-10-30T21:28:50.000Zhttps://docs.langflow.org/contributing-component-tests2025-10-30T21:28:50.000Zhttps://docs.langflow.org/contributing-components2025-10-30T21:28:50.000Zhttps://docs.langflow.org/contributing-github-issues2025-10-30T21:28:50.000Zhttps://docs.langflow.org/contributing-how-to-contribute2025-10-30T21:28:50.000Zhttps://docs.langflow.org/contributing-telemetry2025-10-30T21:28:50.000Zhttps://docs.langflow.org/contributing-templates2025-10-30T21:28:50.000Zhttps://docs.langflow.org/data-types2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-architecture2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-caddyfile2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-docker2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-gcp2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-hugging-face-spaces2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-kubernetes-dev2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-kubernetes-prod2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-nginx-ssl2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-overview2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-prod-best-practices2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-public-server2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-railway2025-10-30T21:28:50.000Zhttps://docs.langflow.org/deployment-render2025-10-30T21:28:50.000Zhttps://docs.langflow.org/develop-application2025-10-30T21:28:50.000Zhttps://docs.langflow.org/enterprise-database-guide2025-10-30T21:28:50.000Zhttps://docs.langflow.org/environment-variables2025-10-30T21:28:50.000Zhttps://docs.langflow.org/get-started-installation2025-10-30T21:28:50.000Zhttps://docs.langflow.org/get-started-quickstart2025-10-30T21:28:50.000Zhttps://docs.langflow.org/install-custom-dependencies2025-10-30T21:28:50.000Zhttps://docs.langflow.org/integrations-arize2025-10-30T21:28:50.000Zhttps://docs.langflow.org/integrations-instana-traceloop2025-10-30T21:28:50.000Zhttps://docs.langflow.org/integrations-langfuse2025-10-30T21:28:50.000Zhttps://docs.langflow.org/integrations-langsmith2025-10-30T21:28:50.000Zhttps://docs.langflow.org/integrations-langwatch2025-10-30T21:28:50.000Zhttps://docs.langflow.org/integrations-opik2025-10-30T21:28:50.000Zhttps://docs.langflow.org/logging2025-10-30T21:28:50.000Zhttps://docs.langflow.org/luna-for-langflow2025-10-30T21:28:50.000Zhttps://docs.langflow.org/mcp-client2025-10-30T21:28:50.000Zhttps://docs.langflow.org/mcp-component-astra2025-10-30T21:28:50.000Zhttps://docs.langflow.org/mcp-server2025-10-30T21:28:50.000Zhttps://docs.langflow.org/mcp-tutorial2025-10-30T21:28:50.000Zhttps://docs.langflow.org/memory2025-10-30T21:28:50.000Zhttps://docs.langflow.org/release-notes2025-10-30T21:28:50.000Zhttps://docs.langflow.org/session-id2025-10-30T21:28:50.000Zhttps://docs.langflow.org/troubleshoot2025-10-30T21:28:50.000Zhttps://docs.langflow.org/typescript-client2025-10-30T21:28:50.000Zhttps://docs.langflow.org/webhook2025-10-30T21:28:50.000Zhttps://docs.langflow.org/2025-10-30T21:28:50.000Z \ No newline at end of file diff --git a/troubleshoot.html b/troubleshoot.html index ce093a1e98..45da473ca3 100644 --- a/troubleshoot.html +++ b/troubleshoot.html @@ -24,7 +24,7 @@ - + diff --git a/typescript-client.html b/typescript-client.html index 1052031638..08dc02f129 100644 --- a/typescript-client.html +++ b/typescript-client.html @@ -24,7 +24,7 @@ - + diff --git a/webhook.html b/webhook.html index 33f3bd5ac5..fc9d2a5a0b 100644 --- a/webhook.html +++ b/webhook.html @@ -24,7 +24,7 @@ - +