Skip to main content

people-context

English | 简体中文

Your agent already remembers your codebase. Now it can remember your people.

people-context is a local-first MCP server and CLI that gives AI agents durable memory about the people in your life: who someone is, how you know them, what you last agreed, and how they like to be talked to. One SQLite file on your machine. No account, no cloud, no network calls.

CI codecov OpenSSF Scorecard OpenSSF Best Practices PyPI PyPI downloads Python License

pctx demo: seed a fictional dataset, list people, and print a brief

Why

Ask an assistant "how should I approach Priya about the reporting delay?" and it has nothing: it does not know which Priya, that she is your counterpart at a partner org, that you agreed a new deadline last week, or that she prefers a short email over a call. That knowledge lives in your head, your inbox, and a notes file the agent cannot see.

people-context keeps it in one place the agent can query through narrow tools:

  • Who is this? Explainable name resolution over names, nicknames, aliases, and handles. Two Priyas come back as two candidates with a match reason, never a silent guess.
  • What do I know? Relationships, organisations and roles, durable facts, concise interaction summaries, traits, reminders, and a per-person timeline, each disclosed only as far as the request needs.
  • How do I talk to them? Communication guidance grounded in recorded traits, past friction, open follow-ups, and your own written philosophy.
  • Who has gone quiet? Stale-relationship and upcoming-date reports over what is already stored.
  • Get data in safely. Email, mbox, vCard, calendar, LinkedIn, Outlook, and WhatsApp exports are staged as reviewable candidates. You approve what gets recorded; raw source content is never kept.

It is opinionated about trust: writes are audited, forget is a real delete, sensitive records sit behind an operator-only gate that a prompt cannot open, and ordinary commands never touch the network.

Demo

A packaged fictional dataset is the fastest way to see identity resolution, graph traversal, and bounded context without touching real data:

uvx --from people-context pctx demo --reset

The demo always writes its own dedicated database at {XDG_DATA_HOME or ~/.local/share}/people-context/demo.db. It ignores --db, PEOPLE_CONTEXT_DB, the config file, and workspace discovery, and --reset replaces only that file plus its -wal/-shm companions, so a real database is never read or modified. Seeding writes audited fictional people, handles, affiliations, facts, interactions, and a connected relationship graph, then prints the path-targeted server command and concrete tool calls that use the ids it just created:

Demo database: /home/you/.local/share/people-context/demo.db
Start MCP server: people-context-mcp --db /home/you/.local/share/people-context/demo.db
resolve_person {"query": "Amina Hassan"}
get_relationship_graph {"person_id": "<amina-id>", "depth": 2}
find_connection {"person_a": "<self-id>", "person_b": "<sofia-id>"}

Person ids are generated per seed, so the printed values differ from the placeholders above. Start the printed server command in an MCP client and run the printed calls verbatim. See docs/cli.md.

Quick start

Upgrading from a release before the shared ~/.pctx/people.db default? Before any client starts the new version, inventory and pin each client's existing database as described in Upgrading to the shared default.

Requires Python 3.11+ and uv. Pick your client; each is one step.

Claude Code
claude plugin marketplace add JinyangWang27/people-context
claude plugin install people-context@people-context-plugins

Restart Claude Code or run /reload-plugins. You get the server plus /people-context:who, /people-context:remember, and /people-context:reminders. Details: docs/claude-code-plugin.md.

Claude Desktop

Download people-context.mcpb from the latest release and open it. Claude Desktop installs the pinned release with its own uv runtime. Details: docs/desktop-and-editors.md.

Codex
codex plugin marketplace add JinyangWang27/people-context
codex plugin add people-context@people-context-plugins

Start a new Codex session. Details: docs/codex-plugin.md.

Cursor, Windsurf, VS Code, or any MCP client

Add the stdio server to your client's MCP config (.cursor/mcp.json, ~/.codeium/windsurf/mcp_config.json, .vscode/mcp.json, ...):

{
  "mcpServers": {
    "people-context": {
      "command": "uvx",
      "args": ["--from", "people-context", "people-context"]
    }
  }
}

