ds-mcp-flowise 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,55 +1,122 @@
1
1
  # DS-MCP-FLOWISE
2
2
 
3
- MCP (Model Context Protocol) server for building and managing [Flowise](https://flowiseai.com/) chatflows and agentflows. Provides AI assistants (Claude, GPT, etc.) with comprehensive knowledge of Flowise nodes and tools for workflow creation.
3
+ MCP (Model Context Protocol) server that gives AI assistants (Claude, GPT, etc.) deep knowledge of [Flowise](https://flowiseai.com/) nodes so they can help you design, build, and deploy chatflows and agentflows.
4
4
 
5
- ## Features
5
+ ## What This Does
6
6
 
7
- - **Complete Node Database**: All 390+ Flowise nodes with full schemas, inputs, and descriptions
8
- - **Template Library**: 50+ marketplace templates as working examples
9
- - **Intelligent Search**: Full-text search across nodes and templates
10
- - **Flow Validation**: Verify flows before deploying
11
- - **Compatibility Finder**: Discover which nodes can connect together
12
- - **Flow Skeletons**: Generate starting points for common use cases
7
+ When connected to Claude Code (or other MCP clients), this server lets the AI:
8
+ - Know all 311 Flowise nodes and their configurations
9
+ - Understand how nodes connect together
10
+ - Design complete flows based on your requirements
11
+ - Output valid JSON you can import into Flowise
12
+ - **Deploy flows directly to your Flowise instance** (optional API integration)
13
13
 
14
- ## Installation
14
+ ## Quick Start
15
15
 
16
- ### Quick Start with Claude Code
16
+ ### 1. Add to Claude Code
17
17
 
18
- ```bash
19
- # Clone the repository
20
- git clone https://github.com/dtsoden/DS-MCP-FLOWISE.git
21
- cd DS-MCP-FLOWISE
18
+ Add this to your Claude Code MCP configuration (`claude_desktop_config.json` or via settings):
22
19
 
23
- # Install dependencies
24
- npm install
20
+ ```json
21
+ {
22
+ "mcpServers": {
23
+ "flowise": {
24
+ "command": "npx",
25
+ "args": ["-y", "ds-mcp-flowise"]
26
+ }
27
+ }
28
+ }
29
+ ```
25
30
 
26
- # Build the database (extracts from Flowise source)
27
- npm run extract
28
- npm run prepare-db
31
+ That's it. No cloning, no building. The `npx` command downloads and runs it automatically.
29
32
 
30
- # Build the server
31
- npm run build
33
+ ### 2. Start a Conversation
34
+
35
+ Open Claude Code and describe what you want to build:
36
+
37
+ > "Build me a RAG chatbot that uses Pinecone for vector storage and OpenAI for the LLM"
38
+
39
+ ### 3. Get Your Flow
40
+
41
+ Claude will use the MCP tools to:
42
+ - Find the right nodes (ChatOpenAI, Pinecone, embeddings, etc.)
43
+ - Check their schemas and required inputs
44
+ - Design the complete flow
45
+ - Output the JSON with all nodes and edges
46
+
47
+ ### 4. Import into Flowise
48
+
49
+ 1. Open Flowise
50
+ 2. Create a new Chatflow or Agentflow
51
+ 3. Click the menu (⋮) → **Load Chatflow**
52
+ 4. Paste the JSON Claude gave you
53
+ 5. Configure credentials (API keys) for each node
54
+ 6. Save and test
55
+
56
+ ## Flowise API Integration (Optional)
57
+
58
+ Instead of manually importing JSON, you can connect directly to your Flowise instance to create, update, and manage chatflows via the API.
59
+
60
+ ### Setup
61
+
62
+ 1. Create a `.env` file in the project root (or in your working directory):
63
+
64
+ ```bash
65
+ FLOWISE_API_URL=https://your-flowise-instance.com
66
+ FLOWISE_API_KEY=your-api-key-here
32
67
  ```
33
68
 
34
- ### Add to Claude Code
69
+ 2. Get your API key from Flowise:
70
+ - Open your Flowise instance
71
+ - Go to **Settings** → **API Keys**
72
+ - Create a new API key or copy an existing one
73
+
74
+ 3. The MCP server will automatically load credentials from `.env` when it starts.
75
+
76
+ ### Usage
77
+
78
+ Once configured, you can ask Claude:
79
+
80
+ - "Test the connection to my Flowise instance"
81
+ - "List all my chatflows"
82
+ - "Create a new chatflow with this design and deploy it"
83
+ - "Update the existing chatflow with these changes"
84
+
85
+ ### Security Notes
35
86
 
36
- Add to your Claude Code MCP configuration:
87
+ - Never commit your `.env` file to version control
88
+ - The `.env` file is already in `.gitignore`
89
+ - API keys should be kept private and rotated periodically
37
90
 
91
+ ## Alternative Installation Methods
92
+
93
+ ### Global Install (npm)
94
+
95
+ ```bash
96
+ npm install -g ds-mcp-flowise
97
+ ```
98
+
99
+ Then in your MCP config:
38
100
  ```json
39
101
  {
40
102
  "mcpServers": {
41
103
  "flowise": {
42
- "command": "node",
43
- "args": ["/path/to/DS-MCP-FLOWISE/dist/index.js"]
104
+ "command": "ds-mcp-flowise"
44
105
  }
45
106
  }
46
107
  }
47
108
  ```
48
109
 
49
- ### Add to Claude Desktop
110
+ ### Build from Source
50
111
 
51
- Add to `claude_desktop_config.json`:
112
+ ```bash
113
+ git clone https://github.com/dtsoden/DS-MCP-FLOWISE.git
114
+ cd DS-MCP-FLOWISE
115
+ npm install
116
+ npm run build
117
+ ```
52
118
 
119
+ Then in your MCP config:
53
120
  ```json
54
121
  {
55
122
  "mcpServers": {
@@ -61,23 +128,23 @@ Add to `claude_desktop_config.json`:
61
128
  }
62
129
  ```
63
130
 
64
- ## Tools
131
+ ## Available Tools
65
132
 
66
133
  ### Node Discovery
67
134
 
68
135
  | Tool | Description |
69
136
  |------|-------------|
70
- | `list_categories` | List all node categories with counts |
137
+ | `list_categories` | List all 26 node categories with counts |
71
138
  | `list_nodes` | List nodes, optionally filtered by category |
72
139
  | `get_node_schema` | Get detailed schema for a node including all inputs |
73
- | `search_nodes` | Full-text search across nodes |
140
+ | `search_nodes` | Search nodes by keyword |
74
141
  | `find_compatible_nodes` | Find nodes that can connect to a given node |
75
142
 
76
143
  ### Template Library
77
144
 
78
145
  | Tool | Description |
79
146
  |------|-------------|
80
- | `list_templates` | List marketplace templates by type |
147
+ | `list_templates` | List 64 marketplace templates by type |
81
148
  | `get_template` | Get complete template with nodes and edges |
82
149
 
83
150
  ### Flow Building
@@ -87,86 +154,58 @@ Add to `claude_desktop_config.json`:
87
154
  | `validate_flow` | Validate a flow's nodes and connections |
88
155
  | `generate_flow_skeleton` | Generate a starting flow for common use cases |
89
156
 
90
- ## Example Usage
91
-
92
- ### Discover Available Nodes
93
-
94
- ```
95
- Use list_categories to see all node types
96
-
97
- Use list_nodes with category="Chat Models" to see chat models
98
-
99
- Use search_nodes with query="vector database" to find vector stores
100
- ```
101
-
102
- ### Build a RAG Chatbot
157
+ ### Flowise API (requires .env configuration)
103
158
 
104
- ```
105
- 1. Use get_template with name="Conversational Retrieval QA Chain" for an example
106
- 2. Use get_node_schema for each node you want to use
107
- 3. Use find_compatible_nodes to see what connects where
108
- 4. Use validate_flow to check your flow before deploying
109
- ```
110
-
111
- ### Generate a Flow Skeleton
159
+ | Tool | Description |
160
+ |------|-------------|
161
+ | `flowise_test_connection` | Test connection to your Flowise instance |
162
+ | `flowise_list_chatflows` | List all chatflows in your instance |
163
+ | `flowise_get_chatflow` | Get details of a specific chatflow |
164
+ | `flowise_create_chatflow` | Create and deploy a new chatflow |
165
+ | `flowise_update_chatflow` | Update an existing chatflow |
166
+ | `flowise_delete_chatflow` | Delete a chatflow |
112
167
 
113
- ```
114
- Use generate_flow_skeleton with use_case="rag_chatbot"
115
-
116
- Supported use cases:
117
- - simple_chatbot
118
- - rag_chatbot
119
- - conversational_agent
120
- - document_qa
121
- - api_agent
122
- - multi_agent
123
- ```
168
+ > **Note:** The Flowise API currently only supports **chatflows**. Agentflows must be created through the Flowise UI by importing the generated JSON.
124
169
 
125
- ## Resources
170
+ ## Example Prompts
126
171
 
127
- The server also exposes resources for bulk access:
172
+ Once connected, try asking Claude:
128
173
 
129
- - `flowise://categories` - All categories
130
- - `flowise://nodes` - All nodes
131
- - `flowise://templates` - All templates
174
+ - "What vector stores does Flowise support?"
175
+ - "Show me how to build a simple chatbot with memory"
176
+ - "Create a RAG flow using Pinecone and Claude"
177
+ - "What nodes can connect to a ConversationChain?"
178
+ - "Build me an agent that can search the web and query a database"
132
179
 
133
- ## Database Schema
180
+ ## What's Included
134
181
 
135
- The SQLite database contains:
182
+ - **311 Flowise nodes** with full schemas
183
+ - **1,915 input parameters** documented
184
+ - **26 node categories** (Chat Models, Vector Stores, Tools, etc.)
185
+ - **64 marketplace templates** as examples
186
+ - **SQLite database** for fast queries
136
187
 
137
- - **nodes** - All Flowise node definitions
138
- - **node_inputs** - Input parameters for each node
139
- - **categories** - Node categories with counts
140
- - **templates** - Marketplace templates
141
- - **nodes_fts** - Full-text search index for nodes
142
- - **templates_fts** - Full-text search index for templates
188
+ ## Updating the Node Database
143
189
 
144
- ## Development
190
+ To update with the latest Flowise nodes:
145
191
 
146
192
  ```bash
147
- # Run in development mode
148
- npm run dev
193
+ git clone https://github.com/dtsoden/DS-MCP-FLOWISE.git
194
+ cd DS-MCP-FLOWISE
195
+ npm install
149
196
 
150
- # Extract nodes from Flowise source
197
+ # This clones Flowise and extracts all node definitions
151
198
  npm run extract
152
199
 
153
- # Prepare SQLite database
200
+ # This rebuilds the SQLite database
154
201
  npm run prepare-db
155
202
 
156
- # Build for production
157
203
  npm run build
158
204
  ```
159
205
 
160
- ## How It Works
161
-
162
- 1. **Extraction**: Parses Flowise source code to extract all node definitions
163
- 2. **Database**: Stores nodes, inputs, and templates in SQLite for fast queries
164
- 3. **MCP Server**: Exposes tools and resources via Model Context Protocol
165
- 4. **AI Integration**: Claude/GPT can query nodes, search, and validate flows
166
-
167
206
  ## Credits
168
207
 
169
- - [Flowise](https://github.com/FlowiseAI/Flowise) - The amazing no-code LLM orchestration platform
208
+ - [Flowise](https://github.com/FlowiseAI/Flowise) - The no-code LLM orchestration platform
170
209
  - Inspired by [n8n-mcp](https://github.com/czlonkowski/n8n-mcp) architecture
171
210
 
172
211
  ## License
package/dist/index.js CHANGED
@@ -15,6 +15,34 @@ import * as fs from 'fs';
15
15
  import { fileURLToPath } from 'url';
16
16
  const __filename = fileURLToPath(import.meta.url);
17
17
  const __dirname = path.dirname(__filename);
18
+ // Load .env file if it exists
19
+ function loadEnv() {
20
+ const envPaths = [
21
+ path.join(process.cwd(), '.env'),
22
+ path.join(__dirname, '..', '.env'),
23
+ path.join(__dirname, '..', '..', '.env'),
24
+ ];
25
+ for (const envPath of envPaths) {
26
+ if (fs.existsSync(envPath)) {
27
+ const envContent = fs.readFileSync(envPath, 'utf-8');
28
+ for (const line of envContent.split('\n')) {
29
+ const trimmed = line.trim();
30
+ if (trimmed && !trimmed.startsWith('#')) {
31
+ const [key, ...valueParts] = trimmed.split('=');
32
+ const value = valueParts.join('=');
33
+ if (key && value) {
34
+ process.env[key.trim()] = value.trim();
35
+ }
36
+ }
37
+ }
38
+ break;
39
+ }
40
+ }
41
+ }
42
+ loadEnv();
43
+ // Flowise API configuration
44
+ const FLOWISE_API_URL = process.env.FLOWISE_API_URL || '';
45
+ const FLOWISE_API_KEY = process.env.FLOWISE_API_KEY || '';
18
46
  // Find database path
19
47
  function findDatabasePath() {
20
48
  const possiblePaths = [
@@ -50,10 +78,33 @@ function queryOne(sql, params = []) {
50
78
  const results = query(sql, params);
51
79
  return results.length > 0 ? results[0] : null;
52
80
  }
81
+ // === FLOWISE API HELPERS ===
82
+ async function flowiseApiRequest(endpoint, method = 'GET', body) {
83
+ if (!FLOWISE_API_URL) {
84
+ throw new Error('FLOWISE_API_URL not configured. Set it in .env file.');
85
+ }
86
+ const url = `${FLOWISE_API_URL.replace(/\/$/, '')}/api/v1${endpoint}`;
87
+ const headers = {
88
+ 'Content-Type': 'application/json',
89
+ };
90
+ if (FLOWISE_API_KEY) {
91
+ headers['Authorization'] = `Bearer ${FLOWISE_API_KEY}`;
92
+ }
93
+ const response = await fetch(url, {
94
+ method,
95
+ headers,
96
+ body: body ? JSON.stringify(body) : undefined,
97
+ });
98
+ if (!response.ok) {
99
+ const errorText = await response.text();
100
+ throw new Error(`Flowise API error (${response.status}): ${errorText}`);
101
+ }
102
+ return response.json();
103
+ }
53
104
  // Create MCP server
54
105
  const server = new Server({
55
106
  name: 'ds-mcp-flowise',
56
- version: '1.0.0',
107
+ version: '1.1.0',
57
108
  }, {
58
109
  capabilities: {
59
110
  tools: {},
@@ -63,6 +114,7 @@ const server = new Server({
63
114
  });
64
115
  // === TOOL DEFINITIONS ===
65
116
  const TOOLS = [
117
+ // Node discovery tools
66
118
  {
67
119
  name: 'list_categories',
68
120
  description: 'List all available Flowise node categories with node counts',
@@ -224,6 +276,113 @@ const TOOLS = [
224
276
  required: ['use_case'],
225
277
  },
226
278
  },
279
+ // Flowise API tools
280
+ {
281
+ name: 'flowise_list_chatflows',
282
+ description: 'List all chatflows in the connected Flowise instance. Requires FLOWISE_API_URL and FLOWISE_API_KEY to be configured.',
283
+ inputSchema: {
284
+ type: 'object',
285
+ properties: {},
286
+ required: [],
287
+ },
288
+ },
289
+ {
290
+ name: 'flowise_get_chatflow',
291
+ description: 'Get details of a specific chatflow by ID from the connected Flowise instance.',
292
+ inputSchema: {
293
+ type: 'object',
294
+ properties: {
295
+ id: {
296
+ type: 'string',
297
+ description: 'The chatflow ID',
298
+ },
299
+ },
300
+ required: ['id'],
301
+ },
302
+ },
303
+ {
304
+ name: 'flowise_create_chatflow',
305
+ description: 'Create a new chatflow in the connected Flowise instance. This pushes your designed flow directly to Flowise.',
306
+ inputSchema: {
307
+ type: 'object',
308
+ properties: {
309
+ name: {
310
+ type: 'string',
311
+ description: 'Name for the chatflow',
312
+ },
313
+ nodes: {
314
+ type: 'array',
315
+ description: 'Array of node objects',
316
+ items: { type: 'object' },
317
+ },
318
+ edges: {
319
+ type: 'array',
320
+ description: 'Array of edge objects',
321
+ items: { type: 'object' },
322
+ },
323
+ deployed: {
324
+ type: 'boolean',
325
+ description: 'Whether to deploy immediately (default: false)',
326
+ },
327
+ },
328
+ required: ['name', 'nodes', 'edges'],
329
+ },
330
+ },
331
+ {
332
+ name: 'flowise_update_chatflow',
333
+ description: 'Update an existing chatflow in the connected Flowise instance.',
334
+ inputSchema: {
335
+ type: 'object',
336
+ properties: {
337
+ id: {
338
+ type: 'string',
339
+ description: 'The chatflow ID to update',
340
+ },
341
+ name: {
342
+ type: 'string',
343
+ description: 'New name for the chatflow (optional)',
344
+ },
345
+ nodes: {
346
+ type: 'array',
347
+ description: 'Updated array of node objects',
348
+ items: { type: 'object' },
349
+ },
350
+ edges: {
351
+ type: 'array',
352
+ description: 'Updated array of edge objects',
353
+ items: { type: 'object' },
354
+ },
355
+ deployed: {
356
+ type: 'boolean',
357
+ description: 'Whether the chatflow should be deployed',
358
+ },
359
+ },
360
+ required: ['id'],
361
+ },
362
+ },
363
+ {
364
+ name: 'flowise_delete_chatflow',
365
+ description: 'Delete a chatflow from the connected Flowise instance. Use with caution!',
366
+ inputSchema: {
367
+ type: 'object',
368
+ properties: {
369
+ id: {
370
+ type: 'string',
371
+ description: 'The chatflow ID to delete',
372
+ },
373
+ },
374
+ required: ['id'],
375
+ },
376
+ },
377
+ {
378
+ name: 'flowise_test_connection',
379
+ description: 'Test the connection to the configured Flowise instance. Use this to verify your API URL and key are correct.',
380
+ inputSchema: {
381
+ type: 'object',
382
+ properties: {},
383
+ required: [],
384
+ },
385
+ },
227
386
  ];
228
387
  // === TOOL IMPLEMENTATIONS ===
229
388
  function listCategories() {
@@ -265,7 +424,6 @@ function getNodeSchema(name) {
265
424
  WHERE node_name = ?
266
425
  ORDER BY additional_params, input_label
267
426
  `, [name]);
268
- // Parse JSON fields
269
427
  const schema = {
270
428
  ...node,
271
429
  base_classes: JSON.parse(node.base_classes || '[]'),
@@ -335,10 +493,8 @@ function findCompatibleNodes(nodeName, direction = 'inputs') {
335
493
  }
336
494
  const baseClasses = JSON.parse(node.base_classes || '[]');
337
495
  if (direction === 'inputs') {
338
- // Find nodes whose outputs (base_classes) match this node's input types
339
496
  const inputs = query(`SELECT input_type FROM node_inputs WHERE node_name = ?`, [nodeName]);
340
497
  const inputTypes = inputs.map((i) => i.input_type);
341
- // Find nodes that have these types in their base_classes
342
498
  const allNodes = query(`SELECT name, label, category, base_classes FROM nodes`);
343
499
  const compatible = allNodes.filter((n) => {
344
500
  const nodeBaseClasses = JSON.parse(n.base_classes || '[]');
@@ -351,7 +507,6 @@ function findCompatibleNodes(nodeName, direction = 'inputs') {
351
507
  return JSON.stringify({ compatible_inputs: compatible }, null, 2);
352
508
  }
353
509
  else {
354
- // Find nodes that accept this node's output types
355
510
  const allInputs = query(`
356
511
  SELECT DISTINCT n.name, n.label, n.category, ni.input_type
357
512
  FROM nodes n
@@ -362,7 +517,6 @@ function findCompatibleNodes(nodeName, direction = 'inputs') {
362
517
  label: i.label,
363
518
  category: i.category,
364
519
  }));
365
- // Deduplicate
366
520
  const unique = Array.from(new Map(compatible.map((c) => [c.name, c])).values());
367
521
  return JSON.stringify({ compatible_outputs: unique }, null, 2);
368
522
  }
@@ -370,7 +524,6 @@ function findCompatibleNodes(nodeName, direction = 'inputs') {
370
524
  function validateFlow(nodes, edges) {
371
525
  const errors = [];
372
526
  const warnings = [];
373
- // Check all nodes exist
374
527
  const nodeNames = new Set();
375
528
  for (const node of nodes) {
376
529
  const nodeName = node.data?.name || node.type || node.name;
@@ -384,7 +537,6 @@ function validateFlow(nodes, edges) {
384
537
  }
385
538
  nodeNames.add(node.id);
386
539
  }
387
- // Check all edges reference valid nodes
388
540
  for (const edge of edges) {
389
541
  if (!nodeNames.has(edge.source)) {
390
542
  errors.push(`Edge references non-existent source node: ${edge.source}`);
@@ -501,6 +653,85 @@ function generateFlowSkeleton(useCase, chatModel) {
501
653
  }
502
654
  return JSON.stringify(skeleton, null, 2);
503
655
  }
656
+ // === FLOWISE API IMPLEMENTATIONS ===
657
+ async function flowiseTestConnection() {
658
+ if (!FLOWISE_API_URL) {
659
+ return JSON.stringify({
660
+ connected: false,
661
+ error: 'FLOWISE_API_URL not configured. Create a .env file with FLOWISE_API_URL and FLOWISE_API_KEY.',
662
+ });
663
+ }
664
+ try {
665
+ const chatflows = await flowiseApiRequest('/chatflows');
666
+ return JSON.stringify({
667
+ connected: true,
668
+ url: FLOWISE_API_URL,
669
+ chatflows_count: Array.isArray(chatflows) ? chatflows.length : 0,
670
+ }, null, 2);
671
+ }
672
+ catch (error) {
673
+ return JSON.stringify({
674
+ connected: false,
675
+ url: FLOWISE_API_URL,
676
+ error: String(error),
677
+ }, null, 2);
678
+ }
679
+ }
680
+ async function flowiseListChatflows() {
681
+ const chatflows = await flowiseApiRequest('/chatflows');
682
+ // Return summary info for each chatflow
683
+ const summary = chatflows.map((cf) => ({
684
+ id: cf.id,
685
+ name: cf.name,
686
+ deployed: cf.deployed,
687
+ createdDate: cf.createdDate,
688
+ updatedDate: cf.updatedDate,
689
+ }));
690
+ return JSON.stringify(summary, null, 2);
691
+ }
692
+ async function flowiseGetChatflow(id) {
693
+ const chatflow = await flowiseApiRequest(`/chatflows/${id}`);
694
+ return JSON.stringify(chatflow, null, 2);
695
+ }
696
+ async function flowiseCreateChatflow(name, nodes, edges, deployed = false) {
697
+ const flowData = {
698
+ name,
699
+ flowData: JSON.stringify({ nodes, edges }),
700
+ deployed,
701
+ };
702
+ const result = await flowiseApiRequest('/chatflows', 'POST', flowData);
703
+ return JSON.stringify({
704
+ success: true,
705
+ id: result.id,
706
+ name: result.name,
707
+ message: `Chatflow "${name}" created successfully!`,
708
+ url: `${FLOWISE_API_URL}/chatflows/${result.id}`,
709
+ }, null, 2);
710
+ }
711
+ async function flowiseUpdateChatflow(id, name, nodes, edges, deployed) {
712
+ const updateData = {};
713
+ if (name)
714
+ updateData.name = name;
715
+ if (nodes && edges) {
716
+ updateData.flowData = JSON.stringify({ nodes, edges });
717
+ }
718
+ if (deployed !== undefined)
719
+ updateData.deployed = deployed;
720
+ const result = await flowiseApiRequest(`/chatflows/${id}`, 'PUT', updateData);
721
+ return JSON.stringify({
722
+ success: true,
723
+ id: result.id,
724
+ name: result.name,
725
+ message: `Chatflow updated successfully!`,
726
+ }, null, 2);
727
+ }
728
+ async function flowiseDeleteChatflow(id) {
729
+ await flowiseApiRequest(`/chatflows/${id}`, 'DELETE');
730
+ return JSON.stringify({
731
+ success: true,
732
+ message: `Chatflow ${id} deleted successfully!`,
733
+ }, null, 2);
734
+ }
504
735
  // === REQUEST HANDLERS ===
505
736
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
506
737
  tools: TOOLS,
@@ -510,6 +741,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
510
741
  try {
511
742
  let result;
512
743
  switch (name) {
744
+ // Node discovery tools
513
745
  case 'list_categories':
514
746
  result = listCategories();
515
747
  break;
@@ -537,6 +769,25 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
537
769
  case 'generate_flow_skeleton':
538
770
  result = generateFlowSkeleton(args?.use_case, args?.chat_model);
539
771
  break;
772
+ // Flowise API tools
773
+ case 'flowise_test_connection':
774
+ result = await flowiseTestConnection();
775
+ break;
776
+ case 'flowise_list_chatflows':
777
+ result = await flowiseListChatflows();
778
+ break;
779
+ case 'flowise_get_chatflow':
780
+ result = await flowiseGetChatflow(args?.id);
781
+ break;
782
+ case 'flowise_create_chatflow':
783
+ result = await flowiseCreateChatflow(args?.name, args?.nodes, args?.edges, args?.deployed);
784
+ break;
785
+ case 'flowise_update_chatflow':
786
+ result = await flowiseUpdateChatflow(args?.id, args?.name, args?.nodes, args?.edges, args?.deployed);
787
+ break;
788
+ case 'flowise_delete_chatflow':
789
+ result = await flowiseDeleteChatflow(args?.id);
790
+ break;
540
791
  default:
541
792
  throw new Error(`Unknown tool: ${name}`);
542
793
  }
@@ -636,7 +887,8 @@ First, use list_categories to see available node types.
636
887
  Then, use search_nodes or list_nodes to find relevant components.
637
888
  Use get_node_schema to understand how to configure each node.
638
889
  Check list_templates for similar examples.
639
- Finally, use validate_flow to verify the flow is valid.`,
890
+ Use validate_flow to verify the flow is valid.
891
+ Finally, use flowise_create_chatflow to push it directly to Flowise!`,
640
892
  },
641
893
  },
642
894
  ],
@@ -655,7 +907,8 @@ Agent flows use nodes from the "Agent Flows" category.
655
907
  Use list_nodes with category="Agent Flows" to see available nodes.
656
908
  Use list_templates with type="agentflowv2" for examples.
657
909
  Key nodes include: startAgentflow, agentAgentflow, llmAgentflow, toolAgentflow, conditionAgentflow.
658
- Use get_node_schema to understand each node's configuration.`,
910
+ Use get_node_schema to understand each node's configuration.
911
+ Finally, use flowise_create_chatflow to push it directly to Flowise!`,
659
912
  },
660
913
  },
661
914
  ],
@@ -672,6 +925,12 @@ async function main() {
672
925
  db = new SQL.Database(dbBuffer);
673
926
  console.error('DS-MCP-FLOWISE server started');
674
927
  console.error(`Database loaded from: ${dbPath}`);
928
+ if (FLOWISE_API_URL) {
929
+ console.error(`Flowise API configured: ${FLOWISE_API_URL}`);
930
+ }
931
+ else {
932
+ console.error('Flowise API not configured (set FLOWISE_API_URL in .env for direct flow creation)');
933
+ }
675
934
  const transport = new StdioServerTransport();
676
935
  await server.connect(transport);
677
936
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ds-mcp-flowise",
3
- "version": "1.0.0",
4
- "description": "MCP server for building and managing Flowise chatflows and agentflows. Provides AI assistants with comprehensive knowledge of Flowise nodes and tools for workflow creation.",
3
+ "version": "1.1.0",
4
+ "description": "MCP server for building and managing Flowise chatflows and agentflows. Provides AI assistants with comprehensive knowledge of Flowise nodes, tools for workflow creation, and direct API integration to deploy chatflows.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
7
7
  "bin": {
package/src/index.ts CHANGED
@@ -25,6 +25,38 @@ import { fileURLToPath } from 'url';
25
25
  const __filename = fileURLToPath(import.meta.url);
26
26
  const __dirname = path.dirname(__filename);
27
27
 
28
+ // Load .env file if it exists
29
+ function loadEnv() {
30
+ const envPaths = [
31
+ path.join(process.cwd(), '.env'),
32
+ path.join(__dirname, '..', '.env'),
33
+ path.join(__dirname, '..', '..', '.env'),
34
+ ];
35
+
36
+ for (const envPath of envPaths) {
37
+ if (fs.existsSync(envPath)) {
38
+ const envContent = fs.readFileSync(envPath, 'utf-8');
39
+ for (const line of envContent.split('\n')) {
40
+ const trimmed = line.trim();
41
+ if (trimmed && !trimmed.startsWith('#')) {
42
+ const [key, ...valueParts] = trimmed.split('=');
43
+ const value = valueParts.join('=');
44
+ if (key && value) {
45
+ process.env[key.trim()] = value.trim();
46
+ }
47
+ }
48
+ }
49
+ break;
50
+ }
51
+ }
52
+ }
53
+
54
+ loadEnv();
55
+
56
+ // Flowise API configuration
57
+ const FLOWISE_API_URL = process.env.FLOWISE_API_URL || '';
58
+ const FLOWISE_API_KEY = process.env.FLOWISE_API_KEY || '';
59
+
28
60
  // Find database path
29
61
  function findDatabasePath(): string {
30
62
  const possiblePaths = [
@@ -67,11 +99,46 @@ function queryOne(sql: string, params: any[] = []): any | null {
67
99
  return results.length > 0 ? results[0] : null;
68
100
  }
69
101
 
102
+ // === FLOWISE API HELPERS ===
103
+
104
+ async function flowiseApiRequest(
105
+ endpoint: string,
106
+ method: string = 'GET',
107
+ body?: any
108
+ ): Promise<any> {
109
+ if (!FLOWISE_API_URL) {
110
+ throw new Error('FLOWISE_API_URL not configured. Set it in .env file.');
111
+ }
112
+
113
+ const url = `${FLOWISE_API_URL.replace(/\/$/, '')}/api/v1${endpoint}`;
114
+
115
+ const headers: Record<string, string> = {
116
+ 'Content-Type': 'application/json',
117
+ };
118
+
119
+ if (FLOWISE_API_KEY) {
120
+ headers['Authorization'] = `Bearer ${FLOWISE_API_KEY}`;
121
+ }
122
+
123
+ const response = await fetch(url, {
124
+ method,
125
+ headers,
126
+ body: body ? JSON.stringify(body) : undefined,
127
+ });
128
+
129
+ if (!response.ok) {
130
+ const errorText = await response.text();
131
+ throw new Error(`Flowise API error (${response.status}): ${errorText}`);
132
+ }
133
+
134
+ return response.json();
135
+ }
136
+
70
137
  // Create MCP server
71
138
  const server = new Server(
72
139
  {
73
140
  name: 'ds-mcp-flowise',
74
- version: '1.0.0',
141
+ version: '1.1.0',
75
142
  },
76
143
  {
77
144
  capabilities: {
@@ -85,6 +152,7 @@ const server = new Server(
85
152
  // === TOOL DEFINITIONS ===
86
153
 
87
154
  const TOOLS = [
155
+ // Node discovery tools
88
156
  {
89
157
  name: 'list_categories',
90
158
  description: 'List all available Flowise node categories with node counts',
@@ -246,6 +314,114 @@ const TOOLS = [
246
314
  required: ['use_case'],
247
315
  },
248
316
  },
317
+
318
+ // Flowise API tools
319
+ {
320
+ name: 'flowise_list_chatflows',
321
+ description: 'List all chatflows in the connected Flowise instance. Requires FLOWISE_API_URL and FLOWISE_API_KEY to be configured.',
322
+ inputSchema: {
323
+ type: 'object' as const,
324
+ properties: {},
325
+ required: [],
326
+ },
327
+ },
328
+ {
329
+ name: 'flowise_get_chatflow',
330
+ description: 'Get details of a specific chatflow by ID from the connected Flowise instance.',
331
+ inputSchema: {
332
+ type: 'object' as const,
333
+ properties: {
334
+ id: {
335
+ type: 'string',
336
+ description: 'The chatflow ID',
337
+ },
338
+ },
339
+ required: ['id'],
340
+ },
341
+ },
342
+ {
343
+ name: 'flowise_create_chatflow',
344
+ description: 'Create a new chatflow in the connected Flowise instance. This pushes your designed flow directly to Flowise.',
345
+ inputSchema: {
346
+ type: 'object' as const,
347
+ properties: {
348
+ name: {
349
+ type: 'string',
350
+ description: 'Name for the chatflow',
351
+ },
352
+ nodes: {
353
+ type: 'array',
354
+ description: 'Array of node objects',
355
+ items: { type: 'object' },
356
+ },
357
+ edges: {
358
+ type: 'array',
359
+ description: 'Array of edge objects',
360
+ items: { type: 'object' },
361
+ },
362
+ deployed: {
363
+ type: 'boolean',
364
+ description: 'Whether to deploy immediately (default: false)',
365
+ },
366
+ },
367
+ required: ['name', 'nodes', 'edges'],
368
+ },
369
+ },
370
+ {
371
+ name: 'flowise_update_chatflow',
372
+ description: 'Update an existing chatflow in the connected Flowise instance.',
373
+ inputSchema: {
374
+ type: 'object' as const,
375
+ properties: {
376
+ id: {
377
+ type: 'string',
378
+ description: 'The chatflow ID to update',
379
+ },
380
+ name: {
381
+ type: 'string',
382
+ description: 'New name for the chatflow (optional)',
383
+ },
384
+ nodes: {
385
+ type: 'array',
386
+ description: 'Updated array of node objects',
387
+ items: { type: 'object' },
388
+ },
389
+ edges: {
390
+ type: 'array',
391
+ description: 'Updated array of edge objects',
392
+ items: { type: 'object' },
393
+ },
394
+ deployed: {
395
+ type: 'boolean',
396
+ description: 'Whether the chatflow should be deployed',
397
+ },
398
+ },
399
+ required: ['id'],
400
+ },
401
+ },
402
+ {
403
+ name: 'flowise_delete_chatflow',
404
+ description: 'Delete a chatflow from the connected Flowise instance. Use with caution!',
405
+ inputSchema: {
406
+ type: 'object' as const,
407
+ properties: {
408
+ id: {
409
+ type: 'string',
410
+ description: 'The chatflow ID to delete',
411
+ },
412
+ },
413
+ required: ['id'],
414
+ },
415
+ },
416
+ {
417
+ name: 'flowise_test_connection',
418
+ description: 'Test the connection to the configured Flowise instance. Use this to verify your API URL and key are correct.',
419
+ inputSchema: {
420
+ type: 'object' as const,
421
+ properties: {},
422
+ required: [],
423
+ },
424
+ },
249
425
  ];
250
426
 
251
427
  // === TOOL IMPLEMENTATIONS ===
@@ -300,7 +476,6 @@ function getNodeSchema(name: string): string {
300
476
  ORDER BY additional_params, input_label
301
477
  `, [name]);
302
478
 
303
- // Parse JSON fields
304
479
  const schema = {
305
480
  ...node,
306
481
  base_classes: JSON.parse(node.base_classes || '[]'),
@@ -387,11 +562,9 @@ function findCompatibleNodes(nodeName: string, direction: string = 'inputs'): st
387
562
  const baseClasses = JSON.parse(node.base_classes || '[]') as string[];
388
563
 
389
564
  if (direction === 'inputs') {
390
- // Find nodes whose outputs (base_classes) match this node's input types
391
565
  const inputs = query(`SELECT input_type FROM node_inputs WHERE node_name = ?`, [nodeName]);
392
566
  const inputTypes = inputs.map((i: any) => i.input_type);
393
567
 
394
- // Find nodes that have these types in their base_classes
395
568
  const allNodes = query(`SELECT name, label, category, base_classes FROM nodes`);
396
569
 
397
570
  const compatible = allNodes.filter((n: any) => {
@@ -405,7 +578,6 @@ function findCompatibleNodes(nodeName: string, direction: string = 'inputs'): st
405
578
 
406
579
  return JSON.stringify({ compatible_inputs: compatible }, null, 2);
407
580
  } else {
408
- // Find nodes that accept this node's output types
409
581
  const allInputs = query(`
410
582
  SELECT DISTINCT n.name, n.label, n.category, ni.input_type
411
583
  FROM nodes n
@@ -420,7 +592,6 @@ function findCompatibleNodes(nodeName: string, direction: string = 'inputs'): st
420
592
  category: i.category,
421
593
  }));
422
594
 
423
- // Deduplicate
424
595
  const unique = Array.from(new Map(compatible.map((c: any) => [c.name, c])).values());
425
596
 
426
597
  return JSON.stringify({ compatible_outputs: unique }, null, 2);
@@ -431,7 +602,6 @@ function validateFlow(nodes: any[], edges: any[]): string {
431
602
  const errors: string[] = [];
432
603
  const warnings: string[] = [];
433
604
 
434
- // Check all nodes exist
435
605
  const nodeNames = new Set<string>();
436
606
  for (const node of nodes) {
437
607
  const nodeName = node.data?.name || node.type || node.name;
@@ -447,7 +617,6 @@ function validateFlow(nodes: any[], edges: any[]): string {
447
617
  nodeNames.add(node.id);
448
618
  }
449
619
 
450
- // Check all edges reference valid nodes
451
620
  for (const edge of edges) {
452
621
  if (!nodeNames.has(edge.source)) {
453
622
  errors.push(`Edge references non-existent source node: ${edge.source}`);
@@ -570,6 +739,106 @@ function generateFlowSkeleton(useCase: string, chatModel?: string): string {
570
739
  return JSON.stringify(skeleton, null, 2);
571
740
  }
572
741
 
742
+ // === FLOWISE API IMPLEMENTATIONS ===
743
+
744
+ async function flowiseTestConnection(): Promise<string> {
745
+ if (!FLOWISE_API_URL) {
746
+ return JSON.stringify({
747
+ connected: false,
748
+ error: 'FLOWISE_API_URL not configured. Create a .env file with FLOWISE_API_URL and FLOWISE_API_KEY.',
749
+ });
750
+ }
751
+
752
+ try {
753
+ const chatflows = await flowiseApiRequest('/chatflows');
754
+ return JSON.stringify({
755
+ connected: true,
756
+ url: FLOWISE_API_URL,
757
+ chatflows_count: Array.isArray(chatflows) ? chatflows.length : 0,
758
+ }, null, 2);
759
+ } catch (error) {
760
+ return JSON.stringify({
761
+ connected: false,
762
+ url: FLOWISE_API_URL,
763
+ error: String(error),
764
+ }, null, 2);
765
+ }
766
+ }
767
+
768
+ async function flowiseListChatflows(): Promise<string> {
769
+ const chatflows = await flowiseApiRequest('/chatflows');
770
+
771
+ // Return summary info for each chatflow
772
+ const summary = chatflows.map((cf: any) => ({
773
+ id: cf.id,
774
+ name: cf.name,
775
+ deployed: cf.deployed,
776
+ createdDate: cf.createdDate,
777
+ updatedDate: cf.updatedDate,
778
+ }));
779
+
780
+ return JSON.stringify(summary, null, 2);
781
+ }
782
+
783
+ async function flowiseGetChatflow(id: string): Promise<string> {
784
+ const chatflow = await flowiseApiRequest(`/chatflows/${id}`);
785
+ return JSON.stringify(chatflow, null, 2);
786
+ }
787
+
788
+ async function flowiseCreateChatflow(
789
+ name: string,
790
+ nodes: any[],
791
+ edges: any[],
792
+ deployed: boolean = false
793
+ ): Promise<string> {
794
+ const flowData = {
795
+ name,
796
+ flowData: JSON.stringify({ nodes, edges }),
797
+ deployed,
798
+ };
799
+
800
+ const result = await flowiseApiRequest('/chatflows', 'POST', flowData);
801
+ return JSON.stringify({
802
+ success: true,
803
+ id: result.id,
804
+ name: result.name,
805
+ message: `Chatflow "${name}" created successfully!`,
806
+ url: `${FLOWISE_API_URL}/chatflows/${result.id}`,
807
+ }, null, 2);
808
+ }
809
+
810
+ async function flowiseUpdateChatflow(
811
+ id: string,
812
+ name?: string,
813
+ nodes?: any[],
814
+ edges?: any[],
815
+ deployed?: boolean
816
+ ): Promise<string> {
817
+ const updateData: any = {};
818
+
819
+ if (name) updateData.name = name;
820
+ if (nodes && edges) {
821
+ updateData.flowData = JSON.stringify({ nodes, edges });
822
+ }
823
+ if (deployed !== undefined) updateData.deployed = deployed;
824
+
825
+ const result = await flowiseApiRequest(`/chatflows/${id}`, 'PUT', updateData);
826
+ return JSON.stringify({
827
+ success: true,
828
+ id: result.id,
829
+ name: result.name,
830
+ message: `Chatflow updated successfully!`,
831
+ }, null, 2);
832
+ }
833
+
834
+ async function flowiseDeleteChatflow(id: string): Promise<string> {
835
+ await flowiseApiRequest(`/chatflows/${id}`, 'DELETE');
836
+ return JSON.stringify({
837
+ success: true,
838
+ message: `Chatflow ${id} deleted successfully!`,
839
+ }, null, 2);
840
+ }
841
+
573
842
  // === REQUEST HANDLERS ===
574
843
 
575
844
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
@@ -583,6 +852,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
583
852
  let result: string;
584
853
 
585
854
  switch (name) {
855
+ // Node discovery tools
586
856
  case 'list_categories':
587
857
  result = listCategories();
588
858
  break;
@@ -610,6 +880,38 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
610
880
  case 'generate_flow_skeleton':
611
881
  result = generateFlowSkeleton(args?.use_case as string, args?.chat_model as string);
612
882
  break;
883
+
884
+ // Flowise API tools
885
+ case 'flowise_test_connection':
886
+ result = await flowiseTestConnection();
887
+ break;
888
+ case 'flowise_list_chatflows':
889
+ result = await flowiseListChatflows();
890
+ break;
891
+ case 'flowise_get_chatflow':
892
+ result = await flowiseGetChatflow(args?.id as string);
893
+ break;
894
+ case 'flowise_create_chatflow':
895
+ result = await flowiseCreateChatflow(
896
+ args?.name as string,
897
+ args?.nodes as any[],
898
+ args?.edges as any[],
899
+ args?.deployed as boolean
900
+ );
901
+ break;
902
+ case 'flowise_update_chatflow':
903
+ result = await flowiseUpdateChatflow(
904
+ args?.id as string,
905
+ args?.name as string,
906
+ args?.nodes as any[],
907
+ args?.edges as any[],
908
+ args?.deployed as boolean
909
+ );
910
+ break;
911
+ case 'flowise_delete_chatflow':
912
+ result = await flowiseDeleteChatflow(args?.id as string);
913
+ break;
914
+
613
915
  default:
614
916
  throw new Error(`Unknown tool: ${name}`);
615
917
  }
@@ -719,7 +1021,8 @@ First, use list_categories to see available node types.
719
1021
  Then, use search_nodes or list_nodes to find relevant components.
720
1022
  Use get_node_schema to understand how to configure each node.
721
1023
  Check list_templates for similar examples.
722
- Finally, use validate_flow to verify the flow is valid.`,
1024
+ Use validate_flow to verify the flow is valid.
1025
+ Finally, use flowise_create_chatflow to push it directly to Flowise!`,
723
1026
  },
724
1027
  },
725
1028
  ],
@@ -739,7 +1042,8 @@ Agent flows use nodes from the "Agent Flows" category.
739
1042
  Use list_nodes with category="Agent Flows" to see available nodes.
740
1043
  Use list_templates with type="agentflowv2" for examples.
741
1044
  Key nodes include: startAgentflow, agentAgentflow, llmAgentflow, toolAgentflow, conditionAgentflow.
742
- Use get_node_schema to understand each node's configuration.`,
1045
+ Use get_node_schema to understand each node's configuration.
1046
+ Finally, use flowise_create_chatflow to push it directly to Flowise!`,
743
1047
  },
744
1048
  },
745
1049
  ],
@@ -761,6 +1065,12 @@ async function main() {
761
1065
  console.error('DS-MCP-FLOWISE server started');
762
1066
  console.error(`Database loaded from: ${dbPath}`);
763
1067
 
1068
+ if (FLOWISE_API_URL) {
1069
+ console.error(`Flowise API configured: ${FLOWISE_API_URL}`);
1070
+ } else {
1071
+ console.error('Flowise API not configured (set FLOWISE_API_URL in .env for direct flow creation)');
1072
+ }
1073
+
764
1074
  const transport = new StdioServerTransport();
765
1075
  await server.connect(transport);
766
1076
  }