# Riverside MCP tools

> Every Riverside MCP tool on the Cotlet server: tool names, input schemas, a tools/call example and an example result for each tool.

Source: https://cotlet.dev/docs/mcp/riverside

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

12 tools for Riverside on the Cotlet MCP server. Your agent picks them from tools/list.

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your own Riverside account (host, account owner, admin, director or editor, depending on the call)
- Integration page: https://cotlet.dev/integrations/riverside-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `riverside_list_studios` | read | Your studios with name, recording type and the studio link. |
| `riverside_list_sessions` | read | Sessions from the studio Planner, with time, time zone and invited people. |
| `riverside_get_invite_links` | read | The studio links to share with a guest, a producer or an audience. |
| `riverside_list_recordings` | read | Recordings in your projects, newest first, with duration, participants and upload status. |
| `riverside_get_recording` | read | One recording with its date, duration and each participant's tracks, with type and upload status. |
| `riverside_get_transcript` | read | The transcript of a recording with speaker names and timestamps. |
| `riverside_download_tracks` | read | Download links for the separate track of each participant in a recording. |
| `riverside_create_studio` | write | Create a new studio for a show. |
| `riverside_schedule_session` | write | Add a session to the studio Planner and email the people you invite. |
| `riverside_update_session` | write | Rename or reschedule a session, or change who is invited. |
| `riverside_invite_guest` | write | Email a studio invite for a scheduled session to a guest, producer or audience member. |
| `riverside_cancel_session` | write | Remove a scheduled session from the Planner. Recordings already made are kept. |

## List studios

MCP tool: `riverside_list_studios`

Access: read.

Returns every studio in your account, the ones you own and the ones you were added to. Use studio_id from each item in the other calls. Recording type is audio and video or audio only, as set in the studio.

### Parameters

No parameters.

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_list_studios",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "studios": [
      {
        "studio_id": "std_8f2k41",
        "name": "The Product Hour",
        "recording_type": "audio_video",
        "studio_url": "https://riverside.com/studio/the-product-hour"
      },
      {
        "studio_id": "std_2m9c07",
        "name": "Founders Q&A",
        "recording_type": "audio_only",
        "studio_url": "https://riverside.com/studio/founders-qa"
      }
    ]
  },
  "isError": false
}
```

## List sessions

MCP tool: `riverside_list_sessions`

Access: read.

Lists scheduled sessions in start order, soonest first. Each item has the invited guests, producers and audience members with their roles. Pass session_id to update_session, invite_guest or cancel_session.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `studio_id` | string | no | Only this studio. Default: all studios. |
| `from` | date | no | Sessions on or after this date. Default: today. |
| `to` | date | no | Sessions on or before this date. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_list_sessions",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "sessions": [
      {
        "session_id": "ses_3vq9x7",
        "studio_id": "std_8f2k41",
        "name": "Episode 42: Pricing your first product",
        "start": "2026-10-15T15:00:00+01:00",
        "end": "2026-10-15T16:00:00+01:00",
        "invited": [
          {
            "email": "guest@example.com",
            "role": "guest"
          }
        ]
      }
    ],
    "next_cursor": null
  },
  "isError": false
}
```

## Get invite links

MCP tool: `riverside_get_invite_links`

Access: read.

