This quickstart follows the shortest supported path from a local checkout to an HTTP ingest-and-retrieve loop. The official Python SDK and packaged MCP client are coming soon, so the commands use curl and the documented API directly.
1. Start MemHouse
Install Git, Docker, and Docker Compose, then clone the server repository and start its Compose services:
git clone https://github.com/memhousehq/memhouse.git
cd memhouse
docker compose up -d
Use the configuration and credentials documented by that checkout if they differ from the defaults below. Keep the containers running for the remaining steps.
2. Check Service Health
curl --fail-with-body http://localhost:4000/api/health
A successful command returns a 2xx response from the service. If it fails, inspect the Compose services before continuing:
docker compose ps
docker compose logs
3. Configure This Shell
Set the local endpoint and an API key provisioned for your deployment:
export MEMHOUSE_URL="http://localhost:4000"
export MEMHOUSE_API_KEY="replace-with-your-api-key"
4. Ingest One Observation
curl --fail-with-body \
-X POST "$MEMHOUSE_URL/api/v1/ingest" \
-H "Authorization: Bearer $MEMHOUSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"session_id": "quickstart-session",
"scope_path": "/quickstart/preferences",
"content": "The user prefers concise release summaries."
}'
The authenticated identity establishes the account boundary. scope_path narrows this observation within that account, while session_id groups related turns.
5. Retrieve Governed Context
curl --fail-with-body \
-X POST "$MEMHOUSE_URL/api/v1/context" \
-H "Authorization: Bearer $MEMHOUSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"scope_path": "/quickstart/preferences",
"session_id": "quickstart-session",
"budget_chars": 4000
}'
The endpoint returns projection-backed context visible to this caller and scope. Depending on extraction and governance policy, the observation may produce no immediately visible fact; an empty result is not evidence that tenant boundaries should be bypassed.
You now have the core integration loop. Applications call /api/v1/context before model generation and /api/v1/ingest when a new observation should enter the governed memory pipeline.