@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.
Files changed (55) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +265 -0
  3. package/dist/api/client.d.ts +108 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +288 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/api/types.d.ts +286 -0
  8. package/dist/api/types.d.ts.map +1 -0
  9. package/dist/api/types.js +21 -0
  10. package/dist/api/types.js.map +1 -0
  11. package/dist/config.d.ts +68 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +130 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/index.d.ts +19 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +203 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/tools/audit-a2a.d.ts +20 -0
  20. package/dist/tools/audit-a2a.d.ts.map +1 -0
  21. package/dist/tools/audit-a2a.js +382 -0
  22. package/dist/tools/audit-a2a.js.map +1 -0
  23. package/dist/tools/audit-mcp.d.ts +16 -0
  24. package/dist/tools/audit-mcp.d.ts.map +1 -0
  25. package/dist/tools/audit-mcp.js +259 -0
  26. package/dist/tools/audit-mcp.js.map +1 -0
  27. package/dist/tools/compliance.d.ts +14 -0
  28. package/dist/tools/compliance.d.ts.map +1 -0
  29. package/dist/tools/compliance.js +255 -0
  30. package/dist/tools/compliance.js.map +1 -0
  31. package/dist/tools/explain.d.ts +14 -0
  32. package/dist/tools/explain.d.ts.map +1 -0
  33. package/dist/tools/explain.js +202 -0
  34. package/dist/tools/explain.js.map +1 -0
  35. package/dist/tools/governance.d.ts +16 -0
  36. package/dist/tools/governance.d.ts.map +1 -0
  37. package/dist/tools/governance.js +200 -0
  38. package/dist/tools/governance.js.map +1 -0
  39. package/dist/tools/index.d.ts +50 -0
  40. package/dist/tools/index.d.ts.map +1 -0
  41. package/dist/tools/index.js +94 -0
  42. package/dist/tools/index.js.map +1 -0
  43. package/dist/tools/mlbom.d.ts +18 -0
  44. package/dist/tools/mlbom.d.ts.map +1 -0
  45. package/dist/tools/mlbom.js +344 -0
  46. package/dist/tools/mlbom.js.map +1 -0
  47. package/dist/tools/scan.d.ts +15 -0
  48. package/dist/tools/scan.d.ts.map +1 -0
  49. package/dist/tools/scan.js +270 -0
  50. package/dist/tools/scan.js.map +1 -0
  51. package/dist/utils/file-reader.d.ts +55 -0
  52. package/dist/utils/file-reader.d.ts.map +1 -0
  53. package/dist/utils/file-reader.js +269 -0
  54. package/dist/utils/file-reader.js.map +1 -0
  55. package/package.json +64 -0
