TimeZest

io.github.wyre-technology由 GitHub 账号 wyre-technology 发布v1.2.6更新于 Oct 24, 2026

MCP server for TimeZest — appointment scheduling, agents, appointment types, and resources for MSPs.

已验证STDIO仅桌面效率与工作流商业与电商

概览

AI 生成的概览

让助手列出 TimeZest 的技师、团队和预约类型,并为 MSP 创建、查看或取消技师排程请求。

可以做什么
封装面向托管服务商(MSP)的 TimeZest 排程平台。工具覆盖技师、团队、预约类型和资源,以及核心排程域:列出、查看、创建和取消排程请求。请求可关联 ConnectWise、Autotask、Halo 等 PSA 工单,并支持 TimeZest 查询语言过滤。状态工具可报告连接状态和可用工具。
适用场景
适合让助手在 TimeZest 中预约、查看或取消技师日程,或查询可用的技师、团队与预约类型,尤其是在与 PSA 工单关联的 MSP 工作流中。
运行要求
以本地进程方式通过 stdio 运行,通常使用已发布的容器镜像或 npm 包。需要在 TIMEZEST_API_TOKEN 中提供 TimeZest API 令牌,并需要访问 TimeZest API 的网络连接。可选配置包括 MCP_TRANSPORT、AUTH_MODE、LOG_LEVEL 和 MCP_HTTP_PORT。
安装前请注意
该服务器持有可访问排程数据的 TimeZest API 令牌(TIMEZEST_API_TOKEN)。创建或取消请求会改动真实预约,并可能触发 PSA 工作流,进而创建日历条目和更新工单,因此让助手执行前应先确认。在网关模式下,凭据预期由网关注入,而非本地读取。

安装

在 SourceWeft 中

  1. 打开 控制台中的 TimeZest,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

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

Quick Start

Docker (Recommended)

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

npm

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

Configuration

Copy .env.example and set the variables below.

Environment VariableRequiredDescription
TIMEZEST_API_TOKENFor stdio and AUTH_MODE=envTimeZest API token. Gateway mode does not read this.
MCP_TRANSPORTNostdio (default) or http
MCP_HTTP_PORTNoHTTP port. Defaults to 8080.
MCP_HTTP_HOSTNoBind address when MCP_TRANSPORT=http. Defaults to 127.0.0.1. A configured CONDUIT_S2S_SECRET honors this value. The container image sets 0.0.0.0.
AUTH_MODENogateway (Docker image and Compose default) or env. Gateway mode requires X-Timezest-Api-Token on each /mcp request and never falls back to TIMEZEST_API_TOKEN. env uses that variable only after S2S auth succeeds.
CONDUIT_S2S_SECRETYes for HTTPService-to-service secret. Generate one with openssl rand -hex 32. The HTTP server logs an error and exits non-zero when this is empty or a known placeholder (changeme, your-s2s-secret, secret, placeholder, and similar public examples). Compose will not start without it. Never commit a real value. The value is never logged.
MCP_ALLOW_INSECURE_DEVNoSet to exactly 1 only for local development to start HTTP without CONDUIT_S2S_SECRET. The process logs a warning, does not enforce X-Gateway-S2S, and forces the listener onto 127.0.0.1 even if MCP_HTTP_HOST is a wider address. A known placeholder secret is still refused.
LOG_LEVELNoLog level: debug, info (default), warn, error

/health stays unauthenticated and does not read credentials. The stdio transport does not use CONDUIT_S2S_SECRET.

HTTP authentication

With MCP_TRANSPORT=http and CONDUIT_S2S_SECRET set, every /mcp request must include X-Gateway-S2S. The header value is:

text
t=<unix seconds>,v1=<hex hmac-sha256>

v1 is HMAC-SHA256, as lowercase hex, of the exact ASCII string t=<unix seconds> (the same prefix that appears in the header), keyed with CONDUIT_S2S_SECRET. The timestamp must be within 300 seconds of the server clock. A missing or invalid header returns 401. The secret is never written to logs.

