MCP (Model Context Protocol) server for Harvest Time Tracking.
Server has 12 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-50 chars, mostly short), and input schemas are present with type definitions. However, descriptions are generic and lack actionable context for LLM selection. Parameter descriptions are minimal. Output schemas are not documented. No error handling guidance. No tool annotations (readOnlyHint/destructiveHint). Tool naming follows verb_noun convention (search-, get-, list-, create-) which is good, but descriptions do not explain WHEN to use each tool or dependencies between them. The single WRITE tool (create-time-entry) lacks confirmation/dry-run pattern. No pagination guidance despite search tools returning lists.
Create a time entry in Harvest Account
Get a client by ID
Get company information
Get a project by ID
Get a time entry in Harvest Account
Get a user by ID
List tasks assigned to a project
Descriptions are too short (10-50 chars) and lack actionable context. 'Search for clients in Harvest Account' does not explain WHEN to use this vs get-client, what fields are returned, or how to handle no results. LLMs cannot reliably select the right tool.
Output schemas are not documented. Tools return lists (search-clients, search-projects, search-time-entries, list-users, list-project-users, list-project-tasks) but no schema shows what fields are in each result, whether pagination is supported, or what IDs are returned for chaining.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
List users assigned to a project
List all users in Harvest Account
Search for clients in Harvest Account
Search for projects in Harvest Account
Search for time entries in Harvest Account
create-time-entry is a destructive WRITE tool with no confirmation, dry-run, or error recovery guidance. No description states that this modifies state or what to do if the call fails. Agents may accidentally create duplicate entries on retry.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. LLMs cannot distinguish safe read-only tools from destructive ones without explicit hints. This is a current MCP spec requirement.
Parameter descriptions are minimal or missing context. E.g., 'ID of the client to get' does not explain format (numeric vs string), whether it's required, or what happens if not found. 'Search for clients by name' does not explain partial vs exact match, case sensitivity, or result limit.