@vulcan-energy/mcp-helper 0.1.2 → 0.1.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.
Files changed (48) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +230 -77
  3. package/THIRD_PARTY_NOTICES.md +158 -0
  4. package/dist/bin/vulcan-mcp-helper.js +7 -2
  5. package/dist/bin/vulcan-mcp-helper.js.map +1 -1
  6. package/dist/src/engine/licenseKeys.d.ts +2 -0
  7. package/dist/src/engine/licenseKeys.d.ts.map +1 -0
  8. package/dist/src/engine/licenseKeys.js +9 -0
  9. package/dist/src/engine/licenseKeys.js.map +1 -0
  10. package/dist/src/engine/wasm.d.ts.map +1 -1
  11. package/dist/src/engine/wasm.js +16 -14
  12. package/dist/src/engine/wasm.js.map +1 -1
  13. package/dist/src/engine/workspace.d.ts +1 -1
  14. package/dist/src/engine/workspace.d.ts.map +1 -1
  15. package/dist/src/engine/workspace.js +60 -4
  16. package/dist/src/engine/workspace.js.map +1 -1
  17. package/dist/src/server.d.ts.map +1 -1
  18. package/dist/src/server.js +11 -5
  19. package/dist/src/server.js.map +1 -1
  20. package/dist/src/tools/calculateMetrics.d.ts.map +1 -1
  21. package/dist/src/tools/calculateMetrics.js +46 -12
  22. package/dist/src/tools/calculateMetrics.js.map +1 -1
  23. package/dist/src/tools/getBatchStatus.d.ts.map +1 -1
  24. package/dist/src/tools/getBatchStatus.js +4 -1
  25. package/dist/src/tools/getBatchStatus.js.map +1 -1
  26. package/dist/src/tools/index.d.ts +6 -0
  27. package/dist/src/tools/index.d.ts.map +1 -1
  28. package/dist/src/tools/index.js +37 -0
  29. package/dist/src/tools/index.js.map +1 -1
  30. package/dist/src/tools/mergeCsvToJson.d.ts +27 -0
  31. package/dist/src/tools/mergeCsvToJson.d.ts.map +1 -0
  32. package/dist/src/tools/mergeCsvToJson.js +154 -0
  33. package/dist/src/tools/mergeCsvToJson.js.map +1 -0
  34. package/dist/src/utils/batchConfig.d.ts.map +1 -1
  35. package/dist/src/utils/batchConfig.js +13 -8
  36. package/dist/src/utils/batchConfig.js.map +1 -1
  37. package/dist/src/utils/fileLoader.d.ts +19 -1
  38. package/dist/src/utils/fileLoader.d.ts.map +1 -1
  39. package/dist/src/utils/fileLoader.js +75 -2
  40. package/dist/src/utils/fileLoader.js.map +1 -1
  41. package/dist/src/utils/tls.d.ts +7 -0
  42. package/dist/src/utils/tls.d.ts.map +1 -0
  43. package/dist/src/utils/tls.js +183 -0
  44. package/dist/src/utils/tls.js.map +1 -0
  45. package/package.json +8 -3
  46. package/wasm/wasm_version.json +4 -4
  47. package/wasm/wasm_wrapper.js +13 -5
  48. package/wasm/wasm_wrapper_bg.wasm +0 -0
package/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ PROPRIETARY SOFTWARE LICENSE
2
+
3
+ Copyright (c) 2025 Home Energy Foundry Limited
4
+
5
+ This software and associated documentation files (the "Software") are the
6
+ proprietary and confidential information of Home Energy Foundry Limited. The Software
7
+ is licensed, not sold.
8
+
9
+ All rights reserved. No part of this Software may be reproduced, distributed,
10
+ or transmitted in any form or by any means, including photocopying, recording,
11
+ or other electronic or mechanical methods, without the prior written permission
12
+ of Home Energy Foundry Limited.
13
+
14
+ This Software is provided "AS IS" without warranty of any kind, either express
15
+ or implied, including but not limited to the implied warranties of
16
+ merchantability and fitness for a particular purpose.
17
+
18
+ For licensing inquiries, contact: info@usevulcan.app
19
+
20
+
package/README.md CHANGED
@@ -1,154 +1,307 @@
1
- # Vulcan MCP Server
1
+ # Vulcan MCP Helper
2
2
 
3
3
  A Model Context Protocol (MCP) server that exposes Vulcan's core functionality for integration with Cursor and other MCP clients.
4
4
 
5
- ## Overview
6
-
7
- This MCP server provides access to Vulcan's parameter management, batch configuration, and simulation capabilities via stdio **or** Streamable HTTP (JSON-RPC over HTTP).
8
-
9
5
  ## Prerequisites
10
6
 
