Skip to main content
Glama

TimeZest MCP Server

Docker Image License

MCP (Model Context Protocol) server for TimeZest scheduling platform. Enables LLM agents to create and manage technician scheduling requests with PSA integration.

Features

  • 🎯 Flat tool list - every tool listed and callable immediately

  • 📅 Full scheduling lifecycle - create, view, cancel requests

  • 🔗 PSA integration - ConnectWise, Autotask, Halo support

  • 🌍 IANA timezone handling - explicit timezone management

  • 🚀 Dual trigger modes - PSA workflows or booking URLs

  • 🛡️ Gateway-ready - stateless per-request design

  • 🔍 TQL filtering - TimeZest Query Language support

  • ✨ Elicitation support - interactive user prompts

  • 📇 Interactive scheduling-request card (MCP Apps) - timezest_scheduling_get renders as a card in MCP Apps hosts; neutral by default, brandable via window.__BRAND__ injection or MCP_BRAND_* env vars

Related MCP server: OnSched Consumer API MCP Server

Quick Start

docker run -it --rm \
  -e TIMEZEST_API_TOKEN=your-api-token \
  ghcr.io/wyre-ai/timezest-mcp:latest

npm

npm install -g @wyre-ai/timezest-mcp
TIMEZEST_API_TOKEN=your-token timezest-mcp

Configuration

Environment Variable

Required

Description

TIMEZEST_API_TOKEN

Yes

TimeZest API token

MCP_TRANSPORT

No

Transport mode: stdio (default) or http

MCP_HTTP_PORT

No

HTTP port (default: 8080)

AUTH_MODE

No

Set to gateway for WYRE gateway integration

LOG_LEVEL

No

Log level: debug, info (default), warn, error

Tools

Every tool below is listed and callable immediately — there is no domain to enter first. The groupings are documentation only.

Upgrading from 2.x? timezest_navigate and timezest_back are gone. Nothing replaces them: call the domain tools directly, because they are all listed up front now. A client that used to call timezest_navigate({domain: "agents"}) and then timezest_agents_list should just call timezest_agents_list — likewise timezest_scheduling_list and the rest. timezest_status still works and now reports the available tools instead of a menu to enter.

Status

  • timezest_status - Show connection status and the available tools

Agents

  • timezest_agents_list - List individual technicians

  • timezest_agents_get - Get agent details

Teams

  • timezest_teams_list - List teams (round-robin scheduling)

  • timezest_teams_get - Get team details

Appointment Types

  • timezest_appointment_types_list - List available service types

  • timezest_appointment_types_get - Get appointment type details

Resources

  • timezest_resources_list - List all resources (agents + teams)

Scheduling (Core Domain)

  • timezest_scheduling_list - List scheduling requests

  • timezest_scheduling_get - Get request details

  • timezest_scheduling_create_request - Create new request (key tool)

  • timezest_scheduling_cancel - Cancel request

Usage Examples

Check What's Available

User: "What can TimeZest do?"
Tools: timezest_status

Create a Scheduling Request

User: "Book a technician for server repair at Customer Corp tomorrow"
Tools: timezest_scheduling_create_request({
  "appointmentTypeId": "repair-onsite",
  "triggerMode": "pod",
  "endUser": {
    "name": "John Doe",
    "company": "Customer Corp",
    "email": "john@customer.com"
  },
  "timeRange": {
    "earliestDate": "2024-02-01",
    "earliestTime": "09:00",
    "latestDate": "2024-02-01", 
    "latestTime": "17:00",
    "timezone": "America/New_York"
  },
  "associatedEntities": [
    {"type": "connectwise", "id": "12345", "number": "T20240001"}
  ]
})

PSA Integration

Link scheduling requests to PSA tickets:

{
  "associatedEntities": [
    {"type": "connectwise", "id": "12345", "number": "T20240001"},
    {"type": "autotask", "id": "67890"},
    {"type": "halo", "id": "11111"}
  ]
}

Trigger Modes

  • pod: Fires the configured PSA workflow (creates calendar entries, updates tickets)

  • generate_url: Returns a shareable booking URL for customers

TQL Filtering

TimeZest Query Language examples:

# Active agents in IT department
filter: "active:true AND department:\"IT Support\""

# Recent scheduling requests
filter: "createdAt:>=2024-01-01 AND status:pending"

# Specific customer requests  
filter: "endUser.company:\"Important Customer\""

Timezone Handling

CRITICAL: Always specify IANA timezones explicitly. TimeZest interprets scheduling windows in the specified timezone.

{
  "timeRange": {
    "earliestDate": "2024-02-01",
    "earliestTime": "09:00", 
    "timezone": "America/New_York"  // ✅ Required
  }
}

Development

Local Setup

# Clone and install
git clone https://github.com/WYRE-AI/timezest-mcp.git
cd timezest-mcp
npm install

# Development with file dependency (replace before publish)
# Edit package.json: "@wyre-technology/node-timezest": "file:../node-timezest"

# Build and test
npm run build
npm test

# Run locally
TIMEZEST_API_TOKEN=your-token npm run dev

Docker Development

# Build image
docker build -t timezest-mcp --build-arg NODE_AUTH_TOKEN=$GITHUB_TOKEN .

# Run container
docker run -it --rm \
  -e TIMEZEST_API_TOKEN=your-token \
  -e LOG_LEVEL=debug \
  timezest-mcp

MCP Integration

Claude Desktop

Add to your MCP settings:

{
  "mcpServers": {
    "timezest": {
      "command": "npx",
      "args": ["@wyre-ai/timezest-mcp"],
      "env": {
        "TIMEZEST_API_TOKEN": "your-api-token"
      }
    }
  }
}

WYRE Gateway

The server is designed for the WYRE MCP Gateway with:

  • Per-request server instances (stateless)

  • Header-based credential injection

  • Structured error responses

  • Flat tool list (no navigation state to enter)

API Coverage

TimeZest API

Coverage

Notes

Agents

✅ List, Get

Individual technicians

Teams

✅ List, Get

Round-robin scheduling

Appointment Types

✅ List, Get

Service type definitions

Resources

✅ List

Unified agents + teams

Scheduling Requests

✅ CRUD

Core scheduling functionality

TQL Filtering

✅ All endpoints

TimeZest Query Language

PSA Integration

✅ All systems

ConnectWise, Autotask, Halo

Webhooks

❌ N/A

TimeZest doesn't provide webhooks

Contributing

See CONTRIBUTING.md for development guidelines.

License

Apache 2.0 - see LICENSE file for details.

Available Tools

12 tools
timezest_agents_getA

Get details for a specific agent by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent ID

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'Get details' without mentioning error handling for invalid IDs, authentication requirements, or the structure of returned details. No side effects are indicated, but the lack of any behavioral context is a notable gap.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with zero filler words. It conveys the essential action and scope immediately, and every word earns its place.

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

Completeness3/5

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

For a single-parameter get tool with no output schema and no annotations, the description is adequate but vague. It doesn't clarify what 'details' includes or how errors surface, which an agent would need for fully correct use. It is minimally acceptable but not complete.

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 coverage is 100% and the only parameter, agentId, is already described as 'Agent ID'. The description's reference to 'by ID' adds no new semantic meaning beyond what the schema already conveys, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states a specific verb ('Get'), resource ('agent'), and scope ('specific agent by ID'). This distinguishes it from the sibling timezest_agents_list, which implies listing multiple agents rather than fetching a single one.

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?

The phrase 'by ID' implies that this tool should be used when a specific agent ID is known, contrasting with a list operation. However, it does not explicitly name alternatives, provide exclusions, or state when to use list vs get, leaving usage guidance implicit rather than explicit.

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

timezest_agents_listB

