argusai-mcp 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 (53) hide show
  1. package/dist/formatters/result-formatter.d.ts +44 -0
  2. package/dist/formatters/result-formatter.d.ts.map +1 -0
  3. package/dist/formatters/result-formatter.js +162 -0
  4. package/dist/formatters/result-formatter.js.map +1 -0
  5. package/dist/index.d.ts +27 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +90 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/server.d.ts +34 -0
  10. package/dist/server.d.ts.map +1 -0
  11. package/dist/server.js +184 -0
  12. package/dist/server.js.map +1 -0
  13. package/dist/session.d.ts +93 -0
  14. package/dist/session.d.ts.map +1 -0
  15. package/dist/session.js +220 -0
  16. package/dist/session.js.map +1 -0
  17. package/dist/tools/build.d.ts +31 -0
  18. package/dist/tools/build.d.ts.map +1 -0
  19. package/dist/tools/build.js +110 -0
  20. package/dist/tools/build.js.map +1 -0
  21. package/dist/tools/clean.d.ts +40 -0
  22. package/dist/tools/clean.d.ts.map +1 -0
  23. package/dist/tools/clean.js +111 -0
  24. package/dist/tools/clean.js.map +1 -0
  25. package/dist/tools/init.d.ts +41 -0
  26. package/dist/tools/init.d.ts.map +1 -0
  27. package/dist/tools/init.js +96 -0
  28. package/dist/tools/init.js.map +1 -0
  29. package/dist/tools/logs.d.ts +28 -0
  30. package/dist/tools/logs.d.ts.map +1 -0
  31. package/dist/tools/logs.js +35 -0
  32. package/dist/tools/logs.js.map +1 -0
  33. package/dist/tools/mock-requests.d.ts +36 -0
  34. package/dist/tools/mock-requests.d.ts.map +1 -0
  35. package/dist/tools/mock-requests.js +62 -0
  36. package/dist/tools/mock-requests.js.map +1 -0
  37. package/dist/tools/run.d.ts +58 -0
  38. package/dist/tools/run.d.ts.map +1 -0
  39. package/dist/tools/run.js +190 -0
  40. package/dist/tools/run.js.map +1 -0
  41. package/dist/tools/setup.d.ts +47 -0
  42. package/dist/tools/setup.d.ts.map +1 -0
  43. package/dist/tools/setup.js +162 -0
  44. package/dist/tools/setup.js.map +1 -0
  45. package/dist/tools/status.d.ts +44 -0
  46. package/dist/tools/status.d.ts.map +1 -0
  47. package/dist/tools/status.js +79 -0
  48. package/dist/tools/status.js.map +1 -0
  49. package/dist/transports/http-transport.d.ts +41 -0
  50. package/dist/transports/http-transport.d.ts.map +1 -0
  51. package/dist/transports/http-transport.js +107 -0
  52. package/dist/transports/http-transport.js.map +1 -0
  53. package/package.json +51 -0
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @module formatters/result-formatter
3
+ * Converts TestEvents into AIFriendlyTestResult for MCP output.
4
+ *
5
+ * Passing tests get minimal output (status + timing).
6
+ * Failing tests get full diagnostics including request/response context,
7
+ * assertion details, container logs, mock requests, and NL summary.
8
+ */
9
+ import type { TestEvent, AIFriendlyTestResult, TestReport } from 'argusai-core';
10
+ /**
11
+ * Converts raw test engine output into the structured AIFriendlyTestResult format
12
+ * consumed by MCP tool responses. Passing tests get minimal output (status + timing);
13
+ * failing tests get full diagnostics with NL summaries.
14
+ */
15
+ export declare class ResultFormatter {
16
+ /**
17
+ * Convert a flat list of TestEvents from a single suite into
18
+ * AIFriendlyTestResult entries.
19
+ *
20
+ * @param events - Raw TestEvents from executing a test suite
21
+ * @param suiteName - Display name of the suite for attribution
22
+ * @returns Array of AI-friendly results, one per test case
23
+ */
24
+ formatEvents(events: TestEvent[], suiteName: string): AIFriendlyTestResult[];
25
+ /**
26
+ * Convert a complete TestReport into AIFriendlyTestResult entries grouped by suite.
27
+ *
28
+ * @param report - Complete test report from the runner
29
+ * @returns Map of suite name → AI-friendly results
30
+ */
31
+ formatReport(report: TestReport): Map<string, AIFriendlyTestResult[]>;
32
+ }
33
+ /**
34
+ * Generate a one-sentence natural-language summary of a test failure.
35
+ * Parses the error message, HTTP context, assertion details, and container
36
+ * logs to produce a concise AI-friendly description of what went wrong.
37
+ *
38
+ * @param event - The case_fail TestEvent containing failure details
39
+ * @returns Human-readable failure summary string
40
+ */
41
+ export declare function generateSummary(event: Extract<TestEvent, {
42
+ type: 'case_fail';
43
+ }>): string;
44
+ //# sourceMappingURL=result-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-formatter.d.ts","sourceRoot":"","sources":["../../src/formatters/result-formatter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EAEpB,UAAU,EAEX,MAAM,cAAc,CAAC;AAEtB;;;;GAIG;AACH,qBAAa,eAAe;IAC1B;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,EAAE;IA4C5E;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC;CA6CtE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,GAAG,MAAM,CAoCxF"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * @module formatters/result-formatter
3
+ * Converts TestEvents into AIFriendlyTestResult for MCP output.
4
+ *
5
+ * Passing tests get minimal output (status + timing).
6
+ * Failing tests get full diagnostics including request/response context,
7
+ * assertion details, container logs, mock requests, and NL summary.
8
+ */
9
+ /**
10
+ * Converts raw test engine output into the structured AIFriendlyTestResult format
11
+ * consumed by MCP tool responses. Passing tests get minimal output (status + timing);
12
+ * failing tests get full diagnostics with NL summaries.
13
+ */
14
+ export class ResultFormatter {
15
+ /**
16
+ * Convert a flat list of TestEvents from a single suite into
17
+ * AIFriendlyTestResult entries.
18
+ *
19
+ * @param events - Raw TestEvents from executing a test suite
20
+ * @param suiteName - Display name of the suite for attribution
21
+ * @returns Array of AI-friendly results, one per test case
22
+ */
23
+ formatEvents(events, suiteName) {
24
+ const results = [];
25
+ for (const event of events) {
26
+ if (event.type === 'case_pass') {
27
+ results.push({
28
+ name: event.name,
29
+ suite: suiteName,
30
+ status: 'passed',
31
+ duration: event.duration,
32
+ timestamp: event.timestamp,
33
+ attempts: event.attempts,
34
+ });
35
+ }
36
+ else if (event.type === 'case_fail') {
37
+ results.push({
38
+ name: event.name,
39
+ suite: suiteName,
40
+ status: 'failed',
41
+ duration: event.duration,
42
+ timestamp: event.timestamp,
43
+ failure: {
44
+ error: event.error,
45
+ summary: generateSummary(event),
46
+ request: event.request,
47
+ response: event.response,
48
+ assertions: event.assertions ?? [],
49
+ diagnostics: event.diagnostics ?? emptyDiagnostics(),
50
+ },
51
+ attempts: event.attempts,
52
+ });
53
+ }
54
+ else if (event.type === 'case_skip') {
55
+ results.push({
56
+ name: event.name,
57
+ suite: suiteName,
58
+ status: 'skipped',
59
+ duration: 0,
60
+ timestamp: event.timestamp,
61
+ });
62
+ }
63
+ }
64
+ return results;
65
+ }
66
+ /**
67
+ * Convert a complete TestReport into AIFriendlyTestResult entries grouped by suite.
68
+ *
69
+ * @param report - Complete test report from the runner
70
+ * @returns Map of suite name → AI-friendly results
71
+ */
72
+ formatReport(report) {
73
+ const result = new Map();
74
+ for (const suite of report.suites) {
75
+ const cases = suite.cases.map(c => {
76
+ if (c.status === 'passed') {
77
+ return {
78
+ name: c.name,
79
+ suite: suite.suite,
80
+ status: 'passed',
81
+ duration: c.duration,
82
+ timestamp: report.timestamp,
83
+ attempts: c.attempts,
84
+ };
85
+ }
86
+ if (c.status === 'failed') {
87
+ return {
88
+ name: c.name,
89
+ suite: suite.suite,
90
+ status: 'failed',
91
+ duration: c.duration,
92
+ timestamp: report.timestamp,
93
+ failure: {
94
+ error: c.error ?? 'Unknown error',
95
+ summary: `Test "${c.name}" failed: ${c.error ?? 'Unknown error'}`,
96
+ assertions: [],
97
+ diagnostics: c.diagnostics ?? emptyDiagnostics(),
98
+ },
99
+ attempts: c.attempts,
100
+ };
101
+ }
102
+ return {
103
+ name: c.name,
104
+ suite: suite.suite,
105
+ status: 'skipped',
106
+ duration: 0,
107
+ timestamp: report.timestamp,
108
+ };
109
+ });
110
+ result.set(suite.suite, cases);
111
+ }
112
+ return result;
113
+ }
114
+ }
115
+ /**
116
+ * Generate a one-sentence natural-language summary of a test failure.
117
+ * Parses the error message, HTTP context, assertion details, and container
118
+ * logs to produce a concise AI-friendly description of what went wrong.
119
+ *
120
+ * @param event - The case_fail TestEvent containing failure details
121
+ * @returns Human-readable failure summary string
122
+ */
123
+ export function generateSummary(event) {
124
+ const parts = [];
125
+ if (event.request) {
126
+ parts.push(`${event.request.method} ${event.request.url}`);
127
+ }
128
+ if (event.response) {
129
+ parts.push(`returned ${event.response.status}`);
130
+ }
131
+ if (event.assertions && event.assertions.length > 0) {
132
+ const firstFail = event.assertions.find(a => !a.passed);
133
+ if (firstFail) {
134
+ parts.push(`expected ${firstFail.path} ${firstFail.operator} ${JSON.stringify(firstFail.expected)} but got ${JSON.stringify(firstFail.actual)}`);
135
+ }
136
+ }
137
+ else if (event.error) {
138
+ const errorSummary = event.error.split('\n')[0];
139
+ if (errorSummary.length <= 120) {
140
+ parts.push(errorSummary);
141
+ }
142
+ else {
143
+ parts.push(errorSummary.slice(0, 117) + '...');
144
+ }
145
+ }
146
+ if (event.diagnostics?.containerLogs?.some(c => c.lines.some(l => l.includes('ECONNREFUSED') || l.includes('ENOTFOUND') || l.includes('ETIMEDOUT')))) {
147
+ parts.push('container logs show connectivity issues');
148
+ }
149
+ if (parts.length === 0) {
150
+ return `Test "${event.name}" failed`;
151
+ }
152
+ return parts.join(', ');
153
+ }
154
+ function emptyDiagnostics() {
155
+ return {
156
+ containerLogs: [],
157
+ containerHealth: [],
158
+ mockRequests: [],
159
+ collectedAt: Date.now(),
160
+ };
161
+ }
162
+ //# sourceMappingURL=result-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-formatter.js","sourceRoot":"","sources":["../../src/formatters/result-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @module argusai-mcp
4
+ * MCP Server entry point — supports both stdio and HTTP transport modes.
5
+ *
6
+ * Usage:
7
+ * preflight-mcp # stdio mode (default, for Cursor/Claude Code)
8
+ * preflight-mcp --mode http # HTTP mode (for remote clients, CI)
9
+ * preflight-mcp --mode http --port 3100 --api-key <key>
10
+ */
11
+ export { createServer } from './server.js';
12
+ export type { CreateServerOptions, PlatformServices } from './server.js';
13
+ export { SessionManager, SessionError } from './session.js';
14
+ export type { ProjectSession, SessionState, SessionManagerOptions } from './session.js';
15
+ export { ResultFormatter, generateSummary } from './formatters/result-formatter.js';
16
+ export { startHttpTransport, createFastifyMcpHandler } from './transports/http-transport.js';
17
+ export type { HttpTransportOptions } from './transports/http-transport.js';
18
+ export type { InitResult } from './tools/init.js';
19
+ export type { BuildResult } from './tools/build.js';
20
+ export type { SetupResult } from './tools/setup.js';
21
+ export type { RunResult } from './tools/run.js';
22
+ export type { StatusResult } from './tools/status.js';
23
+ export type { LogsResult } from './tools/logs.js';
24
+ export type { CleanResult } from './tools/clean.js';
25
+ export type { MockRequestsResult } from './tools/mock-requests.js';
26
+ export declare const VERSION = "0.1.0";
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC7F,YAAY,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,eAAO,MAAM,OAAO,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @module argusai-mcp
4
+ * MCP Server entry point — supports both stdio and HTTP transport modes.
5
+ *
6
+ * Usage:
7
+ * preflight-mcp # stdio mode (default, for Cursor/Claude Code)
8
+ * preflight-mcp --mode http # HTTP mode (for remote clients, CI)
9
+ * preflight-mcp --mode http --port 3100 --api-key <key>
10
+ */
11
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
12
+ import { createServer } from './server.js';
13
+ export { createServer } from './server.js';
14
+ export { SessionManager, SessionError } from './session.js';
15
+ export { ResultFormatter, generateSummary } from './formatters/result-formatter.js';
16
+ export { startHttpTransport, createFastifyMcpHandler } from './transports/http-transport.js';
17
+ export const VERSION = '0.1.0';
18
+ function parseArgs(argv) {
19
+ let mode = 'stdio';
20
+ let port = 3100;
21
+ let host = '0.0.0.0';
22
+ let apiKey;
23
+ for (let i = 0; i < argv.length; i++) {
24
+ const arg = argv[i];
25
+ if (arg === '--mode' && argv[i + 1]) {
26
+ mode = argv[++i];
27
+ }
28
+ else if (arg === '--port' && argv[i + 1]) {
29
+ port = parseInt(argv[++i], 10);
30
+ }
31
+ else if (arg === '--host' && argv[i + 1]) {
32
+ host = argv[++i];
33
+ }
34
+ else if (arg === '--api-key' && argv[i + 1]) {
35
+ apiKey = argv[++i];
36
+ }
37
+ }
38
+ // Also check env vars
39
+ if (process.env.MCP_MODE === 'http')
40
+ mode = 'http';
41
+ if (process.env.MCP_PORT)
42
+ port = parseInt(process.env.MCP_PORT, 10);
43
+ if (process.env.MCP_HOST)
44
+ host = process.env.MCP_HOST;
45
+ if (process.env.MCP_API_KEY)
46
+ apiKey = process.env.MCP_API_KEY;
47
+ return { mode, port, host, apiKey };
48
+ }
49
+ async function main() {
50
+ const args = parseArgs(process.argv.slice(2));
51
+ const { server } = createServer();
52
+ const shutdown = async () => {
53
+ try {
54
+ await server.close();
55
+ }
56
+ catch {
57
+ // Best-effort shutdown
58
+ }
59
+ process.exit(0);
60
+ };
61
+ process.on('SIGINT', shutdown);
62
+ process.on('SIGTERM', shutdown);
63
+ if (args.mode === 'http') {
64
+ const { startHttpTransport } = await import('./transports/http-transport.js');
65
+ const { close } = await startHttpTransport(server, {
66
+ port: args.port,
67
+ host: args.host,
68
+ apiKey: args.apiKey,
69
+ cors: true,
70
+ });
71
+ console.error(`argusai-mcp HTTP server running on http://${args.host}:${args.port}/mcp`);
72
+ if (args.apiKey) {
73
+ console.error(' Authentication: API key required (Authorization: Bearer <key>)');
74
+ }
75
+ process.on('SIGINT', async () => { await close(); process.exit(0); });
76
+ process.on('SIGTERM', async () => { await close(); process.exit(0); });
77
+ }
78
+ else {
79
+ const transport = new StdioServerTransport();
80
+ await server.connect(transport);
81
+ }
82
+ }
83
+ const isMainModule = process.argv[1] && import.meta.url.endsWith(process.argv[1].replace(/\\/g, '/'));
84
+ if (isMainModule || process.argv[1]?.endsWith('preflight-mcp')) {
85
+ main().catch((err) => {
86
+ console.error('Failed to start MCP server:', err);
87
+ process.exit(1);
88
+ });
89
+ }
90
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @module server
3
+ * MCP server setup — registers all 9 preflight tools with Zod input schemas.
4
+ */
5
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import type { SSEBus, Store, TaskQueue, Notifier, ResourceLimiter } from 'argusai-core';
7
+ import { SessionManager } from './session.js';
8
+ import { ResultFormatter } from './formatters/result-formatter.js';
9
+ /** Shared platform services injected into tool handlers. */
10
+ export interface PlatformServices {
11
+ store?: Store;
12
+ taskQueue?: TaskQueue;
13
+ notifier?: Notifier;
14
+ resourceLimiter?: ResourceLimiter;
15
+ }
16
+ /** Options for creating the MCP server with shared dependencies. */
17
+ export interface CreateServerOptions {
18
+ sessionManager?: SessionManager;
19
+ eventBus?: SSEBus;
20
+ platform?: PlatformServices;
21
+ }
22
+ /**
23
+ * Create and configure the MCP server with all 9 preflight tools registered.
24
+ *
25
+ * When called without options, creates standalone instances.
26
+ * Pass shared `sessionManager` and `eventBus` to integrate with Dashboard.
27
+ */
28
+ export declare function createServer(options?: CreateServerOptions): {
29
+ server: McpServer;
30
+ sessionManager: SessionManager;
31
+ formatter: ResultFormatter;
32
+ platform: PlatformServices;
33
+ };
34
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAUnE,4DAA4D;AAC5D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,oEAAoE;AACpE,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAsCD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG;IAC3D,MAAM,EAAE,SAAS,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CA4KA"}
package/dist/server.js ADDED
@@ -0,0 +1,184 @@
1
+ /**
2
+ * @module server
3
+ * MCP server setup — registers all 9 preflight tools with Zod input schemas.
4
+ */
5
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import { z } from 'zod';
7
+ import { SessionManager, SessionError } from './session.js';
8
+ import { ResultFormatter } from './formatters/result-formatter.js';
9
+ import { handleInit } from './tools/init.js';
10
+ import { handleBuild } from './tools/build.js';
11
+ import { handleSetup } from './tools/setup.js';
12
+ import { handleRun, handleRunSuite } from './tools/run.js';
13
+ import { handleStatus } from './tools/status.js';
14
+ import { handleLogs } from './tools/logs.js';
15
+ import { handleClean } from './tools/clean.js';
16
+ import { handleMockRequests } from './tools/mock-requests.js';
17
+ /** Wrap tool result data in a success JSON envelope. */
18
+ function successResponse(data) {
19
+ const envelope = {
20
+ success: true,
21
+ data,
22
+ timestamp: Date.now(),
23
+ };
24
+ return { content: [{ type: 'text', text: JSON.stringify(envelope) }] };
25
+ }
26
+ /** Wrap an error in a structured JSON envelope with code and message. */
27
+ function errorResponse(code, message, details) {
28
+ const envelope = {
29
+ success: false,
30
+ error: { code, message, details },
31
+ timestamp: Date.now(),
32
+ };
33
+ return { content: [{ type: 'text', text: JSON.stringify(envelope) }] };
34
+ }
35
+ /** Convert an unknown thrown value into an MCP error response. */
36
+ function handleError(err) {
37
+ if (err instanceof SessionError) {
38
+ return errorResponse(err.code, err.message);
39
+ }
40
+ const message = err instanceof Error ? err.message : String(err);
41
+ return errorResponse('INTERNAL_ERROR', message);
42
+ }
43
+ /**
44
+ * Create and configure the MCP server with all 9 preflight tools registered.
45
+ *
46
+ * When called without options, creates standalone instances.
47
+ * Pass shared `sessionManager` and `eventBus` to integrate with Dashboard.
48
+ */
49
+ export function createServer(options) {
50
+ const server = new McpServer({
51
+ name: 'argusai-mcp',
52
+ version: '0.1.0',
53
+ });
54
+ const sessionManager = options?.sessionManager ?? new SessionManager(options?.eventBus);
55
+ if (options?.eventBus && !sessionManager.eventBus) {
56
+ sessionManager.eventBus = options.eventBus;
57
+ }
58
+ const formatter = new ResultFormatter();
59
+ const platform = options?.platform ?? {};
60
+ // Tool 1: argus_init
61
+ server.tool('argus_init', {
62
+ projectPath: z.string().describe('Absolute path to project directory containing e2e.yaml'),
63
+ configFile: z.string().optional().describe('Config filename override (default: e2e.yaml)'),
64
+ }, async (params) => {
65
+ try {
66
+ const result = await handleInit(params, sessionManager);
67
+ return successResponse(result);
68
+ }
69
+ catch (err) {
70
+ return handleError(err);
71
+ }
72
+ });
73
+ // Tool 2: argus_build
74
+ server.tool('argus_build', {
75
+ projectPath: z.string().describe('Project path (must have active session)'),
76
+ noCache: z.boolean().optional().describe('Disable Docker layer cache'),
77
+ service: z.string().optional().describe('Build specific service (multi-service mode)'),
78
+ }, async (params) => {
79
+ try {
80
+ const result = await handleBuild(params, sessionManager, platform);
81
+ return successResponse(result);
82
+ }
83
+ catch (err) {
84
+ return handleError(err);
85
+ }
86
+ });
87
+ // Tool 3: argus_setup
88
+ server.tool('argus_setup', {
89
+ projectPath: z.string().describe('Project path (must have built images)'),
90
+ timeout: z.string().optional().describe('Health check timeout override, e.g. "120s"'),
91
+ }, async (params) => {
92
+ try {
93
+ const result = await handleSetup(params, sessionManager);
94
+ return successResponse(result);
95
+ }
96
+ catch (err) {
97
+ return handleError(err);
98
+ }
99
+ });
100
+ // Tool 4: argus_run
101
+ server.tool('argus_run', {
102
+ projectPath: z.string().describe('Project path (must have running environment)'),
103
+ filter: z.string().optional().describe('Suite ID filter (comma-separated for multiple)'),
104
+ parallel: z.boolean().optional().describe('Override parallel execution setting'),
105
+ }, async (params) => {
106
+ try {
107
+ const result = await handleRun(params, sessionManager, formatter, platform);
108
+ return successResponse(result);
109
+ }
110
+ catch (err) {
111
+ return handleError(err);
112
+ }
113
+ });
114
+ // Tool 5: argus_run_suite
115
+ server.tool('argus_run_suite', {
116
+ projectPath: z.string().describe('Project path'),
117
+ suiteId: z.string().describe('Suite identifier to run'),
118
+ }, async (params) => {
119
+ try {
120
+ const result = await handleRunSuite(params, sessionManager, formatter, platform);
121
+ return successResponse(result);
122
+ }
123
+ catch (err) {
124
+ return handleError(err);
125
+ }
126
+ });
127
+ // Tool 6: argus_status
128
+ server.tool('argus_status', {
129
+ projectPath: z.string().describe('Project path'),
130
+ }, async (params) => {
131
+ try {
132
+ const result = await handleStatus(params, sessionManager);
133
+ return successResponse(result);
134
+ }
135
+ catch (err) {
136
+ return handleError(err);
137
+ }
138
+ });
139
+ // Tool 7: argus_logs
140
+ server.tool('argus_logs', {
141
+ projectPath: z.string().describe('Project path'),
142
+ container: z.string().describe('Container name'),
143
+ lines: z.number().optional().describe('Number of tail lines (default: 100)'),
144
+ since: z.string().optional().describe('Show logs since timestamp, e.g. "5m", "2h"'),
145
+ }, async (params) => {
146
+ try {
147
+ const result = await handleLogs(params, sessionManager);
148
+ return successResponse(result);
149
+ }
150
+ catch (err) {
151
+ return handleError(err);
152
+ }
153
+ });
154
+ // Tool 8: argus_clean
155
+ server.tool('argus_clean', {
156
+ projectPath: z.string().describe('Project path'),
157
+ force: z.boolean().optional().describe('Force remove stuck containers'),
158
+ }, async (params) => {
159
+ try {
160
+ const result = await handleClean(params, sessionManager);
161
+ return successResponse(result);
162
+ }
163
+ catch (err) {
164
+ return handleError(err);
165
+ }
166
+ });
167
+ // Tool 9: argus_mock_requests
168
+ server.tool('argus_mock_requests', {
169
+ projectPath: z.string().describe('Project path'),
170
+ mockName: z.string().optional().describe('Specific mock name (default: all mocks)'),
171
+ since: z.string().optional().describe('Filter requests after timestamp'),
172
+ clear: z.boolean().optional().describe('Clear request log after reading'),
173
+ }, async (params) => {
174
+ try {
175
+ const result = await handleMockRequests(params, sessionManager);
176
+ return successResponse(result);
177
+ }
178
+ catch (err) {
179
+ return handleError(err);
180
+ }
181
+ });
182
+ return { server, sessionManager, formatter, platform };
183
+ }
184
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}