Skip to main content
Glama
Zoho CRM + Books MCP Server

Zoho CRM + Books MCP Server

by Mgabr90

Zoho CRM + Books MCP Server

A unified Model Context Protocol (MCP) server that provides seamless integration between Zoho CRM and Zoho Books, enabling AI assistants like Claude to interact with both systems through standardized tools and resources.

Features

  • CRM Integration: Full access to Zoho CRM modules, records, and operations

  • Books Integration: Complete Zoho Books customer and invoice management

  • Data Synchronization: Automated sync between CRM accounts and Books customers

  • Invoice Creation: Generate Books invoices directly from CRM deals

  • Universal Search: Search across both CRM and Books data

  • Multi-Configuration System: Manage multiple OAuth configurations for different environments and projects

  • OAuth 2.0 Authentication: Secure, token-based authentication

  • Rate Limiting: Built-in rate limiting and error handling

  • TypeScript: Full type safety and excellent developer experience

Related MCP server: zoho-bookkeeper-mcp

Prerequisites

  • Node.js 18.0.0 or higher

  • Zoho CRM account with API access

  • Zoho Books account with API access

  • Zoho OAuth application credentials

Installation

  1. Clone the repository:

git clone <repository-url>
cd zoho-mcp-server
  1. Install dependencies:

npm install
  1. Copy the environment configuration:

cp .env.example .env
  1. Configure your environment variables in .env:

Single Configuration (Legacy)

# Zoho OAuth Configuration
ZOHO_CLIENT_ID=your_client_id_here
ZOHO_CLIENT_SECRET=your_client_secret_here
ZOHO_REDIRECT_URI=http://localhost:3000/callback
ZOHO_REFRESH_TOKEN=your_refresh_token_here

# Zoho Data Center (com, eu, in, com.au, jp)
ZOHO_DATA_CENTER=com

# Zoho Books Organization ID (required for Books functionality)
ZOHO_BOOKS_ORGANIZATION_ID=your_organization_id_here

# Zoho API Scopes
ZOHO_SCOPES=ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,ZohoBooks.fullaccess.all
# Enable multi-configuration system
MULTI_CONFIG_ENABLED=true

# Current environment to use
MULTI_CONFIG_ENVIRONMENT=default

# Path to configuration file (optional)
MULTI_CONFIG_PATH=./zoho-config.json

# Legacy variables (for backward compatibility)
ZOHO_CLIENT_ID=your_client_id_here
ZOHO_CLIENT_SECRET=your_client_secret_here
ZOHO_REDIRECT_URI=http://localhost:3000/callback
ZOHO_REFRESH_TOKEN=your_refresh_token_here
ZOHO_DATA_CENTER=com
ZOHO_BOOKS_ORGANIZATION_ID=your_organization_id_here
ZOHO_SCOPES=ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,ZohoBooks.fullaccess.all

For detailed multi-configuration setup, see MULTI_CONFIG_GUIDE.md.

Zoho OAuth Setup

  1. Go to the Zoho Developer Console

  2. Create a new "Server-based Applications"

  3. Set redirect URI to http://localhost:3000/callback

  4. Note your Client ID and Client Secret

  5. Generate a refresh token using the authorization flow

Build and Run

  1. Build the TypeScript code:

npm run build
  1. Start the server:

npm start

For development with auto-reload:

npm run dev

MCP Integration

Claude Desktop Configuration

Add the following to your Claude Desktop MCP configuration:

{
  "mcpServers": {
    "zoho-crm-books": {
      "command": "node",
      "args": ["C:\\zoho-mcp-server\\dist\\server.js"],
      "env": {
        "ZOHO_CLIENT_ID": "your_client_id",
        "ZOHO_CLIENT_SECRET": "your_client_secret",
        "ZOHO_REFRESH_TOKEN": "your_refresh_token",
        "ZOHO_DATA_CENTER": "com",
        "ZOHO_BOOKS_ORGANIZATION_ID": "your_org_id"
      }
    }
  }
}

VS Code Configuration

Add to your VS Code MCP configuration:

{
  "servers": {
    "zoho-crm-books": {
      "command": "node",
      "args": ["C:\\zoho-mcp-server\\dist\\server.js"]
    }
  }
}

Available Tools

CRM & Books Integration Tools

1. sync_accounts_to_customers

Synchronizes CRM accounts to Books customers.

Parameters:

  • source_module: "accounts" (fixed)

  • target_module: "customers" (fixed)

  • filters (optional):

    • limit: Number of records to process (1-200)

    • page: Page number to process

Example:

{
  "source_module": "accounts",
  "target_module": "customers",
  "filters": {
    "limit": 50,
    "page": 1
  }
}

1.1. sync_contacts_to_customers

Synchronizes CRM contacts to Books customers (bi-directional sync).

Parameters:

  • source_module: "contacts" (fixed)

  • target_module: "customers" (fixed)

  • filters (optional):

    • limit: Number of records to process (1-200)

    • page: Page number to process

Example:

{
  "source_module": "contacts",
  "target_module": "customers",
  "filters": {
    "limit": 50,
    "page": 1
  }
}

1.2. sync_customers_to_contacts

Synchronizes Books customers to CRM contacts (bi-directional sync).

Parameters:

  • source_module: "customers" (fixed)

  • target_module: "contacts" (fixed)

  • filters (optional):

    • limit: Number of records to process (1-200)

    • page: Page number to process

Example:

{
  "source_module": "customers",
  "target_module": "contacts",
  "filters": {
    "limit": 50,
    "page": 1
  }
}

2. create_invoice_from_deal

Creates a Books invoice from a CRM deal.

Parameters:

  • deal_id: CRM deal ID (required)

  • customer_id: Books customer ID (optional)

  • invoice_date: Invoice date (optional, defaults to today)

  • due_date: Due date (optional, defaults to 30 days from today)

  • include_line_items: Include deal amount as line item (default: true)

  • send_email: Send invoice email to customer (default: false)

Example:

{
  "deal_id": "123456789",
  "customer_id": "987654321",
  "include_line_items": true,
  "send_email": true
}

3. search_records

Search across CRM and Books records.

Parameters:

  • module: Module to search ("accounts", "contacts", "deals", "leads", "customers", "invoices")

  • criteria: Search criteria (required)

  • fields: Fields to return (optional)

  • page: Page number (default: 1)

  • per_page: Results per page (default: 20, max: 200)

Example:

{
  "module": "accounts",
  "criteria": "tech company",
  "fields": ["Account_Name", "Email", "Phone"],
  "page": 1,
  "per_page": 10
}

