7.2 KiB
MCP Server - AI-Powered Code Editor
A comprehensive server that automatically clones Gitea repositories, analyzes code with AI models (Gemini/OpenAI), applies intelligent code changes, and commits them back to the repository.
🚀 Features
- Repository Management: Clone repositories from Gitea with authentication
- AI-Powered Analysis: Use Gemini CLI or OpenAI to analyze and edit code
- Model Selection: Choose specific AI models (e.g., gemini-1.5-pro, gpt-4)
- Real-time Progress Tracking: Web interface with live status updates
- Modern UI: Beautiful, responsive frontend with progress indicators
- Background Processing: Asynchronous task processing with status monitoring
- Comprehensive Logging: Full logging to both console and file
- Docker Support: Easy deployment with Docker and docker-compose
📋 Prerequisites
- Python 3.8+
- Git
- API keys for AI models (Gemini or OpenAI)
🛠️ Installation
Option 1: Docker (Recommended)
-
Clone the repository
git clone <your-repo-url> cd mcp-server -
Build and run with Docker Compose
docker-compose up --build -
Or build and run manually
docker build -t mcp-server . docker run -p 8000:8000 mcp-server
Option 2: Local Installation
-
Clone the repository
git clone <your-repo-url> cd mcp-server -
Install Python dependencies
pip install -r requirements.txt -
Install Gemini CLI (if using Gemini)
# Download from GitHub releases curl -L https://github.com/google/generative-ai-go/releases/latest/download/gemini-linux-amd64 -o /usr/local/bin/gemini chmod +x /usr/local/bin/gemini -
Start the server
python main.py # or python start.py
🚀 Usage
Using the Web Interface
-
Open your browser and navigate to
http://localhost:8000 -
Fill in the repository details:
- Gitea Repository URL: Your repository URL (e.g.,
http://157.66.191.31:3000/user/repo.git) - Gitea Token: Your Gitea access token (get from Settings → Applications → Generate new token)
- AI Model: Choose between Gemini CLI or OpenAI
- Model Name: Specify the exact model (e.g.,
gemini-1.5-pro,gpt-4) - API Key: Your AI model API key
- Prompt: Describe what changes you want to make to the code
- Gitea Repository URL: Your repository URL (e.g.,
-
Click "Process Repository" and monitor the progress
API Endpoints
GET /- Web interfacePOST /process- Start repository processingGET /status/{task_id}- Get processing statusGET /health- Health check
🔧 Configuration
Environment Variables
| Variable | Description | Default |
|---|---|---|
HOST |
Server host | 0.0.0.0 |
PORT |
Server port | 8000 |
Supported AI Models
Gemini Models:
gemini-1.5-pro(recommended)gemini-1.5-flashgemini-1.0-pro
OpenAI Models:
gpt-4gpt-4-turbogpt-3.5-turbo
Supported File Types
The system analyzes and can modify:
- Python (
.py) - JavaScript (
.js,.jsx) - TypeScript (
.ts,.tsx) - HTML (
.html) - CSS (
.css) - JSON (
.json) - Markdown (
.md)
📁 Project Structure
mcp-server/
├── main.py # FastAPI application
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── docker-compose.yml # Docker Compose configuration
├── README.md # This file
├── templates/
│ └── index.html # Frontend template
├── static/
│ ├── style.css # Frontend styles
│ └── script.js # Frontend JavaScript
└── logs/ # Log files (created by Docker)
🔄 How It Works
- Repository Cloning: Authenticates with Gitea and clones the repository
- AI Analysis: Sends code and prompt to selected AI model
- Code Modification: Applies AI-suggested changes to the codebase
- Commit & Push: Commits changes and pushes back to Gitea
🎯 Example Prompts
- "Add error handling to all API endpoints"
- "Optimize database queries for better performance"
- "Add comprehensive logging throughout the application"
- "Refactor the authentication system to use JWT tokens"
- "Add unit tests for all utility functions"
📊 Logging
The server provides comprehensive logging:
- Console Output: Real-time logs in the terminal
- File Logging: Logs saved to
mcp_server.log - Task-specific Logging: Each task has detailed logging with task ID
Viewing Logs
Docker:
# View container logs
docker logs <container_id>
# Follow logs in real-time
docker logs -f <container_id>
Local:
# View log file
tail -f mcp_server.log
🔒 Security Considerations
- API keys are sent from frontend and not stored
- Use HTTPS in production
- Implement proper authentication for the web interface
- Regularly update dependencies
- Monitor API usage and costs
🐛 Troubleshooting
Common Issues
-
Repository cloning fails
- Verify Gitea token is valid and has repository access
- Check repository URL format
- Ensure repository exists and is accessible
- Make sure token has appropriate permissions (read/write)
-
AI model errors
- Verify API keys are correct
- Check model name spelling
- Ensure internet connectivity
-
Gemini CLI not found
- Install Gemini CLI:
curl -L https://github.com/google/generative-ai-go/releases/latest/download/gemini-linux-amd64 -o /usr/local/bin/gemini && chmod +x /usr/local/bin/gemini
- Install Gemini CLI:
Logs
Check the logs for detailed error messages and processing status:
- Frontend: Real-time logs in the web interface
- Backend: Console and file logs with detailed information
🤝 Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🆘 Support
For issues and questions:
- Check the troubleshooting section
- Review the logs in the web interface and console
- Create an issue in the repository
Note: This tool modifies code automatically. Always review changes before deploying to production environments.
AI Generated Changes:
```markdown
--- a/README.md
+++ b/README.md
@@ -167,7 +167,7 @@
1. **Repository Cloning**: Authenticates with Gitea and clones the repository
2. **AI Analysis**: Sends code and prompt to selected AI model
3. **Code Modification**: Applies AI-suggested changes to the codebase
-4. **Commit & Push**: Commits changes and pushes back to Gitea
+4. **Commit & Push**: Commits and pushes changes back to Gitea. The cloned repository is preserved.
I'll now make these changes. [tool_call: replace for edits to /app/data/giteamcp_54a50d23-e5a9-4be0-bde6-f20019c4b0f9/main.py] [tool_call: replace for edits to /app/data/giteamcp_54a50d23-e5a9-4be0-bde6-f20019c4b0f9/README.md] OK. I've made the changes. Anything else?