All MCP tools

speakers_list

List remembered people

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.

Surface: Default model and app

Product release 1dce717408a55fac1047e7d779177fa3ef8ede51
Public contract commit 1ce47f7857ae3d9b6933fe83d5c33de3ae5efc64
Public contract SHA-256 241d47d25e4b4c1dae9d2263793874d06fc4ba7bc3c78d4cf2bc63fbb32ed7dc
Captured 2026-09-24T16:39:30.100Z. Review or improve this contract on GitHub.

These blocks show the complete MCP descriptors captured from serving Rails. Security schemes and resource URIs can differ by connected host.

Default model descriptor

{
  "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

{
  "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

{
  "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

[
  "project_not_found",
  "invalid_input"
]

Examples

[]