# `get_person_notes`

Reads one exact person’s private notes in your own Rolodex. Reading changes nothing and starts no search.

Annotations: `readOnlyHint: true` · `destructiveHint: false` · `idempotentHint: true` · `openWorldHint: false`

## Inputs

| Input | Required | Description |
| --- | --- | --- |
| `personId` | yes | Exact UUID from `find_people` or another authorized own-person result. |

## Returns

`{ state: { person, version, notes } }`. The person is the same identity projection returned by `find_people`. Each note has `id`, `text`, `tag`, `status` (`active`, `removed`, or `superseded`), and ISO `createdAt`. The version is an opaque token; pass it unchanged to `save_person_notes`. Only active facts inform matching.

History includes removed and superseded facts to prevent accidental restoration. “Forget” removes a fact from active use; it does not erase retained history. No self notes or another member’s notes are returned. Missing and unowned people both return `unavailable`.

## Example

```json get_person_notes
{
  "personId": "00000000-0000-4000-a000-000000000005"
}
```

Result (synthetic data):

```json result:get_person_notes
{
  "state": {
    "person": {
      "personId": "00000000-0000-4000-a000-000000000005",
      "contactAuthoredName": "Synthetic Pat",
      "ownerAuthoredName": null,
      "emails": [
        "pat@example.test"
      ]
    },
    "version": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
    "notes": [
      {
        "id": "00000000-0000-4000-a000-000000000006",
        "text": "Prefers email",
        "tag": "comms_style",
        "status": "active",
        "createdAt": "2026-10-09T00:00:00.000Z"
      }
    ]
  }
}
```

## Related

See the [private notes workflow](/docs/mcp/agent-guide#private-person-notes) and [errors and limits](/docs/mcp/errors-and-limits).
