@n0zer0d4y/vulcan-file-ops 1.1.0 → 1.1.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/CHANGELOG.md CHANGED
@@ -5,6 +5,33 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.1.2] - 2025-01-12
9
+
10
+ ### Fixed
11
+
12
+ - Added defensive string-to-array parsing for `make_directory` tool to handle MCP clients that incorrectly serialize array parameters as stringified JSON
13
+ - Workaround for Claude Desktop serialization issue
14
+ - Zero impact on correctly-functioning MCP clients (Cursor IDE verified)
15
+ - Includes diagnostic logging to identify problematic clients
16
+ - Comprehensive test coverage for stringified arrays and edge cases
17
+
18
+ ### Added
19
+
20
+ - 4 new test cases for MCP client serialization workaround
21
+ - Diagnostic logging when stringified array parameters are detected
22
+ - Root Cause Analysis document in `local_docs/make_directory_batch_failure_rca.md`
23
+
24
+ ## [1.1.1] - 2025-11-11
25
+
26
+ ### Fixed
27
+
28
+ - Corrected Docker entrypoint to use dist/cli.js instead of dist/index.js for proper MCP server initialization
29
+ - Updated Node.js base image from node:22.12-alpine to node:22-alpine for better version compatibility
30
+
31
+ ### Changed
32
+
33
+ - Added keywords to package.json for improved NPM discoverability
34
+
8
35
  ## [1.1.0] - 2025-11-08
9
36
 
10
37
  ### Added
package/README.md CHANGED
@@ -1,11 +1,12 @@
1
1
  # Vulcan File Ops MCP Server
2
2
 
3
3
  ![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white)
4
- [![MCP Badge](https://lobehub.com/badge/mcp/n0zer0d4y-vulcan-file-ops)](https://lobehub.com/mcp/n0zer0d4y-vulcan-file-ops)
4
+ ![MCP Dev](https://badge.mcpx.dev?type=dev "MCP Dev")
5
5
  [![MCP Server](https://badge.mcpx.dev?type=server "MCP Server")](https://modelcontextprotocol.io)
6
6
  [![MCP Server with Tools](https://badge.mcpx.dev?type=server&features=tools "MCP server with tools")](https://modelcontextprotocol.io)
7
7
  [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme)
8
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
9
+ [![MseeP.ai Security Assessment Badge](https://mseep.net/pr/n0zer0d4y-vulcan-file-ops-badge.png)](https://mseep.ai/app/n0zer0d4y-vulcan-file-ops)
9
10
 
10
11
  **Transform your desktop AI assistants into powerful development partners.** Vulcan File Ops bridges the gap between conversational AI (Claude Desktop, ChatGPT Desktop, etc.) and your local filesystem, unlocking the same file manipulation capabilities found in AI-powered IDEs like Cursor and Cline. Write code, refactor projects, manage documentation, and perform complex file operations—matching the power of dedicated AI coding assistants. With enterprise-grade security controls, dynamic directory registration, and intelligent tool filtering, you maintain complete control while your AI assistant handles the heavy lifting.
11
12
 
@@ -442,6 +443,8 @@ The AI will use the `register_directory` tool to gain access, then perform opera
442
443
 
443
444
  Read file contents with flexible modes (full, head, tail, range)
444
445
 
446
+ **Note:** This tool is limited to single-file operations only. **RECOMMENDED:** Use `read_multiple_files` instead, which supports both single and batch file operations for greater flexibility.
447
+
445
448
  **Input:**
446
449
 
447
450
  - `path` (string): File path
@@ -482,6 +485,8 @@ Batch read multiple files concurrently
482
485
 
483
486
  Create or replace file content
484
487
 
488
+ **Note:** This tool is limited to single-file operations only. **RECOMMENDED:** Use `write_multiple_files` instead, which supports both single and batch file operations for greater flexibility.
489
+
485
490
  **Input:**
486
491
 
487
492
  - `path` (string): File path
@@ -577,6 +582,8 @@ List directory contents with multiple output formats
577
582
 
578
583
  Relocate or rename files and directories
579
584
 
585
+ **Note:** This tool is limited to single-file operations only. **RECOMMENDED:** Use `file_operations` instead, which supports move, copy, and rename operations for both single and batch files with greater flexibility.
586
+
580
587
  **Input:**
581
588
 
582
589
  - `source` (string): Source path
@@ -433,10 +433,29 @@ export async function handleFileSystemTool(name, args) {
433
433
  if (!parsed.success) {
434
434
  throw new Error(`Invalid arguments for make_directory: ${parsed.error}`);
435
435
  }
436
+ // Defensive handling for MCP clients that may stringify arrays
437
+ // Some MCP clients (e.g., Claude Desktop) incorrectly serialize array parameters
438
+ // as stringified JSON instead of proper arrays. This workaround detects and fixes that.
439
+ let pathsInput = parsed.data.paths;
440
+ // If paths is a string that looks like a JSON array, try to parse it
441
+ if (typeof pathsInput === "string" && pathsInput.trim().startsWith("[")) {
442
+ try {
443
+ const parsedArray = JSON.parse(pathsInput);
444
+ if (Array.isArray(parsedArray)) {
445
+ pathsInput = parsedArray;
446
+ // Log for diagnostics - helps identify which clients have serialization issues
447
+ console.error("[INFO] make_directory: Detected and corrected stringified array parameter");
448
+ }
449
+ }
450
+ catch {
451
+ // If parsing fails, treat as single path (existing behavior)
452
+ // This handles edge cases like paths literally named "[something]"
453
+ }
454
+ }
436
455
  // Normalize to array (single path or multiple paths)
437
- const pathsToCreate = Array.isArray(parsed.data.paths)
438
- ? parsed.data.paths
439
- : [parsed.data.paths];
456
+ const pathsToCreate = Array.isArray(pathsInput)
457
+ ? pathsInput
458
+ : [pathsInput];
440
459
  // Validate all paths first (atomic - fail before any creation)
441
460
  const allowedDirs = getAllowedDirectories();
442
461
  const validatedPaths = pathsToCreate.map((dirPath) => {
package/package.json CHANGED
@@ -1,17 +1,42 @@
1
1
  {
2
2
  "name": "@n0zer0d4y/vulcan-file-ops",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "MCP server that gives Claude Desktop and other AI assistants filesystem superpowers—read, write, edit, and manage files like AI coding assistants",
5
5
  "license": "MIT",
6
6
  "author": "Lloyd Barcatan",
7
7
  "homepage": "https://github.com/n0zer0d4y/vulcan-file-ops",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/n0zer0d4y/vulcan-file-ops.git"
10
+ "url": "git+https://github.com/n0zer0d4y/vulcan-file-ops.git"
11
11
  },
12
12
  "bugs": {
13
13
  "url": "https://github.com/n0zer0d4y/vulcan-file-ops/issues"
14
14
  },
15
+ "keywords": [
16
+ "mcp",
17
+ "mcp-server",
18
+ "model-context-protocol",
19
+ "context-engineering",
20
+ "ai",
21
+ "ai-tools",
22
+ "claude",
23
+ "claude-desktop",
24
+ "filesystem",
25
+ "file-operations",
26
+ "file-management",
27
+ "read-files",
28
+ "write-files",
29
+ "edit-files",
30
+ "ai-assistant",
31
+ "llm",
32
+ "llm-tools",
33
+ "pdf",
34
+ "docx",
35
+ "document-parsing",
36
+ "code-editor",
37
+ "typescript",
38
+ "ai-assisted-coding"
39
+ ],
15
40
  "type": "module",
16
41
  "bin": {
17
42
  "vulcan-file-ops": "dist/cli.js"