annotate_interest

Annotate interest (private weak verb)

All MCP toolsWrite

Privately star (saved) one person↔job pair for your own side, or take the star off (dismissed) — the latest weak verb wins, and neither hides the job from search or from the person's own lists. Weak verbs never change the pair's strong state, never notify, and never surface to the counterpart. actorPersonId is the human principal you act for (persons.id), never a credential identity: candidate agents pass the candidate, employer agents pass the hiring-side member.

Input schema

{
  "type": "object",
  "properties": {
    "actorPersonId": {
      "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 acting human principal (persons.id) — the verb is recorded as theirs."
    },
    "direction": {
      "type": "string",
      "enum": [
        "person_to_job",
        "job_to_person"
      ],
      "description": "Interest direction: \"person_to_job\" (candidate → job) or \"job_to_person\" (a job's team → candidate)."
    },
    "jobId": {
      "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 job side of the pair (jobs.id)."
    },
    "personToken": {
      "description": "The person side of the pair as an opaque subject_token — required iff direction is job_to_person (from list_job_interests); omit for person_to_job, where the pair person IS the actor.",
      "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)$"
    },
    "kind": {
      "type": "string",
      "enum": [
        "saved",
        "dismissed"
      ],
      "description": "The private annotation: saved (the star on) or dismissed (the star off — the pair stays listed). Strong verbs are a different tool (express_interest)."
    }
  },
  "required": [
    "actorPersonId",
    "direction",
    "jobId",
    "kind"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output schema

{
  "type": "object",
  "properties": {
    "state": {
      "type": "object",
      "properties": {
        "personToJob": {
          "type": "object",
          "properties": {
            "strong": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "interested",
                    "offered",
                    "passed",
                    "not_interested",
                    "withdrawn",
                    "declined"
                  ],
                  "description": "The side's standing strong verb (latest wins, ADR-0084)."
                },
                "eventId": {
                  "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 winning interests row (interests.id)."
                },
                "occurredAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                  "description": "When the winning verb happened (ISO 8601, UTC)."
                }
              },
              "required": [
                "kind",
                "eventId",
                "occurredAt"
              ],
              "additionalProperties": false
            },
            "weak": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "saved",
                    "dismissed"
                  ],
                  "description": "The acting side's latest private annotation — omitted for the counterpart; never changes strong state."
                },
                "eventId": {
                  "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 winning interests row (interests.id)."
                },
                "occurredAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                  "description": "When the winning verb happened (ISO 8601, UTC)."
                }
              },
              "required": [
                "kind",
                "eventId",
                "occurredAt"
              ],
              "additionalProperties": false
            }
          },
          "additionalProperties": false,
          "description": "The candidate side (direction person_to_job)."
        },
        "jobToPerson": {
          "type": "object",
          "properties": {
            "strong": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "interested",
                    "offered",
                    "passed",
                    "not_interested",
                    "withdrawn",
                    "declined"
                  ],
                  "description": "The side's standing strong verb (latest wins, ADR-0084)."
                },
                "eventId": {
                  "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 winning interests row (interests.id)."
                },
                "occurredAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                  "description": "When the winning verb happened (ISO 8601, UTC)."
                }
              },
              "required": [
                "kind",
                "eventId",
                "occurredAt"
              ],
              "additionalProperties": false
            },
            "weak": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "saved",
                    "dismissed"
                  ],
                  "description": "The acting side's latest private annotation — omitted for the counterpart; never changes strong state."
                },
                "eventId": {
                  "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 winning interests row (interests.id)."
                },
                "occurredAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                  "description": "When the winning verb happened (ISO 8601, UTC)."
                }
              },
              "required": [
                "kind",
                "eventId",
                "occurredAt"
              ],
              "additionalProperties": false
            }
          },
          "additionalProperties": false,
          "description": "The employer side (direction job_to_person)."
        },
        "mutual": {
          "type": "boolean",
          "description": "true iff BOTH sides' strong states are interested."
        }
      },
      "required": [
        "personToJob",
        "jobToPerson",
        "mutual"
      ],
      "additionalProperties": false,
      "description": "The folded state of ONE person↔job pair (resolveInterestState, ADR-0084)."
    },
    "mutual": {
      "type": "boolean",
      "description": "Convenience mirror of state.mutual — true iff the pair is mutual."
    },
    "notificationsPublished": {
      "type": "boolean",
      "description": "False when the post-commit notification publish failed — the committed interest/outcome rows stand (row-first); the recipients may not have been notified."
    }
  },
  "required": [
    "state",
    "mutual",
    "notificationsPublished"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

On this page