@asifkibria/claude-code-toolkit 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/CONTRIBUTING.md +187 -0
- package/LICENSE +21 -0
- package/README.md +258 -0
- package/dist/__tests__/scanner.test.d.ts +2 -0
- package/dist/__tests__/scanner.test.d.ts.map +1 -0
- package/dist/__tests__/scanner.test.js +409 -0
- package/dist/__tests__/scanner.test.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +389 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +514 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/scanner.d.ts +50 -0
- package/dist/lib/scanner.d.ts.map +1 -0
- package/dist/lib/scanner.js +369 -0
- package/dist/lib/scanner.js.map +1 -0
- package/package.json +63 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* MCP Server: Claude Code Image Fixer
|
|
4
|
+
* Fixes the "image dimensions exceed max allowed size" error that poisons conversation context.
|
|
5
|
+
* See: https://github.com/anthropics/claude-code/issues/2939
|
|
6
|
+
*/
|
|
7
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
8
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
10
|
+
import * as fs from "fs";
|
|
11
|
+
import * as path from "path";
|
|
12
|
+
import * as os from "os";
|
|
13
|
+
import { findAllJsonlFiles, findBackupFiles, scanFile, fixFile, getConversationStats, restoreFromBackup, deleteOldBackups, } from "./lib/scanner.js";
|
|
14
|
+
const CLAUDE_DIR = path.join(os.homedir(), ".claude");
|
|
15
|
+
const PROJECTS_DIR = path.join(CLAUDE_DIR, "projects");
|
|
16
|
+
function formatBytes(bytes) {
|
|
17
|
+
if (bytes < 1024)
|
|
18
|
+
return `${bytes} B`;
|
|
19
|
+
if (bytes < 1024 * 1024)
|
|
20
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
21
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
22
|
+
}
|
|
23
|
+
function formatDate(date) {
|
|
24
|
+
return date.toISOString().replace("T", " ").slice(0, 19);
|
|
25
|
+
}
|
|
26
|
+
const server = new Server({
|
|
27
|
+
name: "claude-code-toolkit",
|
|
28
|
+
version: "1.0.0",
|
|
29
|
+
}, {
|
|
30
|
+
capabilities: {
|
|
31
|
+
tools: {},
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
35
|
+
return {
|
|
36
|
+
tools: [
|
|
37
|
+
{
|
|
38
|
+
name: "scan_image_issues",
|
|
39
|
+
description: "Scan all Claude Code conversation files for oversized images that cause API errors. Returns detailed report of issues found without making changes.",
|
|
40
|
+
inputSchema: {
|
|
41
|
+
type: "object",
|
|
42
|
+
properties: {
|
|
43
|
+
path: {
|
|
44
|
+
type: "string",
|
|
45
|
+
description: "Optional: Scan only a specific file or directory. Defaults to all Claude projects.",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: "fix_image_issues",
|
|
52
|
+
description: "Fix oversized images in Claude Code conversations by replacing them with placeholder text. Creates backups before changes.",
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: "object",
|
|
55
|
+
properties: {
|
|
56
|
+
path: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "Optional: Fix only a specific file. Defaults to all files with issues.",
|
|
59
|
+
},
|
|
60
|
+
no_backup: {
|
|
61
|
+
type: "boolean",
|
|
62
|
+
description: "Skip creating backup files (not recommended). Default: false",
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "get_conversation_stats",
|
|
69
|
+
description: "Get detailed statistics about Claude Code conversations including message counts, tool usage, image counts, and file sizes.",
|
|
70
|
+
inputSchema: {
|
|
71
|
+
type: "object",
|
|
72
|
+
properties: {
|
|
73
|
+
path: {
|
|
74
|
+
type: "string",
|
|
75
|
+
description: "Optional: Get stats for a specific file. Defaults to summary of all conversations.",
|
|
76
|
+
},
|
|
77
|
+
sort_by: {
|
|
78
|
+
type: "string",
|
|
79
|
+
enum: ["size", "messages", "images", "modified"],
|
|
80
|
+
description: "Sort results by: size, messages, images, or modified date. Default: size",
|
|
81
|
+
},
|
|
82
|
+
limit: {
|
|
83
|
+
type: "number",
|
|
84
|
+
description: "Limit number of results. Default: 10",
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: "list_backups",
|
|
91
|
+
description: "List all backup files created by the image fixer, with size and date information.",
|
|
92
|
+
inputSchema: {
|
|
93
|
+
type: "object",
|
|
94
|
+
properties: {
|
|
95
|
+
sort_by: {
|
|
96
|
+
type: "string",
|
|
97
|
+
enum: ["date", "size"],
|
|
98
|
+
description: "Sort by: date or size. Default: date",
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: "restore_backup",
|
|
105
|
+
description: "Restore a conversation file from a backup.",
|
|
106
|
+
inputSchema: {
|
|
107
|
+
type: "object",
|
|
108
|
+
properties: {
|
|
109
|
+
backup_path: {
|
|
110
|
+
type: "string",
|
|
111
|
+
description: "The full path to the backup file to restore",
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
required: ["backup_path"],
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: "cleanup_backups",
|
|
119
|
+
description: "Delete old backup files to free up disk space.",
|
|
120
|
+
inputSchema: {
|
|
121
|
+
type: "object",
|
|
122
|
+
properties: {
|
|
123
|
+
older_than_days: {
|
|
124
|
+
type: "number",
|
|
125
|
+
description: "Delete backups older than this many days. Default: 7",
|
|
126
|
+
},
|
|
127
|
+
dry_run: {
|
|
128
|
+
type: "boolean",
|
|
129
|
+
description: "Show what would be deleted without actually deleting. Default: true",
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: "health_check",
|
|
136
|
+
description: "Quick health check of Claude Code conversations. Reports total issues, largest files, and recommendations.",
|
|
137
|
+
inputSchema: {
|
|
138
|
+
type: "object",
|
|
139
|
+
properties: {},
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
};
|
|
144
|
+
});
|
|
145
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
146
|
+
const { name, arguments: args } = request.params;
|
|
147
|
+
const typedArgs = (args || {});
|
|
148
|
+
try {
|
|
149
|
+
switch (name) {
|
|
150
|
+
case "scan_image_issues": {
|
|
151
|
+
const targetPath = typedArgs.path;
|
|
152
|
+
if (!fs.existsSync(PROJECTS_DIR)) {
|
|
153
|
+
return {
|
|
154
|
+
content: [{ type: "text", text: `Claude projects directory not found: ${PROJECTS_DIR}` }],
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
let files;
|
|
158
|
+
if (targetPath) {
|
|
159
|
+
if (fs.statSync(targetPath).isDirectory()) {
|
|
160
|
+
files = findAllJsonlFiles(targetPath);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
files = [targetPath];
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
files = findAllJsonlFiles(PROJECTS_DIR);
|
|
168
|
+
}
|
|
169
|
+
const results = [];
|
|
170
|
+
let totalIssues = 0;
|
|
171
|
+
for (const file of files) {
|
|
172
|
+
try {
|
|
173
|
+
const result = scanFile(file);
|
|
174
|
+
if (result.issues.length > 0) {
|
|
175
|
+
results.push(result);
|
|
176
|
+
totalIssues += result.issues.length;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (e) {
|
|
180
|
+
// Skip files that can't be read
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (results.length === 0) {
|
|
184
|
+
return {
|
|
185
|
+
content: [
|
|
186
|
+
{
|
|
187
|
+
type: "text",
|
|
188
|
+
text: `✅ Scanned ${files.length} file(s). No oversized images found.`,
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
let output = `🔍 **Scan Results**\n\n`;
|
|
194
|
+
output += `Found **${totalIssues}** oversized image(s) in **${results.length}** file(s)\n\n`;
|
|
195
|
+
for (const result of results) {
|
|
196
|
+
const relPath = path.relative(PROJECTS_DIR, result.file);
|
|
197
|
+
output += `### ${relPath}\n`;
|
|
198
|
+
for (const issue of result.issues) {
|
|
199
|
+
const sizeStr = formatBytes(issue.estimatedSize);
|
|
200
|
+
output += `- Line ${issue.line}: ${issue.type} (~${sizeStr})\n`;
|
|
201
|
+
}
|
|
202
|
+
output += "\n";
|
|
203
|
+
}
|
|
204
|
+
output += `\n💡 Run \`fix_image_issues\` to fix these issues.`;
|
|
205
|
+
return { content: [{ type: "text", text: output }] };
|
|
206
|
+
}
|
|
207
|
+
case "fix_image_issues": {
|
|
208
|
+
const targetPath = typedArgs.path;
|
|
209
|
+
const noBackup = typedArgs.no_backup;
|
|
210
|
+
if (!fs.existsSync(PROJECTS_DIR)) {
|
|
211
|
+
return {
|
|
212
|
+
content: [{ type: "text", text: `Claude projects directory not found: ${PROJECTS_DIR}` }],
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
let files;
|
|
216
|
+
if (targetPath) {
|
|
217
|
+
if (!fs.existsSync(targetPath)) {
|
|
218
|
+
return { content: [{ type: "text", text: `File not found: ${targetPath}` }] };
|
|
219
|
+
}
|
|
220
|
+
files = [targetPath];
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
files = findAllJsonlFiles(PROJECTS_DIR);
|
|
224
|
+
}
|
|
225
|
+
const results = [];
|
|
226
|
+
let totalFixed = 0;
|
|
227
|
+
for (const file of files) {
|
|
228
|
+
try {
|
|
229
|
+
const result = fixFile(file, !noBackup);
|
|
230
|
+
if (result.fixed) {
|
|
231
|
+
results.push(result);
|
|
232
|
+
totalFixed += result.issues.length;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
// Skip files that can't be processed
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (results.length === 0) {
|
|
240
|
+
return {
|
|
241
|
+
content: [{ type: "text", text: `✅ No issues to fix in ${files.length} file(s).` }],
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
let output = `🔧 **Fix Results**\n\n`;
|
|
245
|
+
output += `Fixed **${totalFixed}** oversized image(s) in **${results.length}** file(s)\n\n`;
|
|
246
|
+
for (const result of results) {
|
|
247
|
+
const relPath = path.relative(PROJECTS_DIR, result.file);
|
|
248
|
+
output += `### ${relPath}\n`;
|
|
249
|
+
output += `- Fixed ${result.issues.length} issue(s)\n`;
|
|
250
|
+
if (result.backupPath) {
|
|
251
|
+
output += `- Backup: \`${path.basename(result.backupPath)}\`\n`;
|
|
252
|
+
}
|
|
253
|
+
output += "\n";
|
|
254
|
+
}
|
|
255
|
+
output += `\n✅ All issues fixed. Restart Claude Code to apply changes.`;
|
|
256
|
+
return { content: [{ type: "text", text: output }] };
|
|
257
|
+
}
|
|
258
|
+
case "get_conversation_stats": {
|
|
259
|
+
const targetPath = typedArgs.path;
|
|
260
|
+
const sortBy = typedArgs.sort_by || "size";
|
|
261
|
+
const limit = typedArgs.limit || 10;
|
|
262
|
+
if (!fs.existsSync(PROJECTS_DIR)) {
|
|
263
|
+
return {
|
|
264
|
+
content: [{ type: "text", text: `Claude projects directory not found: ${PROJECTS_DIR}` }],
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
let files;
|
|
268
|
+
if (targetPath) {
|
|
269
|
+
files = [targetPath];
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
files = findAllJsonlFiles(PROJECTS_DIR);
|
|
273
|
+
}
|
|
274
|
+
const allStats = [];
|
|
275
|
+
for (const file of files) {
|
|
276
|
+
try {
|
|
277
|
+
const stats = getConversationStats(file);
|
|
278
|
+
allStats.push(stats);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// Skip
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Sort
|
|
285
|
+
allStats.sort((a, b) => {
|
|
286
|
+
switch (sortBy) {
|
|
287
|
+
case "messages":
|
|
288
|
+
return b.totalMessages - a.totalMessages;
|
|
289
|
+
case "images":
|
|
290
|
+
return b.imageCount - a.imageCount;
|
|
291
|
+
case "modified":
|
|
292
|
+
return b.lastModified.getTime() - a.lastModified.getTime();
|
|
293
|
+
default:
|
|
294
|
+
return b.fileSizeBytes - a.fileSizeBytes;
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
const displayed = allStats.slice(0, limit);
|
|
298
|
+
// Summary
|
|
299
|
+
const totalSize = allStats.reduce((sum, s) => sum + s.fileSizeBytes, 0);
|
|
300
|
+
const totalMessages = allStats.reduce((sum, s) => sum + s.totalMessages, 0);
|
|
301
|
+
const totalImages = allStats.reduce((sum, s) => sum + s.imageCount, 0);
|
|
302
|
+
const totalProblematic = allStats.reduce((sum, s) => sum + s.problematicImages, 0);
|
|
303
|
+
let output = `📊 **Conversation Statistics**\n\n`;
|
|
304
|
+
output += `**Summary** (${allStats.length} conversations)\n`;
|
|
305
|
+
output += `- Total size: ${formatBytes(totalSize)}\n`;
|
|
306
|
+
output += `- Total messages: ${totalMessages.toLocaleString()}\n`;
|
|
307
|
+
output += `- Total images: ${totalImages}\n`;
|
|
308
|
+
output += `- Problematic images: ${totalProblematic}\n\n`;
|
|
309
|
+
output += `**Top ${displayed.length} by ${sortBy}:**\n\n`;
|
|
310
|
+
for (const stats of displayed) {
|
|
311
|
+
const relPath = path.relative(PROJECTS_DIR, stats.file);
|
|
312
|
+
const shortPath = relPath.length > 50 ? "..." + relPath.slice(-47) : relPath;
|
|
313
|
+
output += `### ${shortPath}\n`;
|
|
314
|
+
output += `- Size: ${formatBytes(stats.fileSizeBytes)}\n`;
|
|
315
|
+
output += `- Messages: ${stats.totalMessages} (${stats.userMessages} user, ${stats.assistantMessages} assistant)\n`;
|
|
316
|
+
output += `- Tool uses: ${stats.toolUses}\n`;
|
|
317
|
+
output += `- Images: ${stats.imageCount}${stats.problematicImages > 0 ? ` (⚠️ ${stats.problematicImages} oversized)` : ""}\n`;
|
|
318
|
+
output += `- Modified: ${formatDate(stats.lastModified)}\n\n`;
|
|
319
|
+
}
|
|
320
|
+
return { content: [{ type: "text", text: output }] };
|
|
321
|
+
}
|
|
322
|
+
case "list_backups": {
|
|
323
|
+
const sortBy = typedArgs.sort_by || "date";
|
|
324
|
+
if (!fs.existsSync(PROJECTS_DIR)) {
|
|
325
|
+
return {
|
|
326
|
+
content: [{ type: "text", text: `Claude projects directory not found: ${PROJECTS_DIR}` }],
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
const backups = findBackupFiles(PROJECTS_DIR);
|
|
330
|
+
if (backups.length === 0) {
|
|
331
|
+
return { content: [{ type: "text", text: "No backup files found." }] };
|
|
332
|
+
}
|
|
333
|
+
const backupInfo = backups.map((b) => {
|
|
334
|
+
try {
|
|
335
|
+
const stat = fs.statSync(b);
|
|
336
|
+
return { path: b, size: stat.size, mtime: stat.mtime };
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return { path: b, size: 0, mtime: new Date(0) };
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
backupInfo.sort((a, b) => {
|
|
343
|
+
if (sortBy === "size")
|
|
344
|
+
return b.size - a.size;
|
|
345
|
+
return b.mtime.getTime() - a.mtime.getTime();
|
|
346
|
+
});
|
|
347
|
+
const totalSize = backupInfo.reduce((sum, b) => sum + b.size, 0);
|
|
348
|
+
let output = `📦 **Backup Files**\n\n`;
|
|
349
|
+
output += `Found ${backups.length} backup(s), total size: ${formatBytes(totalSize)}\n\n`;
|
|
350
|
+
for (const backup of backupInfo) {
|
|
351
|
+
const relPath = path.relative(PROJECTS_DIR, backup.path);
|
|
352
|
+
output += `- \`${relPath}\`\n`;
|
|
353
|
+
output += ` Size: ${formatBytes(backup.size)}, Created: ${formatDate(backup.mtime)}\n`;
|
|
354
|
+
}
|
|
355
|
+
output += `\n💡 Use \`restore_backup\` to restore or \`cleanup_backups\` to delete old ones.`;
|
|
356
|
+
return { content: [{ type: "text", text: output }] };
|
|
357
|
+
}
|
|
358
|
+
case "restore_backup": {
|
|
359
|
+
const backupPath = typedArgs.backup_path;
|
|
360
|
+
const result = restoreFromBackup(backupPath);
|
|
361
|
+
if (!result.success) {
|
|
362
|
+
return { content: [{ type: "text", text: `❌ Error: ${result.error}` }] };
|
|
363
|
+
}
|
|
364
|
+
return {
|
|
365
|
+
content: [
|
|
366
|
+
{
|
|
367
|
+
type: "text",
|
|
368
|
+
text: `✅ Restored \`${result.originalPath}\` from backup.\n\nRestart Claude Code to apply changes.`,
|
|
369
|
+
},
|
|
370
|
+
],
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
case "cleanup_backups": {
|
|
374
|
+
const olderThanDays = typedArgs.older_than_days || 7;
|
|
375
|
+
const dryRun = typedArgs.dry_run !== false;
|
|
376
|
+
if (!fs.existsSync(PROJECTS_DIR)) {
|
|
377
|
+
return {
|
|
378
|
+
content: [{ type: "text", text: `Claude projects directory not found: ${PROJECTS_DIR}` }],
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
if (dryRun) {
|
|
382
|
+
const backups = findBackupFiles(PROJECTS_DIR);
|
|
383
|
+
const cutoffDate = new Date();
|
|
384
|
+
cutoffDate.setDate(cutoffDate.getDate() - olderThanDays);
|
|
385
|
+
const toDelete = [];
|
|
386
|
+
for (const backup of backups) {
|
|
387
|
+
try {
|
|
388
|
+
const stat = fs.statSync(backup);
|
|
389
|
+
if (stat.mtime < cutoffDate) {
|
|
390
|
+
toDelete.push({ path: backup, size: stat.size });
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
catch {
|
|
394
|
+
// Skip
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
if (toDelete.length === 0) {
|
|
398
|
+
return {
|
|
399
|
+
content: [
|
|
400
|
+
{ type: "text", text: `No backups older than ${olderThanDays} days found.` },
|
|
401
|
+
],
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
const totalSize = toDelete.reduce((sum, b) => sum + b.size, 0);
|
|
405
|
+
let output = `🔍 **Dry Run - Would delete ${toDelete.length} backup(s)**\n\n`;
|
|
406
|
+
output += `Total space to free: ${formatBytes(totalSize)}\n\n`;
|
|
407
|
+
for (const backup of toDelete) {
|
|
408
|
+
const relPath = path.relative(PROJECTS_DIR, backup.path);
|
|
409
|
+
output += `- \`${relPath}\` (${formatBytes(backup.size)})\n`;
|
|
410
|
+
}
|
|
411
|
+
output += `\n💡 Run with \`dry_run: false\` to actually delete.`;
|
|
412
|
+
return { content: [{ type: "text", text: output }] };
|
|
413
|
+
}
|
|
414
|
+
const result = deleteOldBackups(PROJECTS_DIR, olderThanDays);
|
|
415
|
+
if (result.deleted.length === 0) {
|
|
416
|
+
return {
|
|
417
|
+
content: [{ type: "text", text: `No backups older than ${olderThanDays} days found.` }],
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
let output = `🗑️ **Deleted ${result.deleted.length} backup(s)**\n\n`;
|
|
421
|
+
for (const deleted of result.deleted) {
|
|
422
|
+
const relPath = path.relative(PROJECTS_DIR, deleted);
|
|
423
|
+
output += `- \`${relPath}\`\n`;
|
|
424
|
+
}
|
|
425
|
+
if (result.errors.length > 0) {
|
|
426
|
+
output += `\n⚠️ Errors:\n`;
|
|
427
|
+
for (const error of result.errors) {
|
|
428
|
+
output += `- ${error}\n`;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return { content: [{ type: "text", text: output }] };
|
|
432
|
+
}
|
|
433
|
+
case "health_check": {
|
|
434
|
+
if (!fs.existsSync(PROJECTS_DIR)) {
|
|
435
|
+
return {
|
|
436
|
+
content: [{ type: "text", text: `Claude projects directory not found: ${PROJECTS_DIR}` }],
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
const files = findAllJsonlFiles(PROJECTS_DIR);
|
|
440
|
+
const backups = findBackupFiles(PROJECTS_DIR);
|
|
441
|
+
let issueCount = 0;
|
|
442
|
+
let totalSize = 0;
|
|
443
|
+
let largestFile = { path: "", size: 0 };
|
|
444
|
+
const filesWithIssues = [];
|
|
445
|
+
for (const file of files) {
|
|
446
|
+
try {
|
|
447
|
+
const stat = fs.statSync(file);
|
|
448
|
+
totalSize += stat.size;
|
|
449
|
+
if (stat.size > largestFile.size) {
|
|
450
|
+
largestFile = { path: file, size: stat.size };
|
|
451
|
+
}
|
|
452
|
+
const scanResult = scanFile(file);
|
|
453
|
+
if (scanResult.issues.length > 0) {
|
|
454
|
+
issueCount += scanResult.issues.length;
|
|
455
|
+
filesWithIssues.push(file);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
catch {
|
|
459
|
+
// Skip
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
let status = "✅ Healthy";
|
|
463
|
+
const recommendations = [];
|
|
464
|
+
if (issueCount > 0) {
|
|
465
|
+
status = "⚠️ Issues Found";
|
|
466
|
+
recommendations.push(`Run \`fix_image_issues\` to fix ${issueCount} oversized image(s)`);
|
|
467
|
+
}
|
|
468
|
+
if (largestFile.size > 50 * 1024 * 1024) {
|
|
469
|
+
recommendations.push(`Large conversation file detected (${formatBytes(largestFile.size)}). Consider using /compact`);
|
|
470
|
+
}
|
|
471
|
+
if (backups.length > 20) {
|
|
472
|
+
recommendations.push(`${backups.length} backup files found. Run \`cleanup_backups\` to free space`);
|
|
473
|
+
}
|
|
474
|
+
let output = `🏥 **Health Check: ${status}**\n\n`;
|
|
475
|
+
output += `**Overview**\n`;
|
|
476
|
+
output += `- Conversation files: ${files.length}\n`;
|
|
477
|
+
output += `- Total size: ${formatBytes(totalSize)}\n`;
|
|
478
|
+
output += `- Backup files: ${backups.length}\n`;
|
|
479
|
+
output += `- Oversized images: ${issueCount}\n`;
|
|
480
|
+
output += `- Files with issues: ${filesWithIssues.length}\n\n`;
|
|
481
|
+
if (largestFile.path) {
|
|
482
|
+
output += `**Largest conversation**\n`;
|
|
483
|
+
output += `- ${path.relative(PROJECTS_DIR, largestFile.path)}\n`;
|
|
484
|
+
output += `- Size: ${formatBytes(largestFile.size)}\n\n`;
|
|
485
|
+
}
|
|
486
|
+
if (recommendations.length > 0) {
|
|
487
|
+
output += `**Recommendations**\n`;
|
|
488
|
+
for (const rec of recommendations) {
|
|
489
|
+
output += `- ${rec}\n`;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
else {
|
|
493
|
+
output += `No issues detected. Your Claude Code installation is healthy!`;
|
|
494
|
+
}
|
|
495
|
+
return { content: [{ type: "text", text: output }] };
|
|
496
|
+
}
|
|
497
|
+
default:
|
|
498
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
catch (error) {
|
|
502
|
+
return {
|
|
503
|
+
content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
|
|
504
|
+
isError: true,
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
});
|
|
508
|
+
async function main() {
|
|
509
|
+
const transport = new StdioServerTransport();
|
|
510
|
+
await server.connect(transport);
|
|
511
|
+
console.error("Claude Code Toolkit MCP Server v1.0.0 running on stdio");
|
|
512
|
+
}
|
|
513
|
+
main().catch(console.error);
|
|
514
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export declare const MIN_PROBLEMATIC_BASE64_SIZE = 100000;
|
|
2
|
+
export interface ImageIssue {
|
|
3
|
+
line: number;
|
|
4
|
+
indices: (number | [number, number])[];
|
|
5
|
+
type: "message_content" | "toolUseResult";
|
|
6
|
+
estimatedSize: number;
|
|
7
|
+
}
|
|
8
|
+
export interface ScanResult {
|
|
9
|
+
file: string;
|
|
10
|
+
issues: ImageIssue[];
|
|
11
|
+
totalLines: number;
|
|
12
|
+
scannedAt: Date;
|
|
13
|
+
}
|
|
14
|
+
export interface FixResult extends ScanResult {
|
|
15
|
+
fixed: boolean;
|
|
16
|
+
backupPath?: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ConversationStats {
|
|
20
|
+
file: string;
|
|
21
|
+
totalMessages: number;
|
|
22
|
+
userMessages: number;
|
|
23
|
+
assistantMessages: number;
|
|
24
|
+
toolUses: number;
|
|
25
|
+
imageCount: number;
|
|
26
|
+
problematicImages: number;
|
|
27
|
+
fileSizeBytes: number;
|
|
28
|
+
lastModified: Date;
|
|
29
|
+
}
|
|
30
|
+
export declare function findAllJsonlFiles(dir: string): string[];
|
|
31
|
+
export declare function findBackupFiles(dir: string): string[];
|
|
32
|
+
export declare function checkContentForImages(content: unknown): {
|
|
33
|
+
hasProblems: boolean;
|
|
34
|
+
indices: (number | [number, number])[];
|
|
35
|
+
totalSize: number;
|
|
36
|
+
};
|
|
37
|
+
export declare function fixImageInContent(content: unknown[], indices: (number | [number, number])[]): unknown[];
|
|
38
|
+
export declare function scanFile(filePath: string): ScanResult;
|
|
39
|
+
export declare function fixFile(filePath: string, createBackup?: boolean): FixResult;
|
|
40
|
+
export declare function getConversationStats(filePath: string): ConversationStats;
|
|
41
|
+
export declare function restoreFromBackup(backupPath: string): {
|
|
42
|
+
success: boolean;
|
|
43
|
+
originalPath: string;
|
|
44
|
+
error?: string;
|
|
45
|
+
};
|
|
46
|
+
export declare function deleteOldBackups(dir: string, olderThanDays: number): {
|
|
47
|
+
deleted: string[];
|
|
48
|
+
errors: string[];
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/lib/scanner.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,2BAA2B,SAAS,CAAC;AAElD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IACvC,IAAI,EAAE,iBAAiB,GAAG,eAAe,CAAC;IAC1C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,SAAU,SAAQ,UAAU;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBvD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBrD;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,GACf;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAqDrF;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAAE,EAClB,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,GACrC,OAAO,EAAE,CAsBX;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CA8DrD;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,UAAO,GAAG,SAAS,CAiExE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CA6FxE;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAkBhH;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAqB5G"}
|