_ registry / mcp streamable-http · checked 2h ago

tempi

https://meettempi.com

Registry code: ab0bf9b27e3fde2c

api record

Book meetings with people and teams on Tempi: get_public_profile → get_available_slots → create_booking. A booking link works wherever a handle or slug is asked for. Pass the user's time zone as `timezone` (an IANA id, or an abbreviation like EST) and show them the local `times` and `when` the results give, not the UTC values. Keep the returned manageUrl: it is needed to view, reschedule or cancel. Paid events return a paymentUrl the user must open. To manage the user's own Tempi account, connect to /mcp/account (OAuth sign-in).

endpoint
https://meettempi.com/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is tempi live?
Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
Is tempi free to use?
Yes — the hub reached it with no key and no payment.
What tools does tempi have?
8 tools: check_series, get_available_slots, get_public_profile, create_booking, get_booking, reschedule_booking_as_invitee, cancel_booking_as_invitee, join_waitlist.
Is tempi safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.6%

90 days 99.5%· all time 99.5%

latency
662ms

last good check

priced tools
0

of 8 tools

_ answered our checks, 90 days 384 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • degraded → live
  • live → degraded· timeout after 20000ms
_ what it is for
used for
  • find available meeting slots
  • book a meeting
  • reschedule a booking
  • cancel a booking
takes → gives
text → data
tools
4 reads4 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

inferred, not observed

Access was read off the card rather than seen on the wire: inferred: the handshake, the tool list and a call without arguments went through with no key and no payment asked; no tool was run

