A custom Model Context Protocol (MCP) server for integrating Zoho Inventory with Cursor AI
Significant quality gaps across the board. 14 tools defined, but many lack proper descriptions or have duplicate/overlapping functionality. Tool naming is inconsistent (zoho_* prefix vs bare names like 'search', 'get_item_details'). Parameter descriptions are minimal or absent. No input validation guidance. Error handling is generic. Output schemas are not documented. The server exposes raw API responses without filtering or pagination guidance. Critical security issue: no evidence of secret injection, credentials likely passed as env vars but not validated in tool parameters.
Create a new inventory item
Download an image or document from Zoho Inventory
Get detailed information about a specific item
Search for items in Zoho Inventory
Update the price of an inventory item
Update the stock quantity of an inventory item
Create a new inventory item in Zoho
Duplicate tool definitions: 'zoho_search_items' and 'search' do the same thing; 'zoho_get_item_details' and 'get_item_details' are duplicates; 'zoho_update_item_price' and 'update_item_price' are duplicates. LLMs will waste reasoning cycles deciding between them.
Generic tool names ('search', 'get_item_details') lack domain context. LLMs cannot distinguish them from other MCP servers' tools. Use consistent 'zoho_*' prefix or domain-specific names like 'search_inventory_items'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Get detailed information about a specific item
Get inventory items from Zoho Inventory
Get list of organizations to verify organization ID
Get list of available Zoho Inventory tables/endpoints
Search for items in Zoho Inventory
Update the price of an inventory item in Zoho
Update the stock quantity of an inventory item
No output schemas documented. Handlers return raw JSON strings wrapped in text content type. LLMs cannot parse structured results or plan downstream calls. E.g., 'zoho_get_items' returns JSON.stringify(items) as plain text, not a structured object.
Parameter descriptions are minimal or missing. E.g., 'adjustment_type' in zoho_update_stock has description 'Type of adjustment (set, add, subtract)' but no guidance on when to use each. 'limit' parameters lack min/max bounds. LLMs cannot validate inputs.
No error recovery guidance. Handlers throw generic 'Error fetching items: <message>' without actionable next steps. LLMs cannot distinguish retryable errors from user-fixable ones. E.g., 'Invalid organization_id' should suggest calling zoho_get_organizations first.