> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coffeechats.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Thank-you send tool

> The one tool that proposes sending a thank-you email you already drafted, and waits until you read the exact message in a browser and approve it.

This tool proposes sending a thank-you email you already drafted, and waits until you read the exact message in a browser and approve it. It needs the permission `mail:send`, which you grant on the Authorize access page when you connect.

This page is generated from the connector's tool catalogue. It describes 1 tool. Every tool reads or writes only your own account.

## Permissions this page needs

* `mail:send`: Send a thank-you email you already drafted, to the address stored on the contact linked to that meeting, when you read the exact message and approve it, and send one stored outreach draft you already wrote, and queue a checked table of your own outreach drafts

The [permissions reference](/mcp/scopes.md) lists every permission you can grant.

## `meeting_thank_you_send`

Your agent host shows this tool as "Propose sending a thank-you email".

What this changes: Propose sending one thank-you email the authenticated student has already drafted for a meeting, to the one address stored on the contact linked to that meeting, at a time within the next forty-eight hours.

Nothing is sent until the student reads the exact message in a browser and approves it, and this tool can never name a different recipient or change the text.

Permissions: This tool needs `mail:send`, which the Authorize access page describes as "Send a thank-you email you already drafted, to the address stored on the contact linked to that meeting, when you read the exact message and approve it, and send one stored outreach draft you already wrote, and queue a checked table of your own outreach drafts".

Risk: `consequential`. This tool cannot change anything on its own. It proposes the change, and nothing happens until you open the Coffee Chats page it points to and approve exactly what is shown.

### Input

The agent sends one object, and the table below is that object exactly as the connector publishes it. The connector accepts the object in one of these 2 forms and refuses any mixture of them. A published schema cannot state that rule, which is why the Required column reads `no` on every property and why each form is written out under the table. Within a form, every property the form does not name is refused.

| Property | Type | Required | Bounds |
| - | - | - | - |
| `idempotencyKey` | string | no | 16 to 128 characters |
| `meetingId` | string | no | pattern `^[a-f0-9]{24}$` |
| `operationId` | string | no | pattern `^[a-f0-9]{24}$` |
| `sendAt` | string | no | pattern `^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$` |

#### Form 1, sending `idempotencyKey`, `meetingId`

Send `idempotencyKey` and `meetingId`. They are required in this form. `sendAt` may be sent beside them, and nothing else may be.

#### Form 2, sending `operationId`

Send `operationId`. It is required in this form. No other property is accepted with it.

### Example calls

```json meeting_thank_you_send input form 1 theme={"system"}
{
  "idempotencyKey": "example-idempotency-key-0010",
  "meetingId": "0123456789abcdef01234567"
}
```

```json meeting_thank_you_send input form 2 theme={"system"}
{
  "operationId": "0123456789abcdef01234567"
}
```

### Result

A result is never larger than 4,096 bytes.

This tool's result takes one of these 6 forms, and one call returns exactly one of them. The field named beside each form below says which one you are looking at. Open a form to read its top-level fields.

> **Shape 1, where tag is completed**
>
> ```json Top-level fields theme={"system"}
> [
>   "operationId",
>   "operationStatus",
>   "result",
>   "scenario",
>   "tag"
> ]
> ```

> **Shape 2, where tag is requires\_confirmation**
>
> ```json Top-level fields theme={"system"}
> [
>   "actionStatus",
>   "handoff",
>   "operationId",
>   "scenario",
>   "tag"
> ]
> ```

> **Shape 3, where tag is accepted**
>
> ```json Top-level fields theme={"system"}
> [
>   "operationId",
>   "operationStatus",
>   "scenario",
>   "tag"
> ]
> ```

> **Shape 4, where status is failed**
>
> ```json Top-level fields theme={"system"}
> [
>   "error",
>   "operationId",
>   "scenario",
>   "status"
> ]
> ```

> **Shape 5, where status is cancelled**
>
> ```json Top-level fields theme={"system"}
> [
>   "error",
>   "operationId",
>   "scenario",
>   "status"
> ]
> ```

> **Shape 6, where status is uncertain**
>
> ```json Top-level fields theme={"system"}
> [
>   "error",
>   "operationId",
>   "scenario",
>   "status"
> ]
> ```

### The result may carry a retry hint

A call can be accepted and still ask the agent to come back later. When that happens the result is an accepted result and not a failure, and it carries a hint beside it holding one of these codes and a delay in milliseconds. Nothing has gone wrong and nothing has been written yet.

| Code | What it means |
| - | - |
| `PERMIT_BACKPRESSURE` | Too much work is already running on this connection. The agent should wait for the stated delay and call the tool again. |
| `PERMIT_CONTENTION` | Another call was holding the same slot. The agent should wait for the stated delay and call the tool again. |

### Errors

A call that does not succeed carries one of these codes.

| Code | What it means |
| - | - |
| `ACTION_DENIED` | Either you declined this review request, or the connection was no longer allowed to make the change when Coffee Chats came to apply it. Nothing was written. |
| `ACTION_EXPIRED` | The review request ran out of time, either before you decided or before Coffee Chats could apply it. Nothing was written. |
| `NOT_APPLIED` | Coffee Chats stopped before writing anything. Your data is exactly as it was. |
| `OPERATION_CANCELLED` | The connection was revoked before the change started, so nothing was written. |
| `OUTCOME_UNKNOWN` | Coffee Chats cannot prove whether the change was written and will not guess. Open your Coffee Chats page and look before you decide what to do. Do not ask the agent to retry with a new key, because that could apply the change twice. |
| `SERVICE_UNAVAILABLE` | Coffee Chats could not do the work just now and wrote nothing. Try again later. |
| `VERSION_CONFLICT` | The page changed after the agent read it, so nothing was written. Ask the agent to read the page again and propose the change from what is there now. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.