@minicor/mcp-server 2.0.3 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +125 -124
- package/dist/__tests__/helpers.test.js +3 -3
- package/dist/__tests__/tfa-client.test.d.ts +2 -0
- package/dist/__tests__/tfa-client.test.d.ts.map +1 -0
- package/dist/__tests__/tfa-client.test.js +191 -0
- package/dist/__tests__/tfa-client.test.js.map +1 -0
- package/dist/helpers.d.ts +2 -2
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +7 -4
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/inspect-scripts.d.ts +1 -1
- package/dist/inspect-scripts.js +1 -1
- package/dist/lds-client.d.ts +1 -1
- package/dist/lds-client.js +2 -2
- package/dist/prompts/build-rpa.d.ts.map +1 -1
- package/dist/prompts/build-rpa.js +37 -9
- package/dist/prompts/build-rpa.js.map +1 -1
- package/dist/prompts/tfa-guide.d.ts +3 -0
- package/dist/prompts/tfa-guide.d.ts.map +1 -0
- package/dist/prompts/tfa-guide.js +178 -0
- package/dist/prompts/tfa-guide.js.map +1 -0
- package/dist/tfa-client.d.ts +45 -0
- package/dist/tfa-client.d.ts.map +1 -0
- package/dist/tfa-client.js +116 -0
- package/dist/tfa-client.js.map +1 -0
- package/dist/tools/tfa.d.ts +3 -0
- package/dist/tools/tfa.d.ts.map +1 -0
- package/dist/tools/tfa.js +146 -0
- package/dist/tools/tfa.js.map +1 -0
- package/dist/tools/vm-rpa.js +12 -12
- package/dist/tools/vm-rpa.js.map +1 -1
- package/dist/tools/vm.js +4 -4
- package/dist/tools/workflow-ops.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ok, text } from "../helpers.js";
|
|
3
|
+
import * as tfa from "../tfa-client.js";
|
|
4
|
+
// Workspace API key cache: workspaceId → apiKey
|
|
5
|
+
const apiKeyCache = new Map();
|
|
6
|
+
async function resolveApiKey(deps, workspaceId) {
|
|
7
|
+
const cached = apiKeyCache.get(workspaceId);
|
|
8
|
+
if (cached)
|
|
9
|
+
return cached;
|
|
10
|
+
const keys = await deps.client().listApiKeys(workspaceId);
|
|
11
|
+
const arr = Array.isArray(keys) ? keys : keys?.data ?? [];
|
|
12
|
+
const active = arr.find((k) => k.status !== "revoked") ?? arr[0];
|
|
13
|
+
if (!active?.key) {
|
|
14
|
+
throw new Error(`No API key found for workspace ${workspaceId}. Create one in the Minicor dashboard first.`);
|
|
15
|
+
}
|
|
16
|
+
apiKeyCache.set(workspaceId, active.key);
|
|
17
|
+
return active.key;
|
|
18
|
+
}
|
|
19
|
+
async function tfaSafe(deps, workspaceId, fn) {
|
|
20
|
+
try {
|
|
21
|
+
const apiKey = await resolveApiKey(deps, workspaceId);
|
|
22
|
+
const baseUrl = tfa.getTfaBaseUrl();
|
|
23
|
+
const result = await fn(baseUrl, apiKey);
|
|
24
|
+
if (result === undefined)
|
|
25
|
+
return text("Done.");
|
|
26
|
+
return ok(result);
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
// Clear cache on auth errors so next call re-resolves
|
|
30
|
+
if (e.message?.includes("401") || e.message?.includes("403")) {
|
|
31
|
+
apiKeyCache.delete(workspaceId);
|
|
32
|
+
}
|
|
33
|
+
return text(`Error: ${e.message}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function register(deps) {
|
|
37
|
+
const { server } = deps;
|
|
38
|
+
// ── Channels ──────────────────────────────────────────────
|
|
39
|
+
server.tool("tfa_provision_phone", "Purchase a new Twilio phone number for this workspace. SMS webhook is auto-configured. Use tfa_list_channels to see it afterward.", {
|
|
40
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
41
|
+
}, async ({ workspaceId }) => tfaSafe(deps, workspaceId, (base, key) => tfa.provisionPhone(base, key)));
|
|
42
|
+
server.tool("tfa_provision_email", "Generate a unique Mailgun email address for this workspace. Emails sent to this address are captured automatically for OTP extraction.", {
|
|
43
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
44
|
+
}, async ({ workspaceId }) => tfaSafe(deps, workspaceId, (base, key) => tfa.provisionEmail(base, key)));
|
|
45
|
+
server.tool("tfa_list_channels", "List all phone numbers and email addresses registered for this workspace", {
|
|
46
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
47
|
+
type: z
|
|
48
|
+
.enum(["phone", "email"])
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("Filter by channel type"),
|
|
51
|
+
}, async ({ workspaceId, type }) => tfaSafe(deps, workspaceId, (base, key) => tfa.listChannels(base, key, { type })));
|
|
52
|
+
server.tool("tfa_delete_channel", "Remove a phone or email channel. If it's a Twilio phone number, the number is released.", {
|
|
53
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
54
|
+
channelId: z.string().describe("Channel ID (e.g. ch_abc123)"),
|
|
55
|
+
}, async ({ workspaceId, channelId }) => tfaSafe(deps, workspaceId, (base, key) => tfa.deleteChannel(base, key, channelId)));
|
|
56
|
+
// ── Secrets ───────────────────────────────────────────────
|
|
57
|
+
server.tool("tfa_register_secret", "Store a TOTP authenticator secret for this workspace. Accepts either a raw base32 secret or an otpauth:// URI. The secret is encrypted at rest.", {
|
|
58
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
59
|
+
name: z.string().describe("Label for this secret (e.g. site name)"),
|
|
60
|
+
value: z.string().optional().describe("Raw base32 TOTP secret"),
|
|
61
|
+
uri: z
|
|
62
|
+
.string()
|
|
63
|
+
.optional()
|
|
64
|
+
.describe("otpauth:// URI (alternative to value)"),
|
|
65
|
+
site: z.string().optional().describe("Site this secret is for"),
|
|
66
|
+
}, async ({ workspaceId, name, value, uri, site }) => {
|
|
67
|
+
if (!value && !uri) {
|
|
68
|
+
return text("Error: Either 'value' (base32) or 'uri' (otpauth://) is required.");
|
|
69
|
+
}
|
|
70
|
+
return tfaSafe(deps, workspaceId, (base, key) => tfa.createSecret(base, key, { type: "totp", name, value, uri, site }));
|
|
71
|
+
});
|
|
72
|
+
server.tool("tfa_list_secrets", "List all stored TOTP secrets for this workspace", {
|
|
73
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
74
|
+
site: z.string().optional().describe("Filter by site"),
|
|
75
|
+
}, async ({ workspaceId, site }) => tfaSafe(deps, workspaceId, (base, key) => tfa.listSecrets(base, key, { site })));
|
|
76
|
+
server.tool("tfa_delete_secret", "Remove a stored TOTP secret", {
|
|
77
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
78
|
+
secretId: z.string().describe("Secret ID (e.g. sec_abc123)"),
|
|
79
|
+
}, async ({ workspaceId, secretId }) => tfaSafe(deps, workspaceId, (base, key) => tfa.deleteSecret(base, key, secretId)));
|
|
80
|
+
server.tool("tfa_generate_totp", "Generate the current 6-digit TOTP code for a stored secret. Returns the code and seconds until it expires.", {
|
|
81
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
82
|
+
secretId: z.string().describe("Secret ID (e.g. sec_abc123)"),
|
|
83
|
+
}, async ({ workspaceId, secretId }) => tfaSafe(deps, workspaceId, (base, key) => tfa.generateTotp(base, key, secretId)));
|
|
84
|
+
server.tool("tfa_verify_totp", "Verify a TOTP code against a stored secret. Returns whether the code is valid and the time delta.", {
|
|
85
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
86
|
+
secretId: z.string().describe("Secret ID (e.g. sec_abc123)"),
|
|
87
|
+
code: z.string().describe("6-digit TOTP code to verify"),
|
|
88
|
+
}, async ({ workspaceId, secretId, code }) => tfaSafe(deps, workspaceId, (base, key) => tfa.verifyTotp(base, key, secretId, code)));
|
|
89
|
+
server.tool("tfa_parse_qr", "Parse a QR code image (base64 or URL) to extract TOTP parameters like secret, issuer, algorithm. Useful for automated 2FA enrollment.", {
|
|
90
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
91
|
+
image: z
|
|
92
|
+
.string()
|
|
93
|
+
.optional()
|
|
94
|
+
.describe("Base64-encoded QR code image"),
|
|
95
|
+
imageUrl: z
|
|
96
|
+
.string()
|
|
97
|
+
.optional()
|
|
98
|
+
.describe("URL of the QR code image"),
|
|
99
|
+
}, async ({ workspaceId, image, imageUrl }) => {
|
|
100
|
+
if (!image && !imageUrl) {
|
|
101
|
+
return text("Error: Either 'image' (base64) or 'imageUrl' is required.");
|
|
102
|
+
}
|
|
103
|
+
return tfaSafe(deps, workspaceId, (base, key) => tfa.parseQr(base, key, { image, imageUrl }));
|
|
104
|
+
});
|
|
105
|
+
// ── Challenges ────────────────────────────────────────────
|
|
106
|
+
server.tool("tfa_request_sms_otp", "Wait for an SMS OTP code. Creates a challenge and blocks until the SMS arrives via Twilio or the timeout expires. Returns the OTP code.", {
|
|
107
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
108
|
+
channelId: z
|
|
109
|
+
.string()
|
|
110
|
+
.describe("Phone channel ID. Use tfa_list_channels to find it."),
|
|
111
|
+
timeoutSeconds: z
|
|
112
|
+
.number()
|
|
113
|
+
.optional()
|
|
114
|
+
.default(120)
|
|
115
|
+
.describe("Max seconds to wait (default 120)"),
|
|
116
|
+
}, async ({ workspaceId, channelId, timeoutSeconds }) => tfaSafe(deps, workspaceId, (base, key) => tfa.requestSmsOtp(base, key, { channelId, timeoutSeconds })));
|
|
117
|
+
server.tool("tfa_request_email_otp", "Wait for an email OTP code. Creates a challenge and blocks until the email arrives via Mailgun or the timeout expires. Returns the OTP code.", {
|
|
118
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
119
|
+
channelId: z
|
|
120
|
+
.string()
|
|
121
|
+
.describe("Email channel ID. Use tfa_list_channels to find it."),
|
|
122
|
+
timeoutSeconds: z
|
|
123
|
+
.number()
|
|
124
|
+
.optional()
|
|
125
|
+
.default(120)
|
|
126
|
+
.describe("Max seconds to wait (default 120)"),
|
|
127
|
+
}, async ({ workspaceId, channelId, timeoutSeconds }) => tfaSafe(deps, workspaceId, (base, key) => tfa.requestEmailOtp(base, key, { channelId, timeoutSeconds })));
|
|
128
|
+
server.tool("tfa_get_challenge", "Check the status of a pending 2FA challenge", {
|
|
129
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
130
|
+
challengeId: z.string().describe("Challenge ID"),
|
|
131
|
+
}, async ({ workspaceId, challengeId }) => tfaSafe(deps, workspaceId, (base, key) => tfa.getChallenge(base, key, challengeId)));
|
|
132
|
+
server.tool("tfa_resolve_challenge", "Manually resolve a 2FA challenge with a value. Use this for captcha solutions or when auto-parsing failed and a human provided the code via Slack.", {
|
|
133
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
134
|
+
challengeId: z.string().describe("Challenge ID"),
|
|
135
|
+
value: z.string().describe("The OTP code or captcha solution"),
|
|
136
|
+
resolvedBy: z
|
|
137
|
+
.string()
|
|
138
|
+
.optional()
|
|
139
|
+
.describe("Who resolved it (default: 'manual')"),
|
|
140
|
+
}, async ({ workspaceId, challengeId, value, resolvedBy }) => tfaSafe(deps, workspaceId, (base, key) => tfa.resolveChallenge(base, key, challengeId, { value, resolvedBy })));
|
|
141
|
+
server.tool("tfa_cancel_challenge", "Cancel a pending 2FA challenge", {
|
|
142
|
+
workspaceId: z.number().describe("Workspace ID"),
|
|
143
|
+
challengeId: z.string().describe("Challenge ID"),
|
|
144
|
+
}, async ({ workspaceId, challengeId }) => tfaSafe(deps, workspaceId, (base, key) => tfa.cancelChallenge(base, key, challengeId)));
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=tfa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tfa.js","sourceRoot":"","sources":["../../src/tools/tfa.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/vm-rpa.js
CHANGED
|
@@ -20,9 +20,9 @@ export function register(deps) {
|
|
|
20
20
|
.string()
|
|
21
21
|
.describe("Flow ID used inside the RPA payload for tracking"),
|
|
22
22
|
dispatchPattern: z
|
|
23
|
-
.enum(["cloudflare_tunnel", "channel"])
|
|
23
|
+
.enum(["cloudflare_tunnel", "channel", "browser"])
|
|
24
24
|
.default("cloudflare_tunnel")
|
|
25
|
-
.describe("How the script is dispatched to the VM"),
|
|
25
|
+
.describe("How the script is dispatched to the VM. Use 'browser' for pure CDP browser automations (parallel-safe, each gets its own Chrome instance). Use 'cloudflare_tunnel' for desktop automations or mixed browser+desktop scripts that need screen interaction (e.g. OS dialogs, file pickers)."),
|
|
26
26
|
}, async ({ workflowId, name, description, pythonScript, executionOrder, flowId, dispatchPattern, }) => {
|
|
27
27
|
const program = buildRpaProgram(pythonScript, dispatchPattern, flowId, name, description);
|
|
28
28
|
return safe(() => deps.client().createFlow({
|
|
@@ -268,8 +268,8 @@ if not found:
|
|
|
268
268
|
}
|
|
269
269
|
});
|
|
270
270
|
// ── Setup guide ───────────────────────────────────────────
|
|
271
|
-
server.tool("get_lds_setup_guide", "Get the step-by-step guide for installing the
|
|
272
|
-
return text(`#
|
|
271
|
+
server.tool("get_lds_setup_guide", "Get the step-by-step guide for installing the Minicor Desktop Service (MDS) on a Windows VM and connecting it via Cloudflare Tunnel.", {}, async () => {
|
|
272
|
+
return text(`# Minicor Desktop Service (MDS) — Setup Guide
|
|
273
273
|
|
|
274
274
|
## Prerequisites
|
|
275
275
|
- Windows 10/11 or Windows Server VM
|
|
@@ -280,17 +280,17 @@ if not found:
|
|
|
280
280
|
Copy \`vm_setup.bat\` to the VM and run **as Administrator**.
|
|
281
281
|
This installs Git, Python 3.11, and VS Code via Chocolatey.
|
|
282
282
|
|
|
283
|
-
## Step 2: Clone and configure
|
|
283
|
+
## Step 2: Clone and configure MDS
|
|
284
284
|
Open **Git Bash** and run:
|
|
285
285
|
\`\`\`bash
|
|
286
|
-
git clone <your-
|
|
287
|
-
cd
|
|
286
|
+
git clone <your-mds-repo-url>
|
|
287
|
+
cd minicor-desktop-service
|
|
288
288
|
cp .env.example .env
|
|
289
289
|
\`\`\`
|
|
290
290
|
|
|
291
291
|
Edit \`.env\` with your workspace values:
|
|
292
|
-
- \`
|
|
293
|
-
- \`
|
|
292
|
+
- \`MINICOR_DESKTOP_SERVICE_API_KEY\` — from your Minicor workspace
|
|
293
|
+
- \`MINICOR_DESKTOP_SERVICE_ID\` — from your Minicor workspace
|
|
294
294
|
- \`PORT=1016\` (default)
|
|
295
295
|
- \`SCRIPT_VM_NAME\` — a name for this VM
|
|
296
296
|
|
|
@@ -300,7 +300,7 @@ Edit \`.env\` with your workspace values:
|
|
|
300
300
|
./setup.sh # sets up the script execution venv
|
|
301
301
|
\`\`\`
|
|
302
302
|
|
|
303
|
-
## Step 4: Start the
|
|
303
|
+
## Step 4: Start the MDS server
|
|
304
304
|
\`\`\`
|
|
305
305
|
2-start-app.bat
|
|
306
306
|
\`\`\`
|
|
@@ -329,9 +329,9 @@ Call the \`vm_connect\` tool with the tunnel URL:
|
|
|
329
329
|
You can now use \`vm_screenshot\`, \`vm_execute_script\`, \`vm_inspect_ui\`, and all other VM tools.
|
|
330
330
|
|
|
331
331
|
## Troubleshooting
|
|
332
|
-
- **
|
|
332
|
+
- **MDS won't start**: Check Python is on PATH, check .env values, check port 1016 is free
|
|
333
333
|
- **Tunnel fails**: Ensure cloudflared is installed and port 1016 is accessible locally
|
|
334
|
-
- **vm_connect fails**: Verify the tunnel URL is correct and
|
|
334
|
+
- **vm_connect fails**: Verify the tunnel URL is correct and MDS is running (\`/health\` endpoint)
|
|
335
335
|
`);
|
|
336
336
|
});
|
|
337
337
|
}
|
package/dist/tools/vm-rpa.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vm-rpa.js","sourceRoot":"","sources":["../../src/tools/vm-rpa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,EAAE,EACF,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAGxC,SAAS,SAAS;IAChB,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAc;IACrC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAExB,6DAA6D;IAE7D,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,uPAAuP,EACvP;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACnE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAClE,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,CAAC,kDAAkD,CAAC;QAC/D,eAAe,EAAE,CAAC;aACf,IAAI,CAAC,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"vm-rpa.js","sourceRoot":"","sources":["../../src/tools/vm-rpa.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/vm.js
CHANGED
|
@@ -11,10 +11,10 @@ function requireVM() {
|
|
|
11
11
|
export function register(deps) {
|
|
12
12
|
const { server } = deps;
|
|
13
13
|
// ── Connection management ─────────────────────────────────
|
|
14
|
-
server.tool("vm_connect", "Connect to a VM via
|
|
15
|
-
url: z.string().describe("
|
|
16
|
-
apiKey: z.string().optional().describe("
|
|
17
|
-
serviceId: z.string().optional().describe("
|
|
14
|
+
server.tool("vm_connect", "Connect to a VM via Minicor Desktop Service (Cloudflare Tunnel URL). Must be called before any other vm_* tool. Returns connection info and guidance on available automation approaches (CDP for browsers, uiautomation for desktop, requests for APIs).", {
|
|
15
|
+
url: z.string().describe("MDS base URL (Cloudflare Tunnel)"),
|
|
16
|
+
apiKey: z.string().optional().describe("MDS API key"),
|
|
17
|
+
serviceId: z.string().optional().describe("MDS service ID"),
|
|
18
18
|
}, async ({ url, apiKey, serviceId }) => {
|
|
19
19
|
try {
|
|
20
20
|
const health = await lds.health(url);
|
|
@@ -258,7 +258,7 @@ export function register(deps) {
|
|
|
258
258
|
errorStr.includes("ECONNREFUSED")) {
|
|
259
259
|
rpaAnalysis = {
|
|
260
260
|
pattern: "lds_connection_failed",
|
|
261
|
-
suggestion: "Could not reach the
|
|
261
|
+
suggestion: "Could not reach the Minicor Desktop Service. Check that the Cloudflare Tunnel is still active and the MDS process is running on the VM. Try vm_status to verify connectivity.",
|
|
262
262
|
};
|
|
263
263
|
}
|
|
264
264
|
else if (errorStr.includes("resolution") ||
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minicor/mcp-server",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5",
|
|
4
4
|
"description": "Desktop and browser RPA automation, workflow management, and AI-powered debugging for the Minicor platform. Formerly Laminar.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|