Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Meeting scheduling across time zones: slot finding, DST checks, .ics invites.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
MCP_LICENSE_KEY「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
リンク先は作者自身のファイルです。私たちが置いたり再パッケージしたりしたものではありません。ファイルを開くと、Claude Desktopがインストールします。
ターミナルでこれを実行します
動かす前に、空欄の値を入力してください。
ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント theluckystrike で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:MCP_LICENSE_KEY
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.22.6)がレジストリに届いたのは24 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにMCPBも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, FlyDocs
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Spec-driven development workflow: your agent works issues, sessions and the status lifecycle.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.theluckystrike%2Ftimezone-world-clock-meeting-slots-overlap-ics/versions/latest) (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.
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):
{
"mcpServers": { "timezone": { "command": "npx", "args": ["-y", "@theluckystrike/mcp-timezone"] } } }
Claude Code:
claude mcp add timezone -- npx -y @theluckystrike/mcp-timezone
(.cursor/mcp.json):
{
"mcpServers": { "timezone": { "command": "npx", "args": ["-y", "@theluckystrike/mcp-timezone"] } } }
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:
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install npm run build -w packages/mcp-license -w servers/timezone
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.
| Tool | What it does |
|---|---|
now | The current time in any list of places, with the zone abbreviation and UTC offset. With no arguments: this machine's zone and UTC. |
convert_time | Convert a time from one place to any number of others. Reads "2026-09-10 15:00", an ISO timestamp, or "3pm tomorrow" as wall-clock time in from_zone; a trailing Z or an explicit offset wins over from_zone. Flags a next-day or previous-day result, and states which occurrence it used on a DST fold (gap, fold). |
find_meeting_slots | Ranked times where every participant is inside their own working hours, on a 30-minute grid, weekends skipped. Ranked by fairness (see below). |
overlap | The daily window when every listed place is at work, in UTC and in each local clock, computed on a real date so DST weeks are honest. |
dst_changes | Every clock change in a place for a year: the exact UTC instant, the offset before and after, and the local time either side. |
business_days | Business days between two dates in a place, excluding weekends and any holidays you pass. Dates are strict: 2026-02-30 is refused, never rolled forward. |
ics_create | Write a .ics calendar file for one meeting and return the path. Attendees with an email are invited; a name with no email is listed in the description. organizer_email writes the ORGANIZER line. |
contacts_set | Remember a client or teammate's zone and working hours. |
contacts_list | Everyone you have saved, their local time now, and whether they are inside working hours. |
license_status | Free or Pro, and where to upgrade. |
license_activate | Activate a Pro key (verified offline). |
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).
No tool names required.
| You say | Tool |
|---|---|
| "What time is it in Warsaw, New York and Bangalore right now?" | now |
| "Convert 3pm Warsaw on 10 September to New York and India." | convert_time |
| "Find an hour next week for me in Warsaw, my client in New York and my designer in London." | find_meeting_slots |
| "When are Warsaw and New York both at work?" | overlap |
| "Do the clocks change in Warsaw before our March call?" | dst_changes |
| "How many business days from 1 to 30 September, excluding the 15th?" | business_days |
| "Write me the .ics for Thursday 3pm Warsaw, 45 minutes, invite maria@acme.com." | ics_create |
| "Remember that Maria is in Lisbon and works 10 to 6." | contacts_set |
| "Who's awake right now?" | contacts_list |
You: Find an hour next week for me in Warsaw, my client in New York and my designer in London.
find_meeting_slots { participants: [{name:"Me",zone:"Warsaw"},{name:"Client",zone:"New York"}, {name:"Designer",zone:"London"}], duration_minutes: 60, days: 5 }
Assistant: 15 slots fit all 3 participants. Best first:
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.
You: Write the invite for that one, 45 minutes, and send it to maria@acme.com.
ics_create { title:"Kickoff with Acme", start:"2026-09-10 15:00", zone:"Warsaw", duration_minutes:45, attendees:[{name:"Maria Nowak", email:"maria@acme.com"}], organizer_email:"you@yourdomain.com" }
Assistant: Wrote /Users/you/.local/share/mcp-servers/timezone/meeting.ics Kickoff with Acme: 2026-09-10 15:00 Thu (CEST, UTC+02:00) for 45 min DTSTART 2026-09-10T13:00:00.000Z (UTC)
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.
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.
America/Denver and you get exactly that.UTC+2 style offsets resolve to the matching fixed zone (Etc/GMT-2, the Etc signs are inverted by the IANA database, not by this server).EST is Etc/GMT+5 (UTC-05:00) all year, PST is Etc/GMT+8, CET is Etc/GMT-1, JST is Etc/GMT-9. Mapping them to a DST-observing zone made EST mean 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 shorthands ET, CT, MT, PT still name places and keep their clock changes. IST is read as India (UTC+05:30, Asia/Kolkata, no daylight saving) and the note says so, because IST also names Irish and Israel time.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 | Pro | |
|---|---|---|
now, convert_time, overlap, dst_changes, business_days | Unlimited | Unlimited |
find_meeting_slots participants | Up to 3 | Unlimited |
find_meeting_slots search window | Up to 5 days (a longer request is shortened, not refused) | Unlimited |
Recurring-slot search (recurring: true) | -- | Yes |
| Saved contacts | 5 | Unlimited |
.ics files | 3 per month | Unlimited |
Pro is $19 one-time, or $39 for every server in the bundle: [Get Pro](https://mcp.zovo.one/buy/timezone). Activation is offline: keys are Ed25519 signatures verified against a public key compiled into the package.
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- , 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.
2026-09-10 15:00 with from_zone: "Warsaw" is 15:00 in Warsaw. A trailing Z or an explicit +05:30 is honoured exactly and from_zone is then only used for display.2026-02-30 is refused with the reason (February 2026 has 28 days) everywhere a date is read: convert_time, overlap, business_days, ics_create and the holiday list. Nothing is ever rolled forward into March.02:30 on 2026-03-29 in Warsaw comes back as an error naming both valid neighbours (2026-03-29 01:30 and 2026-03-29 03:30). Pass gap:"forward" to take the time after the jump or gap:"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.冒頭だけを表示しています。続きはリポジトリで読めます