Official MCP SDK STDIO Server - MCP Protocol 2025-06-18 Compliant
pip install -r requirements.txt# Test imports and tools
python validate_tools.pyThe server runs via STDIO protocol - configure your MCP client:
Claude Desktop:
{
"mcpServers": {
"ocr-pdf": {
"command": "python",
"args": ["d:/AI/MCP/python/ocr_pdf_mcp/mcp_server_stdio.py"],
"env": {}
}
}
}- 🎯 Official MCP SDK: Built with official FastMCP framework
- 📡 STDIO Transport: Standard MCP protocol over STDIO
- 🧠 Smart PDF Processing: Automatically detects digital vs scanned content
- 🔧 5 OCR Tools: Text extraction, OCR processing, combined operations
- 🌐 Universal Client Support: Claude Desktop, LM Studio, Continue.dev, Cursor
- ⚡ Lightweight: ~200 lines vs 800+ in HTTP implementation
- 🛡️ Production Ready: Comprehensive error handling and logging
- 📋 Auto Tool Registration: Decorators handle tool discovery
- Python 3.8+
- Tesseract OCR
# Install Python dependencies
pip install -r requirements.txt
# Install Tesseract
choco install tesseractpip install -r requirements.txt
brew install tesseractpip install -r requirements.txt
sudo apt-get install tesseract-ocrIntelligent processing with automatic OCR detection:
{
"name": "process_pdf_smart",
"arguments": {
"pdf_path": "/path/to/document.pdf",
"language": "eng"
}
}Direct text extraction from digital PDFs:
{
"name": "extract_pdf_text",
"arguments": {
"pdf_path": "/path/to/document.pdf",
"page_range": "1-5"
}
}OCR on image files:
{
"name": "perform_ocr",
"arguments": {
"image_path": "/path/to/image.png",
"language": "eng"
}
}Analyze document structure and metadata:
{
"name": "analyze_pdf_structure",
"arguments": {
"pdf_path": "/path/to/document.pdf"
}
}Process multiple files:
{
"name": "batch_process_pdfs",
"arguments": {
"input_directory": "/path/to/pdfs/",
"output_directory": "/path/to/output/",
"file_pattern": "*.pdf"
}
}Add to claude_desktop_config.json:
{
"mcpServers": {
"readpdfx": {
"command": "python",
"args": ["path/to/readpdfx/run.py"],
"env": {
"PYTHONPATH": "path/to/readpdfx"
}
}
}
}Configure MCP server with:
- Command:
python - Args:
path/to/readpdfx/run.py - URL:
http://localhost:8000(HTTP mode)
Add to config.json:
{
"contextProviders": [
{
"name": "mcp",
"params": {
"command": "python",
"args": ["path/to/readpdfx/run.py"]
}
}
]
}Configure in settings.json:
{
"mcp.servers": {
"readpdfx": {
"command": "python",
"args": ["path/to/readpdfx/run.py"]
}
}
}📁 See client-configs/ for detailed integration guides.
POST /mcp/initialize- Initialize MCP sessionPOST /mcp/tools/list- List available toolsPOST /mcp/tools/call- Call MCP toolsGET /mcp/manifest- Get MCP manifest
GET /health- Health checkPOST /jsonrpc- JSON-RPC 2.0 endpointGET /docs- API documentationGET /tools- Tools discovery
MCP_SERVER_HOST=localhost # Server host
MCP_SERVER_PORT=8000 # Server port
TESSERACT_CMD=/usr/bin/tesseract # Tesseract path
PYTHONPATH=. # Python pathmcp.json- MCP Protocol configurationmcp-config.yaml- YAML configurationpyproject.toml- Python project configpackage.json- Node.js compatibility
# Build and run with Docker
docker build -t ocr-pdf-mcp .
docker run -p 8000:8000 -v ./pdf-test:/app/pdf-test:ro ocr-pdf-mcp
# Or use Docker Compose
docker-compose up -d# Linux/macOS
./scripts/docker-deploy.sh run
# Windows
scripts\docker-deploy.bat runAvailable Docker commands:
build- Build Docker image onlyrun- Build and run container (default)start- Start container (assumes image exists)stop- Stop running containerlogs- Show container logsclean- Stop container and remove imagestatus- Show container status
# Quick deployment
./scripts/k8s-deploy.sh deploy
# Manual deployment
kubectl apply -f k8s/ -n ocr-pdf-mcp- Deployment:
k8s/deployment.yaml- Main application deployment - Service:
k8s/deployment.yaml- Service exposure - Ingress:
k8s/ingress.yaml- External access - ConfigMap:
k8s/configmap.yaml- Configuration management - HPA:
k8s/hpa.yaml- Horizontal Pod Autoscaler
# Scale deployment
kubectl scale deployment ocr-pdf-mcp --replicas=5 -n ocr-pdf-mcp
# Port forward for local access
kubectl port-forward svc/ocr-pdf-mcp-service 8000:80 -n ocr-pdf-mcp
# View logs
kubectl logs -f deployment/ocr-pdf-mcp -n ocr-pdf-mcp
# Check status
kubectl get pods,svc,ingress -n ocr-pdf-mcpUse Dockerfile.prod for optimized production builds:
docker build -f Dockerfile.prod -t ocr-pdf-mcp:prod .# Docker
docker run -e LOG_LEVEL=INFO -e CORS_ORIGINS="*" ocr-pdf-mcp
# Kubernetes - update ConfigMap
kubectl edit configmap ocr-pdf-mcp-config -n ocr-pdf-mcp# Add to deployment.yaml
volumeMounts:
- name: pdf-storage
mountPath: /app/pdf-test
volumes:
- name: pdf-storage
persistentVolumeClaim:
claimName: pdf-storage-pvcpython test_mcp_server.py# Health check
curl http://localhost:8000/health
# List tools
curl -X POST http://localhost:8000/mcp/tools/list \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "id": 1}'
# Call tool
curl -X POST http://localhost:8000/mcp/tools/call \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "process_pdf_smart",
"arguments": {"pdf_path": "/path/to/test.pdf"}
},
"id": 1
}'- Startup Time: < 2 seconds
- Memory Usage: ~50MB base
- Throughput: 10+ PDFs/minute
- Concurrent Requests: Up to 100
- File Size Limit: 100MB per file
python run_server.py --dev --port 8000readpdfx/
├── run.py # Simple production runner
├── run_server.py # Advanced runner with options
├── mcp_server.py # Core MCP server
├── mcp_tools.py # MCP tools implementation
├── mcp_types.py # MCP Protocol types
├── mcp_server_runner.py # HTTP server runner
├── client-configs/ # Client integration guides
├── backup/ # Legacy files
└── tests/ # Test files
- Define tool schema in
mcp_tools.py - Implement tool handler method
- Register tool in
MCPToolsRegistry - Update tests and documentation
Server won't start
# Check port availability
netstat -an | grep 8000
# Try different port
python run_server.py --port 8001OCR not working
# Check Tesseract installation
tesseract --version
# Install language data
tesseract --list-langsPermission errors
- Ensure read access to PDF files
- Check write permissions for output directory
- Run with appropriate user privileges
Connection timeout
- Verify server is running:
curl http://localhost:8000/health - Check firewall settings
- Try HTTP instead of direct MCP connection
python run_server.py --devcurl http://localhost:8000/health- Request count and latency
- Tool usage statistics
- Error rates and types
- Resource utilization
- Fork the repository
- Create feature branch:
git checkout -b feature/new-tool - Make changes and add tests
- Submit pull request
git clone https://github.com/irev/mcp-readpdfx.git
cd readpdfx
pip install -r requirements-dev.txt
python test_mcp_server.pyMIT License - see LICENSE file.
- Repository: https://github.com/irev/mcp-readpdfx
- Issues: https://github.com/irev/mcp-readpdfx/issues
- Documentation: https://github.com/irev/mcp-readpdfx#readme
- MCP Protocol: Model Context Protocol Specification
- MCP Protocol Team for the specification
- FastAPI for the web framework
- Tesseract OCR for text recognition
- PyPDF2 and pdfplumber for PDF processing
Made with ❤️ for the MCP community