README.md•4.17 kB
# License Scanner MCP Server
A Model Context Protocol (MCP) server built with FastMCP that scans project dependencies and generates license reports in markdown format.
## Features
- **Multi-package manager support**: npm, pip, cargo, and more
- **Automatic license detection**: Fetches license information from package registries
- **Markdown report generation**: Creates comprehensive license reports
- **Caching**: Avoids repeated API calls for better performance
- **Error handling**: Robust error handling and informative error messages
## Supported Package Managers
- **npm/yarn/pnpm**: `package.json`, `yarn.lock`, `pnpm-lock.yaml`
- **Python**: `requirements.txt`, `pyproject.toml`, `Pipfile`
- **Rust**: `Cargo.toml`, `Cargo.lock`
- **PHP**: `composer.json`, `composer.lock`
- **Ruby**: `Gemfile`, `Gemfile.lock`
- **Go**: `go.mod`, `go.sum`
- **Java**: `pom.xml`, `build.gradle`
## Installation
1. Install dependencies:
```bash
pip install -r requirements.txt
```
2. Run the MCP server:
```bash
python license_scanner.py
```
## Available Tools
### 1. `scan_dependencies(project_path: str)`
Scans a project for dependencies and returns detailed license information.
**Parameters:**
- `project_path`: Path to the project directory to scan
**Returns:** JSON string containing dependency and license information
### 2. `generate_license_report(project_path: str, output_file: str = None)`
Generates a markdown license report for a project.
**Parameters:**
- `project_path`: Path to the project directory to scan
- `output_file`: Optional path to save the markdown report
**Returns:** Markdown content of the license report
### 3. `list_package_managers(project_path: str)`
Lists all package manager files found in a project.
**Parameters:**
- `project_path`: Path to the project directory to scan
**Returns:** JSON string containing list of package manager files
## Example Usage
### Using the MCP server with Claude Desktop
1. Add the server to your Claude Desktop configuration:
```json
{
"mcpServers": {
"license-scanner": {
"command": "python",
"args": ["/path/to/license_scanner.py"],
"cwd": "/path/to/project"
}
}
}
```
2. Use the tools in Claude Desktop:
- "Scan the dependencies in my project"
- "Generate a license report for this project"
- "List the package managers used in this project"
### Example Project
The `example_project/` directory contains sample files for different package managers:
- `package.json` - npm dependencies
- `requirements.txt` - Python dependencies
- `Cargo.toml` - Rust dependencies
## License Information Sources
- **npm packages**: npm registry API
- **Python packages**: PyPI JSON API
- **Rust crates**: crates.io API
## Output Format
The license report includes:
1. **Project information**: Path, total dependencies, package files found
2. **Dependencies by manager**: Organized by package manager with license details
3. **License summary**: Count of dependencies by license type
### Sample Markdown Output
```markdown
# License Report
**Project:** /path/to/project
**Total Dependencies:** 8
**Package Files Found:** package.json, requirements.txt
## NPM Dependencies
Found 5 dependencies
| Package | Version | License | Author | Homepage |
|---------|---------|---------|--------|----------|
| express | ^4.18.2 | MIT | TJ Holowaychuk | https://expressjs.com/ |
| lodash | ^4.17.21 | MIT | John-David Dalton | https://lodash.com/ |
## License Summary
| License | Count |
|---------|-------|
| MIT | 6 |
| Apache-2.0 | 2 |
```
## Error Handling
The server includes comprehensive error handling:
- Invalid project paths
- Missing package files
- Network errors when fetching license information
- Malformed package files
## Performance
- **Caching**: License information is cached to avoid repeated API calls
- **Parallel processing**: Multiple package files are processed efficiently
- **Timeout handling**: API requests have timeout protection
## Contributing
1. Fork the repository
2. Create a feature branch
3. Add tests for new functionality
4. Submit a pull request
## License
This project is licensed under the MIT License.