Two authenticated Model Context Protocol servers. They share a host
(api.lovedone.app) and a key prefix (sk-sand-).
They do not share tenancy, tools, or audit purpose. A family key on the
vendor URL returns HTTP 403 WRONG_SURFACE.
Short names: LovedOne MCP (family) and
Soft MCP (providers). Pipe is ingest, not MCP.
api.lovedone.app/mcp/v1
Adult children coordinating a household. Lists loved ones, members,
and inbox mail as plaintext. Registry app.lovedone/family-inbox 0.3.0.
api.lovedone.app/mcp/vendor/v1
Home-care, tech-support, and trades vendors. One key lists that
agency's clients, visits, and invoices. Registry app.lovedone/soft 0.2.0.
Both pages, and both in-product agent screens (inbox.lovedone.app/agents and soft.lovedone.app/agents), list the other server so a developer who lands on the wrong host still sees the difference.
docs.joinsandwich.com URLs redirect here permanently.
api.lovedone.app is where agents connect: Family MCP
/mcp/v1 and Soft MCP /mcp/vendor/v1.
Pipe is planned at POST https://api.lovedone.app/sandwichpipe/v1/events
and is not live yet. It is HMAC ingest, not MCP.
api.joinsandwich.com is dead — do not POST there.
ping · get_user_profile · list_loved_ones · list_family_members · list_inbox_messages · get_inbox_message · list_care_events · invite_family_member · create_provider_code · reply_to_inbox_messageping · get_agency_profile · list_clients · get_client · list_visits · add_visit_note · schedule_visit · list_invoicesDo not invent a third MCP brand. Map the protocol onto the products you already sell.
api.lovedone.app is the MCP API host, not a product name. Both
MCP servers live there so partner and agent traffic share one apex.
Pipe’s planned path on the same host is
/sandwichpipe/v1/events — not live yet.
/mcp/v1 is family. /mcp/vendor/v1 is Soft.
Say the product first, then MCP. Do not say “Sandwich MCP”
without Family or Soft after it. That was the old single-server name
and it is how people mix the two.
Keys look like sk-sand- plus 64 hex characters. Plaintext
is shown once at mint. Firestore stores SHA-256. Each key is tagged
surface: family or surface: agency. The HTTP
handler compares that tag to the endpoint. Mismatch is HTTP 403
WRONG_SURFACE.
Mint family keys at inbox.lovedone.app/settings/mcp-keys. Mint Soft keys in the portal under Settings → MCP keys (owner or admin). OAuth 2.1 + PKCE is available for hosted connectors. Session cookies work for in-app agents on each product host.
Transport: JSON-RPC 2.0, one POST per call, protocol
2025-03-26. Prefer structuredContent on tool
results. Rate limit: 60 requests/minute per key.
Family Inbox subjects and bodies can be PHI (appointments, labs, EOBs). Soft visit notes can be health-related. Tools return plaintext, never raw HTML (XSS plus extra PHI in quoted threads). Attachment bytes are not returned.
Raw EHR and inbound MIME live in GCP project sandwichpipe-vault
on Cloud Run. No user routes. Application-layer AES-256 plus Google-managed
keys. Family MCP list_care_events reads already-redacted
fields only, and only when Pipe is connected. Soft MCP never dumps vault
blobs.
Sibling emails appear on Family list_family_members only.
Soft list_clients does not return family-member emails.
We are not SOC 2 attested yet. Type I (control design at a point in time) is the next formal step. Type II needs a 6–12 month evidence window we have not opened. Say that plainly on vendor security forms.
revokedAt; next call fails.mcp_audit_log: uid, apiKeyId, method, tool, success, duration. Not arguments or bodies.
Full control narrative: the repo file docs/BAA-HIPAA-SOC2.md.
Family (Claude Desktop / Cursor):
{
"mcpServers": {
"lovedone-family": {
"url": "https://api.lovedone.app/mcp/v1",
"headers": { "Authorization": "Bearer sk-sand-…" }
}
}
}
Provider:
{
"mcpServers": {
"sandwich-soft": {
"url": "https://api.lovedone.app/mcp/vendor/v1",
"headers": { "Authorization": "Bearer sk-sand-…" }
}
}
}
Do not put a Soft key in the family slot, or the reverse.
LovedOne Family MCP specification · LovedOne Soft MCP specification · Sandwich Pipe · Public sandbox (not PHI)