speakers_profile_mutate
Change a remembered person
One account-level person governance change per call. merge applies an explicitly reviewed duplicate merge (moves bindings, aliases, and saved voice examples to the survivor, tombstones the duplicate, writes a review receipt; never rewrites transcript words, rendered captions, approval copy, published posts, or old export labels). keep_separate records that two similar people were reviewed and stay separate. set_memory_scope chooses how far a saved voice reaches (global_host or one project); admitted voice evidence re-verifies for the new scope. clear_unusable_voice quarantines unusable saved voice examples and clears invalid legacy voice memory. Profile ids ride inside the action; resolution is account-scoped. Pass a caller-stable idempotency key with every action; the person lane has no structural revision, so expected_revision is carried optionally toward the standard mutation contract.
Surface: App-only
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.
App descriptor
{
"name": "speakers_profile_mutate",
"title": "Change a remembered person",
"description": "One account-level person governance change per call. merge applies an explicitly reviewed duplicate merge (moves bindings, aliases, and saved voice examples to the survivor, tombstones the duplicate, writes a review receipt; never rewrites transcript words, rendered captions, approval copy, published posts, or old export labels). keep_separate records that two similar people were reviewed and stay separate. set_memory_scope chooses how far a saved voice reaches (global_host or one project); admitted voice evidence re-verifies for the new scope. clear_unusable_voice quarantines unusable saved voice examples and clears invalid legacy voice memory. Profile ids ride inside the action; resolution is account-scoped. Pass a caller-stable idempotency key with every action; the person lane has no structural revision, so expected_revision is carried optionally toward the standard mutation contract.",
"inputSchema": {
"type": "object",
"properties": {
"expected_revision": {
"type": "integer",
"description": "Optional: carried toward the standard mutation contract. The person lane exposes no structural revision yet; omit until it does."
},
"idempotency_key": {
"type": "string",
"description": "Caller-stable retry key for this exact change."
},
"action": {
"type": "object",
"description": "One person governance action. Profile ids ride inside the action; resolution is account-scoped.",
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"merge"
]
},
"survivor_profile_id": {
"type": "string",
"description": "SpeakerProfile public ID, slug, or UUID to keep."
},
"merged_profile_id": {
"type": "string",
"description": "SpeakerProfile public ID, slug, or UUID to merge into the survivor."
},
"reason": {
"type": "string",
"description": "Optional human-readable review reason."
}
},
"required": [
"type",
"survivor_profile_id",
"merged_profile_id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"keep_separate"
]
},
"profile_id": {
"type": "string",
"description": "SpeakerProfile public ID, slug, or UUID."
},
"duplicate_profile_id": {
"type": "string",
"description": "Possible duplicate SpeakerProfile public ID, slug, or UUID."
},
"reason": {
"type": "string",
"description": "Optional human-readable review reason."
}
},
"required": [
"type",
"profile_id",
"duplicate_profile_id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"set_memory_scope"
]
},
"speaker_profile_id": {
"type": "string",
"description": "Person public ID, slug, or UUID."
},
"scope": {
"type": "string",
"enum": [
"global_host",
"project"
],
"description": "global_host: recognize this person across all projects. project: use this voice for one project only."
},
"project_id": {
"type": "string",
"description": "Project public ID, slug, or UUID. Required when scope is project."
}
},
"required": [
"type",
"speaker_profile_id",
"scope"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"clear_unusable_voice"
]
},
"speaker_profile_id": {
"type": "string",
"description": "Person public ID, slug, or UUID."
},
"reason": {
"type": "string",
"description": "Optional human-readable reason for the repair receipt."
}
},
"required": [
"type",
"speaker_profile_id"
],
"additionalProperties": false
}
]
}
},
"required": [
"idempotency_key",
"action"
],
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": false
},
"securitySchemes": [
{
"type": "noauth"
}
],
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
],
"ui": {
"visibility": [
"app"
]
},
"openai/widgetAccessible": true,
"openai/visibility": "private"
},
"outputSchema": {
"type": "object",
"properties": {
"speaker_profile_merge_id": {
"type": "string"
},
"survivor_profile_id": {
"type": "string"
},
"merged_profile_id": {
"type": "string"
},
"moved_speaker_maps_count": {
"type": "integer"
},
"moved_voiceprints_count": {
"type": "integer"
},
"moved_aliases_count": {
"type": "integer"
},
"moved_reference_assets_count": {
"type": "integer"
},
"reference_asset_outcomes": {
"type": "array",
"items": {
"type": "object"
}
},
"kept_separate": {
"type": "boolean"
},
"already_applied": {
"type": "boolean"
},
"profile_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"speaker_profile_id": {
"type": "string"
},
"speaker_profile_name": {
"type": "string"
},
"name": {
"type": "string"
},
"memory_scope": {
"type": "string"
},
"host_across_projects": {
"type": "boolean"
},
"home_project_id": {
"type": "string"
},
"home_project_title": {
"type": "string"
},
"invalidated_voiceprint_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"quarantined_voiceprint_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"cleared_legacy_voice": {
"type": "boolean"
},
"status": {
"type": "string"
},
"receipt_id": {
"type": "string"
},
"state_sentence": {
"type": "string"
}
},
"required": [],
"additionalProperties": false
}
}Errors
[
"speaker_not_found",
"project_not_found",
"invalid_input",
"idempotency_conflict",
"speaker_memory_scope_busy",
"voiceprint_evidence_policy_invalid"
]Examples
[]