11
- - Node.js (v18 or later)
7
+ - **Node.js v18 or later** (must be installed separately - not included)
12
8
  - A Vulcan workspace with FSA (File System Access) mode enabled
13
9
  - A valid `vulcan-mcp-config.json` file (generated from Vulcan → Integrations → MCP)
14
10
 
15
11
  ## Installation
16
12
 
17
- ### Local Development
13
+ Install globally using npm:
18
14
 
19
15
  ```bash
20
- cd vulcan-mcp-server
21
- npm install
16
+ npm install -g @vulcan-energy/mcp-helper
22
17
  ```
23
18
 
24
- ### Production Distribution
25
-
26
- The server will be distributed via Vulcan website (behind authentication) for end users.
27
-
28
19
  ## Configuration
29
20
 
30
- The server requires a config file at `{workspace}/vulcan-mcp-config.json`:
21
+ ### Step 1: Download Config File
22
+
23
+ 1. Open Vulcan web app
24
+ 2. Log in to your account
25
+ 3. Select a workspace in FSA (Folder) mode
26
+ 4. Go to **Integrations → MCP**
27
+ 5. Click **"Generate Config"**
31
28
 
29
+ This creates `vulcan-mcp-config.json` in your workspace root with:
32
30
  ```json
33
31
  {
34
- "workspace": "/absolute/path/to/workspace",
35
- "user_id": "supabase-user-id"
32
+ "workspace": ".",
33
+ "license_token": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9..."
36
34
  }
37
35
  ```
38
36
 
39
- Generate this file from Vulcan Integrations MCP after:
40
- 1. Logging into Vulcan
41
- 2. Selecting a workspace in FSA (Folder) mode
37
+ The `license_token` is valid for ~30 days. The helper verifies it locally on startup. If expired or invalid, you'll get an error message instructing you to refresh it in Vulcan.
42
38
 
43
- ## Usage
39
+ ### Step 2: Start the Server
44
40
 
45
- ### Command Line
46
-
47
- #### Stdio mode (original)
41
+ From your workspace directory:
48
42
 
49
43
  ```bash
50
- node index.js --config /path/to/vulcan-mcp-config.json
44
+ vulcan-mcp-helper
51
45
  ```
52
46
 
53
- #### HTTP mode (recommended for Cursor)
47
+ Or specify config and port:
54
48
 
55
- **Using npm (easiest):**
56
49
  ```bash
57
- cd vulcan-mcp-server
58
- npm start
50
+ vulcan-mcp-helper --config /path/to/vulcan-mcp-config.json --port 5000
59
51
  ```
60
52
 
61
- **Or manually:**
62
- ```bash
63
- # default port 4000 (override with --http-port or MCP_HTTP_PORT)
64
- node index.js --http-port 4000 --config ../vulcan-mcp-config.json
53
+ **CLI Options:**
54
+ - `--config <path>` - Path to config file (default: `./vulcan-mcp-config.json`)
55
+ - `--port <port>` - Port to listen on (default: `5000`, or `HELPER_PORT` env var)
56
+ - `--help, -h` - Show help message
57
+
58
+ **Expected Output:**
59
+ ```
60
+ [MCP Helper] Config loaded from: /path/to/vulcan-mcp-config.json
61
+ [MCP Helper] Workspace: /path/to/workspace
62
+ [MCP Helper] WASM initialized
63
+ [MCP Helper] Server running on http://127.0.0.1:5000
64
+ [MCP Helper] MCP endpoint: http://127.0.0.1:5000/mcp
65
65
  ```
66
66
 
67
- ### Cursor Configuration
67
+ ### Step 3: Configure Cursor
68
68
 
69
- #### HTTP transport (recommended)
69
+ Add to your Cursor MCP configuration (`~/.cursor/mcp.json` or Cursor settings):
70
70
 
71
71
  ```json
72
72
  {
73
73
  "mcpServers": {
74
74
  "vulcan": {
75
- "url": "http://127.0.0.1:4000/mcp"
75
+ "url": "http://127.0.0.1:5000/mcp"
76
76
  }
77
77
  }
78
78
  }
