# recordings_visual_identity_decide

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

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

Record one source-current human answer about the exact visible person marked in one Recording frame. Yes confirms only the displayed face-to-person proposal; Someone else records the rejected proposed person and one separately selected displayed candidate atomically; Not sure is neutral; Not a person rejects only that exact detection. This never confirms or renames an audio speaker track, changes captions, chooses a Thumbnail, approves a Speaker photo, trusts a face reference, stores a reusable face template, or changes recognition consent. A non-neutral answer queues a bounded person-evidence generation so affected automatic Thumbnail evidence can be reconsidered without overwriting a manual Thumbnail.

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": "recordings_visual_identity_decide",
  "title": "Answer a visible-person identity check",
  "description": "Record one source-current human answer about the exact visible person marked in one Recording frame. Yes confirms only the displayed face-to-person proposal; Someone else records the rejected proposed person and one separately selected displayed candidate atomically; Not sure is neutral; Not a person rejects only that exact detection. This never confirms or renames an audio speaker track, changes captions, chooses a Thumbnail, approves a Speaker photo, trusts a face reference, stores a reusable face template, or changes recognition consent. A non-neutral answer queues a bounded person-evidence generation so affected automatic Thumbnail evidence can be reconsidered without overwriting a manual Thumbnail.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "recording_id": {
        "type": "string",
        "description": "Recording public ID that owns the exact current visual question."
      },
      "visual_identity_question_id": {
        "type": "string",
        "description": "Opaque source-current question ID returned inside recording speaker evidence."
      },
      "decision": {
        "type": "string",
        "enum": [
          "confirmed",
          "identified",
          "someone_else",
          "not_sure",
          "not_a_person"
        ],
        "description": "Exact visual answer. The UI presents these as Yes, Use the selected person, Someone else, Not sure, and Not a person."
      },
      "selected_speaker_profile_id": {
        "type": "string",
        "description": "Required for identified or someone_else; must be one of the canonical scoped candidates displayed with this exact question."
      },
      "new_person_name": {
        "type": "string",
        "maxLength": 120,
        "description": "A new visible person’s name, instead of a selected profile. Creates a project-local person without assigning a voice or approving memory."
      },
      "question_context": {
        "type": "string",
        "description": "Copy the opaque displayed question_context unchanged. It preserves exact-image and proposal meaning across background publication."
      },
      "reason": {
        "type": "string",
        "description": "Optional short human context retained with the decision receipt."
      },
      "supersedes_decision_id": {
        "type": "string",
        "description": "Optional current decision ID when deliberately appending a correction to the same exact question."
      },
      "idempotency_key": {
        "type": "string",
        "description": "Caller-stable retry key for this exact answer."
      }
    },
    "required": [
      "recording_id",
      "visual_identity_question_id",
      "decision",
      "idempotency_key"
    ],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  },
  "securitySchemes": [
    {
      "type": "noauth"
    }
  ],
  "_meta": {
    "securitySchemes": [
      {
        "type": "noauth"
      }
    ],
    "ui": {
      "visibility": [
        "model",
        "app"
      ]
    },
    "openai/widgetAccessible": true
  }
}
```

## App descriptor

```json
{
  "name": "recordings_visual_identity_decide",
  "title": "Answer a visible-person identity check",
  "description": "Record one source-current human answer about the exact visible person marked in one Recording frame. Yes confirms only the displayed face-to-person proposal; Someone else records the rejected proposed person and one separately selected displayed candidate atomically; Not sure is neutral; Not a person rejects only that exact detection. This never confirms or renames an audio speaker track, changes captions, chooses a Thumbnail, approves a Speaker photo, trusts a face reference, stores a reusable face template, or changes recognition consent. A non-neutral answer queues a bounded person-evidence generation so affected automatic Thumbnail evidence can be reconsidered without overwriting a manual Thumbnail.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "recording_id": {
        "type": "string",
        "description": "Recording public ID that owns the exact current visual question."
      },
      "visual_identity_question_id": {
        "type": "string",
        "description": "Opaque source-current question ID returned inside recording speaker evidence."
      },
      "decision": {
        "type": "string",
        "enum": [
          "confirmed",
          "identified",
          "someone_else",
          "not_sure",
          "not_a_person"
        ],
        "description": "Exact visual answer. The UI presents these as Yes, Use the selected person, Someone else, Not sure, and Not a person."
      },
      "selected_speaker_profile_id": {
        "type": "string",
        "description": "Required for identified or someone_else; must be one of the canonical scoped candidates displayed with this exact question."
      },
      "new_person_name": {
        "type": "string",
        "maxLength": 120,
        "description": "A new visible person’s name, instead of a selected profile. Creates a project-local person without assigning a voice or approving memory."
      },
      "question_context": {
        "type": "string",
        "description": "Copy the opaque displayed question_context unchanged. It preserves exact-image and proposal meaning across background publication."
      },
      "reason": {
        "type": "string",
        "description": "Optional short human context retained with the decision receipt."
      },
      "supersedes_decision_id": {
        "type": "string",
        "description": "Optional current decision ID when deliberately appending a correction to the same exact question."
      },
      "idempotency_key": {
        "type": "string",
        "description": "Caller-stable retry key for this exact answer."
      }
    },
    "required": [
      "recording_id",
      "visual_identity_question_id",
      "decision",
      "idempotency_key"
    ],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  },
  "securitySchemes": [
    {
      "type": "noauth"
    }
  ],
  "_meta": {
    "securitySchemes": [
      {
        "type": "noauth"
      }
    ],
    "ui": {
      "visibility": [
        "model",
        "app"
      ]
    },
    "openai/widgetAccessible": true
  },
  "outputSchema": {
    "type": "object",
    "properties": {
      "schema": {
        "type": "string"
      },
      "recording_id": {
        "type": "string"
      },
      "already_applied": {
        "type": "boolean"
      },
      "decision": {
        "type": "object"
      },
      "speaker_evidence": {
        "type": "object",
        "description": "Refreshed bounded speaker evidence and remaining visual identity questions."
      }
    },
    "required": [],
    "additionalProperties": false
  }
}
```

## Live Workspace descriptor

```json
{
  "name": "recordings_visual_identity_decide",
  "title": "Answer a visible-person identity check",
  "description": "Record one source-current human answer about the exact visible person marked in one Recording frame. Yes confirms only the displayed face-to-person proposal; Someone else records the rejected proposed person and one separately selected displayed candidate atomically; Not sure is neutral; Not a person rejects only that exact detection. This never confirms or renames an audio speaker track, changes captions, chooses a Thumbnail, approves a Speaker photo, trusts a face reference, stores a reusable face template, or changes recognition consent. A non-neutral answer queues a bounded person-evidence generation so affected automatic Thumbnail evidence can be reconsidered without overwriting a manual Thumbnail.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "recording_id": {
        "type": "string",
        "description": "Recording public ID that owns the exact current visual question."
      },
      "visual_identity_question_id": {
        "type": "string",
        "description": "Opaque source-current question ID returned inside recording speaker evidence."
      },
      "decision": {
        "type": "string",
        "enum": [
          "confirmed",
          "identified",
          "someone_else",
          "not_sure",
          "not_a_person"
        ],
        "description": "Exact visual answer. The UI presents these as Yes, Use the selected person, Someone else, Not sure, and Not a person."
      },
      "selected_speaker_profile_id": {
        "type": "string",
        "description": "Required for identified or someone_else; must be one of the canonical scoped candidates displayed with this exact question."
      },
      "new_person_name": {
        "type": "string",
        "maxLength": 120,
        "description": "A new visible person’s name, instead of a selected profile. Creates a project-local person without assigning a voice or approving memory."
      },
      "question_context": {
        "type": "string",
        "description": "Copy the opaque displayed question_context unchanged. It preserves exact-image and proposal meaning across background publication."
      },
      "reason": {
        "type": "string",
        "description": "Optional short human context retained with the decision receipt."
      },
      "supersedes_decision_id": {
        "type": "string",
        "description": "Optional current decision ID when deliberately appending a correction to the same exact question."
      },
      "idempotency_key": {
        "type": "string",
        "description": "Caller-stable retry key for this exact answer."
      }
    },
    "required": [
      "recording_id",
      "visual_identity_question_id",
      "decision",
      "idempotency_key"
    ],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  },
  "securitySchemes": [
    {
      "type": "noauth"
    }
  ],
  "_meta": {
    "securitySchemes": [
      {
        "type": "noauth"
      }
    ]
  },
  "outputSchema": {
    "type": "object",
    "properties": {
      "schema": {
        "type": "string"
      },
      "recording_id": {
        "type": "string"
      },
      "already_applied": {
        "type": "boolean"
      },
      "decision": {
        "type": "object"
      },
      "speaker_evidence": {
        "type": "object",
        "description": "Refreshed bounded speaker evidence and remaining visual identity questions."
      },
      "workspace_binding": {
        "type": "object",
        "properties": {
          "schema": {
            "type": "string",
            "enum": [
              "bitterclip.workspace-binding.v2"
            ]
          },
          "mode": {
            "type": "string",
            "enum": [
              "live_workspace"
            ]
          },
          "project_id": {
            "type": "string"
          },
          "target_kind": {
            "type": "string",
            "enum": [
              "episode",
              "clip"
            ]
          },
          "target_id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "draft_revision": {
            "type": "string"
          },
          "workspace_url": {
            "type": "string"
          },
          "output_id": {
            "type": "string"
          },
          "output_status": {
            "type": "string",
            "enum": [
              "missing",
              "stale",
              "rendering",
              "ready",
              "failed"
            ]
          },
          "output_revision": {
            "type": "integer"
          },
          "parent_episode_id": {
            "type": "string"
          }
        },
        "required": [
          "schema",
          "mode",
          "target_kind",
          "target_id",
          "revision",
          "draft_revision",
          "workspace_url",
          "output_status"
        ],
        "additionalProperties": false
      }
    },
    "required": [],
    "additionalProperties": false
  }
}
```

## Errors

```json
[
  "recording_not_found",
  "invalid_input",
  "visual_identity_actor_required",
  "visual_identity_question_stale",
  "visual_identity_question_already_answered",
  "visual_identity_supersession_stale",
  "visual_identity_candidate_not_shown",
  "idempotency_conflict"
]
```

## Examples

```json
[]
```
