Skip to content
Agentmart
Submit a tool

People Context

Local-first MCP server giving AI agents contextual knowledge about the people in your life

Connector by JinyangWang27 · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 59
Write a review

Chalk Labs

Need help deploying People Context?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/jinyangwang27-people-context

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Local-first MCP server giving AI agents contextual knowledge about the people in your life

Use cases: agent-memory, crm

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Runs code on install

Its package runs an install script (such as npm postinstall or setup.py code) as soon as you install it, before any tool is called. Read the script first.

Tools
19 read · 23 write · 1 delete · 4 not yet classified
Secrets
None asked for
Install scripts
Runs code on install
Runs as
Python package

Tools by what they do 47

Read from the source code; the running server may list different tools.

Read 19 · Look things up without changing anything.

  • explain_shared_connections
  • find_connection
  • find_groups
  • get_communication_guidance
  • get_consolidation_context
  • get_group
  • get_person_context
  • get_person_timeline
  • get_relationship_graph
  • get_sensitive_person_context
  • get_stale_relationships
  • list_group_memberships
Show 7 more tools
  • list_reminders
  • people_communication_guidance
  • people_context
  • review_import
  • search_people
  • semantic_search
  • upcoming_dates

Write 23 · Create, change, send or run things.

  • add_alias
  • add_group_membership
  • close_group_membership
  • commit_import
  • complete_reminder
  • correct_record
  • create_group
  • import_content
  • merge_people
  • people_remember
  • people_resolve
  • record_fact
Show 11 more tools
  • record_interaction
  • record_observation
  • record_trait
  • remember
  • remember_person
  • resolve_person
  • set_affiliation
  • set_communication_philosophy
  • set_relationship
  • set_reminder
  • supersede_fact

Delete 1 · Delete, drop, revoke or wipe things.

  • withdraw_candidates

Not yet classified 4 · We could not tell from the name and description.

  • amend_candidate
  • export_data
  • forget
  • stage_candidates

Network hosts it talks to 4

  • github.com · found in code
  • glama.ai · found in code
  • huggingface.co · found in code
  • json.schemastore.org · found in code

Files it touches

  • /dev/stdin
  • /dev/tty
  • /tmp/people.db
  • Your home directory (~)
  • ~/.pctx/people.db
  • C:\\Windows\\notepad.exe
  • Any path the agent passes to its tools

Tools (47)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_alias

    Add a normalized-deduplicated alias to an existing person. `kind` is one of `nickname`, `native_script`, `transliteration`, `handle`, `former_name`, or `other`, and defaults to `other`. The published schema carries the enum, so an unlisted value is refused before the alias is built rather than dropped.

  • add_group_membership

    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. `temporal_basis` is `unknown` (no dates), `period` (at least one known bound; a missing bound means unknown, not open-ended), or `ongoing` (asserted current, no end date); it is inferred from the dates when omitted, except that `ongoing` must be stated. `role` defaults to `member`. `sensitivity` defaults to `personal`. Concurrent and historical memberships are all kept.

  • amend_candidate

    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.

  • close_group_membership

    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 (`already_ended`) or an end before its start (`ends_before_start`). Use `correct_record` with entity type `group_membership` when a stored membership was simply wrong.

  • commit_import

    Commit accepted people and resolvable interactions idempotently. Accepting a withdrawn candidate refuses the whole commit. Supplying the `expected_batch_digest` from the review the user approved refuses it if the batch moved after they saw it.

  • complete_reminder

    Transition one active reminder to completed.

  • correct_record

    Correct whitelisted assertion fields in place with before/after audit.

  • create_group

    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 `find_groups` first and reuse the returned `id` when the user confirms it is the same one. `organization_id` must name an existing organization and only places the group under it — it creates no affiliation. `sensitivity` defaults to `personal`; a `sensitive` or `restricted` group is withheld from ordinary reads together with every membership in it.

  • explain_shared_connections

    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 (`person_a_id`, `person_b_id`) or a name (`person_a`, `person_b`). Each connection is one membership of each person in the same group, cited in full. `label` is `classmates` (both `student` in a `class`) or `teammates` (both `participant` in a `team`) only when the recorded dates prove a common day (`temporal: overlap`, with the `overlap` period); otherwise the connection is `shared_context` o…

  • export_data

    Export the complete portable domain dataset. This tool is absent from the normal MCP surface. Prefer the human-operated `pctx export` CLI; enable this tool only for a deliberately elevated MCP server process.

  • find_connection

    Return one shortest relationship path, or a structured not-connected result.

  • find_groups

    List groups whose normalized name contains `name`, optionally of one `kind`. 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; `truncated` reports more.

  • forget

    Hard-delete a person or record and redact identifying audit history.

  • get_communication_guidance

    Return sensitivity-gated signal for client-composed communication advice. Pass `person_id` from `resolve_person`, or `person` (a name or alias) to resolve inline; an ambiguous name returns candidates instead of guidance.

  • get_consolidation_context

    Return one person's stored facts, traits, observations, and affiliations and how they relate. Pass `person_id` from `resolve_person`, or `person` (a name or alias) to resolve inline. Use this before proposing maintenance. `signals` names pairs of records that share a predicate or category and says how they stand — `duplicate_fact`, `restated_fact`, `contradictory_fact`, `succeeding_fact`, `duplicate_trait`, `divergent_trait` — comparing normalized values and inclusive validity periods only. It decides nothing: reading the evidence and proposing a `correct_record`, a `supersede_fact`, or a `m…