List all agents (technicians) available for scheduling

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoTQL filter string (e.g., "active:true AND department:\"IT Support\"")
pageSizeNoNumber of results per page (default: 50, max: 100)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only says 'List all agents' – a read operation – but does not disclose pagination, filtering behavior, ordering, or whether the list reflects current availability. The filter parameter implies 'all' is overridden by filters, which is unaddressed.

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

Conciseness5/5

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

Single sentence with the action and resource front-loaded; no redundant words. It is as concise as possible while conveying the core purpose.

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

Completeness3/5

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

For a simple list endpoint with two optional parameters, the description plus schema is mostly adequate. However, the lack of an output schema and any behavioral notes (pagination, filtering semantics) leaves the agent without a clear picture of return shape and edge cases.

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%; both 'filter' (with TQL example) and 'pageSize' (with default/max) are documented. The description adds no parameter-level detail, so 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 description states a specific verb ('List') and resource ('agents (technicians)'), with a useful qualifier 'available for scheduling'. It distinguishes from timezest_agents_get (list vs get) but does not explicitly contrast with other list tools like teams or resources.

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?

The phrase 'available for scheduling' gives some context for when to call it, but there is no explicit guidance on when to prefer it over timezest_agents_get or how filtering interacts with 'available'. No alternatives or exclusions are named.

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

timezest_appointment_types_getB

Get details for a specific appointment type by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
appointmentTypeIdYesAppointment type ID

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description bears the burden of behavioral disclosure. 'Get details' implies a read-only, safe operation, but there is no mention of behavior for invalid IDs, missing records, or whether any side effects occur. It is not misleading, but it is minimal.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It conveys the resource, action, and scoping efficiently.

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 simple get-by-ID tool with one required parameter and no output schema, the description is largely adequate. It could mention how to obtain the ID or error behavior, but an agent can reasonably understand what to provide and what action occurs.

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%, with appointmentTypeId already described as 'Appointment type ID'. The description's 'by ID' adds no extra meaning beyond the schema, so the baseline 3 is appropriate.

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 description uses a specific verb ('Get details') and clearly identifies the resource ('appointment type') scoped by ID, which distinguishes it from the sibling list tool. It doesn't name the alternative explicitly, but the by-ID qualifier makes the purpose unambiguous.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool versus timezest_appointment_types_list or any other sibling. It does not mention that an appointment type ID must first be obtained via the list tool, leaving usage context to inference.

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

timezest_appointment_types_listB

List all appointment types available for scheduling

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoTQL filter string (e.g., "active:true")
pageSizeNoNumber of results per page (default: 50, max: 100)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries full disclosure burden, and it only says 'List all...'. It does not reveal that results can be filtered despite the filter parameter, how pagination behaves, whether inactive types are returned, or any side-effect/read-only guarantee beyond the verb itself.

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

Conciseness5/5

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

One eight-word sentence, front-loaded with the verb and resource, with no redundant phrasing. It is precisely the right size for a tool this simple.

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

Completeness3/5

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

For a two-optional-parameter list tool with no output schema, the description is acceptable but thin: it relies on the name/schema for return shape and doesn't mention sibling selection or default unfiltered behavior. It is a minimally viable description rather than a complete one.

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?

Input schema covers 100% of parameters with descriptions, including TQL filter and pageSize bounds/defaults, so baseline 3 applies. The description itself adds no parameter-level meaning, but the schema is sufficient.

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 description states a concrete action ('List') on a clear resource ('appointment types') and adds 'available for scheduling' context. It is obvious from the singular/plural sibling pair that this is the list counterpart to appointment_types_get, but it does not explicitly name a sibling or contrast its scope, so it stops short of full differentiation.

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

Usage Guidelines2/5

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

No guidance on when to choose this tool over timezest_appointment_types_get or timezest_scheduling_list. The phrase 'available for scheduling' hints at one use case, but there is no explicit when/when-not statement, so an agent must infer the appropriate context.

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

timezest_resources_listC

