# speakers_list

Canonical HTML page: https://bitterclip.com/docs/assistants/tools/speakers_list

Surface: default model and app

Product release: 1dce717408a55fac1047e7d779177fa3ef8ede51
Public contract commit: 1ce47f7857ae3d9b6933fe83d5c33de3ae5efc64
Public contract SHA-256: 241d47d25e4b4c1dae9d2263793874d06fc4ba7bc3c78d4cf2bc63fbb32ed7dc
Descriptor SHA-256: 885d46f3ca3939dec2ace0cd6e93611c8b3f741f2d8f7a82e0adfe1452cc9a9e
Captured: 2026-09-24T16:39:30.100Z
Source: https://app.bitterclip.com/api/v1/mcp_descriptors.json

List the people BitterClip remembers for this account, with per-person recording/word/voiceprint counts, first/last-seen dates, and review flags. For a whole-account or current-account speaker-exception ask, start with one speakers_list call using filter=assignment_exceptions and no project_id. When that complete queue succeeds, do not reconstruct it with projects_list, project-title search, enumeration, or project-scoped fan-out; title filtering can omit in-scope projects whose names do not match the user's shorthand. For a deliberately named subset of projects, keep that narrower scope and use project-scoped reads only for the named subset. The account queue begins with a complete contiguous short-answer block: preserve its project, recording-group, and open-track header, include every numbered project group regardless of title, and treat the later recording rows as an evidence appendix rather than a new scope. It returns exact row-derived account and per-project totals, every open project and recording group, and no hidden tail; shared projects from other studios are excluded. With project_id, needs_review or assignment_exceptions reports recording-assignment exceptions separately from person-profile confirmation, including current owner-reviewed wrong/unsure tracks and other tracks still needing review. The exception queue is grouped by recording, deliberately omits per-track size because size alone cannot resolve identity or dismiss an exception, and marks every open row non-dismissible until an explicit review or verified correction resolves it. A known-wrong current label does not identify the replacement speaker; that track stays open. Treat the result as one project-level exception queue: recording groups are evidence organization, not separate tasks, and every listed row remains in the queue. Generic provider labels are recording-local, so matching Speaker 1/2 text across recordings never proves one voice or merges track decisions. Absence from the queue never proves a label, person, recording, or project is settled. The readable result includes every open recording group; there is no hidden compact-list tail. Never infer noise, crosstalk, non-person status, optionality, or safe-to-ignore state from track size alone. Use the appropriate whole-account or project-scoped mode FIRST when the user asks who appears across recordings, who spoke how much, or which identities need review; do not reconstruct the answer from transcripts. Ordinary people-list modes return stable spkr_... IDs for speakers_get/speakers_get_appearances follow-ups; the account assignment_exceptions mode instead returns complete ID-free queue prose. Read-only.

The JSON blocks below are the exact MCP descriptor projections served by Rails for the named profiles at capture time. Security schemes and resource URIs may vary by connected host.

## Default model descriptor

```json
{
  "name": "speakers_list",
  "title": "List remembered people",
  "description": "List the people BitterClip remembers for this account, with per-person recording/word/voiceprint counts, first/last-seen dates, and review flags. For a whole-account or current-account speaker-exception ask, start with one speakers_list call using filter=assignment_exceptions and no project_id. When that complete queue succeeds, do not reconstruct it with projects_list, project-title search, enumeration, or project-scoped fan-out; title filtering can omit in-scope projects whose names do not match the user's shorthand. For a deliberately named subset of projects, keep that narrower scope and use project-scoped reads only for the named subset. The account queue begins with a complete contiguous short-answer block: preserve its project, recording-group, and open-track header, include every numbered project group regardless of title, and treat the later recording rows as an evidence appendix rather than a new scope. It returns exact row-derived account and per-project totals, every open project and recording group, and no hidden tail; shared projects from other studios are excluded. With project_id, needs_review or assignment_exceptions reports recording-assignment exceptions separately from person-profile confirmation, including current owner-reviewed wrong/unsure tracks and other tracks still needing review. The exception queue is grouped by recording, deliberately omits per-track size because size alone cannot resolve identity or dismiss an exception, and marks every open row non-dismissible until an explicit review or verified correction resolves it. A known-wrong current label does not identify the replacement speaker; that track stays open. Treat the result as one project-level exception queue: recording groups are evidence organization, not separate tasks, and every listed row remains in the queue. Generic provider labels are recording-local, so matching Speaker 1/2 text across recordings never proves one voice or merges track decisions. Absence from the queue never proves a label, person, recording, or project is settled. The readable result includes every open recording group; there is no hidden compact-list tail. Never infer noise, crosstalk, non-person status, optionality, or safe-to-ignore state from track size alone. Use the appropriate whole-account or project-scoped mode FIRST when the user asks who appears across recordings, who spoke how much, or which identities need review; do not reconstruct the answer from transcripts. Ordinary people-list modes return stable spkr_... IDs for speakers_get/speakers_get_appearances follow-ups; the account assignment_exceptions mode instead returns complete ID-free queue prose. Read-only.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "filter": {
        "type": "string",
        "enum": [
          "assignment_exceptions",
          "needs_review",
          "needs_photo_review",
          "possible_duplicates",
          "no_voice",
          "recent",
          "merged"
        ],
        "description": "Optional people filter. Defaults to recent. assignment_exceptions without project_id returns the complete current-account recording-assignment queue and ignores the people limit; with project_id, assignment_exceptions and needs_review select people attached to track exceptions while also reporting unbound exceptions."
      },
      "project_id": {
        "type": "string",
        "description": "Optional project public ID to limit results to people seen or configured in one project."
      },
      "limit": {
        "type": "integer",
        "description": "Maximum people to return. Default 20, maximum 50. The complete assignment_exceptions account queue is never truncated by this people limit."
      }
    },
    "required": [],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  },
  "securitySchemes": [
    {
      "type": "noauth"
    }
  ],
  "_meta": {
    "securitySchemes": [
      {
        "type": "noauth"
      }
    ],
    "ui": {
      "visibility": [
        "model",
        "app"
      ]
    },
    "openai/widgetAccessible": true
  }
}
```

## App descriptor

```json
{
  "name": "speakers_list",
  "title": "List remembered people",
  "description": "List the people BitterClip remembers for this account, with per-person recording/word/voiceprint counts, first/last-seen dates, and review flags. For a whole-account or current-account speaker-exception ask, start with one speakers_list call using filter=assignment_exceptions and no project_id. When that complete queue succeeds, do not reconstruct it with projects_list, project-title search, enumeration, or project-scoped fan-out; title filtering can omit in-scope projects whose names do not match the user's shorthand. For a deliberately named subset of projects, keep that narrower scope and use project-scoped reads only for the named subset. The account queue begins with a complete contiguous short-answer block: preserve its project, recording-group, and open-track header, include every numbered project group regardless of title, and treat the later recording rows as an evidence appendix rather than a new scope. It returns exact row-derived account and per-project totals, every open project and recording group, and no hidden tail; shared projects from other studios are excluded. With project_id, needs_review or assignment_exceptions reports recording-assignment exceptions separately from person-profile confirmation, including current owner-reviewed wrong/unsure tracks and other tracks still needing review. The exception queue is grouped by recording, deliberately omits per-track size because size alone cannot resolve identity or dismiss an exception, and marks every open row non-dismissible until an explicit review or verified correction resolves it. A known-wrong current label does not identify the replacement speaker; that track stays open. Treat the result as one project-level exception queue: recording groups are evidence organization, not separate tasks, and every listed row remains in the queue. Generic provider labels are recording-local, so matching Speaker 1/2 text across recordings never proves one voice or merges track decisions. Absence from the queue never proves a label, person, recording, or project is settled. The readable result includes every open recording group; there is no hidden compact-list tail. Never infer noise, crosstalk, non-person status, optionality, or safe-to-ignore state from track size alone. Use the appropriate whole-account or project-scoped mode FIRST when the user asks who appears across recordings, who spoke how much, or which identities need review; do not reconstruct the answer from transcripts. Ordinary people-list modes return stable spkr_... IDs for speakers_get/speakers_get_appearances follow-ups; the account assignment_exceptions mode instead returns complete ID-free queue prose. Read-only.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "filter": {
        "type": "string",
        "enum": [
          "assignment_exceptions",
          "needs_review",
          "needs_photo_review",
          "possible_duplicates",
          "no_voice",
          "recent",
          "merged"
        ],
        "description": "Optional people filter. Defaults to recent. assignment_exceptions without project_id returns the complete current-account recording-assignment queue and ignores the people limit; with project_id, assignment_exceptions and needs_review select people attached to track exceptions while also reporting unbound exceptions."
      },
      "project_id": {
        "type": "string",
        "description": "Optional project public ID to limit results to people seen or configured in one project."
      },
      "limit": {
        "type": "integer",
        "description": "Maximum people to return. Default 20, maximum 50. The complete assignment_exceptions account queue is never truncated by this people limit."
      }
    },
    "required": [],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  },
  "securitySchemes": [
    {
      "type": "noauth"
    }
  ],
  "_meta": {
    "securitySchemes": [
      {
        "type": "noauth"
      }
    ],
    "ui": {
      "visibility": [
        "model",
        "app"
      ]
    },
    "openai/widgetAccessible": true
  }
}
```

