protogrid

Search / me.whenmeet/scheduler

WhenMeet.me — group scheduling

R2· OAuth, once

Group meeting scheduler — rank times everyone's free across Google & Outlook, book Meet/Teams.

v1.1.0 · active · website · descriptor JSON · versions

An agent can connect after a one-time OAuth consent by a human.Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.
Quality70needs work
Trust82of 100
Uptime, 30 days94%
Latency p50266 ms

Connect

8 clients · secrets stay placeholders
{
  "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

Quality 70 / 100needs work

protocoln/a · weight 25
  • n/a
    protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)
authorization83 · weight 15
  • pass
    auth.prmProtected Resource Metadata (RFC 9728) published
  • pass
    auth.as_metadataauthorization server metadata reachable
  • warn
    auth.cimdonly Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMD
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations11 of 11 tools declare readOnlyHint or destructiveHint
  • fail
    tools.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); …
  • pass
    tools.token_costabout 2,571 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability25 · weight 15
  • warn
    stability.changes7 tool changes in 30 days
  • fail
    stability.rug_pull1 tools kept their name but changed most of their description in 30 days; review before trusting them
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

11 tools, about 2,571 tokens to load them all · tool set 43a61e71af3c · tools last changed 2026-10-14 · checked 2026-10-19 10:20 UTC

Tool changes

  • suggest_timechangeddescription
    before

    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).

    after · 82% of words in common

    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 schema
    before

    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.

    after · 68% of words in common

    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 schema
    before

    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.

    after · 72% of words in common

    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_slotadded

    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).

  • get_booking_slotsadded

    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.

  • list_my_event_typesadded

    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.

  • set_manual_availabilitychangeddescriptionmeaning changed
    before

    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).

    after · 43% of words in common

    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.

Trust 82 / 100

no-repository
provenance55
liveness97
freshness100
hygiene80

+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.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://whenmeet.me/mcp streamable-httpoauth2 AS: https://whenmeet.meyes94%266 ms–2026-10-19

Tools (11)

book_slotBook 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_meetingConfirm 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-onlyRank 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-onlyBookable 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-onlyRead previously hand-marked free slots for an email within a window.
get_meetingread-onlyRead 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-onlyAggregated 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_typesYour 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_suggestionAccept 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_availabilityPublish 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_timePropose 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.

Official server.json
{
  "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."
}