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 分

    請在儲存庫或註冊中心條目中宣告授權條款。