Skip to main content
Glama
zackscriven

ghl-mcp-server-v2

by zackscriven

ghl_project_search_tasks

Read-onlyIdempotent

Search project tasks across a location using filters, sorting, free-text queries, and cursor pagination to find and sync work items.

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. Search Tasks Searches tasks across the location with filters, sort, free-text query, and optional subtaskViewMode. Requires limit; pass body searchAfter from the previous response searchAfter (opaque base64url string) for the next page. Scope to lists with listIds (max 10) — do not send a separate graph filter when using listIds. Filter subtasks with parentTaskId (Tasks V2 locations only; otherwise 422). subtaskViewMode=expanded returns embedded subtasks[]; separate may include parentName. Neither field appears on Get/Create/Update/List/Batch. total is the hit count after filters and access scope. Endpoint: POST /projects/tasks/search (Version header: v3; source: v3/projects-v3.json) OAuth scopes: projects/tasks.readonly

Input Schema

NameRequiredDescriptionDefault
bodyYesRequest body (schema carried verbatim from the official OpenAPI spec).
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

A4.1/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: RBAC filtering omits inaccessible ids rather than erroring, embedded subtasks are omitted in batch-get, `position` is an opaque server-assigned lexorank with no reorder endpoint, `total` is the post-RBAC hit count, and `subtasks`/`parentName` are search-only. That is exactly the kind of non-obvious runtime behavior an agent needs before calling.

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 actual tool guidance is well front-loaded, but the opening API-context block (hierarchy, recurring-task field naming, the note that docs don't describe delete cascades) is generic to the whole project API and not needed to call this search tool. Useful content, but the entry is longer than it needs to be for its own job.

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?

With no output schema, the description carries the burden and does reasonably well: it explains `total` semantics, `searchAfter` paging termination, and which fields appear only in search responses. Pagination end-condition and response field caveats are covered; there is room for more on the shape of returned task records.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond it: `searchAfter` must be passed back verbatim and is opaque base64url, `listIds` is capped at 10 and equivalent to one nested graph filter, and `subtaskViewMode=expanded` vs `separate` differ in returned fields. The rest of the body parameters are left entirely to the schema.

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?

States a specific verb and resource ('Searches tasks across the location with filters, sort, free-text query') plus the scope of the search. It implicitly distances itself from ghl_project_batch_tasks and the Get/Create/Update paths, but never names a sibling alternative outright, so the differentiation is inferential rather than explicit.

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

Usage Guidelines4/5

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

Gives concrete conditions: must pass `limit`, pass `searchAfter` from the prior response for paging, scope to lists via `listIds` (max 10) and 'do not send a separate `graph` filter when using `listIds`', and `parentTaskId` only on Tasks V2 (else 422). These are clear when-to-use rules, but it never tells the agent when to prefer a different tool such as list-tasks or batch-tasks.

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