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.
- package/dist/formatters/result-formatter.d.ts +44 -0
- package/dist/formatters/result-formatter.d.ts.map +1 -0
- package/dist/formatters/result-formatter.js +162 -0
- package/dist/formatters/result-formatter.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +34 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +184 -0
- package/dist/server.js.map +1 -0
- package/dist/session.d.ts +93 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +220 -0
- package/dist/session.js.map +1 -0
- package/dist/tools/build.d.ts +31 -0
- package/dist/tools/build.d.ts.map +1 -0
- package/dist/tools/build.js +110 -0
- package/dist/tools/build.js.map +1 -0
- package/dist/tools/clean.d.ts +40 -0
- package/dist/tools/clean.d.ts.map +1 -0
- package/dist/tools/clean.js +111 -0
- package/dist/tools/clean.js.map +1 -0
- package/dist/tools/init.d.ts +41 -0
- package/dist/tools/init.d.ts.map +1 -0
- package/dist/tools/init.js +96 -0
- package/dist/tools/init.js.map +1 -0
- package/dist/tools/logs.d.ts +28 -0
- package/dist/tools/logs.d.ts.map +1 -0
- package/dist/tools/logs.js +35 -0
- package/dist/tools/logs.js.map +1 -0
- package/dist/tools/mock-requests.d.ts +36 -0
- package/dist/tools/mock-requests.d.ts.map +1 -0
- package/dist/tools/mock-requests.js +62 -0
- package/dist/tools/mock-requests.js.map +1 -0
- package/dist/tools/run.d.ts +58 -0
- package/dist/tools/run.d.ts.map +1 -0
- package/dist/tools/run.js +190 -0
- package/dist/tools/run.js.map +1 -0
- package/dist/tools/setup.d.ts +47 -0
- package/dist/tools/setup.d.ts.map +1 -0
- package/dist/tools/setup.js +162 -0
- package/dist/tools/setup.js.map +1 -0
- package/dist/tools/status.d.ts +44 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +79 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/transports/http-transport.d.ts +41 -0
- package/dist/transports/http-transport.d.ts.map +1 -0
- package/dist/transports/http-transport.js +107 -0
- package/dist/transports/http-transport.js.map +1 -0
- 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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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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"}
|
package/dist/server.d.ts
ADDED
|
@@ -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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"}
|