CodeSavant
by twolven
# MCP-CodeSavant
CodeSavant is a WIP project.
CodeSavant is a Model Context Protocol (MCP) server that provides code manipulation, execution, and version control capabilities. It allows AI assistants to read, write, and execute code while maintaining a history of changes.
## Features
- Read and write code files with line-specific operations
- Execute code in multiple programming languages (Python, Node.js)
- Execute shell commands in a controlled environment
- Track and manage code changes with version control
- Search within code files
- Revert to previous versions of code
## Installation
1. Clone the repository:
```bash
git clone https://github.com/twolven/mcp-codesavant.git
cd mcp-codesavant
```
2. Install the required dependencies:
```bash
pip install -r requirements.txt
```
3. Add the server configuration to your Claude Desktop config.json:
```json
{
"mcpServers": {
"codesavant": {
"command": "python",
"args": ["path/to/codesavant.py"]
}
}
}
```
## Directory Structure
The server creates and manages the following directory structure:
```
workspaces/
├── project1/
│ ├── .code_history.json
│ └── [code files]
├── project2/
│ ├── .code_history.json
│ └── [code files]
└── ...
```
## Tool Reference
### Detailed Usage
#### 1. read_code_file
Read contents of a code file, optionally searching for specific sections.
```json
{
"project": "string", // Project name
"path": "string", // Path to file relative to project workspace
"search": "string" // (Optional) Text/pattern to search for in file
}
```
Response:
```json
{
"success": true,
"timestamp": 1234567890,
"data": {
"content": "string", // File content
"start_line": number, // (Only if search used) Starting line of found section
"end_line": number // (Only if search used) Ending line of found section
}
}
```
#### 2. write_code_file
Write or update specific lines in a code file.
```json
{
"project": "string", // Project name
"path": "string", // Path to file relative to workspace
"content": "string", // Content to write (just the lines being changed)
"start_line": number, // Starting line number for the change
"end_line": number // (Optional) Ending line number for the change
}
```
Response:
```json
{
"success": true,
"timestamp": 1234567890,
"data": {
"diff": {
"changes": [ // List of changes made
[string, number, number, number, number] // (type, old_start, old_end, new_start, new_end)
],
"timestamp": number // When the change was made
}
}
}
```
#### 3. get_code_history
Get change history for a code file.
```json
{
"path": "string" // Path to file relative to workspace
}
```
Response:
```json
{
"success": true,
"timestamp": 1234567890,
"data": {
"history": [
{
"changes": [ // List of changes made
[string, number, number, number, number]
],
"timestamp": number
}
]
}
}
```
#### 4. execute_code_command
Execute a code-related shell command.
```json
{
"command": "string", // Shell command to execute
"timeout": number // (Optional) Command timeout in seconds (default: 30)
}
```
Response:
```json
{
"success": true,
"timestamp": 1234567890,
"data": {
"state": "success|error|timeout|cancelled",
"output": "string", // Command output
"error": "string", // Error message if any
"runtime": number, // Execution time in seconds
"exit_code": number // Command exit code
}
}
```
#### 5. execute_code
Execute code in specified language.
```json
{
"code": "string", // Code to execute
"language": "string", // Programming language ("python" or "node")
"timeout": number // (Optional) Execution timeout in seconds (default: 30)
}
```
Response:
```json
{
"success": true,
"timestamp": 1234567890,
"data": {
"state": "success|error|timeout|cancelled",
"output": "string", // Code execution output
"error": "string", // Error message if any
"runtime": number, // Execution time in seconds
"exit_code": number // Execution exit code
}
}
```
#### 6. revert_to_version
Revert a code file to a specific version.
```json
{
"path": "string", // Path to file relative to workspace
"timestamp": number // Timestamp of version to revert to
}
```
Response:
```json
{
"success": true,
"timestamp": 1234567890,
"data": {
"diff": {
"changes": [ // List of changes made
[string, number, number, number, number]
],
"timestamp": number // When the reversion was made
}
}
}
```
#### 7. read_code_file_lines
Read specific lines from a code file.
```json
{
"project": "string", // Project name
"path": "string", // Path to file relative to project workspace
"start_line": number, // Starting line number to read
"end_line": number // (Optional) Ending line number to read
}
```
Response:
```json
{
"success": true,
"timestamp": 1234567890,
"data": {
"content": "string" // Content of the specified lines
}
}
```
## Error Handling
The server provides detailed error responses in the following format:
```json
{
"success": false,
"timestamp": 1234567890,
"data": null,
"error": "Error message"
}
```
Error types include:
- `CodeFileError`: File operation errors
- `CodeValidationError`: Code validation errors
- `CodeExecutionError`: Code execution errors
## Language Support
Currently supported languages for code execution:
- Python (using system Python interpreter)
- Node.js (using node command)
Each language execution creates a temporary file in the workspace directory and executes it with appropriate interpreter.
## Contributing
1. Fork the repository
2. Create your feature branch
3. Commit your changes
4. Push to the branch
5. Create a new Pull Request
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Author
Todd Wolven - (https://github.com/twolven)
## Acknowledgments
- Built with the Model Context Protocol (MCP) by Anthropic
- Developed for use with Anthropic's Claude