Books Items Management Tools

4. books_get_items

Get all items from Books with optional filtering and pagination.

Parameters:

  • page: Page number (default: 1)

  • per_page: Results per page (default: 20, max: 200)

  • search_text: Search text (optional)

  • filter_by: Filter criteria (optional)

  • sort_column: Column to sort by (optional)

  • sort_order: Sort order "A" or "D" (optional)

5. books_get_item

Get a specific item from Books by ID.

Parameters:

  • item_id: Item ID (required)

6. books_create_item

Create a new item in Books.

Parameters:

  • name: Item name (required)

  • description: Item description (optional)

  • rate: Item rate (optional)

  • unit: Unit of measurement (optional)

  • sku: Stock keeping unit (optional)

  • product_type: Product type (optional)

  • is_taxable: Whether item is taxable (optional)

  • tax_id: Tax ID (optional)

  • item_type: Item type (optional)

7. books_update_item

Update an existing item in Books.

Parameters:

  • item_id: Item ID (required)

  • Plus any fields from books_create_item to update

8. books_delete_item

Delete an item from Books.

Parameters:

  • item_id: Item ID (required)

Books Estimates Management Tools

9. books_get_estimates

Get all estimates from Books with optional filtering and pagination.

Parameters:

  • page: Page number (default: 1)

  • per_page: Results per page (default: 20, max: 200)

  • customer_id: Filter by customer ID (optional)

  • status: Filter by status (optional)

  • search_text: Search text (optional)

  • filter_by: Filter criteria (optional)

  • sort_column: Column to sort by (optional)

  • sort_order: Sort order "A" or "D" (optional)

10. books_create_estimate

Create a new estimate in Books.

Parameters:

  • customer_id: Customer ID (required)

  • line_items: Array of line items (required)

    • name: Item name (required)

    • quantity: Quantity (required)

    • rate: Rate (required)

    • description: Description (optional)

    • unit: Unit (optional)

    • item_id: Item ID (optional)

    • tax_id: Tax ID (optional)

  • estimate_date: Estimate date (optional)

  • expiry_date: Expiry date (optional)

  • currency_code: Currency code (optional)

  • discount: Discount amount (optional)

  • notes: Notes (optional)

  • terms: Terms (optional)

11. books_convert_estimate_to_invoice

Convert a Books estimate to an invoice.

Parameters:

  • estimate_id: Estimate ID (required)

Books Payments Management Tools

12. books_get_payments

Get all payments from Books with optional filtering and pagination.

Parameters:

  • page: Page number (default: 1)

  • per_page: Results per page (default: 20, max: 200)

  • customer_id: Filter by customer ID (optional)

  • search_text: Search text (optional)

  • filter_by: Filter criteria (optional)

  • sort_column: Column to sort by (optional)

  • sort_order: Sort order "A" or "D" (optional)

13. books_create_payment

Create a new payment in Books.

Parameters:

  • customer_id: Customer ID (required)

  • payment_mode: Payment mode (required)

  • amount: Payment amount (required)

  • date: Payment date (required)

  • invoices: Array of invoices to apply payment to (required)

    • invoice_id: Invoice ID (required)

    • invoice_number: Invoice number (required)

    • amount_applied: Amount applied to invoice (required)

    • tax_amount_withheld: Tax amount withheld (optional)

  • reference_number: Reference number (optional)

  • description: Payment description (optional)

  • bank_charges: Bank charges (optional)

  • currency_code: Currency code (optional)

  • exchange_rate: Exchange rate (optional)

CRM Activities Management Tools

14. crm_get_tasks

Get all tasks from CRM with optional filtering and pagination.

Parameters:

  • page: Page number (default: 1)

  • per_page: Results per page (default: 20, max: 200)

  • sort_by: Column to sort by (optional)

  • sort_order: Sort order "asc" or "desc" (optional)

  • status: Filter by status (optional)

  • due_date: Filter by due date (optional)

15. crm_create_task

Create a new task in CRM.

Parameters:

  • Subject: Task subject (required)

  • Status: Task status (optional)

  • Priority: Task priority (optional)

  • Due_Date: Due date (optional)

  • What_Id: Related record ID (optional)

  • Who_Id: Contact ID (optional)

  • Description: Task description (optional)

  • Related_To: Related to field (optional)

  • Remind_At: Reminder time (optional)

  • Recurring_Activity: Recurring activity settings (optional)

16. crm_get_events

Get all events from CRM with optional filtering and pagination.

Parameters:

  • page: Page number (default: 1)

  • per_page: Results per page (default: 20, max: 200)

  • sort_by: Column to sort by (optional)

  • sort_order: Sort order "asc" or "desc" (optional)

  • start_date: Filter by start date (optional)

  • end_date: Filter by end date (optional)

17. crm_create_event

Create a new event in CRM.

Parameters:

  • Subject: Event subject (required)

  • Start_DateTime: Start date and time (required)

  • End_DateTime: End date and time (required)

  • Description: Event description (optional)

  • Location: Event location (optional)

  • What_Id: Related record ID (optional)

  • Who_Id: Contact ID (optional)

  • Event_Title: Event title (optional)

  • All_day: All-day event flag (optional)

  • Participants: Array of participant IDs (optional)

  • Remind_At: Reminder time (optional)

  • Recurring_Activity: Recurring activity settings (optional)

18. crm_get_notes

Get notes for a specific CRM record.

Parameters:

  • module: CRM module name (required)

  • record_id: Record ID (required)

  • page: Page number (default: 1)

  • per_page: Results per page (default: 20, max: 200)

19. crm_create_note

Create a new note for a CRM record.

Parameters:

  • module: CRM module name (required)

  • record_id: Record ID (required)

  • Note_Title: Note title (required)

  • Note_Content: Note content (required)

  • Parent_Id: Parent record ID (optional)

20. crm_send_email

Send email for a CRM record.

Parameters:

  • module: CRM module name (required)

  • record_id: Record ID (required)

  • to: Array of recipient email addresses (required)

  • subject: Email subject (required)

  • content: Email content (required)

  • cc: Array of CC email addresses (optional)

  • bcc: Array of BCC email addresses (optional)

  • mail_format: Email format (optional)

  • template_id: Email template ID (optional)

21. crm_get_attachments

Get attachments for a CRM record.

Parameters:

  • module: CRM module name (required)

  • record_id: Record ID (required)

  • page: Page number (default: 1)

  • per_page: Results per page (default: 20, max: 200)

