accessflow-mcp-server 2.1.0 → 2.1.1-beta.2
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/http-server.js +5 -1
- package/dist/http-server.js.map +1 -1
- package/dist/index.js +8 -46
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +2 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +17 -14
- package/dist/server.js.map +1 -1
- package/dist/services/apiSchemas.d.ts +804 -1176
- package/dist/services/apiSchemas.d.ts.map +1 -1
- package/dist/services/apiSchemas.js +24 -1
- package/dist/services/apiSchemas.js.map +1 -1
- package/dist/services/apiService.d.ts +3 -3
- package/dist/services/apiService.d.ts.map +1 -1
- package/dist/services/apiService.js +15 -5
- package/dist/services/apiService.js.map +1 -1
- package/dist/services/loggerService.d.ts.map +1 -1
- package/dist/services/loggerService.js +31 -8
- package/dist/services/loggerService.js.map +1 -1
- package/dist/tools/getIssueRemediation.d.ts +6 -5
- package/dist/tools/getIssueRemediation.d.ts.map +1 -1
- package/dist/tools/getIssueRemediation.js +36 -18
- package/dist/tools/getIssueRemediation.js.map +1 -1
- package/dist/tools/getMostUrgentIssues.d.ts +11 -1
- package/dist/tools/getMostUrgentIssues.d.ts.map +1 -1
- package/dist/tools/getMostUrgentIssues.js +39 -19
- package/dist/tools/getMostUrgentIssues.js.map +1 -1
- package/dist/tools/index.d.ts +10 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +85 -12
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/resolveIssue.d.ts +1 -5
- package/dist/tools/resolveIssue.d.ts.map +1 -1
- package/dist/tools/resolveIssue.js +12 -0
- package/dist/tools/resolveIssue.js.map +1 -1
- package/dist/tools/submitFeedback.d.ts +17 -0
- package/dist/tools/submitFeedback.d.ts.map +1 -0
- package/dist/tools/submitFeedback.js +73 -0
- package/dist/tools/submitFeedback.js.map +1 -0
- package/dist/tools/toolRegistry.d.ts +16 -11
- package/dist/tools/toolRegistry.d.ts.map +1 -1
- package/dist/types/issues.d.ts +7 -1
- package/dist/types/issues.d.ts.map +1 -1
- package/dist/types/remediation.d.ts +1 -1
- package/dist/types/remediation.d.ts.map +1 -1
- package/dist/utils/remediation.d.ts +5 -3
- package/dist/utils/remediation.d.ts.map +1 -1
- package/dist/utils/remediation.js +22 -8
- package/dist/utils/remediation.js.map +1 -1
- package/package.json +8 -4
package/dist/tools/index.js
CHANGED
|
@@ -1,20 +1,93 @@
|
|
|
1
1
|
import { createToolRegistry } from './toolRegistry.js';
|
|
2
2
|
import { withCredentialCheck } from '../utils/middleware.js';
|
|
3
3
|
import { logger } from '../services/loggerService.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { createGetMostUrgentIssues } from './getMostUrgentIssues.js';
|
|
5
|
+
import { createGetIssueRemediation } from './getIssueRemediation.js';
|
|
6
|
+
import { createResolveIssue } from './resolveIssue.js';
|
|
7
|
+
/**
|
|
8
|
+
* Creates a dynamic tool that creates an ApiService per-request from session data
|
|
9
|
+
*/
|
|
10
|
+
function createDynamicTool(factory, config) {
|
|
11
|
+
// Get the base tool definition using a temporary ApiService
|
|
12
|
+
// We only use this to get the tool schema (name, description, parameters)
|
|
13
|
+
const tempApiService = config.createApiService({
|
|
14
|
+
apiKey: 'temp',
|
|
15
|
+
domain: 'temp',
|
|
16
|
+
});
|
|
17
|
+
const baseTool = factory(tempApiService);
|
|
18
|
+
return {
|
|
19
|
+
name: baseTool.name,
|
|
20
|
+
description: baseTool.description || '',
|
|
21
|
+
parameters: baseTool.parameters || {},
|
|
22
|
+
execute: async (args, context) => {
|
|
23
|
+
// Create ApiService from session data for this request
|
|
24
|
+
const session = context.session;
|
|
25
|
+
if (!session?.apiKey || !session?.domain) {
|
|
26
|
+
logger.error({ session }, 'Session data not available or incomplete');
|
|
27
|
+
throw new Error('Session data not available or incomplete');
|
|
28
|
+
}
|
|
29
|
+
logger.debug({ domain: session.domain }, 'Creating ApiService from session for tool execution');
|
|
30
|
+
// Create the actual ApiService with real credentials
|
|
31
|
+
const apiService = config.createApiService(session);
|
|
32
|
+
const tool = factory(apiService);
|
|
33
|
+
// Execute with credentials check
|
|
8
34
|
const wrappedTool = withCredentialCheck(apiService.domain, apiService.apiKey, tool);
|
|
9
|
-
|
|
35
|
+
if (!wrappedTool.execute) {
|
|
36
|
+
throw new Error('Tool execute function not available');
|
|
37
|
+
}
|
|
38
|
+
return wrappedTool.execute(args, context);
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export const registerTools = (server, config) => {
|
|
43
|
+
if (config.mode === 'stdio') {
|
|
44
|
+
// stdio mode: Use pre-created ApiService
|
|
45
|
+
const toolRegistry = createToolRegistry(config.apiService);
|
|
46
|
+
for (const [toolName, tool] of Object.entries(toolRegistry)) {
|
|
47
|
+
try {
|
|
48
|
+
const wrappedTool = withCredentialCheck(config.apiService.domain, config.apiService.apiKey, tool);
|
|
49
|
+
server.addTool(wrappedTool);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
logger.error({
|
|
53
|
+
toolName,
|
|
54
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
55
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
56
|
+
}, 'Failed to register tool');
|
|
57
|
+
}
|
|
10
58
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// HTTP mode: Create ApiService per-request from session
|
|
62
|
+
// Get tool factories (already imported at the top)
|
|
63
|
+
const toolFactories = [
|
|
64
|
+
{
|
|
65
|
+
name: 'get_most_urgent_issues',
|
|
66
|
+
factory: createGetMostUrgentIssues,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'get_issue_remediation',
|
|
70
|
+
factory: createGetIssueRemediation,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'resolve_issue',
|
|
74
|
+
factory: createResolveIssue,
|
|
75
|
+
},
|
|
76
|
+
];
|
|
77
|
+
// Register each tool with dynamic execute wrapper
|
|
78
|
+
for (const { name, factory } of toolFactories) {
|
|
79
|
+
try {
|
|
80
|
+
const dynamicTool = createDynamicTool(factory, config);
|
|
81
|
+
server.addTool(dynamicTool);
|
|
82
|
+
logger.info({ toolName: name }, 'Registered HTTP mode tool');
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
logger.error({
|
|
86
|
+
toolName: name,
|
|
87
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
88
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
89
|
+
}, 'Failed to register HTTP mode tool');
|
|
90
|
+
}
|
|
18
91
|
}
|
|
19
92
|
}
|
|
20
93
|
};
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,7 @@ import { z } from 'zod';
|
|
|
3
3
|
import { ApiService } from '../services/apiService.js';
|
|
4
4
|
declare const parameters: z.ZodObject<{
|
|
5
5
|
issueDisplayName: z.ZodString;
|
|
6
|
-
},
|
|
7
|
-
issueDisplayName: string;
|
|
8
|
-
}, {
|
|
9
|
-
issueDisplayName: string;
|
|
10
|
-
}>;
|
|
6
|
+
}, z.core.$strip>;
|
|
11
7
|
/**
|
|
12
8
|
* Creates the resolveIssue tool for FastMCP
|
|
13
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveIssue.d.ts","sourceRoot":"","sources":["../../src/tools/resolveIssue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAY,MAAM,2BAA2B,CAAC;AAGjE,QAAA,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"resolveIssue.d.ts","sourceRoot":"","sources":["../../src/tools/resolveIssue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAY,MAAM,2BAA2B,CAAC;AAGjE,QAAA,MAAM,UAAU;;iBAOd,CAAC;AAUH;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,YAAY,UAAU,KACrB,IAAI,CAAC,GAAG,EAAE,OAAO,UAAU,CAkG7B,CAAC"}
|
|
@@ -18,14 +18,26 @@ export const createResolveIssue = (apiService) => {
|
|
|
18
18
|
execute: async (args, context) => {
|
|
19
19
|
const typedArgs = parameters.parse(args);
|
|
20
20
|
try {
|
|
21
|
+
logger.info({
|
|
22
|
+
domain: apiService.domain,
|
|
23
|
+
issueDisplayName: typedArgs.issueDisplayName,
|
|
24
|
+
}, 'resolveIssue started');
|
|
21
25
|
const result = await resolveIssueInAccessFlow(apiService, typedArgs.issueDisplayName);
|
|
22
26
|
if (!result) {
|
|
27
|
+
logger.info({
|
|
28
|
+
domain: apiService.domain,
|
|
29
|
+
issueDisplayName: typedArgs.issueDisplayName,
|
|
30
|
+
}, 'resolveIssue: issue not found');
|
|
23
31
|
return `**Issue Not Found**
|
|
24
32
|
|
|
25
33
|
No accessibility issue found with display name: ${typedArgs.issueDisplayName}
|
|
26
34
|
|
|
27
35
|
Please verify the issue display name and try again.`;
|
|
28
36
|
}
|
|
37
|
+
logger.info({
|
|
38
|
+
domain: apiService.domain,
|
|
39
|
+
issueDisplayName: typedArgs.issueDisplayName,
|
|
40
|
+
}, 'resolveIssue completed');
|
|
29
41
|
return `**Issue Resolved Successfully**
|
|
30
42
|
|
|
31
43
|
The accessibility issue "${typedArgs.issueDisplayName}" has been marked as resolved in accessFlow.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveIssue.js","sourceRoot":"","sources":["../../src/tools/resolveIssue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAEtD,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC;SACxC,QAAQ,CACP,uFAAuF,CACxF;CACJ,CAAC,CAAC;AAUH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,UAAsB,EACQ,EAAE;IAChC,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,2EAA2E;QAC7E,UAAU;QACV,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,OAAqB,EAAE,EAAE;YACtD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,UAAU,EACV,SAAS,CAAC,gBAAgB,CAC3B,CAAC;gBAEF,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;;kDAEiC,SAAS,CAAC,gBAAgB;;oDAExB,CAAC;gBAC7C,CAAC;gBAED,OAAO;;2BAEY,SAAS,CAAC,gBAAgB;;8EAEyB,CAAC;YACzE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,YAAoB,CAAC;gBACzB,IAAI,YAAY,GAAW,EAAE,CAAC;gBAE9B,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;oBAC9B,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;oBAC7B,YAAY,GAAG,YAAY,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC;oBAEnE,MAAM,CAAC,KAAK,CACV;wBACE,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;wBAC5C,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;qBAC7B,EACD,2BAA2B,CAC5B,CAAC;gBACJ,CAAC;qBAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;oBAClC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;oBAC7B,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAE3D,MAAM,CAAC,KAAK,CACV;wBACE,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;wBAC5C,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;qBACnB,EACD,uBAAuB,CACxB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,wBAAwB,CAAC;oBAExC,MAAM,CAAC,KAAK,CACV;wBACE,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;wBAC5C,KAAK;qBACN,EACD,+BAA+B,CAChC,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,KAAK,CACb,4BAA4B,YAAY,IAAI,YAAY,6HAA6H,CACtL,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,KAAK,UAAU,wBAAwB,CACrC,UAAsB,EACtB,gBAAwB;IAExB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACjE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"resolveIssue.js","sourceRoot":"","sources":["../../src/tools/resolveIssue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Tool } from 'fastmcp';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ApiService } from '../services/apiService.js';
|
|
4
|
+
declare const parameters: z.ZodObject<{
|
|
5
|
+
feedbackRating: z.ZodOptional<z.ZodEnum<{
|
|
6
|
+
very_helpful: "very_helpful";
|
|
7
|
+
partially_helpful: "partially_helpful";
|
|
8
|
+
not_helpful: "not_helpful";
|
|
9
|
+
}>>;
|
|
10
|
+
suggestion: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
/**
|
|
13
|
+
* Creates the submitFeedback tool for FastMCP
|
|
14
|
+
*/
|
|
15
|
+
export declare const createSubmitFeedback: (apiService: ApiService) => Tool<any, typeof parameters>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=submitFeedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submitFeedback.d.ts","sourceRoot":"","sources":["../../src/tools/submitFeedback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAY,MAAM,2BAA2B,CAAC;AAIjE,QAAA,MAAM,UAAU;;;;;;;iBAQd,CAAC;AAIH;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,UAAU,KACrB,IAAI,CAAC,GAAG,EAAE,OAAO,UAAU,CAsF7B,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ApiService, ApiError } from '../services/apiService.js';
|
|
3
|
+
import { logger } from '../services/loggerService.js';
|
|
4
|
+
import { FeedbackRating } from '../services/apiSchemas.js';
|
|
5
|
+
const parameters = z.object({
|
|
6
|
+
feedbackRating: FeedbackRating.optional().describe('Rating of the response helpfulness: very_helpful, partially_helpful, or not_helpful'),
|
|
7
|
+
suggestion: z
|
|
8
|
+
.string()
|
|
9
|
+
.optional()
|
|
10
|
+
.describe('Optional suggestion for improvement'),
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* Creates the submitFeedback tool for FastMCP
|
|
14
|
+
*/
|
|
15
|
+
export const createSubmitFeedback = (apiService) => {
|
|
16
|
+
return {
|
|
17
|
+
name: 'submitFeedback',
|
|
18
|
+
description: 'Submit user feedback for MCP responses. Use this after receiving any MCP tool response to provide feedback on its helpfulness. Feedback is optional and helps improve the MCP experience.',
|
|
19
|
+
parameters,
|
|
20
|
+
execute: async (args, context) => {
|
|
21
|
+
const typedArgs = parameters.parse(args);
|
|
22
|
+
if (!typedArgs.feedbackRating && !typedArgs.suggestion) {
|
|
23
|
+
throw new Error('Please provide either a feedback rating or a suggestion.');
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
logger.info({
|
|
27
|
+
domain: apiService.domain,
|
|
28
|
+
feedbackRating: typedArgs.feedbackRating,
|
|
29
|
+
hasSuggestion: !!typedArgs.suggestion,
|
|
30
|
+
}, 'submitFeedback started');
|
|
31
|
+
// Validate and submit feedback
|
|
32
|
+
const response = await apiService.submitFeedback(typedArgs.feedbackRating, typedArgs.suggestion);
|
|
33
|
+
logger.info({
|
|
34
|
+
domain: apiService.domain,
|
|
35
|
+
success: response.success,
|
|
36
|
+
}, 'submitFeedback completed');
|
|
37
|
+
return JSON.stringify({
|
|
38
|
+
success: true,
|
|
39
|
+
message: 'Thank you for your feedback! Your input helps us improve the MCP experience.',
|
|
40
|
+
feedbackRating: typedArgs.feedbackRating,
|
|
41
|
+
...(typedArgs.suggestion && { suggestion: typedArgs.suggestion }),
|
|
42
|
+
}, null, 2);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
let errorMessage;
|
|
46
|
+
let errorDetails = '';
|
|
47
|
+
if (error instanceof ApiError) {
|
|
48
|
+
errorMessage = error.message;
|
|
49
|
+
errorDetails = ` Status: ${error.statusCode} ${error.statusText}.`;
|
|
50
|
+
logger.error({
|
|
51
|
+
message: error.message,
|
|
52
|
+
statusCode: error.statusCode,
|
|
53
|
+
statusText: error.statusText,
|
|
54
|
+
}, 'Error in submitFeedback');
|
|
55
|
+
}
|
|
56
|
+
else if (error instanceof Error) {
|
|
57
|
+
errorMessage = error.message;
|
|
58
|
+
errorDetails = error.stack ? ` Stack: ${error.stack}` : '';
|
|
59
|
+
logger.error({
|
|
60
|
+
message: error.message,
|
|
61
|
+
stack: error.stack,
|
|
62
|
+
}, 'Error in submitFeedback');
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
errorMessage = 'Unknown error occurred';
|
|
66
|
+
logger.error({ error }, 'Unknown error in submitFeedback');
|
|
67
|
+
}
|
|
68
|
+
throw new Error(`Failed to submit feedback: ${errorMessage}.${errorDetails} This may be due to a network issue or server error.`);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=submitFeedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submitFeedback.js","sourceRoot":"","sources":["../../src/tools/submitFeedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
import type { ApiService } from '../services/apiService.js';
|
|
2
2
|
export declare const createToolRegistry: (apiService: ApiService) => {
|
|
3
|
-
get_most_urgent_issues: import("fastmcp").Tool<any, import("zod").ZodObject<{
|
|
3
|
+
get_most_urgent_issues: import("fastmcp").Tool<any, import("zod").ZodObject<{
|
|
4
|
+
auditSource: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
5
|
+
PLATFORM: "PLATFORM";
|
|
6
|
+
SDK: "SDK";
|
|
7
|
+
}>>;
|
|
8
|
+
branch: import("zod").ZodOptional<import("zod").ZodString>;
|
|
9
|
+
commitId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
10
|
+
repo: import("zod").ZodOptional<import("zod").ZodString>;
|
|
11
|
+
}, import("zod/v4/core").$strip>>;
|
|
4
12
|
get_issue_remediation: import("fastmcp").Tool<any, import("zod").ZodObject<{
|
|
13
|
+
auditSource: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
14
|
+
PLATFORM: "PLATFORM";
|
|
15
|
+
SDK: "SDK";
|
|
16
|
+
}>>;
|
|
17
|
+
commitId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
5
18
|
issueDisplayName: import("zod").ZodString;
|
|
6
|
-
},
|
|
7
|
-
issueDisplayName: string;
|
|
8
|
-
}, {
|
|
9
|
-
issueDisplayName: string;
|
|
10
|
-
}>>;
|
|
19
|
+
}, import("zod/v4/core").$strip>>;
|
|
11
20
|
resolve_issue: import("fastmcp").Tool<any, import("zod").ZodObject<{
|
|
12
21
|
issueDisplayName: import("zod").ZodString;
|
|
13
|
-
},
|
|
14
|
-
issueDisplayName: string;
|
|
15
|
-
}, {
|
|
16
|
-
issueDisplayName: string;
|
|
17
|
-
}>>;
|
|
22
|
+
}, import("zod/v4/core").$strip>>;
|
|
18
23
|
};
|
|
19
24
|
//# sourceMappingURL=toolRegistry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["../../src/tools/toolRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,eAAO,MAAM,kBAAkB,GAAI,YAAY,UAAU
|
|
1
|
+
{"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["../../src/tools/toolRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,eAAO,MAAM,kBAAkB,GAAI,YAAY,UAAU;;;;;;;;;;;;;;;;;;;;;CAIvD,CAAC"}
|
package/dist/types/issues.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Output type definitions for formatted responses
|
|
3
3
|
* (Input types are inferred from Zod schemas in apiSchemas.ts)
|
|
4
4
|
*/
|
|
5
|
-
export type { Severity, WCAGLevelType as WCAGLevel, ApiIssue, ApiUrgentIssuesResponse, ApiIssueRemediation, } from '../services/apiSchemas.js';
|
|
5
|
+
export type { Severity, WCAGLevelType as WCAGLevel, ApiIssue, ApiAuditIssue, ApiSdkIssueContext, AuditSourceType, ApiUrgentIssuesResponse, ApiIssueRemediation, } from '../services/apiSchemas.js';
|
|
6
6
|
/**
|
|
7
7
|
* Formatted issue for display (output type - created by our code)
|
|
8
8
|
*/
|
|
@@ -14,6 +14,12 @@ export interface FormattedIssue {
|
|
|
14
14
|
criteria: string;
|
|
15
15
|
siteOccurrences: number;
|
|
16
16
|
pageOccurrences: number;
|
|
17
|
+
sdkContext?: {
|
|
18
|
+
filePath: string | null;
|
|
19
|
+
lineNumber: number | null;
|
|
20
|
+
componentName: string | null;
|
|
21
|
+
snippet: string | null;
|
|
22
|
+
} | null;
|
|
17
23
|
}
|
|
18
24
|
/**
|
|
19
25
|
* Response structure for urgent issues (output type - created by our code)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/types/issues.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,QAAQ,EACR,aAAa,IAAI,SAAS,EAC1B,QAAQ,EACR,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/types/issues.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,QAAQ,EACR,aAAa,IAAI,SAAS,EAC1B,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE;QACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,GAAG,IAAI,CAAC;CACV;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH"}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Type definitions for issue remediation
|
|
3
3
|
* (All types are inferred from Zod schemas in apiSchemas.ts)
|
|
4
4
|
*/
|
|
5
|
-
export type { ApiIssueRemediation, ApiRule, } from '../services/apiSchemas.js';
|
|
5
|
+
export type { ApiIssueRemediation, ApiAuditIssueRemediation, ApiSdkIssueContext, AuditSourceType, ApiRule, } from '../services/apiSchemas.js';
|
|
6
6
|
//# sourceMappingURL=remediation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../../src/types/remediation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,mBAAmB,EACnB,OAAO,GACR,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../../src/types/remediation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,EACf,OAAO,GACR,MAAM,2BAA2B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Utility functions for formatting remediation responses
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
4
|
+
import type { ApiAuditIssueRemediation } from '../types/remediation.js';
|
|
5
5
|
/**
|
|
6
6
|
* Extracts date from various formats
|
|
7
7
|
*/
|
|
@@ -13,7 +13,9 @@ export declare function extractDate(date?: {
|
|
|
13
13
|
*/
|
|
14
14
|
export declare function extractCodeBlocks(htmlResolution: string): string[];
|
|
15
15
|
/**
|
|
16
|
-
* Formats the remediation response as markdown
|
|
16
|
+
* Formats the remediation response as markdown.
|
|
17
|
+
* When the issue carries sdkContext, a code-location section is prepended
|
|
18
|
+
* so the developer can find the finding in their editor immediately.
|
|
17
19
|
*/
|
|
18
|
-
export declare function formatRemediationResponse(issue:
|
|
20
|
+
export declare function formatRemediationResponse(issue: ApiAuditIssueRemediation): string;
|
|
19
21
|
//# sourceMappingURL=remediation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../../src/utils/remediation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../../src/utils/remediation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAW,MAAM,yBAAyB,CAAC;AAEjF;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAc5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAclE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAoHjF"}
|
|
@@ -33,7 +33,9 @@ export function extractCodeBlocks(htmlResolution) {
|
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
* Formats the remediation response as markdown
|
|
36
|
+
* Formats the remediation response as markdown.
|
|
37
|
+
* When the issue carries sdkContext, a code-location section is prepended
|
|
38
|
+
* so the developer can find the finding in their editor immediately.
|
|
37
39
|
*/
|
|
38
40
|
export function formatRemediationResponse(issue) {
|
|
39
41
|
const { rule } = issue;
|
|
@@ -45,17 +47,30 @@ export function formatRemediationResponse(issue) {
|
|
|
45
47
|
const severity = issue.severity?.toUpperCase() || 'Unknown';
|
|
46
48
|
const criteria = issue.criteria || 'Unknown';
|
|
47
49
|
const wcagLink = rule?.issueWCAGLink || '';
|
|
48
|
-
// 3.
|
|
50
|
+
// 3. SDK code-location context (only present for SDK audits)
|
|
51
|
+
let sdkSection = '';
|
|
52
|
+
const sdk = issue.sdkContext;
|
|
53
|
+
if (sdk && (sdk.filePath || sdk.componentName || sdk.lineNumber !== null)) {
|
|
54
|
+
sdkSection = '\n## Code Location\n\n';
|
|
55
|
+
if (sdk.filePath) {
|
|
56
|
+
sdkSection += `- **File:** \`${sdk.filePath}\`${sdk.lineNumber !== null ? `:${sdk.lineNumber}` : ''}\n`;
|
|
57
|
+
}
|
|
58
|
+
if (sdk.componentName) {
|
|
59
|
+
sdkSection += `- **Component:** \`${sdk.componentName}\`\n`;
|
|
60
|
+
}
|
|
61
|
+
if (sdk.snippet) {
|
|
62
|
+
sdkSection += `\n**Relevant code:**\n\`\`\`\n${sdk.snippet}\n\`\`\`\n`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// 4. Code-level fix suggestions
|
|
49
66
|
let codeFix = '\n## Code-Level Fix\n\n';
|
|
50
67
|
if (rule) {
|
|
51
68
|
codeFix += rule.shortDescription
|
|
52
69
|
? `**Solution:** ${rule.shortDescription}\n\n`
|
|
53
70
|
: '';
|
|
54
|
-
// Show the current problematic code
|
|
55
71
|
if (issue.HTML) {
|
|
56
72
|
codeFix += '**Current code:**\n```html\n' + issue.HTML + '\n```\n\n';
|
|
57
73
|
}
|
|
58
|
-
// Extract code examples from the HTML resolution if available
|
|
59
74
|
if (rule.issueResolution) {
|
|
60
75
|
const codeBlocks = extractCodeBlocks(rule.issueResolution);
|
|
61
76
|
if (codeBlocks.length > 0) {
|
|
@@ -64,7 +79,6 @@ export function formatRemediationResponse(issue) {
|
|
|
64
79
|
});
|
|
65
80
|
}
|
|
66
81
|
}
|
|
67
|
-
// Add suggested fix details if available
|
|
68
82
|
if (rule.suggestedFix && rule.suggestedFix.length > 0) {
|
|
69
83
|
codeFix += '**Quick Fix Suggestions:**\n';
|
|
70
84
|
rule.suggestedFix.forEach((fix, index) => {
|
|
@@ -82,7 +96,7 @@ export function formatRemediationResponse(issue) {
|
|
|
82
96
|
else {
|
|
83
97
|
codeFix += 'No specific rule found for this issue.\n\n';
|
|
84
98
|
}
|
|
85
|
-
//
|
|
99
|
+
// 5. Additional resources
|
|
86
100
|
const issueDate = extractDate(issue.date ||
|
|
87
101
|
issue.modified);
|
|
88
102
|
const confidence = issue.confidence ?? 0;
|
|
@@ -90,7 +104,7 @@ export function formatRemediationResponse(issue) {
|
|
|
90
104
|
const siteOccurrences = issue.siteOccurrences ?? 0;
|
|
91
105
|
const webpath = issue.webpage?.webpath || 'N/A';
|
|
92
106
|
const webpages = issue.webpages || [];
|
|
93
|
-
const selector = issue.selector || 'N/A';
|
|
107
|
+
const selector = issue.selector || sdk?.filePath || 'N/A';
|
|
94
108
|
const remediationLinks = `
|
|
95
109
|
## 📚 Additional Resources
|
|
96
110
|
|
|
@@ -113,7 +127,7 @@ ${selector !== 'N/A' ? `- **The Selector for the issue is: ${selector}.` : ''}
|
|
|
113
127
|
- **Severity:** ${severity}
|
|
114
128
|
- **WCAG Level:** ${wcagLevel}
|
|
115
129
|
- **Criteria:** ${criteria}
|
|
116
|
-
|
|
130
|
+
${sdkSection}
|
|
117
131
|
${codeFix}
|
|
118
132
|
|
|
119
133
|
${remediationLinks}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remediation.js","sourceRoot":"","sources":["../../src/utils/remediation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAA0C;IACpE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QAChD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,cAAsB;IACtD,MAAM,UAAU,GACd,cAAc,CAAC,KAAK,CAAC,6CAA6C,CAAC,IAAI,EAAE,CAAC;IAE5E,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9B,OAAO,KAAK;aACT,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC;aACpC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;aAC9B,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;aACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;aACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;aACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;aACtB,IAAI,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"remediation.js","sourceRoot":"","sources":["../../src/utils/remediation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "accessflow-mcp-server",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1-beta.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AccessFlow MCP Server for accessibility issue remediation",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"bin": {
|
|
16
|
-
"accessflow-mcp-server": "./dist/index.js"
|
|
16
|
+
"accessflow-mcp-server": "./dist/index.js",
|
|
17
|
+
"accessflow-mcp-http": "./dist/http-server.js"
|
|
17
18
|
},
|
|
18
19
|
"files": [
|
|
19
20
|
"dist",
|
|
@@ -21,12 +22,14 @@
|
|
|
21
22
|
"LICENSE"
|
|
22
23
|
],
|
|
23
24
|
"engines": {
|
|
24
|
-
"node": ">=
|
|
25
|
+
"node": ">=20.0.0"
|
|
25
26
|
},
|
|
26
27
|
"scripts": {
|
|
27
28
|
"dev": "tsx src/index.ts",
|
|
28
|
-
"
|
|
29
|
+
"dev:http": "tsx src/http-server.ts",
|
|
30
|
+
"build": "bash scripts/build.sh",
|
|
29
31
|
"start": "node dist/index.js",
|
|
32
|
+
"start:http": "node dist/http-server.js",
|
|
30
33
|
"prepublishOnly": "npm run build",
|
|
31
34
|
"format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,json,md}\"",
|
|
32
35
|
"test": "vitest run",
|
|
@@ -48,6 +51,7 @@
|
|
|
48
51
|
"@typescript-eslint/eslint-plugin": "^8.46.4",
|
|
49
52
|
"@typescript-eslint/parser": "^8.46.4",
|
|
50
53
|
"@vitest/coverage-v8": "^2.1.8",
|
|
54
|
+
"conventional-changelog-conventionalcommits": "^9.1.0",
|
|
51
55
|
"eslint": "^9.39.1",
|
|
52
56
|
"eslint-config-prettier": "^10.1.8",
|
|
53
57
|
"pino-pretty": "^13.1.2",
|