Tempi

Find open times and book, reschedule or cancel meetings on anyone's Tempi link. No account needed.

Sollte ich dies verwenden

Qualität und Sicherheit

A
Qualität der Beschreibung
100%
Vollständigkeit des Schemas
94%
Qualität der Benennung
95%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~2,316Tokens (Tool-Definitionen)
~1.8 KBTypische Antwortgröße
Mittlere Auswirkung auf die Aufmerksamkeit (1.81% von 128k Kontext)

Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.

Installieren

Installation mit einem Klick

Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:

{
  "mcpServers": {
    "tempi": {
      "url": "https://meettempi.com/mcp"
    }
  }
}

Remote-Endpunkte

https://meettempi.com/mcpstreamable-http

Was es kann

Tool-Inventar

Tools (8)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟢get_public_profile(handle)

Takes a handle, the first path segment of a booking link (https://host/acme/demo → "acme"). Returns the person or team and their bookable event types, with duration, price and hosts. A handle from before a rename also works. Next: call get_available_slots with one of the event type slugs.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "handle": {
      "type": "string",
      "description": "1-40 lowercase letters, digits or dashes, starting and ending with a letter or digit",
      "pattern": "^[a-z0-9](?:[a-z0-9-]{0,38}[a-z0-9])?$"
    }
  },
  "required": [
    "handle"
  ],
  "additionalProperties": false
}
🟢get_available_slots(handle, slug, timezone, date, from, ...)

Returns the start times that can be booked, with the hosts' calendars, buffers and limits already applied. Pass `date` (YYYY-MM-DD in `timezone`) or `from` and `to` (ISO, at most 62 days apart). With neither, it covers the next 7 days. `days` groups the slots by date in `timezone` (default UTC). For new times for an existing booking, also pass its `bookingId` and `token`. Next: call create_booking (or reschedule_booking_as_invitee) with one of the `slots` values as `start`.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "handle": {
      "type": "string",
      "description": "1-40 lowercase letters, digits or dashes, starting and ending with a letter or digit",
      "pattern": "^[a-z0-9](?:[a-z0-9-]{0,38}[a-z0-9])?$"
    },
    "slug": {
      "type": "string",
      "description": "1-40 lowercase letters, digits or dashes, starting and ending with a letter or digit",
      "pattern": "^[a-z0-9](?:[a-z0-9-]{0,38}[a-z0-9])?$"
    },
    "timezone": {
      "type": "string",
      "description": "an IANA time zone such as \"America/New_York\""
    },
    "date": {
      "type": "string",
      "format": "date"
    },
    "from": {
      "type": "string",
      "format": "date-time"
    },
    "to": {
      "type": "string",
      "format": "date-time"
    },
    "bookingId": {
      "type": "string",
      "description": "a string at least 1 character(s) long",
      "title": "minLength(1)",
      "minLength": 1
    },
    "token": {
      "type": "string",
      "description": "a string at least 10 character(s) long",
      "title": "minLength(10)",
      "minLength": 10
    }
  },
  "required": [
    "handle",
    "slug"
  ],
  "additionalProperties": false
}
🟢check_series(handle, slug, start, every, count)

For event types with `repeatMax` (from get_public_profile): lists each meeting of a series that starts at `start` (one of the slots) and repeats `every` 1, 2 or 4 weeks at the same local time, and whether each is free. Book it with create_booking and `repeat` when `bookable` is true. A series is booked whole or not at all, and round robin gives every meeting to the same host.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "handle": {
      "type": "string",
      "description": "1-40 lowercase letters, digits or dashes, starting and ending with a letter or digit",
      "pattern": "^[a-z0-9](?:[a-z0-9-]{0,38}[a-z0-9])?$"
    },
    "slug": {
      "type": "string",
      "description": "1-40 lowercase letters, digits or dashes, starting and ending with a letter or digit",
      "pattern": "^[a-z0-9](?:[a-z0-9-]{0,38}[a-z0-9])?$"
    },
    "start": {
      "type": "string",
      "format": "date-time"
    },
    "every": {
      "$ref": "#/$defs/NumberFromString"
    },
    "count": {
      "$ref": "#/$defs/NumberFromString"
    }
  },
  "required": [
    "handle",
    "slug",
    "start",
    "every",
    "count"
  ],
  "$defs": {
    "NumberFromString": {
      "type": "string",
      "description": "a string to be decoded into a number"
    }
  },
  "additionalProperties": false
}
🔴create_booking(handle, slug, start, name, email, ...)

