Files
langflow/mcp-server.html
github-merge-queue[bot] 7edce91657 deploy: 42ad40bce8
2025-05-20 16:26:39 +00:00

233 lines
52 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-Concepts/mcp-server" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.7.0">
<title data-rh="true">Model Context Protocol (MCP) server | Langflow Documentation</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://docs.langflow.org/mcp-server"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Model Context Protocol (MCP) server | Langflow Documentation"><meta data-rh="true" name="description" content="Langflow integrates with the Model Context Protocol (MCP) as both an MCP server and an MCP client."><meta data-rh="true" property="og:description" content="Langflow integrates with the Model Context Protocol (MCP) as both an MCP server and an MCP client."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.langflow.org/mcp-server"><link data-rh="true" rel="alternate" href="https://docs.langflow.org/mcp-server" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.langflow.org/mcp-server" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://UZK6BDPCVY-dsn.algolia.net" crossorigin="anonymous"><link rel="preconnect" href="https://www.google-analytics.com">
<link rel="preconnect" href="https://www.googletagmanager.com">
<script async src="https://www.googletagmanager.com/gtag/js?id=G-SLQFLQ3KPT"></script>
<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-SLQFLQ3KPT",{})</script>
<link rel="search" type="application/opensearchdescription+xml" title="Langflow Documentation" href="/opensearch.xml">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@550;600&amp;display=swap">
<script>!function(){window.semaphore=window.semaphore||[],window.ketch=function(){window.semaphore.push(arguments)};var e=document.createElement("script");e.type="text/javascript",e.src="https://global.ketchcdn.com/web/v3/config/datastax/langflow_org_web/boot.js",e.defer=e.async=!0,document.getElementsByTagName("head")[0].appendChild(e)}()</script>
<script defer="true">!function(){const e=e=>{if(window.gtag&&e.purposes&&"analytics"in e.purposes&&"targeted_advertising"in e.purposes){const n=!0===e.purposes.analytics?"granted":"denied",t=!0===e.purposes.targeted_advertising?"granted":"denied",a={analytics_storage:n,ad_personalization:t,ad_storage:t,ad_user_data:t};window.gtag("consent","update",a)}};window.ketch&&window.ketch("on","consent",e)}()</script><link rel="stylesheet" href="/assets/css/styles.cf9a4109.css">
<script src="/assets/js/runtime~main.59dcbc56.js" defer="defer"></script>
<script src="/assets/js/main.a59a896d.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();null!==e?t(e):window.matchMedia("(prefers-color-scheme: dark)").matches?t("dark"):(window.matchMedia("(prefers-color-scheme: light)").matches,t("light"))}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbarHideable_m1mJ"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/langflow-logo-black.svg" alt="Langflow" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/langflow-logo-white.svg" alt="Langflow" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div></a></div><div class="navbar__items navbar__items--right"><a href="https://github.com/langflow-ai/langflow" target="_blank" class="navbar__item navbar__link header-github-link"></a><a href="https://twitter.com/langflow_ai" target="_blank" class="navbar__item navbar__link header-twitter-link"></a><a href="https://discord.gg/EqksyE2EX9" target="_blank" class="navbar__item navbar__link header-discord-link"></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite" aria-pressed="false"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Command+K)"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd sidebarWithHideableNavbar_wUlq"><a tabindex="-1" class="sidebarLogo_isFc" href="/"><img src="/img/langflow-logo-black.svg" alt="Langflow" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/langflow-logo-white.svg" alt="Langflow" class="themedComponent_mlkZ themedComponent--dark_xIcU"></a><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/">Welcome to Langflow</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/get-started-installation">Get started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/starter-projects-basic-prompting">Starter projects</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/blog-writer">Sample flows</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/concepts-overview">Concepts</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/concepts-overview">Langflow overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/concepts-playground">Playground</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/concepts-components">Components</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/concepts-flows">Flows</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/concepts-objects">Langflow objects</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/concepts-publish">Publish flows</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/mcp-server">Model Context Protocol (MCP) server</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/concepts-file-management">Manage files</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/concepts-voice-mode">Voice mode</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/components-agents">Components</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/agents-overview">Agents</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/configuration-api-keys">Configuration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/develop-overview">Develop</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/deployment-overview">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/api">API reference</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/integrations-apify">Integrations</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/contributing-community">Contributing</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a href="https://github.com/langflow-ai/langflow/releases/latest" target="_blank" rel="noopener noreferrer" class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false">Changelog</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/luna-for-langflow">Support</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 sidebar-ad">
<a href="https://astra.datastax.com/signup?type=langflow" target="_blank" class="menu__link">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cloud"><path d="M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"/></svg>
<div class="sidebar-ad-text-container">
<span class="sidebar-ad-text">Use Langflow in the cloud</span>
<span class="sidebar-ad-text sidebar-ad-text-gradient">Sign up for DataStax Langflow</span>
</div>
</a>
</li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Concepts</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Model Context Protocol (MCP) server</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Model Context Protocol (MCP) server</h1></header><style>[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; }</style>
<!-- -->
<p>Langflow integrates with the <a href="https://modelcontextprotocol.io/introduction" target="_blank" rel="noopener noreferrer">Model Context Protocol (MCP)</a> as both an MCP server and an MCP client.
This page describes how to use Langflow as an <em>MCP server</em>.
For information about using Langflow as an <em>MCP client</em>, see the <a href="/components-tools#mcp-connection">MCP connection component</a>.</p>
<p>As an MCP server, Langflow exposes your flows as <a href="https://modelcontextprotocol.io/docs/concepts/tools" target="_blank" rel="noopener noreferrer">tools</a> that <a href="https://modelcontextprotocol.io/clients" target="_blank" rel="noopener noreferrer">MCP clients</a> can use use to take actions.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="prerequisites">Prerequisites<a href="#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites"></a></h2>
<ul>
<li>
<p>A Langflow project with at least one flow created.</p>
</li>
<li>
<p>Any LTS version of <a href="https://docs.npmjs.com/downloading-and-installing-node-js-and-npm" target="_blank" rel="noopener noreferrer">Node.js</a> installed on your computer to use MCP Inspector to <a href="#test-and-debug-flows">test and debug flows</a>.</p>
</li>
</ul>
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="select-flows-to-serve">Select and configure flows to expose as MCP tools<a href="#select-flows-to-serve" class="hash-link" aria-label="Direct link to Select and configure flows to expose as MCP tools" title="Direct link to Select and configure flows to expose as MCP tools"></a></h2>
<p>Langflow runs a separate MCP server for every <a href="/concepts-overview#projects">project</a>.
The MCP server for each project exposes that project&#x27;s flows as tools.</p>
<p>All of the flows in a project are exposed by default.
To expose only specific flows and optionally rename them for agentic use, follow these steps:</p>
<ol>
<li>
<p>From the Langflow dashboard, select the project that contains the flows you want to serve as tools, and then click the <strong>MCP Server</strong> tab.
Alternatively, you can quickly access the <strong>MCP Server</strong> tab from within any flow by selecting <strong>Publish &gt; MCP Server</strong>.</p>
<p>The <strong>MCP Server</strong> tab displays a code template that you can use to connect MCP clients to the the project&#x27;s MCP server.</p>
<p>The <strong>Flows/Actions</strong> section lists the flows that are currently being served as tools.</p>
<p><img decoding="async" loading="lazy" alt="MCP server projects page" src="/assets/images/mcp-server-573510dfdf6bf74006f9f0d9280b3f11.png" width="4000" height="2192" class="img_ev3q"></p>
</li>
<li>
<p>Click <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings2" aria-hidden="true"><path d="M20 7h-9"></path><path d="M14 17H5"></path><circle cx="17" cy="17" r="3"></circle><circle cx="7" cy="7" r="3"></circle></svg> <strong>Edit Actions</strong>.</p>
</li>
<li>
<p>In the <strong>MCP Server Actions</strong> window, select the flows that you want exposed as tools.</p>
<p><img decoding="async" loading="lazy" alt="MCP server actions" src="/assets/images/mcp-server-actions-ad851786a8969c1d84b4601df1bcb6db.png" width="4000" height="2044" class="img_ev3q"></p>
</li>
<li>
<p>Optional: Edit the <strong>Flow Name</strong> and <strong>Flow Description</strong>.</p>
<ul>
<li>
<p><strong>Flow Name</strong>: Enter a name thats makes it clear what the flow does.</p>
</li>
<li>
<p><strong>Flow Description</strong>: Enter a description that accurately describes the specific action(s) the flow performs.</p>
</li>
</ul>
<div class="theme-admonition theme-admonition-important admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>important</div><div class="admonitionContent_BuS1"><p>MCP clients use the <strong>Flow Name</strong> and <strong>Flow Description</strong> to determine which action to use.
For more information about naming and describing your flows, see <a href="#name-and-describe-your-flows">Name and describe your flows for agentic use</a>.</p></div></div>
</li>
<li>
<p>Close the <strong>MCP Server Actions</strong> window to save your changes.</p>
</li>
</ol>
<!-- -->
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="connect-clients-to-use-the-servers-actions">Connect clients to Langflow&#x27;s MCP server<a href="#connect-clients-to-use-the-servers-actions" class="hash-link" aria-label="Direct link to Connect clients to Langflow&#x27;s MCP server" title="Direct link to Connect clients to Langflow&#x27;s MCP server"></a></h2>
<p>The following procedure describes how to connect <a href="https://www.cursor.com/" target="_blank" rel="noopener noreferrer">Cursor</a> to your Langflow project&#x27;s MCP server to consume your flows as tools.
However, you can connect any <a href="https://modelcontextprotocol.io/clients" target="_blank" rel="noopener noreferrer">MCP-compatible client</a> following similar steps.</p>
<ol>
<li>
<p>Install <a href="https://docs.cursor.com/get-started/installation" target="_blank" rel="noopener noreferrer">Cursor</a>.</p>
</li>
<li>
<p>In Cursor, go to <strong>Cursor Settings &gt; MCP</strong>, and then click <strong>Add New Global MCP Server</strong>.
This opens Cursor&#x27;s global MCP configuration file, <code>mcp.json</code>.</p>
</li>
<li>
<p>In the Langflow dashboard, select the project that contains the flows you want to serve, and then click the <strong>MCP Server</strong> tab.</p>
</li>
<li>
<p>Copy the code template from the <strong>MCP Server</strong> tab, and then paste it into <code>mcp.json</code> in Cursor.
For example:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span>{</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;mcpServers&quot;: {</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;PROJECT_NAME&quot;: {</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;command&quot;: &quot;uvx&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;args&quot;: [</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;mcp-proxy&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;http://LANGFLOW_SERVER_ADDRESS/api/v1/mcp/project/PROJECT_ID/sse&quot;</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> ]</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span>}</span></div></div><br></code></div></div>
<p>The <strong>MCP Server</strong> tab automatically includes the correct <code>PROJECT_NAME</code>, <code>LANGFLOW_SERVER_ADDRESS</code>, and <code>PROJECT_ID</code> values.
The default Langflow server address is <code>http://127.0.0.1:7860</code> (<code>http://127.0.0.1:7868</code> if using Langflow for Desktop).</p>
<div class="theme-admonition theme-admonition-important admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>important</div><div class="admonitionContent_BuS1"><p>If your Langflow server <a href="/configuration-authentication">requires authentication</a> (<a href="/environment-variables#LANGFLOW_AUTO_LOGIN"><code>LANGFLOW_AUTO_LOGIN</code></a> is set to <code>false</code>), you must include your Langflow API key in the configuration.
For more information, see <a href="#authentication">MCP server authentication and environment variables</a>.</p></div></div>
</li>
<li>
<p>Save and close the <code>mcp.json</code> file in Cursor.
The newly added MCP server will appear in the <strong>MCP Servers</strong> section.</p>
</li>
</ol>
<p>Cursor is now connected to your project&#x27;s MCP server and your flows are registered as tools.
Cursor determines when to use tools based on your queries, and requests permissions when necessary.</p>
<p>For more information, see the <a href="https://docs.cursor.com/context/model-context-protocol" target="_blank" rel="noopener noreferrer">Cursor&#x27;s MCP documentation</a>.</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="authentication">MCP server authentication and environment variables<a href="#authentication" class="hash-link" aria-label="Direct link to MCP server authentication and environment variables" title="Direct link to MCP server authentication and environment variables"></a></h3>
<p>If your Langflow server <a href="/configuration-authentication">requires authentication</a> (<a href="/environment-variables#LANGFLOW_AUTO_LOGIN"><code>LANGFLOW_AUTO_LOGIN</code></a> is set to <code>false</code>), then you must supply a <a href="/configuration-api-keys">Langflow API key</a> in your MCP client configuration.
When this is the case, the code template in your project&#x27;s <strong>MCP Server</strong> tab automatically includes the <code>--header</code> and <code>x-api-key</code> arguments:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span>{</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;mcpServers&quot;: {</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;PROJECT_NAME&quot;: {</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;command&quot;: &quot;uvx&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;args&quot;: [</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;mcp-proxy&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;--headers&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;x-api-key&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;YOUR_API_KEY&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;http://LANGFLOW_SERVER_ADDRESS/api/v1/mcp/project/PROJECT_ID/sse&quot;</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> ]</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span>}</span></div></div><br></code></div></div>
<p>Click <!-- --> <strong>Generate API key</strong> to automatically insert a new Langflow API key into the code template.
Alternatively, you can replace <code>YOUR_API_KEY</code> with an existing Langflow API key.</p>
<p><img decoding="async" loading="lazy" alt="MCP server tab showing Generate API key button" src="/assets/images/mcp-server-api-key-5a39d0de10227381df269c4595d4d896.png" width="4000" height="2188" class="img_ev3q"></p>
<p>To include environment variables with your MCP server command, include them like this:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span>{</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;mcpServers&quot;: {</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;PROJECT_NAME&quot;: {</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;command&quot;: &quot;uvx&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;args&quot;: [</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;mcp-proxy&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;http://LANGFLOW_SERVER_ADDRESS/api/v1/mcp/project/PROJECT_ID/sse&quot;</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> ],</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;env&quot;: {</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> &quot;KEY&quot;: &quot;VALUE&quot;</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->14</span><div style="display:inline-block;margin-left:16px"><span>}</span></div></div><br></code></div></div>
<p>Replace <code>KEY</code> and <code>VALUE</code> with the environment variable name and value you want to include.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="name-and-describe-your-flows">Name and describe your flows for agentic use<a href="#name-and-describe-your-flows" class="hash-link" aria-label="Direct link to Name and describe your flows for agentic use" title="Direct link to Name and describe your flows for agentic use"></a></h2>
<p>MCP clients like <a href="https://www.cursor.com/" target="_blank" rel="noopener noreferrer">Cursor</a> &quot;see&quot; your Langflow project as a single MCP server, with <em>all</em> of your enabled flows listed as tools.
This can confuse agents.
For example, an agent won&#x27;t know that flow <code>adbbf8c7-0a34-493b-90ea-5e8b42f78b66</code> is a <a href="/document-qa">Document Q&amp;A</a> flow for a specific text file.</p>
<p>To prevent this behavior, make sure to <a href="#select-flows-to-serve">name and describe</a> your flows clearly.
It&#x27;s helpful to think of the names and descriptions as function names and code comments, making sure to use clear statements describing the problems your flows solve.</p>
<p>For example, let&#x27;s say you have a <a href="/document-qa">Document Q&amp;A</a> flow that loads a sample resume for an LLM to chat with, and that you&#x27;ve given it the following name and description:</p>
<ul>
<li>
<p><strong>Flow Name</strong>: <code>document_qa_for_resume</code></p>
</li>
<li>
<p><strong>Flow Description</strong>: <code>A flow for analyzing Emily&#x27;s resume.</code></p>
</li>
</ul>
<p>If you ask Cursor a question specifically about the resume, such as <code>What job experience does Emily have?</code>, the agent asks to call the MCP tool <code>document_qa_for_resume</code>.
That&#x27;s because your name and description provided the agent with a clear purpose for the tool.</p>
<p>When you run the tool, the agent requests permissions when necessary, and then provides a response.
For example:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>{</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span> &quot;input_value&quot;: &quot;What job experience does Emily have?&quot;</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>}</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>Result:</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>What job experience does Emily have?</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>Emily J. Wilson has the following job experience:</span></div></div><br></code></div></div>
<p>If you ask about a different resume, such as <code>What job experience does Alex have?</code>, you&#x27;ve provided enough information in the description for the agent to make the correct decision:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>I notice you&#x27;re asking about Alex&#x27;s job experience.</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>Based on the available tools, I can see there is a Document QA for Resume flow that&#x27;s designed for analyzing resumes.</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>However, the description mentions it&#x27;s for &quot;Emily&#x27;s resume&quot; not Alex&#x27;s. I don&#x27;t have access to Alex&#x27;s resume or job experience information.</span></div></div><br></code></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="test-and-debug-flows">Use MCP Inspector to test and debug flows<a href="#test-and-debug-flows" class="hash-link" aria-label="Direct link to Use MCP Inspector to test and debug flows" title="Direct link to Use MCP Inspector to test and debug flows"></a></h2>
<p><a href="https://modelcontextprotocol.io/docs/tools/inspector" target="_blank" rel="noopener noreferrer">MCP Inspector</a> is a common tool for testing and debugging MCP servers.
You can use MCP Inspector to monitor your flows and get insights into how they are being consumed by the MCP server:</p>
<ol>
<li>
<p>Install MCP Inspector:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>npx @modelcontextprotocol/inspector</span></div></div><br></code></div></div>
<p>For more information about configuring MCP Inspector, including specifying a proxy port, see the <a href="https://github.com/modelcontextprotocol/inspector" target="_blank" rel="noopener noreferrer">MCP Inspector GitHub project</a>.</p>
</li>
<li>
<p>Open a web browser and navigate to the MCP Inspector UI.
The default address is <code>http://127.0.0.1:6274</code>.</p>
</li>
<li>
<p>In the MCP Inspector UI, enter the connection details for your Langflow project&#x27;s MCP server:</p>
<ul>
<li><strong>Transport Type</strong>: Select <strong>SSE</strong>.</li>
<li><strong>URL</strong>: Enter the Langflow MCP server&#x27;s <code>sse</code> endpoint. For example: <code>http://127.0.0.1:7860/api/v1/mcp/project/d359cbd4-6fa2-4002-9d53-fa05c645319c/sse</code></li>
</ul>
<p>If you&#x27;ve <a href="#authentication">configured authentication for your MCP server</a>, fill out the following additional fields:</p>
<ul>
<li><strong>Transport Type</strong>: Select <strong>STDIO</strong>.</li>
<li><strong>Command</strong>: <code>uvx</code></li>
<li><strong>Arguments</strong>: Enter the following list of arguments, separated by spaces. Replace the values for <code>YOUR_API_KEY</code>, <code>LANGFLOW_SERVER_ADDRESS</code>, and <code>PROJECT_ID</code> with the values from your Langflow MCP server. For example:</li>
</ul>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>mcp-proxy --headers x-api-key YOUR_API_KEY http://LANGFLOW_SERVER_ADDRESS/api/v1/mcp/project/PROJECT_ID/sse</span></div></div><br></code></div></div>
</li>
<li>
<p>Click <strong>Connect</strong>.</p>
<p>If the connection was successful, you should see your project&#x27;s flows in the <strong>Tools</strong> tab.
From this tab, you can monitor how your flows are being registered as tools by MCP, as well as test the tools with custom input values.</p>
</li>
<li>
<p>To quit MCP Inspector, press <kbd>Control+C</kbd> in the same terminal window where you started it.</p>
</li>
</ol>
<!-- -->
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="deploy-your-server-externally">Deploy your MCP server externally<a href="#deploy-your-server-externally" class="hash-link" aria-label="Direct link to Deploy your MCP server externally" title="Direct link to Deploy your MCP server externally"></a></h2>
<p>By default, Langflow isn&#x27;t exposed to the public internet.
However, you can forward Langflow server traffic with a forwarding platform like <a href="https://ngrok.com/docs/getting-started/" target="_blank" rel="noopener noreferrer">ngrok</a> or <a href="https://docs.zrok.io/docs/getting-started" target="_blank" rel="noopener noreferrer">zrok</a>.</p>
<p>The following procedure uses ngrok, but you can use any similar reverse proxy or forwarding platform.
This procedure also assumes that you&#x27;re using the default Langflow listening address <code>http://127.0.0.1:7860</code> (<code>http://127.0.0.1:7868</code> if using Langflow for Desktop).</p>
<ol>
<li>
<p>Sign up for an <a href="https://dashboard.ngrok.com/signup" target="_blank" rel="noopener noreferrer">ngrok account</a>.</p>
</li>
<li>
<p><a href="https://ngrok.com/docs/getting-started/#1-install-ngrok" target="_blank" rel="noopener noreferrer">Install ngrok</a>.</p>
</li>
<li>
<p>Copy your <a href="https://dashboard.ngrok.com/get-started/your-authtoken" target="_blank" rel="noopener noreferrer">ngrok authtoken</a> and use it to authenticate your local ngrok server:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>ngrok config add-authtoken NGROK_TOKEN</span></div></div><br></code></div></div>
<p>Replace <code>NGROK_TOKEN</code> with your ngrok authtoken.</p>
</li>
<li>
<p>Use ngrok to expose your Langflow server to the public internet:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>ngrok http http://localhost:7860</span></div></div><br></code></div></div>
<p>The ngrok session starts in your terminal and deploys an ephemeral domain with no authentication.
To add authentication or deploy a static domain, see the <a href="https://ngrok.com/docs/" target="_blank" rel="noopener noreferrer">ngrok documentation</a>.</p>
<p>The <code>Forwarding</code> row displays the forwarding address for your Langflow server:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>Forwarding https://94b1-76-64-171-14.ngrok-free.app -&gt; http://localhost:7860</span></div></div><br></code></div></div>
<p>The forwarding address is acting as a reverse proxy for your Langflow server.</p>
</li>
<li>
<p>From the Langflow dashboard, select the project that contains the flows you want to serve as tools, and then click the <strong>MCP Server</strong> tab.</p>
<p>Note that the code template now contains your ngrok forwarding address instead of the localhost address:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span>{</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;mcpServers&quot;: {</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;PROJECT_NAME&quot;: {</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;command&quot;: &quot;uvx&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;args&quot;: [</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;mcp-proxy&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> &quot;https://94b1-73-64-171-14.ngrok-free.app/api/v1/mcp/project/fdbc12af-0dd4-43dc-b9ce-c324d1ce5cd1/sse&quot;</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> ]</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->11</span><div style="display:inline-block;margin-left:16px"><span>}</span></div></div><br></code></div></div>
</li>
<li>
<p>Complete the steps in <a href="#connect-clients-to-use-the-servers-actions">Connect clients to Langflow&#x27;s MCP server</a> using the ngrok forwarding address.</p>
</li>
</ol>
<p>Your MCP client is now connected to your project&#x27;s MCP server over the public internet.</p>
<p>If using Cursor, your conversations are the same as they are on your local host:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>{</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span> &quot;input_value&quot;: &quot;What job experience does Emily have?&quot;</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>}</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>Result:</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>What job experience does Emily have?</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>Emily J. Wilson has the following job experience:</span></div></div><br></code></div></div>
<p>You can use the ngrok console output to monitor requests for your project&#x27;s endpoint:</p>
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>16:35:48.566 EDT GET /api/v1/mcp/project/fdbc12af-0dd4-43dc-b9ce-c324d1ce5cd1 200 OK</span></div></div><br></code></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/concepts-publish"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Publish flows</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/concepts-file-management"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Manage files</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#prerequisites" class="table-of-contents__link toc-highlight">Prerequisites</a></li><li><a href="#select-flows-to-serve" class="table-of-contents__link toc-highlight">Select and configure flows to expose as MCP tools</a></li><li><a href="#connect-clients-to-use-the-servers-actions" class="table-of-contents__link toc-highlight">Connect clients to Langflow&#39;s MCP server</a><ul><li><a href="#authentication" class="table-of-contents__link toc-highlight">MCP server authentication and environment variables</a></li></ul></li><li><a href="#name-and-describe-your-flows" class="table-of-contents__link toc-highlight">Name and describe your flows for agentic use</a></li><li><a href="#test-and-debug-flows" class="table-of-contents__link toc-highlight">Use MCP Inspector to test and debug flows</a></li><li><a href="#deploy-your-server-externally" class="table-of-contents__link toc-highlight">Deploy your MCP server externally</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title"></div><ul class="footer__items clean-list"><li class="footer__item"><div class="footer-links">
<span>© 2025 Langflow</span>
<span id="preferenceCenterContainer"> ·&nbsp; <a href="/cookies">Manage Privacy Choices</a></span>
</div></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/langflow-logo-black.svg" alt="Langflow" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width="160" height="40"><img src="/img/langflow-logo-white.svg" alt="Langflow" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width="160" height="40"></div></div></div></footer><div style="position:fixed;right:20px;bottom:20px;z-index:100;display:flex;align-items:center;gap:10px;cursor:pointer"><div style="background-color:#f6f6f6;border-radius:50%;width:48px;height:48px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px rgba(0,0,0,0.1)"><img src="/img/langflow-icon-black-transparent.svg" style="width:40px" alt="Search"></div></div></div>
</body>
</html>