bash
t=$(date +%s)sig=$(printf 't=%s' "$t" | openssl dgst -sha256 -hmac "$CONDUIT_S2S_SECRET" -hex | awk '{print $NF}')# X-Gateway-S2S: t=$t,v1=$sig

In AUTH_MODE=gateway, /mcp also requires X-Timezest-Api-Token. That header is the only credential source for the request. A missing header returns 401 and the server does not fall back to TIMEZEST_API_TOKEN.

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": "[email protected]"  },  "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:

json
{  "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 departmentfilter: "active:true AND department:\"IT Support\""
# Recent scheduling requestsfilter: "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.

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

Development

Local Setup

bash
# Clone and installgit clone https://github.com/WYRE-AI/timezest-mcp.gitcd timezest-mcpnpm install
# Development with file dependency (replace before publish)# Edit package.json: "@wyre-technology/node-timezest": "file:../node-timezest"
# Build and testnpm run buildnpm test
# Run locallyTIMEZEST_API_TOKEN=your-token npm run dev

Docker Development

The image sets AUTH_MODE=gateway and MCP_HTTP_HOST=0.0.0.0. Stdio (the image default until MCP_TRANSPORT=http) still reads TIMEZEST_API_TOKEN and does not use CONDUIT_S2S_SECRET.

bash
# Build imagedocker build -t timezest-mcp --build-arg NODE_AUTH_TOKEN=$GITHUB_TOKEN .
# Stdiodocker run -it --rm \  -e TIMEZEST_API_TOKEN=your-token \  -e LOG_LEVEL=debug \  timezest-mcp

HTTP gateway mode publishes the port on loopback and passes the S2S secret. The TimeZest token arrives on each request as X-Timezest-Api-Token; it is not read from the environment. Generate the secret with openssl rand -hex 32 — example placeholders such as changeme or your-s2s-secret are rejected.

bash
export CONDUIT_S2S_SECRET="$(openssl rand -hex 32)"docker run --rm \  -e MCP_TRANSPORT=http \  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \  -p 127.0.0.1:8080:8080 \  timezest-mcp

Compose refuses to start when CONDUIT_S2S_SECRET is unset. The gateway service sets AUTH_MODE=gateway and does not inject TIMEZEST_API_TOKEN or env_file:

bash
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose up

Single-tenant HTTP (AUTH_MODE=env) still requires the S2S secret, then uses TIMEZEST_API_TOKEN:

bash
docker run --rm \  -e MCP_TRANSPORT=http \  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \  -e AUTH_MODE=env \  -e TIMEZEST_API_TOKEN=your-token \  -p 127.0.0.1:8080:8080 \  timezest-mcp

Local HTTP without a secret is development-only. It binds 127.0.0.1 only and logs a warning. A non-loopback MCP_HTTP_HOST is overridden:

bash
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm run dev

MCP Integration

Claude Desktop

Add to your MCP settings:

json
{  "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)
  • X-Gateway-S2S signing on every /mcp request (see HTTP authentication)
  • X-Timezest-Api-Token credential injection in gateway mode, with no fallback to TIMEZEST_API_TOKEN
  • Structured error responses
  • Flat tool list (no navigation state to enter)

API Coverage

TimeZest APICoverageNotes
Agents✅ List, GetIndividual technicians
Teams✅ List, GetRound-robin scheduling
Appointment Types✅ List, GetService type definitions
Resources✅ ListUnified agents + teams
Scheduling Requests✅ CRUDCore scheduling functionality
TQL Filtering✅ All endpointsTimeZest Query Language
PSA Integration✅ All systemsConnectWise, Autotask, Halo
Webhooks❌ N/ATimeZest doesn't provide webhooks

Contributing

See CONTRIBUTING.md for development guidelines.

License

Apache 2.0 - see LICENSE file for details.

Links

来源:README.md,提交 e444f13

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v1.2.6最新Sep 16, 2026

评分

已满足适用检查项的 40%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。