Returns the studio link for each role. Guest and producer links let people join the studio; the audience link works only while audience public access is turned on in the studio. A link you share yourself does not expire, unlike the link in an invite email.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `studio_id` | string | yes | Studio ID from list_studios. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_get_invite_links",
    "arguments": {
      "studio_id": "studio_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "studio_id": "std_8f2k41",
    "links": {
      "guest": "https://riverside.com/studio/the-product-hour?t=guest-token",
      "producer": "https://riverside.com/studio/the-product-hour?t=producer-token",
      "audience": null
    }
  },
  "isError": false
}
```

## List recordings

MCP tool: `riverside_list_recordings`

Access: read.

Lists recordings across your studios, newest first. Filter by studio or by date to find the latest episode. Upload status shows whether each participant's files are fully uploaded. Pass recording_id to get_recording, get_transcript and download_tracks.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `studio_id` | string | no | Only this studio. Default: all studios. |
| `since` | date | no | Only recordings made on or after this date. |
| `limit` | integer | no | 1 to 50. Default: 20. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_list_recordings",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "recordings": [
      {
        "recording_id": "rec_71d3ab",
        "studio_id": "std_8f2k41",
        "title": "Episode 41: Launch week",
        "recorded_at": "2026-10-08T15:02:00+01:00",
        "duration_seconds": 3412,
        "participants": [
          "Host",
          "Guest"
        ],
        "upload_status": "complete"
      }
    ],
    "next_cursor": "eyJvZmZzZXQiOjIwfQ"
  },
  "isError": false
}
```

## Get recording

MCP tool: `riverside_get_recording`

Access: read.

Returns one recording and the tracks of each participant. Each track has a type (audio or video, and screen share when one was recorded) and an upload status. Read it before download_tracks to see whether every track has finished uploading.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `recording_id` | string | yes | Recording ID from list_recordings. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_get_recording",
    "arguments": {
      "recording_id": "recording_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "recording_id": "rec_71d3ab",
    "title": "Episode 41: Launch week",
    "duration_seconds": 3412,
    "participants": [
      {
        "name": "Host",
        "tracks": [
          {
            "type": "audio",
            "upload_status": "complete"
          },
          {
            "type": "video",
            "upload_status": "complete"
          }
        ]
      },
      {
        "name": "Guest",
        "tracks": [
          {
            "type": "audio",
            "upload_status": "complete"
          },
          {
            "type": "video",
            "upload_status": "uploading"
          }
        ]
      }
    ]
  },
  "isError": false
}
```

## Get transcript

MCP tool: `riverside_get_transcript`

Access: read.

Returns the transcript Riverside made for one recording, in speaker order with timestamps. Use format srt for subtitle files and txt for plain reading. The call fails if the recording has no transcript yet.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `recording_id` | string | yes | Recording ID from list_recordings. |
| `format` | enum | no | txt or srt. Default: txt. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_get_transcript",
    "arguments": {
      "recording_id": "recording_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "recording_id": "rec_71d3ab",
    "format": "txt",
    "text": "[00:00:04] Host: Welcome back to The Product Hour.\n[00:00:09] Guest: Thanks for having me."
  },
  "isError": false
}
```

## Download tracks

MCP tool: `riverside_download_tracks`

Access: read.

Returns one download link per participant for the file type you choose: raw video, aligned video, raw audio or compressed audio, the options in the Riverside Download menu. Tracks that are still uploading are listed without a link. Screen share tracks in high quality exist only when the screen share was recorded with the Mac app. Edited tracks are not included; they come from an edit export.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `recording_id` | string | yes | Recording ID from list_recordings. |
| `file_type` | enum | no | raw_video, aligned_video, raw_audio or compressed_audio, as named in the Riverside Download menu. Default: raw_audio. |
| `participants` | string[] | no | Only these participant names. Default: everyone. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_download_tracks",
    "arguments": {
      "recording_id": "rec_71d3ab",
      "file_type": "raw_audio"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "recording_id": "rec_71d3ab",
    "file_type": "raw_audio",
    "files": [
      {
        "participant": "Host",
        "url": "https://downloads.example.com/rec_71d3ab/host.wav",
        "status": "ready"
      },
      {
        "participant": "Guest",
        "url": "https://downloads.example.com/rec_71d3ab/guest.wav",
        "status": "ready"
      }
    ]
  },
  "isError": false
}
```

## Create studio

MCP tool: `riverside_create_studio`

Access: write. Confirm: waits for the user's OK before it runs.

Creates a studio with the name and recording type you give. Studios count against the limit of your Riverside plan, so a new one can use up a slot. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `name` | string | yes | Studio name, for example the show title. |
| `recording_type` | enum | no | audio_video or audio_only. Default: audio_video. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_create_studio",
    "arguments": {
      "name": "Jane Doe"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "studio_id": "std_5t8n22",
    "name": "Interview Series",
    "recording_type": "audio_video",
    "studio_url": "https://riverside.com/studio/interview-series"
  },
  "isError": false
}
```