Or let the CLI write it: uvx --from people-context pctx setup cursor (also windsurf, vscode, claude-desktop; add --dry-run to preview). VS Code uses a servers key with "type": "stdio". Per-editor snippets: docs/desktop-and-editors.md.

OpenClaw
openclaw plugins install clawhub:openclaw-plugin-people-context

The native plugin talks to the opt-in loopback HTTP server. Details: docs/openclaw-plugin.md.

CLI only
uv tool install people-context
pctx init        # seed your own record, optionally import a vCard, then connect a client
pctx --help

people-context and people-context-mcp are the server commands; pctx is the human-operated CLI.

Then try, in your agent:

Who is Amina?

Remember that Amina from Open City Lab prefers short emails and hates surprise calls.

What should I know before my meeting with Daniel tomorrow?

The second one is a single remember tool call: the name is resolved, the person is created only if nobody matches, and the affiliation and preference are recorded in one audited transaction. Ambiguous names come back as candidates, never a guess.

Or, without an agent: pctx remember "Amina Hassan" "prefers short emails" --org "Open City Lab" and pctx brief "Amina Hassan". Five worked scenarios live in docs/use-cases.

What it remembers, and what it never does

It remembers It never does
Names, nicknames, aliases, and handles Upload anything, anywhere
Relationships with a canonical, extensible vocabulary Store raw imported emails, chats, or files
Organisations, roles, and time-bounded affiliations Let a model enable sensitive disclosure or full export
Durable facts, observations, and traits with evidence Commit imported or agent-extracted data without your review
Concise interaction summaries and a per-person timeline Log private values or keep a soft-deleted copy after forget
Reminders, follow-ups, and your communication philosophy Make a network request outside pctx reindex --semantic

How it compares

people-context Assistant memory (ChatGPT, Claude) Memory platforms (Mem0 and similar)
Where data lives One SQLite file you own Vendor account Vendor platform or your own deployment
Works offline Yes No Self-hosted only
Knows people as first-class records Identity, relationships, roles, graph, guidance Free-text notes Free-text or vector memories
Explains a match Ranked candidates with a reason; ambiguity is surfaced No Similarity score
Import review gate Stage, review, commit n/a Automatic extraction
Deletion Hard delete plus audit redaction in one transaction Request to vendor API delete
Backup and move pctx sync push / pull bundle n/a Deployment-specific

The dated, sourced version with vendor documentation links is in docs/privacy-and-safety.md.

Security model

This project executes local Python with the launching user's filesystem permissions. Ordinary MCP discovery excludes elevated sensitive context and full export. Operator-gated tools require process environment flags; models cannot enable them through arguments. Vault export is intentionally CLI-only.

The database is plaintext SQLite by default. On Unix-like systems a new one is created 0600, so other local accounts cannot read it. That is a boundary between accounts, not encryption, so pair it with full-disk encryption or opt into SQLCipher at-rest encryption (uv sync --extra encrypted, key read only from PEOPLE_CONTEXT_DB_KEY). See database file permissions and optional at-rest encryption.

Going further

  • Loopback HTTP for clients that cannot spawn stdio: people-context-mcp --http --host 127.0.0.1 --port 8765. Unauthenticated and local-only by design; prefer stdio. See docs/cli.md.
  • Semantic search: uv sync --extra semantic && pctx reindex --semantic downloads a pinned multilingual Model2Vec model once; server startup and search stay cache-only.
  • Obsidian: pctx export-vault --output ~/PeopleVault writes a deterministic, browsable vault, and a read-only Obsidian plugin renders live briefs. See docs/obsidian-plugin.md.
  • Import: pctx import stage SOURCE PATH then review and commit, over email, mbox, vCard, .ics, LinkedIn, Outlook, and WhatsApp exports. Agents can stage extracted candidates the same way. See docs/import.md.
  • Reports and maintenance: pctx stale, pctx upcoming, pctx timeline, pctx doctor, pctx stats.
  • Backup and second device: pctx sync push --output DIR and pctx sync pull --input PATH.
  • Docker: docker run --rm -i -v people-context-data:/data ghcr.io/jinyangwang27/people-context:latest. A convenience image, not a sandbox. See docs/docker.md.
  • Database location: --db, then PEOPLE_CONTEXT_DB, then the XDG config file, then the shared ~/.pctx/people.db. Inspect with pctx db-path -v.

