Code Summarizer
A command-line tool that summarizes code files in a given directory using Gemini Flash 2.0. Now with MCP server support for integration with LLM tools!
Features
- Recursively processes code files in a directory
- Respects
.gitignore
rules
- Skips irrelevant directories like
node_modules
, dist
, etc.
- Summarizes code files using Gemini Flash 2.0
- Outputs summaries to a text file
- Configurable detail level and summary length
- MCP server for integration with Claude Desktop and other LLM tools
- Modular design for easy integration into other applications
- Secure API key management
- Authentication for MCP server endpoints
- Retry mechanism with exponential backoff for LLM calls
- Rate limiting to prevent abuse
Requirements
Installation
Clone the repository
git clone https://github.com/nicobailon/code-summarizer.git
cd code-summarizer
Install dependencies:
npm install
Create a .env
file with your Google API key:
GOOGLE_API_KEY=your_api_key_here
Build the project:
npm run build
MCP Server Setup and Integration
The code summarizer includes a Model Context Protocol (MCP) server that allows LLM tools like Claude Desktop, Cursor AI, and Cline to access code summaries and file content.
Starting the MCP Server
# Start the MCP server
npm start -- server
By default, the server runs on port 24312. You can change this in your configuration:
# Set custom MCP server port
npm start -- config set --port 8080
Connecting with Claude Desktop
- Start the code-summarizer MCP server
- Open Claude Desktop and click on the Claude menu, then "Settings..."
- Navigate to the "Developer" section
- Create a file at
~/.claude/claude_desktop_config.json
(macOS/Linux) or %USERPROFILE%\.claude\claude_desktop_config.json
(Windows) with this content:
{
"code-summarizer": {
"command": "npx",
"args": ["-y", "your-path-to-code-summarizer/bin/code-summarizer.js", "server"],
"env": {
"GOOGLE_API_KEY": "your_api_key_here"
}
}
}
- Restart Claude Desktop
- After restarting, you can ask Claude to access your codebase, e.g., "Summarize the files in my project"
Example prompts for Claude Desktop:
- "Can you summarize all the JavaScript files in my project?"
- "Please give me a high-level overview of my codebase."
- "Explain what the file 'src/config/config.ts' does."
- "Find all functions related to authentication in my code."
Connecting with Cursor AI
- Start the code-summarizer MCP server
- Create a
.cursor/mcp.json
file in your project directory:
{
"mcpServers": {
"code-summarizer": {
"transport": "sse",
"url": "http://localhost:24312/sse",
"headers": {
"x-api-key": "your_api_key_here"
}
}
}
}
- Restart Cursor or reload your project
- Ask Cursor about your code, e.g., "Can you summarize my codebase?"
Example prompts for Cursor:
- "Summarize the structure of this codebase for me."
- "What are the key components in this project?"
- "Give me a detailed explanation of the MCP server implementation."
- "Help me understand how the retry mechanism works."
Connecting with Cline
- Start the code-summarizer MCP server
- In Cline, you can add the MCP server with a command:
/mcp add code-summarizer http://localhost:24312/sse
- Then authenticate with your API key:
/mcp config code-summarizer headers.x-api-key your_api_key_here
- You can then ask Cline to use the code-summarizer, e.g., "Please summarize my code files"
Example prompts for Cline:
- "What does each file in my project do?"
- "Create a summary of all TypeScript files."
- "Explain the authentication flow in this codebase."
- "What are the main functions in the 'summarizer' directory?"
What You Can Do with the MCP Integration
Using the MCP integration, you can:
- Get file summaries : Request concise explanations of what specific files do
- Explore directories : Browse through your codebase structure
- Batch processing : Summarize multiple files at once
- Targeted queries : Find specific patterns or functionality in your code
- Customize summaries : Control detail level and summary length
- Update settings : Change configuration options through the MCP interface
The MCP server exposes your codebase to the LLM tools in a structured way, allowing them to read, navigate, and summarize your code without having to paste code snippets manually.
MCP Server Integration Details
MCP Resources
code://file/*
- Access individual code files
code://directory/*
- List code files in a directory
summary://file/*
- Get summary for a specific file
summary://batch/*
- Get summaries for multiple files
MCP Tools
summarize_file
- Summarize a single file with options
summarize_directory
- Summarize a directory with options
set_config
- Update configuration options
MCP Prompts
code_summary
- Prompt template for summarizing code
directory_summary
- Prompt template for summarizing entire directories
Troubleshooting
Common MCP Connection Issues
- Connection Refused
* Make sure the MCP server is running (`npm start -- server`)
* Verify the port is correct in your configuration
* Check for firewall issues blocking the connection
- Authentication Errors
* Verify you've added the correct API key in the headers (`x-api-key`)
* Check that your API key is valid and properly formatted
* Make sure environment variables are set correctly
- Transport Errors
* Ensure the correct transport type is specified (SSE)
* Check that the URL includes the correct endpoint (`/sse`)
* Verify network connectivity between the client and server
- Permission Issues
* Ensure the MCP server has read access to your codebase
* Check file permissions if summarizing fails for specific files
- Claude Desktop Not Finding the MCP Server
* Verify the path in `claude_desktop_config.json` is correct
* Make sure the command and args point to the right location
* Check Claude Desktop logs for any configuration errors
- Rate Limiting
* If you see "Too many requests" errors, wait and try again later
* Consider adjusting the rate limiting settings in the server code
For other issues, check the server logs or open an issue on the GitHub repository.
Usage
Command Line Interface
# Default command (summarize)
npm start -- summarize [directory] [output-file] [options]
# Summarize code in the current directory (output to summaries.txt)
npm start -- summarize
# Summarize code with specific detail level and max length
npm start -- summarize --detail high --max-length 1000
# Show help
npm start -- --help
Configuration Management
# Set your API key
npm start -- config set --api-key "your-api-key"
# Set default detail level and max length
npm start -- config set --detail-level high --max-length 1000
# Set MCP server port (default: 24312)
npm start -- config set --port 8080
# Show current configuration
npm start -- config show
# Reset configuration to defaults
npm start -- config reset
API Authentication
When connecting to the MCP server, you need to include your API key in the request headers:
x-api-key: your_api_key_here
All endpoints (except /health
) require authentication.
Options
--detail
, -d
: Set the level of detail for summaries. Options are 'low', 'medium', or 'high'. Default is 'medium'.
--max-length
, -l
: Maximum length of each summary in characters. Default is 500.
Security Features
API Key Management
- API keys are stored securely and prioritize environment variables over configuration files
- Keys are validated for proper format before use
- API keys are never exposed in logs or error messages
- Configuration file doesn't store API keys when they're provided via environment variables
Authentication
- All MCP server endpoints (except health check) require authentication via API key
- Authentication uses the
x-api-key
header for secure transmission
- Failed authentication attempts are logged for security monitoring
Rate Limiting
- Built-in rate limiting prevents abuse of the service
- Default: 60 requests per minute per IP address
- Configurable through server settings
Error Handling
- Structured error system with categorization
- Sensitive information is never exposed in error messages
- Proper error codes are returned for different failure scenarios
LLM Call Resilience
- Automatic retry with exponential backoff for transient failures
- Configurable retry settings including max retries, delays, and backoff factor
- Jitter added to retry timing to prevent thundering herd problems
- Request ID tracking for tracing issues across the system
Supported File Types
- TypeScript (.ts, .tsx)
- JavaScript (.js, .jsx)
- Python (.py)
- Java (.java)
- C++ (.cpp)
- C (.c)
- Go (.go)
- Ruby (.rb)
- PHP (.php)
- C# (.cs)
- Swift (.swift)
- Rust (.rs)
- Kotlin (.kt)
- Scala (.scala)
- Vue (.vue)
- HTML (.html)
- CSS (.css, .scss, .less)
How It Works
- The tool scans the specified directory recursively, respecting
.gitignore
rules.
- It filters files based on supported extensions.
- For each supported file, it reads the content and determines the programming language.
- It sends the code to Gemini Flash 2.0 with a prompt to summarize, including detail level and length constraints.
- The summaries are collected and written to the specified output file.
Output Format
The output file will have the following format:
relative/path/to/file
Summary text here
relative/path/to/next/file
Next summary text here
Project Structure
index.ts
: Main CLI implementation
src/
: Source code directory
summarizer/
: Core summarization functionality
mcp/
: MCP server implementation
config/
: Configuration management
bin/
: CLI entrypoint
config.json
: Default configuration file
tsconfig.json
: TypeScript configuration
package.json
: Project dependencies and scripts
.env.example
: Template for setting up environment variables
.gitignore
: Files and directories to ignore in Git
__tests__
: Unit and integration tests
__mocks__/mock-codebase
: Mock codebase for testing
Environment Variables
The following environment variables can be used to configure the application:
Variable |
Description |
Default |
GOOGLE_API_KEY |
Your Google Gemini API key |
None (required) |
PORT |
Port for the MCP server |
24312 |
ALLOWED_ORIGINS |
Comma-separated list of allowed CORS origins |
http://localhost:3000 |
LOG_LEVEL |
Logging level (error, warn, info, debug) |
info |
See .env.example
for a template.
Development
Running Tests
# Run all tests
npm test
# Run tests with coverage
npm test -- --coverage
# Test MCP server setup
npm run test:setup
Future Improvements
- Support for more file types
- Support for alternative LLM providers
- Integration with an Electron app for a GUI interface
- Enhanced MCP server capabilities
- Advanced token usage tracking
- OpenTelemetry-based observability
- Enhanced audit logging capabilities
- Secret scanning integration