79
79
  ```
80
80
 
81
- #### Stdio transport (legacy)
81
+ Restart Cursor to connect.
82
82
 
83
+ ## Available Tools
84
+
85
+ The MCP helper provides 10 tools for managing parameters, batch configurations, and simulations. Tools are called via MCP protocol (automatically in Cursor) or via HTTP POST to `/mcp`.
86
+
87
+ ### 1. `vulcan_list_parameters`
88
+
89
+ List available parameter categories and their parameter IDs.
90
+
91
+ **Parameters:**
92
+ - `category` (optional, string): Filter by category name (e.g., "base_json", "heat_source_wet", "controls")
93
+
94
+ **Example:**
95
+ ```json
96
+ {"category": "heat_source_wet"}
97
+ ```
98
+
99
+ ### 2. `vulcan_view_parameter`
100
+
101
+ View a specific parameter JSON snippet and documentation.
102
+
103
+ **Parameters:**
104
+ - `category` (required, string): Parameter category (e.g., "heat_source_wet", "controls", "base_json")
105
+ - `parameter_id` (required, string): Parameter ID (filename without .json extension)
106
+
107
+ **Example:**
108
+ ```json
109
+ {"category": "heat_source_wet", "parameter_id": "hp"}
110
+ ```
111
+
112
+ ### 3. `vulcan_save_parameter`
113
+
114
+ Create or edit a parameter with validation.
115
+
116
+ **Parameters:**
117
+ - `category` (required, string): Parameter category
118
+ - `parameter_id` (required, string): Parameter ID (filename without .json extension)
119
+ - `content` (required, object): Parameter JSON content
120
+ - `markdown_content` (optional, string): Optional markdown documentation
121
+
122
+ **Example:**
83
123
  ```json
84
124
  {
85
- "mcpServers": {
86
- "vulcan": {
87
- "command": "node",
88
- "args": ["/absolute/path/to/vulcan-mcp-server/index.js", "--config", "/absolute/path/to/workspace/vulcan-mcp-config.json"]
89
- }
125
+ "category": "heat_source_wet",
126
+ "parameter_id": "hp_custom",
127
+ "content": {"efficiency": 0.85, "type": "heat_pump"},
128
+ "markdown_content": "# Custom Heat Pump\n\nDescription..."
129
+ }
130
+ ```
131
+
132
+ ### 4. `vulcan_create_batch_config`
133
+
134
+ Create a batch simulation configuration.
135
+
136
+ **Parameters:**
137
+ - `config_name` (required, string): Configuration name (saved as {config_name}.json)
138
+ - `base_model` (required, string): Base model filename (without .json extension)
139
+ - `weather_file` (required, string): Weather file name (with or without .epw extension)
140
+ - `wrapper` (optional, string): Model wrapper (e.g., "fhs_compliance", "passthrough")
141
+ - `parameters` (required, object): Object mapping category to array of parameter IDs
142
+
143
+ **Example:**
144
+ ```json
145
+ {
146
+ "config_name": "hp_vs_boiler",
147
+ "base_model": "demo_hp_annual",
148
+ "weather_file": "London-Gatwick-TMY",
149
+ "wrapper": "passthrough",
150
+ "parameters": {
151
+ "heat_source_wet": ["hp", "gas_boiler"],
152
+ "controls": ["standard_schedule"]
90
153
  }
91
154
  }
92
155
  ```
93
156
 
94
- ## Available Tools
157
+ ### 5. `vulcan_run_batch`
158
+
159
+ Run a batch configuration asynchronously.
160
+
161
+ **Parameters:**
162
+ - `config_name` (required, string): Configuration name (with or without .json extension)
163
+ - `job_id` (optional, string): Custom job ID (defaults to mcp_{uuid})
164
+
165
+ **Example:**
166
+ ```json
167
+ {"config_name": "hp_vs_boiler"}
168
+ ```
95
169
 
96
- ### `vulcan_list_parameters`
170
+ ### 6. `vulcan_get_batch_status`
97
171
 
98
- List available parameter categories and their JSON snippets.
172
+ Check status/progress of a batch run.
99
173
 
100
- **Arguments:**
101
- - `category` (optional): Filter by category name
174
+ **Parameters:**
175
+ - `job_id` (optional, string): Job ID returned from vulcan_run_batch
176
+ - `config_name` (optional, string): Configuration name (alternative to job_id)
102
177
 
103
- **Returns:**
104
- - Catalog structure with categories and parameters
105
- - Total counts
178
+ **Note:** Either `job_id` or `config_name` must be provided.
106
179
 
107
- ### Metrics Tool Notes
180
+ **Example:**
181
+ ```json
182
+ {"config_name": "hp_vs_boiler"}
183
+ ```
108
184
 
109
- - `vulcan_calculate_metrics` supports comparator-based metrics (`sumIf`, `averageIf`, `countIf`) and compliance metrics (e.g., `dwelling_emission_rate|compliance`).
110
- - Cost metrics are temporarily blocked in MCP until tariff data plumbing lands—requests containing cost metrics will return an actionable error.
111
- - Results now include each metric’s `id`, `name`, `column`, and `function`, matching what you send from Cursor.
185
+ ### 7. `vulcan_list_batch_models`
112
186
 
113
- ## Development
187
+ List all model names from a completed batch.
114
188
 
115
- ### Testing Locally
189
+ **Parameters:**
190
+ - `config_name` (required, string): Configuration name (with or without .json extension)
116
191
 
117
- 1. Create a test config file:
192
+ **Example:**
193
+ ```json
194
+ {"config_name": "hp_vs_boiler"}
195
+ ```
196
+
197
+ ### 8. `vulcan_list_csv_columns`
198
+
199
+ List available columns from a CSV result file.
200
+
201
+ **Parameters:**
202
+ - `config_name` (required, string): Configuration name (with or without .json extension)
203
+ - `model_name` (required, string): Model name (e.g., "scenario_1_0")
204
+
205
+ **Example:**
206
+ ```json
207
+ {"config_name": "hp_vs_boiler", "model_name": "scenario_1_0"}
208
+ ```
209
+
210
+ ### 9. `vulcan_calculate_metrics`
211
+
212
+ Calculate metrics (sum, average, peak, min, cost) from results.
213
+
214
+ **Parameters:**
215
+ - `config_name` (required, string): Configuration name (with or without .json extension)
216
+ - `model_names` (required, array): Array of model names to calculate metrics for
217
+ - `metric_definitions` (required, array): Array of metric definition objects:
218
+ - `id` (optional, string)
219
+ - `name` (optional, string)
220
+ - `column` (optional, string)
221
+ - `function` (optional, enum): "sum", "average", "peak", "min", "cost", "sumIf", "averageIf", "countIf"
222
+ - `comparator` (optional, string): For conditional metrics (">=", "<=", ">", "<", "=")
223
+ - `threshold` (optional, number): For conditional metrics
224
+ - `time_range` (optional, object): Time range filter
225
+ - `start` (optional, number): Start timestep
226
+ - `end` (optional, number): End timestep
227
+ - `tariff_file_path` (optional, string): Path to tariff CSV (required for cost metrics)
228
+ - `tariff_column_index` (optional, number): Zero-based index of tariff column (required for cost metrics)
229
+
230
+ **Example:**
118
231
  ```json
119
232
  {
120
- "workspace": "/path/to/your/workspace",
121
- "user_id": "test-user-id"
233
+ "config_name": "hp_vs_boiler",
234
+ "model_names": ["scenario_1_0", "scenario_1_1"],
235
+ "metric_definitions": [
236
+ {"name": "Total Electricity", "column": "Electricity", "function": "sum"},
237
+ {"name": "Peak Demand", "column": "Electricity", "function": "peak"}
238
+ ]
122
239
  }
123
240
  ```
124
241
 
125
- 2. Test the server (stdio mode):
126
- ```bash
127
- node index.js --config test-config.json
242
+ **Example with cost metric:**
243
+ ```json
244
+ {
245
+ "config_name": "hp_vs_boiler",
246
+ "model_names": ["scenario_1_0"],
247
+ "metric_definitions": [
248
+ {"name": "Energy Cost", "column": "Electricity", "function": "cost"}
249
+ ],
250
+ "tariff_file_path": "input/tariff_data_structured/Octopus.csv",
251
+ "tariff_column_index": 2
252
+ }
128
253
  ```
129
254
 
130
- 3. Send test requests via stdin (newline-delimited JSON-RPC):
255
+ ### 10. `vulcan_merge_csv_to_json`
256
+
257
+ Convert geometry CSV files to JSON format.
258
+
259
+ **Parameters:**
260
+ - `csv_path` (required, string): Path to CSV file (relative to workspace or absolute)
261
+ - `output_path` (optional, string): Output JSON path (defaults to input/batch_parameters/base_json/{csv_filename}.json)
262
+ - `schema_path` (optional, string): Custom schema path (defaults to input_core_allowing_fhs.schema.json)
263
+ - `defaults_path` (optional, string): Custom defaults path (defaults to utility/defaults_template.json)
264
+
265
+ **Example:**
131
266
  ```json
132
- {"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}
133
- {"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
134
- {"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"vulcan_list_parameters","arguments":{}}}
267
+ {"csv_path": "input/base_models/my_model.csv"}
135
268
  ```
136
269
 
137
- ## Logging & Diagnostics
270
+ ## Error Messages
138
271
 
139
- - All WASM `console.log` output is redirected to **stderr** so MCP stdout carries only JSON-RPC. This prevents Cursor’s “model returned error” dialog that appears when stdout is polluted.
140
- - When debugging, tail stderr (or pipe it to a file) to see WASM initialization and metrics parsing logs.
272
+ Common errors and what they mean:
141
273
 
142
- ## Architecture
274
+ - **`Config file not found: <path>`** - Config file missing. Generate it from Vulcan → Integrations → MCP
275
+ - **`Invalid JSON in config file`** - Config file is malformed. Regenerate from Vulcan
276
+ - **`Config file missing required field: workspace`** - Config file incomplete. Regenerate from Vulcan
277
+ - **`Your Vulcan MCP token is missing`** - Token not in config. Generate config from Vulcan
278
+ - **`Workspace directory not found: <path>`** - Workspace path in config is incorrect
279
+ - **`Workspace missing required directory: input/batch_parameters`** - Not a valid Vulcan workspace or not in FSA mode
280
+ - **`Your Vulcan MCP token has expired`** - Token expired (~30 days). Refresh in Vulcan → Integrations → MCP
281
+ - **`Your Vulcan MCP token is invalid`** - Token signature invalid. Refresh in Vulcan
282
+ - **`WASM initialization failed`** - WASM files missing or corrupted. Reinstall package
283
+ - **`Port argument is missing`** - Invalid `--port` usage. Use `--port <number>`
284
+ - **`Invalid port: <value>`** - Port must be 1-65535
285
+
286
+ ## Testing
287
+
288
+ Test the server is running:
289
+
290
+ ```bash
291
+ curl http://127.0.0.1:5000/health
292
+ ```
293
+
294
+ Should return:
295
+ ```json
296
+ {"status":"running","port":5000,"version":"0.1.3","name":"vulcan-mcp-helper"}
297
+ ```
143
298
 
144
- - **Node.js**: Single runtime, cross-platform
145
- - **WASM**: Uses existing WASM bundle from `web/pkg/` (for validation, batch execution, metrics)
146
- - **File Operations**: Node.js `fs` module for workspace file access
147
- - **Protocol**: MCP via stdio (newline-delimited JSON-RPC) or Streamable HTTP (`POST /mcp`)
299
+ ## Troubleshooting
148
300
 
149
- ## Future Enhancements
301
+ - **Server won't start**: Check Node.js version (`node --version` must be v18+)
302
+ - **Config errors**: Ensure workspace is in FSA (Folder) mode, not OPFS
303
+ - **Token expired**: Refresh token in Vulcan → Integrations → MCP
304
+ - **Port in use**: Use `--port` to specify a different port
305
+ - **WASM errors**: Reinstall package: `npm install -g @vulcan-energy/mcp-helper`
150
306
 
151
- - Additional tools: `vulcan_view_parameter`, `vulcan_save_parameter`, `vulcan_create_batch_config`, `vulcan_run_batch`, `vulcan_get_batch_status`, `vulcan_calculate_metrics`
152
- - WASM integration for validation and batch execution
153
- - Enhanced error handling and logging
154
307
 
@@ -0,0 +1,158 @@
1
+ # Third-Party Notices (Vulcan MCP Helper)
2
+
3
+ This package (`@vulcan-energy/mcp-helper`) is **proprietary software** (see `LICENSE`).
4
+
5
+ It also includes and/or depends on third-party software. This file is the starting point for tracking notices and license obligations.
6
+
7
+ ## How to keep this accurate (recommended)
8
+
9
+ - Generate a full dependency license report at release time (CI or local) and update this file.
10
+ - Suggested tooling:
11
+ - Node: `license-checker` (or equivalent) against the exact production dependency tree
12
+ - If the published tarball includes bundled assets under `wasm/`, ensure those are also covered by notices
13
+
14
+ ## Direct npm dependencies (from `package.json`)
15
+
16
+ The following packages are declared as direct dependencies:
17
+
18
+ - `@modelcontextprotocol/sdk`
19
+ - `cors`
20
+ - `express`
21
+ - `jose`
22
+ - `zod`
23
+
24
+ > Note: This section does **not** yet enumerate transitive dependencies. Use a license-report tool to produce the authoritative list for each release.
25
+
26
+ ## Full production dependency license report
27
+
28
+ The following table was generated locally via:
29
+
30
+ - `cd vulcan-mcp-server`
31
+ - `npm install`
32
+ - `npx license-checker --production --json`
33
+
34
+ This is intended to be a **complete** list of production dependencies (including transitives) for the published npm package.
35
+
36
+ | Package | Version | License | Repository/Homepage |
37
+ |---|---:|---|---|
38
+ | @modelcontextprotocol/sdk | 1.22.0 | MIT | https://github.com/modelcontextprotocol/typescript-sdk |
39
+ | accepts | 1.3.8 | MIT | https://github.com/jshttp/accepts |
40
+ | accepts | 2.0.0 | MIT | https://github.com/jshttp/accepts |
41
+ | ajv | 8.17.1 | MIT | https://github.com/ajv-validator/ajv |
42
+ | ajv-formats | 3.0.1 | MIT | https://github.com/ajv-validator/ajv-formats |
43
+ | array-flatten | 1.1.1 | MIT | https://github.com/blakeembrey/array-flatten |
44
+ | body-parser | 1.20.3 | MIT | https://github.com/expressjs/body-parser |
45
+ | body-parser | 2.2.0 | MIT | https://github.com/expressjs/body-parser |
46
+ | bytes | 3.1.2 | MIT | https://github.com/visionmedia/bytes.js |
47
+ | call-bind-apply-helpers | 1.0.2 | MIT | https://github.com/ljharb/call-bind-apply-helpers |
48
+ | call-bound | 1.0.4 | MIT | https://github.com/ljharb/call-bound |
49
+ | content-disposition | 0.5.4 | MIT | https://github.com/jshttp/content-disposition |
50
+ | content-disposition | 1.0.1 | MIT | https://github.com/jshttp/content-disposition |
51
+ | content-type | 1.0.5 | MIT | https://github.com/jshttp/content-type |
52
+ | cookie | 0.7.1 | MIT | https://github.com/jshttp/cookie |
53
+ | cookie-signature | 1.0.6 | MIT | https://github.com/visionmedia/node-cookie-signature |
54
+ | cookie-signature | 1.2.2 | MIT | https://github.com/visionmedia/node-cookie-signature |
55
+ | cors | 2.8.5 | MIT | https://github.com/expressjs/cors |
56
+ | cross-spawn | 7.0.6 | MIT | https://github.com/moxystudio/node-cross-spawn |
57
+ | debug | 2.6.9 | MIT | https://github.com/visionmedia/debug |
58
+ | debug | 4.4.3 | MIT | https://github.com/debug-js/debug |
59
+ | depd | 2.0.0 | MIT | https://github.com/dougwilson/nodejs-depd |
60
+ | destroy | 1.2.0 | MIT | https://github.com/stream-utils/destroy |
61
+ | dunder-proto | 1.0.1 | MIT | https://github.com/es-shims/dunder-proto |
62
+ | ee-first | 1.1.1 | MIT | https://github.com/jonathanong/ee-first |
63
+ | encodeurl | 1.0.2 | MIT | https://github.com/pillarjs/encodeurl |
64
+ | encodeurl | 2.0.0 | MIT | https://github.com/pillarjs/encodeurl |
65
+ | es-define-property | 1.0.1 | MIT | https://github.com/ljharb/es-define-property |
66
+ | es-errors | 1.3.0 | MIT | https://github.com/ljharb/es-errors |
67
+ | es-object-atoms | 1.1.1 | MIT | https://github.com/ljharb/es-object-atoms |
68
+ | escape-html | 1.0.3 | MIT | https://github.com/component/escape-html |
69
+ | etag | 1.8.1 | MIT | https://github.com/jshttp/etag |
70
+ | eventsource | 3.0.7 | MIT | git://git@github.com/EventSource/eventsource |
71
+ | eventsource-parser | 3.0.6 | MIT | https://github.com/rexxars/eventsource-parser |
72
+ | express | 4.21.2 | MIT | https://github.com/expressjs/express |
73
+ | express | 5.1.0 | MIT | https://github.com/expressjs/express |
74
+ | express-rate-limit | 7.5.1 | MIT | https://github.com/express-rate-limit/express-rate-limit |
75
+ | fast-deep-equal | 3.1.3 | MIT | https://github.com/epoberezkin/fast-deep-equal |
76
+ | fast-uri | 3.1.0 | BSD-3-Clause | https://github.com/fastify/fast-uri |
77
+ | finalhandler | 1.3.1 | MIT | https://github.com/pillarjs/finalhandler |
78
+ | finalhandler | 2.1.0 | MIT | https://github.com/pillarjs/finalhandler |
79
+ | forwarded | 0.2.0 | MIT | https://github.com/jshttp/forwarded |
80
+ | fresh | 0.5.2 | MIT | https://github.com/jshttp/fresh |
81
+ | fresh | 2.0.0 | MIT | https://github.com/jshttp/fresh |
82
+ | function-bind | 1.1.2 | MIT | https://github.com/Raynos/function-bind |
83
+ | get-intrinsic | 1.3.0 | MIT | https://github.com/ljharb/get-intrinsic |
84
+ | get-proto | 1.0.1 | MIT | https://github.com/ljharb/get-proto |
85
+ | gopd | 1.2.0 | MIT | https://github.com/ljharb/gopd |
86
+ | has-symbols | 1.1.0 | MIT | https://github.com/inspect-js/has-symbols |
87
+ | hasown | 2.0.2 | MIT | https://github.com/inspect-js/hasOwn |
88
+ | http-errors | 2.0.0 | MIT | https://github.com/jshttp/http-errors |
89
+ | http-errors | 2.0.1 | MIT | https://github.com/jshttp/http-errors |
90
+ | iconv-lite | 0.4.24 | MIT | https://github.com/ashtuchkin/iconv-lite |
91
+ | iconv-lite | 0.6.3 | MIT | https://github.com/ashtuchkin/iconv-lite |
92
+ | iconv-lite | 0.7.0 | MIT | https://github.com/pillarjs/iconv-lite |
93
+ | inherits | 2.0.4 | ISC | https://github.com/isaacs/inherits |
94
+ | ipaddr.js | 1.9.1 | MIT | https://github.com/whitequark/ipaddr.js |
95
+ | is-promise | 4.0.0 | MIT | https://github.com/then/is-promise |
96
+ | isexe | 2.0.0 | ISC | https://github.com/isaacs/isexe |
97
+ | jose | 6.1.2 | MIT | https://github.com/panva/jose |
98
+ | json-schema-traverse | 1.0.0 | MIT | https://github.com/epoberezkin/json-schema-traverse |
99
+ | math-intrinsics | 1.1.0 | MIT | https://github.com/es-shims/math-intrinsics |
100
+ | media-typer | 0.3.0 | MIT | https://github.com/jshttp/media-typer |
101
+ | media-typer | 1.1.0 | MIT | https://github.com/jshttp/media-typer |
102
+ | merge-descriptors | 1.0.3 | MIT | https://github.com/sindresorhus/merge-descriptors |
103
+ | merge-descriptors | 2.0.0 | MIT | https://github.com/sindresorhus/merge-descriptors |
104
+ | methods | 1.1.2 | MIT | https://github.com/jshttp/methods |
105
+ | mime | 1.6.0 | MIT | https://github.com/broofa/node-mime |
106
+ | mime-db | 1.52.0 | MIT | https://github.com/jshttp/mime-db |
107
+ | mime-db | 1.54.0 | MIT | https://github.com/jshttp/mime-db |
108
+ | mime-types | 2.1.35 | MIT | https://github.com/jshttp/mime-types |
109
+ | mime-types | 3.0.2 | MIT | https://github.com/jshttp/mime-types |
110
+ | ms | 2.0.0 | MIT | https://github.com/zeit/ms |
111
+ | ms | 2.1.3 | MIT | https://github.com/vercel/ms |
112
+ | negotiator | 0.6.3 | MIT | https://github.com/jshttp/negotiator |
113
+ | negotiator | 1.0.0 | MIT | https://github.com/jshttp/negotiator |
114
+ | object-assign | 4.1.1 | MIT | https://github.com/sindresorhus/object-assign |
115
+ | object-inspect | 1.13.4 | MIT | https://github.com/inspect-js/object-inspect |
116
+ | on-finished | 2.4.1 | MIT | https://github.com/jshttp/on-finished |
117
+ | once | 1.4.0 | ISC | https://github.com/isaacs/once |
118
+ | parseurl | 1.3.3 | MIT | https://github.com/pillarjs/parseurl |
119
+ | path-key | 3.1.1 | MIT | https://github.com/sindresorhus/path-key |
120
+ | path-to-regexp | 0.1.12 | MIT | https://github.com/pillarjs/path-to-regexp |
121
+ | path-to-regexp | 8.3.0 | MIT | https://github.com/pillarjs/path-to-regexp |
122
+ | pkce-challenge | 5.0.1 | MIT | https://github.com/crouchcd/pkce-challenge |
123
+ | proxy-addr | 2.0.7 | MIT | https://github.com/jshttp/proxy-addr |
124
+ | qs | 6.13.0 | BSD-3-Clause | https://github.com/ljharb/qs |
125
+ | qs | 6.14.0 | BSD-3-Clause | https://github.com/ljharb/qs |
126
+ | range-parser | 1.2.1 | MIT | https://github.com/jshttp/range-parser |
127
+ | raw-body | 2.5.2 | MIT | https://github.com/stream-utils/raw-body |
128
+ | raw-body | 3.0.2 | MIT | https://github.com/stream-utils/raw-body |
129
+ | require-from-string | 2.0.2 | MIT | https://github.com/floatdrop/require-from-string |
130
+ | router | 2.2.0 | MIT | https://github.com/pillarjs/router |
131
+ | safe-buffer | 5.2.1 | MIT | https://github.com/feross/safe-buffer |
132
+ | safer-buffer | 2.1.2 | MIT | https://github.com/ChALkeR/safer-buffer |
133
+ | send | 0.19.0 | MIT | https://github.com/pillarjs/send |
134
+ | send | 1.2.0 | MIT | https://github.com/pillarjs/send |
135
+ | serve-static | 1.16.2 | MIT | https://github.com/expressjs/serve-static |
136
+ | serve-static | 2.2.0 | MIT | https://github.com/expressjs/serve-static |
137
+ | setprototypeof | 1.2.0 | ISC | https://github.com/wesleytodd/setprototypeof |
138
+ | shebang-command | 2.0.0 | MIT | https://github.com/kevva/shebang-command |
139
+ | shebang-regex | 3.0.0 | MIT | https://github.com/sindresorhus/shebang-regex |
140
+ | side-channel | 1.1.0 | MIT | https://github.com/ljharb/side-channel |
141
+ | side-channel-list | 1.0.0 | MIT | https://github.com/ljharb/side-channel-list |
142
+ | side-channel-map | 1.0.1 | MIT | https://github.com/ljharb/side-channel-map |
143
+ | side-channel-weakmap | 1.0.2 | MIT | https://github.com/ljharb/side-channel-weakmap |
144
+ | statuses | 2.0.1 | MIT | https://github.com/jshttp/statuses |
145
+ | statuses | 2.0.2 | MIT | https://github.com/jshttp/statuses |
146
+ | toidentifier | 1.0.1 | MIT | https://github.com/component/toidentifier |
147
+ | type-is | 1.6.18 | MIT | https://github.com/jshttp/type-is |
148
+ | type-is | 2.0.1 | MIT | https://github.com/jshttp/type-is |
149
+ | unpipe | 1.0.0 | MIT | https://github.com/stream-utils/unpipe |
150
+ | utils-merge | 1.0.1 | MIT | https://github.com/jaredhanson/utils-merge |
151
+ | vary | 1.1.2 | MIT | https://github.com/jshttp/vary |
152
+ | which | 2.0.2 | ISC | https://github.com/isaacs/node-which |
153
+ | wrappy | 1.0.2 | ISC | https://github.com/npm/wrappy |
154
+ | zod | 3.25.76 | MIT | https://github.com/colinhacks/zod |
155
+ | zod | 4.1.12 | MIT | https://github.com/colinhacks/zod |
156
+ | zod-to-json-schema | 3.25.0 | ISC | https://github.com/StefanTerdell/zod-to-json-schema |
157
+
158
+
@@ -15,9 +15,14 @@ function parseArgs() {
15
15
  i++; // Skip next arg
16
16
  }
17
17
  else if (args[i] === '--port' && i + 1 < args.length) {
18
- const port = parseInt(args[i + 1], 10);
18
+ const portArg = args[i + 1];
19
+ if (!portArg) {
20
+ console.error('Port argument is missing');
21
+ process.exit(1);
22
+ }
23
+ const port = parseInt(portArg, 10);
19
24
  if (isNaN(port) || port < 1 || port > 65535) {
20
- console.error(`Invalid port: ${args[i + 1]}`);
25
+ console.error(`Invalid port: ${portArg}`);
21
26
  process.exit(1);
22
27
  }
23
28
  result.port = port;
@@ -1 +1 @@
1
- {"version":3,"file":"vulcan-mcp-helper.js","sourceRoot":"","sources":["../../bin/vulcan-mcp-helper.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,MAAM,GAA2C,EAAE,CAAC;IAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAClD,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,CAAC,EAAE,CAAC,CAAC,gBAAgB;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;gBAC5C,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,CAAC,EAAE,CAAC,CAAC,gBAAgB;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;CAajB,CAAC,CAAC;YACG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC;QACzC,MAAM,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"vulcan-mcp-helper.js","sourceRoot":"","sources":["../../bin/vulcan-mcp-helper.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,MAAM,GAA2C,EAAE,CAAC;IAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAClD,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,CAAC,EAAE,CAAC,CAAC,gBAAgB;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;gBAC5C,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,CAAC,EAAE,CAAC,CAAC,gBAAgB;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;CAajB,CAAC,CAAC;YACG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC;QACzC,MAAM,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const MCP_PUBLIC_KEYS: string[];
2
+ //# sourceMappingURL=licenseKeys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"licenseKeys.d.ts","sourceRoot":"","sources":["../../../src/engine/licenseKeys.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe,EAAE,MAAM,EAInC,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Public keys used by the MCP helper to verify license_token signatures.
2
+ // These correspond to the private keys used by vulcan-website to issue MCP tokens.
3
+ // v1: single Ed25519 key, but we support an array to allow future rotation.
4
+ export const MCP_PUBLIC_KEYS = [
5
+ `-----BEGIN PUBLIC KEY-----
6
+ MCowBQYDK2VwAyEAOmr0DweQnQ2L747vGML7l/ieYywCQzrnd39idAZ2YK4=
7
+ -----END PUBLIC KEY-----`,
8
+ ];
9
+ //# sourceMappingURL=licenseKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"licenseKeys.js","sourceRoot":"","sources":["../../../src/engine/licenseKeys.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,mFAAmF;AACnF,4EAA4E;AAE5E,MAAM,CAAC,MAAM,eAAe,GAAa;IACvC;;yBAEuB;CACxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../../src/engine/wasm.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9D,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AA6KD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAqLpD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEpD"}
1
+ {"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../../src/engine/wasm.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9D,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AA+KD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAqLpD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEpD"}