
Timezone
io.github.theluckystrike由 GitHub 帳號 theluckystrike 發布v0.22.6更新於 Oct 24, 2026
Time zone conversion, meeting-slot finding across countries, DST checks and .ics invites. All.
發布方自己的服務:timezone.football
概覽
本機時區工具伺服器:查詢各地目前時間、換算時間、尋找跨國會議時段、檢查日光節約時間、計算工作日並產生 .ics 邀請。
- 可以做什麼
- 查詢任意多個地點的目前時間,含時區縮寫與 UTC 偏移
- 把一個地點的時間換算到多個地點,並標示跨日以及日光節約時間的跳躍或重疊
- 找出所有參與者都在各自工作時間內、依公平度排序的會議時段,並計算每日共同工作時段
- 列出某地一年內的時鐘變更,並計算兩個日期之間的工作日(可排除指定假日)
- 為會議產生 .ics 行事曆檔案,可寫入與會者與主辦人
- 儲存聯絡人的時區與工作時間,並列出目前誰在工作時間內
- 適用情境
- 適合需要與海外客戶或同事協調時間時使用:換算時間、找共同工作時段、確認日光節約時間變化並直接產生可寄出的邀請。它著重排程與交期問題,而非行事曆管理。
- 執行需求
- 以 stdio 本機程序執行。npm 套件尚未發布,需使用一鍵 .mcpb 安裝包或複製原始碼自行建置;需要 Node.js 18 或更新版本。不需帳號、API 金鑰或網路存取。在 MCP_LICENSE_KEY 設定 Pro 金鑰或呼叫 license_activate 可解鎖不限參與者、更長搜尋、重複時段、更多聯絡人與更多 .ics 檔案。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Timezone,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
mcp-timezone
Work with clients in other countries without doing time zone arithmetic in your head. Ask "what time is it for Maria in Lisbon", "convert 3pm Warsaw to New York and Bangalore", or "find an hour next week that works for me, my client in New York and my designer in London" and get an answer you can act on: ranked meeting slots where everyone is inside their own working hours, the exact daily overlap, when the clocks change, how many business days a delivery date is, and a calendar file you can send. Saved contacts, working hours and nothing else live as plain JSON on your own machine.
Built by theluckystrike.
In the official MCP Registry (io.github.theluckystrike/timezone-world-clock-meeting-slots-overlap-ics).
Find a meeting time that works for everyone abroad, convert any time between cities, and write the invite, zero setup, all local.
60-second install
npm publish for @theluckystrike/mcp-timezone is pending. Until then, the .mcpb one-click bundle or a
clone+build is the working path, both are verified below.
One-click (.mcpb): download timezone.mcpb from the latest release and double-click it in Claude Desktop:
https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
Claude Code:
(.cursor/mcp.json):
The npx form above starts working the moment the package is published. Until then, use the .mcpb bundle above,
or build from source with exactly these three commands:
Then point your client's command at node with one arg: the absolute path to servers/timezone/dist/index.js.
To run in Pro mode set MCP_LICENSE_KEY in the same config block, or call license_activate once with your key.
Tools
Also exposed: the resource tz://contacts (saved contacts and their current local time) and the prompt
schedule_with (proposes times with saved contacts, then offers to write the invite).
What you can say
No tool names required.
Worked example
Three hours of fairness is not a flaw in the ranking, it is the truth about Warsaw and New York: with 09:00-17:00 days on both sides the shared window is only 15:00-17:00 Warsaw, so somebody's meeting is always far from the middle of their day. The score says so instead of hiding it. Widen one person's hours and the score improves.
How the ranking works
find_meeting_slots scores every candidate by the worst participant's distance from 13:00 local, in hours,
and sorts ascending. The worst, not the average, on purpose: a slot that is pleasant for two people and 07:00
for the third must never outrank one that is 10:00 for everybody. A fairness of 0 would mean the meeting sits
at midday for all of them; anything under about 2 is comfortable.
A slot is only offered when the whole meeting, start to end, is inside every participant's working window,
on their own local calendar day. Weekends in the first participant's zone are skipped. No slot ever starts
before earliest_date, if you pass a time with it, slots earlier that day are not proposed.
When nothing fits, the server says so, shows the windows, and then lists the closest times that are somebody's hours, ranked by the total minutes outside, with each person's local time and the working hours that would make each one fit. On the free tier a search longer than 5 days is shortened to 5 days and the answer says so; it is never refused outright.
How places are resolved
City and country names resolve through a built-in table of 490 entries (300+ cities, every commonly used
country and US state shorthands). Every entry is verified against
Intl.supportedValuesOf("timeZone") at startup; an entry this Node build cannot resolve is dropped with a
line on stderr rather than silently answering with the wrong zone.
- A country that spans several zones maps to its main business zone: United States -> America/New_York, Australia -> Australia/Sydney, Canada -> America/Toronto, Brazil -> America/Sao_Paulo, Russia -> Europe/Moscow, Mexico -> America/Mexico_City, Indonesia -> Asia/Jakarta. Name a city when you need a different one.
- IANA ids always work and always win: pass
America/Denverand you get exactly that. UTC+2style offsets resolve to the matching fixed zone (Etc/GMT-2, the Etc signs are inverted by the IANA database, not by this server).- A fixed abbreviation is an offset, not a place.
ESTisEtc/GMT+5(UTC-05:00) all year,PSTisEtc/GMT+8,CETisEtc/GMT-1,JSTisEtc/GMT-9. Mapping them to a DST-observing zone madeESTmean EDT (UTC-04:00) every summer, an hour wrong for half the year. Each answer carries a note naming the place to pass instead ("New York","Los Angeles","Paris"). The region shorthandsET,CT,MT,PTstill name places and keep their clock changes.ISTis read as India (UTC+05:30,Asia/Kolkata, no daylight saving) and the note says so, because IST also names Irish and Israel time. - An unknown name is never guessed. It comes back as an error with suggestions:
unknown time zone or place: "Warsawa". Did you mean: warsaw (Europe/Warsaw)?
DST is not stored here at all. Every offset comes from the ICU data inside your Node build via
Intl.DateTimeFormat, so the rules stay current as Node updates instead of going stale in a bundled table.
Free vs Pro
Pro is $19 one-time, or $39 for every server in the bundle: Get Pro. Activation is offline: keys are Ed25519 signatures verified against a public key compiled into the package.
How it stores data
Contacts and the monthly .ics counter live in one JSON file:
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/timezone/data.json.
Every write happens under an advisory lock at .../timezone/.lock, held across the whole load-mutate-save
cycle, so two clients sharing one data dir cannot discard each other's contacts. The save writes a temporary
file and renames it into place, so a crash mid-write leaves either the old file or the new one.
If data.json is ever unreadable or not valid JSON, the server does not treat that as "no contacts yet".
It moves the file aside byte-for-byte as data.json.corrupt-<timestamp>, writes a data.json.corrupt marker,
and every later call fails with data file is corrupt; moved to ...; nothing was written until you restore a
good copy and delete the marker.
Dates, times and honest caveats
- A time with no offset is wall-clock time in
from_zone, not UTC.2026-09-10 15:00withfrom_zone: "Warsaw"is 15:00 in Warsaw. A trailingZor an explicit+05:30is honoured exactly andfrom_zoneis then only used for display. - A calendar date is validated, not normalised.
2026-02-30is refused with the reason (February 2026 has 28 days) everywhere a date is read:convert_time,overlap,business_days,ics_createand the holiday list. Nothing is ever rolled forward into March. - A wall time inside a spring-forward gap does not exist, and is refused.
02:30on 2026-03-29 in Warsaw comes back as an error naming both valid neighbours (2026-03-29 01:30and2026-03-29 03:30). Passgap:"forward"to take the time after the jump orgap:"backward"for the one before it; the answer then says which it used. Guessing silently is how a meeting moves an hour once a year. - Ambiguous times in the autumn fold return the FIRST occurrence and say so:
02:30on 2026-10-25 in Warsaw is00:30Z, the CEST reading. Passfold:"second"for01:30Z, the CET one. Both answers name the abbreviation and offset they used. .icsattendees are calendar addresses. An attendee with an email becomesATTENDEE;CN="Name";RSVP=TRUE:mailto:addr, withCNwritten as a quoted RFC 5545 parameter value. A name with no email is listed inDESCRIPTIONinstead of being written as an unroutable address. Any CR, LF or control character in any field is refused, not escaped away: it is what a content-line injection looks like.organizer_emailwrites theORGANIZERline; without it noORGANIZERis written and the answer says so, because replies then have nowhere to go..icsfiles carry UTC times (DTSTART:20260910T130000Z) and noVTIMEZONEblock. That is deliberate: a hand-writtenVTIMEZONEwith stale DST rules is the classic way an invite lands an hour off.- Working hours are the only calendar this server has. It does not know about your existing meetings,
public holidays (pass them to
business_daysyourself) or anyone's lunch.business_dayssays so in its own answer when no holiday list is passed, so a "22 business days" figure is never mistaken for a public-holiday-adjusted one. - Argument sizes are capped, so a runaway caller cannot turn one call into a hang or a huge reply:
place and date strings 100 characters, event titles 200, descriptions 5000, up to 50 zones,
100 participants, 100 attendees, 400 holidays,
days<= 366,duration_minutes<= 1440, and abusiness_daysrange of at most 3700 days (longer ranges are refused, never silently truncated). out_pathis written where you name it.ics_createresolves a relative path against the process working directory and does not confine it to the data directory; an unwritable path returns a cleanEACCESand consumes none of the free monthly quota.- Weekend skipping uses the first participant's zone and the Saturday/Sunday convention. A Friday-Saturday
weekend is not modelled; set
work_start/work_endor read the dates.
Troubleshooting
npxhangs or fails to find the package: npm publish is pending. Use the.mcpbbundle or the clone-and-build path above.- A city is not recognised: the error lists suggestions. Any IANA id always works, so
America/Argentina/Cordobais available even when the city name is not in the table. - Node version: requires Node >= 18. Check with
node -v. Older builds ship older DST rules. - Nothing shows up / silent failures: this server writes to stderr only, never stdout. In Claude Desktop
check Settings -> Developer -> the server's log; in Claude Code run with
--mcp-debug. - A Pro key isn't recognized: run
license_status, and confirmMCP_LICENSE_KEYis set in the process the client launches, not just your shell.
Privacy
All data stays local: contacts live in ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/timezone/data.json.
The server makes no network requests, has no telemetry and needs no account. Time zone data comes from the
ICU database already inside Node.
Pairs with
- mcp-time-tracker, track the hours you spend on those clients and report them.
- mcp-invoice, turn the tracked hours into a numbered PDF invoice for the client abroad.
- office-suite, several servers behind one install, one config entry.
FAQ
Yes, and it does not store any DST rules of its own. Every offset is read from the ICU data in your Node build, so Warsaw and New York being 5 hours apart (not 6) between 8 and 29 March 2026 falls out correctly.
Because a real overlap can be two hours wide. The fairness score reports the worst person's distance from their midday so you can see the cost and decide who absorbs it.
Yes. India (+05:30), Nepal (+05:45), Adelaide (+09:30) and Chatham are handled like any other zone; the slot grid is 30 minutes, so a half-hour zone produces :00 and :30 local starts.
No. It knows only the working hours you give it. It writes .ics files; it never reads or connects to a
calendar service.
No. There are no network calls anywhere, including license activation.
License
MIT
One business profile for the whole suite
Your identity is stored once, at ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json,
and every server in the suite reads it: the invoice issuer, the docx letterhead, the recurring
issuer, expense-tracker's default VAT rate, time-tracker's and timezone's home zone, and the
resume and contract letterheads. Set it once with business_set (invoice or docx) - you never
repeat it anywhere else. An email address is only ever taken from that profile or from an explicit
argument; when none is stored, documents show [add: email] and the tool says so rather than
letting anyone improvise an address.
Use these docs as an MCP server
Any MCP client (Claude, Cursor, Windsurf, VS Code) can read this repository's documentation directly via GitMCP - no install:
- Docs MCP URL: https://gitmcp.io/theluckystrike/mcp-timezone
來源:servers/timezone/README.md,提交 1bd9d69
工具
0版本歷史
2- v0.22.6最新Oct 14, 2026
- v0.22.1Sep 18, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
其他 Timezone 整合
timezone.football
football.timezone官方發布者
讓助理查詢足球比賽在哪個國家由哪家授權頻道轉播、當地開球時間,以及經查證的訂閱價格。

Timezone Mcp
由 GitHub 帳號 mrfentmen 發布
離線 IANA 時區工具:讓助理查詢任一時區的目前時間、在兩個時區之間換算某一時刻,並搜尋時區清單。

Timezone Clock
由 GitHub 帳號 sadri-dridi 發布
遠端 MCP 伺服器,讓助理取得指定 IANA 時區的目前時間,並提供一組輕量、幾乎無狀態的查詢與驗證小工具。

ISO-8601 timezone offset shape
由 GitHub 帳號 sadri-dridi 發布
一個遠端 MCP 端點,提供多為無狀態的小型工具:時區位移、URL 與主機名稱解析、HTTP 狀態檢查,以及簡單的格式驗證。

Timezone
由 GitHub 帳號 pipeworx-io 發布
Timezone MCP 讓助理查詢指定時區的目前時間、列出 IANA 時區、依 IP 判斷時區並做時區換算,另附一個可路由到其他資料來源的閘道工具。