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
}

On this page