An MCP server that exposes the chatflows of your local (or remote) Flowise instance as tools for Claude, Cursor, free-code, VS Code, Windsurf, or any MCP client — either as two generic tools or as one dedicated tool per chatflow.
Un servidor MCP que expone los chatflows de tu instancia de Flowise (local o remota) como herramientas para Claude, Cursor, free-code, VS Code, Windsurf o cualquier cliente MCP — ya sea como dos herramientas genéricas o como una herramienta dedicada por cada chatflow.
The server exposes tools in one of two modes, chosen with FLOWISE_DYNAMIC:
| Tool | What it does |
|---|---|
list_chatflows() | Returns a JSON array of {"id", "name"} for every chatflow that passes the configured whitelist/blacklist filters. |
create_prediction(chatflow_id, question) | Runs the given chatflow with question and returns its response (the raw Flowise JSON, re-serialized as a string). |
This mode fits any client out of the box: the model discovers chatflows with list_chatflows and calls create_prediction with whichever id it needs, without you touching the config again when chatflows change.
FLOWISE_DYNAMIC=true)
At startup, the server calls Flowise once, and registers one tool per chatflow
instead of the two generic ones — e.g. a chatflow named "Support Bot" becomes a tool
flowise_support_bot(question). See Dynamic mode below for naming rules.
El servidor expone herramientas en uno de dos modos, elegido con FLOWISE_DYNAMIC:
| Herramienta | Qué hace |
|---|---|
list_chatflows() | Devuelve un array JSON de {"id", "name"} para cada chatflow que pasa los filtros de whitelist/blacklist configurados. |
create_prediction(chatflow_id, question) | Ejecuta el chatflow indicado con question y devuelve su respuesta (el JSON crudo de Flowise, reserializado como string). |
Este modo funciona con cualquier cliente sin configuración adicional: el modelo descubre los chatflows con list_chatflows y llama a create_prediction con el id que necesite, sin que tengas que volver a tocar la configuración cuando cambien los chatflows.
FLOWISE_DYNAMIC=true)
Al iniciar, el servidor llama a Flowise una vez y registra una herramienta por cada chatflow
en lugar de las dos genéricas — por ejemplo, un chatflow llamado "Support Bot" se convierte en la herramienta
flowise_support_bot(question). Consulta Modo dinámico más abajo para conocer las reglas de nomenclatura.
npx -y -p @suamkf08/mcp-flowise mcp-flowise-install --client claude
npx -y -p @suamkf08/mcp-flowise mcp-flowise-install --client cursor
npx -y -p @suamkf08/mcp-flowise mcp-flowise-install --client free-code
npx -y -p @suamkf08/mcp-flowise mcp-flowise-install --client vscode
npx -y -p @suamkf08/mcp-flowise mcp-flowise-install --client windsurf
-p @suamkf08/mcp-flowise pulls the published package, which ships the
mcp-flowise-install binary; npx then runs that binary. There is no
separate @suamkf08/mcp-flowise-install package on npm — the installer lives
inside @suamkf08/mcp-flowise.
The script prompts for FLOWISE_API_ENDPOINT (defaults to
http://localhost:3000 if you just press enter) and FLOWISE_API_KEY
(leave empty if Flowise auth is disabled), then writes the mcp-flowise entry
into that client's config file and prints the path it wrote to. If an entry already
exists it asks before overwriting. Restart the client afterwards to pick up the change.
The installer only asks for endpoint and API key. If you want
FLOWISE_DYNAMIC or the whitelist/blacklist filters (see
Configuration), add them to the generated config's
env block by hand, or use the manual install below.
Every client config follows the same shape — a command/args/env block — only the file path and surrounding structure differ.
Edit claude_desktop_config.json
(~/Library/Application Support/Claude/claude_desktop_config.json on macOS,
%APPDATA%\Claude\claude_desktop_config.json on Windows,
~/.config/Claude/claude_desktop_config.json on Linux):
-p @suamkf08/mcp-flowise descarga el paquete publicado, que incluye el
binario mcp-flowise-install; npx luego ejecuta ese binario. No existe un
paquete @suamkf08/mcp-flowise-install separado en npm — el instalador vive
dentro de @suamkf08/mcp-flowise.
El script solicita FLOWISE_API_ENDPOINT (por defecto
http://localhost:3000 si simplemente presionas enter) y FLOWISE_API_KEY
(déjalo vacío si la autenticación de Flowise está desactivada), luego escribe la entrada mcp-flowise
en el archivo de configuración de ese cliente e imprime la ruta donde escribió. Si ya existe una
entrada, pregunta antes de sobrescribirla. Reinicia el cliente después para que tome el cambio.
El instalador solo pregunta por el endpoint y la API key. Si quieres
FLOWISE_DYNAMIC o los filtros de whitelist/blacklist (ver
Configuración), agrégalos a mano en el bloque
env de la configuración generada, o usa la instalación manual de abajo.
Cada configuración de cliente sigue la misma forma — un bloque command/args/env — solo difieren la ruta del archivo y la estructura que lo rodea.
Edita claude_desktop_config.json
(~/Library/Application Support/Claude/claude_desktop_config.json en macOS,
%APPDATA%\Claude\claude_desktop_config.json en Windows,
~/.config/Claude/claude_desktop_config.json en Linux):
{
"mcpServers": {
"mcp-flowise": {
"command": "npx",
"args": ["-y", "@suamkf08/mcp-flowise"],
"env": {
"FLOWISE_API_ENDPOINT": "http://localhost:3000",
"FLOWISE_API_KEY": ""
}
}
}
}
Install uv first if you don't have it:
Instala uv primero si no lo tienes:
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
{
"mcpServers": {
"mcp-flowise": {
"command": "uvx",
"args": ["mcp-flowise"],
"env": {
"FLOWISE_API_ENDPOINT": "http://localhost:3000",
"FLOWISE_API_KEY": ""
}
}
}
}
Add to .cursor/mcp.json in your project, or ~/.cursor/mcp.json globally:
Agrégalo a .cursor/mcp.json en tu proyecto, o a ~/.cursor/mcp.json de forma global:
{
"mcpServers": {
"mcp-flowise": {
"command": "npx",
"args": ["-y", "@suamkf08/mcp-flowise"],
"env": {
"FLOWISE_API_ENDPOINT": "http://localhost:3000",
"FLOWISE_API_KEY": ""
}
}
}
}
Add to ~/.free-code/agent/mcp.json (or import with /mcp-import):
Agrégalo a ~/.free-code/agent/mcp.json (o impórtalo con /mcp-import):
{
"mcpServers": {
"mcp-flowise": {
"command": "npx",
"args": ["-y", "@suamkf08/mcp-flowise"],
"env": {
"FLOWISE_API_ENDPOINT": "http://localhost:3000",
"FLOWISE_API_KEY": ""
}
}
}
}
Then enable it:
Luego actívalo:
/mcp enable mcp-flowise
/reload
Same command/args/env block as above, written into that client's own MCP config file — the one-command installer (above) already knows both paths per OS, so it's usually simpler to run it with --client vscode or --client windsurf than to find the file by hand.
El mismo bloque command/args/env que arriba, escrito en el propio archivo de configuración MCP de ese cliente — el instalador de un solo comando (arriba) ya conoce ambas rutas según el sistema operativo, así que suele ser más simple ejecutarlo con --client vscode o --client windsurf que buscar el archivo a mano.
All configuration is via environment variables passed in the env block of the MCP config:
| Environment variable | Default | Description |
|---|---|---|
FLOWISE_API_ENDPOINT | http://localhost:3000 | Base URL of your Flowise instance. Trailing slash is stripped automatically. |
FLOWISE_API_KEY | (empty) | Bearer token (Flowise → Settings → API Keys). Sent as Authorization: Bearer <key> only when non-empty. |
FLOWISE_DYNAMIC | false | Set to true (also accepts 1/yes) to register one tool per chatflow instead of the two generic tools. |
FLOWISE_WHITELIST_ID | (empty) | Comma-separated chatflow IDs to include. If set, any chatflow whose id isn't in this list is dropped. |
FLOWISE_BLACKLIST_ID | (empty) | Comma-separated chatflow IDs to exclude, checked after the whitelist. |
FLOWISE_WHITELIST_NAME_REGEX | (empty) | Only include chatflows whose name matches this regex (re.search, not full match). |
FLOWISE_BLACKLIST_NAME_REGEX | (empty) | Exclude chatflows whose name matches this regex, checked last. |
LOG_LEVEL | INFO | Python logging level for the server's own stderr logs. |
These filters apply the same way in both simple mode (they shape what
list_chatflows() returns) and dynamic mode (they shape what gets registered
at startup) — see Filtering chatflows for the exact
order they're applied in.
Toda la configuración se hace mediante variables de entorno pasadas en el bloque env de la configuración MCP:
| Variable de entorno | Por defecto | Descripción |
|---|---|---|
FLOWISE_API_ENDPOINT | http://localhost:3000 | URL base de tu instancia de Flowise. La barra final se elimina automáticamente. |
FLOWISE_API_KEY | (vacío) | Token bearer (Flowise → Settings → API Keys). Se envía como Authorization: Bearer <key> solo cuando no está vacío. |
FLOWISE_DYNAMIC | false | Configúralo en true (también acepta 1/yes) para registrar una herramienta por cada chatflow en lugar de las dos herramientas genéricas. |
FLOWISE_WHITELIST_ID | (vacío) | IDs de chatflows separados por comas para incluir. Si se configura, cualquier chatflow cuyo id no esté en esta lista se descarta. |
FLOWISE_BLACKLIST_ID | (vacío) | IDs de chatflows separados por comas para excluir, verificados después de la whitelist. |
FLOWISE_WHITELIST_NAME_REGEX | (vacío) | Solo incluye chatflows cuyo name coincida con esta regex (re.search, no coincidencia completa). |
FLOWISE_BLACKLIST_NAME_REGEX | (vacío) | Excluye chatflows cuyo name coincida con esta regex, verificado al final. |
LOG_LEVEL | INFO | Nivel de logging de Python para los propios logs de stderr del servidor. |
Estos filtros se aplican de la misma manera tanto en el modo simple (determinan lo que
devuelve list_chatflows()) como en el modo dinámico (determinan lo que se
registra al iniciar) — ver Filtrar chatflows para el
orden exacto en que se aplican.
With FLOWISE_DYNAMIC=true, the server fetches the chatflow list once at
startup and registers a tool per chatflow instead of the two generic ones. Each tool
takes a single question argument and internally calls the same prediction
endpoint as create_prediction.
The chatflow's name is turned into a tool name by:
_.flowise_ (falling back to flowise_chatflow if the result is empty).So "Support Bot" → flowise_support_bot, and "Lead-Scoring v2" → flowise_lead_scoring_v2.
If two chatflows normalize to the same tool name, the second (and any further
duplicate) gets the first 6 characters of its chatflow id appended, e.g.
flowise_support_bot_a1b2c3, so both remain callable.
The chatflow list is fetched only once, when the server process starts. Chatflows
added, renamed, or removed in Flowise afterwards won't appear (or disappear) as tools
until the MCP client restarts this server. If you add/rename chatflows often, simple
mode's list_chatflows() is more convenient since it re-queries Flowise on
every call.
If fetching chatflows fails at startup (Flowise unreachable, auth error, etc.), the error is logged to stderr and dynamic registration is skipped — the server still starts, just with no chatflow tools registered.
Con FLOWISE_DYNAMIC=true, el servidor obtiene la lista de chatflows una vez al
iniciar y registra una herramienta por cada chatflow en lugar de las dos genéricas. Cada
herramienta toma un único argumento question y llama internamente al mismo
endpoint de predicción que create_prediction.
El name del chatflow se convierte en el nombre de la herramienta de la siguiente manera:
_.flowise_ (usando flowise_chatflow como alternativa si el resultado queda vacío).Así, "Support Bot" → flowise_support_bot, y "Lead-Scoring v2" → flowise_lead_scoring_v2.
Si dos chatflows se normalizan al mismo nombre de herramienta, al segundo (y a cualquier
duplicado adicional) se le agregan los primeros 6 caracteres de su id de chatflow, por
ejemplo flowise_support_bot_a1b2c3, de modo que ambos sigan siendo invocables.
La lista de chatflows se obtiene solo una vez, cuando se inicia el proceso del servidor.
Los chatflows agregados, renombrados o eliminados en Flowise después no aparecerán (ni
desaparecerán) como herramientas hasta que el cliente MCP reinicie este servidor. Si
agregas o renombras chatflows con frecuencia, el list_chatflows() del modo
simple es más conveniente, ya que vuelve a consultar Flowise en cada llamada.
Si la obtención de chatflows falla al iniciar (Flowise inaccesible, error de autenticación, etc.), el error se registra en stderr y se omite el registro dinámico — el servidor de todos modos se inicia, solo que sin ninguna herramienta de chatflow registrada.
Whitelist/blacklist filters are combined and applied in this fixed order, per chatflow:
A chatflow only survives if it passes all four checks. Regexes use Python's
re.search, so they match anywhere in the name, not just the whole string —
FLOWISE_WHITELIST_NAME_REGEX=support matches both "Support Bot"
and "Customer Support v3".
Los filtros de whitelist/blacklist se combinan y se aplican en este orden fijo, por cada chatflow:
Un chatflow solo sobrevive si pasa las cuatro verificaciones. Las expresiones regulares
usan re.search de Python, por lo que coinciden en cualquier parte del name, no
solo en la cadena completa — FLOWISE_WHITELIST_NAME_REGEX=support coincide
tanto con "Support Bot" como con "Customer Support v3".
Both tools catch httpx.HTTPError (connection failures, timeouts, non-2xx
responses) and return a plain-text error message instead of raising — so a Flowise
instance being down or a bad chatflow_id surfaces to the model as readable
text, not a protocol-level failure:
Ambas herramientas capturan httpx.HTTPError (fallos de conexión, timeouts,
respuestas no 2xx) y devuelven un mensaje de error en texto plano en lugar de lanzar una
excepción — de modo que una instancia de Flowise caída o un chatflow_id
inválido se le presenta al modelo como texto legible, no como un fallo a nivel de
protocolo:
Error contacting Flowise at http://localhost:3000: ...
Error calling chatflow <id>: ...
Every HTTP request (list or predict) uses a 120-second timeout.
Cada solicitud HTTP (de listado o de predicción) usa un timeout de 120 segundos.
git clone https://github.com/suamkf08/mcp-flowise
cd mcp-flowise
uv run mcp-flowise # starts over stdio; Ctrl+C to quit
Inspect it interactively with MCP Inspector:
Inspecciónalo de forma interactiva con MCP Inspector:
uv run mcp dev mcp_flowise/server.py
smithery.yaml at the repo root declares a stdio startCommand
for deploying through Smithery,
with a config schema covering flowiseApiEndpoint (required),
flowiseApiKey, flowiseDynamic, flowiseWhitelistId,
and flowiseBlacklistId. The name-regex filters aren't exposed in that
schema — set them as plain environment variables if you need them there.
smithery.yaml en la raíz del repositorio declara un startCommand
de stdio para desplegar a través de Smithery,
con un esquema de configuración que cubre flowiseApiEndpoint (obligatorio),
flowiseApiKey, flowiseDynamic, flowiseWhitelistId,
y flowiseBlacklistId. Los filtros de name-regex no están expuestos en ese
esquema — configúralos como variables de entorno normales si los necesitas ahí.
What this server actually calls on your Flowise instance:
| Purpose | Request |
|---|---|
| List chatflows | GET {endpoint}/api/v1/chatflows |
| Run a chatflow | POST {endpoint}/api/v1/prediction/{chatflowId} with body {"question": "..."} |
| Auth | Authorization: Bearer <FLOWISE_API_KEY>, omitted entirely if the key is empty |
Lo que este servidor realmente llama en tu instancia de Flowise:
| Propósito | Solicitud |
|---|---|
| Listar chatflows | GET {endpoint}/api/v1/chatflows |
| Ejecutar un chatflow | POST {endpoint}/api/v1/prediction/{chatflowId} con cuerpo {"question": "..."} |
| Autenticación | Authorization: Bearer <FLOWISE_API_KEY>, se omite por completo si la key está vacía |
FLOWISE_API_ENDPOINT.FLOWISE_API_KEY is stored in plain text in whichever client config file you write it to (claude_desktop_config.json, mcp.json, etc.) — treat that file with the same care as any other credential file.FLOWISE_API_ENDPOINT points at a non-localhost Flowise instance, prefer https:// so the API key isn't sent in the clear over the network.FLOWISE_API_KEY can call any chatflow directly against the Flowise API, filters or not.FLOWISE_API_ENDPOINT de Flowise.FLOWISE_API_KEY se almacena en texto plano en el archivo de configuración del cliente en el que la escribas (claude_desktop_config.json, mcp.json, etc.) — trata ese archivo con el mismo cuidado que cualquier otro archivo de credenciales.FLOWISE_API_ENDPOINT apunta a una instancia de Flowise que no es localhost, prefiere https:// para que la API key no se envíe sin cifrar por la red.FLOWISE_API_KEY puede llamar directamente a cualquier chatflow contra la API de Flowise, con o sin filtros.