Space Context
The context layer for the physical world.
Film a space once, and your agent knows it: every room, item, key location and issue, each with the original video frame as evidence.
Docs · Quickstart · API reference · Console · MCP server
What it is
Agents know your code, your documents and your calendar. They know nothing about the places you live and work in.
Space Context fills that gap. Record a phone video of a space, narrated or not, and it becomes a Space Document, structured JSON that your agents can read:
- Inventory by room: items with location, quantity, condition, brand, model and visible text.
- Key locations: fuse box, water shut-off, boiler, router, smoke detectors, meters.
- How-tos taken from the narration ("fill the water tank at the back, then press the large button").
- Issues with severity and a suggested action, and facts (access, Wi-Fi, rules, contacts).
- Evidence: every record points to the original video frames it comes from.
Then you can compare two scans (check-in and check-out), ask a space questions and get answers with citations, search across all your spaces in any language, and export a space as an Agent Skill or a Markdown page.
It works for any space: a home, a short-term rental, a move-in or move-out, an office, a vehicle, an appliance. It uses the same account as the Space Context iPhone app, and spaces scanned with the app can be read through the API on every account.
What an agent gets back
"Where is the water shut-off?" asked of a space (POST /v1/spaces/{id}/ask):
{
"object": "answer",
"space_id": "spc_3f…", "scan_id": "scn_8a…",
"question": "Where is the water shut-off?",
"answer": "Under the bathroom sink, behind the cupboard door.",
"documented": true,
"citations": [
{
"record_type": "key_location", "record_id": "loc_1",
"title": "Main water valve", "area": "Bathroom",
"evidence": [{ "frame_id": "frame-14", "timestamp_ms": 41200, "url": "https://api.spacecontext.app/v1/media/…" }]
}
]
}
The answer comes only from the space's records. If they don't contain it, documented is false and the answer says so instead of guessing. The evidence url is a short-lived signed link to the frame the camera captured 41 seconds into the video.
Try it in 60 seconds
The demo space (spc_demo) contains two real scans of an apartment in Brisbane: photos at check-in, then a narrated video at check-out. Test keys (sc_test_…) can read it for free, with no limit and no payment.
0. Claude Code plugin. Once this repository is public: /plugin marketplace add finikoslab/spacecontext, then /plugin install spacecontext@spacecontext (the MCP server and a Space Context skill; run /mcp to sign in).
1. Connect your assistant (MCP). In Claude, open Settings → Connectors → Add custom connector and paste:
https://mcp.spacecontext.app/mcp
In Claude Code, run claude mcp add --transport http --scope user spacecontext https://mcp.spacecontext.app/mcp, then /mcp → Authenticate. Codex, ChatGPT, Cursor and VS Code are covered in Connect an assistant. You sign in with Apple, Google or an emailed code. The connection is read-only unless you allow scanning, which needs a card on file. It sees the spaces of your account (the demo is for test keys), so use the paths below to explore the demo first.
2. CLI.
npx spacecontext login --test # approve the code in the console; a free test key comes back
npx spacecontext ask spc_demo "where is the fuse box?"
npx spacecontext search "where is the fuse box?"
npx spacecontext skill spc_demo --out ./brisbane-apartment-skill
The fuse box is in the Open-plan Living, Dining and Kitchen, in the hallway cupboard behind the coats.
Sources
• Fuse box (Open-plan Living, Dining and Kitchen)
3. SDK. Create a test key in the console (API keys, mode Test), set it as SPACECONTEXT_API_KEY and install with npm install @spacecontext/sdk:
import { SpaceContext } from '@spacecontext/sdk';
const sc = new SpaceContext(); // reads SPACECONTEXT_API_KEY
const answer = await sc.spaces.ask('spc_demo', 'Where is the fuse box?');
const document = await sc.spaces.get('spc_demo'); // the whole Space Document
console.log(answer.answer, document.key_locations.map((k) => `${k.label}: ${k.location}`));
// Your own space, from a video: created, uploaded, analysed and followed live in one call.
const { spaceId } = await sc.scan('./tour.mp4', { name: 'Seaside flat', onProgress: (p) => console.log(p.type) });
4. curl. With the same key:
curl -X POST https://api.spacecontext.app/v1/spaces/spc_demo/ask \
-H "Authorization: Bearer $SPACECONTEXT_API_KEY" -H "Content-Type: application/json" \
-d '{"question": "Where is the fuse box?"}'
When you're ready to scan your own spaces, add a card in the console (nothing is charged: a live key that can scan needs one), sign in with npx spacecontext login to get a live key and scan a video. The first live scan of a new account is free (one free scan per card). Full walkthrough: Quickstart.
What you get
Pricing
You top up the balance by card through Stripe ($10 to $500 per payment), with optional automatic top-up and a monthly spending cap per key. Every top-up comes with an invoice. See Billing.
Limits
Every limit is listed in Limits.
Security and privacy
- Keys are shown once and stored hashed. Each key has scopes:
spaces:read,scans:read,scans:write, and the opt-inspaces:sensitive. A key withoutspaces:sensitivegets passwords, door and alarm codes, and the narration redacted from documents, answers, skills and exports. Search results never contain them, whatever the key. - Prompt injection from the physical world: text in a video that addresses an AI ("ignore your previous instructions…", on a sign or said on camera) is withheld before any model or agent reads it, and the document notes this in
coverage.warnings. This is a safety net, not a guarantee, so agents should still treat space content as untrusted data. - Storage: videos, frames and documents are stored on Cloudflare, with files in R2 in the EU jurisdiction. Source videos are deleted once their frames are extracted. Frames are kept as evidence and served through short-lived signed links.
- Webhooks are signed (HMAC-SHA256 over the timestamp and the body) and sent only to public HTTPS hosts. Redirects are never followed.
- MCP connections each get their own key, which you can revoke from the console. The assistant never sees the key.
Details: Security and privacy. To report a vulnerability, see SECURITY.md.
Packages
The analysis pipeline (vision, fusion, the deep pass and sensitive-value screening) runs in the hosted Space Context API and is not part of this repository.
For agents
- llms.txt: an index of every docs page. There's also llms-full.txt with everything in one file, and every page is served as Markdown (its URL with
.md). - OpenAPI 3.1 contract, for code generation and validation.
GET https://api.spacecontext.app/v1returns links to the contract, the docs,llms.txtand the MCP server. - MCP server at
https://mcp.spacecontext.app/mcp(Streamable HTTP, OAuth 2.1), with a server card listing its tools, resources and prompts. - Agent Skill:
npx spacecontext skill <space-id> --out ~/.claude/skills/<name>writes any space as a skill folder (SKILL.md,space.json,references/). The folder tells the agent to treat its content as data, cite the area, and say "not documented" instead of guessing.
Contributing
npm install
npm run check # build, typecheck and test every package
Node 22.12 or later. Read CONTRIBUTING.md for the layout, the security invariants and how the contract and SDK types are regenerated. Bugs and requests: issues.
License
MIT © Finikos S.r.l.