Configuration Management Tools

22. config_list_environments

List all available environments in the multi-configuration system.

Parameters: None

Example:

{
  "name": "config_list_environments",
  "arguments": {}
}

23. config_switch_environment

Switch to a different environment.

Parameters:

  • environmentName: Name of the environment to switch to (required)

Example:

{
  "name": "config_switch_environment",
  "arguments": {
    "environmentName": "production"
  }
}

24. config_list_profiles

List all profiles in the current environment.

Parameters: None

Example:

{
  "name": "config_list_profiles",
  "arguments": {}
}

25. config_switch_profile

Switch to a different profile within the current environment.

Parameters:

  • profileName: Name of the profile to switch to (required)

Example:

{
  "name": "config_switch_profile",
  "arguments": {
    "profileName": "backup"
  }
}

26. config_add_profile

Add a new profile to the current environment.

Parameters:

  • name: Profile name (required)

  • description: Profile description (optional)

  • clientId: Zoho Client ID (required)

  • clientSecret: Zoho Client Secret (required)

  • redirectUri: Redirect URI (required)

  • refreshToken: Refresh Token (required)

  • dataCenter: Data Center (required)

  • scopes: Array of API scopes (required)

  • organizationId: Books Organization ID (optional)

Example:

{
  "name": "config_add_profile",
  "arguments": {
    "name": "backup",
    "description": "Backup production account",
    "clientId": "1000.BACKUP_CLIENT_ID",
    "clientSecret": "BACKUP_CLIENT_SECRET",
    "redirectUri": "https://yourdomain.com/callback",
    "refreshToken": "1000.BACKUP_REFRESH_TOKEN",
    "dataCenter": "com",
    "scopes": [
      "ZohoCRM.modules.ALL",
      "ZohoCRM.settings.ALL",
      "ZohoBooks.fullaccess.all"
    ],
    "organizationId": "BACKUP_ORG_ID"
  }
}

27. config_remove_profile

Remove a profile from the current environment.

Parameters:

  • profileName: Name of the profile to remove (required)

Example:

{
  "name": "config_remove_profile",
  "arguments": {
    "profileName": "old-profile"
  }
}

28. config_update_profile

Update an existing profile.

Parameters:

  • profileName: Name of the profile to update (required)

  • updates: Object containing fields to update (required)

Example:

{
  "name": "config_update_profile",
  "arguments": {
    "profileName": "primary",
    "updates": {
      "description": "Updated description",
      "refreshToken": "1000.NEW_REFRESH_TOKEN"
    }
  }
}

29. config_get_status

Get current configuration status.

Parameters: None

Example:

{
  "name": "config_get_status",
  "arguments": {}
}

30. config_export_to_env

Export current configuration to .env format.

Parameters:

  • profileName: Name of the profile to export (optional, defaults to active profile)

Example:

{
  "name": "config_export_to_env",
  "arguments": {
    "profileName": "primary"
  }
}

31. config_add_environment

Add a new environment.

Parameters:

  • name: Environment name (required)

  • description: Environment description (optional)

Example:

{
  "name": "config_add_environment",
  "arguments": {
    "name": "staging",
    "description": "Staging environment for testing"
  }
}

32. config_remove_environment

Remove an environment.

Parameters:

  • name: Name of the environment to remove (required)

Example:

{
  "name": "config_remove_environment",
  "arguments": {
    "name": "old-environment"
  }
}

Available Resources

1. zoho://crm/modules

Returns all available CRM modules and their configurations.

2. zoho://books/organizations

Returns Books organization information.

Usage Examples

Claude Desktop Integration

Once configured, you can use the server with Claude Desktop:

@zoho-crm-books sync_accounts_to_customers with limit 10

@zoho-crm-books create_invoice_from_deal for deal ID 123456789

@zoho-crm-books search_records in accounts for "technology"

Programming Interface

You can also use the server programmatically:

import { ZohoMCPServer } from './src/server';

const server = new ZohoMCPServer();
await server.start();

Error Handling

The server includes comprehensive error handling:

  • Authentication Errors: Automatic token refresh on 401 errors

  • Rate Limiting: Exponential backoff on 429 errors

  • Validation Errors: Input validation with detailed error messages

  • Network Errors: Retry logic with configurable timeouts

Monitoring and Logging

The server includes built-in monitoring:

  • Request/response logging

  • Performance metrics

  • Error tracking

  • Health checks

Security

  • OAuth 2.0 token-based authentication

  • Secure token storage and refresh

  • Input validation and sanitization

  • Rate limiting protection

  • HTTPS enforcement

Development

Project Structure

src/
├── auth/               # OAuth authentication
├── clients/            # API clients (CRM, Books)
├── tools/              # MCP tools implementation
├── resources/          # MCP resources implementation
├── types/              # TypeScript type definitions
└── server.ts           # Main server implementation

Testing

Run tests with:

npm test

Linting

npm run lint

Formatting

npm run format

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests

  5. Submit a pull request

License

MIT License - see LICENSE file for details.

Support

For issues and questions:

  • Create an issue on GitHub

  • Check the Zoho API documentation

  • Review the MCP specification

Changelog

v1.0.0

  • Initial release

  • CRM and Books integration

  • OAuth 2.0 authentication

  • Basic sync functionality

  • MCP server implementation

Available Tools

151 tools
analyze_custom_moduleB

Analyze any CRM module with statistical breakdown by field values. Perfect for generating reports, understanding data distribution, and identifying patterns.

Workflow: First use crm_get_all_modules to discover available modules, then get_custom_module_records to explore data, finally analyze_custom_module for insights

Inputs: module_name (required), breakdown_field (required), page, date_to, +5 more.

analyze_module_fieldC

Perform statistical analysis on any field in any module

Inputs: field_name (required), module_name (required), analysis_type (required), group_by_field.

books_add_credit_note_commentC

Add a comment to a credit note

Inputs: description (required), creditnote_id (required), show_comment_to_clients.

books_apply_credit_note_to_invoiceD

Apply a credit note to an invoice

Inputs: invoice_id (required), creditnote_id (required), amount_applied (required).

books_approve_purchase_orderC

Approve a purchase order

Inputs: purchase_order_id (required).

books_bulk_export_billsD

Export bills in bulk

Inputs: export_type (required), status, date_to, date_from, +3 more.

books_bulk_export_credit_notesC

Export credit notes in bulk

Inputs: export_type (required), status, date_to, date_from, +3 more.

books_bulk_export_purchase_ordersC

