@inkog-io/mcp 1.0.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/LICENSE +190 -0
- package/README.md +265 -0
- package/dist/api/client.d.ts +108 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +288 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/types.d.ts +286 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +21 -0
- package/dist/api/types.js.map +1 -0
- package/dist/config.d.ts +68 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +130 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +203 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/audit-a2a.d.ts +20 -0
- package/dist/tools/audit-a2a.d.ts.map +1 -0
- package/dist/tools/audit-a2a.js +382 -0
- package/dist/tools/audit-a2a.js.map +1 -0
- package/dist/tools/audit-mcp.d.ts +16 -0
- package/dist/tools/audit-mcp.d.ts.map +1 -0
- package/dist/tools/audit-mcp.js +259 -0
- package/dist/tools/audit-mcp.js.map +1 -0
- package/dist/tools/compliance.d.ts +14 -0
- package/dist/tools/compliance.d.ts.map +1 -0
- package/dist/tools/compliance.js +255 -0
- package/dist/tools/compliance.js.map +1 -0
- package/dist/tools/explain.d.ts +14 -0
- package/dist/tools/explain.d.ts.map +1 -0
- package/dist/tools/explain.js +202 -0
- package/dist/tools/explain.js.map +1 -0
- package/dist/tools/governance.d.ts +16 -0
- package/dist/tools/governance.d.ts.map +1 -0
- package/dist/tools/governance.js +200 -0
- package/dist/tools/governance.js.map +1 -0
- package/dist/tools/index.d.ts +50 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +94 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/mlbom.d.ts +18 -0
- package/dist/tools/mlbom.d.ts.map +1 -0
- package/dist/tools/mlbom.js +344 -0
- package/dist/tools/mlbom.js.map +1 -0
- package/dist/tools/scan.d.ts +15 -0
- package/dist/tools/scan.d.ts.map +1 -0
- package/dist/tools/scan.js +270 -0
- package/dist/tools/scan.js.map +1 -0
- package/dist/utils/file-reader.d.ts +55 -0
- package/dist/utils/file-reader.d.ts.map +1 -0
- package/dist/utils/file-reader.js +269 -0
- package/dist/utils/file-reader.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* inkog_audit_mcp_server Tool
|
|
3
|
+
*
|
|
4
|
+
* P1 - MCP Server Security Auditing (THE ECOSYSTEM PLAY)
|
|
5
|
+
*
|
|
6
|
+
* Security audit any MCP server from the registry or GitHub repository.
|
|
7
|
+
* Checks for:
|
|
8
|
+
* - Excessive permissions (file system, network, exec)
|
|
9
|
+
* - Data exfiltration risks
|
|
10
|
+
* - Input validation gaps
|
|
11
|
+
* - Credential handling issues
|
|
12
|
+
* - Tool permission boundaries
|
|
13
|
+
*/
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { getClient, InkogAuthError, InkogNetworkError } from '../api/client.js';
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Schema
|
|
18
|
+
// =============================================================================
|
|
19
|
+
const AuditMcpArgsSchema = z
|
|
20
|
+
.object({
|
|
21
|
+
server_name: z
|
|
22
|
+
.string()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe('MCP server name from registry (e.g., "github", "slack", "postgres")'),
|
|
25
|
+
repository_url: z
|
|
26
|
+
.string()
|
|
27
|
+
.url()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('Direct GitHub repository URL to audit'),
|
|
30
|
+
})
|
|
31
|
+
.refine((data) => data.server_name !== undefined || data.repository_url !== undefined, {
|
|
32
|
+
message: 'Either server_name or repository_url must be provided',
|
|
33
|
+
});
|
|
34
|
+
// =============================================================================
|
|
35
|
+
// Helpers
|
|
36
|
+
// =============================================================================
|
|
37
|
+
function formatSeverityIcon(severity) {
|
|
38
|
+
switch (severity) {
|
|
39
|
+
case 'CRITICAL':
|
|
40
|
+
return '🔴';
|
|
41
|
+
case 'HIGH':
|
|
42
|
+
return '🟠';
|
|
43
|
+
case 'MEDIUM':
|
|
44
|
+
return '🟡';
|
|
45
|
+
case 'LOW':
|
|
46
|
+
return '🟢';
|
|
47
|
+
default:
|
|
48
|
+
return '⚪';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function formatSecurityScore(score) {
|
|
52
|
+
if (score >= 90) {
|
|
53
|
+
return `✅ ${score}/100 (Excellent)`;
|
|
54
|
+
}
|
|
55
|
+
else if (score >= 70) {
|
|
56
|
+
return `🟢 ${score}/100 (Good)`;
|
|
57
|
+
}
|
|
58
|
+
else if (score >= 50) {
|
|
59
|
+
return `🟡 ${score}/100 (Fair)`;
|
|
60
|
+
}
|
|
61
|
+
else if (score >= 30) {
|
|
62
|
+
return `🟠 ${score}/100 (Poor)`;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return `🔴 ${score}/100 (Critical)`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function formatIssue(issue) {
|
|
69
|
+
const icon = formatSeverityIcon(issue.severity);
|
|
70
|
+
let output = `${icon} [${issue.severity}] ${issue.title}\n`;
|
|
71
|
+
output += ` Category: ${issue.category}\n`;
|
|
72
|
+
output += ` ${issue.description}\n`;
|
|
73
|
+
if (issue.file !== undefined) {
|
|
74
|
+
const location = issue.line !== undefined ? `${issue.file}:${issue.line}` : issue.file;
|
|
75
|
+
output += ` 📍 ${location}\n`;
|
|
76
|
+
}
|
|
77
|
+
output += ` 💡 ${issue.recommendation}`;
|
|
78
|
+
return output;
|
|
79
|
+
}
|
|
80
|
+
function formatToolPermissions(permissions) {
|
|
81
|
+
let output = '';
|
|
82
|
+
for (const [tool, perms] of Object.entries(permissions)) {
|
|
83
|
+
output += `\n🔧 ${tool}:\n`;
|
|
84
|
+
if (perms.reads.length > 0) {
|
|
85
|
+
output += ` 📖 Reads: ${perms.reads.join(', ')}\n`;
|
|
86
|
+
}
|
|
87
|
+
if (perms.writes.length > 0) {
|
|
88
|
+
output += ` ✏️ Writes: ${perms.writes.join(', ')}\n`;
|
|
89
|
+
}
|
|
90
|
+
if (perms.executes.length > 0) {
|
|
91
|
+
output += ` ⚡ Executes: ${perms.executes.join(', ')}\n`;
|
|
92
|
+
}
|
|
93
|
+
if (perms.network.length > 0) {
|
|
94
|
+
output += ` 🌐 Network: ${perms.network.join(', ')}\n`;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return output;
|
|
98
|
+
}
|
|
99
|
+
// =============================================================================
|
|
100
|
+
// Handler
|
|
101
|
+
// =============================================================================
|
|
102
|
+
async function auditMcpHandler(rawArgs) {
|
|
103
|
+
// Validate arguments
|
|
104
|
+
const parseResult = AuditMcpArgsSchema.safeParse(rawArgs);
|
|
105
|
+
if (!parseResult.success) {
|
|
106
|
+
return {
|
|
107
|
+
content: [
|
|
108
|
+
{
|
|
109
|
+
type: 'text',
|
|
110
|
+
text: `Invalid arguments: ${parseResult.error.message}\n\nProvide either server_name (from MCP registry) or repository_url (GitHub URL).`,
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
isError: true,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
const args = parseResult.data;
|
|
117
|
+
try {
|
|
118
|
+
// Call Inkog API
|
|
119
|
+
const client = getClient();
|
|
120
|
+
const auditOptions = {};
|
|
121
|
+
if (args.server_name !== undefined) {
|
|
122
|
+
auditOptions.serverName = args.server_name;
|
|
123
|
+
}
|
|
124
|
+
if (args.repository_url !== undefined) {
|
|
125
|
+
auditOptions.repositoryUrl = args.repository_url;
|
|
126
|
+
}
|
|
127
|
+
const response = await client.auditMcpServer(auditOptions);
|
|
128
|
+
// Build formatted output
|
|
129
|
+
let output = '╔══════════════════════════════════════════════════════╗\n';
|
|
130
|
+
output += '║ 🔒 MCP Server Security Audit ║\n';
|
|
131
|
+
output += '╚══════════════════════════════════════════════════════╝\n\n';
|
|
132
|
+
// Server info
|
|
133
|
+
output += `📦 Server: ${response.serverInfo.displayName ?? response.serverInfo.name}\n`;
|
|
134
|
+
if (response.serverInfo.description !== undefined) {
|
|
135
|
+
output += ` ${response.serverInfo.description}\n`;
|
|
136
|
+
}
|
|
137
|
+
output += `🔗 Repository: ${response.serverInfo.repository}\n`;
|
|
138
|
+
if (response.serverInfo.license !== undefined) {
|
|
139
|
+
output += `📄 License: ${response.serverInfo.license}\n`;
|
|
140
|
+
}
|
|
141
|
+
output += `🔧 Tools: ${response.serverInfo.tools.join(', ')}\n\n`;
|
|
142
|
+
// Security score
|
|
143
|
+
output += `📊 Security Score: ${formatSecurityScore(response.securityScore)}\n\n`;
|
|
144
|
+
// Issues summary
|
|
145
|
+
const critical = response.issues.filter((i) => i.severity === 'CRITICAL').length;
|
|
146
|
+
const high = response.issues.filter((i) => i.severity === 'HIGH').length;
|
|
147
|
+
const medium = response.issues.filter((i) => i.severity === 'MEDIUM').length;
|
|
148
|
+
const low = response.issues.filter((i) => i.severity === 'LOW').length;
|
|
149
|
+
if (response.issues.length === 0) {
|
|
150
|
+
output += '✅ No security issues detected!\n\n';
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
output += `📋 Security Issues: ${response.issues.length}\n`;
|
|
154
|
+
output += ` 🔴 Critical: ${critical} | 🟠 High: ${high} | 🟡 Medium: ${medium} | 🟢 Low: ${low}\n\n`;
|
|
155
|
+
}
|
|
156
|
+
// Data flow risks
|
|
157
|
+
if (response.dataFlowRisks.length > 0) {
|
|
158
|
+
output += '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n';
|
|
159
|
+
output += '⚠️ DATA FLOW RISKS\n\n';
|
|
160
|
+
for (const risk of response.dataFlowRisks) {
|
|
161
|
+
output += ` • ${risk}\n`;
|
|
162
|
+
}
|
|
163
|
+
output += '\n';
|
|
164
|
+
}
|
|
165
|
+
// Tool permissions
|
|
166
|
+
if (Object.keys(response.toolPermissions).length > 0) {
|
|
167
|
+
output += '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n';
|
|
168
|
+
output += '🔐 TOOL PERMISSIONS ANALYSIS\n';
|
|
169
|
+
output += formatToolPermissions(response.toolPermissions);
|
|
170
|
+
output += '\n';
|
|
171
|
+
}
|
|
172
|
+
// Detailed issues
|
|
173
|
+
if (response.issues.length > 0) {
|
|
174
|
+
output += '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n';
|
|
175
|
+
output += '🔍 SECURITY ISSUES\n\n';
|
|
176
|
+
// Critical and high first
|
|
177
|
+
const criticalHigh = response.issues.filter((i) => i.severity === 'CRITICAL' || i.severity === 'HIGH');
|
|
178
|
+
const mediumLow = response.issues.filter((i) => i.severity === 'MEDIUM' || i.severity === 'LOW');
|
|
179
|
+
for (const issue of criticalHigh) {
|
|
180
|
+
output += formatIssue(issue) + '\n\n';
|
|
181
|
+
}
|
|
182
|
+
if (mediumLow.length > 0 && criticalHigh.length > 0) {
|
|
183
|
+
output += '--- Lower Severity ---\n\n';
|
|
184
|
+
}
|
|
185
|
+
for (const issue of mediumLow) {
|
|
186
|
+
output += formatIssue(issue) + '\n\n';
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Recommendations
|
|
190
|
+
if (response.recommendations.length > 0) {
|
|
191
|
+
output += '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n';
|
|
192
|
+
output += '💡 RECOMMENDATIONS\n\n';
|
|
193
|
+
for (let i = 0; i < response.recommendations.length; i++) {
|
|
194
|
+
output += `${i + 1}. ${response.recommendations[i]}\n`;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Footer
|
|
198
|
+
output += '\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n';
|
|
199
|
+
output += 'MCP Server Audit powered by Inkog AI Security Platform\n';
|
|
200
|
+
output += 'Learn more: https://inkog.io/mcp-security\n';
|
|
201
|
+
return {
|
|
202
|
+
content: [
|
|
203
|
+
{
|
|
204
|
+
type: 'text',
|
|
205
|
+
text: output,
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
if (error instanceof InkogAuthError) {
|
|
212
|
+
return {
|
|
213
|
+
content: [
|
|
214
|
+
{
|
|
215
|
+
type: 'text',
|
|
216
|
+
text: '🔐 API Key Required\n\nGet your free key at https://app.inkog.io',
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
isError: true,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
if (error instanceof InkogNetworkError) {
|
|
223
|
+
return {
|
|
224
|
+
content: [
|
|
225
|
+
{
|
|
226
|
+
type: 'text',
|
|
227
|
+
text: `Network error: ${error.message}`,
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
isError: true,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
throw error;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// =============================================================================
|
|
237
|
+
// Tool Definition
|
|
238
|
+
// =============================================================================
|
|
239
|
+
export const auditMcpTool = {
|
|
240
|
+
tool: {
|
|
241
|
+
name: 'inkog_audit_mcp_server',
|
|
242
|
+
description: 'Security audit any MCP server from the registry or GitHub. Analyzes tool permissions, data flow risks, input validation, and potential vulnerabilities. Essential for vetting third-party MCP servers before installation.',
|
|
243
|
+
inputSchema: {
|
|
244
|
+
type: 'object',
|
|
245
|
+
properties: {
|
|
246
|
+
server_name: {
|
|
247
|
+
type: 'string',
|
|
248
|
+
description: 'MCP server name from registry (e.g., "github", "slack", "postgres")',
|
|
249
|
+
},
|
|
250
|
+
repository_url: {
|
|
251
|
+
type: 'string',
|
|
252
|
+
description: 'Direct GitHub repository URL to audit',
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
handler: auditMcpHandler,
|
|
258
|
+
};
|
|
259
|
+
//# sourceMappingURL=audit-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-mcp.js","sourceRoot":"","sources":["../../src/tools/audit-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* inkog_compliance_report Tool
|
|
3
|
+
*
|
|
4
|
+
* P1 - Compliance Report Generation
|
|
5
|
+
*
|
|
6
|
+
* Generates compliance reports for regulatory frameworks:
|
|
7
|
+
* - EU AI Act (Articles 12, 14, 15)
|
|
8
|
+
* - NIST AI Risk Management Framework
|
|
9
|
+
* - ISO 42001 AI Management System
|
|
10
|
+
* - OWASP LLM Top 10
|
|
11
|
+
*/
|
|
12
|
+
import type { ToolDefinition } from './index.js';
|
|
13
|
+
export declare const complianceTool: ToolDefinition;
|
|
14
|
+
//# sourceMappingURL=compliance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.d.ts","sourceRoot":"","sources":["../../src/tools/compliance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,YAAY,CAAC;AAuP7D,eAAO,MAAM,cAAc,EAAE,cA8B5B,CAAC"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* inkog_compliance_report Tool
|
|
3
|
+
*
|
|
4
|
+
* P1 - Compliance Report Generation
|
|
5
|
+
*
|
|
6
|
+
* Generates compliance reports for regulatory frameworks:
|
|
7
|
+
* - EU AI Act (Articles 12, 14, 15)
|
|
8
|
+
* - NIST AI Risk Management Framework
|
|
9
|
+
* - ISO 42001 AI Management System
|
|
10
|
+
* - OWASP LLM Top 10
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { getClient, InkogAuthError, InkogNetworkError } from '../api/client.js';
|
|
14
|
+
import { getRelativePaths, readDirectory } from '../utils/file-reader.js';
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// Schema
|
|
17
|
+
// =============================================================================
|
|
18
|
+
const ComplianceArgsSchema = z.object({
|
|
19
|
+
path: z.string().describe('Path to scan for compliance analysis'),
|
|
20
|
+
framework: z
|
|
21
|
+
.enum(['eu-ai-act', 'nist-ai-rmf', 'iso-42001', 'owasp-llm-top-10', 'all'])
|
|
22
|
+
.optional()
|
|
23
|
+
.default('eu-ai-act')
|
|
24
|
+
.describe('Compliance framework: eu-ai-act (default), nist-ai-rmf, iso-42001, owasp-llm-top-10, or all'),
|
|
25
|
+
format: z
|
|
26
|
+
.enum(['markdown', 'json', 'pdf'])
|
|
27
|
+
.optional()
|
|
28
|
+
.default('markdown')
|
|
29
|
+
.describe('Output format: markdown (default), json, or pdf'),
|
|
30
|
+
});
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// Helpers
|
|
33
|
+
// =============================================================================
|
|
34
|
+
function getFrameworkDisplayName(framework) {
|
|
35
|
+
switch (framework) {
|
|
36
|
+
case 'eu-ai-act':
|
|
37
|
+
return 'EU AI Act';
|
|
38
|
+
case 'nist-ai-rmf':
|
|
39
|
+
return 'NIST AI Risk Management Framework';
|
|
40
|
+
case 'iso-42001':
|
|
41
|
+
return 'ISO 42001 AI Management System';
|
|
42
|
+
case 'owasp-llm-top-10':
|
|
43
|
+
return 'OWASP LLM Top 10';
|
|
44
|
+
case 'all':
|
|
45
|
+
return 'All Frameworks';
|
|
46
|
+
default:
|
|
47
|
+
return framework;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function getStatusIcon(status) {
|
|
51
|
+
switch (status) {
|
|
52
|
+
case 'COMPLIANT':
|
|
53
|
+
return '✅';
|
|
54
|
+
case 'NON_COMPLIANT':
|
|
55
|
+
return '❌';
|
|
56
|
+
case 'PARTIAL':
|
|
57
|
+
return '⚠️';
|
|
58
|
+
case 'NOT_APPLICABLE':
|
|
59
|
+
return '➖';
|
|
60
|
+
default:
|
|
61
|
+
return '❓';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function formatArticle(article) {
|
|
65
|
+
const icon = getStatusIcon(article.status);
|
|
66
|
+
let output = `${icon} ${article.id}: ${article.title}\n`;
|
|
67
|
+
output += ` Status: ${article.status}\n`;
|
|
68
|
+
if (article.findings.length > 0) {
|
|
69
|
+
output += ` Findings: ${article.findings.length}\n`;
|
|
70
|
+
for (const finding of article.findings.slice(0, 3)) {
|
|
71
|
+
output += ` • ${finding.message} (${finding.file}:${finding.line})\n`;
|
|
72
|
+
}
|
|
73
|
+
if (article.findings.length > 3) {
|
|
74
|
+
output += ` ... and ${article.findings.length - 3} more\n`;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (article.recommendations.length > 0) {
|
|
78
|
+
output += ` Recommendations:\n`;
|
|
79
|
+
for (const rec of article.recommendations) {
|
|
80
|
+
output += ` 💡 ${rec}\n`;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return output;
|
|
84
|
+
}
|
|
85
|
+
// =============================================================================
|
|
86
|
+
// Handler
|
|
87
|
+
// =============================================================================
|
|
88
|
+
async function complianceHandler(rawArgs) {
|
|
89
|
+
// Validate arguments
|
|
90
|
+
const parseResult = ComplianceArgsSchema.safeParse(rawArgs);
|
|
91
|
+
if (!parseResult.success) {
|
|
92
|
+
return {
|
|
93
|
+
content: [
|
|
94
|
+
{
|
|
95
|
+
type: 'text',
|
|
96
|
+
text: `Invalid arguments: ${parseResult.error.message}`,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
isError: true,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const args = parseResult.data;
|
|
103
|
+
try {
|
|
104
|
+
// Read files from path
|
|
105
|
+
const readResult = readDirectory(args.path);
|
|
106
|
+
if (readResult.files.length === 0) {
|
|
107
|
+
return {
|
|
108
|
+
content: [
|
|
109
|
+
{
|
|
110
|
+
type: 'text',
|
|
111
|
+
text: `No scannable files found in: ${args.path}`,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
isError: true,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// Get relative paths
|
|
118
|
+
const files = getRelativePaths(readResult.files, args.path);
|
|
119
|
+
// Call Inkog API
|
|
120
|
+
const client = getClient();
|
|
121
|
+
const response = await client.generateComplianceReport(files, {
|
|
122
|
+
framework: args.framework,
|
|
123
|
+
format: args.format,
|
|
124
|
+
});
|
|
125
|
+
// If format is markdown or pdf, return the pre-formatted content
|
|
126
|
+
if (args.format !== 'json' && response.reportContent !== undefined) {
|
|
127
|
+
return {
|
|
128
|
+
content: [
|
|
129
|
+
{
|
|
130
|
+
type: 'text',
|
|
131
|
+
text: response.reportContent,
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// Build formatted output
|
|
137
|
+
const frameworkName = getFrameworkDisplayName(response.framework);
|
|
138
|
+
const overallIcon = getStatusIcon(response.overallStatus);
|
|
139
|
+
let output = '╔══════════════════════════════════════════════════════╗\n';
|
|
140
|
+
output += '║ 📋 Compliance Report ║\n';
|
|
141
|
+
output += '╚══════════════════════════════════════════════════════╝\n\n';
|
|
142
|
+
output += `🏛️ Framework: ${frameworkName}\n`;
|
|
143
|
+
output += `📊 Compliance Score: ${response.complianceScore}/100\n`;
|
|
144
|
+
output += `${overallIcon} Overall Status: ${response.overallStatus}\n`;
|
|
145
|
+
output += `📅 Generated: ${response.generatedAt}\n\n`;
|
|
146
|
+
// Executive Summary
|
|
147
|
+
output += '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n';
|
|
148
|
+
output += '📝 EXECUTIVE SUMMARY\n\n';
|
|
149
|
+
output += response.executiveSummary + '\n\n';
|
|
150
|
+
// Article breakdown
|
|
151
|
+
if (response.articles.length > 0) {
|
|
152
|
+
output += '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n';
|
|
153
|
+
output += '📑 ARTICLE BREAKDOWN\n\n';
|
|
154
|
+
// Group by status
|
|
155
|
+
const compliant = response.articles.filter((a) => a.status === 'COMPLIANT');
|
|
156
|
+
const nonCompliant = response.articles.filter((a) => a.status === 'NON_COMPLIANT');
|
|
157
|
+
const partial = response.articles.filter((a) => a.status === 'PARTIAL');
|
|
158
|
+
if (nonCompliant.length > 0) {
|
|
159
|
+
output += '❌ NON-COMPLIANT:\n\n';
|
|
160
|
+
for (const article of nonCompliant) {
|
|
161
|
+
output += formatArticle(article) + '\n';
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (partial.length > 0) {
|
|
165
|
+
output += '⚠️ PARTIAL COMPLIANCE:\n\n';
|
|
166
|
+
for (const article of partial) {
|
|
167
|
+
output += formatArticle(article) + '\n';
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (compliant.length > 0) {
|
|
171
|
+
output += '✅ COMPLIANT:\n\n';
|
|
172
|
+
for (const article of compliant) {
|
|
173
|
+
output += ` ${article.id}: ${article.title}\n`;
|
|
174
|
+
}
|
|
175
|
+
output += '\n';
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// EU AI Act specific note
|
|
179
|
+
if (response.framework === 'eu-ai-act') {
|
|
180
|
+
output += '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n';
|
|
181
|
+
output += '📌 EU AI ACT NOTE\n\n';
|
|
182
|
+
output += 'Article 14 (Human Oversight) deadline: August 2, 2026\n';
|
|
183
|
+
output += 'Ensure all high-risk AI systems have:\n';
|
|
184
|
+
output += '• Human-in-the-loop controls\n';
|
|
185
|
+
output += '• Ability to interrupt operations\n';
|
|
186
|
+
output += '• Audit logging of all actions\n';
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
content: [
|
|
190
|
+
{
|
|
191
|
+
type: 'text',
|
|
192
|
+
text: output,
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
if (error instanceof InkogAuthError) {
|
|
199
|
+
return {
|
|
200
|
+
content: [
|
|
201
|
+
{
|
|
202
|
+
type: 'text',
|
|
203
|
+
text: '🔐 API Key Required\n\nGet your free key at https://app.inkog.io',
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
isError: true,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
if (error instanceof InkogNetworkError) {
|
|
210
|
+
return {
|
|
211
|
+
content: [
|
|
212
|
+
{
|
|
213
|
+
type: 'text',
|
|
214
|
+
text: `Network error: ${error.message}`,
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
isError: true,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
throw error;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// =============================================================================
|
|
224
|
+
// Tool Definition
|
|
225
|
+
// =============================================================================
|
|
226
|
+
export const complianceTool = {
|
|
227
|
+
tool: {
|
|
228
|
+
name: 'inkog_compliance_report',
|
|
229
|
+
description: 'Generate a compliance report for EU AI Act, NIST AI RMF, ISO 42001, or OWASP LLM Top 10. Analyzes agent code and maps findings to regulatory requirements.',
|
|
230
|
+
inputSchema: {
|
|
231
|
+
type: 'object',
|
|
232
|
+
properties: {
|
|
233
|
+
path: {
|
|
234
|
+
type: 'string',
|
|
235
|
+
description: 'Path to scan for compliance analysis',
|
|
236
|
+
},
|
|
237
|
+
framework: {
|
|
238
|
+
type: 'string',
|
|
239
|
+
enum: ['eu-ai-act', 'nist-ai-rmf', 'iso-42001', 'owasp-llm-top-10', 'all'],
|
|
240
|
+
default: 'eu-ai-act',
|
|
241
|
+
description: 'Compliance framework: eu-ai-act (default), nist-ai-rmf, iso-42001, owasp-llm-top-10, or all',
|
|
242
|
+
},
|
|
243
|
+
format: {
|
|
244
|
+
type: 'string',
|
|
245
|
+
enum: ['markdown', 'json', 'pdf'],
|
|
246
|
+
default: 'markdown',
|
|
247
|
+
description: 'Output format: markdown (default), json, or pdf',
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
required: ['path'],
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
handler: complianceHandler,
|
|
254
|
+
};
|
|
255
|
+
//# sourceMappingURL=compliance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../src/tools/compliance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* inkog_explain_finding Tool
|
|
3
|
+
*
|
|
4
|
+
* P1 - Finding Explanation and Remediation Guidance
|
|
5
|
+
*
|
|
6
|
+
* Provides detailed explanations for security findings including:
|
|
7
|
+
* - What the vulnerability is
|
|
8
|
+
* - Why it's dangerous
|
|
9
|
+
* - How to fix it
|
|
10
|
+
* - Code examples (vulnerable vs secure)
|
|
11
|
+
*/
|
|
12
|
+
import type { ToolDefinition } from './index.js';
|
|
13
|
+
export declare const explainTool: ToolDefinition;
|
|
14
|
+
//# sourceMappingURL=explain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/tools/explain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,YAAY,CAAC;AAuM7D,eAAO,MAAM,WAAW,EAAE,cAqBzB,CAAC"}
|