## Live Workspace descriptor

```json
{
  "name": "speakers_list",
  "title": "List remembered people",
  "description": "List the people BitterClip remembers for this account, with per-person recording/word/voiceprint counts, first/last-seen dates, and review flags. For a whole-account or current-account speaker-exception ask, start with one speakers_list call using filter=assignment_exceptions and no project_id. When that complete queue succeeds, do not reconstruct it with projects_list, project-title search, enumeration, or project-scoped fan-out; title filtering can omit in-scope projects whose names do not match the user's shorthand. For a deliberately named subset of projects, keep that narrower scope and use project-scoped reads only for the named subset. The account queue begins with a complete contiguous short-answer block: preserve its project, recording-group, and open-track header, include every numbered project group regardless of title, and treat the later recording rows as an evidence appendix rather than a new scope. It returns exact row-derived account and per-project totals, every open project and recording group, and no hidden tail; shared projects from other studios are excluded. With project_id, needs_review or assignment_exceptions reports recording-assignment exceptions separately from person-profile confirmation, including current owner-reviewed wrong/unsure tracks and other tracks still needing review. The exception queue is grouped by recording, deliberately omits per-track size because size alone cannot resolve identity or dismiss an exception, and marks every open row non-dismissible until an explicit review or verified correction resolves it. A known-wrong current label does not identify the replacement speaker; that track stays open. Treat the result as one project-level exception queue: recording groups are evidence organization, not separate tasks, and every listed row remains in the queue. Generic provider labels are recording-local, so matching Speaker 1/2 text across recordings never proves one voice or merges track decisions. Absence from the queue never proves a label, person, recording, or project is settled. The readable result includes every open recording group; there is no hidden compact-list tail. Never infer noise, crosstalk, non-person status, optionality, or safe-to-ignore state from track size alone. Use the appropriate whole-account or project-scoped mode FIRST when the user asks who appears across recordings, who spoke how much, or which identities need review; do not reconstruct the answer from transcripts. Ordinary people-list modes return stable spkr_... IDs for speakers_get/speakers_get_appearances follow-ups; the account assignment_exceptions mode instead returns complete ID-free queue prose. Read-only.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "filter": {
        "type": "string",
        "enum": [
          "assignment_exceptions",
          "needs_review",
          "needs_photo_review",
          "possible_duplicates",
          "no_voice",
          "recent",
          "merged"
        ],
        "description": "Optional people filter. Defaults to recent. assignment_exceptions without project_id returns the complete current-account recording-assignment queue and ignores the people limit; with project_id, assignment_exceptions and needs_review select people attached to track exceptions while also reporting unbound exceptions."
      },
      "project_id": {
        "type": "string",
        "description": "Optional project public ID to limit results to people seen or configured in one project."
      },
      "limit": {
        "type": "integer",
        "description": "Maximum people to return. Default 20, maximum 50. The complete assignment_exceptions account queue is never truncated by this people limit."
      }
    },
    "required": [],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  },
  "securitySchemes": [
    {
      "type": "noauth"
    }
  ],
  "_meta": {
    "securitySchemes": [
      {
        "type": "noauth"
      }
    ]
  }
}
```

## Errors

```json
[
  "project_not_found",
  "invalid_input"
]
```

## Examples

```json
[]
```
