people-context
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PEOPLE_CONTEXT_DB | No | Path to the SQLite database file. Overrides the --db flag; if not set, the database location is resolved from the XDG config file, an OpenClaw workspace, or the XDG data directory. | |
| PEOPLE_CONTEXT_DB_KEY | No | Encryption key for SQLCipher at-rest encryption. This key is read only from this environment variable and is only needed when the server is installed with the encrypted extra. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| resolve_personA | Resolve a name, nickname, or partial reference to candidate people. Call this first whenever the user mentions someone, before asking who they
mean. Returns ranked candidates with a score and match reason. If two or
more candidates are close, the result is flagged |
| get_person_contextA | Assemble a minimal-disclosure context bundle for one person. Pass |
| search_peopleA | Free-text search over stored people for browsing or lookup. Broader than |
| semantic_searchA | Search active people and safe interaction summaries by multilingual semantic similarity. This optional local search requires an explicit |
| remember_personA | Create a new person or update the existing one matching Use this to durably record someone the user talks about. |
| rememberA | Record one thing the user stated about one person, in a single call. Use this when the user directly tells you something durable — "Alice from Acme
prefers short emails", "Bob is my manager", "I had coffee with Dana today".
Identity is never guessed for a write: |
| get_communication_guidanceA | Return sensitivity-gated signal for client-composed communication advice. Pass |
| set_communication_philosophyB | Store communication philosophy verbatim while auditing lengths only. |
| list_remindersA | List pull-based reminders, due-dated first and communication notes last. Filter by |
| set_reminderA | Create a reminder for an existing person.
|
| complete_reminderB | Transition one active reminder to completed. |
| add_aliasB | Add a normalized-deduplicated alias to an existing person.
|
| set_relationshipA | Create a directed relationship between two existing people. |
| set_affiliationC | Create an affiliation, resolving an org id or get/creating by name. |
| record_factA | Record a time-aware fact about an existing person.
|
| record_observationB | Record a subjective observation, separate from disclosed context. |
| record_traitB | Record a derived trait with validated category and provenance.
|
| record_interactionB | Record a concise interaction summary after validating all participants. |
| correct_recordC | Correct whitelisted assertion fields in place with before/after audit. |
| supersede_factA | Close a fact that was true and open its replacement from an effective date. Use this when a stored value was historically correct and the real-world state changed;
Both rows commit together under one logical transaction, or neither commits. |
| get_relationship_graphA | Return active relationship structure around one person, capped for bounded disclosure. Pass |
| find_connectionC | Return one shortest relationship path, or a structured not-connected result. |
| create_groupA | Create one identified group: a class, cohort, team, department, club, household, or community. Every call creates a new group; an equal name is never treated as the same group. Use
|
| add_group_membershipA | Record that an existing person held a role in an existing group. Record only what was stated or confirmed. Leave dates out when they are unknown — never
guess a school year or fill a January 1 date. |
| close_group_membershipA | Record the last day a historically true membership held. Use this when someone left a group; the membership's earlier facts are preserved. It refuses
a membership that already records an end ( |
| find_groupsA | List groups whose normalized name contains Results are candidates, not identity: two groups with the same name stay distinct, so ask
the user which one is meant when several match. Sensitive and restricted groups are never
returned by this ordinary tool. Ordered by normalized name then id; |
| get_groupA | Return one group and a bounded page of its recorded memberships. These are recorded memberships only: sharing a group is context, not proof that members know
each other. Sensitive and restricted groups read as |
| list_group_membershipsA | Return a bounded page of one person's recorded group memberships with each group. Pass |
| explain_shared_connectionsA | Explain how two people are connected through groups they were both recorded in, and when. Use for shared-background, introduction, and "how do they know each other" questions. Pass
each person as an id ( Each connection is one membership of each person in the same group, cited in full. |
| get_stale_relationshipsA | Return people you have not interacted with recently, using ordinary interactions only. |
| get_person_timelineA | Return one person's recent history, newest first, as a bounded chronology. Pass Entries project durable records — interactions, observations, facts, affiliations,
relationships, and traits — with the stored timestamp each was placed by and which field
that was. Sensitive and restricted records are never returned by this ordinary tool, and a
trait names only evidence that is itself ordinary. An unknown or removed person returns
|
| get_consolidation_contextA | Return one person's stored facts, traits, observations, and affiliations and how they relate. Pass Use this before proposing maintenance.
This read never writes. Sensitive and restricted records are never returned, and a trait
names only evidence that is itself ordinary. Affiliations carry no disclosure level at all,
so this collection adds no sensitivity control and is no route to a protected fact —
background that needs one belongs in a fact. An unknown or removed person returns
|
| upcoming_datesB | Return ordinary birthdays and dated active reminders inside an inclusive upcoming window. Optionally narrow to one person by |
| merge_peopleB | Merge a duplicate person into a primary person atomically. |
| forgetA | Hard-delete a person or record and redact identifying audit history. |
| import_contentA | Extract and atomically stage header-only candidates from a supported source without bodies. Accepted A |
| stage_candidatesA | Stage agent-extracted people, interactions, records, relationships, groups, and memberships. Candidate types are Use this after extracting concise candidates from user-provided notes, meeting transcripts, or other
agent-visible text. Distinguish what was stated ( References are batch-local; raw notes and source text must not be included in candidate fields. A
request using A A trait may name the records it was drawn from. Give a supporting A shared context is two candidates, never one. A
|
| review_importA | Return staged candidates and statuses for one batch. The response carries a |
| amend_candidateA | Correct one staged candidate before it is committed, returning the revised batch. The patch replaces the named fields and leaves the rest alone. Nothing is committed: confirming an amendment is not acceptance of the batch. |
| withdraw_candidatesA | Drop staged candidates from consideration, returning the revised batch. A withdrawn candidate stays listed as |
| commit_importB | Commit accepted people and resolvable interactions idempotently. Accepting a withdrawn candidate refuses the whole commit. Supplying the
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| who | Identify one person and read what is stored. |
| remember | Record one direct statement with the `remember` tool, or stage extracted material for review. |
| meeting_prep | One short brief per attendee from stored context, guidance, and open follow-ups. |
| end_of_session_capture | Review what was learned about people and stage it for the user to review; never commit. |
| maintenance_review | Read timeline and consolidation signals, then propose corrections and wait for approval. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| people-context-guide | Resolution-first reads, context vs. guidance, meeting prep, and propose-then-commit capture. |
| people-context-self | Narrow identity of the person marked as self: id, canonical name, aliases, summary. |
TDQS
Scored across 41 tools
Most tools target a distinct resource and action, and detailed descriptions separate similar readers like get_person_context, get_consolidation_context, and get_person_timeline. Some overlap remains between the broad remember convenience tool and the specialized record_*/set_* writers, but the descriptions give clear usage guidance.
The naming is predominantly snake_case verb_noun and generally predictable (get_*, record_*, set_*, find_*, list_*). Minor deviations like semantic_search, upcoming_dates, and forget, plus mixed verb choices across create/set/add/record, keep it from being fully consistent.
41 tools is well beyond the typical well-scoped range and exceeds the 25+ threshold for a heavy surface. While the domain is broad, several tools overlap in purpose and could be consolidated, such as remember versus the record_* family and the multiple get_* context variants.
The tool surface covers the main lifecycle well: identity, facts, traits, interactions, relationships, affiliations, groups, reminders, imports, corrections, merges, and deletion. Minor gaps exist, such as no dedicated end/remove operation for affiliations or relationships and no batch listing for staged imports, but these are workable.