Server definition
- Hash
- sha256:bbfcc3c76f9a6a61dfe5c8d76cf96d42b49569163077ce106c214acc3d4aaf41
- What it is
- What a remote MCP server returned when asked what it offers: 8 tools
The blob, as servednamed by its sha256
{
"instructions": "WhenMeet.me finds a meeting time that works for everyone across companies and\ncalendar providers (Google Calendar, Microsoft Outlook; others mark free\ntime by hand). Typical flow:\n1. find_common_slots with the participants' emails → ranked times when\n everyone is free (requires auth; data sources per participant are\n reported as self/manual/host). Each participant is filtered and scored\n in their OWN timezone; when no everyone-free time exists the ranker\n still returns the best \"compromise\" slots (allFree:false).\n2. create_meeting with the chosen slot → calendar event + Meet/Teams link\n + share URL (/m/<id>) that invitees receive by email.\n3. Anyone with the share URL can get_meeting, get_meeting_availability\n (aggregated group heat-map) and suggest_time; the host uses\n respond_to_suggestion to accept (moves the event) or decline.\n4. set_manual_availability publishes hand-marked free slots for people\n without a connectable calendar (e.g. Apple iCloud).\nAuthenticated tools need \"Authorization: Bearer mn_…\" — create a token at\nPOST /api/tokens while signed in. Times are unix milliseconds; tz is an\nIANA zone name.",
"tools": [
{
"description": "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.",
"inputSchema": {
"properties": {
"conference": {
"description": "Omit for no conference link.",
"enum": [
"meet",
"teams"
],
"type": "string"
},
"endsAt": {
"description": "unix ms",
"type": "number"
},
"participants": {
"items": {
"type": "string"
},
"type": "array"
},
"startsAt": {
"description": "unix ms",
"type": "number"
},
"title": {
"type": "string"
},
"tz": {
"description": "IANA zone used to format times in invite emails.",
"type": "string"
}
},
"required": [
"participants",
"startsAt",
"endsAt"
],
"type": "object"
},
"name": "create_meeting",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"durationMin": {
"description": "Meeting length. Default 30.",
"enum": [
15,
30,
45,
60
],
"type": "number"
},
"from": {
"description": "Window start, unix ms. Default: now.",
"type": "number"
},
"participants": {
"description": "Participant emails (the authenticated user is the host and should be included).",
"items": {
"type": "string"
},
"type": "array"
},
"to": {
"description": "Window end, unix ms. Default: now + 14 days.",
"type": "number"
},
"tz": {
"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.",
"type": "string"
}
},
"required": [
"participants"
],
"type": "object"
},
"name": "find_common_slots",
"outputSchema": null
},
{
"description": "Read previously hand-marked free slots for an email within a window.",
"inputSchema": {
"properties": {
"email": {
"type": "string"
},
"from": {
"type": "number"
},
"to": {
"type": "number"
}
},
"required": [
"email",
"from",
"to"
],
"type": "object"
},
"name": "get_manual_availability",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"meetingId": {
"type": "string"
}
},
"required": [
"meetingId"
],
"type": "object"
},
"name": "get_meeting",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"durationMin": {
"enum": [
15,
30,
45,
60
],
"type": "number"
},
"from": {
"description": "unix ms. Default: now.",
"type": "number"
},
"meetingId": {
"type": "string"
},
"to": {
"description": "unix ms. Default: now + 14 days.",
"type": "number"
},
"tz": {
"type": "string"
}
},
"required": [
"meetingId"
],
"type": "object"
},
"name": "get_meeting_availability",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"action": {
"enum": [
"accept",
"decline"
],
"type": "string"
},
"meetingId": {
"type": "string"
},
"suggestionId": {
"type": "string"
}
},
"required": [
"meetingId",
"suggestionId",
"action"
],
"type": "object"
},
"name": "respond_to_suggestion",
"outputSchema": null
},
{
"description": "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).",
"inputSchema": {
"properties": {
"email": {
"type": "string"
},
"freeSlots": {
"items": {
"properties": {
"end": {
"type": "number"
},
"start": {
"type": "number"
}
},
"required": [
"start",
"end"
],
"type": "object"
},
"type": "array"
},
"turnstileToken": {
"description": "Cloudflare Turnstile token; required for anonymous callers when a Turnstile secret is configured.",
"type": "string"
},
"windowFrom": {
"description": "unix ms",
"type": "number"
},
"windowTo": {
"description": "unix ms",
"type": "number"
}
},
"required": [
"email",
"windowFrom",
"windowTo",
"freeSlots"
],
"type": "object"
},
"name": "set_manual_availability",
"outputSchema": null
},
{
"description": "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).",
"inputSchema": {
"properties": {
"endsAt": {
"description": "unix ms",
"type": "number"
},
"meetingId": {
"type": "string"
},
"message": {
"type": "string"
},
"startsAt": {
"description": "unix ms",
"type": "number"
},
"suggestedBy": {
"description": "Email of the person proposing.",
"type": "string"
},
"turnstileToken": {
"description": "Cloudflare Turnstile token; required for anonymous callers when a Turnstile secret is configured.",
"type": "string"
}
},
"required": [
"meetingId",
"suggestedBy",
"startsAt",
"endsAt"
],
"type": "object"
},
"name": "suggest_time",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:bbfcc3c76f9a6a61dfe5c8d76cf96d42b49569163077ce106c214acc3d4aaf41 | sha256sum