@minicor/mcp-server 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +169 -0
  2. package/dist/__tests__/diff.test.d.ts +2 -0
  3. package/dist/__tests__/diff.test.d.ts.map +1 -0
  4. package/dist/__tests__/diff.test.js +23 -0
  5. package/dist/__tests__/diff.test.js.map +1 -0
  6. package/dist/__tests__/helpers.test.d.ts +2 -0
  7. package/dist/__tests__/helpers.test.d.ts.map +1 -0
  8. package/dist/__tests__/helpers.test.js +70 -0
  9. package/dist/__tests__/helpers.test.js.map +1 -0
  10. package/dist/__tests__/inspect-scripts.test.d.ts +2 -0
  11. package/dist/__tests__/inspect-scripts.test.d.ts.map +1 -0
  12. package/dist/__tests__/inspect-scripts.test.js +66 -0
  13. package/dist/__tests__/inspect-scripts.test.js.map +1 -0
  14. package/dist/browser-client.d.ts +42 -0
  15. package/dist/browser-client.d.ts.map +1 -0
  16. package/dist/browser-client.js +66 -0
  17. package/dist/browser-client.js.map +1 -0
  18. package/dist/cli.d.ts +14 -0
  19. package/dist/cli.d.ts.map +1 -0
  20. package/dist/cli.js +256 -0
  21. package/dist/cli.js.map +1 -0
  22. package/dist/config.d.ts +21 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +57 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/diff.d.ts +7 -0
  27. package/dist/diff.d.ts.map +1 -0
  28. package/dist/diff.js +97 -0
  29. package/dist/diff.js.map +1 -0
  30. package/dist/helpers.d.ts +28 -0
  31. package/dist/helpers.d.ts.map +1 -0
  32. package/dist/helpers.js +91 -0
  33. package/dist/helpers.js.map +1 -0
  34. package/dist/index.d.ts +9 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +193 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/inspect-scripts.d.ts +18 -0
  39. package/dist/inspect-scripts.d.ts.map +1 -0
  40. package/dist/inspect-scripts.js +572 -0
  41. package/dist/inspect-scripts.js.map +1 -0
  42. package/dist/laminar-client.d.ts +160 -0
  43. package/dist/laminar-client.d.ts.map +1 -0
  44. package/dist/laminar-client.js +237 -0
  45. package/dist/laminar-client.js.map +1 -0
  46. package/dist/lds-client.d.ts +107 -0
  47. package/dist/lds-client.d.ts.map +1 -0
  48. package/dist/lds-client.js +81 -0
  49. package/dist/lds-client.js.map +1 -0
  50. package/dist/paths.d.ts +17 -0
  51. package/dist/paths.d.ts.map +1 -0
  52. package/dist/paths.js +46 -0
  53. package/dist/paths.js.map +1 -0
  54. package/dist/prompts/build-browser-rpa.d.ts +3 -0
  55. package/dist/prompts/build-browser-rpa.d.ts.map +1 -0
  56. package/dist/prompts/build-browser-rpa.js +90 -0
  57. package/dist/prompts/build-browser-rpa.js.map +1 -0
  58. package/dist/prompts/build-rpa.d.ts +3 -0
  59. package/dist/prompts/build-rpa.d.ts.map +1 -0
  60. package/dist/prompts/build-rpa.js +168 -0
  61. package/dist/prompts/build-rpa.js.map +1 -0
  62. package/dist/prompts/debug-execution.d.ts +3 -0
  63. package/dist/prompts/debug-execution.d.ts.map +1 -0
  64. package/dist/prompts/debug-execution.js +50 -0
  65. package/dist/prompts/debug-execution.js.map +1 -0
  66. package/dist/prompts/workflow-guide.d.ts +3 -0
  67. package/dist/prompts/workflow-guide.d.ts.map +1 -0
  68. package/dist/prompts/workflow-guide.js +175 -0
  69. package/dist/prompts/workflow-guide.js.map +1 -0
  70. package/dist/services.d.ts +61 -0
  71. package/dist/services.d.ts.map +1 -0
  72. package/dist/services.js +249 -0
  73. package/dist/services.js.map +1 -0
  74. package/dist/setup.d.ts +11 -0
  75. package/dist/setup.d.ts.map +1 -0
  76. package/dist/setup.js +790 -0
  77. package/dist/setup.js.map +1 -0
  78. package/dist/state.d.ts +23 -0
  79. package/dist/state.d.ts.map +1 -0
  80. package/dist/state.js +24 -0
  81. package/dist/state.js.map +1 -0
  82. package/dist/sync.d.ts +86 -0
  83. package/dist/sync.d.ts.map +1 -0
  84. package/dist/sync.js +394 -0
  85. package/dist/sync.js.map +1 -0
  86. package/dist/tools/browser.d.ts +3 -0
  87. package/dist/tools/browser.d.ts.map +1 -0
  88. package/dist/tools/browser.js +254 -0
  89. package/dist/tools/browser.js.map +1 -0
  90. package/dist/tools/config-stores.d.ts +3 -0
  91. package/dist/tools/config-stores.d.ts.map +1 -0
  92. package/dist/tools/config-stores.js +54 -0
  93. package/dist/tools/config-stores.js.map +1 -0
  94. package/dist/tools/core.d.ts +3 -0
  95. package/dist/tools/core.d.ts.map +1 -0
  96. package/dist/tools/core.js +202 -0
  97. package/dist/tools/core.js.map +1 -0
  98. package/dist/tools/cron.d.ts +3 -0
  99. package/dist/tools/cron.d.ts.map +1 -0
  100. package/dist/tools/cron.js +168 -0
  101. package/dist/tools/cron.js.map +1 -0
  102. package/dist/tools/elasticsearch.d.ts +3 -0
  103. package/dist/tools/elasticsearch.d.ts.map +1 -0
  104. package/dist/tools/elasticsearch.js +248 -0
  105. package/dist/tools/elasticsearch.js.map +1 -0
  106. package/dist/tools/issues.d.ts +3 -0
  107. package/dist/tools/issues.d.ts.map +1 -0
  108. package/dist/tools/issues.js +39 -0
  109. package/dist/tools/issues.js.map +1 -0
  110. package/dist/tools/stats.d.ts +3 -0
  111. package/dist/tools/stats.d.ts.map +1 -0
  112. package/dist/tools/stats.js +18 -0
  113. package/dist/tools/stats.js.map +1 -0
  114. package/dist/tools/sync-tools.d.ts +3 -0
  115. package/dist/tools/sync-tools.d.ts.map +1 -0
  116. package/dist/tools/sync-tools.js +121 -0
  117. package/dist/tools/sync-tools.js.map +1 -0
  118. package/dist/tools/vm-rpa.d.ts +3 -0
  119. package/dist/tools/vm-rpa.d.ts.map +1 -0
  120. package/dist/tools/vm-rpa.js +281 -0
  121. package/dist/tools/vm-rpa.js.map +1 -0
  122. package/dist/tools/vm.d.ts +3 -0
  123. package/dist/tools/vm.d.ts.map +1 -0
  124. package/dist/tools/vm.js +280 -0
  125. package/dist/tools/vm.js.map +1 -0
  126. package/dist/tools/workflow-ops.d.ts +3 -0
  127. package/dist/tools/workflow-ops.d.ts.map +1 -0
  128. package/dist/tools/workflow-ops.js +313 -0
  129. package/dist/tools/workflow-ops.js.map +1 -0
  130. package/dist/types.d.ts +14 -0
  131. package/dist/types.d.ts.map +1 -0
  132. package/dist/types.js +5 -0
  133. package/dist/types.js.map +1 -0
  134. package/package.json +58 -0