List all resources (agents and teams) available for scheduling

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by resource type
filterNoTQL filter string (e.g., "active:true")
pageSizeNoNumber of results per page (default: 50, max: 100)

TDQS

C2.8/5.0
Behavior1/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It only says 'list all resources' without mentioning pagination, default page size, filtering via TQL, or the response structure. An agent has no idea whether results are sorted, truncated, or how to handle large result sets.

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

Conciseness4/5

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

The description is a single concise sentence with no fluff, clearly front-loading the action. It is appropriately short for a simple list operation, though it lacks some contextual details that would improve usability.

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

Completeness1/5

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

With no annotations and no output schema, the description should explain the return format, pagination behavior, and usage scenarios. It does none of this. For a tool with three optional parameters and a list operation, this is severely under-specified.

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 coverage is 100%, so all three parameters (type, filter, pageSize) are already documented with descriptions and constraints. The description adds no additional meaning beyond what the schema provides, matching the baseline of 3.

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

Purpose5/5

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

The description states a specific verb (list) and resource (all resources: agents and teams) and its context (for scheduling). It clearly distinguishes from the sibling agents_list and teams_list by covering both types in a single call, so an agent can infer its scope without opening the schema.

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

Usage Guidelines2/5

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

The description does not state when to prefer this tool over the more specific agents_list or teams_list, nor does it mention optional filters or pagination. Usage context is only implied by the name and the phrase 'available for scheduling', leaving the decision to the agent.

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

timezest_scheduling_cancelC

Cancel a scheduling request

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoReason for cancellation
requestIdYesScheduling request ID to cancel

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does not state whether cancellation is reversible, whether it requires special permissions, what happens to the associated request, or whether it sends notifications. The description only names the action without revealing consequences.

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

Conciseness4/5

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

The description is a single short sentence with no wasted words. It is front-loaded with the action and resource. However, it is so brief that it misses opportunities to add behavioral or usage context, so it earns a 4 rather than a 5.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is too thin. It does not explain what happens after cancellation, whether the request must be in a certain state, or how the agent can verify success. The schema covers parameters, but the behavioral and workflow context is missing.

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%, so the schema already documents both parameters. The description adds no extra meaning beyond the schema, but the baseline of 3 applies because the schema does the heavy lifting. The 'reason' parameter's optionality and purpose are clear from the schema.

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

Purpose3/5

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

The description states a clear verb and resource ('Cancel a scheduling request'), which distinguishes it from the create/list/get siblings. However, it is terse and doesn't specify what 'cancel' means in this system (e.g., whether it cancels a pending request or an existing appointment), so it is adequate but not fully clarifying.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. It does not mention that it is for canceling a previously created scheduling request, nor does it contrast with timezest_scheduling_list/get or timezest_scheduling_create_request. The context is implied by the name and description only.

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

timezest_scheduling_create_requestC

Create a new scheduling request - supports PSA ticket association

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoAdditional notes or requirements
endUserYesEnd user contact information
timeRangeNoPreferred scheduling window
resourceIdsNoResource IDs (agent or team ids) to book with. Sent to TimeZest as the JSON array resource_ids. Omit to send an empty array — TimeZest requires the field to be an array.
triggerModeYespod = fires PSA workflow, generate_url = returns booking link
appointmentTypeIdNoAppointment type ID (required)
associatedEntitiesNoAssociated PSA tickets/entities

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It says 'Create', implying a mutation, but it does not disclose side effects, prerequisites, authentication needs, or response behavior. It also fails to flag that appointmentTypeId is described as 'required' in its parameter description but is not in the top-level required array, which could mislead. The 'supports PSA ticket association' phrase is too vague to count as meaningful transparency.

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 description is a single concise sentence, front-loaded with the action. However, it is so sparse that it omits valuable guidance, making it feel under-specified rather than efficiently concise. It earns points for being short but loses for not packing more meaning into the available words.

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

Completeness2/5

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

