Endpoints: 28,729MCP servers: 18,414Payout addresses: 2,071Paid calls: 1,562Letters: 14Defects: 1,336counted 4 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:bbfcc3c76f9a6a61dfe5c8d76cf96d42b49569163077ce106c214acc3d4aaf41 | sha256sum