@occam-scaly/mcp-server 0.1.17 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -10,6 +10,32 @@ const client_js_1 = require("./client.js");
10
10
  const audit_js_1 = require("./audit.js");
11
11
  const index_js_2 = require("./tools/index.js");
12
12
  const index_js_3 = require("./resources/index.js");
13
+ function parseGlobalToolTimeoutMs() {
14
+ const raw = process.env.SCALY_MCP_TIMEOUT_MS;
15
+ if (!raw)
16
+ return null;
17
+ const n = Number(raw);
18
+ if (!Number.isFinite(n) || n <= 0)
19
+ return null;
20
+ return Math.max(1000, Math.floor(n));
21
+ }
22
+ async function withTimeout(promise, timeoutMs) {
23
+ let timer = null;
24
+ const timeout = new Promise((_, reject) => {
25
+ timer = setTimeout(() => {
26
+ const err = new Error(`Tool call exceeded SCALY_MCP_TIMEOUT_MS=${timeoutMs}ms`);
27
+ err.code = 'SCALY_MCP_TIMEOUT';
28
+ reject(err);
29
+ }, timeoutMs);
30
+ });
31
+ try {
32
+ return await Promise.race([promise, timeout]);
33
+ }
34
+ finally {
35
+ if (timer)
36
+ clearTimeout(timer);
37
+ }
38
+ }
13
39
  async function main() {
14
40
  // Load configuration
15
41
  const config = (0, config_js_1.loadConfig)();
@@ -83,7 +109,10 @@ async function main() {
83
109
  // Validate input
84
110
  const validatedInput = tool.inputSchema.parse(args || {});
85
111
  // Execute tool
86
- const result = await tool.handler(validatedInput);
112
+ const globalTimeoutMs = parseGlobalToolTimeoutMs();
113
+ const result = globalTimeoutMs
114
+ ? await withTimeout(tool.handler(validatedInput), globalTimeoutMs)
115
+ : await tool.handler(validatedInput);
87
116
  const meta = {
88
117
  request_id,
89
118
  duration_ms: Date.now() - startedAt
@@ -106,6 +135,27 @@ async function main() {
106
135
  };
107
136
  }
108
137
  catch (err) {
138
+ if (err?.code === 'SCALY_MCP_TIMEOUT') {
139
+ const meta = {
140
+ request_id,
141
+ duration_ms: Date.now() - startedAt
142
+ };
143
+ const envelope = {
144
+ success: false,
145
+ error: {
146
+ code: 'TIMEOUT',
147
+ message: err.message,
148
+ retriable: true
149
+ },
150
+ meta
151
+ };
152
+ return {
153
+ content: [
154
+ { type: 'text', text: JSON.stringify(envelope) }
155
+ ],
156
+ isError: true
157
+ };
158
+ }
109
159
  // Handle validation errors
110
160
  if (err.name === 'ZodError') {
111
161
  const issues = Array.isArray(err.errors)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/tools/db.ts"],"names":[],"mappings":"AAaA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAqd3D,eAAO,MAAM,OAAO,EAAE,cAAc,EA4ZnC,CAAC"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/tools/db.ts"],"names":[],"mappings":"AAaA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAmhB3D,eAAO,MAAM,OAAO,EAAE,cAAc,EAggBnC,CAAC"}
package/dist/tools/db.js CHANGED
@@ -17,6 +17,51 @@ const client_js_1 = require("../client.js");
17
17
  const jwt_js_1 = require("../utils/jwt.js");
18
18
  const paths_js_1 = require("../utils/paths.js");
19
19
  const index_js_1 = require("./index.js");
20
+ const addonQueueTails = new Map();
21
+ async function withAddonQueue(addonId, fn) {
22
+ const requestedAt = Date.now();
23
+ const tail = addonQueueTails.get(addonId) || Promise.resolve();
24
+ let release = () => { };
25
+ const gate = new Promise((resolve) => {
26
+ release = resolve;
27
+ });
28
+ const nextTail = tail.then(() => gate);
29
+ addonQueueTails.set(addonId, nextTail);
30
+ try {
31
+ await tail;
32
+ const queuedMs = Date.now() - requestedAt;
33
+ return await fn(queuedMs);
34
+ }
35
+ finally {
36
+ try {
37
+ release();
38
+ }
39
+ catch { }
40
+ if (addonQueueTails.get(addonId) === nextTail) {
41
+ addonQueueTails.delete(addonId);
42
+ }
43
+ }
44
+ }
45
+ function sleep(ms) {
46
+ return new Promise((r) => setTimeout(r, ms));
47
+ }
48
+ function isLikelyTransientDbError(err) {
49
+ const msg = String(err?.message || err || '').toLowerCase();
50
+ const code = String(err?.code || '').toLowerCase();
51
+ if (code.includes('etimedout') || code.includes('timeout'))
52
+ return true;
53
+ if (msg.includes('timed out'))
54
+ return true;
55
+ if (msg.includes('timeout'))
56
+ return true;
57
+ if (msg.includes('connection terminated'))
58
+ return true;
59
+ if (msg.includes('server closed the connection'))
60
+ return true;
61
+ if (msg.includes('socket hang up'))
62
+ return true;
63
+ return false;
64
+ }
20
65
  function deriveDomainFromApiUrl(apiUrl) {
21
66
  const host = new URL(apiUrl).host;
22
67
  return host.replace(/^api-/, '').replace(/^api\./, '');
@@ -311,10 +356,12 @@ async function withTunnelPort({ bearer, apiUrl, fn }) {
311
356
  }
312
357
  }
313
358
  async function withTunnel({ bearer, apiUrl, connectInfo, fn }) {
359
+ const tunnelStartedAt = Date.now();
314
360
  return await withTunnelPort({
315
361
  bearer,
316
362
  apiUrl,
317
363
  fn: async (port) => {
364
+ const tunnelMs = Date.now() - tunnelStartedAt;
318
365
  const client = new pg_1.Client({
319
366
  host: '127.0.0.1',
320
367
  port,
@@ -324,8 +371,20 @@ async function withTunnel({ bearer, apiUrl, connectInfo, fn }) {
324
371
  ssl: { rejectUnauthorized: false }
325
372
  });
326
373
  try {
374
+ const connectStartedAt = Date.now();
327
375
  await client.connect();
328
- return await fn(client);
376
+ const connectMs = Date.now() - connectStartedAt;
377
+ const queryStartedAt = Date.now();
378
+ const data = await fn(client);
379
+ const queryMs = Date.now() - queryStartedAt;
380
+ return {
381
+ data,
382
+ timing_ms: {
383
+ tunnel_ms: tunnelMs,
384
+ connect_ms: connectMs,
385
+ query_ms: queryMs
386
+ }
387
+ };
329
388
  }
330
389
  finally {
331
390
  try {
@@ -452,33 +511,61 @@ exports.dbTools = [
452
511
  retriable: false
453
512
  });
454
513
  }
455
- const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
456
- const result = await withTunnel({
457
- bearer: cfg.oidcToken,
458
- apiUrl: cfg.apiUrl,
459
- connectInfo: {
460
- username: proxy.username,
461
- token: proxy.token,
462
- database: proxy.database
463
- },
464
- fn: async (client) => {
465
- const timeout = Math.max(1000, Math.min(60_000, input.timeout_ms));
466
- await client.query(`SET statement_timeout TO ${timeout}`);
467
- return await client.query(input.sql, input.params || []);
514
+ const bearer = cfg.oidcToken;
515
+ return await withAddonQueue(input.addon_id, async (queued_ms) => {
516
+ const proxyStartedAt = Date.now();
517
+ const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
518
+ const proxy_ms = Date.now() - proxyStartedAt;
519
+ const runOnce = async () => {
520
+ return await withTunnel({
521
+ bearer,
522
+ apiUrl: cfg.apiUrl,
523
+ connectInfo: {
524
+ username: proxy.username,
525
+ token: proxy.token,
526
+ database: proxy.database
527
+ },
528
+ fn: async (client) => {
529
+ const timeout = Math.max(1000, Math.min(60_000, input.timeout_ms));
530
+ await client.query(`SET statement_timeout TO ${timeout}`);
531
+ return await client.query(input.sql, input.params || []);
532
+ }
533
+ });
534
+ };
535
+ let attempt = 1;
536
+ let result;
537
+ try {
538
+ result = await runOnce();
468
539
  }
469
- });
470
- const columns = result.fields.map((f) => f.name);
471
- const shaped = shapeRowsWithLimits(result.rows, input.max_rows, input.max_bytes);
472
- return (0, index_js_1.ok)({
473
- addon_id: input.addon_id,
474
- columns,
475
- rows: shaped.rows,
476
- row_count_returned: shaped.rows.length,
477
- row_count_reported: result.rowCount ?? null,
478
- truncated: shaped.truncated,
479
- max_rows: input.max_rows,
480
- max_bytes: input.max_bytes,
481
- bytes_returned: shaped.bytes_returned
540
+ catch (err) {
541
+ if (isLikelyTransientDbError(err)) {
542
+ attempt = 2;
543
+ await sleep(200 + Math.floor(Math.random() * 300));
544
+ result = await runOnce();
545
+ }
546
+ else {
547
+ throw err;
548
+ }
549
+ }
550
+ const columns = result.data.fields.map((f) => f.name);
551
+ const shaped = shapeRowsWithLimits(result.data.rows, input.max_rows, input.max_bytes);
552
+ return (0, index_js_1.ok)({
553
+ addon_id: input.addon_id,
554
+ columns,
555
+ rows: shaped.rows,
556
+ row_count_returned: shaped.rows.length,
557
+ row_count_reported: result.data.rowCount ?? null,
558
+ truncated: shaped.truncated,
559
+ max_rows: input.max_rows,
560
+ max_bytes: input.max_bytes,
561
+ bytes_returned: shaped.bytes_returned,
562
+ timing_ms: {
563
+ queued_ms,
564
+ proxy_ms,
565
+ ...result.timing_ms
566
+ },
567
+ attempts: attempt
568
+ });
482
569
  });
483
570
  }
484
571
  catch (err) {
@@ -544,26 +631,36 @@ exports.dbTools = [
544
631
  retriable: false
545
632
  });
546
633
  }
547
- const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
548
- const execResult = await withTunnel({
549
- bearer: cfg.oidcToken,
550
- apiUrl: cfg.apiUrl,
551
- connectInfo: {
552
- username: proxy.username,
553
- token: proxy.token,
554
- database: proxy.database
555
- },
556
- fn: async (client) => {
557
- const timeout = Math.max(1000, Math.min(60_000, input.timeout_ms));
558
- await client.query(`SET statement_timeout TO ${timeout}`);
559
- return await client.query(input.sql, input.params || []);
560
- }
561
- });
562
- return (0, index_js_1.ok)({
563
- preview: false,
564
- addon_id: input.addon_id,
565
- row_count: execResult.rowCount ?? null,
566
- command: execResult.command ?? null
634
+ const bearer = cfg.oidcToken;
635
+ return await withAddonQueue(input.addon_id, async (queued_ms) => {
636
+ const proxyStartedAt = Date.now();
637
+ const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
638
+ const proxy_ms = Date.now() - proxyStartedAt;
639
+ const execResult = await withTunnel({
640
+ bearer,
641
+ apiUrl: cfg.apiUrl,
642
+ connectInfo: {
643
+ username: proxy.username,
644
+ token: proxy.token,
645
+ database: proxy.database
646
+ },
647
+ fn: async (client) => {
648
+ const timeout = Math.max(1000, Math.min(60_000, input.timeout_ms));
649
+ await client.query(`SET statement_timeout TO ${timeout}`);
650
+ return await client.query(input.sql, input.params || []);
651
+ }
652
+ });
653
+ return (0, index_js_1.ok)({
654
+ preview: false,
655
+ addon_id: input.addon_id,
656
+ row_count: execResult.data.rowCount ?? null,
657
+ command: execResult.data.command ?? null,
658
+ timing_ms: {
659
+ queued_ms,
660
+ proxy_ms,
661
+ ...execResult.timing_ms
662
+ }
663
+ });
567
664
  });
568
665
  }
569
666
  catch (err) {
@@ -663,28 +760,38 @@ exports.dbTools = [
663
760
  retriable: false
664
761
  });
665
762
  }
666
- const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
667
- const res = await withTunnel({
668
- bearer: cfg.oidcToken,
669
- apiUrl: cfg.apiUrl,
670
- connectInfo: {
671
- username: proxy.username,
672
- token: proxy.token,
673
- database: proxy.database
674
- },
675
- fn: async (client) => {
676
- const timeout = Math.max(1000, Math.min(300_000, input.timeout_ms));
677
- await client.query(`SET statement_timeout TO ${timeout}`);
678
- return await client.query(sql);
679
- }
680
- });
681
- return (0, index_js_1.ok)({
682
- preview: false,
683
- addon_id: input.addon_id,
684
- migration_path: rel,
685
- command: res.command ?? null,
686
- row_count: res.rowCount ?? null,
687
- bytes: Buffer.byteLength(sql, 'utf8')
763
+ const bearer = cfg.oidcToken;
764
+ return await withAddonQueue(input.addon_id, async (queued_ms) => {
765
+ const proxyStartedAt = Date.now();
766
+ const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
767
+ const proxy_ms = Date.now() - proxyStartedAt;
768
+ const res = await withTunnel({
769
+ bearer,
770
+ apiUrl: cfg.apiUrl,
771
+ connectInfo: {
772
+ username: proxy.username,
773
+ token: proxy.token,
774
+ database: proxy.database
775
+ },
776
+ fn: async (client) => {
777
+ const timeout = Math.max(1000, Math.min(300_000, input.timeout_ms));
778
+ await client.query(`SET statement_timeout TO ${timeout}`);
779
+ return await client.query(sql);
780
+ }
781
+ });
782
+ return (0, index_js_1.ok)({
783
+ preview: false,
784
+ addon_id: input.addon_id,
785
+ migration_path: rel,
786
+ command: res.data.command ?? null,
787
+ row_count: res.data.rowCount ?? null,
788
+ bytes: Buffer.byteLength(sql, 'utf8'),
789
+ timing_ms: {
790
+ queued_ms,
791
+ proxy_ms,
792
+ ...res.timing_ms
793
+ }
794
+ });
688
795
  });
689
796
  }
690
797
  catch (err) {
@@ -725,47 +832,64 @@ exports.dbTools = [
725
832
  retriable: false
726
833
  });
727
834
  }
728
- const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
729
- const timeout = Math.max(1000, Math.min(300_000, input.timeout_ms));
730
- const env = {
731
- ...process.env,
732
- PGPASSWORD: proxy.token,
733
- PGSSLMODE: 'require',
734
- PGCONNECT_TIMEOUT: String(Math.ceil(timeout / 1000))
735
- };
736
- const res = await withTunnelPort({
737
- bearer: cfg.oidcToken,
738
- apiUrl: cfg.apiUrl,
739
- fn: (port) => (0, node_child_process_1.spawnSync)('pg_dump', [
740
- '--schema-only',
741
- '--no-owner',
742
- '--no-privileges',
743
- '-h',
744
- '127.0.0.1',
745
- '-p',
746
- String(port),
747
- '-U',
748
- proxy.username,
749
- '-d',
750
- proxy.database
751
- ], { encoding: 'utf8', env })
752
- });
753
- if (res.status !== 0) {
754
- const msg = res.error?.message ||
755
- res.stderr ||
756
- 'pg_dump failed (is it installed and on PATH?)';
757
- return (0, index_js_1.fail)({
758
- code: 'NOT_SUPPORTED',
759
- message: msg,
760
- retriable: false
835
+ const bearer = cfg.oidcToken;
836
+ return await withAddonQueue(input.addon_id, async (queued_ms) => {
837
+ const proxyStartedAt = Date.now();
838
+ const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
839
+ const proxy_ms = Date.now() - proxyStartedAt;
840
+ const timeout = Math.max(1000, Math.min(300_000, input.timeout_ms));
841
+ const env = {
842
+ ...process.env,
843
+ PGPASSWORD: proxy.token,
844
+ PGSSLMODE: 'require',
845
+ PGCONNECT_TIMEOUT: String(Math.ceil(timeout / 1000))
846
+ };
847
+ const tunnelStartedAt = Date.now();
848
+ const res = await withTunnelPort({
849
+ bearer,
850
+ apiUrl: cfg.apiUrl,
851
+ fn: (port) => {
852
+ const tunnel_ms = Date.now() - tunnelStartedAt;
853
+ const dumpStartedAt = Date.now();
854
+ const out = (0, node_child_process_1.spawnSync)('pg_dump', [
855
+ '--schema-only',
856
+ '--no-owner',
857
+ '--no-privileges',
858
+ '-h',
859
+ '127.0.0.1',
860
+ '-p',
861
+ String(port),
862
+ '-U',
863
+ proxy.username,
864
+ '-d',
865
+ proxy.database
866
+ ], { encoding: 'utf8', env });
867
+ const dump_ms = Date.now() - dumpStartedAt;
868
+ return { out, timing_ms: { tunnel_ms, dump_ms } };
869
+ }
870
+ });
871
+ if (res.out.status !== 0) {
872
+ const msg = res.out.error?.message ||
873
+ res.out.stderr ||
874
+ 'pg_dump failed (is it installed and on PATH?)';
875
+ return (0, index_js_1.fail)({
876
+ code: 'NOT_SUPPORTED',
877
+ message: msg,
878
+ retriable: false
879
+ });
880
+ }
881
+ node_fs_1.default.mkdirSync(node_path_1.default.dirname(abs), { recursive: true });
882
+ node_fs_1.default.writeFileSync(abs, res.out.stdout, 'utf8');
883
+ return (0, index_js_1.ok)({
884
+ addon_id: input.addon_id,
885
+ output_path: rel,
886
+ bytes_written: Buffer.byteLength(res.out.stdout, 'utf8'),
887
+ timing_ms: {
888
+ queued_ms,
889
+ proxy_ms,
890
+ ...res.timing_ms
891
+ }
761
892
  });
762
- }
763
- node_fs_1.default.mkdirSync(node_path_1.default.dirname(abs), { recursive: true });
764
- node_fs_1.default.writeFileSync(abs, res.stdout, 'utf8');
765
- return (0, index_js_1.ok)({
766
- addon_id: input.addon_id,
767
- output_path: rel,
768
- bytes_written: Buffer.byteLength(res.stdout, 'utf8')
769
893
  });
770
894
  }
771
895
  catch (err) {