io.github.yambr/open-computer-use.
Endpoint
Managed Yambr:https://api.yambr.com/mcp/computer_use — auth with your Yambr API key as Authorization: Bearer sk-yambr-.... Get keys at app.yambr.com. Yambr exposes MCP only; your LLM traffic goes to your own provider — see Access model.
Self-hosted: http://localhost:8081/mcp
Authentication
Set theMCP_API_KEY environment variable on the server and pass as a Bearer token:
MCP_API_KEY empty for local dev (no auth).
Required headers
| Header | Purpose | Required |
|---|---|---|
X-Chat-Id | Session identifier — one sandbox container per id | Yes |
Authorization | Bearer <MCP_API_KEY> | If MCP_API_KEY is set |
X-User-Email | User email (per-user skills, PAT lookup, logging) | No |
X-User-Name | Display name (URL-encoded) | No |
X-MCP-Servers | Comma-separated MCP server names for the Claude Code sub-agent | No |
Mcp-Session-Id | Session id from initialize response; include on subsequent calls | After initialize |
Session isolation modes
Controlled bySINGLE_USER_MODE:
| Mode | X-Chat-Id | Behavior |
|---|---|---|
| unset | Yes | Isolated container per chat id |
| unset | No | Shared default container + warning appended to every tool response |
true | any | Always one default container; header ignored |
false | Yes | Strict: isolated container per chat id |
false | No | Rejected with error |
Available tools
| Tool | Description |
|---|---|
bash_tool | Execute bash commands in the sandbox with streaming output |
view | View files and directories with line numbers |
create_file | Create files (auto-creates parent directories) |
str_replace | Edit files via find-and-replace with uniqueness validation |
sub_agent | Delegate to an autonomous Claude Code agent |
Native MCP primitives beyond tools
Three more native primitives, all scoped byX-Chat-Id:
| Primitive | What you get | How |
|---|---|---|
InitializeResult.instructions | The per-chat system prompt as a string, delivered in the handshake | Dynamic — re-rendered each stateless request from X-Chat-Id / X-User-Email headers |
resources/list + resources/read | Uploaded files as file://uploads/{chat_id}/{encoded-rel-path} | Auto-registered on container create + on every POST /api/uploads |
/home/assistant/README.md inside the sandbox carries the same prompt text — any model that runs view can recover its environment even if the client stripped every MCP handshake field. Full map: system prompt reference.
The server intentionally does not expose the system prompt via
prompts/get. MCP prompts/* is user-controlled (slash commands) and PromptMessage.role is restricted to user | assistant — duplicating InitializeResult.instructions there would be off-spec.Dynamic configuration endpoints
Non-MCP HTTP endpoints that MCP clients should use instead of hardcoding:| Endpoint | Returns |
|---|---|
GET /system-prompt?chat_id=...&user_email=... | Full per-session system prompt (plain text) |
GET /skill-list?user_email=... | Skills list for sub-agent prompts |
GET /mcp-info | Available tools, required headers, endpoint URL (JSON) |
Browser endpoint (CDP)
Terminal endpoint
File endpoint
Per-method details
initialize
Open a session and get
Mcp-Session-Id.tools/list
Enumerate available tools.
tools/call
Invoke a tool.
resources/list
Browse uploaded files.
