air-mcp-server 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/README.md +90 -0
- package/bin/air-mcp-http.js +2 -0
- package/bin/air-mcp.js +10 -0
- package/dist/core/utils/air-home.d.ts +6 -0
- package/dist/core/utils/air-home.js +72 -0
- package/dist/http.js +12738 -0
- package/dist/http.js.map +7 -0
- package/dist/index.js +12571 -0
- package/dist/index.js.map +7 -0
- package/dist/packages/mcp-server/src/config.d.ts +17 -0
- package/dist/packages/mcp-server/src/config.js +105 -0
- package/dist/packages/mcp-server/src/context.d.ts +10 -0
- package/dist/packages/mcp-server/src/context.js +18 -0
- package/dist/packages/mcp-server/src/http.d.ts +1 -0
- package/dist/packages/mcp-server/src/http.js +189 -0
- package/dist/packages/mcp-server/src/index.d.ts +1 -0
- package/dist/packages/mcp-server/src/index.js +37 -0
- package/dist/packages/mcp-server/src/server.d.ts +18 -0
- package/dist/packages/mcp-server/src/server.js +35 -0
- package/dist/packages/mcp-server/src/tools/get-session-flow-review.d.ts +2 -0
- package/dist/packages/mcp-server/src/tools/get-session-flow-review.js +62 -0
- package/dist/packages/mcp-server/src/tools/get-session-generation-context.d.ts +2 -0
- package/dist/packages/mcp-server/src/tools/get-session-generation-context.js +118 -0
- package/dist/packages/mcp-server/src/tools/index.d.ts +2 -0
- package/dist/packages/mcp-server/src/tools/index.js +13 -0
- package/dist/packages/mcp-server/src/tools/list-recorded-sessions.d.ts +2 -0
- package/dist/packages/mcp-server/src/tools/list-recorded-sessions.js +57 -0
- package/dist/packages/mcp-server/src/utils/errors.d.ts +4 -0
- package/dist/packages/mcp-server/src/utils/errors.js +15 -0
- package/dist/packages/mcp-server/src/utils/privacy.d.ts +8 -0
- package/dist/packages/mcp-server/src/utils/privacy.js +15 -0
- package/package.json +46 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listRecordedSessionsTool = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const privacy_1 = require("../utils/privacy");
|
|
6
|
+
const errors_1 = require("../utils/errors");
|
|
7
|
+
const ListRecordedSessionsArgsSchema = zod_1.z.object({
|
|
8
|
+
limit: zod_1.z.number().optional(),
|
|
9
|
+
offset: zod_1.z.number().optional(),
|
|
10
|
+
recentDays: zod_1.z.number().optional(),
|
|
11
|
+
}).default({});
|
|
12
|
+
exports.listRecordedSessionsTool = {
|
|
13
|
+
definition: {
|
|
14
|
+
name: 'list_recorded_sessions',
|
|
15
|
+
description: 'List available AIR recorded sessions by recording start time, newest first.',
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
properties: {
|
|
19
|
+
limit: {
|
|
20
|
+
type: 'number',
|
|
21
|
+
description: 'Maximum number of sessions to return. Default 10, max 50.'
|
|
22
|
+
},
|
|
23
|
+
offset: {
|
|
24
|
+
type: 'number',
|
|
25
|
+
description: 'Number of sessions to skip. Default 0.'
|
|
26
|
+
},
|
|
27
|
+
recentDays: {
|
|
28
|
+
type: 'number',
|
|
29
|
+
description: 'Optional filter for sessions started in the last N days. Max 365.'
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
additionalProperties: false
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
handle: async (args, context) => {
|
|
36
|
+
try {
|
|
37
|
+
const parsedArgs = ListRecordedSessionsArgsSchema.parse(args || {});
|
|
38
|
+
const service = context.getCodegenService();
|
|
39
|
+
const result = service.listRecordedSessions(parsedArgs);
|
|
40
|
+
const wrapped = (0, privacy_1.wrapWithPrivacy)(result);
|
|
41
|
+
return {
|
|
42
|
+
content: [
|
|
43
|
+
{
|
|
44
|
+
type: 'text',
|
|
45
|
+
text: JSON.stringify(wrapped, null, 2),
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
52
|
+
throw (0, errors_1.createInvalidArgumentsError)(error.message);
|
|
53
|
+
}
|
|
54
|
+
throw (0, errors_1.createDatabaseUnavailableError)(error instanceof Error ? error.message : 'Unknown database error');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
export declare function createSessionNotFoundError(sessionId: string): McpError;
|
|
3
|
+
export declare function createDatabaseUnavailableError(message: string): McpError;
|
|
4
|
+
export declare function createInvalidArgumentsError(message: string): McpError;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSessionNotFoundError = createSessionNotFoundError;
|
|
4
|
+
exports.createDatabaseUnavailableError = createDatabaseUnavailableError;
|
|
5
|
+
exports.createInvalidArgumentsError = createInvalidArgumentsError;
|
|
6
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
7
|
+
function createSessionNotFoundError(sessionId) {
|
|
8
|
+
return new types_js_1.McpError(types_js_1.ErrorCode.InvalidRequest, `Session not found: ${sessionId}`);
|
|
9
|
+
}
|
|
10
|
+
function createDatabaseUnavailableError(message) {
|
|
11
|
+
return new types_js_1.McpError(types_js_1.ErrorCode.InternalError, `Database unavailable: ${message}`);
|
|
12
|
+
}
|
|
13
|
+
function createInvalidArgumentsError(message) {
|
|
14
|
+
return new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, `Invalid arguments: ${message}`);
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createPrivacyMeta = createPrivacyMeta;
|
|
4
|
+
exports.wrapWithPrivacy = wrapWithPrivacy;
|
|
5
|
+
function createPrivacyMeta() {
|
|
6
|
+
return {
|
|
7
|
+
privacy: "This context may contain local DOM excerpts or masked values. Do not leak sensitive PII."
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function wrapWithPrivacy(data) {
|
|
11
|
+
return {
|
|
12
|
+
_meta: createPrivacyMeta(),
|
|
13
|
+
data
|
|
14
|
+
};
|
|
15
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "air-mcp-server",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "AIR MCP Server",
|
|
5
|
+
"engines": {
|
|
6
|
+
"node": ">=22.0.0"
|
|
7
|
+
},
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"air",
|
|
11
|
+
"mcp",
|
|
12
|
+
"test-automation",
|
|
13
|
+
"playwright",
|
|
14
|
+
"recording"
|
|
15
|
+
],
|
|
16
|
+
"main": "dist/index.js",
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"bin"
|
|
20
|
+
],
|
|
21
|
+
"bin": {
|
|
22
|
+
"air-mcp-server": "./bin/air-mcp.js",
|
|
23
|
+
"air-mcp": "./bin/air-mcp.js",
|
|
24
|
+
"air-mcp-http": "./bin/air-mcp-http.js"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "node build.mjs",
|
|
28
|
+
"dev": "node build.mjs --watch",
|
|
29
|
+
"start": "node dist/index.js",
|
|
30
|
+
"start:http": "node dist/http.js",
|
|
31
|
+
"start:dev:stdio": "tsx src/index.ts",
|
|
32
|
+
"start:dev:http": "tsx src/http.ts"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@modelcontextprotocol/sdk": "^1.0.1",
|
|
36
|
+
"zod": "^3.23.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^20.0.0",
|
|
40
|
+
"esbuild": "^0.24.0",
|
|
41
|
+
"typescript": "5.6.3",
|
|
42
|
+
"@air/codegen": "0.1.0",
|
|
43
|
+
"@air/core": "*",
|
|
44
|
+
"@air/shared": "0.1.0"
|
|
45
|
+
}
|
|
46
|
+
}
|