Given the tool's complexity (7 parameters, nested objects, no output schema, no annotations), a one-sentence description is inadequate. It doesn't explain return values, prerequisites, behavior on failure, or how it differs from list/get siblings beyond the verb. The lack of usage or behavioral context makes it incomplete for an agent to invoke correctly.

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 coverage is 100%, so the schema fully documents all parameters, earning a baseline of 3. The description adds no additional parameter-level meaning beyond what the schema provides; 'supports PSA ticket association' loosely maps to the associatedEntities parameter but does not explain it. This is exactly the baseline case where high schema coverage makes the description's contribution marginal.

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 description clearly states the action ('Create') and the resource ('scheduling request'), and the phrase 'supports PSA ticket association' adds a distinguishing feature. It differentiates from sibling tools like timezest_scheduling_get and timezest_scheduling_list by naming the create operation. It loses a point because 'scheduling request' is somewhat generic and could be more explicit about what the request does (e.g., booking an appointment).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus the sibling scheduling tools (get, list, cancel). It does not mention alternatives, exclusions, or conditions that would select this tool. The only hint, 'supports PSA ticket association', is a feature description rather than usage guidance.

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

timezest_scheduling_getA

Get details for a specific scheduling request by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
requestIdYesScheduling request ID

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the transparency burden. 'Get' signals a non-mutating lookup, but there is no mention of not-found behavior, response shape, or access requirements.

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

Conciseness5/5

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

A single front-loaded sentence states the operation, resource, and identifying input with no filler or duplication of schema content.

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 simple single-parameter getter with no output schema, the description provides the essential invocation context. 'Details' is somewhat vague, but the tool is simple enough that no critical information is missing.

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 coverage is 100%, so the requestId parameter is already documented. The description adds no meaning beyond reinforcing that the ID identifies the scheduling request.

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

Purpose5/5

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

The description uses a specific verb and resource ('Get details for a specific scheduling request') and scopes it by ID, which cleanly distinguishes it from sibling tools like timezest_scheduling_list and timezest_scheduling_cancel.

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?

'by ID' implies use when an agent already has a requestId and wants a single request's details, but the description never explicitly says when to prefer this over list/cancel or what conditions rule it out.

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

timezest_scheduling_listC

List scheduling requests

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoTQL filter string (e.g., "createdAt:>=2024-01-01")
statusNoFilter by TimeZest status: new, sent, scheduled, cancelled, closed. Legacy aliases are accepted and mapped: pending→sent, booked→scheduled, completed→closed. Sent as a TQL filter (scheduling_request.status EQ <value>). TimeZest ignores a status query parameter.
pageSizeNoHow many records to return from this page (1–20). TimeZest list pages are fixed at 20 and ignore a page_size query parameter; smaller values truncate that page. Larger values still return at most one TimeZest page (20).

TDQS

C2.8/5.0
Behavior2/5

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

There are no annotations, so the description must disclose behavioral traits itself. 'List scheduling requests' only implies a non-mutating read operation and says nothing about important behaviors such as pagination being fixed at 20 records, the `status` query parameter being ignored by TimeZest, or the legacy status alias mapping. These details are buried in parameter descriptions rather than surfaced in the tool description.

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 description is extremely concise and front-loaded, with no wasted words. However, it is under-specified: it omits any mention of filtering, status handling, pagination, or return value, so its brevity comes at the cost of usefulness. It is a clear lead-in but not a sufficient definition on its own.

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

Completeness2/5

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

With no annotations and no output schema, the description alone is not enough for an agent to confidently understand the tool's behavior and selection context. The parameter schema covers invocation details well, but the definition still lacks an explicit statement about what a scheduling request is, what the list response contains, or how this list call relates to the other scheduling tools.

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%, so the baseline is 3. The tool description adds nothing about parameters, but the input schema already provides rich detail for `filter`, `status`, and `pageSize`, including TQL syntax, status aliases, and pagination constraints. No additional parameter meaning is needed from the description.

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 description uses a specific verb ('List') with a clear resource ('scheduling requests'), so an agent can tell this is a read operation for multiple items. It is distinguished from the singular `timezest_scheduling_get` and from `timezest_scheduling_create_request` / `timezest_scheduling_cancel` by its list-oriented wording, though it does not explicitly state those contrasts.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives such as `timezest_scheduling_get` or `timezest_scheduling_create_request`. There is no statement about using it for browsing/filtering requests or about when another scheduling tool would be more appropriate, so the agent must infer usage from the name and sibling list.

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