Export purchase orders in bulk

Inputs: export_type (required), status, date_to, date_from, +3 more.

books_bulk_print_billsC

Print bills in bulk

Inputs: bill_ids (required), orientation, template_id.

books_bulk_print_credit_notesC

Print credit notes in bulk

Inputs: creditnote_ids (required), orientation, template_id.

books_bulk_print_purchase_ordersC

Print purchase orders in bulk

Inputs: purchaseorder_ids (required), orientation, template_id.

books_cancel_purchase_orderC

Cancel a purchase order

Inputs: purchase_order_id (required).

books_convert_credit_note_to_openC

Convert a credit note to open status

Inputs: creditnote_id (required).

books_convert_estimate_to_invoiceC

Convert a Books estimate to an invoice

Inputs: estimate_id (required).

books_create_billC

Create a new bill in Books

Inputs: vendor_id (required), line_items (required), date, notes, +16 more.

books_create_credit_noteC

Create a new credit note in Books

Inputs: line_items (required), customer_id (required), date, notes, +19 more.

books_create_customerC

Create a new customer in Books

Inputs: contact_name (required), notes, gst_no, tax_id, +18 more.

books_create_estimateC

Create a new estimate in Books

Inputs: line_items (required), customer_id (required), notes, terms, +5 more.

books_create_invoiceA

Create a new invoice in Books for billing customers. KEY FINANCIAL OPERATION in the Books workflow.\n\nPrerequisites:\n→ Use books_get_customers first to find target customer\n→ Use books_get_items to discover available products/services for line items\n→ Have valid customer_id from customer discovery\n\nNext Steps:\n→ Use books_create_payment to record payment against the invoice\n→ Use books_get_invoice to verify invoice creation\n→ Use invoice_id for payment tracking and reporting\n\nComplete Billing Workflow: books_get_customers → books_get_items → books_create_invoice → books_create_payment\n\nError Recovery: If creation fails, verify customer_id exists and line_items are properly formatted

Inputs: line_items (required), customer_id (required), notes, terms, +16 more.

books_create_itemA

Create a new product or service item in Books inventory. Use for adding products to sell, services to offer, or items to include in invoices.

Example: Create service item {"name": "Consulting Services", "description": "Business consulting", "rate": 150, "unit": "hrs", "item_type": "sales"}

Inputs: name (required), sku, rate, unit, +5 more.

books_create_paymentA

Create a payment in Books to apply against specific invoices. First use books_get_invoices to find invoice IDs and amounts, then create payment to apply against those invoices.

Example workflow:

  1. books_get_invoices({customer_id: "123"}) // Find unpaid invoices

  2. books_create_payment({customer_id: "123", amount: 1000, invoices: [{invoice_id: "inv-456", amount_applied: 1000}]})

Inputs: date (required), amount (required), invoices (required), customer_id (required), +6 more.

books_create_purchase_orderC

Create a new purchase order in Books

Inputs: vendor_id (required), line_items (required), date, notes, +17 more.

books_delete_billC

Delete a bill from Books

Inputs: bill_id (required).

books_delete_credit_noteC

Delete a credit note from Books

Inputs: creditnote_id (required).

books_delete_customerB

Delete a customer from Books

Inputs: customer_id (required).

books_delete_invoiceB
DestructiveIdempotent

Delete an invoice from Books

Inputs: invoice_id (required).

books_delete_itemC

Delete an item from Books

Inputs: item_id (required).

books_delete_purchase_orderC

Delete a purchase order from Books

Inputs: purchase_order_id (required).

books_email_credit_noteC

Email a credit note

Inputs: to_mail_ids (required), creditnote_id (required), body, subject, +3 more.

books_email_purchase_orderC

Email a purchase order

Inputs: to_mail_ids (required), purchase_order_id (required), body, subject, +2 more.

books_get_billA

Get a specific bill from Books by ID

Inputs: bill_id (required).

books_get_bill_paymentsC

Get payments for a bill

Inputs: bill_id (required), page, per_page.

books_get_billsC

Get all bills from Books

Inputs: page, status, date_to, per_page, +8 more.

books_get_credit_noteB

Get a specific credit note from Books by ID

Inputs: creditnote_id (required).

books_get_credit_note_commentsC

Get comments for a credit note

Inputs: creditnote_id (required).

books_get_credit_note_refundsC

Get refunds for a credit note

Inputs: creditnote_id (required), page, per_page.

books_get_credit_notesC

Get all credit notes from Books

Inputs: page, status, date_to, per_page, +9 more.

books_get_customerA

Get detailed information for a specific customer from Books by ID. Returns complete customer profile including contact details, billing/shipping addresses, and account status.

Related tools: books_get_customers (to find IDs), books_create_invoice (to bill customer), books_create_payment (to record payments)

Inputs: customer_id (required).

books_get_customersA

Get customer list from Books with filtering and pagination. WORKFLOW STARTER for Books financial operations.\n\nPrerequisites: Books access with customer management permissions\n\nNext Steps:\n→ Use books_get_customer for detailed customer information\n→ Use customer_id in books_create_invoice for billing\n→ Use customer_id in books_create_payment for payment processing\n\nCommon Financial Workflow: books_get_customers → books_get_customer → books_create_invoice → books_create_payment\n\nExample: Find customers by name\n{"search_text": "John", "per_page": 10}\n\nError Recovery: If no customers found, verify search filters and Books access permissions

Inputs: page, email, phone, address, +11 more.

books_get_estimatesC

Get all estimates from Books

Inputs: page, status, per_page, filter_by, +4 more.

books_get_invoiceB

Get a specific invoice from Books by ID

Inputs: invoice_id (required).

books_get_invoice_pdfB

Get an invoice as PDF

Inputs: invoice_id (required).

books_get_invoicesA

Get invoices from Books with filtering and pagination. Use to find invoices for payments, get invoice details, or browse invoice history.

Related tools: books_create_invoice (to create), books_create_payment (to pay), books_get_customer (customer details)

Inputs: page, status, per_page, filter_by, +4 more.

books_get_itemA

Get a specific item from Books by ID

Inputs: item_id (required).

books_get_itemsA

Get all items from Books including products and services available for billing. ESSENTIAL for invoice line items.\n\nPrerequisites: Books access with inventory management permissions\n\nNext Steps:\n→ Use item_id and details for books_create_invoice line items\n→ Use books_get_item for detailed item information\n→ Use books_create_item to add new products/services\n\nInventory to Billing Workflow: books_get_items → books_create_invoice (with line items) → books_create_payment\n\nError Recovery: If no items found, verify Books inventory setup and permissions

