Developer docs
Connect any MCP-speaking agent to the Bezalel capability plane. Two values are all a consumer needs: the MCP URL and a bearer token.
Endpoint and auth
https://bezalel.sh/api/mcpAuthorization: Bearer <TOKEN>Tokens look like bzl_… and are minted per agent by the plane’s owner in the dashboard. /api/* on this site proxies same-origin to the plane server; the setup instructions always carry the plane’s current direct URL as well.
The one-paste setup
Paste one prompt into your agent and it registers the plane in its own harness. The Connect page shows it pre-filled with your token:
Connect yourself to my Bezalel capability plane: fetch https://bezalel.sh/api/setup and follow the instructions. Your token is <TOKEN>.The setup instructions are a markdown document, kept current by the plane itself, with exact registration commands for every harness — plus skill installation and proactive-memory hooks.
Register by harness
Claude Code
claude mcp add --scope user --transport http bezalel https://bezalel.sh/api/mcp \
--header "Authorization: Bearer <TOKEN>"Codex CLI
Append to ~/.codex/config.toml[mcp_servers.bezalel]
url = "https://bezalel.sh/api/mcp"
http_headers = { "Authorization" = "Bearer <TOKEN>" }Cursor
Merge into .cursor/mcp.json (project) or ~/.cursor/mcp.json (global){
"mcpServers": {
"bezalel": {
"url": "https://bezalel.sh/api/mcp",
"headers": { "Authorization": "Bearer <TOKEN>" }
}
}
}OpenClaw
openclaw mcp add bezalel --transport streamable-http \
--url https://bezalel.sh/api/mcp --header "Authorization: Bearer <TOKEN>"eve
Add the @goshen/bezalel dependency, then mount it// agent/extensions/bezalel.ts
import bezalel from "@goshen/bezalel";
export default bezalel({
url: "https://bezalel.sh/api",
token: process.env.BEZALEL_TOKEN,
});Anything else that speaks MCP: Streamable HTTP endpoint https://bezalel.sh/api/mcp with the Authorization header above.
Verify a connection
Reconnect first — MCP clients cache tool lists per session. Then call the health__check tool: it reports the agent identity and the scopes the token grants. tools/list shows only the tools those scopes can call, and every call is re-checked server-side.
Scopes
Tokens carry capability-domain scopes. A denied call returns a descriptive error naming the missing scope.
healthConnectivity check; reports the agent identity and granted scopes.
memoryLong-term memory shared across every agent: search, add, profile, forget.
emailReal inboxes the plane owns: send, reply, read messages and threads.
imessageTexting on the owner's paired line: messages, attachments, polls, reactions.
financeThe spend ledger plus linked bank accounts and transaction sync.
cardsHard-capped virtual cards for agent purchases — coming soon; calls answer "not configured" until launch.
computerThe cloud desktop: shell, screenshots, vision-driven tasks.
sandboxDisposable code-execution microVMs: exec, files, lifecycle.
connectorsHundreds of third-party apps behind managed OAuth: discover and execute.
Skill playbooks
Per-domain usage playbooks (Agent Skills, SKILL.md convention) are served by the plane:
GET https://bezalel.sh/api/skillsGET https://bezalel.sh/api/skills/<name>Service status
GET https://bezalel.sh/apiReturns the plane version, uptime, and which capability domains are configured on this deployment — see it live.
Self-hosting
The plane is a single long-lived Node process, deployable from the repository Dockerfile to any container host. Each deployment serves one owner, with their own database and provider credentials.
For agents
The overview and link index live at llms.txt. Every page on this site serves markdown from the same URL via Accept: text/markdown, or by appending .md to the path (this page: /docs.md).