{ "id": "zoho-tasks", "name": "Zoho Tasks", "description": "Zoho Projects task management integration for EU data center", "version": "2.2.0", "author": "Ferenc Szontagh & Zoë", "sdkVersion": 1, "entry": "index.js", "runtime": "quickjs", "permissions": { "allowNetwork": true, "allowStorage": true }, "config": [ { "key": "client_id", "label": "Zoho OAuth Client ID", "required": true, "secret": true }, { "key": "client_secret", "label": "Zoho OAuth Client Secret", "required": true, "secret": true }, { "key": "portal_url", "label": "Zoho Projects Portal URL (e.g. https://projects.zoho.eu/portal/myportal)", "required": false, "secret": false } ], "tools": [ { "name": "zoho_auth", "description": "Authenticate with Zoho Projects (EU). One-time setup exchanges a grant token for refresh+access tokens; status checks current token; resolve_portal picks the portal the plugin operates against.", "parameters": { "oneOf": [ { "type": "object", "properties": { "action": { "const": "setup", "description": "Exchange a Zoho grant_token for refresh + access tokens. Run ONCE." }, "grant_token": { "type": "string", "description": "Grant token from Zoho Developer Console (Self Client → Generate)." } }, "required": ["action", "grant_token"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "status", "description": "Check authentication status and token validity." } }, "required": ["action"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "resolve_portal", "description": "Resolve a portal URL or display name to its numeric portal_id and persist it in plugin config." }, "portal_url": { "type": "string", "description": "Full portal URL or portal name slug." }, "portal_name": { "type": "string", "description": "Portal display name to match." } }, "required": ["action"], "additionalProperties": false } ] } }, { "name": "zoho_project", "description": "Read-only project queries + reference data needed for task authoring (user zpuids, status ids).", "parameters": { "oneOf": [ { "type": "object", "properties": { "action": { "const": "list", "description": "List all accessible projects in the portal." }, "index": { "type": "number", "description": "Page index (default 1)." } }, "required": ["action"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "get", "description": "Get details for a single project." }, "project_id": { "type": "string" } }, "required": ["action", "project_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "users", "description": "List portal users. Returns zpuid, name, email — resolve these before assigning a task owner." }, "user_type": { "type": "string", "description": "active or inactive (optional)." }, "index": { "type": "number", "description": "Page index (default 1)." } }, "required": ["action"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "statuses", "description": "List project-local task status IDs. Required input for zoho_task status_id." }, "project_id": { "type": "string" } }, "required": ["action", "project_id"], "additionalProperties": false } ] } }, { "name": "zoho_task", "description": "Manage tasks. Resolve owner zpuid via zoho_project action=users; resolve status_id via zoho_project action=statuses.", "parameters": { "oneOf": [ { "type": "object", "properties": { "action": { "const": "list", "description": "List tasks in a project with optional filters." }, "project_id": { "type": "string" }, "status": { "type": "string", "description": "all, completed, notcompleted (default all)." }, "priority": { "type": "string", "description": "all, none, low, medium, high." }, "owner": { "type": "string", "description": "all or zpuid." }, "milestone_id": { "type": "string" }, "tasklist_id": { "type": "string" }, "index": { "type": "number", "description": "Page index (default 1)." } }, "required": ["action", "project_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "get", "description": "Get full details of a single task." }, "project_id": { "type": "string" }, "task_id": { "type": "string" } }, "required": ["action", "project_id", "task_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "create", "description": "Create a new task." }, "project_id": { "type": "string" }, "name": { "type": "string", "description": "Task name/title." }, "description": { "type": "string", "description": "HTML allowed." }, "person_responsible": { "type": "string", "description": "Owner zpuid(s), comma-separated." }, "priority": { "type": "string", "description": "none, low, medium, high." }, "start_date": { "type": "string", "description": "MM-DD-YYYY." }, "end_date": { "type": "string", "description": "MM-DD-YYYY." }, "tasklist_id": { "type": "string" }, "milestone_id": { "type": "string" }, "status_id": { "type": "string", "description": "From zoho_project action=statuses." }, "parent_task_id": { "type": "string", "description": "If set, the new task becomes a subtask of this one." }, "billing_type": { "type": "string", "description": "billable, non_billable." }, "percent_complete": { "type": "string", "description": "0-100." } }, "required": ["action", "project_id", "name"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "update", "description": "Modify an existing task." }, "project_id": { "type": "string" }, "task_id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string", "description": "HTML allowed." }, "person_responsible": { "type": "string", "description": "Owner zpuid(s), comma-separated." }, "priority": { "type": "string", "description": "none, low, medium, high." }, "start_date": { "type": "string", "description": "MM-DD-YYYY." }, "end_date": { "type": "string", "description": "MM-DD-YYYY." }, "tasklist_id": { "type": "string" }, "milestone_id": { "type": "string" }, "status_id": { "type": "string" }, "billing_type": { "type": "string" }, "percent_complete": { "type": "string" } }, "required": ["action", "project_id", "task_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "delete", "description": "Delete a task." }, "project_id": { "type": "string" }, "task_id": { "type": "string" } }, "required": ["action", "project_id", "task_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "subtasks", "description": "List subtasks of a given task." }, "project_id": { "type": "string" }, "task_id": { "type": "string" } }, "required": ["action", "project_id", "task_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "my", "description": "Tasks assigned to the authenticated user across all projects." }, "status": { "type": "string", "description": "all, completed, notcompleted." }, "priority": { "type": "string" }, "index": { "type": "number" } }, "required": ["action"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "search", "description": "Keyword search across all projects (or a single project if project_id is set)." }, "query": { "type": "string" }, "project_id": { "type": "string" } }, "required": ["action", "query"], "additionalProperties": false } ] } }, { "name": "zoho_comment", "description": "Manage task comments.", "parameters": { "oneOf": [ { "type": "object", "properties": { "action": { "const": "list", "description": "List comments on a task." }, "project_id": { "type": "string" }, "task_id": { "type": "string" }, "index": { "type": "number" } }, "required": ["action", "project_id", "task_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "add", "description": "Add a comment to a task." }, "project_id": { "type": "string" }, "task_id": { "type": "string" }, "content": { "type": "string", "description": "HTML allowed." } }, "required": ["action", "project_id", "task_id", "content"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "update", "description": "Update an existing comment." }, "project_id": { "type": "string" }, "task_id": { "type": "string" }, "comment_id": { "type": "string" }, "content": { "type": "string", "description": "HTML allowed." } }, "required": ["action", "project_id", "task_id", "comment_id", "content"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "delete", "description": "Delete a comment." }, "project_id": { "type": "string" }, "task_id": { "type": "string" }, "comment_id": { "type": "string" } }, "required": ["action", "project_id", "task_id", "comment_id"], "additionalProperties": false } ] } }, { "name": "zoho_milestone", "description": "Manage project milestones.", "parameters": { "oneOf": [ { "type": "object", "properties": { "action": { "const": "list", "description": "List milestones in a project." }, "project_id": { "type": "string" }, "status": { "type": "string", "description": "internal, external, upcoming, delayed, completed, all." }, "index": { "type": "number" } }, "required": ["action", "project_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "create", "description": "Create a new milestone." }, "project_id": { "type": "string" }, "name": { "type": "string" }, "start_date": { "type": "string", "description": "MM-DD-YYYY." }, "end_date": { "type": "string", "description": "MM-DD-YYYY." }, "owner": { "type": "string", "description": "Owner zpuid." }, "flag": { "type": "string", "description": "internal or external." }, "milestone_type": { "type": "string", "description": "general or custom." } }, "required": ["action", "project_id", "name"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "update", "description": "Update a milestone." }, "project_id": { "type": "string" }, "milestone_id": { "type": "string" }, "name": { "type": "string" }, "start_date": { "type": "string" }, "end_date": { "type": "string" }, "owner": { "type": "string" }, "flag": { "type": "string" }, "status": { "type": "string", "description": "active, archived, completed." } }, "required": ["action", "project_id", "milestone_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "delete", "description": "Delete a milestone." }, "project_id": { "type": "string" }, "milestone_id": { "type": "string" } }, "required": ["action", "project_id", "milestone_id"], "additionalProperties": false } ] } }, { "name": "zoho_tasklist", "description": "Manage tasklists within a project (or list portal-wide).", "parameters": { "oneOf": [ { "type": "object", "properties": { "action": { "const": "list", "description": "List tasklists in a project, or portal-wide if project_id is omitted." }, "project_id": { "type": "string" }, "flag": { "type": "string", "description": "internal or external." }, "index": { "type": "number" } }, "required": ["action"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "get", "description": "Get details of a single tasklist." }, "project_id": { "type": "string" }, "tasklist_id": { "type": "string" } }, "required": ["action", "project_id", "tasklist_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "create", "description": "Create a new tasklist." }, "project_id": { "type": "string" }, "name": { "type": "string" }, "milestone_id": { "type": "string" }, "flag": { "type": "string", "description": "internal or external." }, "status": { "type": "string", "description": "active or archived." } }, "required": ["action", "project_id", "name"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "update", "description": "Update a tasklist." }, "project_id": { "type": "string" }, "tasklist_id": { "type": "string" }, "name": { "type": "string" }, "milestone_id": { "type": "string" }, "flag": { "type": "string" }, "status": { "type": "string" } }, "required": ["action", "project_id", "tasklist_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "delete", "description": "Delete a tasklist." }, "project_id": { "type": "string" }, "tasklist_id": { "type": "string" } }, "required": ["action", "project_id", "tasklist_id"], "additionalProperties": false } ] } }, { "name": "zoho_timesheet", "description": "Manage time log entries against tasks.", "parameters": { "oneOf": [ { "type": "object", "properties": { "action": { "const": "list", "description": "List timesheet entries for a project, optionally filtered by task and date range." }, "project_id": { "type": "string" }, "task_id": { "type": "string", "description": "Filter by task id (optional)." }, "from_date": { "type": "string", "description": "MM-DD-YYYY. Default: 30 days ago." }, "to_date": { "type": "string", "description": "MM-DD-YYYY. Default: today." }, "index": { "type": "number", "description": "Page index (default 1)." } }, "required": ["action", "project_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "create", "description": "Log time against a task." }, "project_id": { "type": "string" }, "task_id": { "type": "string" }, "hours": { "type": "number", "description": "Hours worked (decimals allowed, e.g. 1.5)." }, "minutes": { "type": "number", "description": "Additional minutes (optional)." }, "date": { "type": "string", "description": "MM-DD-YYYY. Default: today." }, "notes": { "type": "string", "description": "Description of the work done." }, "bill_status": { "type": "string", "description": "Billable or Non Billable. Default: Billable." } }, "required": ["action", "project_id", "task_id", "hours"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "update", "description": "Modify an existing time log entry." }, "project_id": { "type": "string" }, "log_id": { "type": "string" }, "hours": { "type": "number" }, "minutes": { "type": "number" }, "date": { "type": "string", "description": "MM-DD-YYYY." }, "notes": { "type": "string" }, "log_name": { "type": "string" }, "bill_status": { "type": "string" } }, "required": ["action", "project_id", "log_id"], "additionalProperties": false }, { "type": "object", "properties": { "action": { "const": "delete", "description": "Delete a time log entry." }, "project_id": { "type": "string" }, "log_id": { "type": "string" } }, "required": ["action", "project_id", "log_id"], "additionalProperties": false } ] } } ], "skills": ["zoho-tasks"] }