MCPサーバー

WhenMeet.me — group scheduling

me.whenmeet/scheduler
コミュニケーション 生産性 公開・接続可能 MCP 2026-07-28

このMCPでできること

Finds mutually suitable meeting times across calendars and manages invitations, conference links, and schedule changes.

create_meeting
Confirm a meeting: writes the event into the authenticated host’s calendar with an optional Google Meet/Teams link, emails invites with an ICS attachment, and returns the share URL (/m/<id>). Requires authentication.
入力スキーマ
{'type': 'object', 'required': ['participants', 'startsAt', 'endsAt'], 'properties': {'tz': {'type': 'string', 'description': 'IANA zone used to format times in invite emails.'}, 'title': {'type': 'string'}, 'endsAt': {'type': 'number', 'description': 'unix ms'}, 'startsAt': {'type': 'number', 'description': 'unix ms'}, 'conference': {'enum': ['meet', 'teams'], 'type': 'string', 'description': 'Omit for no conference link.'}, 'participants': {'type': 'array', 'items': {'type': 'string'}}}}
find_common_slots
Rank the best meeting times for the given participants, merging live Google/Microsoft calendar data, hand-marked availability and the heat-map sources. Each participant is filtered (Mon–Fri, waking hours) and scored in their OWN timezone; scores factor in buffer time around existing meetings and prefer sooner slots. Returns up to 8 slots: everyone-free slots first (allFree:true), then — only if there are too few — the best compromise slots (allFree:false) with a freeCount. Defaults to the next 14 days. Requires authentication.
読み取り専用
入力スキーマ
{'type': 'object', 'required': ['participants'], 'properties': {'to': {'type': 'number', 'description': 'Window end, unix ms. Default: now + 14 days.'}, 'tz': {'type': 'string', 'description': 'Requester IANA zone, e.g. Europe/Warsaw — the fallback zone for participants whose own timezone is unknown, and the zone for the round-hour scoring bonus.'}, 'from': {'type': 'number', 'description': 'Window start, unix ms. Default: now.'}, 'durationMin': {'enum': [15, 30, 45, 60], 'type': 'number', 'description': 'Meeting length. Default 30.'}, 'participants': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Participant emails (the authenticated user is the host and should be included).'}}}
get_manual_availability
Read previously hand-marked free slots for an email within a window.
読み取り専用
入力スキーマ
{'type': 'object', 'required': ['email', 'from', 'to'], 'properties': {'to': {'type': 'number'}, 'from': {'type': 'number'}, 'email': {'type': 'string'}}}
get_meeting
Read a meeting by its share-link id (the UUID from /m/<id>): time, title, conference URL, host, and any proposed alternate times with their status.
読み取り専用
入力スキーマ
{'type': 'object', 'required': ['meetingId'], 'properties': {'meetingId': {'type': 'string'}}}
get_meeting_availability
Aggregated group availability for an existing meeting (the symmetric heat-map): per-30-min-slot counts of how many participants are free, plus ranked slots (per-participant timezones, buffer + soonness scoring, allFree:true everyone-free slots and allFree:false compromise slots). Individual calendars are never exposed. No auth needed — the meeting id is the capability.
読み取り専用
入力スキーマ
{'type': 'object', 'required': ['meetingId'], 'properties': {'to': {'type': 'number', 'description': 'unix ms. Default: now + 14 days.'}, 'tz': {'type': 'string'}, 'from': {'type': 'number', 'description': 'unix ms. Default: now.'}, 'meetingId': {'type': 'string'}, 'durationMin': {'enum': [15, 30, 45, 60], 'type': 'number'}}}
respond_to_suggestion
Accept or decline a proposed alternate time. Accepting moves the meeting (calendar event included) and re-sends invites. Only the meeting host may call this — requires authentication.
入力スキーマ
{'type': 'object', 'required': ['meetingId', 'suggestionId', 'action'], 'properties': {'action': {'enum': ['accept', 'decline'], 'type': 'string'}, 'meetingId': {'type': 'string'}, 'suggestionId': {'type': 'string'}}}
set_manual_availability
Publish hand-marked FREE time slots for an email address (the no-calendar fallback, e.g. Apple iCloud users). Replaces previously marked slots inside the window; the group heat-map updates immediately. Authenticated callers (Bearer PAT) skip the bot challenge; an anonymous caller must pass a Cloudflare Turnstile token in `turnstileToken` (only required when the server is configured with a Turnstile secret).
入力スキーマ
{'type': 'object', 'required': ['email', 'windowFrom', 'windowTo', 'freeSlots'], 'properties': {'email': {'type': 'string'}, 'windowTo': {'type': 'number', 'description': 'unix ms'}, 'freeSlots': {'type': 'array', 'items': {'type': 'object', 'required': ['start', 'end'], 'properties': {'end': {'type': 'number'}, 'start': {'type': 'number'}}}}, 'windowFrom': {'type': 'number', 'description': 'unix ms'}, 'turnstileToken': {'type': 'string', 'description': 'Cloudflare Turnstile token; required for anonymous callers when a Turnstile secret is configured.'}}}
suggest_time
Propose a different time for an existing meeting on behalf of a guest. The host is notified by email and can accept or decline. Authenticated callers (Bearer PAT) skip the bot challenge; an anonymous caller must pass a Cloudflare Turnstile token in `turnstileToken` (only required when the server is configured with a Turnstile secret).
入力スキーマ
{'type': 'object', 'required': ['meetingId', 'suggestedBy', 'startsAt', 'endsAt'], 'properties': {'endsAt': {'type': 'number', 'description': 'unix ms'}, 'message': {'type': 'string'}, 'startsAt': {'type': 'number', 'description': 'unix ms'}, 'meetingId': {'type': 'string'}, 'suggestedBy': {'type': 'string', 'description': 'Email of the person proposing.'}, 'turnstileToken': {'type': 'string', 'description': 'Cloudflare Turnstile token; required for anonymous callers when a Turnstile secret is configured.'}}}
追加
get_manual_availability
2026年9月17日12:54
追加
set_manual_availability
2026年9月17日12:54
追加
respond_to_suggestion
2026年9月17日12:54
追加
suggest_time
2026年9月17日12:54
追加
get_meeting_availability
2026年9月17日12:54
追加
get_meeting
2026年9月17日12:54
追加
create_meeting
2026年9月17日12:54
追加
find_common_slots
2026年9月17日12:54