Inputs: page, per_page, filter_by, sort_order, +2 more.

books_get_paymentsC

Get all payments from Books

Inputs: page, per_page, filter_by, sort_order, +3 more.

books_get_purchase_orderA

Get a specific purchase order from Books by ID

Inputs: purchase_order_id (required).

books_get_purchase_ordersC

Get all purchase orders from Books

Inputs: page, status, date_to, per_page, +8 more.

books_get_sales_ordersA

Get all sales orders from Books with filtering and pagination\n\nPrerequisites: Books access with sales order read permissions\nNext Steps: Use books_create_invoice to convert sales orders to invoices\nWorkflow: Sales order management → invoice conversion → payment tracking\nError Recovery: If no sales orders found, verify Books access and search filters

Inputs: page, status, date_to, per_page, +7 more.

books_mark_bill_as_openC

Mark a bill as open

Inputs: bill_id (required).

books_mark_bill_as_paidC

Mark a bill as paid

Inputs: bill_id (required).

books_mark_purchase_order_as_billedB

Mark a purchase order as billed

Inputs: purchase_order_id (required).

books_mark_purchase_order_as_openC

Mark a purchase order as open

Inputs: purchase_order_id (required).

books_record_bill_paymentC

Record a payment for a bill

Inputs: date (required), amount (required), bill_id (required), payment_mode (required), +4 more.

books_refund_credit_noteC

Create a refund for a credit note

Inputs: date (required), amount (required), refund_mode (required), creditnote_id (required), +4 more.

books_send_invoice_emailC

Send an invoice via email

Inputs: invoice_id (required), to_mail_ids (required), body, subject.

books_submit_purchase_order_for_approvalC

Submit a purchase order for approval

Inputs: purchase_order_id (required).

books_update_billC

Update an existing bill in Books

Inputs: bill_id (required), date, notes, terms, +17 more.

books_update_credit_noteC

Update an existing credit note in Books

Inputs: creditnote_id (required), date, notes, terms, +20 more.

books_update_customerC

Update an existing customer in Books

Inputs: customer_id (required), notes, tax_id, website, +8 more.

books_update_invoiceC

Update an existing invoice in Books

Inputs: invoice_id (required), notes, terms, discount, +17 more.

books_update_itemC

Update an existing item in Books

Inputs: item_id (required), sku, name, rate, +6 more.

books_update_purchase_orderC

Update an existing purchase order in Books

Inputs: purchase_order_id (required), date, notes, terms, +18 more.

books_void_billC

Void a bill

Inputs: bill_id (required).

books_void_credit_noteC

Void a credit note

Inputs: creditnote_id (required).

config_add_environmentC

Add a new environment

Inputs: name (required), description.

config_add_profileB

Add a new profile to the current environment

Inputs: name (required), scopes (required), clientId (required), dataCenter (required), +5 more.

config_export_to_envB

Export current configuration to .env format

Inputs: profileName.

config_get_statusD

Get current configuration status

Inputs: no named parameters.

config_list_environmentsA

List all available environments

Inputs: no named parameters.

config_list_profilesA

List all profiles in the current environment

Inputs: no named parameters.

config_remove_environmentB

Remove an environment

Inputs: name (required).

config_remove_profileB

Remove a profile from the current environment

Inputs: profileName (required).

config_switch_environmentC

Switch to a different environment

Inputs: environmentName (required).

config_switch_profileA

Switch to a different profile within the current environment

Inputs: profileName (required).

config_update_profileC

Update an existing profile

Inputs: updates (required), profileName (required).

create_invoice_from_dealA

Create a Books invoice from a CRM deal. Automatically transfers deal information, products, and pricing to create a professional invoice.

Workflow: CRM deal → Books invoice → books_send_invoice_email → books_create_payment (when paid)

Inputs: deal_id (required), due_date, send_email, customer_id, +2 more.

crm_analyze_activity_patternsA

Analyze activity patterns and trends in CRM data - business intelligence for user behavior\n\nPrerequisites: Use crm_search_by_timeline to identify activity periods\nNext Steps: Generate insights reports → Optimize workflows → User performance analysis\nBusiness Value: Team productivity analysis, workflow optimization, trend identification\nError Recovery: If insufficient data, try broader date range or different grouping

Inputs: date_from (required), module_name (required), date_to, group_by, +1 more.

crm_analyze_module_permissionsC

Analyze module permissions and accessibility

Inputs: module_name (required).

crm_analyze_picklist_dependenciesB

Analyze picklist dependencies and relationships in a module. Identifies field dependencies, picklist chains, and relationship patterns.

Inputs: module_name (required).

crm_create_eventD

Create a new event in CRM

Inputs: Subject (required), End_DateTime (required), Start_DateTime (required), Who_Id, +8 more.

crm_create_noteC

Create a new note for a CRM record

Inputs: module (required), record_id (required), Note_Title (required), Note_Content (required), +1 more.

crm_create_profileC

Create a new profile

Inputs: profile_data (required).

crm_create_roleC

Create a new role

Inputs: role_data (required).

crm_create_taskA

Create a task in CRM linked to accounts, contacts, or deals. Tasks can have due dates, priorities, and reminders for follow-up activities.

Example: Create follow-up task {"Subject": "Follow up on proposal", "Due_Date": "2024-12-31", "Priority": "High", "What_Id": "deal-123", "Who_Id": "contact-456"}

Inputs: Subject (required), Status, Who_Id, What_Id, +6 more.

crm_create_userC

Create a new user

Inputs: user_data (required).

crm_delete_roleC

Delete a role

Inputs: role_id (required).

crm_extract_complete_picklist_hierarchyA

Extract complete picklist hierarchy with dependencies in one optimized call - reduces multiple API calls to single request

Inputs: module_name (required), field_pattern, output_format, include_dependencies.

crm_get_all_currenciesB

Get all currencies

Inputs: no named parameters.

crm_get_all_modulesA

Get all CRM modules with metadata\n\nWORKFLOW STARTER for CRM module discovery\n\nNext Steps: Use crm_get_fields for field discovery → crm_validate_criteria → crm_search_records\nPagination: Use page and per_page to limit response size and avoid token limits\nError Recovery: If response too large, use smaller per_page values (try 10-20)

Inputs: page, per_page, include_custom_modules, include_system_modules.

crm_get_all_profilesA

Get all profiles in the organization

