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

MCP endpoint (Streamable HTTP)
https://bezalel.sh/api/mcp
Auth header
Authorization: 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.

health

Connectivity check; reports the agent identity and granted scopes.

memory

Long-term memory shared across every agent: search, add, profile, forget.

email

Real inboxes the plane owns: send, reply, read messages and threads.

imessage

Texting on the owner's paired line: messages, attachments, polls, reactions.

finance

The spend ledger plus linked bank accounts and transaction sync.

cards

Hard-capped virtual cards for agent purchases — coming soon; calls answer "not configured" until launch.

computer

The cloud desktop: shell, screenshots, vision-driven tasks.

sandbox

Disposable code-execution microVMs: exec, files, lifecycle.

connectors

Hundreds 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:

One skill name per line
GET https://bezalel.sh/api/skills
That skill's SKILL.md
GET https://bezalel.sh/api/skills/<name>

Service status

Live status JSON
GET https://bezalel.sh/api

Returns 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).