@tng-sh/mcp-server 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 (46) hide show
  1. package/README.md +461 -0
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +189 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/init.d.ts +2 -0
  7. package/dist/init.d.ts.map +1 -0
  8. package/dist/init.js +113 -0
  9. package/dist/init.js.map +1 -0
  10. package/dist/tools/audit.d.ts +21 -0
  11. package/dist/tools/audit.d.ts.map +1 -0
  12. package/dist/tools/audit.js +204 -0
  13. package/dist/tools/audit.js.map +1 -0
  14. package/dist/tools/clones.d.ts +20 -0
  15. package/dist/tools/clones.d.ts.map +1 -0
  16. package/dist/tools/clones.js +202 -0
  17. package/dist/tools/clones.js.map +1 -0
  18. package/dist/tools/config.d.ts +30 -0
  19. package/dist/tools/config.d.ts.map +1 -0
  20. package/dist/tools/config.js +51 -0
  21. package/dist/tools/config.js.map +1 -0
  22. package/dist/tools/deadcode.d.ts +19 -0
  23. package/dist/tools/deadcode.d.ts.map +1 -0
  24. package/dist/tools/deadcode.js +223 -0
  25. package/dist/tools/deadcode.js.map +1 -0
  26. package/dist/tools/generate.d.ts +21 -0
  27. package/dist/tools/generate.d.ts.map +1 -0
  28. package/dist/tools/generate.js +186 -0
  29. package/dist/tools/generate.js.map +1 -0
  30. package/dist/tools/list.d.ts +18 -0
  31. package/dist/tools/list.d.ts.map +1 -0
  32. package/dist/tools/list.js +147 -0
  33. package/dist/tools/list.js.map +1 -0
  34. package/dist/tools/trace.d.ts +20 -0
  35. package/dist/tools/trace.d.ts.map +1 -0
  36. package/dist/tools/trace.js +194 -0
  37. package/dist/tools/trace.js.map +1 -0
  38. package/dist/tools/utils.d.ts +19 -0
  39. package/dist/tools/utils.d.ts.map +1 -0
  40. package/dist/tools/utils.js +143 -0
  41. package/dist/tools/utils.js.map +1 -0
  42. package/dist/tools/xray.d.ts +20 -0
  43. package/dist/tools/xray.d.ts.map +1 -0
  44. package/dist/tools/xray.js +187 -0
  45. package/dist/tools/xray.js.map +1 -0
  46. package/package.json +44 -0
@@ -0,0 +1,187 @@
1
+ import { exec, execFile } from 'child_process';
2
+ import { promisify } from 'util';
3
+ import { resolve } from 'path';
4
+ import { findProjectRoot, getTngCommandConfig, getShellEnv, shellEscape } from './utils.js';
5
+ const execAsync = promisify(exec);
6
+ const execFileAsync = promisify(execFile);
7
+ export async function xrayMethod(args) {
8
+ const { file_path, method_name, project_root } = args;
9
+ try {
10
+ const absoluteFilePath = resolve(file_path);
11
+ const cwd = project_root || findProjectRoot(absoluteFilePath) || process.cwd();
12
+ const tngCommand = getTngCommandConfig(cwd, file_path);
13
+ // Build xray command with JSON output
14
+ // For JS: tng xray --json -f "file" -m "method"
15
+ // For Python: tng xray --json -f "file" -m "method"
16
+ // For Ruby: tng --file "file" --method "method" --xray --json
17
+ const ext = file_path.split('.').pop()?.toLowerCase();
18
+ let command;
19
+ let baseArgs = [];
20
+ if (ext === 'rb') {
21
+ baseArgs = ['--json', '-f', file_path, '-m', method_name, '--xray'];
22
+ }
23
+ else {
24
+ // JS/Python have dedicated xray command
25
+ baseArgs = ['xray', '--json', '-f', file_path, '-m', method_name];
26
+ }
27
+ command = tngCommand.shell
28
+ ? `${tngCommand.cmd} ${baseArgs.map(shellEscape).join(' ')}`
29
+ : `${tngCommand.cmd} ${[...tngCommand.args, ...baseArgs].map(shellEscape).join(' ')}`;
30
+ console.error(`[TNG MCP] Running: ${command}`);
31
+ console.error(`[TNG MCP] CWD: ${cwd}`);
32
+ const { stdout, stderr } = tngCommand.shell
33
+ ? await execAsync(command, {
34
+ cwd,
35
+ env: getShellEnv(),
36
+ timeout: 120000, // 2 minutes
37
+ maxBuffer: 10 * 1024 * 1024,
38
+ })
39
+ : await execFileAsync(tngCommand.cmd, [...tngCommand.args, ...baseArgs], {
40
+ cwd,
41
+ env: getShellEnv(),
42
+ timeout: 120000,
43
+ maxBuffer: 10 * 1024 * 1024,
44
+ });
45
+ if (stderr && !stderr.includes('TNG')) {
46
+ console.error('[TNG MCP] stderr:', stderr);
47
+ }
48
+ // Parse JSON output
49
+ const lines = stdout.trim().split('\n');
50
+ let result = null;
51
+ for (const line of lines) {
52
+ if (!line.trim())
53
+ continue;
54
+ try {
55
+ const event = JSON.parse(line);
56
+ if (event.type === 'result' || event.mermaid || event.diagram) {
57
+ result = event;
58
+ break;
59
+ }
60
+ if (event.type === 'error' || event.type === 'auth_error') {
61
+ throw new Error(event.message || 'X-Ray generation failed');
62
+ }
63
+ }
64
+ catch (e) {
65
+ // Try parsing as single JSON
66
+ if (line.includes('{') && (line.includes('mermaid') || line.includes('diagram'))) {
67
+ result = JSON.parse(line);
68
+ }
69
+ }
70
+ }
71
+ if (!result) {
72
+ return {
73
+ content: [
74
+ {
75
+ type: 'text',
76
+ text: `No X-Ray results returned. Raw output:\n${stdout.substring(0, 500)}`,
77
+ },
78
+ ],
79
+ isError: true,
80
+ };
81
+ }
82
+ const formattedOutput = formatXRayResult(result, file_path, method_name);
83
+ return {
84
+ content: [
85
+ {
86
+ type: 'text',
87
+ text: formattedOutput,
88
+ },
89
+ ],
90
+ };
91
+ }
92
+ catch (error) {
93
+ if (error.code === 'ENOENT') {
94
+ return {
95
+ content: [
96
+ {
97
+ type: 'text',
98
+ text: `Error: TNG CLI not found in project. Please install TNG first.`,
99
+ },
100
+ ],
101
+ isError: true,
102
+ };
103
+ }
104
+ if (error.killed) {
105
+ return {
106
+ content: [
107
+ {
108
+ type: 'text',
109
+ text: `Error: X-Ray generation timed out after 2 minutes.`,
110
+ },
111
+ ],
112
+ isError: true,
113
+ };
114
+ }
115
+ let errorMessage = error.message;
116
+ try {
117
+ const errorOutput = error.stdout || error.stderr || '';
118
+ const lines = errorOutput.split('\n');
119
+ for (const line of lines) {
120
+ if (!line.trim())
121
+ continue;
122
+ try {
123
+ const event = JSON.parse(line);
124
+ if (event.type === 'error' || event.type === 'auth_error') {
125
+ errorMessage = event.message || errorMessage;
126
+ break;
127
+ }
128
+ }
129
+ catch { }
130
+ }
131
+ }
132
+ catch { }
133
+ return {
134
+ content: [
135
+ {
136
+ type: 'text',
137
+ text: `Error generating X-Ray for ${file_path}#${method_name}: ${errorMessage}`,
138
+ },
139
+ ],
140
+ isError: true,
141
+ };
142
+ }
143
+ }
144
+ function formatXRayResult(result, filePath, methodName) {
145
+ let mermaidCode = result.mermaid || result.diagram || result.visualization || '';
146
+ const className = result.class_name || result.className || '';
147
+ const fullName = className ? `${className}#${methodName}` : methodName;
148
+ // Fallback: If no mermaid code but we have a timeline (Ruby trace), generate a flowchart
149
+ if (!mermaidCode && Array.isArray(result.timeline)) {
150
+ mermaidCode = 'graph TD\n';
151
+ mermaidCode += ` Start([Start: ${methodName}])\n`;
152
+ let prevNode = 'Start';
153
+ result.timeline.forEach((step, idx) => {
154
+ const nodeId = `step${idx}`;
155
+ const label = step.code.replace(/"/g, "'");
156
+ const action = step.action || 'STEP';
157
+ // Map actions to shapes
158
+ if (action === 'IF' || action === 'SWITCH' || action === 'GUARD_CLAUSE') {
159
+ mermaidCode += ` ${nodeId}{"${label}"}\n`;
160
+ }
161
+ else if (action === 'CALL' || action === 'ASSIGNMENT') {
162
+ mermaidCode += ` ${nodeId}["${label}"]\n`;
163
+ }
164
+ else if (action === 'EXIT' || action === 'FAILURE') {
165
+ mermaidCode += ` ${nodeId}(("${label}"))\n`;
166
+ }
167
+ else {
168
+ mermaidCode += ` ${nodeId}["${label}"]\n`;
169
+ }
170
+ mermaidCode += ` ${prevNode} --> ${nodeId}\n`;
171
+ prevNode = nodeId;
172
+ });
173
+ mermaidCode += ` ${prevNode} --> End([End])\n`;
174
+ }
175
+ let output = `# X-Ray Visualization for ${fullName}\n\n`;
176
+ output += `**File:** ${filePath}\n\n`;
177
+ if (mermaidCode) {
178
+ output += `## Mermaid Flowchart\n\n`;
179
+ output += `\`\`\`mermaid\n${mermaidCode}\n\`\`\`\n\n`;
180
+ output += `> **Tip:** Copy the Mermaid code above and paste it into [mermaid.live](https://mermaid.live) to view the interactive diagram.\n`;
181
+ }
182
+ else {
183
+ output += `⚠️ No Mermaid diagram was generated.\n`;
184
+ }
185
+ return output;
186
+ }
187
+ //# sourceMappingURL=xray.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xray.js","sourceRoot":"","sources":["../../src/tools/xray.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@tng-sh/mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for TNG test generation and code auditing",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "tng-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "start": "node dist/index.js",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "keywords": [
20
+ "mcp",
21
+ "tng",
22
+ "testing",
23
+ "code-audit",
24
+ "ai",
25
+ "assistant"
26
+ ],
27
+ "author": "Binary Dreams LLC",
28
+ "license": "MIT",
29
+ "dependencies": {
30
+ "@modelcontextprotocol/sdk": "^1.0.4",
31
+ "zod": "^3.25.0"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^20.10.0",
35
+ "typescript": "^5.3.3"
36
+ },
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/tng-sh/mcp-server"
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ }
44
+ }