Prerequisites: None - this is a discovery tool for organizational structure Next Steps: Use crm_get_user_details for users associated with specific profiles → crm_get_all_roles to understand role hierarchy → crm_update_profile for permission modifications Common Pattern: Profile discovery → User-profile analysis → Permission management workflow Error Recovery: If API fails, verify organization access permissions and try crm_get_organization_details first

Inputs: no named parameters.

crm_get_all_rolesA

Get all roles in the organization

Prerequisites: Use crm_get_all_profiles first to understand profile-role relationships Next Steps: Use crm_get_role_details for specific role analysis → crm_get_all_users to see role assignments → crm_update_role for modifications Common Pattern: Role discovery → Role detail analysis → User assignment review → Role management Error Recovery: If role list is empty, check organization setup with crm_get_organization_details → verify user permissions

Inputs: no named parameters.

crm_get_all_territoriesA

Get all territories

Inputs: no named parameters.

crm_get_all_usersA

Get all users in the organization with optional type filtering (AllUsers, AdminUsers, etc.)

Prerequisites: Use crm_get_all_profiles and crm_get_all_roles first for context Next Steps: Use crm_get_user_details for specific user analysis → crm_get_organization_details for user limits → crm_create_user for new users Common Pattern: User discovery → Individual user analysis → Role/profile assignment → User management operations Error Recovery: If user list incomplete, try different type filters → check organization user limits → verify API permissions

Inputs: type.

crm_get_assignment_rulesC

Get assignment rules

Inputs: no named parameters.

crm_get_attachmentsC

Get attachments for a CRM record

Inputs: module (required), record_id (required), page, per_page.

crm_get_blueprint_metadataC

Get blueprint metadata

Inputs: no named parameters.

crm_get_complete_disposition_dataC

Get complete disposition data including all Global Set values and dependent fields

Inputs: module_name (required), include_dependent_fields.

crm_get_complete_module_configurationA

Get complete module configuration including fields, layouts, custom views, and related lists

Inputs: module_name (required).

crm_get_custom_view_detailsA

Get detailed metadata for a specific custom view including criteria, fields, and sorting

Prerequisites: Use crm_get_custom_views to identify target custom_view_id Next Steps: Use crm_search_records with view criteria → crm_get_fields for field analysis → crm_update_custom_view for modifications Common Pattern: View identification → View configuration analysis → Record retrieval with view → View optimization Error Recovery: If view_id not found, refresh with crm_get_custom_views → verify view still exists → check view permissions

Inputs: module_name (required), custom_view_id (required).

crm_get_custom_viewsA

Get all custom views for a module including system and user-defined views

Prerequisites: Use crm_get_all_modules to verify module_name exists and is accessible Next Steps: Use crm_get_custom_view_details for specific view analysis → crm_search_records with view filters → crm_create_custom_view for new views Common Pattern: Module discovery → View listing → View analysis → Record filtering with views → View management Error Recovery: If no views found, verify module_name spelling → check module permissions → try crm_get_module_metadata first

Inputs: module_name (required).

crm_get_dependent_fieldsB

Get fields that depend on a specific field in a module. Useful for understanding field relationships and dependencies.

Inputs: field_name (required), module_name (required).

crm_get_eventsA

Get calendar events from CRM with filtering and pagination. Use for viewing meetings, appointments, and scheduled activities.

Related tools: crm_create_event (to schedule), crm_create_task (for follow-ups), crm_get_notes (meeting notes)

Inputs: page, sort_by, end_date, per_page, +2 more.

crm_get_field_changesA

Track field change history for records - detailed audit of specific field modifications\n\nPrerequisites: Use crm_search_records or crm_search_by_timeline to find target records\nNext Steps: Use crm_analyze_activity_patterns for trend analysis → Generate change reports\nBusiness Value: Compliance tracking, change audit, data quality monitoring\nError Recovery: If no changes found, verify field names and date range

Inputs: date_from (required), module_name (required), date_to, per_page, +2 more.

crm_get_field_detailsA

Get detailed metadata for a specific field including data type, validation rules, picklist values, and dependencies.\n\nPrerequisites:\n→ Use crm_get_fields or crm_get_module_fields first to discover available field names\n→ Have valid module_name and field_name from field discovery\n\nNext Steps:\n→ Use field details for crm_validate_criteria to ensure correct operators\n→ Use crm_get_dependent_fields to understand field relationships\n→ Use field information in crm_search_records criteria\n\nCommon Pattern: crm_get_fields → crm_get_field_details → crm_validate_criteria → crm_search_records\n\nError Recovery: If "Field not found" error, verify field_name with crm_get_fields

Inputs: field_id (required), module_name (required).

crm_get_field_relationshipsB

Get all field relationships and dependencies in a module. Provides comprehensive analysis of field connections.

Inputs: module_name (required).

crm_get_global_fieldsA

Get global fields across all modules (global picklists and lookups)

Inputs: no named parameters.

crm_get_global_set_valuesB

Get Global Set values by name - specifically for extracting complete disposition data

Inputs: global_set_name (required), include_metadata.

crm_get_layout_detailsA

Get detailed metadata for a specific layout including sections, fields, and display rules.\n\nPrerequisites:\n→ Use crm_get_layouts first to discover available layout IDs\n→ Have valid layout_id from layout discovery\n\nNext Steps:\n→ Use layout details for UI customization analysis\n→ Use crm_update_layout to modify layout configuration\n→ Use section information for field organization workflows\n\nCommon Pattern: crm_get_layouts → crm_get_layout_details → crm_update_layout\n\nError Recovery: If "Layout not found" error, verify layout_id with crm_get_layouts

Inputs: layout_id (required).

crm_get_layoutsA

Get all layouts for modules including page layouts, related lists, and section configurations.\n\nPrerequisites: Use crm_get_all_modules first to discover available modules\n\nNext Steps:\n→ Use crm_get_layout_details for specific layout configuration analysis\n→ Use layout information for UI customization workflows\n→ Use crm_update_layout if modifications are needed\n\nCommon Pattern: crm_get_all_modules → crm_get_layouts → crm_get_layout_details → crm_update_layout\n\nError Recovery: If no layouts found, check module permissions and layout availability

Inputs: module_name.

crm_get_metadata_summaryB

Get comprehensive metadata summary for the entire CRM

Inputs: no named parameters.

crm_get_module_detailsC

Get detailed metadata for a specific module

Inputs: module_name (required).

crm_get_module_fieldsA

Get fields for a module with pagination and filtering to avoid large responses

Inputs: module_name (required), page, per_page, field_type, +1 more.

