@minicor/mcp-server 2.0.2 → 2.0.3
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/dist/config.d.ts +3 -13
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -30
- package/dist/config.js.map +1 -1
- package/dist/helpers.d.ts +0 -3
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +0 -31
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -36
- package/dist/index.js.map +1 -1
- package/dist/prompts/build-nerve-rpa.d.ts +3 -0
- package/dist/prompts/build-nerve-rpa.d.ts.map +1 -0
- package/dist/prompts/build-nerve-rpa.js +148 -0
- package/dist/prompts/build-nerve-rpa.js.map +1 -0
- package/dist/prompts/build-rpa.d.ts.map +1 -1
- package/dist/prompts/build-rpa.js +123 -20
- package/dist/prompts/build-rpa.js.map +1 -1
- package/dist/prompts/debug-execution.d.ts.map +1 -1
- package/dist/prompts/debug-execution.js +22 -1
- package/dist/prompts/debug-execution.js.map +1 -1
- package/dist/prompts/workflow-guide.d.ts.map +1 -1
- package/dist/prompts/workflow-guide.js +3 -14
- package/dist/prompts/workflow-guide.js.map +1 -1
- package/dist/setup.js +19 -83
- package/dist/setup.js.map +1 -1
- package/dist/state.d.ts +0 -9
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +0 -9
- package/dist/state.js.map +1 -1
- package/dist/tools/core.d.ts.map +1 -1
- package/dist/tools/core.js +0 -7
- package/dist/tools/core.js.map +1 -1
- package/dist/tools/vm-rpa.d.ts.map +1 -1
- package/dist/tools/vm-rpa.js +60 -3
- package/dist/tools/vm-rpa.js.map +1 -1
- package/dist/tools/vm.d.ts.map +1 -1
- package/dist/tools/vm.js +16 -5
- package/dist/tools/vm.js.map +1 -1
- package/dist/types.d.ts +0 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/config.d.ts
CHANGED
|
@@ -1,20 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Configuration helpers for Minicor MCP.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Previously housed Elasticsearch + CRON service config.
|
|
5
|
+
* Kept for future extensibility; config file paths still used by setup.
|
|
5
6
|
*/
|
|
6
|
-
export interface ElasticsearchConfig {
|
|
7
|
-
endpoint: string;
|
|
8
|
-
apiKey: string;
|
|
9
|
-
indexName?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface CronConfig {
|
|
12
|
-
apiBase?: string;
|
|
13
|
-
apiKey: string;
|
|
14
|
-
}
|
|
15
7
|
export interface ServiceConfig {
|
|
16
|
-
elasticsearch?: ElasticsearchConfig;
|
|
17
|
-
cron?: CronConfig;
|
|
18
8
|
}
|
|
19
9
|
export declare function loadServiceConfig(): ServiceConfig;
|
|
20
10
|
export declare function saveServiceConfig(update: ServiceConfig): void;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,aAAa;CAAG;AAEjC,wBAAgB,iBAAiB,IAAI,aAAa,CAEjD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,QAiBtD"}
|
package/dist/config.js
CHANGED
|
@@ -1,40 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Configuration helpers for Minicor MCP.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Previously housed Elasticsearch + CRON service config.
|
|
5
|
+
* Kept for future extensibility; config file paths still used by setup.
|
|
5
6
|
*/
|
|
6
7
|
import fs from "node:fs";
|
|
7
8
|
import path from "node:path";
|
|
8
9
|
import { getConfigPath, getWriteConfigPath } from "./paths.js";
|
|
9
10
|
export function loadServiceConfig() {
|
|
10
|
-
|
|
11
|
-
if (process.env.ELASTICSEARCH_ENDPOINT && process.env.ELASTICSEARCH_API_KEY) {
|
|
12
|
-
config.elasticsearch = {
|
|
13
|
-
endpoint: process.env.ELASTICSEARCH_ENDPOINT,
|
|
14
|
-
apiKey: process.env.ELASTICSEARCH_API_KEY,
|
|
15
|
-
indexName: process.env.ELASTICSEARCH_INDEX_NAME,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
if (process.env.CRON_API_KEY) {
|
|
19
|
-
config.cron = {
|
|
20
|
-
apiBase: process.env.CRON_API_BASE,
|
|
21
|
-
apiKey: process.env.CRON_API_KEY,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
try {
|
|
25
|
-
const cfgPath = getConfigPath();
|
|
26
|
-
if (fs.existsSync(cfgPath)) {
|
|
27
|
-
const file = JSON.parse(fs.readFileSync(cfgPath, "utf-8"));
|
|
28
|
-
if (!config.elasticsearch && file.elasticsearch) {
|
|
29
|
-
config.elasticsearch = file.elasticsearch;
|
|
30
|
-
}
|
|
31
|
-
if (!config.cron && file.cron) {
|
|
32
|
-
config.cron = file.cron;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
catch { }
|
|
37
|
-
return config;
|
|
11
|
+
return {};
|
|
38
12
|
}
|
|
39
13
|
export function saveServiceConfig(update) {
|
|
40
14
|
const writePath = getWriteConfigPath();
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAI/D,MAAM,UAAU,iBAAiB;IAC/B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,IAAI,QAAQ,GAAkB,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;QACjC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QAClE,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC"}
|
package/dist/helpers.d.ts
CHANGED
|
@@ -20,9 +20,6 @@ export declare function safe<T>(fn: () => Promise<T>): Promise<{
|
|
|
20
20
|
text: string;
|
|
21
21
|
}[];
|
|
22
22
|
}>;
|
|
23
|
-
export declare const NOT_CONFIGURED_ES = "Elasticsearch is not configured. Log search requires ES credentials.\n\n**Option 1 \u2014 Environment variables:**\n ELASTICSEARCH_ENDPOINT=https://your-es-cluster\n ELASTICSEARCH_API_KEY=your-api-key\n ELASTICSEARCH_INDEX_NAME=search-workflow-executions (optional)\n\n**Option 2 \u2014 Config file** (~/.laminar/config.json):\n {\n \"elasticsearch\": {\n \"endpoint\": \"https://your-es-cluster\",\n \"apiKey\": \"your-api-key\"\n }\n }\n\n**Option 3 \u2014 Run setup:** laminar-mcp-setup \u2192 Advanced Settings";
|
|
24
|
-
export declare const NOT_CONFIGURED_CRON = "CRON service is not configured. Scheduling requires CRON credentials.\n\n**Option 1 \u2014 Environment variables:**\n CRON_API_KEY=your-cron-api-key\n CRON_API_BASE=https://cron.laminar.run (optional)\n\n**Option 2 \u2014 Config file** (~/.laminar/config.json):\n {\n \"cron\": {\n \"apiKey\": \"your-cron-api-key\"\n }\n }\n\n**Option 3 \u2014 Run setup:** laminar-mcp-setup \u2192 Advanced Settings";
|
|
25
23
|
export declare const NOT_CONNECTED_VM = "No VM connected. Ask the user for their Cloudflare Tunnel URL for the Laminar Desktop Service, then call vm_connect.";
|
|
26
|
-
export declare const NOT_CONNECTED_BROWSER = "No browser RPA service connected. Call browser_connect with the service base URL and bearer token first.";
|
|
27
24
|
export declare function buildRpaProgram(pythonScript: string, pattern: "cloudflare_tunnel" | "channel", flowId: string, stepName: string, stepDescription: string): string;
|
|
28
25
|
//# sourceMappingURL=helpers.d.ts.map
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE1C;AAED,wBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO;;;;;EAE/B;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM;;;;;EAE/B;AAED,wBAAsB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;;;;;GAMjD;AAED,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE1C;AAED,wBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO;;;;;EAE/B;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM;;;;;EAE/B;AAED,wBAAsB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;;;;;GAMjD;AAED,eAAO,MAAM,gBAAgB,yHAAyH,CAAC;AAEvJ,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,MAAM,CAqCR"}
|
package/dist/helpers.js
CHANGED
|
@@ -18,38 +18,7 @@ export async function safe(fn) {
|
|
|
18
18
|
return text(`Error: ${e.message}`);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
export const NOT_CONFIGURED_ES = `Elasticsearch is not configured. Log search requires ES credentials.
|
|
22
|
-
|
|
23
|
-
**Option 1 — Environment variables:**
|
|
24
|
-
ELASTICSEARCH_ENDPOINT=https://your-es-cluster
|
|
25
|
-
ELASTICSEARCH_API_KEY=your-api-key
|
|
26
|
-
ELASTICSEARCH_INDEX_NAME=search-workflow-executions (optional)
|
|
27
|
-
|
|
28
|
-
**Option 2 — Config file** (~/.laminar/config.json):
|
|
29
|
-
{
|
|
30
|
-
"elasticsearch": {
|
|
31
|
-
"endpoint": "https://your-es-cluster",
|
|
32
|
-
"apiKey": "your-api-key"
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
**Option 3 — Run setup:** laminar-mcp-setup → Advanced Settings`;
|
|
37
|
-
export const NOT_CONFIGURED_CRON = `CRON service is not configured. Scheduling requires CRON credentials.
|
|
38
|
-
|
|
39
|
-
**Option 1 — Environment variables:**
|
|
40
|
-
CRON_API_KEY=your-cron-api-key
|
|
41
|
-
CRON_API_BASE=https://cron.laminar.run (optional)
|
|
42
|
-
|
|
43
|
-
**Option 2 — Config file** (~/.laminar/config.json):
|
|
44
|
-
{
|
|
45
|
-
"cron": {
|
|
46
|
-
"apiKey": "your-cron-api-key"
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
**Option 3 — Run setup:** laminar-mcp-setup → Advanced Settings`;
|
|
51
21
|
export const NOT_CONNECTED_VM = `No VM connected. Ask the user for their Cloudflare Tunnel URL for the Laminar Desktop Service, then call vm_connect.`;
|
|
52
|
-
export const NOT_CONNECTED_BROWSER = `No browser RPA service connected. Call browser_connect with the service base URL and bearer token first.`;
|
|
53
22
|
export function buildRpaProgram(pythonScript, pattern, flowId, stepName, stepDescription) {
|
|
54
23
|
const escaped = pythonScript.replace(/`/g, "\\`").replace(/\$/g, "\\$");
|
|
55
24
|
if (pattern === "channel") {
|
package/dist/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,IAAI,CAAC,IAAa;IAChC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,IAAa;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAI,EAAoB;IAChD,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,IAAI,CAAC,IAAa;IAChC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,IAAa;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAI,EAAoB;IAChD,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,sHAAsH,CAAC;AAEvJ,MAAM,UAAU,eAAe,CAC7B,YAAoB,EACpB,OAAwC,EACxC,MAAc,EACd,QAAgB,EAChB,eAAuB;IAEvB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;;EAET,OAAO;;;;;;;;EAQP,CAAC;IACD,CAAC;IACD,OAAO;;EAEP,OAAO;;;;;;;;;;;;qBAYY,MAAM;;;2BAGA,MAAM,eAAe,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,sBAAsB,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;;;;EAIrI,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Minicor MCP Server
|
|
3
|
+
* Minicor MCP Server
|
|
4
4
|
*
|
|
5
5
|
* Brings your Minicor workspace into Cursor / Claude Code.
|
|
6
|
-
*
|
|
6
|
+
* Build, deploy, and debug VM-based automations from your IDE.
|
|
7
7
|
*/
|
|
8
8
|
export declare function getApiBase(): string;
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AA0DH,wBAAgB,UAAU,IAAI,MAAM,CAKnC"}
|
package/dist/index.js
CHANGED
|
@@ -1,33 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Minicor MCP Server
|
|
3
|
+
* Minicor MCP Server
|
|
4
4
|
*
|
|
5
5
|
* Brings your Minicor workspace into Cursor / Claude Code.
|
|
6
|
-
*
|
|
6
|
+
* Build, deploy, and debug VM-based automations from your IDE.
|
|
7
7
|
*/
|
|
8
8
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
9
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
10
10
|
import fs from "node:fs";
|
|
11
11
|
import path from "node:path";
|
|
12
|
-
import { loadServiceConfig } from "./config.js";
|
|
13
12
|
import { LaminarClient } from "./laminar-client.js";
|
|
14
13
|
import { getTokenPath, getWriteTokenPath, regionToApiBase, apiBaseToRegion, } from "./paths.js";
|
|
15
|
-
import { CronService, ElasticsearchService } from "./services.js";
|
|
16
14
|
import { register as registerCore } from "./tools/core.js";
|
|
17
15
|
import { register as registerWorkflowOps } from "./tools/workflow-ops.js";
|
|
18
16
|
import { register as registerConfigStores } from "./tools/config-stores.js";
|
|
19
|
-
import { register as registerIssues } from "./tools/issues.js";
|
|
20
|
-
import { register as registerStats } from "./tools/stats.js";
|
|
21
|
-
import { register as registerElasticsearch } from "./tools/elasticsearch.js";
|
|
22
|
-
import { register as registerCron } from "./tools/cron.js";
|
|
23
17
|
import { register as registerSyncTools } from "./tools/sync-tools.js";
|
|
24
18
|
import { register as registerVm } from "./tools/vm.js";
|
|
25
19
|
import { register as registerVmRpa } from "./tools/vm-rpa.js";
|
|
26
|
-
import { register as registerBrowser } from "./tools/browser.js";
|
|
27
20
|
import { register as registerWorkflowGuide } from "./prompts/workflow-guide.js";
|
|
28
21
|
import { register as registerDebugExecution } from "./prompts/debug-execution.js";
|
|
29
22
|
import { register as registerBuildRpa } from "./prompts/build-rpa.js";
|
|
30
|
-
import { register as registerBuildBrowserRpa } from "./prompts/build-browser-rpa.js";
|
|
31
23
|
// ─── Token management ────────────────────────────────────────
|
|
32
24
|
const REFRESH_BUFFER_MS = 5 * 60 * 1000;
|
|
33
25
|
function readStoredTokens() {
|
|
@@ -111,11 +103,9 @@ async function resolveAuth() {
|
|
|
111
103
|
}
|
|
112
104
|
// ─── Server state ────────────────────────────────────────────
|
|
113
105
|
let client;
|
|
114
|
-
let esService = null;
|
|
115
|
-
let cronService = null;
|
|
116
106
|
const server = new McpServer({
|
|
117
107
|
name: "minicor",
|
|
118
|
-
version: "
|
|
108
|
+
version: "3.0.0",
|
|
119
109
|
});
|
|
120
110
|
function scheduleTokenRefresh() {
|
|
121
111
|
const tokens = readStoredTokens();
|
|
@@ -155,24 +145,16 @@ function registerAll() {
|
|
|
155
145
|
server,
|
|
156
146
|
client: () => client,
|
|
157
147
|
getApiBase,
|
|
158
|
-
esService: () => esService,
|
|
159
|
-
cronService: () => cronService,
|
|
160
148
|
};
|
|
161
149
|
registerCore(deps);
|
|
162
150
|
registerWorkflowOps(deps);
|
|
163
151
|
registerConfigStores(deps);
|
|
164
|
-
registerIssues(deps);
|
|
165
|
-
registerStats(deps);
|
|
166
|
-
registerElasticsearch(deps);
|
|
167
|
-
registerCron(deps);
|
|
168
152
|
registerSyncTools(deps);
|
|
169
153
|
registerVm(deps);
|
|
170
154
|
registerVmRpa(deps);
|
|
171
|
-
registerBrowser(deps);
|
|
172
155
|
registerWorkflowGuide(deps);
|
|
173
156
|
registerDebugExecution(deps);
|
|
174
157
|
registerBuildRpa(deps);
|
|
175
|
-
registerBuildBrowserRpa(deps);
|
|
176
158
|
}
|
|
177
159
|
// ─── Main ────────────────────────────────────────────────────
|
|
178
160
|
async function main() {
|
|
@@ -184,21 +166,6 @@ async function main() {
|
|
|
184
166
|
else {
|
|
185
167
|
client = new LaminarClient(authResult.auth, authResult.baseUrl);
|
|
186
168
|
scheduleTokenRefresh();
|
|
187
|
-
const svcConfig = loadServiceConfig();
|
|
188
|
-
if (svcConfig.elasticsearch) {
|
|
189
|
-
esService = new ElasticsearchService(svcConfig.elasticsearch);
|
|
190
|
-
console.error("Elasticsearch: configured");
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
console.error("Elasticsearch: not configured (log search disabled)");
|
|
194
|
-
}
|
|
195
|
-
if (svcConfig.cron) {
|
|
196
|
-
cronService = new CronService(svcConfig.cron);
|
|
197
|
-
console.error("CRON service: configured");
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
console.error("CRON service: not configured (scheduling disabled)");
|
|
201
|
-
}
|
|
202
169
|
registerAll();
|
|
203
170
|
}
|
|
204
171
|
const transport = new StdioServerTransport();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-nerve-rpa.d.ts","sourceRoot":"","sources":["../../src/prompts/build-nerve-rpa.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,QAsJ5C"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function register({ server }) {
|
|
3
|
+
server.prompt("build-nerve-rpa-workflow", "Build an RPA workflow using NERVE's atomic operations: annotated screenshots, element clicking/typing, CDP browser control, OCR, and self-healing. Optimized for NERVE (not legacy LDS).", {
|
|
4
|
+
workspaceId: z.string().describe("Laminar workspace ID"),
|
|
5
|
+
task: z.string().describe("What to automate"),
|
|
6
|
+
appName: z.string().describe("Target application name"),
|
|
7
|
+
workflowId: z.string().optional().describe("Existing workflow ID to add steps to"),
|
|
8
|
+
}, async ({ workspaceId, task, appName, workflowId }) => ({
|
|
9
|
+
messages: [
|
|
10
|
+
{
|
|
11
|
+
role: "user",
|
|
12
|
+
content: {
|
|
13
|
+
type: "text",
|
|
14
|
+
text: `You are building an RPA workflow using NERVE on the Laminar platform. NERVE gives you direct atomic control over the Windows desktop — you do NOT need to write Python scripts for simple interactions.
|
|
15
|
+
|
|
16
|
+
## Task
|
|
17
|
+
${task}
|
|
18
|
+
|
|
19
|
+
## Target Application
|
|
20
|
+
${appName}
|
|
21
|
+
|
|
22
|
+
## Workspace
|
|
23
|
+
ID: ${workspaceId}${workflowId ? `\nExisting workflow ID: ${workflowId}` : "\nCreate a new workflow for this automation."}
|
|
24
|
+
|
|
25
|
+
## How NERVE Works
|
|
26
|
+
|
|
27
|
+
NERVE runs on the VM and exposes the full OS via HTTP APIs. When you call \`vm_connect\`, check the \`capabilities\` array in the response to see what's available.
|
|
28
|
+
|
|
29
|
+
Key capabilities:
|
|
30
|
+
- \`annotated_screenshots\` — X-Ray Vision: screenshot with numbered element overlays
|
|
31
|
+
- \`ui_tree_cache\` — Persistent accessibility tree
|
|
32
|
+
- \`atomic_input\` — Click/type/invoke by element ID
|
|
33
|
+
- \`script_execution\` — Run Python scripts
|
|
34
|
+
- \`cdp\` — Chrome DevTools Protocol for browser control
|
|
35
|
+
- \`ocr\` / \`template_matching\` — For Citrix/pixel-based apps
|
|
36
|
+
- \`self_healing\` — Pause on error + intervention
|
|
37
|
+
|
|
38
|
+
## Step 1: Connect and Survey
|
|
39
|
+
|
|
40
|
+
1. \`vm_connect\` — connect to the VM
|
|
41
|
+
2. Check \`capabilities\` in the response
|
|
42
|
+
3. \`vm_annotated_screenshot\` — see the desktop with numbered elements
|
|
43
|
+
4. \`vm_system_info\` — get OS, RAM, CPU info
|
|
44
|
+
5. \`vm_processes\` — see what's running
|
|
45
|
+
|
|
46
|
+
## Step 2: Understand the UI
|
|
47
|
+
|
|
48
|
+
Use the annotated screenshot to understand the screen. Each interactive element has a number:
|
|
49
|
+
\`\`\`
|
|
50
|
+
[1] Username field (Edit)
|
|
51
|
+
[2] Password field (Edit)
|
|
52
|
+
[3] OK button (Button)
|
|
53
|
+
[4] Cancel button (Button)
|
|
54
|
+
\`\`\`
|
|
55
|
+
|
|
56
|
+
For deeper inspection:
|
|
57
|
+
- \`vm_inspect_ui\` mode \`element_tree\` — full accessibility tree
|
|
58
|
+
- \`vm_inspect_ui\` mode \`element_at_point\` — inspect specific coordinates
|
|
59
|
+
|
|
60
|
+
## Step 3: Interact with Atomic Operations
|
|
61
|
+
|
|
62
|
+
**DO NOT write Python scripts for simple click/type operations.** Use atomic tools:
|
|
63
|
+
|
|
64
|
+
- \`vm_click_element\` {element_id: 3} — click element #3 from annotated screenshot
|
|
65
|
+
- \`vm_type_into_element\` {element_id: 1, text: "admin"} — type into element #1
|
|
66
|
+
- \`vm_set_value\` {element_id: 2, value: "password"} — set value directly
|
|
67
|
+
- \`vm_invoke_element\` {element_id: 3} — invoke button via accessibility pattern
|
|
68
|
+
- \`vm_shell\` {command: "Start-Process notepad"} — run commands
|
|
69
|
+
|
|
70
|
+
After each action, take another \`vm_annotated_screenshot\` to verify it worked.
|
|
71
|
+
|
|
72
|
+
## Step 4: For Web Apps — Use CDP
|
|
73
|
+
|
|
74
|
+
If the target is a browser or Electron app:
|
|
75
|
+
|
|
76
|
+
1. \`cdp_connect\` — connect to Chrome/Edge DevTools
|
|
77
|
+
2. \`cdp_dom\` — get the full DOM tree
|
|
78
|
+
3. \`cdp_query\` {selector: "#username"} — find elements by CSS
|
|
79
|
+
4. \`cdp_click\` {selector: "#login-btn"} — click via DOM
|
|
80
|
+
5. \`cdp_type\` {selector: "#email", text: "user@example.com"} — type via DOM
|
|
81
|
+
6. \`cdp_js\` — execute arbitrary JavaScript
|
|
82
|
+
7. \`cdp_network\` — see API calls the app makes
|
|
83
|
+
|
|
84
|
+
CDP is MORE RELIABLE than screen-based automation for web apps.
|
|
85
|
+
|
|
86
|
+
## Step 5: For Citrix / Legacy Apps — Use OCR + Template Matching
|
|
87
|
+
|
|
88
|
+
When there's no accessibility tree (Citrix, RDP, custom-rendered apps):
|
|
89
|
+
|
|
90
|
+
1. \`vm_ocr\` {x, y, width, height} — read text from a screen region
|
|
91
|
+
2. \`vm_template_match\` {template_b64: "..."} — find a visual element
|
|
92
|
+
3. \`vm_wait_for_text\` {text: "Login", region: {...}} — wait for text to appear
|
|
93
|
+
4. \`vm_wait_for_change\` {region: {...}} — wait for visual change (replaces sleep)
|
|
94
|
+
5. \`vm_region_ocr\` {regions: [...]} — batch OCR multiple fields
|
|
95
|
+
6. Click by coordinates from template match results
|
|
96
|
+
|
|
97
|
+
## Step 6: Build Production Scripts
|
|
98
|
+
|
|
99
|
+
Once you understand the UI and have tested atomic operations, consolidate into Python scripts for production:
|
|
100
|
+
|
|
101
|
+
1. Write a Python script that performs the full sequence
|
|
102
|
+
2. Test with \`debug_rpa_step\` — returns before/after screenshots + timeline
|
|
103
|
+
3. Save with \`create_rpa_flow\` — wraps Python in Laminar workflow format
|
|
104
|
+
|
|
105
|
+
## Step 7: Self-Healing Pattern
|
|
106
|
+
|
|
107
|
+
For robust automations, enable self-healing:
|
|
108
|
+
|
|
109
|
+
1. Execute with \`on_error: "pause"\` — script pauses at failure instead of crashing
|
|
110
|
+
2. \`vm_failure_context\` — get screenshot, UI tree, error details at failure point
|
|
111
|
+
3. \`vm_annotated_screenshot\` — see current screen state
|
|
112
|
+
4. Fix with atomic operations (\`vm_click_element\`, etc.)
|
|
113
|
+
5. Resume execution
|
|
114
|
+
|
|
115
|
+
## Step 8: End-to-End Validation
|
|
116
|
+
|
|
117
|
+
1. \`execute_workflow\` to run the full sequence
|
|
118
|
+
2. \`vm_annotated_screenshot\` to verify final state
|
|
119
|
+
3. \`vm_execution_timeline\` to review frame-by-frame what happened
|
|
120
|
+
4. \`diagnose_execution\` if anything fails
|
|
121
|
+
|
|
122
|
+
## Data Extraction Priority
|
|
123
|
+
|
|
124
|
+
When you need to READ data from the screen:
|
|
125
|
+
|
|
126
|
+
1. **Accessibility tree** — \`vm_inspect_ui\` with \`element_tree\` (most reliable)
|
|
127
|
+
2. **Focused element** — Tab through fields, read via \`vm_inspect_ui\` \`focused_element\`
|
|
128
|
+
3. **Clipboard** — Click field, Ctrl+A, Ctrl+C, then \`vm_read_clipboard\`
|
|
129
|
+
4. **OCR** — \`vm_ocr\` on a specific region
|
|
130
|
+
5. **CDP extraction** — \`cdp_js\` to read DOM values (for web apps)
|
|
131
|
+
6. **Region screenshot** — \`vm_screenshot\` of a specific area (last resort)
|
|
132
|
+
|
|
133
|
+
## Key Rules
|
|
134
|
+
|
|
135
|
+
- **Annotated screenshots FIRST** — always start by seeing the screen with element IDs
|
|
136
|
+
- **Atomic ops for exploration** — use click/type tools to test, scripts for production
|
|
137
|
+
- **Verify after every action** — take another annotated screenshot
|
|
138
|
+
- **Never hardcode coordinates** — use element IDs or accessibility patterns
|
|
139
|
+
- **Use wait_for_text/wait_for_change** — never use time.sleep() for synchronization
|
|
140
|
+
- **Use \`create_rpa_flow\`** to save steps — never construct JS wrappers manually
|
|
141
|
+
- **Use \`{{config.variables}}\`** for secrets — never hardcode credentials
|
|
142
|
+
`,
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=build-nerve-rpa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-nerve-rpa.js","sourceRoot":"","sources":["../../src/prompts/build-nerve-rpa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAY;IAC3C,MAAM,CAAC,MAAM,CACX,0BAA0B,EAC1B,0LAA0L,EAC1L;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACxD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACvD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACnF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACrD,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;;;EAGhB,IAAI;;;EAGJ,OAAO;;;MAGH,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC,CAAC,8CAA8C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuHxH;iBACU;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-rpa.d.ts","sourceRoot":"","sources":["../../src/prompts/build-rpa.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"build-rpa.d.ts","sourceRoot":"","sources":["../../src/prompts/build-rpa.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,QAuR5C"}
|