_ what it can do 8 tools
8 never probed 0 of 8 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • check_series reads unknown 18h ago

    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 host's clock time, and whether each is free. Pass the invitee's `timezone` to get each meeting's `when` in it: where clocks change on other dates than the host's, some meetings move for the invitee, and `message` says which. 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "handle",
        "slug",
        "start",
        "every",
        "count"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "description": "an event type slug from get_public_profile (\"demo\" in meettempi.com/acme/demo), or the whole link"
        },
        "count": {
          "anyOf": [
            {
              "type": "integer",
              "title": "between(2, 52)",
              "maximum": 52,
              "minimum": 2,
              "description": "how many meetings, first included (2 up to the event type's repeatMax)"
            },
            {
              "type": "string",
              "description": "a string to be decoded into a number"
            }
          ],
          "description": "how many meetings, first included (2 up to the event type's repeatMax)"
        },
        "every": {
          "anyOf": [
            {
              "enum": [
                1,
                2,
                4
              ],
              "type": "number",
              "description": "weeks between meetings: 1, 2 or 4"
            },
            {
              "type": "string",
              "description": "a string to be decoded into a number"
            }
          ],
          "description": "weeks between meetings: 1, 2 or 4"
        },
        "start": {
          "type": "string",
          "format": "date-time",
          "description": "one of the `slots` values from get_available_slots, as given (ISO in UTC)"
        },
        "handle": {
          "type": "string",
          "description": "a handle, the first part of a booking link (\"acme\" in meettempi.com/acme/demo), or the whole link"
        },
        "timezone": {
          "type": "string",
          "description": "the invitee's time zone, an IANA id like America/New_York or an abbreviation like EST: each meeting's `when` is in it"
        }
      },
      "additionalProperties": false
    }
    arguments 64 lines
  • get_available_slots reads unknown 18h ago

    Returns the start times that can be booked, with the hosts' calendars, buffers and limits already applied. Pass the invitee's `timezone` and either `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`, and `times` gives each slot as a local time to show people. People can book up to `bookableUntil`. When the range has no open times, `next` is the next one. When `timezone` was an abbreviation that names more than one zone (CST, IST, BST), `timezoneNote` says which one was used: check it with the person. 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`.

    mcp-tool

    {
      "type": "object",
      "required": [
        "handle",
        "slug",
        "timezone"
      ],
      "properties": {
        "to": {
          "type": "string",
          "format": "date-time",
          "description": "end of the range, ISO with an offset"
        },
        "date": {
          "type": "string",
          "format": "date",
          "description": "one day to look at, as YYYY-MM-DD in `timezone`"
        },
        "from": {
          "type": "string",
          "format": "date-time",
          "description": "start of the range, ISO with an offset"
        },
        "slug": {
          "type": "string",
          "description": "an event type slug from get_public_profile (\"demo\" in meettempi.com/acme/demo), or the whole link"
        },
        "token": {
          "type": "string",
          "description": "the token from create_booking, or the manageUrl"
        },
        "handle": {
          "type": "string",
          "description": "a handle, the first part of a booking link (\"acme\" in meettempi.com/acme/demo), or the whole link"
        },
        "timezone": {
          "type": "string",
          "description": "the invitee's time zone, an IANA id like America/New_York or an abbreviation like EST: days, dates and times are in it"
        },
        "bookingId": {
          "type": "string",
          "description": "the booking id from create_booking, or its manageUrl"
        }
      },
      "additionalProperties": false
    }
    arguments 46 lines
  • get_public_profile reads unknown 18h ago

    Takes a handle, the first path segment of a booking link (https://host/acme/demo → "acme"), or the link itself. Returns the person or team and their bookable event types, with duration, price, and hosts with their time zones (`hostTimezones`, so you can say what time a slot is for them). A handle from before a rename also works. Next: call get_available_slots with one of the event type slugs.

    mcp-tool

    {
      "type": "object",
      "required": [
        "handle"
      ],
      "properties": {
        "handle": {
          "type": "string",
          "description": "a handle, the first part of a booking link (\"acme\" in meettempi.com/acme/demo), or the whole link"
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • create_booking changes data unknown never probed

    Books `start`, which must be one of the `slots` from get_available_slots. Free events are confirmed at once, unless the event type has `requiresApproval`: then it's a request (status=pending_approval) that holds the time until a host approves or declines it, and the invitee hears either way by email. Nobody answering by its start (`holdExpiresAt`) lets it lapse. Tell the human it isn't confirmed yet. 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 a confirmation email with a calendar file (.ics). Keep `manageUrl` and `token`: they are the only way to view, reschedule or cancel later. 409 slot_unavailable says why the time can't be booked and lists the `nearest` open times. The result's `when` is the start in the invitee's time zone, to tell them.

    mcp-tool

    {
      "type": "object",
      "required": [
        "handle",
        "slug",
        "start",
        "name",
        "email",
        "timezone"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "the invitee's full name"
        },
        "slug": {
          "type": "string",
          "description": "an event type slug from get_public_profile (\"demo\" in meettempi.com/acme/demo), or the whole link"
        },
        "cover": {
          "type": "string",
          "title": "maxLength(40)",
          "maxLength": 40,
          "description": "leave it out: the id of the painting the booking page showed, when the event type shows a different one each booking (cover \"hand\", \"light\" or \"still\"), so the booking keeps it. Anything else is ignored, and Tempi picks one"
        },
        "email": {
          "type": "string",
          "format": "email",
          "description": "the invitee's email address, which gets the confirmation and its calendar file"
        },
        "notes": {
          "type": "string",
          "title": "maxLength(2000)",
          "maxLength": 2000,
          "minLength": 0,
          "description": "anything the invitee wants the host to know"
        },
        "phone": {
          "type": "string",
          "title": "maxLength(40)",
          "maxLength": 40,
          "minLength": 0,
          "description": "the invitee's phone number with its country code, like +1 415 555 0134: required when the event type is a phone call (whereKind phone on get_public_profile), where the host calls them"
        },
        "start": {
          "type": "string",
          "format": "date-time",
          "description": "one of the `slots` values from get_available_slots, as given (ISO in UTC)"
        },
        "handle": {
          "type": "string",
          "description": "a handle, the first part of a booking link (\"acme\" in meettempi.com/acme/demo), or the whole link"
        },
        "repeat": {
          "type": "object",
          "required": [
            "every",
            "count"
          ],
          "properties": {
            "count": {
              "type": "integer",
              "title": "between(2, 52)",
              "maximum": 52,
              "minimum": 2,
              "description": "how many meetings, first included (2 up to the event type's repeatMax)"
            },
            "every": {
              "enum": [
                1,
                2,
                4
              ],
              "type": "number",
              "description": "weeks between meetings: 1, 2 or 4"
            }
          },
          "description": "book a series instead: `count` meetings, `every` 1, 2 or 4 weeks at the host's clock time, when the event type's repeatMax allows. All or nothing: check_series first. The result's `series.meetings` give each start as `when` in the invitee's time zone, and `series.clockNote` says when that moves",
          "additionalProperties": false
        },
        "timezone": {
          "type": "string",
          "description": "the invitee's time zone, an IANA id like America/New_York or an abbreviation like EST: their emails and reminders show times in it"
        }
      },
      "additionalProperties": false
    }
    arguments 87 lines
  • get_booking reads unknown never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "id",
        "token"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "the booking id from create_booking, or its manageUrl"
        },
        "token": {
          "type": "string",
          "description": "the token from create_booking, or the manageUrl"
        }
      },
      "additionalProperties": false
    }
    arguments 18 lines
  • reschedule_booking_as_invitee changes data unknown never probed

    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). A request (status=pending_approval) can’t be moved: cancel it and request another time.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id",
        "token",
        "start"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "the booking id from create_booking, or its manageUrl"
        },
        "start": {
          "type": "string",
          "format": "date-time",
          "description": "one of the `slots` values from get_available_slots, as given (ISO in UTC)"
        },
        "token": {
          "type": "string",
          "description": "the token from create_booking, or the manageUrl"
        }
      },
      "additionalProperties": false
    }
    arguments 24 lines
  • cancel_booking_as_invitee changes data unknown never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "id",
        "token"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "the booking id from create_booking, or its manageUrl"
        },
        "token": {
          "type": "string",
          "description": "the token from create_booking, or the manageUrl"
        },
        "reason": {
          "type": "string",
          "title": "maxLength(500)",
          "maxLength": 500,
          "minLength": 0,
          "description": "why the invitee cancels, sent to the host"
        },
        "following": {
          "type": "boolean",
          "description": "for a series: also cancel every later meeting"
        }
      },
      "additionalProperties": false
    }
    arguments 29 lines
  • join_waitlist changes data unknown never probed

    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 to the Tempi web app), rejected, or open (no waitlist, sign in directly). Joining again with the same email returns the current status.

    mcp-tool

    {
      "type": "object",
      "required": [
        "email"
      ],
      "properties": {
        "ref": {
          "type": "string",
          "pattern": "^[a-z0-9_-]{1,32}$",
          "description": "a short source tag of lowercase letters, digits, - or _, like \"embed\""
        },
        "name": {
          "type": "string",
          "title": "maxLength(100)",
          "maxLength": 100,
          "minLength": 0,
          "description": "the person’s name (at most 100 characters)"
        },
        "note": {
          "type": "string",
          "title": "maxLength(1000)",
          "maxLength": 1000,
          "minLength": 0,
          "description": "anything the admins should know, e.g. what you want to use Tempi for"
        },
        "email": {
          "type": "string",
          "format": "email",
          "description": "an email address"
        }
      },
      "additionalProperties": false
    }
    arguments 33 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id ab0bf9b27e3fde2c.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/ab0bf9b27e3fde2c/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/ab0bf9b27e3fde2c/badge.svg)](https://brick.blue/agent/ab0bf9b27e3fde2c?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.