@flowdot.ai/mcp-server 1.0.0 → 1.0.2
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/LICENSE +21 -0
- package/README.md +162 -162
- package/bin/flowdot-mcp.js +15 -15
- package/dist/api-client.d.ts +2 -344
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +2 -784
- package/dist/api-client.js.map +1 -1
- package/dist/resources/index.d.ts +12 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +2204 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +19 -10
- package/dist/server.js.map +1 -1
- package/dist/tools/add-recipe-step.d.ts +23 -0
- package/dist/tools/add-recipe-step.d.ts.map +1 -0
- package/dist/tools/add-recipe-step.js +196 -0
- package/dist/tools/add-recipe-step.js.map +1 -0
- package/dist/tools/add-recipe-store.d.ts +19 -0
- package/dist/tools/add-recipe-store.d.ts.map +1 -0
- package/dist/tools/add-recipe-store.js +116 -0
- package/dist/tools/add-recipe-store.js.map +1 -0
- package/dist/tools/agent-toolkits.d.ts +57 -0
- package/dist/tools/agent-toolkits.d.ts.map +1 -0
- package/dist/tools/agent-toolkits.js +1712 -0
- package/dist/tools/agent-toolkits.js.map +1 -0
- package/dist/tools/append-app-code.d.ts +12 -0
- package/dist/tools/append-app-code.d.ts.map +1 -0
- package/dist/tools/append-app-code.js +83 -0
- package/dist/tools/append-app-code.js.map +1 -0
- package/dist/tools/browse-recipes.d.ts +16 -0
- package/dist/tools/browse-recipes.d.ts.map +1 -0
- package/dist/tools/browse-recipes.js +102 -0
- package/dist/tools/browse-recipes.js.map +1 -0
- package/dist/tools/clone-app.js +20 -20
- package/dist/tools/create-app-file.d.ts +11 -0
- package/dist/tools/create-app-file.d.ts.map +1 -0
- package/dist/tools/create-app-file.js +83 -0
- package/dist/tools/create-app-file.js.map +1 -0
- package/dist/tools/create-app.d.ts.map +1 -1
- package/dist/tools/create-app.js +47 -29
- package/dist/tools/create-app.js.map +1 -1
- package/dist/tools/create-knowledge-category.d.ts +16 -0
- package/dist/tools/create-knowledge-category.d.ts.map +1 -0
- package/dist/tools/create-knowledge-category.js +71 -0
- package/dist/tools/create-knowledge-category.js.map +1 -0
- package/dist/tools/create-recipe.d.ts +16 -0
- package/dist/tools/create-recipe.d.ts.map +1 -0
- package/dist/tools/create-recipe.js +92 -0
- package/dist/tools/create-recipe.js.map +1 -0
- package/dist/tools/delete-app-file.d.ts +11 -0
- package/dist/tools/delete-app-file.d.ts.map +1 -0
- package/dist/tools/delete-app-file.js +52 -0
- package/dist/tools/delete-app-file.js.map +1 -0
- package/dist/tools/delete-app.js +3 -3
- package/dist/tools/delete-knowledge-category.d.ts +12 -0
- package/dist/tools/delete-knowledge-category.d.ts.map +1 -0
- package/dist/tools/delete-knowledge-category.js +40 -0
- package/dist/tools/delete-knowledge-category.js.map +1 -0
- package/dist/tools/delete-knowledge-document.d.ts +12 -0
- package/dist/tools/delete-knowledge-document.d.ts.map +1 -0
- package/dist/tools/delete-knowledge-document.js +40 -0
- package/dist/tools/delete-knowledge-document.js.map +1 -0
- package/dist/tools/delete-recipe-step.d.ts +14 -0
- package/dist/tools/delete-recipe-step.d.ts.map +1 -0
- package/dist/tools/delete-recipe-step.js +65 -0
- package/dist/tools/delete-recipe-step.js.map +1 -0
- package/dist/tools/delete-recipe-store.d.ts +14 -0
- package/dist/tools/delete-recipe-store.d.ts.map +1 -0
- package/dist/tools/delete-recipe-store.js +65 -0
- package/dist/tools/delete-recipe-store.js.map +1 -0
- package/dist/tools/delete-recipe.d.ts +13 -0
- package/dist/tools/delete-recipe.d.ts.map +1 -0
- package/dist/tools/delete-recipe.js +59 -0
- package/dist/tools/delete-recipe.js.map +1 -0
- package/dist/tools/edit-app-code.d.ts +12 -0
- package/dist/tools/edit-app-code.d.ts.map +1 -0
- package/dist/tools/edit-app-code.js +110 -0
- package/dist/tools/edit-app-code.js.map +1 -0
- package/dist/tools/favorite-recipe.d.ts +13 -0
- package/dist/tools/favorite-recipe.d.ts.map +1 -0
- package/dist/tools/favorite-recipe.js +53 -0
- package/dist/tools/favorite-recipe.js.map +1 -0
- package/dist/tools/fork-recipe.d.ts +13 -0
- package/dist/tools/fork-recipe.d.ts.map +1 -0
- package/dist/tools/fork-recipe.js +56 -0
- package/dist/tools/fork-recipe.js.map +1 -0
- package/dist/tools/get-app-file.d.ts +11 -0
- package/dist/tools/get-app-file.d.ts.map +1 -0
- package/dist/tools/get-app-file.js +76 -0
- package/dist/tools/get-app-file.js.map +1 -0
- package/dist/tools/get-app-template.d.ts.map +1 -1
- package/dist/tools/get-app-template.js +65 -21
- package/dist/tools/get-app-template.js.map +1 -1
- package/dist/tools/get-app.js +54 -54
- package/dist/tools/get-knowledge-document.d.ts +12 -0
- package/dist/tools/get-knowledge-document.d.ts.map +1 -0
- package/dist/tools/get-knowledge-document.js +71 -0
- package/dist/tools/get-knowledge-document.js.map +1 -0
- package/dist/tools/get-knowledge-storage.d.ts +10 -0
- package/dist/tools/get-knowledge-storage.d.ts.map +1 -0
- package/dist/tools/get-knowledge-storage.js +54 -0
- package/dist/tools/get-knowledge-storage.js.map +1 -0
- package/dist/tools/get-recipe-definition.d.ts +15 -0
- package/dist/tools/get-recipe-definition.d.ts.map +1 -0
- package/dist/tools/get-recipe-definition.js +70 -0
- package/dist/tools/get-recipe-definition.js.map +1 -0
- package/dist/tools/get-recipe.d.ts +12 -0
- package/dist/tools/get-recipe.d.ts.map +1 -0
- package/dist/tools/get-recipe.js +88 -0
- package/dist/tools/get-recipe.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +301 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insert-app-code.d.ts +12 -0
- package/dist/tools/insert-app-code.d.ts.map +1 -0
- package/dist/tools/insert-app-code.js +97 -0
- package/dist/tools/insert-app-code.js.map +1 -0
- package/dist/tools/link-app-workflow.js +21 -21
- package/dist/tools/link-recipe.d.ts +14 -0
- package/dist/tools/link-recipe.d.ts.map +1 -0
- package/dist/tools/link-recipe.js +76 -0
- package/dist/tools/link-recipe.js.map +1 -0
- package/dist/tools/list-app-files.d.ts +11 -0
- package/dist/tools/list-app-files.d.ts.map +1 -0
- package/dist/tools/list-app-files.js +84 -0
- package/dist/tools/list-app-files.js.map +1 -0
- package/dist/tools/list-apps.js +8 -8
- package/dist/tools/list-knowledge-categories.d.ts +14 -0
- package/dist/tools/list-knowledge-categories.d.ts.map +1 -0
- package/dist/tools/list-knowledge-categories.js +107 -0
- package/dist/tools/list-knowledge-categories.js.map +1 -0
- package/dist/tools/list-knowledge-documents.d.ts +15 -0
- package/dist/tools/list-knowledge-documents.d.ts.map +1 -0
- package/dist/tools/list-knowledge-documents.js +129 -0
- package/dist/tools/list-knowledge-documents.js.map +1 -0
- package/dist/tools/list-recipe-steps.d.ts +12 -0
- package/dist/tools/list-recipe-steps.d.ts.map +1 -0
- package/dist/tools/list-recipe-steps.js +69 -0
- package/dist/tools/list-recipe-steps.js.map +1 -0
- package/dist/tools/list-recipe-stores.d.ts +12 -0
- package/dist/tools/list-recipe-stores.d.ts.map +1 -0
- package/dist/tools/list-recipe-stores.js +87 -0
- package/dist/tools/list-recipe-stores.js.map +1 -0
- package/dist/tools/list-recipes.d.ts +12 -0
- package/dist/tools/list-recipes.d.ts.map +1 -0
- package/dist/tools/list-recipes.js +92 -0
- package/dist/tools/list-recipes.js.map +1 -0
- package/dist/tools/list-user-teams.d.ts +11 -0
- package/dist/tools/list-user-teams.d.ts.map +1 -0
- package/dist/tools/list-user-teams.js +56 -0
- package/dist/tools/list-user-teams.js.map +1 -0
- package/dist/tools/move-document-to-category.d.ts +13 -0
- package/dist/tools/move-document-to-category.d.ts.map +1 -0
- package/dist/tools/move-document-to-category.js +42 -0
- package/dist/tools/move-document-to-category.js.map +1 -0
- package/dist/tools/prepend-app-code.d.ts +12 -0
- package/dist/tools/prepend-app-code.d.ts.map +1 -0
- package/dist/tools/prepend-app-code.js +79 -0
- package/dist/tools/prepend-app-code.js.map +1 -0
- package/dist/tools/publish-app.js +7 -7
- package/dist/tools/query-knowledge-base.d.ts +18 -0
- package/dist/tools/query-knowledge-base.d.ts.map +1 -0
- package/dist/tools/query-knowledge-base.js +144 -0
- package/dist/tools/query-knowledge-base.js.map +1 -0
- package/dist/tools/rename-app-file.d.ts +11 -0
- package/dist/tools/rename-app-file.d.ts.map +1 -0
- package/dist/tools/rename-app-file.js +64 -0
- package/dist/tools/rename-app-file.js.map +1 -0
- package/dist/tools/reprocess-document.d.ts +12 -0
- package/dist/tools/reprocess-document.d.ts.map +1 -0
- package/dist/tools/reprocess-document.js +40 -0
- package/dist/tools/reprocess-document.js.map +1 -0
- package/dist/tools/search-apps.js +13 -13
- package/dist/tools/search.d.ts +14 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +86 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/set-app-entry-file.d.ts +11 -0
- package/dist/tools/set-app-entry-file.d.ts.map +1 -0
- package/dist/tools/set-app-entry-file.js +56 -0
- package/dist/tools/set-app-entry-file.js.map +1 -0
- package/dist/tools/transfer-document-ownership.d.ts +15 -0
- package/dist/tools/transfer-document-ownership.d.ts.map +1 -0
- package/dist/tools/transfer-document-ownership.js +66 -0
- package/dist/tools/transfer-document-ownership.js.map +1 -0
- package/dist/tools/unlink-app-workflow.js +2 -2
- package/dist/tools/unpublish-app.js +2 -2
- package/dist/tools/update-app-file.d.ts +11 -0
- package/dist/tools/update-app-file.d.ts.map +1 -0
- package/dist/tools/update-app-file.js +73 -0
- package/dist/tools/update-app-file.js.map +1 -0
- package/dist/tools/update-app.d.ts.map +1 -1
- package/dist/tools/update-app.js +8 -1
- package/dist/tools/update-app.js.map +1 -1
- package/dist/tools/update-knowledge-category.d.ts +15 -0
- package/dist/tools/update-knowledge-category.d.ts.map +1 -0
- package/dist/tools/update-knowledge-category.js +74 -0
- package/dist/tools/update-knowledge-category.js.map +1 -0
- package/dist/tools/update-recipe-step.d.ts +22 -0
- package/dist/tools/update-recipe-step.d.ts.map +1 -0
- package/dist/tools/update-recipe-step.js +97 -0
- package/dist/tools/update-recipe-step.js.map +1 -0
- package/dist/tools/update-recipe-store.d.ts +20 -0
- package/dist/tools/update-recipe-store.d.ts.map +1 -0
- package/dist/tools/update-recipe-store.js +98 -0
- package/dist/tools/update-recipe-store.js.map +1 -0
- package/dist/tools/update-recipe.d.ts +18 -0
- package/dist/tools/update-recipe.d.ts.map +1 -0
- package/dist/tools/update-recipe.js +98 -0
- package/dist/tools/update-recipe.js.map +1 -0
- package/dist/tools/upload-document-from-url.d.ts +16 -0
- package/dist/tools/upload-document-from-url.d.ts.map +1 -0
- package/dist/tools/upload-document-from-url.js +73 -0
- package/dist/tools/upload-document-from-url.js.map +1 -0
- package/dist/tools/upload-text-document.d.ts +17 -0
- package/dist/tools/upload-text-document.d.ts.map +1 -0
- package/dist/tools/upload-text-document.js +77 -0
- package/dist/tools/upload-text-document.js.map +1 -0
- package/dist/tools/vote-recipe.d.ts +13 -0
- package/dist/tools/vote-recipe.d.ts.map +1 -0
- package/dist/tools/vote-recipe.js +54 -0
- package/dist/tools/vote-recipe.js.map +1 -0
- package/dist/types.d.ts +3 -666
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/script-validator.d.ts.map +1 -1
- package/dist/utils/script-validator.js +5 -1
- package/dist/utils/script-validator.js.map +1 -1
- package/package.json +62 -54
|
@@ -17,9 +17,25 @@ FlowDot apps run in a sandboxed browser iframe with:
|
|
|
17
17
|
|
|
18
18
|
## CRITICAL CODE RULES
|
|
19
19
|
1. NO IMPORTS - React is global (use React.useState, React.useEffect, React.useRef, etc.)
|
|
20
|
-
2.
|
|
20
|
+
2. MUST include export default at the end: export default MyAppName;
|
|
21
21
|
3. Function must be named: function MyAppName() { ... }
|
|
22
22
|
4. Use Tailwind CSS for ALL styling
|
|
23
|
+
5. NO FORM ELEMENTS - Never use <form> tags (sandbox blocks form submissions)
|
|
24
|
+
6. ALL BUTTONS need type="button" to prevent unwanted form submission behavior
|
|
25
|
+
|
|
26
|
+
## IMPORTANT: NO FORM ELEMENTS
|
|
27
|
+
The sandbox does not allow form submissions. NEVER use <form> tags.
|
|
28
|
+
|
|
29
|
+
❌ WRONG:
|
|
30
|
+
<form onSubmit={handleSubmit}>
|
|
31
|
+
<button type="submit">Submit</button>
|
|
32
|
+
</form>
|
|
33
|
+
|
|
34
|
+
✅ CORRECT:
|
|
35
|
+
<div>
|
|
36
|
+
<input onKeyDown={(e) => e.key === 'Enter' && handleClick()} />
|
|
37
|
+
<button type="button" onClick={handleClick}>Submit</button>
|
|
38
|
+
</div>
|
|
23
39
|
|
|
24
40
|
## WORKFLOW RESPONSE FORMAT
|
|
25
41
|
invokeWorkflow returns data in this structure:
|
|
@@ -36,13 +52,17 @@ invokeWorkflow returns data in this structure:
|
|
|
36
52
|
}
|
|
37
53
|
}
|
|
38
54
|
|
|
39
|
-
IMPORTANT: Use this helper function to extract outputs
|
|
55
|
+
IMPORTANT: Use this helper function to extract outputs safely:
|
|
40
56
|
const getNodeOutput = (result, nodeTitle, socketName = 'Consolidated Text') => {
|
|
41
|
-
|
|
57
|
+
if (!result?.data) return null;
|
|
58
|
+
const node = Object.values(result.data).find(n => n.nodeTitle === nodeTitle);
|
|
42
59
|
return node?.outputs?.[socketName]?.value;
|
|
43
60
|
};
|
|
44
61
|
|
|
45
|
-
Example:
|
|
62
|
+
Example:
|
|
63
|
+
const result = await invokeWorkflow('hash', { input });
|
|
64
|
+
const data = getNodeOutput(result, 'Output Node');
|
|
65
|
+
if (data) { /* use data */ }
|
|
46
66
|
|
|
47
67
|
## DISPLAY MODES
|
|
48
68
|
Set config.displayMode to:
|
|
@@ -81,12 +101,14 @@ const TEMPLATES = {
|
|
|
81
101
|
|
|
82
102
|
// Helper to extract output from workflow response by node title
|
|
83
103
|
const getNodeOutput = (result, nodeTitle, socketName = 'Consolidated Text') => {
|
|
84
|
-
|
|
104
|
+
if (!result?.data) return null;
|
|
105
|
+
const node = Object.values(result.data).find(n => n.nodeTitle === nodeTitle);
|
|
85
106
|
return node?.outputs?.[socketName]?.value;
|
|
86
107
|
};
|
|
87
108
|
|
|
88
|
-
const handleSubmit = async (
|
|
89
|
-
|
|
109
|
+
const handleSubmit = async () => {
|
|
110
|
+
if (!input.trim() || loading) return;
|
|
111
|
+
|
|
90
112
|
setLoading(true);
|
|
91
113
|
setError(null);
|
|
92
114
|
|
|
@@ -105,18 +127,25 @@ const TEMPLATES = {
|
|
|
105
127
|
}
|
|
106
128
|
};
|
|
107
129
|
|
|
130
|
+
const handleKeyDown = (e) => {
|
|
131
|
+
if (e.key === 'Enter' && !loading) {
|
|
132
|
+
handleSubmit();
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
108
136
|
return (
|
|
109
137
|
<div className="min-h-screen bg-gray-50 p-6">
|
|
110
138
|
<div className="max-w-2xl mx-auto">
|
|
111
139
|
<h1 className="text-2xl font-bold mb-6">My FlowDot App</h1>
|
|
112
140
|
|
|
113
|
-
<
|
|
141
|
+
<div className="space-y-4">
|
|
114
142
|
<div>
|
|
115
143
|
<label className="block text-sm font-medium mb-1">Input</label>
|
|
116
144
|
<input
|
|
117
145
|
type="text"
|
|
118
146
|
value={input}
|
|
119
147
|
onChange={(e) => setInput(e.target.value)}
|
|
148
|
+
onKeyDown={handleKeyDown}
|
|
120
149
|
placeholder="Enter your text..."
|
|
121
150
|
className="w-full p-2 border rounded-lg focus:ring-2 focus:ring-blue-500"
|
|
122
151
|
disabled={loading}
|
|
@@ -124,13 +153,14 @@ const TEMPLATES = {
|
|
|
124
153
|
</div>
|
|
125
154
|
|
|
126
155
|
<button
|
|
127
|
-
type="
|
|
156
|
+
type="button"
|
|
157
|
+
onClick={handleSubmit}
|
|
128
158
|
disabled={loading || !input.trim()}
|
|
129
159
|
className="w-full bg-blue-600 text-white py-2 px-4 rounded-lg hover:bg-blue-700 disabled:opacity-50"
|
|
130
160
|
>
|
|
131
161
|
{loading ? 'Processing...' : 'Submit'}
|
|
132
162
|
</button>
|
|
133
|
-
</
|
|
163
|
+
</div>
|
|
134
164
|
|
|
135
165
|
{error && (
|
|
136
166
|
<div className="mt-4 p-4 bg-red-50 text-red-700 rounded-lg">
|
|
@@ -149,7 +179,9 @@ const TEMPLATES = {
|
|
|
149
179
|
</div>
|
|
150
180
|
</div>
|
|
151
181
|
);
|
|
152
|
-
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export default BasicFormApp;`,
|
|
153
185
|
},
|
|
154
186
|
chat: {
|
|
155
187
|
name: 'Chat Interface',
|
|
@@ -282,7 +314,9 @@ const TEMPLATES = {
|
|
|
282
314
|
</div>
|
|
283
315
|
</div>
|
|
284
316
|
);
|
|
285
|
-
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
export default ChatApp;`,
|
|
286
320
|
},
|
|
287
321
|
dashboard: {
|
|
288
322
|
name: 'Dashboard App',
|
|
@@ -404,7 +438,9 @@ const TEMPLATES = {
|
|
|
404
438
|
</div>
|
|
405
439
|
</div>
|
|
406
440
|
);
|
|
407
|
-
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
export default DashboardApp;`,
|
|
408
444
|
},
|
|
409
445
|
'form-builder': {
|
|
410
446
|
name: 'Dynamic Form Builder',
|
|
@@ -420,7 +456,8 @@ const TEMPLATES = {
|
|
|
420
456
|
|
|
421
457
|
// Helper to extract output from workflow response by node title
|
|
422
458
|
const getNodeOutput = (result, nodeTitle, socketName = 'Consolidated Text') => {
|
|
423
|
-
|
|
459
|
+
if (!result?.data) return null;
|
|
460
|
+
const node = Object.values(result.data).find(n => n.nodeTitle === nodeTitle);
|
|
424
461
|
return node?.outputs?.[socketName]?.value;
|
|
425
462
|
};
|
|
426
463
|
|
|
@@ -449,8 +486,9 @@ const TEMPLATES = {
|
|
|
449
486
|
setFormData(prev => ({ ...prev, [name]: value }));
|
|
450
487
|
};
|
|
451
488
|
|
|
452
|
-
const handleSubmit = async (
|
|
453
|
-
|
|
489
|
+
const handleSubmit = async () => {
|
|
490
|
+
if (loading) return;
|
|
491
|
+
|
|
454
492
|
setLoading(true);
|
|
455
493
|
|
|
456
494
|
try {
|
|
@@ -509,6 +547,7 @@ const TEMPLATES = {
|
|
|
509
547
|
type="text"
|
|
510
548
|
value={value || ''}
|
|
511
549
|
onChange={(e) => handleChange(field.name, e.target.value)}
|
|
550
|
+
onKeyDown={(e) => e.key === 'Enter' && !loading && handleSubmit()}
|
|
512
551
|
placeholder={field.description}
|
|
513
552
|
className="w-full p-2 border rounded-lg"
|
|
514
553
|
/>
|
|
@@ -525,7 +564,7 @@ const TEMPLATES = {
|
|
|
525
564
|
<div className="max-w-2xl mx-auto">
|
|
526
565
|
<h1 className="text-2xl font-bold mb-6">Dynamic Form</h1>
|
|
527
566
|
|
|
528
|
-
<
|
|
567
|
+
<div className="space-y-4">
|
|
529
568
|
{inputSchema.map(field => (
|
|
530
569
|
<div key={field.name}>
|
|
531
570
|
<label className="block text-sm font-medium mb-1">
|
|
@@ -540,13 +579,14 @@ const TEMPLATES = {
|
|
|
540
579
|
))}
|
|
541
580
|
|
|
542
581
|
<button
|
|
543
|
-
type="
|
|
582
|
+
type="button"
|
|
583
|
+
onClick={handleSubmit}
|
|
544
584
|
disabled={loading}
|
|
545
585
|
className="w-full bg-blue-600 text-white py-2 px-4 rounded-lg hover:bg-blue-700 disabled:opacity-50"
|
|
546
586
|
>
|
|
547
587
|
{loading ? 'Processing...' : 'Submit'}
|
|
548
588
|
</button>
|
|
549
|
-
</
|
|
589
|
+
</div>
|
|
550
590
|
|
|
551
591
|
{result && (
|
|
552
592
|
<div className="mt-6 p-4 bg-white rounded-lg shadow">
|
|
@@ -559,7 +599,9 @@ const TEMPLATES = {
|
|
|
559
599
|
</div>
|
|
560
600
|
</div>
|
|
561
601
|
);
|
|
562
|
-
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
export default DynamicFormApp;`,
|
|
563
605
|
},
|
|
564
606
|
'data-viewer': {
|
|
565
607
|
name: 'Data Viewer',
|
|
@@ -710,7 +752,9 @@ const TEMPLATES = {
|
|
|
710
752
|
</div>
|
|
711
753
|
</div>
|
|
712
754
|
);
|
|
713
|
-
}
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
export default DataViewerApp;`,
|
|
714
758
|
},
|
|
715
759
|
};
|
|
716
760
|
export async function handleGetAppTemplate(args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-app-template.js","sourceRoot":"","sources":["../../src/tools/get-app-template.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"get-app-template.js","sourceRoot":"","sources":["../../src/tools/get-app-template.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/get-app.js
CHANGED
|
@@ -6,16 +6,16 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export const getAppTool = {
|
|
8
8
|
name: 'get_app',
|
|
9
|
-
description: `Get detailed information about a FlowDot app, including its React code and linked workflows.
|
|
10
|
-
|
|
11
|
-
Apps are React frontend applications that can optionally call workflows as backends.
|
|
12
|
-
|
|
13
|
-
Returns the full app details including:
|
|
14
|
-
- Name, description, category, tags
|
|
15
|
-
- React code (JSX/TSX)
|
|
16
|
-
- Mobile code (if available)
|
|
17
|
-
- Configuration
|
|
18
|
-
- Linked workflows
|
|
9
|
+
description: `Get detailed information about a FlowDot app, including its React code and linked workflows.
|
|
10
|
+
|
|
11
|
+
Apps are React frontend applications that can optionally call workflows as backends.
|
|
12
|
+
|
|
13
|
+
Returns the full app details including:
|
|
14
|
+
- Name, description, category, tags
|
|
15
|
+
- React code (JSX/TSX)
|
|
16
|
+
- Mobile code (if available)
|
|
17
|
+
- Configuration
|
|
18
|
+
- Linked workflows
|
|
19
19
|
- Usage statistics`,
|
|
20
20
|
inputSchema: {
|
|
21
21
|
type: 'object',
|
|
@@ -39,14 +39,14 @@ export async function handleGetApp(client, args) {
|
|
|
39
39
|
const alias = w.alias ? ` (alias: ${w.alias})` : '';
|
|
40
40
|
return ` - ${w.name} (${w.hash})${alias}`;
|
|
41
41
|
});
|
|
42
|
-
workflowsSection = `
|
|
43
|
-
## Linked Workflows
|
|
44
|
-
${workflowList.join('\n')}
|
|
45
|
-
|
|
46
|
-
To invoke workflows from your app code, use:
|
|
47
|
-
\`\`\`javascript
|
|
48
|
-
const result = await invokeWorkflow('${app.workflows[0].hash}', { input: 'value' });
|
|
49
|
-
\`\`\`
|
|
42
|
+
workflowsSection = `
|
|
43
|
+
## Linked Workflows
|
|
44
|
+
${workflowList.join('\n')}
|
|
45
|
+
|
|
46
|
+
To invoke workflows from your app code, use:
|
|
47
|
+
\`\`\`javascript
|
|
48
|
+
const result = await invokeWorkflow('${app.workflows[0].hash}', { input: 'value' });
|
|
49
|
+
\`\`\`
|
|
50
50
|
`;
|
|
51
51
|
}
|
|
52
52
|
// Format tags
|
|
@@ -54,31 +54,31 @@ const result = await invokeWorkflow('${app.workflows[0].hash}', { input: 'value'
|
|
|
54
54
|
// Format code section
|
|
55
55
|
let codeSection = '';
|
|
56
56
|
if (app.code) {
|
|
57
|
-
codeSection = `
|
|
58
|
-
## App Code
|
|
59
|
-
\`\`\`jsx
|
|
60
|
-
${app.code}
|
|
61
|
-
\`\`\`
|
|
57
|
+
codeSection = `
|
|
58
|
+
## App Code
|
|
59
|
+
\`\`\`jsx
|
|
60
|
+
${app.code}
|
|
61
|
+
\`\`\`
|
|
62
62
|
`;
|
|
63
63
|
}
|
|
64
64
|
// Format mobile code if exists
|
|
65
65
|
let mobileCodeSection = '';
|
|
66
66
|
if (app.mobile_code) {
|
|
67
|
-
mobileCodeSection = `
|
|
68
|
-
## Mobile Code
|
|
69
|
-
\`\`\`jsx
|
|
70
|
-
${app.mobile_code}
|
|
71
|
-
\`\`\`
|
|
67
|
+
mobileCodeSection = `
|
|
68
|
+
## Mobile Code
|
|
69
|
+
\`\`\`jsx
|
|
70
|
+
${app.mobile_code}
|
|
71
|
+
\`\`\`
|
|
72
72
|
`;
|
|
73
73
|
}
|
|
74
74
|
// Format config if exists
|
|
75
75
|
let configSection = '';
|
|
76
76
|
if (app.config && Object.keys(app.config).length > 0) {
|
|
77
|
-
configSection = `
|
|
78
|
-
## Configuration
|
|
79
|
-
\`\`\`json
|
|
80
|
-
${JSON.stringify(app.config, null, 2)}
|
|
81
|
-
\`\`\`
|
|
77
|
+
configSection = `
|
|
78
|
+
## Configuration
|
|
79
|
+
\`\`\`json
|
|
80
|
+
${JSON.stringify(app.config, null, 2)}
|
|
81
|
+
\`\`\`
|
|
82
82
|
`;
|
|
83
83
|
}
|
|
84
84
|
const badges = [];
|
|
@@ -87,27 +87,27 @@ ${JSON.stringify(app.config, null, 2)}
|
|
|
87
87
|
if (app.is_featured)
|
|
88
88
|
badges.push('Featured');
|
|
89
89
|
const badgeStr = badges.length ? ` [${badges.join(', ')}]` : '';
|
|
90
|
-
const text = `# ${app.name}${badgeStr}
|
|
91
|
-
|
|
92
|
-
**ID:** ${app.id}
|
|
93
|
-
**Status:** ${app.is_public ? 'Public' : 'Private'}
|
|
94
|
-
**Category:** ${app.category || 'Uncategorized'}
|
|
95
|
-
**Tags:** ${tags}
|
|
96
|
-
**Mobile Compatible:** ${app.mobile_compatible ? 'Yes' : 'No'}
|
|
97
|
-
**Can Edit:** ${app.can_edit ? 'Yes' : 'No'}
|
|
98
|
-
|
|
99
|
-
## Description
|
|
100
|
-
${app.description || 'No description provided.'}
|
|
101
|
-
|
|
102
|
-
## Statistics
|
|
103
|
-
- Upvotes: ${app.upvotes} | Downvotes: ${app.downvotes}
|
|
104
|
-
- Executions: ${app.execution_count}
|
|
105
|
-
- Clones: ${app.clone_count}
|
|
106
|
-
- Views: ${app.view_count || 0}
|
|
107
|
-
|
|
108
|
-
**Created:** ${app.created_at}
|
|
109
|
-
**Updated:** ${app.updated_at}
|
|
110
|
-
${app.published_at ? `**Published:** ${app.published_at}` : ''}
|
|
90
|
+
const text = `# ${app.name}${badgeStr}
|
|
91
|
+
|
|
92
|
+
**ID:** ${app.id}
|
|
93
|
+
**Status:** ${app.is_public ? 'Public' : 'Private'}
|
|
94
|
+
**Category:** ${app.category || 'Uncategorized'}
|
|
95
|
+
**Tags:** ${tags}
|
|
96
|
+
**Mobile Compatible:** ${app.mobile_compatible ? 'Yes' : 'No'}
|
|
97
|
+
**Can Edit:** ${app.can_edit ? 'Yes' : 'No'}
|
|
98
|
+
|
|
99
|
+
## Description
|
|
100
|
+
${app.description || 'No description provided.'}
|
|
101
|
+
|
|
102
|
+
## Statistics
|
|
103
|
+
- Upvotes: ${app.upvotes} | Downvotes: ${app.downvotes}
|
|
104
|
+
- Executions: ${app.execution_count}
|
|
105
|
+
- Clones: ${app.clone_count}
|
|
106
|
+
- Views: ${app.view_count || 0}
|
|
107
|
+
|
|
108
|
+
**Created:** ${app.created_at}
|
|
109
|
+
**Updated:** ${app.updated_at}
|
|
110
|
+
${app.published_at ? `**Published:** ${app.published_at}` : ''}
|
|
111
111
|
${workflowsSection}${codeSection}${mobileCodeSection}${configSection}`;
|
|
112
112
|
return {
|
|
113
113
|
content: [{ type: 'text', text }],
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get Knowledge Document Tool
|
|
3
|
+
*
|
|
4
|
+
* Gets detailed information about a specific document.
|
|
5
|
+
*/
|
|
6
|
+
import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import { FlowDotApiClient } from '../api-client.js';
|
|
8
|
+
export declare const getKnowledgeDocumentToolDef: Tool;
|
|
9
|
+
export declare function handleGetKnowledgeDocument(api: FlowDotApiClient, args: {
|
|
10
|
+
document_id: number | string;
|
|
11
|
+
}): Promise<CallToolResult>;
|
|
12
|
+
//# sourceMappingURL=get-knowledge-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-knowledge-document.d.ts","sourceRoot":"","sources":["../../src/tools/get-knowledge-document.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,2BAA2B,EAAE,IAczC,CAAC;AAEF,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACrC,OAAO,CAAC,cAAc,CAAC,CAsDzB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get Knowledge Document Tool
|
|
3
|
+
*
|
|
4
|
+
* Gets detailed information about a specific document.
|
|
5
|
+
*/
|
|
6
|
+
export const getKnowledgeDocumentToolDef = {
|
|
7
|
+
name: 'get_knowledge_document',
|
|
8
|
+
description: 'Get detailed information about a specific document in your knowledge base by ID or hash.',
|
|
9
|
+
inputSchema: {
|
|
10
|
+
type: 'object',
|
|
11
|
+
properties: {
|
|
12
|
+
document_id: {
|
|
13
|
+
type: ['number', 'string'],
|
|
14
|
+
description: 'The document ID (number) or hash (string)',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
required: ['document_id'],
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export async function handleGetKnowledgeDocument(api, args) {
|
|
21
|
+
try {
|
|
22
|
+
const doc = await api.getKnowledgeDocument(args.document_id);
|
|
23
|
+
const lines = [
|
|
24
|
+
`## Document: ${doc.title}`,
|
|
25
|
+
'',
|
|
26
|
+
`**ID:** ${doc.id}`,
|
|
27
|
+
`**Hash:** ${doc.hash}`,
|
|
28
|
+
`**Original Filename:** ${doc.original_filename}`,
|
|
29
|
+
'',
|
|
30
|
+
'### Status',
|
|
31
|
+
`- **Status:** ${doc.status}`,
|
|
32
|
+
doc.processing_error ? `- **Error:** ${doc.processing_error}` : '',
|
|
33
|
+
`- **Processed At:** ${doc.processed_at || 'Not yet processed'}`,
|
|
34
|
+
'',
|
|
35
|
+
'### Storage',
|
|
36
|
+
`- **Size:** ${doc.formatted_size} (${doc.file_size_bytes} bytes)`,
|
|
37
|
+
`- **MIME Type:** ${doc.mime_type}`,
|
|
38
|
+
'',
|
|
39
|
+
'### Processing',
|
|
40
|
+
`- **Chunks:** ${doc.chunk_count}`,
|
|
41
|
+
`- **Tokens:** ${doc.token_count}`,
|
|
42
|
+
`- **Has Embeddings:** ${doc.has_embeddings ? 'Yes' : 'No'}`,
|
|
43
|
+
'',
|
|
44
|
+
].filter(Boolean);
|
|
45
|
+
if (doc.category) {
|
|
46
|
+
lines.push('### Category');
|
|
47
|
+
lines.push(`- **Name:** ${doc.category.name}`);
|
|
48
|
+
lines.push(`- **ID:** ${doc.category.id}`);
|
|
49
|
+
lines.push('');
|
|
50
|
+
}
|
|
51
|
+
if (doc.metadata && Object.keys(doc.metadata).length > 0) {
|
|
52
|
+
lines.push('### Metadata');
|
|
53
|
+
lines.push('```json');
|
|
54
|
+
lines.push(JSON.stringify(doc.metadata, null, 2));
|
|
55
|
+
lines.push('```');
|
|
56
|
+
lines.push('');
|
|
57
|
+
}
|
|
58
|
+
lines.push(`**Created:** ${doc.created_at}`);
|
|
59
|
+
return {
|
|
60
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
65
|
+
return {
|
|
66
|
+
content: [{ type: 'text', text: `Error getting document: ${message}` }],
|
|
67
|
+
isError: true,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=get-knowledge-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-knowledge-document.js","sourceRoot":"","sources":["../../src/tools/get-knowledge-document.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get Knowledge Storage Tool
|
|
3
|
+
*
|
|
4
|
+
* Gets storage usage information for the knowledge base.
|
|
5
|
+
*/
|
|
6
|
+
import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import { FlowDotApiClient } from '../api-client.js';
|
|
8
|
+
export declare const getKnowledgeStorageToolDef: Tool;
|
|
9
|
+
export declare function handleGetKnowledgeStorage(api: FlowDotApiClient): Promise<CallToolResult>;
|
|
10
|
+
//# sourceMappingURL=get-knowledge-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-knowledge-storage.d.ts","sourceRoot":"","sources":["../../src/tools/get-knowledge-storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,0BAA0B,EAAE,IASxC,CAAC;AAEF,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,cAAc,CAAC,CAyCzB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get Knowledge Storage Tool
|
|
3
|
+
*
|
|
4
|
+
* Gets storage usage information for the knowledge base.
|
|
5
|
+
*/
|
|
6
|
+
export const getKnowledgeStorageToolDef = {
|
|
7
|
+
name: 'get_knowledge_storage',
|
|
8
|
+
description: 'Get storage usage information for your knowledge base, including total space used, limits, and document counts.',
|
|
9
|
+
inputSchema: {
|
|
10
|
+
type: 'object',
|
|
11
|
+
properties: {},
|
|
12
|
+
required: [],
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
export async function handleGetKnowledgeStorage(api) {
|
|
16
|
+
try {
|
|
17
|
+
const storage = await api.getKnowledgeStorage();
|
|
18
|
+
// Create a visual progress bar
|
|
19
|
+
const barLength = 20;
|
|
20
|
+
const filledLength = Math.round((storage.usage_percentage / 100) * barLength);
|
|
21
|
+
const bar = '█'.repeat(filledLength) + '░'.repeat(barLength - filledLength);
|
|
22
|
+
const lines = [
|
|
23
|
+
'## Knowledge Base Storage',
|
|
24
|
+
'',
|
|
25
|
+
'### Usage',
|
|
26
|
+
`\`[${bar}]\` ${storage.usage_percentage.toFixed(1)}%`,
|
|
27
|
+
'',
|
|
28
|
+
`- **Knowledge Base:** ${storage.knowledge_storage_mb.toFixed(2)} MB`,
|
|
29
|
+
`- **Total Used:** ${storage.total_storage_mb.toFixed(2)} MB`,
|
|
30
|
+
`- **Storage Limit:** ${storage.storage_limit_mb.toFixed(2)} MB`,
|
|
31
|
+
`- **Available:** ${(storage.storage_limit_mb - storage.total_storage_mb).toFixed(2)} MB`,
|
|
32
|
+
'',
|
|
33
|
+
'### Documents',
|
|
34
|
+
`- **Total Documents:** ${storage.document_count}`,
|
|
35
|
+
`- **Ready Documents:** ${storage.ready_document_count}`,
|
|
36
|
+
`- **Categories:** ${storage.category_count}`,
|
|
37
|
+
];
|
|
38
|
+
if (storage.usage_percentage > 80) {
|
|
39
|
+
lines.push('');
|
|
40
|
+
lines.push('⚠️ **Warning:** Storage usage is above 80%. Consider deleting unused documents.');
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
48
|
+
return {
|
|
49
|
+
content: [{ type: 'text', text: `Error getting storage info: ${message}` }],
|
|
50
|
+
isError: true,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=get-knowledge-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-knowledge-storage.js","sourceRoot":"","sources":["../../src/tools/get-knowledge-storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,CAAC,MAAM,0BAA0B,GAAS;IAC9C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,iHAAiH;IACnH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAAqB;IAErB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAEhD,+BAA+B;QAC/B,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9E,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC;QAE5E,MAAM,KAAK,GAAG;YACZ,2BAA2B;YAC3B,EAAE;YACF,WAAW;YACX,MAAM,GAAG,OAAO,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACtD,EAAE;YACF,yBAAyB,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YACrE,qBAAqB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAC7D,wBAAwB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAChE,oBAAoB,CAAC,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YACzF,EAAE;YACF,eAAe;YACf,0BAA0B,OAAO,CAAC,cAAc,EAAE;YAClD,0BAA0B,OAAO,CAAC,oBAAoB,EAAE;YACxD,qBAAqB,OAAO,CAAC,cAAc,EAAE;SAC9C,CAAC;QAEF,IAAI,OAAO,CAAC,gBAAgB,GAAG,EAAE,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;QAChG,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,OAAO,EAAE,EAAE,CAAC;YAC3E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_recipe_definition MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Gets the complete recipe definition in YAML format for export or inspection.
|
|
5
|
+
* This is the canonical format for recipe definitions - both MCP and CLI
|
|
6
|
+
* should return identical YAML output for validation purposes.
|
|
7
|
+
*/
|
|
8
|
+
import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
9
|
+
import { FlowDotApiClient } from '../api-client.js';
|
|
10
|
+
export declare const getRecipeDefinitionTool: Tool;
|
|
11
|
+
export declare function handleGetRecipeDefinition(api: FlowDotApiClient, args: {
|
|
12
|
+
hash: string;
|
|
13
|
+
format?: 'yaml' | 'json';
|
|
14
|
+
}): Promise<CallToolResult>;
|
|
15
|
+
//# sourceMappingURL=get-recipe-definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-recipe-definition.d.ts","sourceRoot":"","sources":["../../src/tools/get-recipe-definition.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,eAAO,MAAM,uBAAuB,EAAE,IAmBrC,CAAC;AAEF,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAC/C,OAAO,CAAC,cAAc,CAAC,CA0CzB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_recipe_definition MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Gets the complete recipe definition in YAML format for export or inspection.
|
|
5
|
+
* This is the canonical format for recipe definitions - both MCP and CLI
|
|
6
|
+
* should return identical YAML output for validation purposes.
|
|
7
|
+
*/
|
|
8
|
+
import yaml from 'js-yaml';
|
|
9
|
+
export const getRecipeDefinitionTool = {
|
|
10
|
+
name: 'get_recipe_definition',
|
|
11
|
+
description: 'Get the complete recipe definition in YAML format. Returns all steps, stores, entry_step_id, and configuration details. Use this to inspect or validate recipe definitions.',
|
|
12
|
+
inputSchema: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
hash: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
description: 'The recipe hash/ID',
|
|
18
|
+
},
|
|
19
|
+
format: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
enum: ['yaml', 'json'],
|
|
22
|
+
description: 'Output format: yaml (default) or json',
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
required: ['hash'],
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
export async function handleGetRecipeDefinition(api, args) {
|
|
29
|
+
try {
|
|
30
|
+
const definition = await api.getRecipeDefinition(args.hash);
|
|
31
|
+
const format = args.format || 'yaml';
|
|
32
|
+
let text;
|
|
33
|
+
let codeBlock;
|
|
34
|
+
if (format === 'json') {
|
|
35
|
+
text = JSON.stringify(definition, null, 2);
|
|
36
|
+
codeBlock = 'json';
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// YAML output - canonical format for recipe definitions
|
|
40
|
+
text = yaml.dump(definition, {
|
|
41
|
+
indent: 2,
|
|
42
|
+
lineWidth: 120,
|
|
43
|
+
noRefs: true,
|
|
44
|
+
sortKeys: false, // Preserve field order
|
|
45
|
+
});
|
|
46
|
+
codeBlock = 'yaml';
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: 'text',
|
|
52
|
+
text: `Recipe Definition for ${args.hash}:\n\n\`\`\`${codeBlock}\n${text}\`\`\``,
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
59
|
+
return {
|
|
60
|
+
content: [
|
|
61
|
+
{
|
|
62
|
+
type: 'text',
|
|
63
|
+
text: `Error getting recipe definition: ${message}`,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
isError: true,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=get-recipe-definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-recipe-definition.js","sourceRoot":"","sources":["../../src/tools/get-recipe-definition.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,CAAC,MAAM,uBAAuB,GAAS;IAC3C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,6KAA6K;IAC/K,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oBAAoB;aAClC;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;gBACtB,WAAW,EAAE,uCAAuC;aACrD;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAAqB,EACrB,IAAgD;IAEhD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;QAErC,IAAI,IAAY,CAAC;QACjB,IAAI,SAAiB,CAAC;QAEtB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,SAAS,GAAG,MAAM,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,wDAAwD;YACxD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC3B,MAAM,EAAE,CAAC;gBACT,SAAS,EAAE,GAAG;gBACd,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,KAAK,EAAE,uBAAuB;aACzC,CAAC,CAAC;YACH,SAAS,GAAG,MAAM,CAAC;QACrB,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,yBAAyB,IAAI,CAAC,IAAI,cAAc,SAAS,KAAK,IAAI,QAAQ;iBACjF;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,oCAAoC,OAAO,EAAE;iBACpD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_recipe MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Gets detailed information about a specific agent recipe.
|
|
5
|
+
*/
|
|
6
|
+
import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import { FlowDotApiClient } from '../api-client.js';
|
|
8
|
+
export declare const getRecipeTool: Tool;
|
|
9
|
+
export declare function handleGetRecipe(api: FlowDotApiClient, args: {
|
|
10
|
+
hash: string;
|
|
11
|
+
}): Promise<CallToolResult>;
|
|
12
|
+
//# sourceMappingURL=get-recipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-recipe.d.ts","sourceRoot":"","sources":["../../src/tools/get-recipe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,aAAa,EAAE,IAc3B,CAAC;AAEF,wBAAsB,eAAe,CACnC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACrB,OAAO,CAAC,cAAc,CAAC,CA0EzB"}
|