Sign up and generate an API key from your dashboard. Keep it secure — never expose it client-side.
Use X-API-Key header or Bearer token. Every endpoint returns JSON.
Add the Zdravo MCP server to Claude, Cursor, or Windsurf. One config line, persistent memory for every agent.
Base URL: https://www.zdravo.ai/api/v1/memoriesStore a memory with full context/memoriesList memories with pagination/recallSemantic retrieval with trust scoring/searchFull-text + vector search/contextRetrieve governed context chain/decisionLog an AI-assisted decision receipt/decision/:idRetrieve a decision receipt/timelineProvenance chain for a memory/auditTamper-evident audit logFull OpenAPI spec available at zdravo.ai/openapi.yaml
Every endpoint. Real requests. Copy, paste, run.
curl -X POST https://www.zdravo.ai/api/v1/memories \
-H "X-API-Key: $ZDRAVO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Architecture decision: Supabase for auth",
"content": "We chose Supabase for user auth because RLS + hosted Postgres gives us row-level security without building it ourselves.",
"tags": ["architecture", "auth", "supabase"],
"memory_type": "semantic",
"visibility": "shared"
}'curl -X POST https://www.zdravo.ai/api/v1/recall \
-H "X-API-Key: $ZDRAVO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "auth architecture decisions",
"limit": 10,
"threshold": 0.72
}'curl -X POST https://www.zdravo.ai/api/v1/context \
-H "X-API-Key: $ZDRAVO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "Why did we choose Supabase over Firebase?",
"limit": 10,
"include_decisions": true,
"depth": 2
}'curl -X POST https://www.zdravo.ai/api/v1/decision \
-H "X-API-Key: $ZDRAVO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"decision": "Use pgvector for semantic search",
"reason": "Native Postgres extension, no separate vector DB needed",
"memory_ids_used": ["mem_abc123"],
"outcome": "accepted"
}'curl "https://www.zdravo.ai/api/v1/timeline?memory_id=mem_abc123&limit=20" \ -H "X-API-Key: $ZDRAVO_API_KEY"
curl "https://www.zdravo.ai/api/v1/audit?action=memory.create&limit=50" \ -H "X-API-Key: $ZDRAVO_API_KEY"
const ZDRAVO_API = "https://www.zdravo.ai/api/v1";
async function remember(title, content, tags) {
const res = await fetch(`${ZDRAVO_API}/memories`, {
method: "POST",
headers: {
"X-API-Key": process.env.ZDRAVO_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ title, content, tags }),
});
return res.json();
}
async function recall(query, limit = 10) {
const res = await fetch(`${ZDRAVO_API}/recall`, {
method: "POST",
headers: {
"X-API-Key": process.env.ZDRAVO_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ query, limit }),
});
return res.json();
}import os, requests
ZDRAVO_API = "https://www.zdravo.ai/api/v1"
HEADERS = {"X-API-Key": os.environ["ZDRAVO_API_KEY"]}
def remember(title, content, tags=None):
return requests.post(
f"{ZDRAVO_API}/memories",
headers=HEADERS,
json={"title": title, "content": content, "tags": tags or []},
).json()
def recall(query, limit=10):
return requests.post(
f"{ZDRAVO_API}/recall",
headers=HEADERS,
json={"query": query, "limit": limit},
).json()
def context(query, include_decisions=True):
return requests.post(
f"{ZDRAVO_API}/context",
headers=HEADERS,
json={"query": query, "include_decisions": include_decisions},
).json()We are building the persistent memory implementation for the Model Context Protocol ecosystem. Every MCP client — Claude, Cursor, Windsurf — gets governed memory in one config line.
Semantic search across memory
Persist a memory from any MCP client
Retrieve governed context for a task
Log a decision receipt via MCP
Provenance chain via MCP
Per-agent trust and outcome metrics