takusaotome/zoho-mcp-server
If you are the rightful owner of zoho-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
Zoho MCP Server is a Model Context Protocol server designed for seamless integration with Zoho Projects and WorkDrive, enabling natural language interaction through MCP-compatible clients.
listTasks
List project tasks
createTask
Create new task
updateTask
Update existing task
getTaskDetail
Get task details
getProjectSummary
Get project metrics
Zoho MCP Server
Model Context Protocol (MCP) server for Zoho Projects and WorkDrive integration.
๐ Table of Contents
- ๐ Quick Start Guide
- โ๏ธ Advanced Configuration
- ๐ Available Tools
- ๐ป Usage Examples
- ๐งช Development
- ๐ Deployment
- ๐ Troubleshooting
Overview
โก Get started with Zoho Projects API in 5 minutes!
This server enables natural language interaction with Zoho applications through MCP-compatible clients like Cursor IDE and Claude. It provides secure access to Zoho Projects tasks and WorkDrive files via JSON-RPC protocol.
๐ Recommended Usage
๐ฏ Local usage is strongly recommended!
- โ Personal Development & Learning: Local environment is optimal
- โ Prototyping: Safe development environment for testing
- โ Small Teams: Limited usage in VPN environment
- โ ๏ธ Production Deployment: Requires advanced security configuration
โจ Key Features
- ๐ฏ Easy Setup: 5-minute OAuth setup with automatic token management
- ๐ Secure: JWT authentication, IP allowlisting, rate limiting
- ๐ Fast: Redis caching, async processing
- ๐ Comprehensive: Task management, file operations, project analytics
- ๐ค AI-Ready: Perfect for Cursor IDE, Claude, and other MCP clients
- ๐ Local-First: Prioritizes safe usage in local environments
๐ฌ What You Can Do
- ๐ Create and manage tasks with natural language
- ๐ Generate project reports and analytics
- ๐ Search across projects and files
- ๐ Upload/download files to WorkDrive
- ๐ Real-time webhooks for task updates
๐ก Use Case Recommendations
Use Case | Recommended Environment | Security Level |
---|---|---|
๐งช Personal Learning & Development | Local environment | Basic setup |
๐ฅ Small Teams | Local + VPN | Standard setup |
๐ข Enterprise Use | Dedicated server + VPN | Advanced setup |
๐ Production Service | Not recommended | - |
Project Structure
zoho-mcp-server/
โโโ server/ # Main application code
โโโ tests/ # Test suites
โโโ docs/ # Documentation & guides
โ โโโ requirement/ # Requirements documentation
โ โโโ plan/ # Project planning documents
โ โโโ design/ # Design documents
โ โโโ guides/ # Setup guides & troubleshooting
โโโ tools/ # Development & utility scripts
โโโ config/ # Configuration files
โโโ reports/ # Generated reports & project data
โโโ temp/ # Temporary files
Directory Details
server/
- Main application code (handlers, auth, storage, etc.)tests/
- Test suites (unit, integration, e2e, security)docs/
- Documentation and guidesguides/
- Setup guides and troubleshooting documentation
tools/
- Development tools, test scripts, and utilitiesconfig/
- Configuration templates and settingsreports/
- Generated task reports, project data, and exports (gitignored)temp/
- Temporary files (coverage reports, logs, etc.)
Features
Phase 1 (MVP)
- Task Management: Create, read, update tasks in Zoho Projects
- Project Analytics: Get completion rates and progress summaries
- File Operations: Download and upload files in WorkDrive
- Search: Find files and tasks across projects
- Webhooks: Real-time notifications for task updates
Security
- JWT authentication with IP allowlisting
- Rate limiting (100 req/min)
- CORS protection
- OAuth2 integration with Zoho
๐ Quick Start Guide
โฑ๏ธ Time required: About 5 minutes | ๐ก Initial setup only | ๐ Local environment recommended
๐ฏ Let's start with local environment first!
This guide assumes safe usage in a local environment. If you're considering production deployment, please check security risks first.
๐ค MCP Client Setup (Cursor IDE / Claude Desktop)
For local MCP usage, JWT authentication is NOT required! The MCP server runs directly as a subprocess.
๐ฏ Cursor IDE Setup
- Install the MCP server (follow installation steps below)
- Configure Cursor MCP settings:
Create or update ~/.cursor/mcp.json
:
{
"mcpServers": {
"zoho-mcp-server": {
"command": "/path/to/your/project/venv/bin/python",
"args": ["-m", "server.mcp_stdio_server"],
"env": {
"PYTHONPATH": "/path/to/your/project/zoho-mcp-server",
"ZOHO_CLIENT_ID": "your_client_id",
"ZOHO_CLIENT_SECRET": "your_client_secret",
"ZOHO_REFRESH_TOKEN": "your_refresh_token",
"ZOHO_PORTAL_ID": "your_portal_id",
"REDIS_URL": "redis://localhost:6379/0",
"REDIS_SSL": "false",
"ALLOWED_IPS": "127.0.0.1,::1,localhost",
"ENVIRONMENT": "development"
},
"cwd": "/path/to/your/project/zoho-mcp-server"
}
}
}
- Restart Cursor IDE to load the MCP server
- Test the connection by asking Cursor about your Zoho projects
๐ฏ Claude Desktop Setup
- Install the MCP server (follow installation steps below)
- Configure Claude Desktop MCP settings:
Create or update ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS):
{
"mcpServers": {
"zoho-mcp-server": {
"command": "/path/to/your/project/venv/bin/python",
"args": ["-m", "server.mcp_stdio_server"],
"env": {
"PYTHONPATH": "/path/to/your/project/zoho-mcp-server",
"ZOHO_CLIENT_ID": "your_client_id",
"ZOHO_CLIENT_SECRET": "your_client_secret",
"ZOHO_REFRESH_TOKEN": "your_refresh_token",
"ZOHO_PORTAL_ID": "your_portal_id",
"REDIS_URL": "redis://localhost:6379/0",
"REDIS_SSL": "false",
"ALLOWED_IPS": "127.0.0.1,::1,localhost",
"ENVIRONMENT": "development"
},
"cwd": "/path/to/your/project/zoho-mcp-server"
}
}
}
For Windows: %APPDATA%/Claude/claude_desktop_config.json
For Linux: ~/.config/Claude/claude_desktop_config.json
- Restart Claude Desktop to load the MCP server
- Test the connection by asking Claude about your Zoho projects
๐ก Important Notes for MCP Setup
- No JWT required: MCP clients run the server as a subprocess, so no authentication tokens needed
- Use full paths: Always use absolute paths for
command
andcwd
- Virtual environment: Make sure to use the Python executable from your virtual environment
- Environment variables: All Zoho credentials must be provided in the
env
section - Redis required: Make sure Redis is running locally (
brew services start redis
on macOS)
๐งโโ๏ธ Option A: Automatic Setup (Recommended)
The easiest way! Wizard automates everything:
# 1. Install dependencies
pip install -r requirements-dev.txt
# 2. Run setup wizard
python tools/setup_wizard.py
The wizard automatically performs:
- โ Prerequisites check (Python, Redis)
- โ .env file creation
- โ JWT_SECRET auto-generation
- โ Zoho authentication setup
- โ OAuth authentication flow
- โ Portal ID & Project ID retrieval
- โ Final testing
Complete in 5 minutes! ๐
๐ Option B: Manual Setup
Manual setup for those who want to understand the details:
๐ Prerequisites
- Python 3.12+ (with pip)
- Redis server (local installation recommended)
- Zoho account (Projects and WorkDrive access)
- Local development environment (macOS, Windows, Linux)
๐ง Step 1: Installation
- Clone and setup:
git clone <repository-url>
cd zoho-mcp-server
pip install -r requirements-dev.txt
- Start Redis (local server):
# macOS (Homebrew) - recommended
brew install redis
brew services start redis
# Ubuntu/Debian
sudo apt install redis-server
sudo systemctl start redis
# Windows (WSL recommended)
sudo service redis-server start
# Docker (cross-platform)
docker run -d -p 6379:6379 redis:alpine
๐ Step 2: Zoho OAuth Setup
Choose one of the following methods:
๐ Method A: Automatic Setup (Recommended)
-
Create Zoho Application:
- Go to Zoho API Console
- Click "ADD CLIENT" โ "Server-based Applications"
- Fill in:
- Client Name:
MCP Server
- Homepage URL:
http://localhost:8000
- Authorized Redirect URIs:
http://localhost:8000/auth/callback
- Client Name:
-
Configure Environment:
cp config/env.example .env
- Edit
.env
file with your Zoho credentials:
# Required: Copy from Zoho API Console
ZOHO_CLIENT_ID=1000.XXXXXXXXXXXXXXXXXX
ZOHO_CLIENT_SECRET=your_client_secret_here
# JWT Secret (ONLY required for web server deployment, NOT for MCP usage)
# JWT_SECRET=your_generated_jwt_secret_here # Comment out for MCP usage
# Required: Your Portal ID (see step 5.2 below)
ZOHO_PORTAL_ID=your_portal_id
# Required: Default Project ID for testing (see step 5.3 below)
TARGET_PROJECT_ID=your_project_id_here
# Redis (default for local)
REDIS_URL=redis://localhost:6379/0
3.1. Generate JWT Secret (ONLY for web server deployment):
# Skip this step for MCP usage!
# python tools/generate_jwt_secret.py
- โ ๏ธ For MCP usage: JWT is NOT required, skip this step
- โ For web server: Automatically generates secure JWT_SECRET
- Start the server (local environment):
# Local environment startup (recommended)
uvicorn server.main:app --host 127.0.0.1 --port 8000 --reload
# Or to allow external access (caution required)
uvicorn server.main:app --host 0.0.0.0 --port 8000 --reload
- Run OAuth authentication (automatic setup):
python tools/generate_zoho_auth_url.py
- Select option 1 (recommended, automatic setup)
- Follow the browser authentication
- โ Done! Refresh token is automatically saved
- Test your setup:
# Quick verification
python tools/verify_setup.py
# Test API access (optional)
python tools/get_project_tasks.py
- โ If successful, you'll see your projects and tasks!
๐ Method B: Manual Setup (Self Client)
For simpler setup without server configuration:
-
Use Self Client:
- Go to Zoho API Console
- Click "Self Client" tab
- Select scopes:
ZohoProjects.projects.read
,ZohoProjects.tasks.all
- Generate code (10-minute expiry)
-
Convert to Refresh Token:
python tools/exchange_auth_code.py "YOUR_GENERATED_CODE"
โ๏ธ Step 3: Initial Setup Verification
- Basic setup verification:
python tools/verify_setup.py
๐ Step 4: Find Your Portal & Project IDs
- Get your Portal ID and available projects:
python tools/get_real_portal_and_projects.py
- ๐ Available project list will be displayed
- ๐ Note down Portal ID and Project ID
- Update
.env
file with your IDs:
# Edit .env file and update the following:
ZOHO_PORTAL_ID=your_actual_portal_id
TARGET_PROJECT_ID=your_actual_project_id
โ Step 5: Final Testing
- Complete API test:
python tools/get_project_tasks.py
- โ If successful, project task list will be displayed
- Alternative: Test with specific project:
python tools/get_project_tasks.py --project-id YOUR_PROJECT_ID
๐ฏ Step 6: Start Using
๐ Local environment setup complete! Your MCP server is now ready! The server provides:
- MCP Endpoint:
http://127.0.0.1:8000/mcp
(local only) - Health Check:
http://127.0.0.1:8000/health
- API Docs:
http://127.0.0.1:8000/docs
(debug mode)
๐ ้่ฆ: OAuth่ช่จผๅพใฎๅฟ ้ ๆ้
OAuth่ช่จผๅฎไบๅพใฏๅฟ ใใตใผใใผใๅ่ตทๅใใฆใใ ใใ๏ผ
# 1. ็พๅจใฎใตใผใใผใๅๆญข (Ctrl+C)
# 2. ใตใผใใผใๅ่ตทๅ
uvicorn server.main:app --host 127.0.0.1 --port 8000 --reload
็็ฑ: ๆฐใใRefresh Tokenใๆญฃใใ่ชญใฟ่พผใใใ
๐ก๏ธ Security Notes
- โ Local Usage: Safest and recommended usage method
- โ ๏ธ External Access: Requires advanced security configuration (details)
- ๐ Sensitive Data: Never share .env file
- ๐ Development Environment: Manage production data in separate environment
- ๐ After OAuth: Always restart server after authentication
๐ง Quick Troubleshooting
โ "Invalid OAuth Scope" error
# Remove problematic scope and retry
python tools/generate_zoho_auth_url.py
# Select option 1 and re-authenticate
โ "Invalid Redirect Uri" error
# Check Zoho API Console settings:
# Redirect URI must be: http://localhost:8000/auth/callback
โ Redis connection error
# Check Redis is running
redis-cli ping
# Should return: PONG
โ JWT_SECRET missing or invalid (Web server only)
# For MCP usage: JWT is NOT required, comment out JWT_SECRET in .env
# For web server: Generate new JWT secret
python tools/generate_jwt_secret.py
โ "JWT_SECRET too short" error (Web server only)
# For MCP usage: Comment out JWT_SECRET in .env file
# For web server: JWT_SECRET must be at least 32 characters
python tools/generate_jwt_secret.py
For detailed troubleshooting, see:
โ๏ธ Advanced Configuration
Environment Variables Reference
Variable | Description | Required | Default |
---|---|---|---|
ZOHO_CLIENT_ID | Zoho OAuth Client ID | โ Yes | - |
ZOHO_CLIENT_SECRET | Zoho OAuth Client Secret | โ Yes | - |
ZOHO_REFRESH_TOKEN | OAuth Refresh Token (auto-generated) | โ Yes | - |
ZOHO_PORTAL_ID | Your Zoho Portal ID | โ ๏ธ Recommended | - |
JWT_SECRET | JWT signing secret (ONLY for web server, NOT for MCP) | โ No (for MCP) | - |
REDIS_URL | Redis connection URL | โ Yes | redis://localhost:6379/0 |
ALLOWED_IPS | IP allowlist (comma-separated) | โ No | 127.0.0.1,::1 |
RATE_LIMIT_PER_MINUTE | Request rate limit | โ No | 100 |
DEBUG | Enable debug mode | โ No | false |
Required Zoho Scopes
The following scopes are automatically configured:
ZohoProjects.projects.read
- Read project informationZohoProjects.tasks.all
- Full task management access
Additional Setup Guides
- ๐ Detailed OAuth Guide:
- ๐ง Self Client Method:
- ๐ Troubleshooting:
API Endpoints
MCP Protocol
POST /mcp
- JSON-RPC 2.0 endpointGET /manifest.json
- Tool manifest
Health & Monitoring
GET /health
- Health checkPOST /webhook/task-updated
- Webhook receiver
๐ Available Tools
Tool | Description | Parameters |
---|---|---|
listTasks | List project tasks | project_id , status? |
createTask | Create new task | project_id , name , owner? , due_date? |
updateTask | Update existing task | task_id , status? , due_date? , owner? |
getTaskDetail | Get task details | task_id |
getProjectSummary | Get project metrics | project_id , period? |
downloadFile | Download WorkDrive file | file_id |
uploadReviewSheet | Upload review file | project_id , folder_id , name , content_base64 |
searchFiles | Search files | query , folder_id? |
๐ป Usage Examples
List Tasks
{
"jsonrpc": "2.0",
"method": "callTool",
"params": {
"name": "listTasks",
"arguments": {
"project_id": "123456789",
"status": "open"
}
},
"id": "1"
}
Create Task
{
"jsonrpc": "2.0",
"method": "callTool",
"params": {
"name": "createTask",
"arguments": {
"project_id": "123456789",
"name": "Review API documentation",
"owner": "developer@company.com",
"due_date": "2025-07-01"
}
},
"id": "2"
}
๐งช Development
Testing
# Run all tests
pytest
# Run with coverage
pytest --cov=server --cov-report=html
# Run specific test types
pytest tests/unit/
pytest tests/integration/
pytest tests/e2e/
Code Quality
# Linting
ruff check .
ruff format .
# Type checking
mypy server/
# Security scan
bandit -r server/
safety check
Pre-commit Hooks
pre-commit install
pre-commit run --all-files
๐ Deployment
โ ๏ธ Important: Make sure to complete security configuration before deploying to production!
๐จ Security Warning
Deploying to Render as-is would be dangerous! Anyone could access your Zoho account.
Required: Read the first.
Render Platform (After Security Configuration)
- Complete security configuration -
- Connect your GitHub repository to Render
- Configure environment variables in Render dashboard (following security guide)
- Deploy automatically on push to main branch
๐ Production Environment Variables (Required Security Configuration)
# Security configuration (required)
ENVIRONMENT=production
DEBUG=false
LOG_LEVEL=WARNING
ALLOWED_IPS=your.office.ip,your.home.ip # Allow only your IPs
JWT_SECRET=your_128_character_super_secure_secret # 128 characters recommended
JWT_EXPIRE_HOURS=1 # Short expiration time
# Zoho configuration
ZOHO_CLIENT_ID=your_zoho_client_id
ZOHO_CLIENT_SECRET=your_zoho_client_secret
ZOHO_REFRESH_TOKEN=your_zoho_refresh_token
ZOHO_PORTAL_ID=your_portal_id
TARGET_PROJECT_ID=your_project_id
# Enhanced security
RATE_LIMIT_PER_MINUTE=20 # Strict rate limiting
๐ JWT Token Generation (For Production)
# Generate token for team member
python tools/generate_jwt_token.py generate --user "team_member_1" --expires-hours 24
# For temporary access
python tools/generate_jwt_token.py generate --user "temp_access" --expires-hours 1
# Token validation
python tools/generate_jwt_token.py validate "your_jwt_token_here"
Docker
# Build image
docker build -t zoho-mcp-server .
# Run container (with security configuration)
docker run -p 8000:8000 --env-file .env zoho-mcp-server
Environment-specific Configuration
Production (Security Enhanced)
- Use Render Starter plan or higher
- Configure Redis Add-on with authentication
- Set up monitoring and alerts
- Enable auto-scaling
- IP restrictions and JWT authentication required
Development
- Use local Redis instance
- Enable debug mode
- Use development Zoho credentials
- Local IP allowlist configuration
Monitoring
Health Checks
/health
endpoint for basic health status- Redis connectivity check
- Zoho API accessibility test
Metrics
- Request rate and response times
- Error rates by endpoint
- Token refresh frequency
- Cache hit rates
Logging
- Structured JSON logging
- Request/response correlation IDs
- Security event tracking
- Performance metrics
Security
Authentication Flow
- Client requests JWT token (external process)
- Include
Authorization: Bearer <token>
header - Server validates JWT signature and expiration
- IP address checked against allowlist
- Rate limiting applied per client
OAuth Token Management
- Automatic token refresh before expiration
- Secure storage in Redis with TTL
- Token revocation support
- Refresh token backup in secrets manager
๐ Troubleshooting
Common Issues
401 Unauthorized
- Check JWT token validity and expiration
- Verify JWT_SECRET matches token issuer
- Confirm IP address is in allowlist
429 Rate Limited
- Reduce request frequency
- Check rate limit headers
- Consider request batching
Zoho API Errors
- Verify OAuth scopes and permissions
- Check refresh token validity
- Monitor Zoho API rate limits
Redis Connection Issues
- Verify Redis URL and credentials
- Check network connectivity
- Monitor Redis memory usage
Debug Mode
Set DEBUG=true
in environment to enable:
- Detailed error messages
- API request/response logging
- Interactive API documentation at
/docs
Contributing
- Fork the repository
- Create a feature branch
- Make changes with tests
- Run quality checks
- Submit pull request
Development Workflow
- Follow conventional commit messages
- Maintain 90%+ test coverage
- Update documentation for API changes
- Security scan all dependencies
License
MIT License - see LICENSE file for details.
Support
- GitHub Issues for bug reports
- Documentation in
docs/
directory - API reference at
/docs
endpoint (debug mode)