crm_get_notesC

Get notes for a specific CRM record

Inputs: module (required), record_id (required), page, per_page.

crm_get_organization_detailsA

Get organization details and settings including configuration, limits, and administrative info

Prerequisites: None - foundational tool for understanding organizational context Next Steps: Use crm_get_organization_features for feature analysis → crm_get_all_users for user management → crm_get_all_modules for system scope Common Pattern: Organization discovery → Feature assessment → User/module analysis → Configuration management Error Recovery: If details unavailable, verify API credentials → check admin permissions → try crm_get_organization_features as alternative

Inputs: no named parameters.

crm_get_organization_featuresA

Get organization features and limits including API limits, storage, user counts, and enabled features

Prerequisites: Use crm_get_organization_details first for general context Next Steps: Use crm_get_all_users to verify user count against limits → crm_get_all_modules to check feature availability → plan capacity management Common Pattern: Organization assessment → Feature availability check → Capacity planning → Usage optimization Error Recovery: If features not accessible, verify admin permissions → try crm_get_organization_details → check API rate limits

Inputs: no named parameters.

crm_get_picklist_fieldsA

Get only picklist fields for a specific module - optimized for finding disposition/status fields

Inputs: module_name (required).

crm_get_picklist_valuesA

Get picklist values for a specific field in a module including active, inactive values and display labels.\n\nPrerequisites:\n→ Use crm_get_fields first to identify picklist fields\n→ Have valid module_name and field_name from field discovery\n\nNext Steps:\n→ Use picklist values for crm_validate_criteria with exact value matching\n→ Use values in crm_search_records criteria for filtering\n→ Use for data validation and form building workflows\n\nCommon Pattern: crm_get_fields (identify picklists) → crm_get_picklist_values → crm_search_records (with values)\n\nData Validation: Essential for ensuring accurate search criteria and data entry\nError Recovery: If "Field not found" or "Not a picklist", verify field details with crm_get_fields

Inputs: field_name (required), module_name (required).

crm_get_pipeline_metadataC

Get pipeline metadata

Inputs: no named parameters.

crm_get_role_detailsA

Get detailed metadata for a specific role including permissions and hierarchy

Prerequisites: Use crm_get_all_roles to identify target role_id Next Steps: Use crm_get_all_users with role filter → crm_get_all_profiles to see profile associations → crm_update_role for permission changes Common Pattern: Role identification → Detailed role analysis → User impact assessment → Role modification workflow Error Recovery: If role_id not found, refresh with crm_get_all_roles → verify role still exists → check access permissions

Inputs: role_id (required).

crm_get_tasksC

Get all tasks from CRM

Inputs: page, status, sort_by, due_date, +2 more.

crm_get_timelineA

Get timeline history for a CRM record showing all field changes, activities, and audit trail\n\nPrerequisites: Use crm_search_records to find target record_id\nNext Steps: Use crm_analyze_activity_patterns for trend analysis → crm_get_field_changes for specific field tracking\nComplete Workflow: crm_search_records → crm_get_timeline → analysis\nError Recovery: If timeline empty, verify record_id exists and has activity history

Inputs: record_id (required), module_name (required), page, per_page, +2 more.

crm_get_user_detailsA

Get detailed metadata for a specific user including roles, profiles, and permissions

Prerequisites: Use crm_get_all_users to identify target user_id Next Steps: Use crm_get_role_details for user's role analysis → crm_get_all_profiles for profile permissions → crm_update_user for modifications Common Pattern: User identification → Detailed user analysis → Permission audit → User configuration changes Error Recovery: If user_id not found, refresh with crm_get_all_users → verify user still active → check access to user data

Inputs: user_id (required).

crm_search_by_timelineA

Search records by timeline events - find records modified within date ranges\n\nPrerequisites: None - timeline-based discovery tool\nNext Steps: Use crm_get_timeline for detailed analysis → crm_get_field_changes for specific tracking\nUse Cases: Recent activity analysis, audit trails, change tracking\nError Recovery: If no results, try broader date range or different action types

Inputs: date_from (required), module_name (required), page, action, +3 more.

crm_search_fieldsA

Search fields by name pattern - use to find specific fields like "disposition" or "status"

Inputs: module_name (required), search_term (required).

crm_send_emailC

Send email for a CRM record

Inputs: to (required), module (required), content (required), subject (required), +5 more.

crm_smart_field_discoveryB

Smart field discovery - finds fields based on intent with optimized response format to reduce tokens and iterations

Inputs: intent (required), module_name (required), format, max_results, +1 more.

crm_update_layoutC

Update layout configuration

Inputs: layout_id (required), layout_data (required).

crm_update_profileC

Update profile permissions

Inputs: profile_id (required), profile_data (required).

crm_update_roleC

Update role details

Inputs: role_id (required), role_data (required).

desk_get_all_departmentsA

Get all departments in Zoho Desk with supported entity types and configuration\n\nPrerequisites: Zoho Desk access with department read permissions\nNext Steps: Use desk_get_entity_fields for entity analysis → desk_search_entities for records\nWorkflow: Department discovery → entity field analysis → ticket/contact operations\nError Recovery: If departments not accessible, verify Desk product access and permissions

Inputs: no named parameters.

desk_get_entity_fieldsA

Get field metadata for a specific entity type in a Desk department\n\nPrerequisites: Department ID from desk_get_all_departments\nNext Steps: Use field details for desk_search_entities criteria and filtering\nCommon Entities: tickets, contacts, accounts, agents, products\nError Recovery: If fields not found, verify department and entity type are valid

Inputs: entity_type (required), department_id (required).

desk_get_entity_timelineA

Get timeline/activity history for a specific Desk entity record\n\nPrerequisites: Department ID, entity type, and record ID from desk_search_entities\nNext Steps: Analyze timeline for support patterns, escalations, and resolution tracking\nUse Cases: Ticket lifecycle analysis, customer interaction history, agent performance\nError Recovery: If timeline empty, verify record exists and has activity history

Inputs: record_id (required), entity_type (required), department_id (required), from, +2 more.

desk_search_entitiesA

Search entities in a Desk department with flexible filtering and pagination\n\nPrerequisites: Department ID and entity type, optional field details for targeted searches\nNext Steps: Use desk_get_entity_timeline for record activity history\nCommon Patterns: Ticket management, contact lookup, account discovery\nError Recovery: If no results, broaden search criteria or check entity permissions

Inputs: entity_type (required), department_id (required), from, email, +9 more.

get_custom_module_recordsA

