Start here
Quickstart
Connect one system of record and answer a real question against it. About five minutes, no sales call, and nothing you have to undo afterwards.
- 1
Create a workspace
Sign up with an email address. The workspace is created on first sign-in and you are its owner, which means you hold every entitlement scope in it.
Sign up - 2
Connect a system of record
Under Sources, connect either a read-only SQL query against a Postgres, Supabase or Neon database, or any MCP server you already run, given its Streamable HTTP URL and the names of a list tool and a fetch tool. Saving lists one record and reads it back, so a source that cannot be refreshed fails here rather than silently three days later.
- 3
Sync it once
Press Sync. Contextely reads the records, condenses each one into a memory object, and records the entities, topics, freshness contract and entitlement requirement for each. Any record that fails to condense is listed by name with its reason, not summarised as a count.
- 4
Create an API key
Under API keys. The key speaks as one member, so what an agent holding it can retrieve is exactly what that person can retrieve. Copy it now; it is shown once and stored only as a hash.
5. Ask it something
Four doors, one room. Every one of these runs the same retrieval pipeline, applies the same entitlement scoring and returns the same freshness labels. Pick whichever fits where you are standing.
In the dashboard
A person, checking that it worksThe Ask console at /app runs the same retrieval an agent runs, and shows the parts an ordinary search box hides: how many candidates were considered, how many were withheld on entitlement grounds, and what was refreshed. An owner or admin can also ask as another member, to check what that person would actually get.
Over MCP
Claude, Cursor, Zed, your own agentAdd the server to your MCP client config and restart it. The tools appear automatically; no schema to copy.
{
"mcpServers": {
"contextely": {
"url": "https://www.contextely.com/api/mcp",
"headers": { "Authorization": "Bearer ctx_sk_..." }
}
}
}From the terminal
A person, a script, a cron jobOne file, downloaded from this deployment. No package manager, no dependencies, nothing to trust beyond the file you just read. Save the key once and every later call is one line.
curl -fsSL https://www.contextely.com/cli.mjs -o contextely && chmod +x contextely ./contextely config set-key ctx_sk_... ./contextely search "acme renewal" ./contextely related <memory-id> # walk to what it relates to ./contextely expand <memory-id> # read the whole record from the source
Over HTTP
A backend service, a RAG pipeline, anythingOne POST. The response is the same object the MCP tool returns, so a service and an agent cannot end up looking at different answers.
curl -s https://www.contextely.com/api/v1/search \
-H "Authorization: Bearer ctx_sk_..." \
-H "Content-Type: application/json" \
-d '{"query":"acme renewal","limit":5}'Reading the answer
Three fields decide whether to trust a result, and they are in every response on every surface.
freshness.state
fresh is inside its TTL. refreshed means it was past its TTL and was just re-read from the source. stale_refresh_failed means it could not be verified, and the attached warning says why. Treat the third as possibly out of date rather than as an answer.
entitlement.withheld_for_entitlement
Above zero means relevant context existed that this asker may not see. An agent that reports that honestly is more useful than one that answers confidently from half a picture.
citation_url
Where the fact came from. If the summary is not enough, call context_expand with the object id and get the full current record back over the same connector.
Where to go next
- Concepts: sources, memory objects, scopes and TTLs
- MCP server reference: every tool and its schema
- REST API reference and the OpenAPI document
- CLI reference: every command and exit code
- Security model: what is guaranteed, and what is not claimed
- Self-hosting: Docker, environment, what leaves your network