B3OS has two MCP servers with the same key:

ServerHow a client reaches itCredential
Local, @b3os/mcpThe client starts npx -y @b3os/mcp and talks to it over stdioB3OS_API_KEY, else your b3os login token, read by the server; the client's config holds no secret
Remotehttps://beta-api.b3os.org/mcp, stateless Streamable HTTPYour key as a bearer token in the client's config

The tools act with the key's scopes, so an agent can do only what its key allows. Give it a key made for the job.

Connect

bash
npx b3os mcp install --client claude # or cursor, codex

This registers the local server; add --remote to register the remote one instead. Install the MCP server shows both configurations written by hand.

Tools

The two servers do not list the same core tools in this beta. Both keep the list short and in a fixed order, and name tools after the product they call:

ToolDoesLocalRemote
vision_scrapeOne page as Markdown or another formatYesYes
vision_mapA site's URLs, ranked for a phraseYesYes
vision_crawlCrawl a siteYesYes
vision_actBrowser actions in a session, created for the call or kept with keep_sessionYesNo
render_screenshotA styled screenshot, as an image and a signed URLYesYes
render_videoRecord a scripted, narrated videoYesNo
sandbox_createStart a sandboxYesYes
sandbox_execRun a command, bufferedYesYes
sandbox_run_codeRun code in a sandbox's Jupyter kernelNoYes
sandbox_read_file, sandbox_write_fileRead or list, and write, files in a sandboxYesYes
sandbox_deleteDelete a sandboxYesYes
routine_runRun a published routineYesYes
routine_get_runRead a run's status and resultNoYes
infer_chatA chat completion on the node's modelNoYes
usage_get, limits_getYour usage totals, and your limits with current usageNoYes
actions_search, actions_describe, actions_callFind, describe and call marketplace actionsYesYes

The inputs differ too. The local server's tools take a few fields each and wait for long work: vision_crawl, render_video and routine_run wait up to wait_s seconds, then return the job's ID to pass back as job_id. The remote server's tools take the operation's own request body, such as the whole scrape request, profile included. Your client's tool list (tools/list) shows each tool's exact input schema.

API errors come back as tool results marked as errors, with the problem's code, detail, validation pointers and request ID, so the model can correct its call.

Marketplace actions

Pack actions are not listed one by one; there are too many. An agent reaches them in three calls:

  1. actions_search finds actions by what they do.
  2. actions_describe returns the chosen action's input schema and the connections it needs.
  3. actions_call runs it.

To give an agent a pack's actions as direct tools, name the packs: --packs github,slack (or B3OS_MCP_PACKS) for the local server, ?packs=github,slack on the remote URL. Each of their actions then appears as its own tool, named <pack name>__<action key>, such as github__create-issue, with annotations such as readOnlyHint and destructiveHint taken from the action's effect class.

Routines

An agent runs any routine you published with routine_run, passing the routine's name and an input object, so a whole workflow with its retries and durability is one tool call. See routines.

Credentials

Actions that need a credential get it from a vault connection, injected at the egress proxy. The agent sees only the connection's ID, never the secret, and actions_call accepts no credential in its input.

Protocol

The local server answers clients of the MCP 2026-07-28 revision, which send the protocol version with every request, and clients that open with initialize for 2024-11-05, 2025-03-26, 2025-06-18 or 2025-11-25. The remote server answers 2026-07-28 and the initialize-based 2025-03-26, 2025-06-18 and 2025-11-25, without sessions.

Ask a question... ⌘I