## Schedule session

MCP tool: `riverside_schedule_session`

Access: write. Confirm: waits for the user's OK before it runs.

Adds a session at the start and end time you give, in the time zone you set. Each guest in guest_emails gets an invite email with the session details and the studio link; the emailed link works until 24 hours after the start. Only the host, account owner, admins, directors and editors can schedule. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `studio_id` | string | yes | Studio ID from list_studios. |
| `name` | string | yes | Session name, for example the episode title. |
| `start` | datetime | yes | ISO 8601 with time zone. |
| `end` | datetime | yes | ISO 8601 with time zone. |
| `guest_emails` | string[] | no | Guests to invite now. Default: none. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_schedule_session",
    "arguments": {
      "studio_id": "std_8f2k41",
      "name": "Episode 42: Pricing your first product",
      "start": "2026-10-15T15:00:00+01:00",
      "end": "2026-10-15T16:00:00+01:00",
      "guest_emails": [
        "guest@example.com"
      ]
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "session_id": "ses_3vq9x7",
    "studio_id": "std_8f2k41",
    "status": "scheduled",
    "start": "2026-10-15T15:00:00+01:00",
    "invited": [
      {
        "email": "guest@example.com",
        "role": "guest",
        "email_sent": true
      }
    ]
  },
  "isError": false
}
```

## Update session

MCP tool: `riverside_update_session`

Access: write. Confirm: waits for the user's OK before it runs.

Changes the fields you pass and leaves the rest. When the date or time changes, Riverside emails the guests, producer and audience members that the session was updated, and the Google Calendar invite updates automatically. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `session_id` | string | yes | Session ID from list_sessions. |
| `name` | string | no | New session name. |
| `start` | datetime | no | New start, ISO 8601 with time zone. |
| `end` | datetime | no | New end, ISO 8601 with time zone. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_update_session",
    "arguments": {
      "session_id": "ses_3vq9x7",
      "start": "2026-10-16T11:00:00+01:00",
      "end": "2026-10-16T12:00:00+01:00"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "session_id": "ses_3vq9x7",
    "status": "updated",
    "start": "2026-10-16T11:00:00+01:00",
    "end": "2026-10-16T12:00:00+01:00",
    "notified": [
      "guest@example.com"
    ]
  },
  "isError": false
}
```

## Invite guest

MCP tool: `riverside_invite_guest`

Access: write. Confirm: waits for the user's OK before it runs.

Adds one person to a scheduled session and sends them an invite email with the session details and the studio link. Role is guest by default. Inviting the same email again resends the invite. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `session_id` | string | yes | Session ID from list_sessions. |
| `email` | string | yes | Who to invite. |
| `role` | enum | no | guest, producer or audience. Default: guest. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_invite_guest",
    "arguments": {
      "session_id": "session_8c41d2",
      "email": "jane@example.com"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "session_id": "ses_3vq9x7",
    "email": "producer@example.com",
    "role": "producer",
    "email_sent": true
  },
  "isError": false
}
```

## Cancel session

MCP tool: `riverside_cancel_session`

Access: write. Confirm: waits for the user's OK before it runs.

Cancels the session and removes it from the Planner and the project folder. Recordings that were already made stay in your account. Cancelling cannot be undone with one call; schedule the session again to restore it. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `session_id` | string | yes | Session ID from list_sessions. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "riverside_cancel_session",
    "arguments": {
      "session_id": "session_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "session_id": "ses_3vq9x7",
    "status": "cancelled"
  },
  "isError": false
}
```