package/dist/index.js ADDED
@@ -0,0 +1,193 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Minicor MCP Server (formerly Laminar)
4
+ *
5
+ * Brings your Minicor workspace into Cursor / Claude Code.
6
+ * Core tools always available; Elasticsearch + CRON unlock with advanced setup.
7
+ */
8
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
+ import fs from "node:fs";
11
+ import path from "node:path";
12
+ import { loadServiceConfig } from "./config.js";
13
+ import { LaminarClient } from "./laminar-client.js";
14
+ import { getTokenPath, getWriteTokenPath, regionToApiBase, apiBaseToRegion, } from "./paths.js";
15
+ import { CronService, ElasticsearchService } from "./services.js";
16
+ import { register as registerCore } from "./tools/core.js";
17
+ import { register as registerWorkflowOps } from "./tools/workflow-ops.js";
18
+ 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
+ import { register as registerSyncTools } from "./tools/sync-tools.js";
24
+ import { register as registerVm } from "./tools/vm.js";
25
+ import { register as registerVmRpa } from "./tools/vm-rpa.js";
26
+ import { register as registerBrowser } from "./tools/browser.js";
27
+ import { register as registerWorkflowGuide } from "./prompts/workflow-guide.js";
28
+ import { register as registerDebugExecution } from "./prompts/debug-execution.js";
29
+ import { register as registerBuildRpa } from "./prompts/build-rpa.js";
30
+ import { register as registerBuildBrowserRpa } from "./prompts/build-browser-rpa.js";
31
+ // ─── Token management ────────────────────────────────────────
32
+ const REFRESH_BUFFER_MS = 5 * 60 * 1000;
33
+ function readStoredTokens() {
34
+ try {
35
+ const tokenPath = getTokenPath();
36
+ if (!fs.existsSync(tokenPath))
37
+ return null;
38
+ return JSON.parse(fs.readFileSync(tokenPath, "utf-8"));
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ }
44
+ function writeStoredTokens(tokens) {
45
+ const writePath = getWriteTokenPath();
46
+ const dir = path.dirname(writePath);
47
+ if (!fs.existsSync(dir))
48
+ fs.mkdirSync(dir, { recursive: true });
49
+ fs.writeFileSync(writePath, JSON.stringify(tokens, null, 2) + "\n", {
50
+ mode: 0o600,
51
+ });
52
+ }
53
+ export function getApiBase() {
54
+ const stored = readStoredTokens();
55
+ if (stored?.region)
56
+ return regionToApiBase(stored.region);
57
+ if (stored?.api_base)
58
+ return stored.api_base;
59
+ return regionToApiBase("us");
60
+ }
61
+ async function refreshAccessToken(refreshToken) {
62
+ const base = getApiBase();
63
+ try {
64
+ const res = await fetch(`${base}/auth/refresh`, {
65
+ method: "POST",
66
+ headers: { "Content-Type": "application/json" },
67
+ body: JSON.stringify({ refreshToken }),
68
+ });
69
+ if (!res.ok)
70
+ return null;
71
+ const data = (await res.json());
72
+ return {
73
+ access_token: data.access_token,
74
+ refresh_token: data.refresh_token || refreshToken,
75
+ expires_at: Date.now() + data.expires_in * 1000,
76
+ api_base: base,
77
+ region: apiBaseToRegion(base),
78
+ };
79
+ }
80
+ catch {
81
+ return null;
82
+ }
83
+ }
84
+ async function getValidToken() {
85
+ const tokens = readStoredTokens();
86
+ if (!tokens)
87
+ throw new Error("No stored tokens");
88
+ if (Date.now() < tokens.expires_at - REFRESH_BUFFER_MS) {
89
+ return tokens.access_token;
90
+ }
91
+ if (tokens.refresh_token) {
92
+ console.error("Refreshing access token...");
93
+ const refreshed = await refreshAccessToken(tokens.refresh_token);
94
+ if (refreshed) {
95
+ writeStoredTokens(refreshed);
96
+ console.error("Token refreshed.");
97
+ return refreshed.access_token;
98
+ }
99
+ }
100
+ console.error("Warning: Token expired and refresh failed. Run `minicor-mcp-setup` to re-authenticate.");
101
+ return tokens.access_token;
102
+ }
103
+ // ─── Resolve auth ────────────────────────────────────────────
104
+ async function resolveAuth() {
105
+ const baseUrl = getApiBase();
106
+ const stored = readStoredTokens();
107
+ if (stored) {
108
+ const token = await getValidToken();
109
+ return { auth: { type: "bearer", token }, baseUrl };
110
+ }
111
+ console.error("Not authenticated. Run `minicor-mcp-setup` to sign in or create an account.");
112
+ process.exit(1);
113
+ }
114
+ // ─── Server state ────────────────────────────────────────────
115
+ let client;
116
+ let esService = null;
117
+ let cronService = null;
118
+ const server = new McpServer({
119
+ name: "minicor",
120
+ version: "2.0.0",
121
+ });
122
+ function scheduleTokenRefresh() {
123
+ const tokens = readStoredTokens();
124
+ if (!tokens?.refresh_token)
125
+ return;
126
+ const msUntilRefresh = Math.max(tokens.expires_at - REFRESH_BUFFER_MS - Date.now(), 60_000);
127
+ setTimeout(async () => {
128
+ try {
129
+ const token = await getValidToken();
130
+ client = new LaminarClient({ type: "bearer", token }, getApiBase());
131
+ console.error("Token auto-refreshed, client updated.");
132
+ }
133
+ catch (e) {
134
+ console.error("Auto-refresh failed:", e.message);
135
+ }
136
+ scheduleTokenRefresh();
137
+ }, msUntilRefresh);
138
+ }
139
+ // ─── Register all tools and prompts ──────────────────────────
140
+ function registerAll() {
141
+ const deps = {
142
+ server,
143
+ client: () => client,
144
+ getApiBase,
145
+ esService: () => esService,
146
+ cronService: () => cronService,
147
+ };
148
+ registerCore(deps);
149
+ registerWorkflowOps(deps);
150
+ registerConfigStores(deps);
151
+ registerIssues(deps);
152
+ registerStats(deps);
153
+ registerElasticsearch(deps);
154
+ registerCron(deps);
155
+ registerSyncTools(deps);
156
+ registerVm(deps);
157
+ registerVmRpa(deps);
158
+ registerBrowser(deps);
159
+ registerWorkflowGuide(deps);
160
+ registerDebugExecution(deps);
161
+ registerBuildRpa(deps);
162
+ registerBuildBrowserRpa(deps);
163
+ }
164
+ // ─── Main ────────────────────────────────────────────────────
165
+ async function main() {
166
+ const { auth, baseUrl } = await resolveAuth();
167
+ client = new LaminarClient(auth, baseUrl);
168
+ scheduleTokenRefresh();
169
+ const svcConfig = loadServiceConfig();
170
+ if (svcConfig.elasticsearch) {
171
+ esService = new ElasticsearchService(svcConfig.elasticsearch);
172
+ console.error("Elasticsearch: configured");
173
+ }
174
+ else {
175
+ console.error("Elasticsearch: not configured (log search disabled)");
176
+ }
177
+ if (svcConfig.cron) {
178
+ cronService = new CronService(svcConfig.cron);
179
+ console.error("CRON service: configured");
180
+ }
181
+ else {
182
+ console.error("CRON service: not configured (scheduling disabled)");
183
+ }
184
+ registerAll();
185
+ const transport = new StdioServerTransport();
186
+ await server.connect(transport);
187
+ console.error("Minicor MCP server running on stdio");
188
+ }
189
+ main().catch((err) => {
190
+ console.error("Fatal error:", err);
191
+ process.exit(1);
192
+ });
193
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Python script generators for VM UI inspection.
3
+ *
4
+ * Each function returns a Python script string that, when executed on the VM
5
+ * via LDS /execute, prints structured JSON to stdout for the agent to parse.
6
+ */
7
+ export type InspectMode = "window_list" | "screen_info" | "element_at_point" | "element_tree" | "focused_element";
8
+ export type InspectFramework = "auto" | "uiautomation" | "pywinauto" | "jab";
9
+ export interface InspectParams {
10
+ mode: InspectMode;
11
+ x?: number;
12
+ y?: number;
13
+ windowTitle?: string;
14
+ framework?: InspectFramework;
15
+ depth?: number;
16
+ }
17
+ export declare function generateInspectScript(params: InspectParams): string;
18
+ //# sourceMappingURL=inspect-scripts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-scripts.d.ts","sourceRoot":"","sources":["../src/inspect-scripts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,aAAa,GACb,kBAAkB,GAClB,cAAc,GACd,iBAAiB,CAAC;AAEtB,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,KAAK,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAWnE"}