@@ -0,0 +1,55 @@
1
+ /**
2
+ * File Reader Utility
3
+ *
4
+ * Safe file system operations for reading agent codebases.
5
+ * Features:
6
+ * - Directory traversal with configurable patterns
7
+ * - Binary file detection
8
+ * - Size limits
9
+ * - Ignore patterns (node_modules, .git, etc.)
10
+ */
11
+ export interface FileInput {
12
+ path: string;
13
+ content: string;
14
+ }
15
+ export interface ReadOptions {
16
+ /** Maximum file size in bytes (default: 1MB) */
17
+ maxFileSize?: number;
18
+ /** Maximum total size in bytes (default: 10MB) */
19
+ maxTotalSize?: number;
20
+ /** Maximum number of files (default: 100) */
21
+ maxFiles?: number;
22
+ /** File extensions to include (default: common code extensions) */
23
+ extensions?: string[];
24
+ /** Patterns to ignore (default: node_modules, .git, etc.) */
25
+ ignorePatterns?: string[];
26
+ }
27
+ export interface ReadResult {
28
+ files: FileInput[];
29
+ skipped: {
30
+ path: string;
31
+ reason: string;
32
+ }[];
33
+ totalSize: number;
34
+ }
35
+ /**
36
+ * Read a single file safely
37
+ */
38
+ export declare function readFile(filePath: string, options?: ReadOptions): FileInput | null;
39
+ /**
40
+ * Read all files from a directory recursively
41
+ */
42
+ export declare function readDirectory(dirPath: string, options?: ReadOptions): ReadResult;
43
+ /**
44
+ * Get relative paths for display
45
+ */
46
+ export declare function getRelativePaths(files: FileInput[], basePath: string): FileInput[];
47
+ /**
48
+ * Check if a path looks like an AGENTS.md file
49
+ */
50
+ export declare function isAgentsMdFile(filePath: string): boolean;
51
+ /**
52
+ * Find AGENTS.md file in a directory
53
+ */
54
+ export declare function findAgentsMd(dirPath: string): string | null;
55
+ //# sourceMappingURL=file-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-reader.d.ts","sourceRoot":"","sources":["../../src/utils/file-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;IACJ,SAAS,EAAE,MAAM,CAAC;CACnB;AA0FD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CA6BlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAsHhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAMlF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwB3D"}
@@ -0,0 +1,269 @@
1
+ /**
2
+ * File Reader Utility
3
+ *
4
+ * Safe file system operations for reading agent codebases.
5
+ * Features:
6
+ * - Directory traversal with configurable patterns
7
+ * - Binary file detection
8
+ * - Size limits
9
+ * - Ignore patterns (node_modules, .git, etc.)
10
+ */
11
+ import * as fs from 'node:fs';
12
+ import * as path from 'node:path';
13
+ // =============================================================================
14
+ // Constants
15
+ // =============================================================================
16
+ const DEFAULT_EXTENSIONS = [
17
+ '.py',
18
+ '.js',
19
+ '.jsx',
20
+ '.ts',
21
+ '.tsx',
22
+ '.go',
23
+ '.java',
24
+ '.rb',
25
+ '.php',
26
+ '.cs',
27
+ '.rs',
28
+ '.c',
29
+ '.cpp',
30
+ '.h',
31
+ '.hpp',
32
+ '.yaml',
33
+ '.yml',
34
+ '.json',
35
+ '.md',
36
+ '.env',
37
+ '.conf',
38
+ '.cfg',
39
+ '.toml',
40
+ '.xml',
41
+ ];
42
+ const DEFAULT_IGNORE_PATTERNS = [
43
+ 'node_modules',
44
+ '.git',
45
+ '__pycache__',
46
+ '.venv',
47
+ 'venv',
48
+ 'vendor',
49
+ 'dist',
50
+ 'build',
51
+ '.next',
52
+ '.nuxt',
53
+ 'coverage',
54
+ '.pytest_cache',
55
+ '.mypy_cache',
56
+ 'target', // Rust/Java
57
+ 'bin',
58
+ 'obj',
59
+ '.idea',
60
+ '.vscode',
61
+ '.DS_Store',
62
+ 'Thumbs.db',
63
+ ];
64
+ const DEFAULT_MAX_FILE_SIZE = 1 * 1024 * 1024; // 1MB
65
+ const DEFAULT_MAX_TOTAL_SIZE = 10 * 1024 * 1024; // 10MB
66
+ const DEFAULT_MAX_FILES = 100;
67
+ // =============================================================================
68
+ // File Reader
69
+ // =============================================================================
70
+ /**
71
+ * Check if a path should be ignored
72
+ */
73
+ function shouldIgnore(filePath, ignorePatterns) {
74
+ const normalizedPath = filePath.replace(/\\/g, '/');
75
+ return ignorePatterns.some((pattern) => {
76
+ // Check if any path segment matches the pattern
77
+ const segments = normalizedPath.split('/');
78
+ return segments.some((segment) => segment === pattern || segment.startsWith(pattern + '.'));
79
+ });
80
+ }
81
+ /**
82
+ * Check if a file is likely binary
83
+ */
84
+ function isBinaryFile(buffer) {
85
+ // Check for null bytes in first 8KB
86
+ const sample = buffer.subarray(0, 8192);
87
+ for (const byte of sample) {
88
+ if (byte === 0) {
89
+ return true;
90
+ }
91
+ }
92
+ return false;
93
+ }
94
+ /**
95
+ * Read a single file safely
96
+ */
97
+ export function readFile(filePath, options) {
98
+ const maxFileSize = options?.maxFileSize ?? DEFAULT_MAX_FILE_SIZE;
99
+ try {
100
+ const stats = fs.statSync(filePath);
101
+ if (!stats.isFile()) {
102
+ return null;
103
+ }
104
+ if (stats.size > maxFileSize) {
105
+ return null;
106
+ }
107
+ const buffer = fs.readFileSync(filePath);
108
+ if (isBinaryFile(buffer)) {
109
+ return null;
110
+ }
111
+ const content = buffer.toString('utf-8');
112
+ return {
113
+ path: filePath,
114
+ content,
115
+ };
116
+ }
117
+ catch {
118
+ return null;
119
+ }
120
+ }
121
+ /**
122
+ * Read all files from a directory recursively
123
+ */
124
+ export function readDirectory(dirPath, options) {
125
+ const maxFileSize = options?.maxFileSize ?? DEFAULT_MAX_FILE_SIZE;
126
+ const maxTotalSize = options?.maxTotalSize ?? DEFAULT_MAX_TOTAL_SIZE;
127
+ const maxFiles = options?.maxFiles ?? DEFAULT_MAX_FILES;
128
+ const extensions = options?.extensions ?? DEFAULT_EXTENSIONS;
129
+ const ignorePatterns = options?.ignorePatterns ?? DEFAULT_IGNORE_PATTERNS;
130
+ const result = {
131
+ files: [],
132
+ skipped: [],
133
+ totalSize: 0,
134
+ };
135
+ function walk(currentPath) {
136
+ // Stop if we've hit limits
137
+ if (result.files.length >= maxFiles) {
138
+ return;
139
+ }
140
+ if (result.totalSize >= maxTotalSize) {
141
+ return;
142
+ }
143
+ // Check if path should be ignored
144
+ if (shouldIgnore(currentPath, ignorePatterns)) {
145
+ result.skipped.push({ path: currentPath, reason: 'ignored_pattern' });
146
+ return;
147
+ }
148
+ let stats;
149
+ try {
150
+ stats = fs.statSync(currentPath);
151
+ }
152
+ catch {
153
+ result.skipped.push({ path: currentPath, reason: 'read_error' });
154
+ return;
155
+ }
156
+ if (stats.isDirectory()) {
157
+ let entries;
158
+ try {
159
+ entries = fs.readdirSync(currentPath);
160
+ }
161
+ catch {
162
+ result.skipped.push({ path: currentPath, reason: 'read_error' });
163
+ return;
164
+ }
165
+ for (const entry of entries) {
166
+ walk(path.join(currentPath, entry));
167
+ }
168
+ }
169
+ else if (stats.isFile()) {
170
+ // Check extension
171
+ const ext = path.extname(currentPath).toLowerCase();
172
+ if (extensions.length > 0 && !extensions.includes(ext)) {
173
+ result.skipped.push({ path: currentPath, reason: 'extension_not_supported' });
174
+ return;
175
+ }
176
+ // Check file size
177
+ if (stats.size > maxFileSize) {
178
+ result.skipped.push({ path: currentPath, reason: 'file_too_large' });
179
+ return;
180
+ }
181
+ // Check total size limit
182
+ if (result.totalSize + stats.size > maxTotalSize) {
183
+ result.skipped.push({ path: currentPath, reason: 'total_size_exceeded' });
184
+ return;
185
+ }
186
+ // Check file count limit
187
+ if (result.files.length >= maxFiles) {
188
+ result.skipped.push({ path: currentPath, reason: 'max_files_exceeded' });
189
+ return;
190
+ }
191
+ // Read file
192
+ try {
193
+ const buffer = fs.readFileSync(currentPath);
194
+ if (isBinaryFile(buffer)) {
195
+ result.skipped.push({ path: currentPath, reason: 'binary_file' });
196
+ return;
197
+ }
198
+ const content = buffer.toString('utf-8');
199
+ result.files.push({
200
+ path: currentPath,
201
+ content,
202
+ });
203
+ result.totalSize += stats.size;
204
+ }
205
+ catch {
206
+ result.skipped.push({ path: currentPath, reason: 'read_error' });
207
+ }
208
+ }
209
+ }
210
+ // Normalize path
211
+ const resolvedPath = path.resolve(dirPath);
212
+ // Check if path exists
213
+ if (!fs.existsSync(resolvedPath)) {
214
+ throw new Error(`Path does not exist: ${dirPath}`);
215
+ }
216
+ const stats = fs.statSync(resolvedPath);
217
+ if (stats.isFile()) {
218
+ // Single file
219
+ const file = readFile(resolvedPath, options);
220
+ if (file !== null) {
221
+ result.files.push(file);
222
+ result.totalSize = stats.size;
223
+ }
224
+ }
225
+ else if (stats.isDirectory()) {
226
+ walk(resolvedPath);
227
+ }
228
+ return result;
229
+ }
230
+ /**
231
+ * Get relative paths for display
232
+ */
233
+ export function getRelativePaths(files, basePath) {
234
+ const resolvedBase = path.resolve(basePath);
235
+ return files.map((file) => ({
236
+ path: path.relative(resolvedBase, file.path),
237
+ content: file.content,
238
+ }));
239
+ }
240
+ /**
241
+ * Check if a path looks like an AGENTS.md file
242
+ */
243
+ export function isAgentsMdFile(filePath) {
244
+ const filename = path.basename(filePath).toLowerCase();
245
+ return filename === 'agents.md';
246
+ }
247
+ /**
248
+ * Find AGENTS.md file in a directory
249
+ */
250
+ export function findAgentsMd(dirPath) {
251
+ const resolvedPath = path.resolve(dirPath);
252
+ if (!fs.existsSync(resolvedPath)) {
253
+ return null;
254
+ }
255
+ const stats = fs.statSync(resolvedPath);
256
+ if (stats.isFile()) {
257
+ return isAgentsMdFile(resolvedPath) ? resolvedPath : null;
258
+ }
259
+ // Check common locations
260
+ const candidates = ['AGENTS.md', 'agents.md', 'Agents.md', '.agents.md'];
261
+ for (const candidate of candidates) {
262
+ const candidatePath = path.join(resolvedPath, candidate);
263
+ if (fs.existsSync(candidatePath)) {
264
+ return candidatePath;
265
+ }
266
+ }
267
+ return null;
268
+ }
269
+ //# sourceMappingURL=file-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-reader.js","sourceRoot":"","sources":["../../src/utils/file-reader.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@inkog-io/mcp",
3
+ "version": "1.0.0",
4
+ "description": "Inkog AI Security Platform - MCP Server for AI agent vulnerability scanning, AGENTS.md governance verification, and compliance reporting",
5
+ "author": "Inkog <hello@inkog.io>",
6
+ "license": "Apache-2.0",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/inkog-io/inkog-mcp"
10
+ },
11
+ "homepage": "https://inkog.io",
12
+ "keywords": [
13
+ "mcp",
14
+ "ai-security",
15
+ "ai-agents",
16
+ "agents-md",
17
+ "governance",
18
+ "compliance",
19
+ "eu-ai-act",
20
+ "langchain",
21
+ "crewai",
22
+ "langgraph",
23
+ "vulnerability-scanner"
24
+ ],
25
+ "type": "module",
26
+ "main": "dist/index.js",
27
+ "types": "dist/index.d.ts",
28
+ "bin": {
29
+ "inkog-mcp": "dist/index.js"
30
+ },
31
+ "files": [
32
+ "dist",
33
+ "README.md",
34
+ "LICENSE"
35
+ ],
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "dev": "tsc --watch",
39
+ "lint": "eslint src",
40
+ "lint:fix": "eslint src --fix",
41
+ "format": "prettier --write \"src/**/*.ts\"",
42
+ "typecheck": "tsc --noEmit",
43
+ "test": "vitest",
44
+ "test:run": "vitest run",
45
+ "prepublishOnly": "npm run build && npm run lint && npm run test:run"
46
+ },
47
+ "dependencies": {
48
+ "@modelcontextprotocol/sdk": "^1.0.0",
49
+ "zod": "^3.23.0"
50
+ },
51
+ "devDependencies": {
52
+ "@eslint/js": "^9.0.0",
53
+ "@types/node": "^22.0.0",
54
+ "eslint": "^9.0.0",
55
+ "eslint-config-prettier": "^9.1.0",
56
+ "prettier": "^3.2.0",
57
+ "typescript": "^5.4.0",
58
+ "typescript-eslint": "^8.0.0",
59
+ "vitest": "^1.6.0"
60
+ },
61
+ "engines": {
62
+ "node": ">=18.0.0"
63
+ }
64
+ }