Books `start`, which must be one of the `slots` from get_available_slots. Free events are confirmed at once. Paid events return status=pending_payment and a `paymentUrl`. Give it to the human to pay before `holdExpiresAt`, or the slot is released. Once confirmed, the event is added to the host's calendar if they connected one, and the invitee gets its invitation. Keep `manageUrl` and `token`: they are the only way to view, reschedule or cancel later. 409 slot_unavailable means the time was just taken: fetch slots again.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "handle": {
      "type": "string",
      "description": "1-40 lowercase letters, digits or dashes, starting and ending with a letter or digit",
      "pattern": "^[a-z0-9](?:[a-z0-9-]{0,38}[a-z0-9])?$"
    },
    "slug": {
      "type": "string",
      "description": "1-40 lowercase letters, digits or dashes, starting and ending with a letter or digit",
      "pattern": "^[a-z0-9](?:[a-z0-9-]{0,38}[a-z0-9])?$"
    },
    "start": {
      "type": "string",
      "format": "date-time"
    },
    "name": {
      "allOf": [
        {
          "$ref": "#/$defs/Trim"
        }
      ],
      "description": "the invitee's full name"
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "timezone": {
      "type": "string",
      "description": "an IANA time zone such as \"America/New_York\""
    },
    "notes": {
      "type": "string",
      "description": "a string at most 2000 character(s) long",
      "title": "maxLength(2000)",
      "minLength": 0,
      "maxLength": 2000
    },
    "repeat": {
      "type": "object",
      "required": [
        "every",
        "count"
      ],
      "properties": {
        "every": {
          "type": "number",
          "enum": [
            1,
            2,
            4
          ],
          "description": "weeks between meetings: 1, 2 or 4"
        },
        "count": {
          "type": "integer",
          "description": "how many meetings, first included (2 up to the event type's repeatMax)",
          "title": "between(2, 52)",
          "minimum": 2,
          "maximum": 52
        }
      },
      "additionalProperties": false,
      "description": "book a series instead: `count` meetings, `every` 1, 2 or 4 weeks at the same local time, when the event type's repeatMax allows. All or nothing: check_series first"
    }
  },
  "required": [
    "handle",
    "slug",
    "start",
    "name",
    "email"
  ],
  "$defs": {
    "Trim": {
      "type": "string",
      "description": "a string that will be trimmed"
    }
  },
  "additionalProperties": false
}
🟢get_booking(id, token)

Returns a booking by its id and token (from create_booking or its manageUrl), with `changeableUntil`, `refundableUntil`, `canCancel` and `cancelReasonRequired`. For a series, `series` lists every meeting with its own manageUrl.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "a string at least 1 character(s) long",
      "title": "minLength(1)",
      "minLength": 1
    },
    "token": {
      "type": "string",
      "description": "a string at least 10 character(s) long",
      "title": "minLength(10)",
      "minLength": 10
    }
  },
  "required": [
    "id",
    "token"
  ],
  "additionalProperties": false
}
🟡reschedule_booking_as_invitee(id, token, start)

Moves a confirmed booking to `start` with the same hosts. Get valid times from get_available_slots with this `bookingId` and `token`. The calendar event is updated and its provider notifies attendees. Payment carries over. Not possible after `changeableUntil` (409 change_too_late).

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "a string at least 1 character(s) long",
      "title": "minLength(1)",
      "minLength": 1
    },
    "token": {
      "type": "string",
      "description": "a string at least 10 character(s) long",
      "title": "minLength(10)",
      "minLength": 10
    },
    "start": {
      "type": "string",
      "format": "date-time"
    }
  },
  "required": [
    "id",
    "token",
    "start"
  ],
  "additionalProperties": false
}
🔴cancel_booking_as_invitee(id, token, reason, following)

Cancels a booking by its id and token. The event is removed from the host's calendar. Paid bookings cancelled before `refundableUntil` are refunded in full. Later cancellations get no refund. The event type sets the rules, which get_booking shows: no changes after `changeableUntil` (409 change_too_late), no cancelling when `canCancel` is false (409 cancel_not_allowed, reschedule instead), and a `reason` when `cancelReasonRequired` is true (422 reason_required).

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "a string at least 1 character(s) long",
      "title": "minLength(1)",
      "minLength": 1
    },
    "token": {
      "type": "string",
      "description": "a string at least 10 character(s) long",
      "title": "minLength(10)",
      "minLength": 10
    },
    "reason": {
      "type": "string",
      "description": "a string at most 500 character(s) long",
      "title": "maxLength(500)",
      "minLength": 0,
      "maxLength": 500
    },
    "following": {
      "type": "boolean",
      "description": "for a series: also cancel every later meeting"
    }
  },
  "required": [
    "id",
    "token"
  ],
  "additionalProperties": false
}
⚪join_waitlist(email, name, note)

Requests access to host on Tempi (create event types, share a booking page). Not needed to book meetings, since booking pages are public. Returns the status: pending, approved (sign in at APP_URL/login), rejected, or open (no waitlist, sign in directly). Joining again with the same email returns the current status.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "format": "email"
    },
    "name": {
      "type": "string",
      "description": "a string at most 100 character(s) long",
      "title": "maxLength(100)",
      "minLength": 0,
      "maxLength": 100
    },
    "note": {
      "type": "string",
      "description": "anything the admins should know, e.g. what you want to use Tempi for",
      "title": "maxLength(1000)",
      "minLength": 0,
      "maxLength": 1000
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false
}

Community

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet8 Tools