# Case Study Generator MCP Server
A Model Context Protocol (MCP) server that processes document content and GitHub repositories with Gemma3 to extract structured business insights for case study generation.
## Overview
This MCP server provides three main capabilities:
1. **Document Processing** - Extract business insights from documents (proposals, case studies, contracts)
2. **GitHub Repository Analysis** - Analyze repositories for business value and technical benefits
3. **Company Research** - Real-time web research using Tavily + AI analysis for company insights
The server uses Gemma3 8B-Instruct via Ollama for local LLM processing, ensuring privacy and control over your data.
## Architecture
```
User → Claude Desktop → Google Drive (retrieve) → MCP Server (process) → Claude Desktop (reason & write) → Google Drive (save)
```
- **Claude Desktop**: Handles document retrieval, reasoning, writing, and saving
- **MCP Server**: Processes data with Gemma3 and returns structured insights
- **Ollama/Gemma3**: Local LLM for business analysis and insight extraction
## Prerequisites
### Required Software
1. **Python 3.11+** - Programming language runtime
2. **Ollama** - Local LLM inference server
3. **Gemma3 Model** - Language model for analysis
### Install Ollama
Visit [ollama.ai](https://ollama.ai) and install for your platform.
After installation, pull the Gemma3 model:
```bash
ollama pull gemma3n:e4b
```
Verify Ollama is running:
```bash
ollama list
```
## Installation
### Option 1: Using venv (Recommended)
```bash
# Clone the repository
git clone <repository-url>
cd case-study-mcp
# Create and activate virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
```
### Option 2: Using Poetry
```bash
# Clone the repository
git clone <repository-url>
cd case-study-mcp
# Install with Poetry
poetry install
poetry shell
```
## Configuration
### Environment Variables (Optional)
Create a `.env` file in the project root:
```bash
# GitHub API token for higher rate limits (optional)
GITHUB_TOKEN=your_github_token_here
# Tavily API key for web search company research (optional)
TAVILY_API_KEY=your_tavily_api_key_here
# Ollama configuration
OLLAMA_HOST=http://localhost:11434
OLLAMA_MODEL=gemma3n:e4b
# Logging level
LOG_LEVEL=INFO
```
### GitHub Token Setup
For better GitHub API rate limits, create a personal access token:
1. Go to GitHub Settings → Developer settings → Personal access tokens
2. Generate a new token with `public_repo` scope
3. Add to `.env` file or set as environment variable
### Tavily API Setup (For Company Research)
For real company research capabilities, get a Tavily API key:
1. Sign up at [tavily.com](https://tavily.com)
2. Get your API key from the dashboard
3. Add `TAVILY_API_KEY=your_key_here` to `.env` file
**Note**: Without Tavily, company research will use LLM pattern matching only.
## Usage
### Starting the MCP Server
```bash
# Run the server
python mcp_server.py
```
The server communicates via stdio and will wait for MCP protocol messages.
### Integration with Claude Desktop
Add to your Claude Desktop MCP configuration:
```json
{
"mcpServers": {
"case-study-mcp": {
"command": "python",
"args": ["/path/to/case-study-mcp/mcp_server.py"],
"cwd": "/path/to/case-study-mcp"
}
}
}
```
### Example Usage in Claude Desktop
```
User: "Create a case study for TechCorp using github.com/example/ecommerce-platform and my retail proposal document"
Claude: "I'll analyze the repository and document to create your case study..."
[Claude uses MCP tools:]
1. process_document_text(text="retail proposal content", doc_type="proposal")
2. analyze_github_repo(repo_url="github.com/example/ecommerce-platform")
3. research_company_basic(company_name="TechCorp")
[Claude synthesizes results into compelling case study]
```
## MCP Tools
### 1. process_document_text
Extract business insights from document content.
**Parameters:**
- `text` (required): Document content text
- `doc_type` (optional): Type of document - "proposal", "case_study", "contract", or "general"
**Returns:**
```json
{
"success": true,
"document_type": "proposal",
"insights": {
"challenges": ["Legacy platform scalability issues"],
"solutions": ["Microservices architecture"],
"metrics": ["90% improvement in load times"],
"context": "Mid-market e-commerce company",
"key_stakeholders": ["CTO", "Engineering Team"],
"timeline": "6-month implementation"
}
}
```
### 2. analyze_github_repo
Analyze GitHub repository for business value.
**Parameters:**
- `repo_url` (required): GitHub repository URL
**Returns:**
```json
{
"success": true,
"repository": {
"url": "github.com/example/repo",
"name": "example/ecommerce-platform",
"tech_stack": ["Python", "React", "Docker"],
"stars": 1250,
"language": "Python"
},
"business_analysis": {
"problem_solved": "Scalable e-commerce platform",
"key_features": ["Microservices", "Redis caching"],
"business_value": "Enables 10x traffic scaling",
"technical_benefits": ["Horizontal scaling", "Fault tolerance"],
"target_users": "Mid to large-scale e-commerce businesses",
"scalability": "Designed for high-traffic peaks",
"integration_points": ["CRM systems", "Payment gateways"]
}
}
```
### 3. research_company_basic
Real company research using web search + AI analysis.
**Parameters:**
- `company_name` (required): Name of the company
- `company_context` (optional): Additional context about the company
**Returns:**
```json
{
"success": true,
"company": {
"name": "TechCorp",
"profile": "Technology company specializing in...",
"industry": "Technology",
"business_model": "SaaS"
},
"insights": {
"challenges": ["Digital transformation needs"],
"opportunities": ["Cloud migration potential"],
"technology_needs": ["Scalable infrastructure"]
},
"web_search_used": true,
"search_sources": [
{"title": "TechCorp - About Us", "url": "https://techcorp.com/about"},
{"title": "TechCorp on LinkedIn", "url": "https://linkedin.com/company/techcorp"}
]
}
```
## Testing
### Manual Testing
Test each tool individually:
```bash
# Test document processing
echo '{"text": "Sample proposal text", "doc_type": "proposal"}' | python test_document.py
# Test GitHub analysis
echo '{"repo_url": "github.com/microsoft/vscode"}' | python test_github.py
# Test company research
echo '{"company_name": "Microsoft"}' | python test_company.py
```
### Health Check
The server provides a health check resource:
```
URI: health://status
```
Returns status of all components including Gemma3, GitHub API, and processors.
## Troubleshooting
### Common Issues
**1. Ollama Connection Error**
```
Error: Failed to connect to Ollama
```
**Solution:** Ensure Ollama is running (`ollama serve`) and the model is pulled (`ollama pull gemma3n:e4b`).
**2. GitHub Rate Limit**
```
Error: GitHub API rate limit exceeded
```
**Solution:** Add a GitHub token to your `.env` file for higher limits.
**3. Model Not Found**
```
Error: Model ollama3n:4b not found
```
**Solution:** Pull the model with `ollama pull ollama3n:4b`.
**4. Import Errors**
```
ImportError: No module named 'mcp'
```
**Solution:** Install dependencies with `pip install -r requirements.txt`.
**5. Company Research Limited**
```
Warning: Tavily not configured. Company research will use LLM patterns only.
```
**Solution:** Get a Tavily API key from [tavily.com](https://tavily.com) and add to `.env` file.
### Performance Optimization
- **Memory Usage**: Ollama3n 4B requires ~4-6GB RAM for optimal performance
- **Processing Time**: Document processing typically takes 5-15 seconds
- **Concurrent Requests**: Server handles one request at a time by design
### Logging
Enable debug logging:
```bash
export LOG_LEVEL=DEBUG
python mcp_server.py
```
## Project Structure
```
case-study-mcp/
├── mcp_server.py # Main MCP server entry point
├── gemma3_client.py # Gemma3/Ollama client wrapper
├── document_processor.py # Document analysis processor
├── github_analyzer.py # GitHub repository analyzer
├── company_researcher.py # Company research processor
├── prompts.py # Gemma3 prompt templates
├── pyproject.toml # Poetry configuration
├── requirements.txt # Pip dependencies
├── README.md # This file
├── project_config.md # Project specification
└── workflow_state.md # Development workflow tracking
```
## Development
### Contributing
1. Fork the repository
2. Create a feature branch
3. Make changes with tests
4. Submit a pull request
### Code Style
- Use Black for formatting: `black .`
- Use isort for imports: `isort .`
- Use mypy for type checking: `mypy .`
## License
MIT License - see LICENSE file for details.
## Support
For issues and questions:
1. Check the troubleshooting section above
2. Review the project configuration in `project_config.md`
3. Open an issue with detailed error logs and steps to reproduce