timezest-mcp
This MCP server enables LLM agents to manage TimeZest technician scheduling with PSA integration.
Navigate & explore domains:
timezest_navigateandtimezest_statusfor tool discovery.List and get agents (individual technicians):
timezest_agents_list,timezest_agents_get.List and get teams (round-robin scheduling):
timezest_teams_list,timezest_teams_get.List and get appointment types (service types):
timezest_appointment_types_list,timezest_appointment_types_get.List all resources (agents + teams):
timezest_resources_list.Create, view, list, and cancel scheduling requests:
timezest_scheduling_create_request,timezest_scheduling_get,timezest_scheduling_list,timezest_scheduling_cancel.Integrate with PSAs (ConnectWise, Autotask, Halo) via associated entities.
Use trigger modes (pod for workflows, generate_url for booking links).
Filter with TQL (TimeZest Query Language) across endpoints.
Explicit IANA timezone handling for scheduling windows.
Supports dual transport: stdio or HTTP, plus gateway-ready design.
TimeZest MCP Server
MCP (Model Context Protocol) server for TimeZest scheduling platform. Enables LLM agents to create and manage technician scheduling requests with PSA integration.
Features
🎯 Decision-tree navigation - organized tool discovery
📅 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_getrenders as a card in MCP Apps hosts; neutral by default, brandable viawindow.__BRAND__injection orMCP_BRAND_*env vars
Related MCP server: OnSched Consumer API MCP Server
Quick Start
Docker (Recommended)
docker run -it --rm \
-e TIMEZEST_API_TOKEN=your-api-token \
ghcr.io/wyre-ai/timezest-mcp:latestnpm
npm install -g @wyre-ai/timezest-mcp
TIMEZEST_API_TOKEN=your-token timezest-mcpConfiguration
Environment Variable | Required | Description |
| Yes | TimeZest API token |
| No | Transport mode: |
| No | HTTP port (default: 8080) |
| No | Set to |
| No | Log level: |
Tool Domains
The server uses decision-tree navigation to organize tools by domain:
Navigation
timezest_navigate- Enter a domain to access its toolstimezest_status- Show available domains and current state
Agents
timezest_agents_list- List individual technicianstimezest_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 typestimezest_appointment_types_get- Get appointment type details
Resources
timezest_resources_list- List all resources (agents + teams)
Scheduling (Core Domain)
timezest_scheduling_list- List scheduling requeststimezest_scheduling_get- Get request detailstimezest_scheduling_create_request- Create new request (key tool)timezest_scheduling_cancel- Cancel request
Usage Examples
Basic Navigation
User: "Show me TimeZest domains"
Tools: timezest_status
User: "Go to scheduling"
Tools: timezest_navigate(domain="scheduling")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 devDocker 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-mcpMCP 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
Decision-tree tool organization
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.
Links
Available Tools
2 toolstimezest_statusA
Show current navigation state and available domains
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 clearly indicates a read-only operation ('Show') with no destructive hints. Though it lacks details like real-time freshness, the intent is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no waste. It is front-loaded with the action and content, and every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no output schema, and no annotations, the description is adequate for a simple status tool. However, it could clarify what 'navigation state' and 'available domains' entail for better completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and per guidelines baseline is 4. The description does not need to add parameter info since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Show') and the specific resources ('current navigation state and available domains'). It distinguishes itself from the sibling tool 'timezest_navigate' which implies navigation versus status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking status before navigating, but does not explicitly state when to use this tool versus the sibling 'timezest_navigate'. No exclusions or alternatives are provided.
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 tool update
v1.2.6- Added
timezest_navigate
1 tool update
v1.2.5- Removed
timezest_navigate
2 tool updates
v1.1.2- First observed
timezest_navigate - First observed
timezest_status
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: one performs navigation to a domain, and the other reports the current navigation state and available domains. There is no overlap or ambiguity between them.
Both tools follow the same naming pattern with the 'timezest_' prefix and lowercase snake_case. The style is consistent, even though one uses a verb and the other a noun.
With only 2 tools, the server feels thin and borderline for the stated purpose of navigating domains. The count is not excessive, but it is below the typical well-scoped range of 3-15 tools.
The pair covers the core operations of navigating to a domain and checking status/available domains. Minor gaps might exist, such as a way to navigate back or list domains explicitly, but the current surface is functional for basic usage.
Maintenance
Related MCP Connectors
Hosted MCP server for Cliniko — patients, appointments, availability, and invoices for AI agents.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
- AstrocalOAuthdev.astrocal
AI-native scheduling: check availability, book meetings, cancel and reschedule via MCP
MCP server for Cronofy — read calendars, events and free/busy, and create, update or delete events.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server that enables scheduling, updating, deleting, and listing calendar appointments through Cal.com's Calendar API.43-
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables interaction with OnSched's consumer-facing appointment scheduling API through natural language, allowing users to manage bookings, appointments, and scheduling operations.-
- FlicenseAqualityDmaintenanceAn MCP server that wraps the TimePRO API, enabling AI assistants to automatically create, view, and manage timesheets for authenticated users. It provides tools for searching clients and projects, retrieving configuration defaults, and performing full CRUD operations on timesheet entries.10-
- AlicenseAqualityDmaintenanceMCP server that connects AI agents to calendars, bookings, and scheduling polls via the Model Context Protocol.227 npmMIT