timezest_statusA

Show TimeZest connection status and the available tools

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It clearly implies a read-only status operation with no parameters and no side effects. It does not explicitly state 'no side effects', but the wording is sufficient for a no-argument status tool.

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

Conciseness5/5

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

The description is a single compact sentence that front-loads the primary purpose and includes no redundant or filler content. Every word earns its place.

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 zero-parameter status tool without an output schema, the description adequately conveys what the agent will learn: connection status and available tools. It does not detail the exact format of the response, but that is a minor gap for a simple introspection tool.

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?

There are no parameters, and the schema has full coverage with an empty object. The description adds no parameter details, but none are needed. The baseline for zero-parameter tools is 4.

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

Purpose5/5

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

The description uses a specific verb ('Show') and resource ('TimeZest connection status') and adds 'available tools', making it clear this is an introspection/meta tool. It is readily distinguishable from all sibling tools, which are domain operations.

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?

The context for use is implied: an agent would call this to check connectivity or discover what tooling is available. However, there is no explicit guidance about when to prefer this over siblings or whether it should be called before other operations.

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

timezest_teams_getA

Get details for a specific team by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
teamIdYesTeam ID

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must convey behavior. 'Get details' clearly indicates a read-only, non-destructive operation, which covers the main safety concern. However, it does not disclose error behavior for an invalid or missing team ID, permission requirements, or whether the response includes the full team object or a subset of fields.

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

Conciseness5/5

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

The description is a single, compact sentence containing only essential information: the action, the resource, and the identifier. Every word contributes meaning, and there is no redundancy or filler.

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?

This is a simple one-parameter, read-only getter with no output schema. The description is sufficient for an agent to select and invoke the tool correctly, but it omits details about the expected return structure (what 'details' means) and potential error conditions. These gaps are minor given the operation's low complexity.

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?

The schema already defines teamId as a required string with the description 'Team ID', giving 100% schema coverage. The description adds no additional meaning beyond echoing 'by ID', such as where to find the ID, format expectations, or relation to the ID returned by timezest_teams_list. Per baseline for high schema coverage, this is adequate.

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

Purpose5/5

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

The description states a clear verb ('Get'), a specific resource ('team'), and the distinguishing scope ('by ID'). It differentiates from the sibling timezest_teams_list, which presumably fetches all teams, by targeting a single team. The wording is unambiguous and actionable.

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?

The phrase 'by ID' implies this tool is for fetching one team when the ID is already known, while to enumerate teams the agent would use timezest_teams_list. However, this is only implied rather than explicitly stated; there is no direct guidance on when to prefer this tool over siblings or how to obtain a team ID.

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

timezest_teams_listB

List teams available for scheduling. Deleted teams are omitted, using the same live set as timezest_resources_list (teams GET /v1/resources still returns).

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoTQL filter string (e.g., "active:true")
pageSizeNoNumber of results per page (default: 50, max: 100)

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. It does disclose a meaningful behavior: deleted teams are omitted, and the returned set matches the live resource set. However, it does not address read-only behavior, pagination, or response shape, though for a simple list tool this is a partial but acceptable disclosure.

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

Conciseness5/5

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

