@dotsetlabs/tollgate 0.1.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 (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +885 -0
  3. package/dist/analyzers/filesystem.d.ts +26 -0
  4. package/dist/analyzers/filesystem.d.ts.map +1 -0
  5. package/dist/analyzers/filesystem.js +284 -0
  6. package/dist/analyzers/filesystem.js.map +1 -0
  7. package/dist/analyzers/http.d.ts +90 -0
  8. package/dist/analyzers/http.d.ts.map +1 -0
  9. package/dist/analyzers/http.js +433 -0
  10. package/dist/analyzers/http.js.map +1 -0
  11. package/dist/analyzers/index.d.ts +101 -0
  12. package/dist/analyzers/index.d.ts.map +1 -0
  13. package/dist/analyzers/index.js +342 -0
  14. package/dist/analyzers/index.js.map +1 -0
  15. package/dist/analyzers/loader.d.ts +114 -0
  16. package/dist/analyzers/loader.d.ts.map +1 -0
  17. package/dist/analyzers/loader.js +184 -0
  18. package/dist/analyzers/loader.js.map +1 -0
  19. package/dist/analyzers/prompt-injection.d.ts +95 -0
  20. package/dist/analyzers/prompt-injection.d.ts.map +1 -0
  21. package/dist/analyzers/prompt-injection.js +725 -0
  22. package/dist/analyzers/prompt-injection.js.map +1 -0
  23. package/dist/analyzers/sdk.d.ts +230 -0
  24. package/dist/analyzers/sdk.d.ts.map +1 -0
  25. package/dist/analyzers/sdk.js +283 -0
  26. package/dist/analyzers/sdk.js.map +1 -0
  27. package/dist/analyzers/shell.d.ts +20 -0
  28. package/dist/analyzers/shell.d.ts.map +1 -0
  29. package/dist/analyzers/shell.js +297 -0
  30. package/dist/analyzers/shell.js.map +1 -0
  31. package/dist/analyzers/sql.d.ts +37 -0
  32. package/dist/analyzers/sql.d.ts.map +1 -0
  33. package/dist/analyzers/sql.js +455 -0
  34. package/dist/analyzers/sql.js.map +1 -0
  35. package/dist/analyzers/types.d.ts +117 -0
  36. package/dist/analyzers/types.d.ts.map +1 -0
  37. package/dist/analyzers/types.js +46 -0
  38. package/dist/analyzers/types.js.map +1 -0
  39. package/dist/approval/interactive.d.ts +72 -0
  40. package/dist/approval/interactive.d.ts.map +1 -0
  41. package/dist/approval/interactive.js +550 -0
  42. package/dist/approval/interactive.js.map +1 -0
  43. package/dist/approval/terminal.d.ts +59 -0
  44. package/dist/approval/terminal.d.ts.map +1 -0
  45. package/dist/approval/terminal.js +238 -0
  46. package/dist/approval/terminal.js.map +1 -0
  47. package/dist/approval/types.d.ts +66 -0
  48. package/dist/approval/types.d.ts.map +1 -0
  49. package/dist/approval/types.js +2 -0
  50. package/dist/approval/types.js.map +1 -0
  51. package/dist/audit/exporter.d.ts +138 -0
  52. package/dist/audit/exporter.d.ts.map +1 -0
  53. package/dist/audit/exporter.js +366 -0
  54. package/dist/audit/exporter.js.map +1 -0
  55. package/dist/audit/logger.d.ts +156 -0
  56. package/dist/audit/logger.d.ts.map +1 -0
  57. package/dist/audit/logger.js +406 -0
  58. package/dist/audit/logger.js.map +1 -0
  59. package/dist/audit/redaction.d.ts +110 -0
  60. package/dist/audit/redaction.d.ts.map +1 -0
  61. package/dist/audit/redaction.js +307 -0
  62. package/dist/audit/redaction.js.map +1 -0
  63. package/dist/audit/schema.d.ts +76 -0
  64. package/dist/audit/schema.d.ts.map +1 -0
  65. package/dist/audit/schema.js +122 -0
  66. package/dist/audit/schema.js.map +1 -0
  67. package/dist/cli/commands/doctor.d.ts +34 -0
  68. package/dist/cli/commands/doctor.d.ts.map +1 -0
  69. package/dist/cli/commands/doctor.js +431 -0
  70. package/dist/cli/commands/doctor.js.map +1 -0
  71. package/dist/cli/commands/export.d.ts +18 -0
  72. package/dist/cli/commands/export.d.ts.map +1 -0
  73. package/dist/cli/commands/export.js +63 -0
  74. package/dist/cli/commands/export.js.map +1 -0
  75. package/dist/cli/commands/init.d.ts +12 -0
  76. package/dist/cli/commands/init.d.ts.map +1 -0
  77. package/dist/cli/commands/init.js +102 -0
  78. package/dist/cli/commands/init.js.map +1 -0
  79. package/dist/cli/commands/logs.d.ts +11 -0
  80. package/dist/cli/commands/logs.d.ts.map +1 -0
  81. package/dist/cli/commands/logs.js +60 -0
  82. package/dist/cli/commands/logs.js.map +1 -0
  83. package/dist/cli/commands/scan.d.ts +29 -0
  84. package/dist/cli/commands/scan.d.ts.map +1 -0
  85. package/dist/cli/commands/scan.js +251 -0
  86. package/dist/cli/commands/scan.js.map +1 -0
  87. package/dist/cli/commands/serve.d.ts +26 -0
  88. package/dist/cli/commands/serve.d.ts.map +1 -0
  89. package/dist/cli/commands/serve.js +424 -0
  90. package/dist/cli/commands/serve.js.map +1 -0
  91. package/dist/cli/commands/start.d.ts +20 -0
  92. package/dist/cli/commands/start.d.ts.map +1 -0
  93. package/dist/cli/commands/start.js +82 -0
  94. package/dist/cli/commands/start.js.map +1 -0
  95. package/dist/cli/commands/stats.d.ts +10 -0
  96. package/dist/cli/commands/stats.d.ts.map +1 -0
  97. package/dist/cli/commands/stats.js +42 -0
  98. package/dist/cli/commands/stats.js.map +1 -0
  99. package/dist/cli/commands/templates.d.ts +26 -0
  100. package/dist/cli/commands/templates.d.ts.map +1 -0
  101. package/dist/cli/commands/templates.js +221 -0
  102. package/dist/cli/commands/templates.js.map +1 -0
  103. package/dist/cli/commands/validate.d.ts +12 -0
  104. package/dist/cli/commands/validate.d.ts.map +1 -0
  105. package/dist/cli/commands/validate.js +107 -0
  106. package/dist/cli/commands/validate.js.map +1 -0
  107. package/dist/cli/commands/wrap.d.ts +19 -0
  108. package/dist/cli/commands/wrap.d.ts.map +1 -0
  109. package/dist/cli/commands/wrap.js +59 -0
  110. package/dist/cli/commands/wrap.js.map +1 -0
  111. package/dist/cli/index.d.ts +17 -0
  112. package/dist/cli/index.d.ts.map +1 -0
  113. package/dist/cli/index.js +202 -0
  114. package/dist/cli/index.js.map +1 -0
  115. package/dist/cli/ui.d.ts +139 -0
  116. package/dist/cli/ui.d.ts.map +1 -0
  117. package/dist/cli/ui.js +271 -0
  118. package/dist/cli/ui.js.map +1 -0
  119. package/dist/constants.d.ts +33 -0
  120. package/dist/constants.d.ts.map +1 -0
  121. package/dist/constants.js +54 -0
  122. package/dist/constants.js.map +1 -0
  123. package/dist/errors.d.ts +28 -0
  124. package/dist/errors.d.ts.map +1 -0
  125. package/dist/errors.js +37 -0
  126. package/dist/errors.js.map +1 -0
  127. package/dist/index.d.ts +49 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +82 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/orchestrator/index.d.ts +11 -0
  132. package/dist/orchestrator/index.d.ts.map +1 -0
  133. package/dist/orchestrator/index.js +10 -0
  134. package/dist/orchestrator/index.js.map +1 -0
  135. package/dist/orchestrator/manager.d.ts +127 -0
  136. package/dist/orchestrator/manager.d.ts.map +1 -0
  137. package/dist/orchestrator/manager.js +498 -0
  138. package/dist/orchestrator/manager.js.map +1 -0
  139. package/dist/orchestrator/types.d.ts +141 -0
  140. package/dist/orchestrator/types.d.ts.map +1 -0
  141. package/dist/orchestrator/types.js +9 -0
  142. package/dist/orchestrator/types.js.map +1 -0
  143. package/dist/policy/engine.d.ts +55 -0
  144. package/dist/policy/engine.d.ts.map +1 -0
  145. package/dist/policy/engine.js +288 -0
  146. package/dist/policy/engine.js.map +1 -0
  147. package/dist/policy/natural-language.d.ts +141 -0
  148. package/dist/policy/natural-language.d.ts.map +1 -0
  149. package/dist/policy/natural-language.js +552 -0
  150. package/dist/policy/natural-language.js.map +1 -0
  151. package/dist/policy/parser.d.ts +141 -0
  152. package/dist/policy/parser.d.ts.map +1 -0
  153. package/dist/policy/parser.js +314 -0
  154. package/dist/policy/parser.js.map +1 -0
  155. package/dist/policy/types.d.ts +428 -0
  156. package/dist/policy/types.d.ts.map +1 -0
  157. package/dist/policy/types.js +32 -0
  158. package/dist/policy/types.js.map +1 -0
  159. package/dist/policy/validator.d.ts +72 -0
  160. package/dist/policy/validator.d.ts.map +1 -0
  161. package/dist/policy/validator.js +453 -0
  162. package/dist/policy/validator.js.map +1 -0
  163. package/dist/proxy/bridge.d.ts +84 -0
  164. package/dist/proxy/bridge.d.ts.map +1 -0
  165. package/dist/proxy/bridge.js +217 -0
  166. package/dist/proxy/bridge.js.map +1 -0
  167. package/dist/proxy/client.d.ts +130 -0
  168. package/dist/proxy/client.d.ts.map +1 -0
  169. package/dist/proxy/client.js +290 -0
  170. package/dist/proxy/client.js.map +1 -0
  171. package/dist/proxy/server.d.ts +111 -0
  172. package/dist/proxy/server.d.ts.map +1 -0
  173. package/dist/proxy/server.js +444 -0
  174. package/dist/proxy/server.js.map +1 -0
  175. package/dist/scanner.d.ts +91 -0
  176. package/dist/scanner.d.ts.map +1 -0
  177. package/dist/scanner.js +373 -0
  178. package/dist/scanner.js.map +1 -0
  179. package/dist/session/index.d.ts +32 -0
  180. package/dist/session/index.d.ts.map +1 -0
  181. package/dist/session/index.js +31 -0
  182. package/dist/session/index.js.map +1 -0
  183. package/dist/session/manager.d.ts +166 -0
  184. package/dist/session/manager.d.ts.map +1 -0
  185. package/dist/session/manager.js +454 -0
  186. package/dist/session/manager.js.map +1 -0
  187. package/dist/session/sqlite-store.d.ts +54 -0
  188. package/dist/session/sqlite-store.d.ts.map +1 -0
  189. package/dist/session/sqlite-store.js +209 -0
  190. package/dist/session/sqlite-store.js.map +1 -0
  191. package/dist/session/types.d.ts +179 -0
  192. package/dist/session/types.d.ts.map +1 -0
  193. package/dist/session/types.js +38 -0
  194. package/dist/session/types.js.map +1 -0
  195. package/dist/templates.d.ts +64 -0
  196. package/dist/templates.d.ts.map +1 -0
  197. package/dist/templates.js +451 -0
  198. package/dist/templates.js.map +1 -0
  199. package/dist/utils/config.d.ts +57 -0
  200. package/dist/utils/config.d.ts.map +1 -0
  201. package/dist/utils/config.js +104 -0
  202. package/dist/utils/config.js.map +1 -0
  203. package/dist/utils/errors.d.ts +18 -0
  204. package/dist/utils/errors.d.ts.map +1 -0
  205. package/dist/utils/errors.js +35 -0
  206. package/dist/utils/errors.js.map +1 -0
  207. package/dist/utils/logger.d.ts +144 -0
  208. package/dist/utils/logger.d.ts.map +1 -0
  209. package/dist/utils/logger.js +300 -0
  210. package/dist/utils/logger.js.map +1 -0
  211. package/dist/wizard.d.ts +68 -0
  212. package/dist/wizard.d.ts.map +1 -0
  213. package/dist/wizard.js +395 -0
  214. package/dist/wizard.js.map +1 -0
  215. package/package.json +99 -0
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tollgate Logs Command
3
+ *
4
+ * Displays recent audit logs.
5
+ */
6
+ export interface LogsOptions {
7
+ limit: string;
8
+ auditPath?: string;
9
+ }
10
+ export declare function showLogs(options: LogsOptions): void;
11
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CA0CnD"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Tollgate Logs Command
3
+ *
4
+ * Displays recent audit logs.
5
+ */
6
+ import chalk from 'chalk';
7
+ import { AuditLogger, ConfigError, TollgateError, } from '../../index.js';
8
+ export function showLogs(options) {
9
+ try {
10
+ const logger = new AuditLogger(options.auditPath);
11
+ const records = logger.getRecentCalls(parseInt(options.limit, 10));
12
+ if (records.length === 0) {
13
+ console.log(chalk.dim('No audit records found.'));
14
+ logger.close();
15
+ return;
16
+ }
17
+ console.log(chalk.bold('\nRecent Tool Calls:\n'));
18
+ for (const record of records) {
19
+ const statusColor = record.policyDecision === 'allow'
20
+ ? chalk.green
21
+ : record.policyDecision === 'deny'
22
+ ? chalk.red
23
+ : chalk.yellow;
24
+ const resultIcon = record.result === 'success'
25
+ ? chalk.green('āœ“')
26
+ : record.result === 'error'
27
+ ? chalk.red('āœ—')
28
+ : chalk.dim('?');
29
+ console.log(`${resultIcon} ${chalk.dim(record.timestamp.toISOString())} ` +
30
+ `${chalk.cyan(record.server)}:${chalk.white(record.tool)} ` +
31
+ `[${statusColor(record.policyDecision)}]` +
32
+ (record.userDecision ? ` → ${record.userDecision}` : '') +
33
+ (record.durationMs ? ` ${chalk.dim(`(${record.durationMs}ms)`)}` : ''));
34
+ }
35
+ console.log('');
36
+ logger.close();
37
+ }
38
+ catch (error) {
39
+ handleError(error);
40
+ }
41
+ }
42
+ function handleError(error) {
43
+ if (error instanceof ConfigError) {
44
+ console.error(chalk.red(`Configuration Error: ${error.message}`));
45
+ if (error.details) {
46
+ console.error(chalk.dim(JSON.stringify(error.details, null, 2)));
47
+ }
48
+ }
49
+ else if (error instanceof TollgateError) {
50
+ console.error(chalk.red(`Error [${error.code}]: ${error.message}`));
51
+ }
52
+ else if (error instanceof Error) {
53
+ console.error(chalk.red(`Error: ${error.message}`));
54
+ }
55
+ else {
56
+ console.error(chalk.red('An unknown error occurred'));
57
+ }
58
+ process.exit(1);
59
+ }
60
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Tollgate Scan Command
3
+ *
4
+ * Scans an MCP server to discover tools and assess security risks.
5
+ * Generates recommended security policies based on discovered tools.
6
+ *
7
+ * Usage:
8
+ * tollgate scan @modelcontextprotocol/server-postgres
9
+ * tollgate scan npx -y @anthropic/mcp-server-fetch
10
+ * tollgate scan --generate-config >> tollgate.yaml
11
+ */
12
+ export interface ScanOptions {
13
+ /** Path to existing config to append to */
14
+ output?: string;
15
+ /** Generate config output */
16
+ generateConfig?: boolean;
17
+ /** Append to existing config instead of creating new */
18
+ append?: boolean;
19
+ /** Server name for generated config */
20
+ serverName?: string;
21
+ /** Connection timeout in milliseconds */
22
+ timeout?: number;
23
+ /** Output as JSON */
24
+ json?: boolean;
25
+ /** Environment variables to pass (key=value format) */
26
+ env?: string[];
27
+ }
28
+ export declare function runScan(packageOrCommand: string, restArgs: string[], options: ScanOptions): Promise<void>;
29
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiBH,MAAM,WAAW,WAAW;IACxB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wDAAwD;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AA8JD,wBAAsB,OAAO,CACzB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Ff"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Tollgate Scan Command
3
+ *
4
+ * Scans an MCP server to discover tools and assess security risks.
5
+ * Generates recommended security policies based on discovered tools.
6
+ *
7
+ * Usage:
8
+ * tollgate scan @modelcontextprotocol/server-postgres
9
+ * tollgate scan npx -y @anthropic/mcp-server-fetch
10
+ * tollgate scan --generate-config >> tollgate.yaml
11
+ */
12
+ import chalk from 'chalk';
13
+ import { writeFileSync, appendFileSync, existsSync } from 'node:fs';
14
+ import { scanServer, generatePolicy, generateServerConfig, } from '../../scanner.js';
15
+ // ============================================================================
16
+ // Formatting Helpers
17
+ // ============================================================================
18
+ function getRiskIcon(risk) {
19
+ switch (risk) {
20
+ case 'safe':
21
+ return chalk.green('🟢');
22
+ case 'read':
23
+ return chalk.green('🟢');
24
+ case 'write':
25
+ return chalk.yellow('🟔');
26
+ case 'destructive':
27
+ return chalk.red('šŸ”“');
28
+ case 'dangerous':
29
+ return chalk.red('šŸ”“');
30
+ }
31
+ }
32
+ function getRiskColor(risk) {
33
+ switch (risk) {
34
+ case 'safe':
35
+ case 'read':
36
+ return chalk.green;
37
+ case 'write':
38
+ return chalk.yellow;
39
+ case 'destructive':
40
+ case 'dangerous':
41
+ return chalk.red;
42
+ }
43
+ }
44
+ function formatToolLine(tool, maxNameLen) {
45
+ const icon = getRiskIcon(tool.risk);
46
+ const name = tool.name.padEnd(maxNameLen);
47
+ const desc = tool.description.length > 50
48
+ ? tool.description.slice(0, 47) + '...'
49
+ : tool.description;
50
+ return ` ${icon} ${chalk.bold(name)} ${chalk.dim(desc)}`;
51
+ }
52
+ function printBoxTop(width) {
53
+ console.log(chalk.cyan('ā•”' + '═'.repeat(width) + 'ā•—'));
54
+ }
55
+ function printBoxMiddle(width) {
56
+ console.log(chalk.cyan('ā• ' + '═'.repeat(width) + 'ā•£'));
57
+ }
58
+ function printBoxBottom(width) {
59
+ console.log(chalk.cyan('ā•š' + '═'.repeat(width) + 'ā•'));
60
+ }
61
+ function printBoxLine(content, width) {
62
+ // eslint-disable-next-line no-control-regex
63
+ const stripped = content.replace(/\x1b\[[0-9;]*m/g, '');
64
+ const padding = width - stripped.length;
65
+ console.log(chalk.cyan('ā•‘') + content + ' '.repeat(Math.max(0, padding)) + chalk.cyan('ā•‘'));
66
+ }
67
+ // ============================================================================
68
+ // Output Formatters
69
+ // ============================================================================
70
+ function printScanResult(result) {
71
+ const boxWidth = 60;
72
+ const serverDisplay = `${result.serverCommand} ${result.serverArgs.join(' ')}`;
73
+ const shortServer = serverDisplay.length > 40
74
+ ? '...' + serverDisplay.slice(-37)
75
+ : serverDisplay;
76
+ console.log();
77
+ printBoxTop(boxWidth);
78
+ // Header
79
+ printBoxLine(` ${chalk.bold('MCP Server Security Scan')}: ${shortServer}`.padEnd(boxWidth + 20), boxWidth);
80
+ printBoxMiddle(boxWidth);
81
+ // Tools found
82
+ printBoxLine(` ${chalk.bold('Tools Found')}: ${result.toolCount}`, boxWidth);
83
+ printBoxLine('', boxWidth);
84
+ // List tools
85
+ const maxNameLen = Math.max(...result.tools.map((t) => t.name.length), 10);
86
+ for (const tool of result.tools) {
87
+ const line = formatToolLine(tool, maxNameLen);
88
+ printBoxLine(line, boxWidth);
89
+ }
90
+ printBoxMiddle(boxWidth);
91
+ // Risk Assessment
92
+ printBoxLine(` ${chalk.bold('Risk Assessment')}:`, boxWidth);
93
+ printBoxLine('', boxWidth);
94
+ for (const tool of result.tools) {
95
+ if (tool.risk !== 'safe' && tool.risk !== 'read') {
96
+ const riskColor = getRiskColor(tool.risk);
97
+ const icon = getRiskIcon(tool.risk);
98
+ const mainIndicator = tool.indicators[0]?.description ?? `${tool.risk} operation`;
99
+ printBoxLine(` ${icon} ${chalk.bold(tool.name)}: ${riskColor(mainIndicator)}`, boxWidth);
100
+ }
101
+ }
102
+ // Show safe/read tools summary
103
+ const safeCount = result.summary.safe + result.summary.read;
104
+ if (safeCount > 0) {
105
+ printBoxLine(` ${chalk.green('🟢')} ${safeCount} tool(s) are read-only (safe)`, boxWidth);
106
+ }
107
+ printBoxMiddle(boxWidth);
108
+ // Recommended Policy Summary
109
+ printBoxLine(` ${chalk.bold('Recommended Policy')}:`, boxWidth);
110
+ printBoxLine('', boxWidth);
111
+ const byAction = {
112
+ allow: result.tools.filter((t) => t.recommendedAction === 'allow').length,
113
+ smart: result.tools.filter((t) => t.recommendedAction === 'smart').length,
114
+ prompt: result.tools.filter((t) => t.recommendedAction === 'prompt').length,
115
+ deny: result.tools.filter((t) => t.recommendedAction === 'deny').length,
116
+ };
117
+ if (byAction.allow > 0) {
118
+ printBoxLine(` ${chalk.green('allow')}: ${byAction.allow} tool(s) (read-only)`, boxWidth);
119
+ }
120
+ if (byAction.smart > 0) {
121
+ printBoxLine(` ${chalk.blue('smart')}: ${byAction.smart} tool(s) (with analyzer)`, boxWidth);
122
+ }
123
+ if (byAction.prompt > 0) {
124
+ printBoxLine(` ${chalk.yellow('prompt')}: ${byAction.prompt} tool(s) (require approval)`, boxWidth);
125
+ }
126
+ if (byAction.deny > 0) {
127
+ printBoxLine(` ${chalk.red('deny')}: ${byAction.deny} tool(s) (blocked)`, boxWidth);
128
+ }
129
+ printBoxBottom(boxWidth);
130
+ console.log();
131
+ // Overall assessment
132
+ const overallColor = getRiskColor(result.overallRisk);
133
+ console.log(chalk.bold('Overall Risk: ') + overallColor(result.overallRisk.toUpperCase()));
134
+ console.log();
135
+ console.log(chalk.dim('Generate recommended config with: tollgate scan --generate-config'));
136
+ }
137
+ function printJsonResult(result) {
138
+ console.log(JSON.stringify(result, null, 2));
139
+ }
140
+ // ============================================================================
141
+ // Main Scan Command
142
+ // ============================================================================
143
+ export async function runScan(packageOrCommand, restArgs, options) {
144
+ // Parse command and args
145
+ let command;
146
+ let args;
147
+ // Check if it's an npx package reference (starts with @)
148
+ if (packageOrCommand.startsWith('@') || packageOrCommand.includes('/')) {
149
+ command = 'npx';
150
+ args = ['-y', packageOrCommand, ...restArgs];
151
+ }
152
+ else if (packageOrCommand === 'npx' || packageOrCommand === 'node') {
153
+ command = packageOrCommand;
154
+ args = restArgs;
155
+ }
156
+ else {
157
+ // Assume it's a direct command
158
+ command = packageOrCommand;
159
+ args = restArgs;
160
+ }
161
+ // Parse environment variables
162
+ const env = {};
163
+ if (options.env) {
164
+ for (const envVar of options.env) {
165
+ const [key, ...valueParts] = envVar.split('=');
166
+ if (key && valueParts.length > 0) {
167
+ env[key] = valueParts.join('=');
168
+ }
169
+ }
170
+ }
171
+ if (!options.json) {
172
+ console.log(chalk.bold('\nšŸ” Scanning MCP Server...\n'));
173
+ console.log(chalk.dim(`Command: ${command} ${args.join(' ')}`));
174
+ if (Object.keys(env).length > 0) {
175
+ console.log(chalk.dim(`Environment: ${Object.keys(env).join(', ')}`));
176
+ }
177
+ console.log();
178
+ }
179
+ try {
180
+ // Run the scan
181
+ const result = await scanServer(command, args, {
182
+ timeoutMs: options.timeout ?? 30000,
183
+ env: Object.keys(env).length > 0 ? env : undefined,
184
+ });
185
+ // Handle output format
186
+ if (options.json) {
187
+ printJsonResult(result);
188
+ return;
189
+ }
190
+ // Print scan results
191
+ printScanResult(result);
192
+ // Generate config if requested
193
+ if (options.generateConfig) {
194
+ const serverName = options.serverName ?? inferServerName(command, args);
195
+ if (options.output) {
196
+ const configContent = options.append
197
+ ? generateServerConfig(result, serverName)
198
+ : generatePolicy(result, serverName);
199
+ if (options.append && existsSync(options.output)) {
200
+ appendFileSync(options.output, '\n' + configContent);
201
+ console.log(chalk.green(`āœ“ Appended to ${options.output}`));
202
+ }
203
+ else {
204
+ writeFileSync(options.output, configContent);
205
+ console.log(chalk.green(`āœ“ Created ${options.output}`));
206
+ }
207
+ }
208
+ else {
209
+ // Output to stdout
210
+ console.log(chalk.bold('\nšŸ“„ Generated Configuration:\n'));
211
+ console.log(generatePolicy(result, serverName));
212
+ }
213
+ }
214
+ }
215
+ catch (error) {
216
+ if (!options.json) {
217
+ console.error(chalk.red('\nāœ— Scan failed'));
218
+ console.error(chalk.dim(error instanceof Error ? error.message : String(error)));
219
+ console.error();
220
+ console.error(chalk.yellow('Tips:'));
221
+ console.error(' • Ensure the MCP server package is accessible');
222
+ console.error(' • Check that required environment variables are set');
223
+ console.error(' • Try increasing timeout with --timeout <ms>');
224
+ }
225
+ else {
226
+ console.log(JSON.stringify({
227
+ error: error instanceof Error ? error.message : String(error),
228
+ success: false,
229
+ }));
230
+ }
231
+ process.exit(1);
232
+ }
233
+ }
234
+ /**
235
+ * Infer a server name from the command and args.
236
+ */
237
+ function inferServerName(command, args) {
238
+ // If npx package, use the package name
239
+ if (command === 'npx' && args.length >= 2) {
240
+ const pkg = args.find((a) => a.startsWith('@') || a.includes('/'));
241
+ if (pkg) {
242
+ // Extract last part of package name
243
+ const parts = pkg.split('/');
244
+ const lastPart = parts[parts.length - 1];
245
+ return lastPart.replace(/^(mcp-)?server-/, '').replace(/@.*$/, '');
246
+ }
247
+ }
248
+ // Default
249
+ return 'scanned-server';
250
+ }
251
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Tollgate Serve Command
3
+ *
4
+ * Starts the Tollgate orchestrator to manage multiple MCP servers.
5
+ * Provides an interactive CLI for controlling servers.
6
+ */
7
+ import { type FailureMode } from '../../index.js';
8
+ export interface ServeOptions {
9
+ config?: string;
10
+ auditPath?: string;
11
+ timeout: string;
12
+ approval?: 'terminal' | 'interactive';
13
+ approvalPort?: string;
14
+ persistSessions?: boolean;
15
+ sessionPath?: string;
16
+ dryRun?: boolean;
17
+ failureMode?: FailureMode;
18
+ all?: boolean;
19
+ servers?: string[];
20
+ interactive?: boolean;
21
+ }
22
+ /**
23
+ * Start the multi-server orchestrator.
24
+ */
25
+ export declare function serve(options: ServeOptions): Promise<void>;
26
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAKL,KAAK,WAAW,EAIjB,MAAM,gBAAgB,CAAC;AAKxB,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAgVD;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgGhE"}