Get records from any custom module with flexible filtering

Inputs: module_name (required), page, fields, per_page, +2 more.

get_smart_queriesA

Get all available smart query builders across Zoho products. Smart queries are pre-built, business-focused workflows that combine multiple tools to solve common business scenarios.\n\nCategories Available: sales, marketing, finance, hr, support, analytics\n\nProducts Covered: CRM (sales intelligence), Books (financial analysis), People (HR insights), Desk (support optimization)\n\nExample: Get all sales-focused queries\n{"category": "sales"}

Inputs: product, category.

get_smart_query_planA

Get detailed execution plan for a specific smart query. Shows the complete tool sequence, parameters, and expected outcomes for business intelligence workflows.\n\nPrerequisites: Use get_smart_queries first to discover available query names\n\nNext Steps: Execute the returned tool sequence manually or use as guidance for complex analysis workflows\n\nExample: Get plan for "Hot Leads Pipeline Analysis"\n{"query_name": "Hot Leads Pipeline Analysis"}

Inputs: query_name (required).

list_available_categoriesA

List all available tool categories. Use this to understand the organization of tools and find the right category for your task.

Inputs: no named parameters.

list_business_scenariosA

List common business scenarios and their recommended smart query solutions. Perfect for discovering workflow automation opportunities.\n\nBusiness Areas: Sales forecasting, Customer retention, Cash flow optimization, Employee performance, Support efficiency\n\nOutput: Curated list of business scenarios with matching smart queries and expected ROI\n\nExample: {}

Inputs: no named parameters.

list_tool_categoriesA

Get organized list of all tool categories with descriptions. Perfect starting point for LLMs to understand available functionality.

Inputs: no named parameters.

list_tools_by_categoryA

List all available tools grouped by category. Use this to discover tools for specific tasks like customer management, invoice processing, or CRM activities.

Example: List all customer management tools {"category": "Books - Customer Management"}

Inputs: category.

people_get_all_modulesA
Read-onlyIdempotent

Get all available Zoho People modules (Employees, Departments, Attendance, etc.)\n\nPrerequisites: Zoho People access with module read permissions\nNext Steps: Use people_get_fields for module field discovery → people_search_records for data retrieval\nWorkflow: Module discovery → field analysis → record operations\nError Recovery: If modules not accessible, verify People product access and API permissions

Inputs: no named parameters.

people_get_fieldsA
Read-onlyIdempotent

Get field metadata for a specific People module with detailed schema information\n\nPrerequisites: Module name from people_get_all_modules\nNext Steps: Use field api_name values in people_search_records operations\nCommon Pattern: Module discovery → field analysis → targeted searches\nError Recovery: If fields not found, verify module exists and check field access permissions

Inputs: module_name (required), field_id.

people_get_timelineA

Get timeline/activity history for a People record including status changes and updates\n\nPrerequisites: Record ID from people_search_records\nNext Steps: Use timeline data for audit trails and activity analysis\nUse Cases: Employee activity tracking, change auditing, compliance monitoring\nError Recovery: If timeline empty, verify record has activity history and timeline permissions

Inputs: record_id (required), module_name (required), page, per_page, +2 more.

people_search_recordsA
Read-onlyIdempotent

Search records in a People module with flexible text-based criteria\n\nPrerequisites: Module name from people_get_all_modules, optional field details from people_get_fields\nNext Steps: Use people_get_timeline for record activity analysis\nUse Cases: Employee lookup, department searches, attendance tracking\nError Recovery: If no results, try broader search terms or verify module permissions

Inputs: criteria (required), module_name (required), page, fields, +1 more.

search_recordsA

Search across CRM and Books records using flexible criteria. Use for finding specific records by name, email, phone, or other fields.

Example: Search for contacts {"module": "contacts", "criteria": "john@example.com", "fields": ["id", "Full_Name", "Email"]}

Inputs: module (required), criteria (required), page, fields, +1 more.

sync_accounts_to_customersA

Sync CRM accounts to Books customers (CRM → Books direction). Creates or updates customer records in Books based on account data from CRM.

Example: Sync 50 accounts {"source_module": "accounts", "target_module": "customers", "filters": {"limit": 50}}

Inputs: source_module (required), target_module (required), filters.

sync_contacts_to_customersA

Sync CRM contacts to Books customers (CRM → Books direction). Creates or updates customer records in Books based on contact data from CRM.

Workflow: Typically run after CRM data updates. Follow with books_get_customers to verify sync results

Inputs: source_module (required), target_module (required), filters.

sync_customers_to_contactsA

Sync Books customers to CRM contacts (Books → CRM direction). Creates or updates contact records in CRM based on customer data from Books.

Inputs: source_module (required), target_module (required), filters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.4/5.0

    Scored across 151 tools

    Disambiguation2/5

    Many tools have overlapping purposes, especially in field discovery and analysis (e.g., crm_get_picklist_fields, crm_get_picklist_values, crm_analyze_picklist_dependencies, crm_extract_complete_picklist_hierarchy) and category listing (list_tool_categories, list_tools_by_category, list_available_categories). This overlap would confuse an agent trying to select the correct tool.

    Naming Consistency2/5

    While many tools follow a 'prefix_verb_noun' pattern, there are significant deviations: some tools lack prefixes (search_records, create_invoice_from_deal), some use 'get_all' vs 'list' (crm_get_all_modules vs config_list_environments), and there are inconsistent abbreviations ('env' vs 'environment'). The redundant category listing tools also use inconsistent names.

    Tool Count1/5

    With 151 tools, this server is extremely over-scoped for an agent to navigate effectively. Even for a multi-product integration (CRM, Books, People, Desk, config), the number of tools is excessive and includes many near-duplicate and overly granular operations (bulk print/export, comments, etc.), making it unwieldy.

    Completeness3/5

    The tool set covers a broad range of CRM and Books operations, including CRUD for customers, items, invoices, and bills, plus sync and analysis tools. However, there are notable gaps: no update/delete for estimates, no create/update/delete for sales orders, and limited write operations for CRM tasks/events (e.g., no update/delete for tasks or events).

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol server that integrates AI assistants with Zoho CRM, enabling contact and deal management operations through natural language.
      3
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      MCP server for Zoho Books integration, enabling AI agents to perform bookkeeping operations like managing journals, expenses, bills, invoices, and file attachments.
      49
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A standalone MCP server that integrates with Twenty CRM to provide AI-powered CRM capabilities, enabling CRUD operations and real-time synchronization.
      164 npm
      MIT