MCP Server for Skim - Intelligent code compression for LLM context optimization
npm install skim-mcp-server> ๐ Production-ready Model Context Protocol server for Skim code transformation
>
> Built on top of @dean0x's Skim project








Intelligently compress code for LLM context windows with built-in security, monitoring, and production features.
---
- ๐ค What is This?
- ๐ Features
- ๐ฆ Installation
- ๐ง Configuration
- ๐ Usage
- ๐ Security Features
- ๐งช Testing
- ๐ Performance
- ๐ Documentation
- ๐ ๏ธ Development
- ๐ณ Docker
- โ FAQ
- ๐ Support
- ๐ Changelog
- ๐ฎ Roadmap
- ๐ Acknowledgments
---
In Simple Terms:
If you're using Claude Code (an AI coding assistant), you may encounter "context too long" limitations when analyzing large code projects.
What Skim MCP Server Does:
- ๐ฆ Automatically compresses code, preserving structure while reducing 60-95% of content
- ๐ง Enables Claude Code to analyze larger projects
- โก Provides more accurate code suggestions and analysis
Prerequisites:
- โ
You have Claude Code installed
- โ
Your computer has Node.js 18.0.0 or higher installed
Not sure if you need this? If you frequently use Claude Code to analyze large codebases, this tool will be very helpful!
- ๐ Secure by Default - Path validation, input sanitization, rate limiting
- ๐ Production Monitoring - Structured logging, health checks, metrics
- ๐ High Performance - Fast execution with spawn, optimized buffering
- ๐ก๏ธ DoS Protection - Request limits, size limits, timeout handling
- ๐ Comprehensive Logging - Winston integration with configurable levels
- ๐งช Full Test Coverage - Unit and integration tests included
- ๐ฆ Zero Dependencies - Only MCP SDK and Winston (production dependencies)
- Node.js >= 18.0.0
- npm, pnpm, or yarn
``bashInstall both MCP server and Skim CLI
npm install -g skim-mcp-server
$3
`bash
In your project directory
npm install skim-mcp-server
`$3
`bash
git clone https://github.com/luw2007/skim-mcp-server.git
cd skim-mcp-server
npm install
npm run build
`$3
The server automatically installs Skim CLI if not found:
`bash
During npm install (postinstall hook)
npm install skim-mcp-serverOr manually
npm run install-skim
`$3
After installation, verify it was successful:
`bash
Check if skim-mcp-server is available
skim-mcp-server --versionCheck Node.js version
node --version # Should be >= 18.0.0
`If
skim-mcp-server shows "command not found":`bash
Check globally installed packages
npm list -g skim-mcp-serverCheck npm global path
npm config get prefix
`You may need to add the npm global path to your system PATH.
๐ง Configuration
$3
Locate and edit your Claude Code configuration file (depending on your operating system):
macOS / Linux:
-
~/.claude/config.json (recommended, try this first)
- or ~/.config/claude-code/config.jsonWindows:
-
C:\Users\YourUsername\.claude\config.json
- or C:\Users\YourUsername\AppData\Roaming\claude-code\config.jsonIf the file doesn't exist, create it.
Add the following configuration:
`json
{
"mcpServers": {
"skim": {
"command": "skim-mcp-server"
}
}
}
`โ ๏ธ Important: You must completely quit and restart Claude Code for the changes to take effect.
$3
`bash
Logging level
export LOG_LEVEL=info # debug, info, warn, errorAllowed base paths (comma-separated)
export SKIM_ALLOWED_PATHS=/workspace,/home/user/projectsRate limiting
export SKIM_MAX_REQUESTS_PER_MINUTE=10Input size limit
export SKIM_MAX_INPUT_SIZE=10485760 # 10MB in bytes
`$3
After configuring and restarting Claude Code, test it:
1. Open Claude Code
2. Type in the conversation:
`
Help me analyze this project's code structure
`
3. Watch if Claude Code automatically uses the mcp__skim__skim_analyze toolSuccess indicators:
- You'll see messages like "Using skim tool to analyze code..." in the conversation
- Or see
skim_file / skim_analyze calls in the tool invocation logsIf it doesn't work:
- Check if config file JSON format is valid (use jsonlint.com to validate)
- Confirm you completely quit and restarted Claude Code
- Check Claude Code's log files for error messages
๐ Usage
Once configured, the tools are automatically available in Claude Code:
$3
Transform code from a string:
`javascript
// Claude Code automatically uses this when analyzing code
mcp__skim__skim_transform({
source: 'function add(a, b) { return a + b; }',
language: 'javascript',
mode: 'structure',
show_stats: true
})// Returns:
// function add(a, b) { / ... / }
//
// ๐ Token Reduction Statistics:
// [skim] 24 tokens โ 9 tokens (62.5% reduction)
`$3
Transform file or directory:
`javascript
mcp__skim__skim_file({
path: '/workspace/src',
mode: 'structure',
show_stats: true
})// Returns compressed code with statistics
`$3
Analyze code architecture:
`javascript
mcp__skim__skim_analyze({
path: '/workspace/src',
mode: 'structure'
})// Returns:
// 1. Compressed code
// 2. Token statistics
// 3. Analysis framework to guide Claude
`$3
Scenario 1: Analyzing Project Architecture
`
You: "Help me analyze the code architecture in src/ directory"Claude Code:
โ Automatically calls mcp__skim__skim_analyze
โ Compresses code (65% token reduction)
โ Quickly analyzes architecture and provides suggestions
Result: Complete architecture analysis report
`Scenario 2: Code Review
`
You: "Review the code quality of src/auth.ts"Claude Code:
โ Automatically calls mcp__skim__skim_file
โ Extracts function signatures and key logic
โ Provides detailed code review suggestions
Result: Identifies potential issues and improvement suggestions
`Scenario 3: Understanding Large Files
`
You: "What does this 3000-line file do?"Claude Code:
โ Automatically calls mcp__skim__skim_transform
โ Compresses to core structure (80% content reduction)
โ Quickly understands main logic
Result: Clear functional overview and workflow explanation
`Key Point: You don't need to manually invoke these tools - Claude Code will automatically decide when to use them!
๐ Security Features
$3
โ
Only absolute paths allowed
โ
Path traversal attacks blocked (
../../../etc/passwd)
โ
Symlink resolution with validation
โ
Configurable allowed base paths$3
โ
Maximum input size (10MB default)
โ
Null byte detection
โ
Command injection prevention
โ
Shell injection mitigation (parameterized commands)
$3
โ
Requests per minute limits
โ
Prevents DoS attacks
โ
Retry-after headers
๐งช Testing
$3
`bash
Install dependencies
npm installRun all tests
npm testTest with coverage
npm run test:coverageWatch mode for development
npm run test:watch
`$3
- โ
Skim CLI availability
- โ
Path traversal prevention
- โ
Input validation
- โ
Oversized input detection
- โ
Invalid language detection
- โ
Null byte rejection
- โ
Malformed path handling
๐ Performance
$3
`bash
Single file (300 lines)
skim transform - 1.3msLarge file (3000 lines)
skim transform - 14.6msCached (second run)
skim transform - 5ms (48x faster)MCP overhead < 2ms
`$3
- Max input: 10MB per request
- Max output: 50MB buffer
- Timeout: 30 seconds per request
- Rate limit: 10 requests/minute
๐ Documentation
$3
| Mode | Reduction | Use Case | Example Output |
|------|-----------|----------|----------------|
| structure | 60-80% | Architecture analysis |
function foo() { / ... / } |
| signatures | 85-92% | API documentation | function foo(): void |
| types | 90-95% | Type system analysis | interface User { name: string } |
| full | 0% | Debug/validation | Original code |$3
- TypeScript / JavaScript
- Python
- Rust
- Go
- Java
- JSON (special structure mode)
- Markdown (header extraction)
- YAML / YML (structure extraction)
$3
`bash
Transform file
skim file.ts --mode=structure --show-statsTransform directory
skim src/ --mode=signaturesTransform with glob
skim 'src/*/.ts' --jobs 4Clear cache
skim --clear-cache
`๐ ๏ธ Development
$3
`bash
git clone https://github.com/luw2007/skim-mcp-server.git
cd skim-mcp-server
npm install
`$3
`bash
Start development
npm run devLint code
npm run lintFix linting issues
npm run lint:fixFormat code
npm run format:fixBuild for production
npm run build
`$3
`
skim-mcp-server/
โโโ src/
โ โโโ index.js # Main server
โโโ test/
โ โโโ index.test.js # Test suite
โโโ scripts/
โ โโโ install-skim.js # Auto-install script
โ โโโ build.js # Build script
โโโ docs/
โ โโโ examples.md # Usage examples
โโโ dist/ # Built files
โโโ README.md
`๐ณ Docker
$3
`bash
docker build -t skim-mcp-server .
`$3
`bash
docker run -i --rm \
-e LOG_LEVEL=info \
-v /workspace:/workspace \
skim-mcp-server
`$3
`yaml
version: '3.8'
services:
skim-mcp:
image: skim-mcp-server
environment:
- LOG_LEVEL=info
- SKIM_ALLOWED_PATHS=/workspace
volumes:
- ./workspace:/workspace
`๐ License
MIT License - see LICENSE file for details.
๐ค Contributing
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
$3
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests
5. Ensure linting passes
6. Submit a pull request
โ Frequently Asked Questions (Beginners Must Read)
$3
Q1: Getting "skim-mcp-server: command not found"
Reason: npm global install path is not in your system PATH.
Solution:
`bash
Method 1: Find the installation path
npm config get prefixAssuming it returns /usr/local, the full path would be:
/usr/local/bin/skim-mcp-server
Method 2: Use the full path in your config file
{
"mcpServers": {
"skim": {
"command": "/usr/local/bin/skim-mcp-server" # Replace with actual path
}
}
}
`Q2: Node.js version incompatibility error
Check your version:
`bash
node --version
`Must be >= 18.0.0. If your version is too old, visit nodejs.org to download the latest LTS version.
---
$3
Q3: Can't find where the config file is
Try these locations in order:
macOS / Linux:
`bash
1. Check this path first
ls -la ~/.claude/config.json2. If it doesn't exist, check this
ls -la ~/.config/claude-code/config.json3. If neither exists, create the first one
mkdir -p ~/.claude
echo '{"mcpServers":{}}' > ~/.claude/config.json
`Windows:
Search for
config.json in File Explorer, or create it directly at:
`
C:\Users\YourUsername\.claude\config.json
`Q4: Configuration has no effect
Checklist:
- [ ] Config file is valid JSON format (use jsonlint.com to validate)
- [ ] Completely quit Claude Code (not minimized, fully quit)
- [ ] Restart Claude Code
- [ ]
skim-mcp-server command works in terminal
- [ ] Check Claude Code logs for error messages---
$3
Q5: When will the tool be automatically used?
Claude Code automatically uses Skim when:
- Analyzing large code files or directories
- Code review tasks
- Architecture analysis requests
- Understanding code structure
You don't need to manually invoke it - Claude Code will automatically decide when to use it.
Q6: How do I know Skim is working?
Watch Claude Code's conversation window for:
- Tool invocation messages:
mcp__skim__skim_file or mcp__skim__skim_analyze
- Token statistics
- Messages like "Compressing code..." or similarThis indicates Skim is working.
Q7: Will Skim modify my code?
No! Skim only reads and compresses code for analysis - it will not modify any source files.
๐ Support
$3
Please report issues on GitHub Issues.
Include:
- Node.js version (
node --version`)- ๐ Documentation: docs/
- ๐ก Examples: docs/examples.md
- ๐ฌ Discussions: GitHub Discussions
See CHANGELOG.md for version history.
- [ ] HTTP transport support
- [ ] WebSocket transport
- [ ] Plugin system
- [ ] Custom transformation rules
- [ ] Integration with more LLM platforms
- [ ] Parallel processing optimization
- [ ] Memory-efficient streaming
- [ ] Advanced caching strategies
- [ ] Metrics dashboard
Skim Project and its Author @dean0x
This project is an MCP server wrapper built on top of the excellent Skim project created by dean0x. Skim is a powerful code transformation tool written in Rust that provides intelligent code compression capabilities for LLMs.
- Original Project: https://github.com/dean0x/skim
- Core Technology: Rust + tree-sitter
- Contribution: Provides 60-95% code compression capability
Without dean0x's outstanding work, this MCP server wouldn't exist. We highly recommend visiting the original project to learn more about the technical details!
- Model Context Protocol - MCP protocol specification
- tree-sitter - Code parsing engine
- Claude Code team - For providing an excellent AI coding assistant platform
- All developers who have contributed to this project
---
Made with โค๏ธ for the LLM community