Search / me.whenmeet/scheduler
WhenMeet.me — group scheduling
R2· OAuth, onceGroup meeting scheduler — rank times everyone's free across Google & Outlook, book Meet/Teams.
v1.1.0 · active · website · descriptor JSON · versions
Search / me.whenmeet/scheduler
R2· OAuth, onceGroup meeting scheduler — rank times everyone's free across Google & Outlook, book Meet/Teams.
v1.1.0 · active · website · descriptor JSON · versions
{
"mcpServers": {
"scheduler": {
"type": "http",
"url": "https://whenmeet.me/mcp"
}
}
}claude mcp add --transport http scheduler https://whenmeet.me/mcp[mcp_servers.scheduler]
url = "https://whenmeet.me/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"scheduler": {
"type": "remote",
"url": "https://whenmeet.me/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"scheduler": {
"type": "http",
"url": "https://whenmeet.me/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=scheduler&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vd2hlbm1lZXQubWUvbWNwIn0%3D"
}{
"servers": {
"scheduler": {
"type": "http",
"url": "https://whenmeet.me/mcp"
}
}
}{
"mcpServers": {
"scheduler": {
"httpUrl": "https://whenmeet.me/mcp"
}
}
}extensions:
"scheduler":
enabled: true
name: "scheduler"
type: streamable_http
uri: "https://whenmeet.me/mcp"
timeout: 300
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prmProtected Resource Metadata (RFC 9728) publishedauth.as_metadataauthorization server metadata reachableauth.cimdonly Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMDauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_lengthdescriptions are concisetools.schemasevery tool has an object input schematools.annotations11 of 11 tools declare readOnlyHint or destructiveHinttools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: find_common_slots (destructiveHint, idempotentHint, openWorldHint); create_meeting (destructiveHint, idempotentHint, openWorldHint); get_meeting_availability (destructiveHint, idempotentHint, openWorldHint); …tools.token_costabout 2,571 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes7 tool changes in 30 daysstability.rug_pull1 tools kept their name but changed most of their description in 30 days; review before trusting themdeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packagesuggest_timechangeddescriptionPropose 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).
Propose a different time for an existing meeting on behalf of a guest. The host is notified by email and can accept or decline (at most 10 suggestions per hour per meeting and email; beyond that rate_limited). 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).
create_meetingchangeddescription, input schemaConfirm 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.
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>). Up to 50 participants; the start must be at most 60 days ahead (bad_window). Requires authentication.
find_common_slotschangeddescription, input schemaRank 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.
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; the window may end at most 60 days from now (bad_window). Up to 50 participants; reading other people’s connected calendars is limited to 30 new addresses per hour and 50 per day (lookup_limit), and each read is shown to the calendar owner. Requires authentication.
book_slotaddedBook a time on someone’s WhenMeet.me booking link. startsAt must be a slot start from get_booking_slots. Writes the event to the host’s calendar (Google Meet / Teams link added automatically), emails invites with an ICS to you, your guests and the host (or the team), and returns bookingId, conferenceUrl, meetingUrl and manageUrl (cancel / reschedule). name/email default to the authenticated user — pass them to book for someone else. Requires authentication (anonymous bookings need a human bot-check).
get_booking_slotsaddedBookable times on someone’s WhenMeet.me booking link (whenmeet.me/@nickname[/slug]) — personal or team link. Returns the link (title, durationMin, required questions, team mode), the host’s timezone and slots[{start,end,othersFree,othersTotal}]. Only times and counts are ever exposed, never anyone’s calendar. Called with a token, othersFree/othersTotal also show which slots suit YOUR calendar and the optional guests (othersFree === othersTotal = good for everyone). Defaults to the next 14 days. No auth needed.
list_my_event_typesaddedYour own booking link and its link types: profile (nickname, timezone, weekly hours), publicUrl (whenmeet.me/@nickname), and eventTypes[] with url, duration, settings and — for team links — mode ("all" = everyone must be free, "any" = whoever is free, in turn) and members with their status. Zero-config: if you have a calendar connected but never opened /links, this provisions the default 30-minute link first (idempotent), so the link is live. Requires authentication.
set_manual_availabilitychangeddescriptionmeaning changedPublish 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).
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. Only one of YOUR addresses (account email, a connected calendar, a team address you joined; needs a Bearer PAT) goes live right away, for everyone — then the result is {ok, saved, free, busy} and the group heat-map updates immediately. For any other address nothing is published yet: the result is {ok: true, pending: true} and that person gets an email to confirm (confirmation emails are limited per day: 3 per address and 20 in total for your account; beyond that the call fails with rate_limited). To collect someone else's times, send them an ask-link instead (the picker's "Copy ask-link"). An anonymous caller must pass a Cloudflare Turnstile token in `turnstileToken` (only required when the server is configured with a Turnstile secret).
Full history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+dns-namespace +website +reachable +uptime-94% +updated-3d-ago -no-repository
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://whenmeet.me/mcp streamable-http | oauth2 AS: https://whenmeet.me | yes | 94% | 266 ms | – | 2026-10-19 |
book_slot | Book a time on someone’s WhenMeet.me booking link. startsAt must be a slot start from get_booking_slots. Writes the event to the host’s calendar (Google Meet / Teams link added automatically), emails invites with an ICS to you, your guests and the host (or the team), and returns bookingId, conferenceUrl, meetingUrl and manageUrl (cancel / reschedule). name/email default to the authenticated user — pass them to book for someone else. Requires authentication (anonymous bookings need a human bot-check). |
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>). Up to 50 participants; the start must be at most 60 days ahead (bad_window). Requires authentication. |
find_common_slotsread-only | 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; the window may end at most 60 days from now (bad_window). Up to 50 participants; reading other people’s connected calendars is limited to 30 new addresses per hour and 50 per day (lookup_limit), and each read is shown to the calendar owner. Requires authentication. |
get_booking_slotsread-only | Bookable times on someone’s WhenMeet.me booking link (whenmeet.me/@nickname[/slug]) — personal or team link. Returns the link (title, durationMin, required questions, team mode), the host’s timezone and slots[{start,end,othersFree,othersTotal}]. Only times and counts are ever exposed, never anyone’s calendar. Called with a token, othersFree/othersTotal also show which slots suit YOUR calendar and the optional guests (othersFree === othersTotal = good for everyone). Defaults to the next 14 days. No auth needed. |
get_manual_availabilityread-only | Read previously hand-marked free slots for an email within a window. |
get_meetingread-only | 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. |
get_meeting_availabilityread-only | 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. |
list_my_event_types | Your own booking link and its link types: profile (nickname, timezone, weekly hours), publicUrl (whenmeet.me/@nickname), and eventTypes[] with url, duration, settings and — for team links — mode ("all" = everyone must be free, "any" = whoever is free, in turn) and members with their status. Zero-config: if you have a calendar connected but never opened /links, this provisions the default 30-minute link first (idempotent), so the link is live. Requires authentication. |
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. |
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. Only one of YOUR addresses (account email, a connected calendar, a team address you joined; needs a Bearer PAT) goes live right away, for everyone — then the result is {ok, saved, free, busy} and the group heat-map updates immediately. For any other address nothing is published yet: the result is {ok: true, pending: true} and that person gets an email to confirm (confirmation emails are limited per day: 3 per address and 20 in total for your account; beyond that the call fails with rate_limited). To collect someone else's times, send them an ask-link instead (the picker's "Copy ask-link"). An anonymous caller must pass a Cloudflare Turnstile token in `turnstileToken` (only required when the server is configured with a Turnstile secret). |
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 (at most 10 suggestions per hour per meeting and email; beyond that rate_limited). 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). |
Schemas: list_tools.
{
"name": "me.whenmeet/scheduler",
"_meta": {
"io.modelcontextprotocol.registry/publisher-provided": {
"tools": [
"find_common_slots",
"create_meeting",
"get_meeting",
"get_meeting_availability",
"suggest_time",
"respond_to_suggestion",
"set_manual_availability",
"get_manual_availability",
"list_my_meetings",
"list_my_event_types",
"get_booking_slots",
"book_slot",
"list_my_bookings",
"cancel_booking",
"reschedule_booking"
],
"openapi": "https://whenmeet.me/openapi.json",
"serverCard": "https://whenmeet.me/.well-known/mcp.json",
"authorization": {
"type": "oauth2",
"scopes": [
"read",
"write"
],
"required": true,
"alsoAccepts": "Authorization: Bearer mn_… personal access token",
"protectedResourceMetadata": "https://whenmeet.me/.well-known/oauth-protected-resource/mcp"
},
"documentation": "https://whenmeet.me/docs#mcp",
"protocolVersion": "2025-06-18"
}
},
"title": "WhenMeet.me — group scheduling",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://whenmeet.me/mcp",
"type": "streamable-http"
}
],
"version": "1.1.0",
"websiteUrl": "https://whenmeet.me",
"description": "Group meeting scheduler — rank times everyone's free across Google & Outlook, book Meet/Teams."
}