Skip to main content
Glama
zackscriven

ghl-mcp-server-v2

by zackscriven

ghl_project_update_task

Update an existing project task or subtask by ID, including title, body, status, dates, assignees, priority, parent task, and custom fields.

Instructions

PROJECT MANAGEMENT API — hierarchy is spaces -> folders -> lists -> tasks (+ comments, space statuses, recurring tasks). Task batch-get is RBAC-filtered (inaccessible ids are omitted, not errors) and omits embedded subtasks. position is an opaque server-assigned lexorank string; there is no public reorder endpoint. Recurring tasks use owners/contactIds and rruleOptions.intervalType (task create uses assignees/contactId). Task search supports updatedAt filtering/sorting for incremental sync. The docs do not describe what a delete cascades to — treat every delete as destructive. Update A Task Or Subtask Updates a task or subtask by id (title, TipTap body, status, dates, assignees, priority, parentTaskId, custom fields, etc.). Response is { "task": { … } } without embedded subtasks. Endpoint: PATCH /projects/tasks/{taskId} (Version header: v3; source: v3/projects-v3.json) OAuth scopes: projects/tasks.write

Input Schema

NameRequiredDescriptionDefault
bodyYesRequest body (schema carried verbatim from the official OpenAPI spec).
taskIdYesTask id
locationIdNoLocation id. Required for APP channel (`?locationId=`). Ignored for OAuth/PIT (token location is used). Do not send in path, body, or headers.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv2.1.0

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety hints, and the description adds real context beyond them: the response envelope is `{ "task": { … } }` with no embedded subtasks, the OAuth scope `projects/tasks.write` is required, the endpoint/version header is given, and it warns that current-server `position` has no public reorder endpoint (explaining why position is absent from the schema). It stops short of stating whether omitted fields are preserved on a PATCH.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The tool-specific block is well structured with a purpose line, endpoint, and scopes. However, six sentences of API-wide preamble (hierarchy, batch-get RBAC filtering, lexorank, recurring-task field names, search sync, delete cascades) are largely irrelevant to a single task update, and they sit ahead of the actual purpose, so the reader must wade through noise before learning what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a PATCH mutation with a very rich schema, no output schema, and annotations present, the description supplies endpoint, auth scope, response shape, and a nested-subtask caveat. The main remaining gap is PATCH semantics — whether unmentioned fields are left untouched or can be cleared — which an agent needs to call this safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema is unusually detailed (TipTap sanitisation, assignee single-element limit, custom-field key format), so the schema carries the parameter burden. The description only restates the field list at a high level and does not add syntax or constraints beyond what the schema already documents; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The tool-specific section says plainly it "Updates a task or subtask by id" and enumerates the mutable fields (title, TipTap body, status, dates, assignees, priority, parentTaskId, custom fields). That is a specific verb+resource and implicitly separates it from create/get/delete siblings. Sibling differentiation against ghl_project_update_recurring_task or ghl_project_set_task_home_list is never made explicit, and the opening API preamble dilutes the purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the name and the field list; there is no statement of when to prefer this over ghl_project_update_recurring_task (for recurring tasks with owners/rruleOptions), ghl_project_set_task_home_list (moving lists), or ghl_project_batch_tasks. The preamble's recurring-task and lexorank remarks hint at boundaries but never route the agent to an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools