@cyanheads/workflows-mcp-server 0.1.1
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/CLAUDE.md +376 -0
- package/Dockerfile +99 -0
- package/LICENSE +201 -0
- package/README.md +306 -0
- package/changelog/0.1.x/0.1.0.md +19 -0
- package/changelog/0.1.x/0.1.1.md +25 -0
- package/changelog/template.md +127 -0
- package/dist/config/server-config.d.ts +13 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +30 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +132 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +14 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/workflow-create-temp.tool.d.ts +34 -0
- package/dist/mcp-server/tools/definitions/workflow-create-temp.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/workflow-create-temp.tool.js +132 -0
- package/dist/mcp-server/tools/definitions/workflow-create-temp.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/workflow-create.tool.d.ts +40 -0
- package/dist/mcp-server/tools/definitions/workflow-create.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/workflow-create.tool.js +153 -0
- package/dist/mcp-server/tools/definitions/workflow-create.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/workflow-get.tool.d.ts +52 -0
- package/dist/mcp-server/tools/definitions/workflow-get.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/workflow-get.tool.js +163 -0
- package/dist/mcp-server/tools/definitions/workflow-get.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/workflow-list.tool.d.ts +28 -0
- package/dist/mcp-server/tools/definitions/workflow-list.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/workflow-list.tool.js +148 -0
- package/dist/mcp-server/tools/definitions/workflow-list.tool.js.map +1 -0
- package/dist/services/workflow-index/types.d.ts +49 -0
- package/dist/services/workflow-index/types.d.ts.map +1 -0
- package/dist/services/workflow-index/types.js +6 -0
- package/dist/services/workflow-index/types.js.map +1 -0
- package/dist/services/workflow-index/workflow-index-service.d.ts +47 -0
- package/dist/services/workflow-index/workflow-index-service.d.ts.map +1 -0
- package/dist/services/workflow-index/workflow-index-service.js +395 -0
- package/dist/services/workflow-index/workflow-index-service.js.map +1 -0
- package/package.json +103 -0
- package/server.json +129 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-create.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/workflow-create.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tool definition for retrieving a complete workflow definition by name.
|
|
3
|
+
* @module mcp-server/tools/definitions/workflow-get
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const workflowGet: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
version: z.ZodOptional<z.ZodString>;
|
|
10
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
11
|
+
workflow: z.ZodObject<{
|
|
12
|
+
name: z.ZodString;
|
|
13
|
+
version: z.ZodString;
|
|
14
|
+
description: z.ZodString;
|
|
15
|
+
author: z.ZodString;
|
|
16
|
+
category: z.ZodOptional<z.ZodString>;
|
|
17
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
18
|
+
created_date: z.ZodOptional<z.ZodString>;
|
|
19
|
+
last_updated_date: z.ZodOptional<z.ZodString>;
|
|
20
|
+
temporary: z.ZodOptional<z.ZodBoolean>;
|
|
21
|
+
steps: z.ZodArray<z.ZodObject<{
|
|
22
|
+
server: z.ZodString;
|
|
23
|
+
tool: z.ZodString;
|
|
24
|
+
action: z.ZodOptional<z.ZodString>;
|
|
25
|
+
description: z.ZodOptional<z.ZodString>;
|
|
26
|
+
name: z.ZodOptional<z.ZodString>;
|
|
27
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
28
|
+
forEach: z.ZodOptional<z.ZodString>;
|
|
29
|
+
}, z.core.$strip>>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
globalInstructions: z.ZodNullable<z.ZodString>;
|
|
32
|
+
source: z.ZodEnum<{
|
|
33
|
+
temp: "temp";
|
|
34
|
+
permanent: "permanent";
|
|
35
|
+
}>;
|
|
36
|
+
}, z.core.$strip>, readonly [{
|
|
37
|
+
readonly reason: "not_found";
|
|
38
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
39
|
+
readonly when: "No workflow matches the given name.";
|
|
40
|
+
readonly recovery: "Use workflow_list to discover available workflow names and verify spelling.";
|
|
41
|
+
}, {
|
|
42
|
+
readonly reason: "version_not_found";
|
|
43
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
44
|
+
readonly when: "Name exists but the specific version does not.";
|
|
45
|
+
readonly recovery: "Omit version to get the latest, or use workflow_list to see available versions.";
|
|
46
|
+
}, {
|
|
47
|
+
readonly reason: "index_unavailable";
|
|
48
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
49
|
+
readonly when: "The workflow index has not finished building yet.";
|
|
50
|
+
readonly recovery: "Retry after the server has finished initializing its workflow index.";
|
|
51
|
+
}]>;
|
|
52
|
+
//# sourceMappingURL=workflow-get.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-get.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/workflow-get.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAuCjE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2ItB,CAAC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tool definition for retrieving a complete workflow definition by name.
|
|
3
|
+
* @module mcp-server/tools/definitions/workflow-get
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { getWorkflowIndexService } from '../../../services/workflow-index/workflow-index-service.js';
|
|
8
|
+
const StepOutputSchema = z.object({
|
|
9
|
+
server: z.string().describe('Target MCP server name.'),
|
|
10
|
+
tool: z.string().describe('Target tool on the server.'),
|
|
11
|
+
action: z.string().optional().describe('Sub-action or variant label.'),
|
|
12
|
+
description: z.string().optional().describe('Why this step exists.'),
|
|
13
|
+
name: z.string().optional().describe('Step name (if provided in the workflow).'),
|
|
14
|
+
params: z
|
|
15
|
+
.record(z.string(), z.unknown())
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('Key-value parameter map; may contain {{input.foo}} placeholders.'),
|
|
18
|
+
forEach: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Iteration expression (opaque string, not executed server-side).'),
|
|
22
|
+
});
|
|
23
|
+
const WorkflowOutputSchema = z.object({
|
|
24
|
+
name: z.string().describe('Workflow name.'),
|
|
25
|
+
version: z.string().describe('Workflow version (semver).'),
|
|
26
|
+
description: z.string().describe('One-line description.'),
|
|
27
|
+
author: z.string().describe('Workflow author.'),
|
|
28
|
+
category: z.string().optional().describe('Workflow category.'),
|
|
29
|
+
tags: z.array(z.string()).optional().describe('Tags associated with the workflow.'),
|
|
30
|
+
created_date: z.string().optional().describe('Creation date (YYYY-MM-DD).'),
|
|
31
|
+
last_updated_date: z.string().optional().describe('Last updated date (YYYY-MM-DD).'),
|
|
32
|
+
temporary: z.boolean().optional().describe('True if this is a temporary workflow.'),
|
|
33
|
+
steps: z
|
|
34
|
+
.array(StepOutputSchema.describe('A single step in the workflow: server, tool, and optional params/metadata.'))
|
|
35
|
+
.describe('Ordered steps the consuming agent should execute.'),
|
|
36
|
+
});
|
|
37
|
+
export const workflowGet = tool('workflow_get', {
|
|
38
|
+
title: 'Get Workflow',
|
|
39
|
+
description: 'Retrieve a complete workflow definition by name. When version is omitted, returns the highest semver match. ' +
|
|
40
|
+
'Also returns the global instructions text from global_instructions.md (null when the file is absent). ' +
|
|
41
|
+
'Template placeholders like {{input.foo}} in step params are opaque strings — the server returns them verbatim. ' +
|
|
42
|
+
'Temporary workflows are accessible here but excluded from workflow_list.',
|
|
43
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
|
|
44
|
+
input: z.object({
|
|
45
|
+
name: z.string().min(1).describe('Exact workflow name to retrieve.'),
|
|
46
|
+
version: z
|
|
47
|
+
.string()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe('Specific semver version to retrieve (e.g. "1.0.0"). Omit to get the highest available version.'),
|
|
50
|
+
}),
|
|
51
|
+
output: z.object({
|
|
52
|
+
workflow: WorkflowOutputSchema.describe('The complete workflow definition.'),
|
|
53
|
+
globalInstructions: z
|
|
54
|
+
.string()
|
|
55
|
+
.nullable()
|
|
56
|
+
.describe('Content of the global_instructions.md file. Null when the file does not exist. Apply these instructions when executing the workflow.'),
|
|
57
|
+
source: z
|
|
58
|
+
.enum(['permanent', 'temp'])
|
|
59
|
+
.describe('Whether this is a permanent or temporary workflow.'),
|
|
60
|
+
}),
|
|
61
|
+
errors: [
|
|
62
|
+
{
|
|
63
|
+
reason: 'not_found',
|
|
64
|
+
code: JsonRpcErrorCode.NotFound,
|
|
65
|
+
when: 'No workflow matches the given name.',
|
|
66
|
+
recovery: 'Use workflow_list to discover available workflow names and verify spelling.',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
reason: 'version_not_found',
|
|
70
|
+
code: JsonRpcErrorCode.NotFound,
|
|
71
|
+
when: 'Name exists but the specific version does not.',
|
|
72
|
+
recovery: 'Omit version to get the latest, or use workflow_list to see available versions.',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
reason: 'index_unavailable',
|
|
76
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
77
|
+
when: 'The workflow index has not finished building yet.',
|
|
78
|
+
recovery: 'Retry after the server has finished initializing its workflow index.',
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
async handler(input, ctx) {
|
|
82
|
+
const svc = getWorkflowIndexService();
|
|
83
|
+
if (!svc.ready) {
|
|
84
|
+
throw ctx.fail('index_unavailable', 'Workflow index is not ready yet', {
|
|
85
|
+
...ctx.recoveryFor('index_unavailable'),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const entry = svc.findWorkflow(input.name, input.version);
|
|
89
|
+
if (!entry) {
|
|
90
|
+
// Distinguish "name exists, version doesn't" from "name doesn't exist"
|
|
91
|
+
const nameMatches = svc.findByName(input.name);
|
|
92
|
+
if (input.version && nameMatches.length > 0) {
|
|
93
|
+
const available = nameMatches
|
|
94
|
+
.map((e) => e.workflow.version)
|
|
95
|
+
.sort()
|
|
96
|
+
.join(', ');
|
|
97
|
+
throw ctx.fail('version_not_found', `Workflow "${input.name}" does not have version "${input.version}". Available: ${available}`, { ...ctx.recoveryFor('version_not_found') });
|
|
98
|
+
}
|
|
99
|
+
throw ctx.fail('not_found', `No workflow named "${input.name}" found`, {
|
|
100
|
+
...ctx.recoveryFor('not_found'),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
const globalInstructions = await svc.readGlobalInstructions();
|
|
104
|
+
ctx.log.info('workflow_get completed', {
|
|
105
|
+
name: entry.workflow.name,
|
|
106
|
+
version: entry.workflow.version,
|
|
107
|
+
isTemp: entry.isTemp,
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
workflow: entry.workflow,
|
|
111
|
+
globalInstructions,
|
|
112
|
+
source: (entry.isTemp ? 'temp' : 'permanent'),
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
format(result) {
|
|
116
|
+
const wf = result.workflow;
|
|
117
|
+
const lines = [];
|
|
118
|
+
lines.push(`# ${wf.name} v${wf.version}`);
|
|
119
|
+
lines.push(`**Source:** ${result.source} | **Author:** ${wf.author}`);
|
|
120
|
+
if (wf.category)
|
|
121
|
+
lines.push(`**Category:** ${wf.category}`);
|
|
122
|
+
if (wf.temporary)
|
|
123
|
+
lines.push('**Temporary:** yes');
|
|
124
|
+
if (wf.tags && wf.tags.length > 0)
|
|
125
|
+
lines.push(`**Tags:** ${wf.tags.join(', ')}`);
|
|
126
|
+
if (wf.created_date)
|
|
127
|
+
lines.push(`**Created:** ${wf.created_date}`);
|
|
128
|
+
if (wf.last_updated_date)
|
|
129
|
+
lines.push(`**Updated:** ${wf.last_updated_date}`);
|
|
130
|
+
lines.push('');
|
|
131
|
+
lines.push(wf.description);
|
|
132
|
+
lines.push('');
|
|
133
|
+
if (result.globalInstructions) {
|
|
134
|
+
lines.push('## Global Instructions');
|
|
135
|
+
lines.push(result.globalInstructions);
|
|
136
|
+
lines.push('');
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
lines.push('> **Note:** No global_instructions.md file found.');
|
|
140
|
+
lines.push('');
|
|
141
|
+
}
|
|
142
|
+
lines.push(`## Steps (${wf.steps.length})`);
|
|
143
|
+
wf.steps.forEach((step, i) => {
|
|
144
|
+
lines.push(`### Step ${i + 1}: ${step.name ?? step.action ?? step.tool}`);
|
|
145
|
+
lines.push(`**Server:** ${step.server} | **Tool:** ${step.tool}`);
|
|
146
|
+
if (step.action)
|
|
147
|
+
lines.push(`**Action:** ${step.action}`);
|
|
148
|
+
if (step.description)
|
|
149
|
+
lines.push(step.description);
|
|
150
|
+
if (step.forEach)
|
|
151
|
+
lines.push(`**For each:** ${step.forEach}`);
|
|
152
|
+
if (step.params && Object.keys(step.params).length > 0) {
|
|
153
|
+
lines.push('**Params:**');
|
|
154
|
+
for (const [k, v] of Object.entries(step.params)) {
|
|
155
|
+
lines.push(` - \`${k}\`: ${JSON.stringify(v)}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
lines.push('');
|
|
159
|
+
});
|
|
160
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
//# sourceMappingURL=workflow-get.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-get.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/workflow-get.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tool definition for listing workflows from the index.
|
|
3
|
+
* @module mcp-server/tools/definitions/workflow-list
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const workflowList: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
category: z.ZodOptional<z.ZodString>;
|
|
9
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
10
|
+
includeTools: z.ZodOptional<z.ZodBoolean>;
|
|
11
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
12
|
+
workflows: z.ZodArray<z.ZodObject<{
|
|
13
|
+
name: z.ZodString;
|
|
14
|
+
version: z.ZodString;
|
|
15
|
+
description: z.ZodString;
|
|
16
|
+
author: z.ZodString;
|
|
17
|
+
category: z.ZodOptional<z.ZodString>;
|
|
18
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
19
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
20
|
+
}, z.core.$strip>>;
|
|
21
|
+
totalCount: z.ZodNumber;
|
|
22
|
+
}, z.core.$strip>, readonly [{
|
|
23
|
+
readonly reason: "index_unavailable";
|
|
24
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
25
|
+
readonly when: "The workflow index has not finished building yet.";
|
|
26
|
+
readonly recovery: "Retry after the server has finished initializing its workflow index.";
|
|
27
|
+
}]>;
|
|
28
|
+
//# sourceMappingURL=workflow-list.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-list.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/workflow-list.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;GAyKvB,CAAC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tool definition for listing workflows from the index.
|
|
3
|
+
* @module mcp-server/tools/definitions/workflow-list
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { getWorkflowIndexService } from '../../../services/workflow-index/workflow-index-service.js';
|
|
8
|
+
export const workflowList = tool('workflow_list', {
|
|
9
|
+
title: 'List Workflows',
|
|
10
|
+
description: 'List all permanent workflows in the index. Supports optional filtering by category and tags (AND match). ' +
|
|
11
|
+
'Set includeTools to true to surface the unique <server>/<tool> pairs used across each matching workflow. ' +
|
|
12
|
+
'Temporary workflows are excluded from results.',
|
|
13
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
|
|
14
|
+
input: z.object({
|
|
15
|
+
category: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe('Filter to workflows whose category contains this string (case-insensitive substring match). Omit to return all categories.'),
|
|
19
|
+
tags: z
|
|
20
|
+
.array(z.string())
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Filter to workflows that have ALL of these tags (AND match). Omit to skip tag filtering.'),
|
|
23
|
+
includeTools: z
|
|
24
|
+
.boolean()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe('When true, each result includes a unique list of server/tool pairs used across its steps.'),
|
|
27
|
+
}),
|
|
28
|
+
output: z.object({
|
|
29
|
+
workflows: z
|
|
30
|
+
.array(z
|
|
31
|
+
.object({
|
|
32
|
+
name: z.string().describe('Workflow name.'),
|
|
33
|
+
version: z.string().describe('Workflow version (semver).'),
|
|
34
|
+
description: z.string().describe('One-line description of the workflow.'),
|
|
35
|
+
author: z.string().describe('Workflow author.'),
|
|
36
|
+
category: z.string().optional().describe('Workflow category.'),
|
|
37
|
+
tags: z.array(z.string()).optional().describe('Tags associated with the workflow.'),
|
|
38
|
+
tools: z
|
|
39
|
+
.array(z.string())
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('Unique server/tool pairs used by this workflow (only present when includeTools is true).'),
|
|
42
|
+
})
|
|
43
|
+
.describe('Summary of a single workflow entry.'))
|
|
44
|
+
.describe('Matching workflows, sorted by name then version descending.'),
|
|
45
|
+
totalCount: z.number().describe('Total number of matching workflows.'),
|
|
46
|
+
}),
|
|
47
|
+
errors: [
|
|
48
|
+
{
|
|
49
|
+
reason: 'index_unavailable',
|
|
50
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
51
|
+
when: 'The workflow index has not finished building yet.',
|
|
52
|
+
recovery: 'Retry after the server has finished initializing its workflow index.',
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
handler(input, ctx) {
|
|
56
|
+
const svc = getWorkflowIndexService();
|
|
57
|
+
if (!svc.ready) {
|
|
58
|
+
throw ctx.fail('index_unavailable', 'Workflow index is not ready yet', {
|
|
59
|
+
...ctx.recoveryFor('index_unavailable'),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const { category, tags, includeTools } = input;
|
|
63
|
+
const results = [];
|
|
64
|
+
for (const entry of svc.index.values()) {
|
|
65
|
+
// Exclude temp workflows
|
|
66
|
+
if (entry.isTemp)
|
|
67
|
+
continue;
|
|
68
|
+
const wf = entry.workflow;
|
|
69
|
+
// Category filter (case-insensitive substring)
|
|
70
|
+
if (category?.trim()) {
|
|
71
|
+
if (!wf.category?.toLowerCase().includes(category.toLowerCase()))
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
// Tags filter (AND match, case-insensitive)
|
|
75
|
+
if (tags && tags.length > 0) {
|
|
76
|
+
const wfTagsLower = (wf.tags ?? []).map((t) => t.toLowerCase());
|
|
77
|
+
const allMatch = tags.every((t) => wfTagsLower.includes(t.toLowerCase()));
|
|
78
|
+
if (!allMatch)
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const item = {
|
|
82
|
+
name: wf.name,
|
|
83
|
+
version: wf.version,
|
|
84
|
+
description: wf.description,
|
|
85
|
+
author: wf.author,
|
|
86
|
+
...(wf.category !== undefined && { category: wf.category }),
|
|
87
|
+
...(wf.tags !== undefined && { tags: wf.tags }),
|
|
88
|
+
};
|
|
89
|
+
if (includeTools) {
|
|
90
|
+
const toolPairs = new Set();
|
|
91
|
+
for (const step of wf.steps) {
|
|
92
|
+
toolPairs.add(`${step.server}/${step.tool}`);
|
|
93
|
+
}
|
|
94
|
+
item.tools = [...toolPairs].sort();
|
|
95
|
+
}
|
|
96
|
+
results.push(item);
|
|
97
|
+
}
|
|
98
|
+
// Sort by name then version descending
|
|
99
|
+
results.sort((a, b) => {
|
|
100
|
+
const nameCmp = a.name.localeCompare(b.name);
|
|
101
|
+
if (nameCmp !== 0)
|
|
102
|
+
return nameCmp;
|
|
103
|
+
// semver descending (higher version first)
|
|
104
|
+
const av = a.version.match(/^(\d+)\.(\d+)\.(\d+)/);
|
|
105
|
+
const bv = b.version.match(/^(\d+)\.(\d+)\.(\d+)/);
|
|
106
|
+
if (av && bv) {
|
|
107
|
+
for (let i = 1; i <= 3; i++) {
|
|
108
|
+
const diff = Number(bv[i]) - Number(av[i]);
|
|
109
|
+
if (diff !== 0)
|
|
110
|
+
return diff;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return 0;
|
|
114
|
+
});
|
|
115
|
+
ctx.log.info('workflow_list completed', {
|
|
116
|
+
category: category ?? null,
|
|
117
|
+
tags: tags ?? null,
|
|
118
|
+
resultCount: results.length,
|
|
119
|
+
});
|
|
120
|
+
return { workflows: results, totalCount: results.length };
|
|
121
|
+
},
|
|
122
|
+
format(result) {
|
|
123
|
+
if (result.totalCount === 0) {
|
|
124
|
+
return [
|
|
125
|
+
{
|
|
126
|
+
type: 'text',
|
|
127
|
+
text: `No workflows found matching the applied filters.\n**Total:** ${result.totalCount}`,
|
|
128
|
+
},
|
|
129
|
+
];
|
|
130
|
+
}
|
|
131
|
+
const lines = [`**Total workflows:** ${result.totalCount}\n`];
|
|
132
|
+
for (const wf of result.workflows) {
|
|
133
|
+
lines.push(`## ${wf.name} v${wf.version}`);
|
|
134
|
+
lines.push(`**Author:** ${wf.author}`);
|
|
135
|
+
if (wf.category)
|
|
136
|
+
lines.push(`**Category:** ${wf.category}`);
|
|
137
|
+
if (wf.tags && wf.tags.length > 0)
|
|
138
|
+
lines.push(`**Tags:** ${wf.tags.join(', ')}`);
|
|
139
|
+
lines.push(wf.description);
|
|
140
|
+
if (wf.tools && wf.tools.length > 0) {
|
|
141
|
+
lines.push(`**Tools used:** ${wf.tools.join(', ')}`);
|
|
142
|
+
}
|
|
143
|
+
lines.push('');
|
|
144
|
+
}
|
|
145
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
//# sourceMappingURL=workflow-list.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-list.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/workflow-list.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Domain types for the workflow index service.
|
|
3
|
+
* @module services/workflow-index/types
|
|
4
|
+
*/
|
|
5
|
+
/** A single step in a workflow. */
|
|
6
|
+
export interface WorkflowStep {
|
|
7
|
+
action?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
forEach?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
params?: Record<string, unknown>;
|
|
12
|
+
server: string;
|
|
13
|
+
tool: string;
|
|
14
|
+
}
|
|
15
|
+
/** A parsed, validated workflow document. */
|
|
16
|
+
export interface ParsedWorkflow {
|
|
17
|
+
author: string;
|
|
18
|
+
category?: string;
|
|
19
|
+
created_date?: string;
|
|
20
|
+
description: string;
|
|
21
|
+
last_updated_date?: string;
|
|
22
|
+
name: string;
|
|
23
|
+
steps: WorkflowStep[];
|
|
24
|
+
tags?: string[];
|
|
25
|
+
temporary?: boolean;
|
|
26
|
+
version: string;
|
|
27
|
+
}
|
|
28
|
+
/** An entry in the in-memory workflow index. */
|
|
29
|
+
export interface WorkflowEntry {
|
|
30
|
+
filePath: string;
|
|
31
|
+
isTemp: boolean;
|
|
32
|
+
workflow: ParsedWorkflow;
|
|
33
|
+
}
|
|
34
|
+
/** The in-memory index keyed by "name@version". */
|
|
35
|
+
export type WorkflowIndex = Map<string, WorkflowEntry>;
|
|
36
|
+
/** Shape written to _index.json. */
|
|
37
|
+
export interface IndexSnapshot {
|
|
38
|
+
count: number;
|
|
39
|
+
entries: Record<string, {
|
|
40
|
+
filePath: string;
|
|
41
|
+
isTemp: boolean;
|
|
42
|
+
name: string;
|
|
43
|
+
version: string;
|
|
44
|
+
category?: string;
|
|
45
|
+
tags?: string[];
|
|
46
|
+
}>;
|
|
47
|
+
generatedAt: string;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/workflow-index/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,mDAAmD;AACnD,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAEvD,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CACb,MAAM,EACN;QACE,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CACF,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/workflow-index/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview In-memory workflow index service with filesystem watcher.
|
|
3
|
+
* Loads, validates, and indexes YAML workflow files from the configured directory.
|
|
4
|
+
* Watches for changes and rebuilds the index with debouncing.
|
|
5
|
+
* @module services/workflow-index/workflow-index-service
|
|
6
|
+
*/
|
|
7
|
+
import type { AppConfig } from '@cyanheads/mcp-ts-core/config';
|
|
8
|
+
import type { StorageService } from '@cyanheads/mcp-ts-core/storage';
|
|
9
|
+
import type { ParsedWorkflow, WorkflowEntry, WorkflowIndex } from './types.js';
|
|
10
|
+
/** Convert a display string to a filesystem-safe kebab-case slug. */
|
|
11
|
+
export declare function slugify(input: string): string;
|
|
12
|
+
export declare class WorkflowIndexService {
|
|
13
|
+
private _index;
|
|
14
|
+
private _ready;
|
|
15
|
+
private _watcherController;
|
|
16
|
+
private _debounceTimer;
|
|
17
|
+
private readonly workflowsDir;
|
|
18
|
+
private readonly globalInstructionsPath;
|
|
19
|
+
private readonly watcherDebounceMs;
|
|
20
|
+
constructor(workflowsDir: string, globalInstructionsPath: string, watcherDebounceMs: number);
|
|
21
|
+
get ready(): boolean;
|
|
22
|
+
/** The current in-memory index. */
|
|
23
|
+
get index(): WorkflowIndex;
|
|
24
|
+
/** Initialize: build initial index and start filesystem watcher. */
|
|
25
|
+
init(): Promise<void>;
|
|
26
|
+
/** Tear down the watcher. */
|
|
27
|
+
shutdown(): void;
|
|
28
|
+
/** Find all entries matching a name (across all versions). */
|
|
29
|
+
findByName(name: string): WorkflowEntry[];
|
|
30
|
+
/** Semver-aware lookup. Returns the highest version match if version is omitted. */
|
|
31
|
+
findWorkflow(name: string, version?: string): WorkflowEntry | undefined;
|
|
32
|
+
/** Read global_instructions.md content. Returns null if file missing. */
|
|
33
|
+
readGlobalInstructions(): Promise<string | null>;
|
|
34
|
+
/** Write a permanent workflow YAML and rebuild the index. */
|
|
35
|
+
writePermanent(workflow: ParsedWorkflow): Promise<string>;
|
|
36
|
+
/** Write a temporary workflow YAML and rebuild the index. */
|
|
37
|
+
writeTemp(workflow: ParsedWorkflow): Promise<string>;
|
|
38
|
+
private rebuild;
|
|
39
|
+
private scanDirectory;
|
|
40
|
+
private loadFile;
|
|
41
|
+
private writeSnapshot;
|
|
42
|
+
private startWatcher;
|
|
43
|
+
private scheduledRebuild;
|
|
44
|
+
}
|
|
45
|
+
export declare function initWorkflowIndexService(_config: AppConfig, _storage: StorageService, workflowsDir: string, globalInstructionsPath: string, watcherDebounceMs: number): void;
|
|
46
|
+
export declare function getWorkflowIndexService(): WorkflowIndexService;
|
|
47
|
+
//# sourceMappingURL=workflow-index-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-index-service.d.ts","sourceRoot":"","sources":["../../../src/services/workflow-index/workflow-index-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,KAAK,EAAiB,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA2C9F,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7C;AA0CD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,kBAAkB,CAA8B;IACxD,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAE/B,YAAY,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM;IAQ3F,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,mCAAmC;IACnC,IAAI,KAAK,IAAI,aAAa,CAEzB;IAED,oEAAoE;IAC9D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,6BAA6B;IAC7B,QAAQ,IAAI,IAAI;IAOhB,8DAA8D;IAC9D,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE;IAQzC,oFAAoF;IACpF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAUvE,yEAAyE;IACnE,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUtD,6DAA6D;IACvD,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAgC/D,6DAA6D;IACvD,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;YAmB5C,OAAO;YAuBP,aAAa;YAwBb,QAAQ;YAwCR,aAAa;IAsB3B,OAAO,CAAC,YAAY;IAiCpB,OAAO,CAAC,gBAAgB;CAKzB;AA6DD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,MAAM,EACpB,sBAAsB,EAAE,MAAM,EAC9B,iBAAiB,EAAE,MAAM,GACxB,IAAI,CAKN;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CAO9D"}
|