The full command reference is in docs/cli.md; the MCP tool inventory and response contracts are in docs/mcp-interface.md; what stays stable across releases is in docs/compatibility.md.

Architecture

The codebase follows ports and adapters:

adapters (SQLite, MCP, filesystem, imports, CLI)
        ↓ implement
ports (narrow Protocols)
        ↑ used by
app (use cases and policy)
        ↓ operates on
domain (entities and values)

Dependencies point inward. Vocabulary normalization and graph caps live in app/domain; recursive SQL and file writing live in adapters. One composition root wires both stdio and HTTP. See docs/architecture.md.

Documentation

Document Contents
docs/architecture.md Layering, dependency rule, entrypoint wiring
docs/data-model.md Schema, migrations, and perspective display_type
docs/relationship-graph.md Vocabulary, normalization, perspective, traversal, curation
docs/vault-export.md Layout, marker safety, determinism, sensitivity
docs/mcp-interface.md MCP tools and stable response contracts
docs/compatibility.md What stays stable across releases for MCP, DB, CLI, and JSON
docs/cli.md CLI commands and DB resolution
docs/import.md Import sources, staging, review, and commit
docs/design/sync.md Sync design and delivered local foundations
docs/releasing.md PyPI trusted publishing, Codecov, and release procedure
docs/mcp-registry.md MCP Registry namespace, server.json, and community-directory submission matrix
docs/distribution-checklist.md Account-owner walkthrough: Registry publish, directories, awesome lists, Desktop directory, Obsidian
docs/desktop-and-editors.md Native-UV MCPB Desktop bundle and Cursor/Windsurf/VS Code snippets
docs/docker.md Optional non-root stdio Docker image, data volume, and GHCR publishing
docs/claude-code-plugin.md Claude Code install, runtime, privacy, validation, and publishing
docs/codex-plugin.md Codex install, runtime, privacy, validation, and publishing
docs/openclaw-plugin.md OpenClaw install, runtime, privacy, validation, and ClawHub publishing
docs/obsidian-plugin.md Obsidian read-only panes, subprocess safety, encryption, and mirrored releases
docs/privacy-and-safety.md Disclosure, audit, forget, threat model
docs/use-cases Narrative recipes for onboarding, meeting prep, follow-up, migration, and auditing
docs/evals.md Evaluation harness, fixed tasks, scoring rules, and dated recorded results
docs/roadmap.md Delivered milestones and planned work
docs/specs One implementation spec per planned milestone
M25 coaching spec Planned communication coaching, practice, and reflection
M26 transcript review spec Planned review of split and mixed speaker attribution

Contributing

Issues and pull requests are welcome; see CONTRIBUTING.md for the architecture rules, validation commands, and a list of good first issues. Questions and show-and-tell go to Discussions.

If people-context is useful to you, a star helps other people find it.

License

MIT. See LICENSE.

Release files for people-context 1.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for people-context 1.2.1
File Size Uploaded
people_context-1.2.1.tar.gz 1.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for people-context 1.2.1
File Interpreter ABI Platform
people_context-1.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 2.2 MB

Release files / people_context-1.2.1.tar.gz

Download URL people_context-1.2.1.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
b80bd2cc21d670c8684bb2ba59e21db9293e76d7aa8444ceeeb9570d63eb65c3
BLAKE2b-256 checksum
How to use checksums
a691ef870c493979b33fd11f014887ffc505a6ebba2e9207a8df3b2f6174ca67
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.

Transparency log

Release files / people_context-1.2.1-py3-none-any.whl

Download URL people_context-1.2.1-py3-none-any.whl
Size 506.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e5d0daa678027155674fddcc3d921d88260db870e351ae58b3cb979a4b4326c0
BLAKE2b-256 checksum
How to use checksums
1a702f86013a5f7a23c8ca821646b23e454c009e50b4b7da02bc0b0668d75fe3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.

Transparency log

Release history Release notifications | RSS feed

1.3.0

2 release files

This release

1.2.1 This release

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.4.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page