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

# MCP server

<View title="macOS" icon="apple">
  `tuple mcp` runs a [Model Context Protocol](https://modelcontextprotocol.io) server over stdin/stdout. It exposes Tuple's call, contact, screen, transcription, notification, and past-call transcript capabilities to AI coding agents such as Claude Code, Claude Desktop, and OpenAI Codex.

  The MCP server is a sibling of the [`tuple` CLI](/cli/commands): both require the Tuple desktop app to be running and signed in.

  ## Install with a coding agent

  Run `tuple mcp install` and pick an agent, or specify one directly:

  ```bash theme={null}
  tuple mcp install                       # interactive picker
  tuple mcp install claude                # Claude Code CLI
  tuple mcp install claude-desktop        # Claude Desktop app
  tuple mcp install codex                 # OpenAI Codex
  ```

  You can install Tuple in multiple agents at once:

  ```bash theme={null}
  tuple mcp install claude codex
  ```

  By default the server is registered as `tuple`. Pass `--name` to use a different identifier in your agent config.

  Each install command writes to that agent's standard config:

  | Agent            | Config file                              |
  | ---------------- | ---------------------------------------- |
  | `claude`         | `~/.claude.json`                         |
  | `claude-desktop` | Claude Desktop's per-OS config directory |
  | `codex`          | `~/.codex/config.toml`                   |

  Restart the agent after installing.

  ## Tools

  Once installed, the agent can call these tools. Names mirror the CLI commands.

  ### State and contacts

  | Tool                                      | What it does                                                                                                                                                                                                                                                                                                                                                    |
  | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | `get_state`                               | Bounded orientation summary: `in_call`, normalized `call`, user identity, contact and room counts (with a capped sample of online favorites), pending invites, and connection status. A `see` map points at the entity tools (`list_contacts`, `list_rooms`, `get_active_call`, `get_current_user`) for full drill-down. Constant-size regardless of team size. |
  | `get_current_user`                        | Identity of the authenticated user (id, email, full name, short name). Use instead of `get_state` when you only need to know who is logged in.                                                                                                                                                                                                                  |
  | `list_contacts`                           | List or search contacts. Optional `query`, `status` (`online`/`busy`/`offline`, with `available` as a synonym for `online`), `kind` (`teammate`/`external`), `favorited`, and `recent` filter params compose with AND.                                                                                                                                          |
  | `favorite_contact` / `unfavorite_contact` | Pin or unpin a contact.                                                                                                                                                                                                                                                                                                                                         |
  | `remove_contact`                          | Remove a contact (destructive; agents prompt to confirm).                                                                                                                                                                                                                                                                                                       |
  | `invite_contact`                          | Send a Tuple invite by email (mutating; agents prompt to confirm).                                                                                                                                                                                                                                                                                              |

  ### Calls

  | Tool                                     | What it does                                     |
  | ---------------------------------------- | ------------------------------------------------ |
  | `start_call`                             | Start a 1:1 call with a contact.                 |
  | `join_call`                              | Join a contact's active call or a room URL/slug. |
  | `end_call`                               | Leave the active call.                           |
  | `mute` / `unmute`                        | Mute or unmute your microphone.                  |
  | `add_participant` / `remove_participant` | Manage participants in the active call.          |
  | `capture_screen`                         | Return a JPEG of the currently shared screen.    |

  ### Rooms

  | Tool                                | What it does                                                                                              |
  | ----------------------------------- | --------------------------------------------------------------------------------------------------------- |
  | `list_rooms`                        | List personal and team rooms. Supports kind, occupied, favorite, member-detail, and result-limit filters. |
  | `join_room`                         | Join a room by slug or URL without resolving the argument as a contact.                                   |
  | `favorite_room` / `unfavorite_room` | Pin or unpin a room.                                                                                      |
  | `create_room`                       | Create a team room.                                                                                       |

  ### Transcription and notifications

  | Tool                                         | What it does                                                                                              |
  | -------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
  | `start_transcription` / `stop_transcription` | Toggle transcription for a call.                                                                          |
  | `get_transcription`                          | Return transcription segments plus human-readable transcript text.                                        |
  | `get_transcription_events`                   | Return structured lifecycle events for a call.                                                            |
  | `notify_user`                                | Post a fire-and-forget notice (title, body, sender).                                                      |
  | `request_user_decision`                      | Post a yes/no card (title, body, sender, optional accept/reject labels) and block until the user answers. |
  | `list_notifications`                         | Get the history of notification events for a call.                                                        |
  | `cancel_notification`                        | Withdraw a card the agent posted earlier.                                                                 |

  ### Stored transcripts (past calls)

  These tools query the local transcript database of past transcribed calls. They work without an active call. See [Searching past calls](/pairing-with-tuple/searching-past-calls) for the underlying CLI.

  | Tool                   | What it does                                                                                   |
  | ---------------------- | ---------------------------------------------------------------------------------------------- |
  | `transcription_search` | Full-text search across past call transcripts, with filters and optional conversation context. |
  | `transcription_list`   | List past recorded calls, newest first, with dates, participants, and transcript sizes.        |
  | `transcription_show`   | Return a past call's full transcript across all its recording sessions.                        |
  | `transcription_export` | Write past call transcripts to disk as Markdown, text, or NDJSON.                              |
  | `delete_stored_call`   | Permanently delete a stored call's recordings, transcript, and events.                         |

  Destructive and mutating tools (`remove_contact`, `invite_contact`, `end_call`, `delete_stored_call`, etc.) carry MCP annotations that drive the client's confirmation prompt — the user approves them at call time.

  ## Prompts

  The server also registers a small set of [MCP prompts](https://modelcontextprotocol.io/specification/server/prompts). MCP-aware agents surface these as slash commands — for example, Claude Code shows them under `/tuple:<name>` once Tuple is installed.

  | Slash command            | Arguments                                                         | What it does                                                                                                                                                                                                                                                                                             |
  | ------------------------ | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | `/tuple:connect`         | `call_id` (defaults to `current`), `tail` (default `100`)         | Drop the agent into a live Tuple call as a silent sidekick. Returns recent lifecycle events and the trailing transcript so the agent can join mid-call without re-reading the whole history, plus instructions for following the unified stream, capturing the shared screen, and knowing when to speak. |
  | `/tuple:summarize_call`  | `call_id` (defaults to `current`)                                 | Pull the current call's full transcript and events and ask the agent for a structured summary: key discussion points, decisions, action items, and open follow-ups.                                                                                                                                      |
  | `/tuple:find_discussion` | `topic` (required, FTS5 syntax), `participant`, `after`, `before` | Search past recorded calls for a topic and synthesize where, when, and by whom it was discussed, with conversation excerpts around each match.                                                                                                                                                           |

  ### `/tuple:connect`

  Use `/tuple:connect` from inside an MCP-aware agent (Claude Code, Claude Desktop, Codex, or anything else that renders MCP prompts as slash commands) when you're already on a Tuple call and want the agent to silently follow along. The returned prompt:

  * Subscribes the agent to the unified events + transcript stream so it wakes on signal, not on a timer.
  * Maps participant IDs to names with `tuple state`.
  * Teaches the agent when to speak (direct address, terminal input, call end, mid-call checkpoint) and when to stay quiet.
  * Embeds the last `tail` lifecycle events and transcript lines so a mid-call join doesn't replay the whole history.

  If you'd rather launch a new agent process onto the call from your shell — instead of invoking it from an already-running agent — use [`tuple connect`](/cli/connect), which builds the same context and execs the harness for you.

  ```text theme={null}
  /tuple:connect
  /tuple:connect tail=200
  /tuple:connect call_id=01HFE… tail=50
  ```

  ## Resources

  The server also exposes a set of [subscribable MCP resources](https://modelcontextprotocol.io/specification/server/resources). Agents can read them once for a snapshot, or subscribe for live updates.

  | URI                                                   | Content                                                                                                                                                                    |
  | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | `tuple://state`                                       | Full app state (current user, current call, contacts, rooms, websocket). Subscribable. This is the full-payload surface — `get_state` returns the bounded summary instead. |
  | `tuple://call/{callId}/transcription`                 | NDJSON transcription segments for a call. Subscribable.                                                                                                                    |
  | `tuple://call/{callId}/transcription.json`            | Structured JSON snapshot of the same segments.                                                                                                                             |
  | `tuple://call/{callId}/events`                        | NDJSON transcription lifecycle events. Subscribable.                                                                                                                       |
  | `tuple://call/{callId}/events.json`                   | Structured JSON snapshot of the events.                                                                                                                                    |
  | `tuple://call/{callId}/stream`                        | Merged NDJSON of events and transcript text. Subscribable.                                                                                                                 |
  | `tuple://call/{callId}/stream.json`                   | Structured JSON snapshot of the merged stream.                                                                                                                             |
  | `tuple://call/{callId}/notifications`                 | NDJSON notification events. Subscribable.                                                                                                                                  |
  | `tuple://call/{callId}/notifications.json`            | Structured JSON snapshot of notifications.                                                                                                                                 |
  | `tuple://transcription/calls`                         | Index of past recorded calls (formatted text).                                                                                                                             |
  | `tuple://transcription/calls.json`                    | Structured JSON snapshot of the past-call index.                                                                                                                           |
  | `tuple://transcription/call/{callId}/transcript`      | Full transcript of a past recorded call (formatted text).                                                                                                                  |
  | `tuple://transcription/call/{callId}/transcript.json` | Structured JSON snapshot of the past-call transcript.                                                                                                                      |

  Use `current` as `{callId}` to target the active call. Subscriptions deliver `ResourceUpdated` notifications when data changes; clients then re-read the resource for the new snapshot. The `tuple://transcription/...` resources are read-on-demand snapshots (not subscribable); the server also surfaces the most recent past calls as concrete, human-titled `transcription-…` resources so clients can attach one as context.
</View>
