zoho-mcp-server

takusaotome/zoho-mcp-server

3.2

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.

Tools
  1. listTasks

    List project tasks

  2. createTask

    Create new task

  3. updateTask

    Update existing task

  4. getTaskDetail

    Get task details

  5. getProjectSummary

    Get project metrics

Zoho MCP Server

Model Context Protocol (MCP) server for Zoho Projects and WorkDrive integration.

๐Ÿ“– Table of Contents

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 CaseRecommended EnvironmentSecurity Level
๐Ÿงช Personal Learning & DevelopmentLocal environmentBasic setup
๐Ÿ‘ฅ Small TeamsLocal + VPNStandard setup
๐Ÿข Enterprise UseDedicated server + VPNAdvanced setup
๐Ÿš€ Production ServiceNot 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 guides
    • guides/ - Setup guides and troubleshooting documentation
  • tools/ - Development tools, test scripts, and utilities
  • config/ - Configuration templates and settings
  • reports/ - 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

  1. Install the MCP server (follow installation steps below)
  2. 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"
    }
  }
}
  1. Restart Cursor IDE to load the MCP server
  2. Test the connection by asking Cursor about your Zoho projects

๐ŸŽฏ Claude Desktop Setup

  1. Install the MCP server (follow installation steps below)
  2. 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

  1. Restart Claude Desktop to load the MCP server
  2. 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 and cwd
  • 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

  1. Clone and setup:
git clone <repository-url>
cd zoho-mcp-server
pip install -r requirements-dev.txt
  1. 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)
  1. 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
  2. Configure Environment:

cp config/env.example .env
  1. 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
  1. 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
  1. 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
  1. 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:

  1. 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)
  2. Convert to Refresh Token:

python tools/exchange_auth_code.py "YOUR_GENERATED_CODE"

โš™๏ธ Step 3: Initial Setup Verification

  1. Basic setup verification:
python tools/verify_setup.py

๐Ÿ” Step 4: Find Your Portal & Project IDs

  1. 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
  1. 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

  1. Complete API test:
python tools/get_project_tasks.py
  • โœ… If successful, project task list will be displayed
  1. 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

VariableDescriptionRequiredDefault
ZOHO_CLIENT_IDZoho OAuth Client IDโœ… Yes-
ZOHO_CLIENT_SECRETZoho OAuth Client Secretโœ… Yes-
ZOHO_REFRESH_TOKENOAuth Refresh Token (auto-generated)โœ… Yes-
ZOHO_PORTAL_IDYour Zoho Portal IDโš ๏ธ Recommended-
JWT_SECRETJWT signing secret (ONLY for web server, NOT for MCP)โŒ No (for MCP)-
REDIS_URLRedis connection URLโœ… Yesredis://localhost:6379/0
ALLOWED_IPSIP allowlist (comma-separated)โŒ No127.0.0.1,::1
RATE_LIMIT_PER_MINUTERequest rate limitโŒ No100
DEBUGEnable debug modeโŒ Nofalse

Required Zoho Scopes

The following scopes are automatically configured:

  • ZohoProjects.projects.read - Read project information
  • ZohoProjects.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 endpoint
  • GET /manifest.json - Tool manifest

Health & Monitoring

  • GET /health - Health check
  • POST /webhook/task-updated - Webhook receiver

๐Ÿ›  Available Tools

ToolDescriptionParameters
listTasksList project tasksproject_id, status?
createTaskCreate new taskproject_id, name, owner?, due_date?
updateTaskUpdate existing tasktask_id, status?, due_date?, owner?
getTaskDetailGet task detailstask_id
getProjectSummaryGet project metricsproject_id, period?
downloadFileDownload WorkDrive filefile_id
uploadReviewSheetUpload review fileproject_id, folder_id, name, content_base64
searchFilesSearch filesquery, 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)

  1. Complete security configuration -
  2. Connect your GitHub repository to Render
  3. Configure environment variables in Render dashboard (following security guide)
  4. 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

  1. Client requests JWT token (external process)
  2. Include Authorization: Bearer <token> header
  3. Server validates JWT signature and expiration
  4. IP address checked against allowlist
  5. 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

  1. Fork the repository
  2. Create a feature branch
  3. Make changes with tests
  4. Run quality checks
  5. 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)