agent surface · 12 MCP tools · 3 scopes · p50 88ms
For agents

One endpoint for every agent.

The same workspace your team writes to is exposed as an MCP server. Claude Desktop, Cursor, Lindy, Codex — anything that speaks MCP — reads and proposes writes through one addressable surface.

https://bcontext.dev/w/your-workspace/mcp copy
Auth
OAuth · .well-known/oauth-authorization-server
Tools
12 exposed · 3 scopes
Idempotency
enabled · 10-min TTL
Status
healthy · p50 88ms
Tool catalog

12 tools, three scopes. The whole agent loop in one bag.

Read tools never mutate. Write tools never apply — they propose. Apply tools require reviewer scope. The shape of the surface is the safety model.

context.searchread
Hybrid pgvector + BM25 search over scoped workspace. Returns ranked node ids with scores.
(query: string, k?: 8, filters?: {kind, since})
context.read_noderead
Fetch one node by id with its frontmatter, body, and outgoing edges.
(id: string, include_edges?: true)
activity.tailread
Recent edits + agent activity. Useful for "what changed since I last checked".
(since?: ISO8601, limit?: 50)
context.neighborsread
Walk the edge graph one hop out. Backlinks, forward refs, typed edges.
(id: string, edge_kind?: string)
write.proposewrite
Batched proposal. Idempotency-Key replays return the original body. Lands in review queue by default.
(ops: Op[], idempotency_key: string)
write.applyapply
Apply a previously-proposed batch. Requires reviewer scope on the workspace.
(proposal_id: string)
skill.runwrite
Execute a workspace-scoped skill. Skills are pinned versions of curated agents.
(skill_id: string, args: object)
embed.runwrite
Re-embed selected nodes. Useful after a model swap or bulk import.
(node_ids?: string[], model?: string)
Idempotent by construction

Retries are free. Duplicates are impossible.

Every write carries an Idempotency-Key. The second call returns the first response from a 200-key LRU with a 10-minute TTL. Try it →

  • Replay returns original body verbatim· plus `Idempotent-Replay: true`
  • No double-create· agent retries on flaky networks are safe
  • Audit log records the original request id· not the replay
  • Cache evicts at 200 keys / 10 min· whichever comes first
Idempotency-Key: codex-batch-7f3a
no calls yet — click “Send again” →
sent: 0
Three scopes

The token's scope is the only thing standing between read and mutation.

01
read

Pulls context.

Search, fetch, list, walk. Cannot create, update, delete, or apply anything. Safe to hand to any tool that just needs to know things.

  • context.search · read_node · neighbors
  • activity.tail
  • any mutation
02
propose

Stages writes.

Can read everything and stage batched proposals. Proposals land in a review queue; nothing is applied without a human (or an apply-scoped token) signing off.

  • everything in read
  • write.propose · skill.run · embed.run
  • write.apply
03
apply

Closes the loop.

Reserved for trusted agents and human reviewers. Applies queued proposals after the review surface signs off. Pair with a separate identity than your everyday agent.

  • everything in propose
  • write.apply
  • token transfer / scope escalation
Review surface

Every agent write is a PR.

Proposals look like diffs. Each op has an apply/reject toggle. You can accept partial — apply two of three ops, send the third back. The agent that proposed gets a structured response on the next read.

Inline diff
see exactly what changes — field-level for updates, full body for creates
Partial accept
apply 2/3 ops, reject the third with a structured reason
Notifications
pending proposals appear in the workspace bell and via webhook
Audited
every applied op is tagged with both the proposer and the reviewer
codex · gpt-5
proposal #prop-codex-7f3a · 2 minutes ago
awaiting review
“Isolate stream chunking — extract whitespace handling into a dedicated step the client can reason about.”
create
New task · Stream chunk normalizer between SSE and useChat
→ parent: f-tasks · effort: S
update
Update b-2 · field status
openin_progress
writes route through /api/agents/write · 0/3 accepted
Skills

Pin a curated agent. Run it like a function.

Skills are versioned, named, scoped agents. Push one with skills/push, call it from chat or MCP. The workspace ships with a useful default set.

summarize-week
● live
Rolls up the past 7 days of activity into one digest node. Cites everything.
runs / month: 3.2k
triage-bug
● live
Reads a bug node, proposes severity, suggests a runbook to link.
runs / month: 892
draft-adr
● live
From a half-typed decision, drafts a full ADR with consequences + alts.
runs / month: 514
meeting-to-actions
● live
Splits a meeting transcript into linked task nodes with owners.
runs / month: 1.4k
reindex-stale
preview
Finds nodes embedded with an older model and re-runs the pipeline.
runs / month: 120
changelog-week
preview
Public changelog entry from this week's shipped tasks. Markdown-ready.
runs / month: 88
Compatible clients

Anything that speaks MCP.

We don't ship a custom protocol. If your client speaks the Model Context Protocol, point it at your workspace's MCP URL and the tools show up.

🅒
Claude Desktop
native MCP
connected
Cursor
v0.42+
connected
Lindy
MCP plugin
connected
Codex
sdk · OAuth
connected
Continue
native MCP
connected
Goose
block.xyz · MCP
connected
Custom · curl
plain HTTP
connected
Bring your own
spec compliant
connected
Audit log

Every write tagged. Nothing hidden.

Every API call emits a single line of JSON to stdout, Vercel Log Drain compatible. Request id, correlation id, workspace, actor (human or agent), tool, latency. No bodies, no bearers, no surprises.

Time
Actor
Tool
Object
Status
08:42:11codexwrite.proposeprop-codex-7f3a · 3 ops202
08:42:11codexwrite.proposeprop-codex-7f3a (replay)200 · replay
08:41:38ibonwrite.applyprop-codex-7f3a · 2/3200
08:39:02linear-syncwrite.proposet-p5-01 · create202
08:37:45codexcontext.search"realtime collab block"200
08:36:50maitecontext.read_nodedoc-positioning200
08:34:17codexcontext.search"stream chunk normalize"200
08:33:02staging-ciembed.run5,832 dims · model swap202
x-request-id echoed on every response·x-correlation-id passes through·auth failures + rate limits emit structured warn
ship an agent today

Point your client at the URL. The tools show up.

Beta tokens come with a generous quota and the MCP catalog enabled by default. No client lock-in: same surface across MCP, REST, and the JS SDK.

Get an agent token Read the MCP spec
no credit card · invite-only beta · prices locked when your invite lands