Show 32 more tools
  • get_group

    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 `found: false`, and sensitive or restricted memberships are omitted without affecting `truncated`.

  • get_person_context

    Assemble a minimal-disclosure context bundle for one person. Pass `person_id` from `resolve_person`, or `person` (a name or alias) to resolve inline: an ambiguous name returns the candidates instead of context. Returns narrow identity fields, active relationships and affiliations, and one ranked facts/interactions slice capped by `max_items`. Set `include_communication=true` (or a `purpose` mentioning communication) to include communication traits. Sensitive and restricted records are never returned by this ordinary tool, and leave no trace that they exist. `truncated` says the item budget cu…

  • get_person_timeline

    Return one person's recent history, newest first, as a bounded chronology. Pass `person_id` from `resolve_person`, or `person` (a name or alias) to resolve inline. 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 `found: false` rather than an error.

  • get_relationship_graph

    Return active relationship structure around one person, capped for bounded disclosure. Pass `person_id` from `resolve_person`, or `person` (a name or alias) to resolve inline.

  • get_sensitive_person_context

    Return context that may include sensitive and restricted records. This tool is absent from the normal MCP surface. The operator must restart the server with PEOPLE_CONTEXT_MCP_ENABLE_SENSITIVE=1 before a client can discover or invoke it.

  • get_stale_relationships

    Return people you have not interacted with recently, using ordinary interactions only.

  • import_content

    Extract and atomically stage header-only candidates from a supported source without bodies. Accepted `source_type` values are `email`, `mbox`, `vcard`, `ics`, `linkedin`, `outlook`, and `whatsapp`. `self_sender` is an optional chat-export label for the user, such as a display name or a bare phone number, used to omit the user's own messages. A `path` import records a receipt for the file it read, so importing that exact file again reports the existing batch instead of staging a second copy. `forced` says the repeat is intentional: it stages the same content as a distinct processing session a…

  • list_group_memberships

    Return a bounded page of one person's recorded group memberships with each group. Pass `person_id` from `resolve_person`, or `person` (a name or alias) to resolve inline. Only ordinary memberships in ordinary groups are returned. An unknown or removed person returns `found: false`.

  • list_reminders

    List pull-based reminders, due-dated first and communication notes last. Filter by `person_id`, or by `person` (a name or alias) resolved inline; omit both for every person's reminders.

  • merge_people

    Merge a duplicate person into a primary person atomically.

  • people_communication_guidance

    Return traits, friction history, reminders, and the user's communication philosophy for a person.

  • people_context

    Return a minimal-disclosure context bundle for a known person.

  • people_remember

    Create or update a person record, including aliases and summary.

  • people_resolve

    Resolve a name, nickname, or partial reference to one or more known people.

  • record_fact

    Record a time-aware fact about an existing person. `sensitivity` defaults to `personal`; `sensitive` and `restricted` records are withheld from ordinary reads. Prefer `remember` for a single statement named by a person's name.

  • record_interaction

    Record a concise interaction summary after validating all participants.

  • record_observation

    Record a subjective observation, separate from disclosed context.

  • record_trait

    Record a derived trait with validated category and provenance. `category` is one of `communication_style`, `temperament`, `values`, `preference`, `topics_to_avoid`, or `other`. Cite the observation or interaction it rests on in `evidence_note` or `evidence_ids` where you can.

  • remember

    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". `person` is the name as the user said it: it is resolved first, and a new person is created only when nobody matches. `org`/`role` record an affiliation, `relationship` records how the user relates to them (e.g. `manager_of`, `friend_of`, from the user's point of view), and `note` records the statement as a `fact`, `trait`, or `interaction`. Leave `kind` as `auto` to class…

  • remember_person

    Create a new person or update the existing one matching `name`. Use this to durably record someone the user talks about. `aliases` is a list of `{value, kind?, lang?, script?}` objects (kinds: nickname, native_script, transliteration, handle, former_name, other); new aliases are merged into an existing record. Set `summary` to describe who they are, and `is_self=True` only for the user themselves. Returns the person and whether it was created.

  • resolve_person

    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 `ambiguous` and all are returned so you can disambiguate with extra context or a clarifying question. An empty candidate list means no confident match — use `remember` or `remember_person` to create a new record. Put distinguishing context in `hints` (`org`, `role`, `relationship`) rather than in `query`.

  • review_import

    Return staged candidates and statuses for one batch. The response carries a `batch_digest`. Pass it back to `amend_candidate`, `withdraw_candidates`, or `commit_import` to have the action refused if somebody else changed the batch after this read.

  • search_people

    Free-text search over stored people for browsing or lookup. Broader than `resolve_person`: use this to list who is known that matches a query, rather than to pin down a single identity. Returns ranked candidates.

  • semantic_search

    Search active people and safe interaction summaries by multilingual semantic similarity. This optional local search requires an explicit `pctx reindex --semantic` first. It never downloads a model while serving a query and refuses to mix vectors from different model revisions.

  • set_affiliation

    Create an affiliation, resolving an org id or get/creating by name.

  • set_communication_philosophy

    Store communication philosophy verbatim while auditing lengths only.

  • set_relationship

    Create a directed relationship between two existing people.

  • set_reminder

    Create a reminder for an existing person. `kind` is `follow_up` (dated, something to do), `occasion` (a date that recurs), or `communication_note` (undated guidance surfaced with the person's context).

  • stage_candidates

    Stage agent-extracted people, interactions, records, relationships, groups, and memberships. Candidate types are `person`, `interaction`, `affiliation`, `fact`, `observation`, `trait`, `relationship`, `group`, and `group_membership`. Use this after extracting concise candidates from user-provided notes, meeting transcripts, or other agent-visible text. Distinguish what was stated (`fact`), what happened in this source (`observation`), and what you inferred (`trait`, which requires an explicit `confidence` and a concise `evidence_note`). Relationship candidates carry batch-local `from_ref`/`t…

  • supersede_fact

    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; `correct_record` remains the tool for a value that was simply wrong. The old fact keeps its person, predicate, value, and provenance and is closed the day before `effective_from`; the replacement inherits the old assertion's original end date, so a bounded claim is never widened into an open-ended one. Person, predicate, and the replacement's end date cannot be changed here. Omitting `confidence` or `sensitivity` inherits the old f…

  • upcoming_dates

    Return ordinary birthdays and dated active reminders inside an inclusive upcoming window. Optionally narrow to one person by `person_id` or by `person` (a name or alias).

  • withdraw_candidates

    Drop staged candidates from consideration, returning the revised batch. A withdrawn candidate stays listed as `rejected` so the user can see what was dropped, and is never committed. Nothing else about the batch changes.

Signals

Stars
59
Forks
4
Open issues
0
Contributors
7
Weekly downloads
64
Last commit
Oct 24, 2026 (7 days ago)
Last release
Sep 22, 2026 (1 month ago)
Last package publish
Sep 22, 2026 (1 month ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.JinyangWang27/people-context
Version
1.3.0
Auth
No auth
Packages
pypi people-context
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get People Context running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying People Context?

CallGet help
Cite this page

People Context MCP server. Agent Mart. https://agentmart.dev/connectors/jinyangwang27-people-context (last updated 2026-10-24)