get_notification_preferences
Get the person's notification preferences
All MCP toolsRead
Start with this before changing anything about how the person is reached: their notification preference matrix, one effective on/off value per notification kind and external channel (email, push, sms — sms is live on interview_reminder only). Effective means the value in force — their explicit choice where they made one, the platform default everywhere else — so a cell nobody ever touched still reads what delivery will use. Only the kinds a candidate can actually receive appear; hiring-side-only kinds are absent, not false. The reply also carries each channel's real state for this deployment (email.configured, push.configured, sms.configured) and whether the person has a live browser registration (push.subscribed) — a true push cell reaches nobody while that is false. No device identifier is ever returned: adding or removing a browser is the person's own action on the settings screen, because the browser mints key material this side cannot.
Input schema
{
"type": "object",
"properties": {
"personId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The person whose notification preferences to read (persons.id — self)."
}
},
"required": [
"personId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output schema
{
"type": "object",
"properties": {
"personId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"preferences": {
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"proposal_received",
"mutual_interest",
"interview_schedule_updated",
"candidacy_stage_changed",
"interview_completed",
"interview_reminder",
"interview_slot_response_nudge",
"message_received",
"agreement_recorded"
]
},
"additionalProperties": {
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"email",
"push",
"sms"
]
},
"additionalProperties": {
"type": "boolean",
"description": "The value in force for this kind on this channel: the person's explicit choice where they made one, the platform default everywhere else."
},
"required": [
"email",
"push",
"sms"
]
},
"required": [
"proposal_received",
"mutual_interest",
"interview_schedule_updated",
"candidacy_stage_changed",
"interview_completed",
"interview_reminder",
"interview_slot_response_nudge",
"message_received",
"agreement_recorded"
],
"description": "The effective preference matrix, one entry per notification kind this person can receive, each carrying one value per external channel. Kinds that only a hiring-side reader receives are absent by construction, not set to false. The sms cell is live only on interview_reminder — every other kind's sms cell is inert and not writable."
},
"channels": {
"type": "object",
"properties": {
"email": {
"type": "object",
"properties": {
"configured": {
"type": "boolean",
"description": "Whether this deployment has an outgoing mail channel set up at all."
}
},
"required": [
"configured"
],
"additionalProperties": false
},
"push": {
"type": "object",
"properties": {
"configured": {
"type": "boolean",
"description": "Whether this deployment has Web Push keys set up at all."
},
"subscribed": {
"type": "boolean",
"description": "Whether the person has at least one live browser registration. False means no Web Push message can reach them no matter what the matrix says."
}
},
"required": [
"configured",
"subscribed"
],
"additionalProperties": false
},
"sms": {
"type": "object",
"properties": {
"configured": {
"type": "boolean",
"description": "Whether this deployment has an SMS tap set up at all. Delivery additionally requires a verified phone number registered for contact use — an auth-only number is never texted."
}
},
"required": [
"configured"
],
"additionalProperties": false
}
},
"required": [
"email",
"push",
"sms"
],
"additionalProperties": false,
"description": "Delivery reality per channel, independent of the matrix: a true cell above still reaches nobody when its channel is unconfigured or has no live registration."
}
},
"required": [
"personId",
"preferences",
"channels"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}