Privacy Policy — Draft
This draft is written by the engineering team and does not constitute legal advice. It will be reviewed by a qualified lawyer before formal publication or submission for Anthropic Connector Directory review. It reflects what's actually deployed today (updated September 2026, once the API-key and OAuth 2.1 remote services went live) — nothing here describes a feature that doesn't exist yet.
1. What we collect
Local mode (the memory-core-mcp stdio server)
The text you import or type, the entities and relations extracted from it, and its source/provenance (which passage, when) — stored in a SQLite file on your own machine. Nothing is uploaded automatically.
Cloud remote mode (api.yliuai.com — both access paths share the same data)
- Registration email: collected via POST /users/register for the API-key path, or via the magic-link login form for OAuth. Both resolve to the same user_id namespace — one email doesn't produce two accounts.
- Credentials are stored as hashes only: API keys and OAuth access/refresh tokens and the one-time magic-link token are all stored as hashes; the plaintext is shown to you exactly once, at creation, and we can't retrieve it afterward.
- Your memory graph data: entities, relations, timestamps, and source, stored in cloud Postgres, strictly isolated per user_id (cross-tenant isolation is covered by tests/test_postgres_store.py).
- Basic call logs: a timestamp and which tool was called (add_memory, search_memory, etc.) — not the content of the call — used for usage tracking.
- Deletion audit records: every forget_memory call logs an audit entry (time, how many entities/relations deleted), but the deleted data itself isn't retained in that log.
- OAuth client registration info: for MCP clients using Dynamic Client Registration (e.g. Claude Desktop), the client_id/redirect_uris they submit — this is information about which app is connecting, not your personal data.
2. What we don't collect
- Beyond an email address, we don't require any other personal identifying information to use this product, local or cloud.
- We don't log the actual text content of your tool calls (the "call logs" in section 1 are timestamp + tool name only).
3. Which third parties your data passes through
Extracting memories requires an LLM call; retrieval requires an embedding model — the data flow differs for each, stated plainly:
- LLM (for triple extraction) — local mode: whichever provider you configure yourself via environment variables (OpenAI, DeepSeek, etc.); your text goes to that provider. Cloud remote mode: this deployment is currently configured to use DeepSeek's API — text you send via add_memory is processed by DeepSeek; we don't separately retain that request content ourselves, but it passes through DeepSeek as a sub-processor, subject to DeepSeek's own privacy policy.
- Embedding model (for semantic retrieval): cloud remote mode runs a locally-deployed sentence-transformers model on our own server — no third party sees this text at all.
- Email delivery (OAuth login only): magic links are sent via Resend; your email address and the login link pass through Resend's infrastructure as a sub-processor, subject to Resend's own privacy policy.
- Outside of DeepSeek and Resend, we don't sell or share your data with any other third party.
4. Your rights: export and delete
- Export any time: both local and cloud modes support calling export_memory to export your complete memory graph (entities, relations, timestamps, source) at any time — a free capability, not a paid feature.
- Delete any time, for real: calling forget_memory is a physical deletion, not a status flag. The deletion itself is logged in an independent audit entry (time, how much deleted), but the deleted data itself isn't retained in that log. As a safety measure, each call deletes at most the single best-matching relation, to avoid an ambiguous query wiping out more than intended.
- If you want to fully close an account (deleting your email/credential record itself, not just memory data), that currently requires contacting us manually — there's no self-service account deletion yet (see "Known gaps" below).
5. How long we keep data
- There's no automatic expiration/deletion for memory data — it's kept until you call forget_memory yourself, or contact us to close the account. This describes the current state honestly; it isn't a promised design, and this section will be updated if an automatic retention policy is added later.
- OAuth access tokens (1 hour) and refresh tokens (30 days) are authentication-credential lifetimes, not a retention period for your memory data — an expired credential just means you need to sign in again; it doesn't delete anything.
6. Encryption and transport security — stated honestly
- API keys / OAuth credentials: stored as hashes only in the database; a leaked database doesn't leak usable plaintext credentials.
- Transport encryption: the client-to-Cloudflare-edge hop is standard HTTPS. Known gap: the Cloudflare-to-origin-server hop currently runs in Flexible mode, i.e. plaintext HTTP (this is a Cloudflare SSL/TLS configuration choice, not an application-layer design decision) — upgrading to Full mode (installing a Cloudflare Origin CA certificate on the origin) would encrypt this hop too.
- Encryption of memory data itself: the local SQLite version (LocalGraphStore) supports optional field-level Fernet encryption. The cloud Postgres version does not currently use the same field-level encryption — data is stored in plaintext in Postgres, relying on the server's own access controls (listening only on 127.0.0.1, database password stored separately). This is a real, unaddressed gap today, not a "planned" feature — see section 8.
7. Contact
A public contact channel hasn't been decided yet — this section is a placeholder. Anthropic's review process requires a privacy policy to include a real contact method, so this must be filled in with a real, intentionally-public channel before this policy is submitted for Connector Directory review or otherwise formally published.
8. Known gaps (to address, or at minimum disclose, before formal publication / review submission)
- No field-level encryption for memory data in the cloud Postgres store (section 6).
- The Cloudflare-to-origin hop currently runs plaintext HTTP (Flexible mode, section 6).
- No self-service account closure — currently handled manually on request (section 4).
- Section 7's contact method is still a placeholder and needs a real channel.
- Once billing is connected to real payment processing, this policy will need a section on payment-data handling (the cloud service currently has no billing/charges).
- A qualified lawyer needs to formally review this document — it's written by the engineering team and isn't legal advice.
9. Compliance claims we deliberately don't make
We don't claim this product is "GDPR compliant" or "legally mandated to protect your data" — export and delete are product principles we chose on our own, ahead of where regulation currently stands, not an existing compliance benefit we're taking credit for (GDPR Article 20's data-portability right doesn't clearly cover AI-inferred personal profiles/memories today — which is exactly the gap we think is worth covering proactively).