Two sentences with no filler. The primary action is front-loaded, and the deleted-teams caveat is a necessary behavioral detail. Every sentence earns its place.

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 simple list operation with two optional, fully documented parameters, the description covers the main caveat (deleted teams omitted) and the live-set consistency. No output schema exists, so return-value details are not described, but this is a minor gap for a straightforward list tool.

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%, so the input schema fully documents both parameters, filter and pageSize. The description adds no parameter-specific semantics beyond 'list teams,' which is appropriate given the high schema coverage.

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 description opens with a specific verb and resource: 'List teams available for scheduling.' It further clarifies the scope by stating deleted teams are omitted. It does not explicitly differentiate this tool from siblings like timezest_teams_get or timezest_resources_list, though the mention of resources_list hints at the relationship.

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

Usage Guidelines2/5

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

No explicit when-to-use guidance is provided. The description mentions timezest_resources_list and that teams from GET /v1/resources still return, but it never states under what conditions an agent should choose this tool over a sibling such as timezest_resources_list or timezest_teams_get.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv3.0.1
    • Changedtimezest_scheduling_create_request1 field changed
      • changedInput schema / properties / resourceIds / description
        Previous value: -"Specific resource IDs (agents or teams) to book with"New value: +"Resource IDs (agent or team ids) to book with. Sent to TimeZest as the JSON array resource_ids. Omit to send an empty array — TimeZest requires the field to be an array."
    • Changedtimezest_scheduling_list3 fields changed
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page (default: 50, max: 100)"New value: +"How many records to return from this page (1–20). TimeZest list pages are fixed at 20 and ignore a page_size query parameter; smaller values truncate that page. Larger values still return at most one TimeZest page (20)."
      • changedInput schema / properties / status / description
        Previous value: -"Filter by status"New value: +"Filter by TimeZest status: new, sent, scheduled, cancelled, closed. Legacy aliases are accepted and mapped: pending→sent, booked→scheduled, completed→closed. Sent as a TQL filter (scheduling_request.status EQ <value>). TimeZest ignores a status query parameter."
      • changedInput schema / properties / status / enum
        Previous value: -[
        -  "pending",
        -  "booked",
        -  "cancelled",
        -  "completed"
        -]New value: +[
        +  "new",
        +  "sent",
        +  "scheduled",
        +  "cancelled",
        +  "closed",
        +  "pending",
        +  "booked",
        +  "completed"
        +]
  2. 12 tool updatesv3.0.0
    • Addedtimezest_agents_get
    • Addedtimezest_agents_list
    • Addedtimezest_appointment_types_get
    • Addedtimezest_appointment_types_list
    • Removedtimezest_navigate
    • Addedtimezest_resources_list
    • Addedtimezest_scheduling_cancel
    • Addedtimezest_scheduling_create_request
    • Addedtimezest_scheduling_get
    • Addedtimezest_scheduling_list
    • Addedtimezest_teams_get
    • Addedtimezest_teams_list
  3. 1 tool updatev1.2.6
    • Addedtimezest_navigate
  4. 1 tool updatev1.2.5
    • Removedtimezest_navigate
  5. 2 tool updatesv1.1.2
    • First observedtimezest_navigate
    • First observedtimezest_status

TDQS

B3.4/5.0

Scored across 12 tools

Disambiguation4/5

Each tool targets a distinct resource and action, with list/get pairs for agents, teams, appointment types, and scheduling requests. The main overlap is timezest_resources_list versus timezest_agents_list/timezest_teams_list, but the descriptions clarify that resources is the combined view.

Naming Consistency4/5

Most tools follow the consistent pattern timezest_<resource>_<action>, using snake_case throughout. Minor inconsistencies exist, such as timezest_scheduling_create_request using a compound action while timezest_scheduling_cancel drops the '_request' suffix.

Tool Count5/5

The 12 tools are well-scoped for a scheduling/fieldservice MCP server. Each tool covers a meaningful function without unnecessary duplication or bloat.

Completeness4/5

The tool set covers the core workflow: viewing status, reference data (agents, teams, resources, appointment types), listing/getting scheduling requests, and creating/canceling them. Minor gaps exist, such as no update/reschedule operation or agent availability check, but the main scheduling lifecycle is represented.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers