@samanhappy/mcphub 1.1.6 → 1.1.7

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 (87) hide show
  1. package/dist/controllers/groupController.js +21 -6
  2. package/dist/controllers/groupController.js.map +1 -1
  3. package/dist/controllers/metricsController.js +33 -0
  4. package/dist/controllers/metricsController.js.map +1 -0
  5. package/dist/dao/GroupDaoDbImpl.js +9 -0
  6. package/dist/dao/GroupDaoDbImpl.js.map +1 -1
  7. package/dist/db/entities/Group.js +8 -0
  8. package/dist/db/entities/Group.js.map +1 -1
  9. package/dist/db/entities/Server.js +4 -0
  10. package/dist/db/entities/Server.js.map +1 -1
  11. package/dist/middlewares/toolCallGuard.js +499 -0
  12. package/dist/middlewares/toolCallGuard.js.map +1 -0
  13. package/dist/routes/index.js +2 -0
  14. package/dist/routes/index.js.map +1 -1
  15. package/dist/services/groupService.js +1 -0
  16. package/dist/services/groupService.js.map +1 -1
  17. package/dist/services/mcpOAuthProvider.js +0 -2
  18. package/dist/services/mcpOAuthProvider.js.map +1 -1
  19. package/dist/services/mcpService.js +66 -11
  20. package/dist/services/mcpService.js.map +1 -1
  21. package/dist/services/metricsService.js +54 -0
  22. package/dist/services/metricsService.js.map +1 -0
  23. package/dist/services/oauthClientRegistration.js +1 -1
  24. package/dist/services/oauthClientRegistration.js.map +1 -1
  25. package/dist/services/toolResultCompressionService.js +26 -1
  26. package/dist/services/toolResultCompressionService.js.map +1 -1
  27. package/dist/utils/migration.js +3 -2
  28. package/dist/utils/migration.js.map +1 -1
  29. package/dist/utils/oauthRedirectUri.js +3 -11
  30. package/dist/utils/oauthRedirectUri.js.map +1 -1
  31. package/dist/utils/parameterConversion.js +9 -4
  32. package/dist/utils/parameterConversion.js.map +1 -1
  33. package/dist/utils/serialization.js +2 -5
  34. package/dist/utils/serialization.js.map +1 -1
  35. package/dist/utils/settingsSync.js +53 -4
  36. package/dist/utils/settingsSync.js.map +1 -1
  37. package/dist/utils/tokenTruncation.js +1 -1
  38. package/dist/utils/tokenTruncation.js.map +1 -1
  39. package/frontend/dist/assets/{ActivityPage-e2s2j32V.js → ActivityPage-BEpHoGLB.js} +2 -2
  40. package/frontend/dist/assets/{ActivityPage-e2s2j32V.js.map → ActivityPage-BEpHoGLB.js.map} +1 -1
  41. package/frontend/dist/assets/{CopyClientConfigDialog-B71Cl89b.js → CopyClientConfigDialog-B4RDMLQ7.js} +2 -2
  42. package/frontend/dist/assets/{CopyClientConfigDialog-B71Cl89b.js.map → CopyClientConfigDialog-B4RDMLQ7.js.map} +1 -1
  43. package/frontend/dist/assets/{CredentialsPage-BnA17pRJ.js → CredentialsPage-46Z8Qv7O.js} +2 -2
  44. package/frontend/dist/assets/{CredentialsPage-BnA17pRJ.js.map → CredentialsPage-46Z8Qv7O.js.map} +1 -1
  45. package/frontend/dist/assets/{Dashboard-gC_Z286J.js → Dashboard-Bp8ZGDp5.js} +2 -2
  46. package/frontend/dist/assets/{Dashboard-gC_Z286J.js.map → Dashboard-Bp8ZGDp5.js.map} +1 -1
  47. package/frontend/dist/assets/{EndpointCopy-BjD8ehcn.js → EndpointCopy-CH7rfwDL.js} +2 -2
  48. package/frontend/dist/assets/{EndpointCopy-BjD8ehcn.js.map → EndpointCopy-CH7rfwDL.js.map} +1 -1
  49. package/frontend/dist/assets/{GroupsPage-DiT_skCf.js → GroupsPage-DTjOja6T.js} +4 -4
  50. package/frontend/dist/assets/GroupsPage-DTjOja6T.js.map +1 -0
  51. package/frontend/dist/assets/{LoginPage-DK3WmTV9.js → LoginPage-o6ibb_j3.js} +2 -2
  52. package/frontend/dist/assets/{LoginPage-DK3WmTV9.js.map → LoginPage-o6ibb_j3.js.map} +1 -1
  53. package/frontend/dist/assets/{LogsPage-BzI3IAHO.js → LogsPage-B4RyT3TS.js} +2 -2
  54. package/frontend/dist/assets/{LogsPage-BzI3IAHO.js.map → LogsPage-B4RyT3TS.js.map} +1 -1
  55. package/frontend/dist/assets/{MarketPage-DVo32QTs.js → MarketPage-DV7Bs6bj.js} +2 -2
  56. package/frontend/dist/assets/{MarketPage-DVo32QTs.js.map → MarketPage-DV7Bs6bj.js.map} +1 -1
  57. package/frontend/dist/assets/{OAuthConsentPage-DUapnxQ9.js → OAuthConsentPage-DdxMIqDO.js} +2 -2
  58. package/frontend/dist/assets/{OAuthConsentPage-DUapnxQ9.js.map → OAuthConsentPage-DdxMIqDO.js.map} +1 -1
  59. package/frontend/dist/assets/{PromptsPage-BAqJay5m.js → PromptsPage-61Uj8gCp.js} +2 -2
  60. package/frontend/dist/assets/{PromptsPage-BAqJay5m.js.map → PromptsPage-61Uj8gCp.js.map} +1 -1
  61. package/frontend/dist/assets/{ResourcesPage-kIOm5X1A.js → ResourcesPage-BSgOwVld.js} +2 -2
  62. package/frontend/dist/assets/{ResourcesPage-kIOm5X1A.js.map → ResourcesPage-BSgOwVld.js.map} +1 -1
  63. package/frontend/dist/assets/{ServersPage-CkUdGq0R.js → ServersPage-DYumMhzV.js} +4 -4
  64. package/frontend/dist/assets/{ServersPage-CkUdGq0R.js.map → ServersPage-DYumMhzV.js.map} +1 -1
  65. package/frontend/dist/assets/{SettingsPage-DkMmUgCh.js → SettingsPage-C8zYH_jq.js} +2 -2
  66. package/frontend/dist/assets/{SettingsPage-DkMmUgCh.js.map → SettingsPage-C8zYH_jq.js.map} +1 -1
  67. package/frontend/dist/assets/{StatusDot-Bm_C7v3r.js → StatusDot-R86yLB-f.js} +2 -2
  68. package/frontend/dist/assets/{StatusDot-Bm_C7v3r.js.map → StatusDot-R86yLB-f.js.map} +1 -1
  69. package/frontend/dist/assets/{ToggleGroup-DcOtP3Gf.js → ToggleGroup-DN1ttokb.js} +2 -2
  70. package/frontend/dist/assets/{ToggleGroup-DcOtP3Gf.js.map → ToggleGroup-DN1ttokb.js.map} +1 -1
  71. package/frontend/dist/assets/{UsersPage-DpcbXD3K.js → UsersPage-BCMjm9JG.js} +2 -2
  72. package/frontend/dist/assets/{UsersPage-DpcbXD3K.js.map → UsersPage-BCMjm9JG.js.map} +1 -1
  73. package/frontend/dist/assets/{clipboard-CvokTzlX.js → clipboard-DjzVWhkB.js} +2 -2
  74. package/frontend/dist/assets/{clipboard-CvokTzlX.js.map → clipboard-DjzVWhkB.js.map} +1 -1
  75. package/frontend/dist/assets/framework-vendor-CQFm9vKd.js.map +1 -1
  76. package/frontend/dist/assets/index-P_O2kAcB.js +3 -0
  77. package/frontend/dist/assets/{index-DkQidC_d.js.map → index-P_O2kAcB.js.map} +1 -1
  78. package/frontend/dist/assets/{resourceService-CbZwkCgS.js → resourceService-DRZl8_Vm.js} +2 -2
  79. package/frontend/dist/assets/{resourceService-CbZwkCgS.js.map → resourceService-DRZl8_Vm.js.map} +1 -1
  80. package/frontend/dist/assets/{useCostData-DZ5NdhVp.js → useCostData-DVLGVcuy.js} +2 -2
  81. package/frontend/dist/assets/{useCostData-DZ5NdhVp.js.map → useCostData-DVLGVcuy.js.map} +1 -1
  82. package/frontend/dist/assets/{variableDetection-SMtrW-P5.js → variableDetection-DiE4h0o7.js} +2 -2
  83. package/frontend/dist/assets/{variableDetection-SMtrW-P5.js.map → variableDetection-DiE4h0o7.js.map} +1 -1
  84. package/frontend/dist/index.html +1 -1
  85. package/package.json +2 -1
  86. package/frontend/dist/assets/GroupsPage-DiT_skCf.js.map +0 -1
  87. package/frontend/dist/assets/index-DkQidC_d.js +0 -3
@@ -0,0 +1,499 @@
1
+ /**
2
+ * Opt-in pre-call guard for `tools/call` requests.
3
+ *
4
+ * When enabled, tool call arguments are inspected for a small set of
5
+ * high-confidence dangerous payloads — shell command injection/RCE and
6
+ * cloud instance-metadata (SSRF / credential-hijack) targets — and a
7
+ * matching call is blocked before it reaches the upstream MCP server
8
+ * (fail-closed).
9
+ *
10
+ * Rules are split into two tiers:
11
+ * - **Always-on** rules detect payloads that are dangerous in any field,
12
+ * not only an executable one: cloud instance-metadata endpoints and
13
+ * credential paths (SSRF / credential hijack). These are checked on
14
+ * every string value.
15
+ * - **Execution** rules detect shell/RCE content (chaining, command
16
+ * substitution, download-and-execute, sensitive-file reads, destructive
17
+ * deletion, reverse shells, PowerShell cradles). Because shell-like text
18
+ * and punctuation routinely appear inside ordinary prose, documentation
19
+ * and messaging arguments, these rules are applied only to values held
20
+ * in fields explicitly named to carry executable content
21
+ * (`command`, `cmd`, `script`, `run`, … — see {@link EXECUTION_KEYS}).
22
+ *
23
+ * Every pattern is a high-confidence indicator of an attack and every
24
+ * inspection is linear in the size of its input (no catastrophic
25
+ * backtracking). No network access and no third-party dependencies are
26
+ * required.
27
+ *
28
+ * Enable with `TOOL_CALL_GUARD_ENABLED=true`. The guard is off by default
29
+ * and performs no work unless explicitly enabled.
30
+ */
31
+ /**
32
+ * Thrown when the guard blocks a tool call. The message is safe to return to
33
+ * the caller; it deliberately does not echo the matched payload.
34
+ */
35
+ export class ToolCallBlockedError extends Error {
36
+ constructor(message,
37
+ /** Stable machine-readable identifier of the rule that fired. */
38
+ ruleId) {
39
+ super(message);
40
+ this.ruleId = ruleId;
41
+ this.name = 'ToolCallBlockedError';
42
+ }
43
+ }
44
+ /** Returns true when the pre-call guard is explicitly enabled via environment. */
45
+ export const isToolCallGuardEnabled = (env = process.env) => env.TOOL_CALL_GUARD_ENABLED === 'true';
46
+ /**
47
+ * Normalised names of object keys whose values hold executable content.
48
+ * A key matches when its lower-cased name, after removing `_`, `-` and
49
+ * spaces, is one of these tokens, or ends with one of the suffixes in
50
+ * {@link EXECUTION_KEY_SUFFIXES}.
51
+ */
52
+ const EXECUTION_KEYS = new Set([
53
+ 'command',
54
+ 'cmd',
55
+ 'cmds',
56
+ 'script',
57
+ 'exec',
58
+ 'execute',
59
+ 'shell',
60
+ 'run',
61
+ 'code',
62
+ 'statement',
63
+ 'expression',
64
+ ]);
65
+ /** Normalised key suffixes that indicate executable content. */
66
+ const EXECUTION_KEY_SUFFIXES = ['command', 'commands', 'script'];
67
+ /** Returns true when an object key is explicitly named to carry a command. */
68
+ const isExecutionKey = (key) => {
69
+ const normalised = key.toLowerCase().replace(/[_\-\s]/g, '');
70
+ if (EXECUTION_KEYS.has(normalised))
71
+ return true;
72
+ return EXECUTION_KEY_SUFFIXES.some((suffix) => normalised.endsWith(suffix));
73
+ };
74
+ /**
75
+ * Command substitution / execution expansions. These forms execute the
76
+ * embedded command whenever a shell interprets the value, so they are a
77
+ * direct RCE indicator.
78
+ *
79
+ * `$( ... )` is matched directly. Backtick pairs are inspected with a
80
+ * linear scan rather than a single regex, because a single opening
81
+ * backtick followed by a long run of non-backtick characters made the old
82
+ * backtick expression retry across the whole string.
83
+ */
84
+ const COMMAND_EXPANSION = {
85
+ id: 'command-expansion',
86
+ scope: 'execution',
87
+ test: (v) => /\$\([^)]/.test(v) || backtickSpanContains(v, SHELL_SYNTAX_CHARS),
88
+ };
89
+ /** Matches characters that indicate the content of a backtick span is shell syntax. */
90
+ const SHELL_SYNTAX_CHARS = /[;&|$/]/;
91
+ /**
92
+ * Linear scan for backtick-delimited spans that contain shell syntax or a
93
+ * known command. Each character is visited once; there is no backtracking.
94
+ */
95
+ const backtickSpanContains = (value, syntax) => {
96
+ let open = -1;
97
+ for (let i = 0; i < value.length; i += 1) {
98
+ if (value[i] !== '`')
99
+ continue;
100
+ if (open === -1) {
101
+ open = i;
102
+ }
103
+ else {
104
+ const span = value.slice(open + 1, i);
105
+ if (syntax.test(span) || COMMAND_IN_BACKTICK.test(span))
106
+ return true;
107
+ open = -1;
108
+ }
109
+ }
110
+ return false;
111
+ };
112
+ /** A backtick span that runs a known command with an argument. */
113
+ const COMMAND_IN_BACKTICK = /^\s*(?:sudo\s+)?(?:cat|ls|id|whoami|uname|wget|curl|bash|sh|nc|python|perl|ruby|chmod|chown|rm|cp|mv)\s+\S/;
114
+ /**
115
+ * Classic shell metacharacter chaining (`;`, `&&`, `||`) immediately
116
+ * followed by a command name. Requires a following command token so prose
117
+ * and ordinary punctuation do not match.
118
+ */
119
+ const SHELL_CHAINING = {
120
+ id: 'shell-chaining',
121
+ scope: 'execution',
122
+ test: (v) => /(?:;|&&|\|\|)\s*(?:sudo\s+)?(?:cat|ls|id|whoami|uname|wget|curl|bash|sh|nc|python|perl|ruby|chmod|chown|rm|cp|mv)\b/.test(v),
123
+ };
124
+ /**
125
+ * Download-and-execute pattern, e.g. `curl http://... | sh` or
126
+ * `wget -O- ... | bash`, including the `sh -c "$(curl ...)"` form.
127
+ *
128
+ * The piped form is detected with a linear scan: the line is split at each
129
+ * pipe and a single pass records whether a downloader appeared before the
130
+ * pipe and whether a shell follows it. The previous expression used
131
+ * `curl/wget` followed by `[^|\n]*` running to the terminator, so a string
132
+ * of repeated command words (`'curl '.repeat(40000)`) made the engine retry
133
+ * from each word and produced quadratic time. The shell is not required to
134
+ * sit at the end of the line: real invocations pass arguments (`sh -s`) or
135
+ * append comments (`sh # install`), and this rule is execution-scoped so
136
+ * downloaders merely quoted in prose are not matched.
137
+ */
138
+ const DOWNLOADER_PIPE = {
139
+ id: 'downloader-pipe',
140
+ scope: 'execution',
141
+ test: (v) => {
142
+ if (SH_C_CURL.test(v))
143
+ return true;
144
+ for (const line of v.split('\n')) {
145
+ if (hasDownloaderPipedToShell(line))
146
+ return true;
147
+ }
148
+ return false;
149
+ },
150
+ };
151
+ /** The `sh -c "$(curl ...)"` download-and-execute form. */
152
+ const SH_C_CURL = /(?:ba|z|fi|k|t?c)?sh\s+-c\s+["']?\$\((?:curl|wget)\b/;
153
+ /** A shell command name (bash/sh/zsh/fish/ksh/tcsh). */
154
+ const SHELL_AFTER_PIPE = /^(?:sudo\s+)?(?:ba|z|fi|k|t?c)?sh\b/;
155
+ /** A downloader command name. */
156
+ const DOWNLOADER_IN_SEGMENT = /\b(?:curl|wget)\b/;
157
+ /**
158
+ * Linear detection of `downloader ... | shell` within one line. The line is
159
+ * split at pipes and visited once; every segment is inspected with a
160
+ * bounded regex that does not run to an end-of-line terminator.
161
+ */
162
+ const hasDownloaderPipedToShell = (line) => {
163
+ let downloaderSeen = false;
164
+ for (const segment of line.split('|')) {
165
+ if (SHELL_AFTER_PIPE.test(segment.trimStart()) && downloaderSeen)
166
+ return true;
167
+ if (DOWNLOADER_IN_SEGMENT.test(segment))
168
+ downloaderSeen = true;
169
+ }
170
+ return false;
171
+ };
172
+ /**
173
+ * Reading sensitive account files through a shell command, including their
174
+ * use inside command substitution. `passwd` alone is harmless (it contains
175
+ * only public account names), so a reader command must precede it; `shadow`
176
+ * is sensitive regardless.
177
+ *
178
+ * Detected with a linear token scan: the line is split on whitespace and
179
+ * visited once, recording whether a reader command appeared before the
180
+ * `/etc/passwd` token. The previous expression used a reader word followed
181
+ * by `[^\n]*` running to the path, so repeated command words
182
+ * (`'cat '.repeat(50000)`) caused quadratic retries. Quoted path tokens
183
+ * (`cat "/etc/passwd"`) and absolute reader paths (`/bin/cat`) are handled
184
+ * by normalising each token before comparison.
185
+ */
186
+ const SENSITIVE_FILE_READ = {
187
+ id: 'sensitive-file-read',
188
+ scope: 'execution',
189
+ test: (v) => {
190
+ for (const line of v.split('\n')) {
191
+ if (SHADOW_PATH.test(line))
192
+ return true;
193
+ if (hasReaderThenPasswd(line))
194
+ return true;
195
+ }
196
+ return false;
197
+ },
198
+ };
199
+ /** A reference to `/etc/shadow`; sensitive even without an explicit reader. */
200
+ const SHADOW_PATH = /\/etc\/shadow(?![\w.-])/;
201
+ /**
202
+ * Removes a single matching pair of surrounding quotes from a whitespace
203
+ * token, so a path written as `"/etc/passwd"` is recognised the same as the
204
+ * unquoted form.
205
+ */
206
+ const stripQuotes = (token) => {
207
+ if (token.length < 2)
208
+ return token;
209
+ const first = token[0];
210
+ const last = token[token.length - 1];
211
+ if ((first === '"' || first === "'") && last === first) {
212
+ return token.slice(1, -1);
213
+ }
214
+ return token;
215
+ };
216
+ /** True when a (possibly quote-wrapped) token ends in `/etc/passwd`. */
217
+ const isPasswdToken = (token) => /\/etc\/passwd(?![\w.-])$/.test(stripQuotes(token));
218
+ /** Basenames of commands that read a file. */
219
+ const FILE_READER_WORDS = new Set([
220
+ 'cat',
221
+ 'head',
222
+ 'tail',
223
+ 'less',
224
+ 'more',
225
+ 'tac',
226
+ 'nl',
227
+ 'od',
228
+ 'xxd',
229
+ 'cp',
230
+ 'mv',
231
+ 'grep',
232
+ 'open',
233
+ ]);
234
+ /**
235
+ * True when a whitespace token is a file-reader command, whether given as a
236
+ * bare name (`cat`) or an absolute executable path (`/bin/cat`,
237
+ * `/usr/bin/cat`).
238
+ */
239
+ const isFileReaderToken = (token) => {
240
+ const slash = token.lastIndexOf('/');
241
+ const name = slash === -1 ? token : token.slice(slash + 1);
242
+ return FILE_READER_WORDS.has(name);
243
+ };
244
+ /**
245
+ * Linear detection of a reader command followed later by `/etc/passwd`
246
+ * within one line. Tokens are visited once; a reader seen earlier is
247
+ * remembered when the path token is reached. Quoted paths and absolute
248
+ * reader-command paths are handled by {@link isPasswdToken} and
249
+ * {@link isFileReaderToken}.
250
+ */
251
+ const hasReaderThenPasswd = (line) => {
252
+ let readerSeen = false;
253
+ for (const token of line.split(/\s+/)) {
254
+ if (isPasswdToken(token) && readerSeen)
255
+ return true;
256
+ if (isFileReaderToken(token))
257
+ readerSeen = true;
258
+ }
259
+ return false;
260
+ };
261
+ /**
262
+ * Forced recursive deletion of a system/home root.
263
+ *
264
+ * Implemented as a linear per-line scan instead of a single regex. The
265
+ * original combined three greedy `[^\n]*` segments in one expression, and
266
+ * even the intermediate `/-[^\s]*[rf]/` flag check retried from each dash,
267
+ * so long runs of dashes (e.g. `rm ` + `'-'.repeat(100000)) produced
268
+ * catastrophic backtracking. The checks below run independently on each
269
+ * line, inspecting only whitespace-delimited flag tokens, so the total work
270
+ * is O(n) with no backtracking across segments.
271
+ */
272
+ const FORCE_DELETE_ROOT = {
273
+ id: 'force-delete-root',
274
+ scope: 'execution',
275
+ test: (v) => {
276
+ for (const line of v.split('\n')) {
277
+ if (!/\brm\b/.test(line))
278
+ continue;
279
+ if (!hasRecursiveForceFlag(line))
280
+ continue;
281
+ if (/(?:--no-preserve-root\b)?\s\/(?:\s|$|\*)/.test(line))
282
+ return true;
283
+ }
284
+ return false;
285
+ },
286
+ };
287
+ /**
288
+ * Returns true when the line carries a recursive flag (a single-dash flag
289
+ * token containing `r`), or `--no-preserve-root`. Recursive deletion of the
290
+ * root target is dangerous with `-r` alone, so `-f` is not required. Only
291
+ * whitespace-delimited tokens are inspected, so a run of dashes that never
292
+ * forms such a token is visited once and rejected.
293
+ */
294
+ const hasRecursiveForceFlag = (line) => {
295
+ if (line.includes('--no-preserve-root'))
296
+ return true;
297
+ for (const token of line.split(/\s+/)) {
298
+ if (token.length < 2 || token[0] !== '-' || token[1] === '-')
299
+ continue;
300
+ if (token.slice(1).includes('r'))
301
+ return true;
302
+ }
303
+ return false;
304
+ };
305
+ /**
306
+ * Reverse-shell starters.
307
+ *
308
+ * The `/dev/tcp/host/port` and `nc -e /bin/sh` forms are detected with
309
+ * linear scans rather than run-on regexes. The previous expressions were
310
+ * `/dev/tcp/\S+/\d+` and `\bnc\b[^\n]*-e\s+/…/sh`; on a string of repeated
311
+ * prefixes (`'/dev/tcp/'.repeat(20000)` or `'nc '.repeat(60000)`) each
312
+ * match advanced while scanning to the end of the line for a suffix that
313
+ * was absent, producing quadratic retries.
314
+ */
315
+ const REVERSE_SHELL = {
316
+ id: 'reverse-shell',
317
+ scope: 'execution',
318
+ test: (v) => {
319
+ if (hasDevTcpRedirect(v))
320
+ return true;
321
+ if (/bash\s+-i\b/.test(v))
322
+ return true;
323
+ for (const line of v.split('\n')) {
324
+ if (hasNetcatExecShell(line))
325
+ return true;
326
+ }
327
+ return false;
328
+ },
329
+ };
330
+ const DEV_TCP_PREFIX = '/dev/tcp/';
331
+ /** Characters that terminate a shell word even without whitespace. */
332
+ const isShellDelimiter = (ch) => /[;|&'"`><)]/.test(ch);
333
+ /**
334
+ * Linear detection of a bash `/dev/tcp/host/port` redirect. Each prefix
335
+ * occurrence advances a single cursor (there is no rescanning of earlier
336
+ * text). The host/port token ends at whitespace or a shell delimiter such as
337
+ * `;` or a closing quote, so a port immediately followed by `;` is still
338
+ * recognised; both the host and the port are validated.
339
+ */
340
+ const hasDevTcpRedirect = (value) => {
341
+ let from = 0;
342
+ for (;;) {
343
+ const start = value.indexOf(DEV_TCP_PREFIX, from);
344
+ if (start === -1)
345
+ return false;
346
+ const restStart = start + DEV_TCP_PREFIX.length;
347
+ let end = restStart;
348
+ while (end < value.length) {
349
+ const ch = value[end];
350
+ if (/\s/.test(ch) || isShellDelimiter(ch))
351
+ break;
352
+ end += 1;
353
+ }
354
+ const segment = value.slice(restStart, end);
355
+ const slash = segment.indexOf('/');
356
+ if (slash > 0 &&
357
+ /^[A-Za-z0-9_.[\]:-]+$/.test(segment.slice(0, slash)) &&
358
+ /^\d+$/.test(segment.slice(slash + 1))) {
359
+ return true;
360
+ }
361
+ from = end;
362
+ }
363
+ };
364
+ /**
365
+ * Linear detection of a netcat/ncat reverse shell within one line. Both the
366
+ * starter and the `-e /…/sh` execute form are matched with bounded patterns;
367
+ * neither runs to the end of the line, so repeated `nc` words do not retry.
368
+ */
369
+ const hasNetcatExecShell = (line) => {
370
+ if (!/\bnc(?:at)?\b/.test(line))
371
+ return false;
372
+ return /(?:^|\s)-e\s+\/(?:bin|usr\/bin)\/sh(?![\w.-])/.test(line);
373
+ };
374
+ /** PowerShell download cradles (download + execute APIs used together). */
375
+ const POWERSHELL_CRADLE = {
376
+ id: 'powershell-cradle',
377
+ scope: 'execution',
378
+ test: (v) => {
379
+ const lower = v.toLowerCase();
380
+ const downloads = /(?:downloadstring|downloadfile|invoke-webrequest\s*\(|invoke-restmethod\s*\(|\biwr\b|\birm\b)/.test(lower);
381
+ const executes = /(?:iex|invoke-expression)\s*[.(]/.test(lower);
382
+ return downloads && executes;
383
+ },
384
+ };
385
+ /**
386
+ * Cloud instance metadata service targets (AWS / GCP / Azure / Alibaba /
387
+ * Oracle / DigitalOcean / OpenStack), in dotted, decimal or hex form for the
388
+ * AWS IMDS address. The IMDS hostnames are not routable on any ordinary
389
+ * network, so a match is always an SSRF attempt regardless of the field it
390
+ * appears in.
391
+ */
392
+ const CLOUD_METADATA_URL = {
393
+ id: 'cloud-metadata-url',
394
+ scope: 'always',
395
+ test: (v) => /https?:\/\/(?:169\.254\.169\.254|2852039166|0xa9fea9fe)(?::\d+)?\//.test(v) ||
396
+ /https?:\/\/(?:metadata\.google\.internal|169\.254\.169\.254\.metadata\.azure\.com|100\.100\.100\.200)\//.test(v),
397
+ };
398
+ /** Well-known cloud credential / IMDS token paths or hostnames. */
399
+ const CLOUD_CREDENTIAL_PATH = {
400
+ id: 'cloud-credential-path',
401
+ scope: 'always',
402
+ test: (v) => /\/latest\/(?:meta-data|api\/token)/.test(v) ||
403
+ /\/computeMetadata\/v1\//.test(v) ||
404
+ /\/metadata\/instance\//.test(v) ||
405
+ /(?:metadata\.aliyuninc\.com|169\.254\.170\.2)\//.test(v),
406
+ };
407
+ const RULES = [
408
+ COMMAND_EXPANSION,
409
+ SHELL_CHAINING,
410
+ DOWNLOADER_PIPE,
411
+ SENSITIVE_FILE_READ,
412
+ FORCE_DELETE_ROOT,
413
+ REVERSE_SHELL,
414
+ POWERSHELL_CRADLE,
415
+ CLOUD_METADATA_URL,
416
+ CLOUD_CREDENTIAL_PATH,
417
+ ];
418
+ /**
419
+ * Cap on total argument text inspected per call. When a single call contains
420
+ * more text than this, it cannot be fully inspected and the guard blocks the
421
+ * call (fail-closed) rather than treating the unexamined portion as safe.
422
+ * This keeps a single call from doing unbounded work while preventing an
423
+ * attacker from padding a payload past the budget to smuggle a command.
424
+ */
425
+ const MAX_SCAN_BYTES = 1000000;
426
+ /**
427
+ * Rule id reported when a call contains more text than the scan budget and
428
+ * therefore cannot be fully inspected.
429
+ */
430
+ const SCAN_LIMIT_RULE_ID = 'scan-limit-exceeded';
431
+ /**
432
+ * Inspect tool call arguments for high-confidence dangerous payloads.
433
+ *
434
+ * Every string value reachable from the arguments object (including arrays
435
+ * and nested objects) is checked. Strings inside a field whose key is named
436
+ * for executable content (and everything nested beneath it) are also
437
+ * checked against the execution-tier rules; other strings are checked only
438
+ * against the always-on (SSRF/credential) rules. Non-string values are
439
+ * ignored.
440
+ *
441
+ * @returns `{ blocked: false }` when nothing matched, otherwise the id of
442
+ * the first matching rule.
443
+ */
444
+ export const inspectToolArguments = (args) => {
445
+ let budget = MAX_SCAN_BYTES;
446
+ const scan = (node, execution) => {
447
+ if (typeof node === 'string') {
448
+ // Fail closed: if this string cannot be fully inspected within the
449
+ // remaining budget, block the call instead of silently passing the
450
+ // unexamined content through.
451
+ if (node.length > budget)
452
+ return SCAN_LIMIT_RULE_ID;
453
+ budget -= node.length;
454
+ for (const rule of RULES) {
455
+ if (rule.scope === 'execution' && !execution)
456
+ continue;
457
+ if (rule.test(node))
458
+ return rule.id;
459
+ }
460
+ return undefined;
461
+ }
462
+ if (Array.isArray(node)) {
463
+ for (const item of node) {
464
+ const hit = scan(item, execution);
465
+ if (hit)
466
+ return hit;
467
+ }
468
+ return undefined;
469
+ }
470
+ if (node !== null && typeof node === 'object') {
471
+ for (const [key, value] of Object.entries(node)) {
472
+ // A command-named field puts its whole subtree into execution scope;
473
+ // other fields keep the scope inherited from their parent.
474
+ const hit = scan(value, execution || isExecutionKey(key));
475
+ if (hit)
476
+ return hit;
477
+ }
478
+ }
479
+ return undefined;
480
+ };
481
+ // A top-level bare string is not a named execution field, so only the
482
+ // always-on rules apply to it. (In MCP, tool call arguments are an object;
483
+ // bare-string inputs exist mainly for testing.)
484
+ const ruleId = scan(args, false);
485
+ return ruleId ? { blocked: true, ruleId } : { blocked: false };
486
+ };
487
+ /**
488
+ * Assert that tool call arguments are safe. Throws {@link ToolCallBlockedError}
489
+ * (fail-closed) when a high-confidence dangerous pattern is present.
490
+ */
491
+ export const assertToolCallArgumentsSafe = (args, env = process.env) => {
492
+ if (!isToolCallGuardEnabled(env))
493
+ return;
494
+ const result = inspectToolArguments(args);
495
+ if (result.blocked && result.ruleId) {
496
+ throw new ToolCallBlockedError(`Blocked by tool call guard: tool call arguments matched rule '${result.ruleId}'`, result.ruleId);
497
+ }
498
+ };
499
+ //# sourceMappingURL=toolCallGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolCallGuard.js","sourceRoot":"","sources":["../../src/middlewares/toolCallGuard.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { metrics } from '../controllers/metricsController.js';
1
2
  import { managePersonalOAuth } from '../controllers/personalOAuthController.js';
2
3
  import { listMyCredentials, updateMyCredential } from '../controllers/credentialBindingController.js';
3
4
  import express from 'express';
@@ -53,6 +54,7 @@ export const initRoutes = async (app) => {
53
54
  }
54
55
  // Health check endpoint (no auth required, accessible at /health)
55
56
  app.get('/health', healthCheck);
57
+ app.get('/metrics', metrics);
56
58
  // Hosted data-plane webhook ingress. HMAC-authenticated by INTERNAL_API_SECRET.
57
59
  app.post('/internal/v1/events', hostedInternalEventRateLimiter, receiveHostedInternalEvent);
58
60
  app.get('/internal/v1/hosted/runtime-catalog', hostedInternalEventRateLimiter, getHostedInternalRuntimeCatalog);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"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"}
@@ -127,6 +127,7 @@ export const createGroup = async (name, description, servers = [], owner, access
127
127
  id: randomUUID(),
128
128
  name,
129
129
  description,
130
+ ...(access.instructions ? { instructions: access.instructions } : {}),
130
131
  servers: validServers,
131
132
  owner: owner || 'admin',
132
133
  visibility: access.visibility ?? 'private',