dalicore-mcp-client
Streamlined MCP server with 8 essential tools for file operations, code editing, and command execution, covering 97.5% of actual workflow with minimal overhead.
README
Dalicore MCP Client
Streamlined Model Context Protocol (MCP) server with 8 essential tools for file operations, code editing, and command execution.
Built for efficiency based on real usage data - covers 97.5% of actual workflow with minimal overhead.
Why This Fork?
The Token Cost Problem: Every tool call in MCP consumes tokens. Desktop Commander's 25+ tools meant:
- AI models waste tokens evaluating irrelevant tools
- Increased confusion leads to wrong tool selection
- Higher API costs for every interaction
Original: Desktop Commander MCP had 25+ tools
Problem: Only 8 tools accounted for 97.5% of actual usage
Solution: Stripped down to essentials, enhanced the survivors
Data-driven design:
- Analyzed 12,302 actual tool calls across real usage
- Kept the 8 most-used tools (97.5% coverage)
- Cut 288 lines of bloat (46% reduction)
- Significantly less tool context sent with every interaction (25 → 8 tools)
Key improvements over Desktop Commander:
- System information built-in - No separate tool call needed (OS, architecture, paths, allowed directories)
- Line count tracking -
read_fileandwrite_fileshow actual lines processed - Intelligent chunking -
write_fileautomatically chunks large files (25-30 lines) to avoid token waste - Better error messages - Clear guidance when operations fail, with suggestions for fixes
- Smart state detection -
start_processdetects REPL prompts and completion states automatically
Bottom line: Fewer tools = lower costs, faster responses, less confusion.
The 8 Essential Tools
Process Management
start_process - Execute commands with smart state detection
- 34.4% of all usage
- Primary tool for running builds, tests, scripts
- Detects REPL prompts and completion states
File Operations
read_file - Read files with pagination, tail support, and URL fetching
- 29.2% of all usage
- Handles images (PNG, JPEG, GIF, WebP)
- Supports offset/length for large files
write_file - Write files with automatic chunking
- 2.2% of all usage
- Rewrite or append modes
- Smart 25-30 line chunks to avoid token waste
Code Editing
edit_block - Surgical text replacements with fuzzy matching
- 17.0% of all usage
- Character-level diff feedback
- Multiple occurrence support
Searching
search_code - Fast content search with ripgrep
- 11.2% of all usage
- Context lines, file patterns, regex support
- Structured output for easy parsing
search_files - Find files by name pattern
- 1.2% of all usage
- Glob pattern support
- Recursive directory traversal
File System
list_directory - List files and directories
- 2.5% of all usage
- Clear [FILE] and [DIR] markers
- Path validation
Debugging & History
tool_history - View recent tool call history with success/failure tracking
- Track what operations were performed and whether they succeeded
- See actual results (lines written, matches found, command output)
- Filter by tool type, time range, or file/command patterns
- Compact or verbose output modes with ✓/✗ status indicators
- Parses both request and result logs for complete operation history
Advanced filtering:
filter: "edits" (write_file, edit_block only) or "all" (every tool call)since: Time-based filtering ("1h", "30m", "2d", or ISO timestamp)pathFilter: Search by file path or command content (e.g., "git push")showFullCommands: Display complete commands without truncation
Result tracking shows:
- Success/failure status with error messages
- Lines read/written for file operations
- Matches found for search operations
- Process output and exit status
- Actual replacements applied for edits
Use cases:
- Debug failed operations with detailed error messages
- Verify operations completed successfully
- Track command history and output
- Find all operations on specific files
- Audit recent changes by time period
What We Cut (and Why)
Removed ~18 tools that accounted for only 2.5% of usage:
❌ get_config / set_config_value → Just edit config file with edit_block
❌ read_multiple_files → Use multiple read_file calls
❌ create_directory → Use start_process("mkdir -p /path")
❌ move_file → Use start_process("mv src dst")
❌ interact_with_process / read_process_output → Use one-shot commands or temp scripts
❌ list_processes / kill_process → Use start_process("ps aux") / start_process("kill PID")
❌ And more...
Philosophy: Use start_process with OS commands instead of wrapping every shell command as a separate tool.
Smart Features
System Awareness
System info is automatically sent to the LLM on every connection:
- Operating system and architecture
- Default shell (bash, zsh, cmd, powershell)
- Allowed directories
- Path separator and case sensitivity
- OS-appropriate command guidance
No separate tool needed - Claude knows your environment automatically.
Helpful Blocked Command Messages
When you try to use a blocked command, you get helpful alternatives:
Example:
🚫 SED COMMAND BLOCKED
You tried: sed -n '100,200p' file.txt
**What to use instead:**
✅ read_file(path, { offset: 100, length: 101 })
For building files from pieces:
✅ start_process("head -100 file.txt > newfile.txt")
**You already have these tools - use them!**
Teaches best practices instead of just saying "no."
Installation
Prerequisites
- Node.js 18+
- npm
Setup
- Clone the repository:
git clone https://github.com/Corlzee/dalicore-mcp-client.git
cd dalicore-mcp-client
npm install
npm run build
- Add to Claude Desktop config:
Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"dalicore-mcp-client": {
"command": "node",
"args": ["/absolute/path/to/dalicore-mcp-client/dist/index.js"]
}
}
}
- Restart Claude Desktop
Configuration
Config file location: ~/.config/commander-keen/config.json
Key Settings
{
"blockedCommands": ["rm", "sudo", "chmod", "chown"],
"defaultShell": "bash",
"allowedDirectories": [
"/home/user/projects",
"/home/user/documents"
],
"readOnlyDirectories": ["/home/user/reference"],
"fileReadLineLimit": 1000,
"fileWriteLineLimit": 50,
"telemetryEnabled": true
}
Configuration Options
blockedCommands: Array of prohibited shell commandsdefaultShell: Shell forstart_process(bash, zsh, cmd, powershell)allowedDirectories: Paths accessible for file operations (empty array = all access)readOnlyDirectories: Paths with read-only accessfileReadLineLimit: Max lines perread_filecallfileWriteLineLimit: Max lines perwrite_filecalltelemetryEnabled: Anonymous usage tracking
Editing Config
Use edit_block on the config file:
edit_block(
"~/.config/commander-keen/config.json",
'"allowedDirectories": [...]',
'"allowedDirectories": [..., "/new/path"]'
)
Usage Examples
Running Commands
start_process("npm run build", 30000)
start_process("python3 script.py", 10000, "bash")
Reading Files
// First 50 lines
read_file("/path/file.txt", { offset: 0, length: 50 })
// Last 20 lines (tail)
read_file("/path/file.txt", { offset: -20 })
// Lines 100-200
read_file("/path/file.txt", { offset: 100, length: 101 })
// From URL
read_file("https://example.com/data.json", { isUrl: true })
Writing Files
// Create new file
write_file("/path/file.txt", "content", { mode: "rewrite" })
// Append to file
write_file("/path/file.txt", "more content", { mode: "append" })
Editing Code
edit_block(
"/path/file.js",
"const x = 10;",
"const x = 20;"
)
// Multiple replacements
edit_block(
"/path/file.js",
"console.log",
"logger.info",
{ expected_replacements: 5 }
)
Searching
// Search code content
search_code("/path", "TODO", {
filePattern: "*.js",
contextLines: 2
})
// Find files by name
search_files("/path", "*.test.js")
Best Practices
File Writing
- Always chunk files >30 lines into multiple
write_filecalls - Use
rewritefor first chunk,appendfor rest - Keeps token usage low and improves reliability
Path Usage
- Use absolute paths (
/home/user/file.txt) - Relative paths depend on current directory (unreliable)
- Tilde paths (
~/file.txt) may not work in all contexts
Command Execution
- For one-shot tasks, use
start_processdirectly - For complex workflows, write temp scripts and execute
- For data analysis, write Python/Node scripts instead of trying to use REPLs
Blocked Commands
- If a command is blocked, read the error message
- It will suggest the correct tool or approach
- Commands like
sed,awk,rmare blocked for safety
Architecture
Server Components
- server.ts (332 lines) - MCP protocol handler, 7 tool definitions
- schemas.ts (88 lines) - Zod validation schemas
- handlers/ - Individual tool implementations
- utils/systemInfo.ts - OS detection and info generation
- utils/blockedCommandHelp.ts - Helpful error messages
Design Principles
- Data-driven: Keep only what's actually used
- Helpful errors: Teach best practices when blocking
- System aware: Automatically provide environment context
- Minimal overhead: 7 tools, 332 lines, fast startup
Development
Build
npm run build
Watch Mode
npm run watch
Testing
npm test
Debugging
npm run start:debug
Then attach debugger on port 9229.
Statistics
Based on 12,302 actual tool calls:
- Top 5 tools: 93% of usage
- Top 7 tools: 97.5% of usage
- Other 18 tools: 2.5% of usage
Decision: Keep the 7, cut the 18.
Contributing
This is a focused, streamlined fork. If you want to add tools:
- Check if
start_processcan do it - Provide usage data showing demand
- Follow the "essential tools only" philosophy
License
MIT
Credits
- Original: Desktop Commander MCP by Eduard Ruzga (@wonderwhy-er)
- This Fork: Streamlined to 7 essential tools based on 12,302 actual tool calls
- Data-Driven Philosophy: Less is more (when backed by data)
Support
- Issues: https://github.com/Corlzee/dalicore-mcp-client/issues
- Docs: https://docs.claude.com (general MCP documentation)
Streamlined. Efficient. Data-driven.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.