Authenticated JSON-RPC for one household. The caller is a family member, or an agent holding that member’s key. This is not a multi-client vendor API. Providers use Sandwich Soft MCP.
POST https://api.lovedone.app/mcp/v1
After initialize and tools/list, a typical agent:
get_user_profile — confirm workspacelist_loved_ones — ids and @lovedone.app addresseslist_family_members — who else is on the circlelist_inbox_messages then get_inbox_message — mail as plaintextlist_care_events — redacted Pipe events if Pipe is liveWrites (invite a sibling, mint a provider code, allocate an inbox) stay in the LovedOne UI in 0.2.0.
It cannot: list another family, act as a vendor dashboard, return HTML or attachment bytes, return raw FHIR, or move money.
api.lovedone.app/mcp/v1
One household. Mint at inbox.lovedone.app.
api.lovedone.app/mcp/vendor/v1
One agency roster. Do not collect family keys to build this. Provider spec →
Authorization: Bearer sk-sand-… minted at Settings → MCP API keys. Shown once. Stored as SHA-256./.well-known/oauth-authorization-server and /.well-known/oauth-protected-resource on inbox.lovedone.app. Scopes: profile:read, care_circle:read.
Transport: JSON-RPC 2.0, one POST per call, protocol 2025-03-26.
Handshake name com.lovedone/family-inbox, version 0.2.0.
Prefer structuredContent. Rate limit 60/min per key.
Alias: POST https://inbox.lovedone.app/api/mcp.
profile:read.care_circle:read.lovedOneId required, limit 1–50. Subject, sender, category, 280-character plaintext preview. No HTML. PHI may be present in subjects.messageId and lovedOneId required. Plaintext capped at 8 000 characters. Attachment metadata only. Ownership: message workspace and loved-one id must match.pipeAvailable: false, empty list. Never returns raw FHIR, raw MIME, or partner HMAC.Family Inbox mail can be ePHI: appointment reminders, lab portals, EOBs, pharmacy notices, discharge summaries. We treat it that way in the control set (audit, encryption, least privilege) even when the family is a consumer user.
Raw partner payloads live in GCP project sandwichpipe-vault:
Cloud Run, no user routes, Google-managed AES-256 plus application-layer
AES-256, a single redaction-worker service account, HMAC-signed egress
of already-redacted events into nunabot-472b3. This HTTP
handler does not read raw artifacts.
We do not claim HIPAA coverage for a given customer until a BAA is in place for that relationship. Google Cloud’s org-level BAA covers Firestore and Cloud Run. Vercel Enterprise BAA, Anthropic (in-app chat), and Cloudflare Email Routing terms are open items in the binder.
If you connect this MCP to a model provider, you are disclosing inbox plaintext to that provider. If you are a covered entity or business associate, you need a BAA with that provider before you send PHI.
Not attested yet. Type I is next. Type II needs a 6–12 month evidence window. Say that on questionnaires.
mcp_audit_log: caller, tool, timestamp, duration. Not message bodies.{
"mcpServers": {
"lovedone-family": {
"url": "https://api.lovedone.app/mcp/v1",
"headers": { "Authorization": "Bearer sk-sand-REPLACE" }
}
}
}
curl -s https://api.lovedone.app/mcp/v1 \ -H "Authorization: Bearer sk-sand-…" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"docs","version":"0"}}}'
In-product: inbox.lovedone.app/agents (lists both servers). Hub: mcp.html. Provider spec: mcp-vendor.html.