Atlas / MCP servers / blaxel-ai / Blaxel TypeScript SDK

Blaxel TypeScript SDKSAFE

mcp/blaxel-ai/sdk-typescript

Typescript SDK for Blaxel

Verdict
SAFE
Grade
C
Trust score
78 /100
Exposed tools
1 1r · 0w · 0d
Transport
streamable-http
License
MIT
Stars
10
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Blaxel is a perpetual sandbox platform that achieves near instant latency by keeping infinite secure sandboxes on automatic standby, while co-hosting your agent logic to cut network overhead.

This repository contains Blaxel's TypeScript SDK, which lets you create and manage sandboxes and other resources on Blaxel.

Installation

# npm
npm install @blaxel/core

# yarn
yarn add @blaxel/core

# bun
bun add @blaxel/core

Authentication

The SDK authenticates with your Blaxel workspace using these sources (in priority order):

  1. Blaxel CLI, when logged in
  2. Environment variables in .env file (BL_WORKSPACE, BL_API_KEY)
  3. System environment variables
  4. Blaxel configuration file (~/.blaxel/config.yaml)

When developing locally, the recommended method is to just log in to your workspace with the Blaxel CLI:

bl login YOUR-WORKSPACE

This allows you to run Blaxel SDK functions that will automatically connect to your workspace without additional setup. When you deploy on Blaxel, this connection persists automatically.

When running Blaxel SDK from a remote server that is not Blaxel-hosted, we recommend using environment variables as described in the third option above.

API error types

@blaxel/core exports BlaxelErrorCode (gateway, auth and sandbox-creation code unions), BlaxelErrorCodeValue (also unknown string codes and numeric HTTP codes), and body types: BlaxelApiErrorBody, BlaxelActionErrorBody, BlaxelPlatformErrorBody, BlaxelSandboxApiErrorBody.

Errors are not wrapped or changed. The SDK still throws raw control-plane bodies, existing sandbox error classes, plain Error, or text/HTML bodies. isBlaxelError is true only for the shapes the SDK throws for API errors (BlaxelErrorLike): ResponseError (including SandboxGatewayError), SandboxCreationTimeoutError, and raw control-plane error bodies that carry a code and status. It is false for plain Errors

Read from source at commit 3e52f7efbc96OBSERVED · 2026-10-12
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add test-webpack --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env BL_API_KEY=${BL_API_KEY} --env BL_CLIENT_CREDENTIALS=${BL_CLIENT_CREDENTIALS} --env CALLBACK_SECRET=${CALLBACK_SECRET} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "test-webpack": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "BL_API_KEY": "${BL_API_KEY}",
        "BL_CLIENT_CREDENTIALS": "${BL_CLIENT_CREDENTIALS}",
        "CALLBACK_SECRET": "${CALLBACK_SECRET}"
      }
    }
  }
}
03

Exposed tools (1)

1 read · 0 write · 0 destructive.

ToolRiskDescription
weatherreadGet the weather in a specific city
04

Trust audit

SAFEgrade C · trust 78/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (10 observation(s))
Network
declared (6 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude
.claude
Why it matters. link not followed
LOWInventory / provenance · inv.binary · CWE-1104
tests/integration/sandbox/fixtures/assets/archive.zip
archive.zip
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.symlink · CWE-1104
CLAUDE.md
CLAUDE.md
Why it matters. link not followed
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/benchmarks/sandbox/multi-image.bench.ts:25
`create + exec (ls /) + exec (echo) - ${imageName}`,
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/manual/drive_migration_repro.ts:109
const r = await exec(sbx, `command -v curl >/dev/null || { command -v apk >/dev/null && apk add --no-cache curl || { apt-get update -qq && apt-get install -y -qq curl; }; } >/dev/null 2>&1; command -v
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/manual/drive_migration_repro.ts:201
const gen = await exec(src, `
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/manual/drive_migration_repro.ts:223
const put = await exec(src, `
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/manual/drive_migration_repro.ts:241
const copy = await exec(src, curlRetryScript(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
tests/manual/fork_preview_connection.ts:91
.createHash("sha1")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
@blaxel/core/src/sandbox/codegen/codegen.ts:1
import { Sandbox } from "../../client/types.gen.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
@blaxel/core/src/sandbox/drive/drive.ts:1
import { Sandbox } from "../../client/types.gen.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
@blaxel/core/src/sandbox/drive/drive.ts:3
import { retryOnTransientReset } from "../../common/transient-retry.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
@blaxel/core/src/sandbox/filesystem/filesystem.test.ts:2
import { settings } from "../../common/settings.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
@blaxel/core/src/sandbox/filesystem/filesystem.ts:1
import { Sandbox } from "../../client/types.gen.js";
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/integration/sandbox/proxy/create.test.ts:103
network: { proxy: { bypass: ["*.s3.amazonaws.com", "169.254.169.254"] } },
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/integration/sandbox/proxy/create.test.ts:107
expect(sandbox.spec.network?.proxy?.bypass).toEqual(["*.s3.amazonaws.com", "169.254.169.254"])
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/integration/sandbox/proxy/get-delete.test.ts:21
bypass: ["169.254.169.254"],
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/integration/sandbox/proxy/get-delete.test.ts:35
expect(proxy.bypass).toContain("169.254.169.254")
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
@blaxel/core/src/image/pagination.test.ts:35
client.setConfig({ baseUrl: `http://127.0.0.1:${address.port}`, fetch });
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
@blaxel/core/src/sandbox/process/process.http.test.ts:14
return new SandboxProcess({ metadata: { name: "local" }, spec: {}, forceUrl: `http://127.0.0.1:${address.port}`, headers: {} } as Sandbox);
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
@blaxel/core/src/sandbox/process/process.live.test.ts:59
const proxy = client(`http://127.0.0.1:${address.port}`);
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/e2e/webhook.test.ts:45
baseUrl = `http://127.0.0.1:${address.port}`
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/integration/fault-injection/h2-flow-control-length.test.ts:93
url: `https://127.0.0.1:${addr.port}`,
LOWNetwork egress · net.tls_off · CWE-200, CWE-319
tests/integration/fault-injection/h2-fault-server.ts:384
rejectUnauthorized: false,
Why it matters. certificate verification is disabled
Fix. leave verification on
LOWNetwork egress · net.tls_off · CWE-200, CWE-319
tests/integration/fault-injection/h2-flow-control-length.test.ts:110
rejectUnauthorized: false,
Why it matters. certificate verification is disabled
Fix. leave verification on

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 3e52f7efbc96full audit observations/trust-audit/mcp-server/blaxel-ai__sdk-typescript.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-123e52f7efbc96SAFEC78first audit
06

Questions

What is the @blaxel/core MCP server?

Typescript SDK for Blaxel

What tools does @blaxel/core expose?

1 in total: 1 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is @blaxel/core safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it C (78/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.

What credentials does @blaxel/core need?

It reads ANTHROPIC_API_KEY, BL_API_KEY, BL_CLIENT_CREDENTIALS, CALLBACK_SECRET, GCSFUSE_SA_KEY_JSON, GOOGLE_API_KEY, KEY, MORPH_API_KEY, RELACE_API_KEY, SANDBOX_AUTHENTICATION, TEST_BL_API_KEY and TEST_BL_CLIENT_SECRET from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does @blaxel/core run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as test-webpack at 1.0.0.

How current is this page?

The grade is for one exact copy of the source (3e52f7efbc96), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement