Skip to main content
Glama

sandbox-as-a-service-mcp

An MCP server that gives an agent a real Linux virtual machine it can break.

Eleven tools: create a sandbox, run shell commands in it, write and read files, list what a run produced, expose a port on a public preview URL, extend the lifetime, destroy it, and check what it all cost.

Each sandbox is a dedicated VM with its own kernel — not a container sharing a host with other people's code. It is never reused between accounts and is destroyed when it expires, whether or not anything remembered to ask.

Use it

Maintained by the operator of Sandbox as a Service.

Hosted MCP (no local package)

For a client that supports Streamable HTTP, connect to:

https://sandbox-as-a-service.com/v1/mcp

Send your own API key on each request as Authorization: Bearer <your-api-key> or x-api-key: <your-api-key>. Get it at Dashboard → API keys. Never put an API key in the URL or share one through a registry.

The hosted server exposes 12 tools: the eleven account/execution tools below plus get_service_info. Anonymous initialize, tools/list, and get_service_info work for free hosted discovery; account and execution calls still require your key. The local stdio server (including the current downloadable mcp.tgz v1.1.0) exposes the eleven account/execution tools. Use the hosted endpoint for keyless service information. A GET-only check is not a connection test: this endpoint uses MCP POST requests and SSE responses.

On Smithery, set apiKey to your own raw key; it maps to the x-api-key header. Connection documentation.

Local stdio (current hosted package)

AAS_API_KEY=aas_sk_... npx -y https://sandbox-as-a-service.com/mcp.tgz

Get a key at sandbox-as-a-service.com — new accounts start with free credit and no card.

Claude Desktop / Claude Code

{
  "mcpServers": {
    "sandbox": {
      "command": "npx",
      "args": ["-y", "https://sandbox-as-a-service.com/mcp.tgz"],
      "env": { "AAS_API_KEY": "aas_sk_..." }
    }
  }
}

Related MCP server: agent-env-mcp

The tools

Tool

What it does

create_sandbox

Creates a VM and returns its id once it is ready.

run_command

Runs a shell command as an unprivileged user. Returns stdout, stderr, exit code.

write_file

Writes a file. Content travels out of band, so quotes and binary survive.

read_file

Reads a file back — how an agent gets at what its code produced.

list_files

Lists a directory tree, so an agent can find what a run produced.

expose_port

Gives a server inside the sandbox a public https URL to share.

get_sandbox

Status, size and expiry.

list_sandboxes

Everything on the account, newest first — useful for finding strays.

extend_sandbox

Pushes the expiry out when a job outgrows its timeout.

destroy_sandbox

Destroys it and stops billing.

get_usage

Remaining credit and recent usage.

Notes for agents

  • Code runs as an unprivileged user. There is no sudo, so apt-get will not work; use pip install --user --break-system-packages or npm install, both of which do.

  • run_command waits for the command to finish. Start a server with & or it will hold the call open until the timeout.

  • A sandbox is destroyed when its timeout expires whether or not destroy_sandbox is called, so a forgotten sandbox costs minutes, not money forever. Calling it anyway returns the minutes you were not going to use.

Environment

Variable

AAS_API_KEY

Required. Your API key.

AAS_BASE_URL

Optional. Defaults to https://sandbox-as-a-service.com. Use the origin only, without /v1; the client adds that API prefix.

MIT licensed. The service it talks to is at sandbox-as-a-service.com; docs.

Available Tools

11 tools
create_sandboxA

Create an isolated cloud sandbox — a dedicated virtual machine you can run commands in. Returns once the sandbox is ready. Python 3, Node.js 22, git and a build toolchain are pre-installed. The sandbox is destroyed automatically after timeout_minutes; nothing inside it survives that. Use this before running any code you would not want to run on the local machine.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional label to identify this sandbox later.
sizeNosmall = 2 vCPU/4 GB, medium = 4 vCPU/8 GB, large = 8 vCPU/16 GB. Default: small.
timeout_minutesNoDestroy the sandbox automatically after this many minutes (default 15, max 1440 — 24 hours).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure and does so strongly: the sandbox is isolated, dedicated, returns only when ready, and is destroyed automatically after timeout_minutes with nothing surviving. It also calls out the pre-installed runtimes, giving the agent a clear model of the environment.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler; the core purpose is front-loaded, followed by return behavior, environment details, destruction semantics, and usage guidance. Every sentence contributes distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for the creation act and the environment, but with no output schema it only says 'Returns once the sandbox is ready' without stating what the return value contains (e.g., an ID/handle needed to target subsequent commands). This is a minor gap because sandbox-identification is mostly covered by the name parameter and sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter is already documented with defaults, ranges, and size mappings. The description mostly re-emphasizes the timeout destruction behavior that the schema already states, so it adds little parameter-level meaning beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Create an isolated cloud sandbox — a dedicated virtual machine you can run commands in') and makes the tool's role obvious relative to siblings like run_command and list_sandboxes. It goes beyond a bare restatement by also describing the preinstalled environment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear selection criterion: 'Use this before running any code you would not want to run on the local machine.' This tells the agent when to create a sandbox, but it does not explicitly contrast with alternatives or state when not to use it, so it falls one point short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

destroy_sandboxA

Destroy a sandbox and stop billing for it. Everything inside is lost. Call this as soon as you are finished — do not leave sandboxes running.

ParametersJSON Schema
NameRequiredDescriptionDefault
sandbox_idYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the burden of behavioral disclosure. It clearly states irreversible data loss ('Everything inside is lost') and the financial effect ('stop billing'). This is exactly the critical behavioral context an agent needs for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: first sentence states the action and billing effect, second warns about data loss, third gives timing guidance. Every sentence adds essential information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive operation with no output schema and no annotations, the description covers the essential context: what is destroyed, that billing stops, that data is irrecoverable, and when to call it. Nothing critical is missing for safe and correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. The description refers to 'a sandbox' but does not explicitly explain that sandbox_id identifies which sandbox to destroy or where to obtain it (e.g., from create_sandbox or list_sandboxes). The parameter name is self-explanatory, but the description adds minimal semantic detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Destroy') and resource ('a sandbox'), and immediately adds the billing consequence, which distinguishes it from siblings like get_sandbox or extend_sandbox. It is clear and direct about the operation performed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit timing guidance: 'Call this as soon as you are finished — do not leave sandboxes running.' This clearly tells the agent when to use the tool. It does not explicitly name alternatives like extend_sandbox, but the 'do not leave sandboxes running' phrase implicitly tells the agent not to call it while work is still in progress.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expose_portA

Give a server running inside the sandbox a public https URL, so a person can open it in a browser. Use this after starting a web server or dev server in the background. The server only needs to listen on localhost. Returns a URL that works until the sandbox is destroyed.

ParametersJSON Schema
NameRequiredDescriptionDefault
portYesThe port the server listens on, e.g. 3000.
sandbox_idYesThe id returned by create_sandbox.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the disclosure burden and does a good job by stating that the tool returns a public https URL and that the URL works until the sandbox is destroyed. It does not mention failure behavior or security implications of exposing a port, but the core behavioral contract is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler: purpose, usage timing, and URL lifetime are each covered concisely. The most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with no output schema, this description is complete enough. It explains the outcome, the prerequisite, and the duration of the returned URL, so an agent can select and invoke the tool correctly without additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both sandbox_id and port are already documented in the schema. The description adds useful context about the server listening on localhost, but it does not substantially expand on the parameter meanings beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action: 'Give a server running inside the sandbox a public https URL,' and clearly states the purpose is to let a person open the server in a browser. This distinguishes it from sibling tools like run_command and get_sandbox, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use the tool: 'Use this after starting a web server or dev server in the background.' It also provides the prerequisite that the server only needs to listen on localhost, so the agent knows exactly when and how to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extend_sandboxA

Push a sandbox’s expiry further out so long-running work is not cut off. Total lifetime is still capped at 24 hours from creation.

ParametersJSON Schema
NameRequiredDescriptionDefault
sandbox_idYes
additional_minutesNoDefault 15.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses the key mutation (extending expiry) and an important constraint (24-hour cap from creation). However, it is ambiguous what happens if the requested additional_minutes would exceed the cap—whether the sandbox is clamped to 24 hours or the call fails—and no response behavior is described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words: the primary action is front-loaded, followed by the critical limitation. The use case 'long-running work is not cut off' earns its place by motivating the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool, the description covers the core purpose and the most important bound. But with no output schema and no annotations, it should specify edge-case behavior when the requested extension would exceed the cap and whether the response contains the new expiry time, leaving an agent uncertain about handled limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds context beyond the schema by explaining why a caller would use additional_minutes and that extension is bounded by the 24-hour lifetime cap. However, it does not clarify how sandbox_id is obtained or precisely how additional_minutes is applied, leaving the undocumented sandbox_id parameter uncovered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Push a sandbox's expiry further out'. This directly distinguishes it from sibling tools like create_sandbox and destroy_sandbox, and the phrase 'so long-running work is not cut off' clarifies its exact purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly indicates when to use the tool: when long-running work risks being cut off. It also provides an important exclusion: the total lifetime is capped at 24 hours from creation, so the tool cannot be used to extend beyond that bound. It does not explicitly name alternative tools, but the purpose is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sandboxA

Get the current status and details of one sandbox, including when it expires.

ParametersJSON Schema
NameRequiredDescriptionDefault
sandbox_idYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It conveys a read-only status/details operation and calls out expiry, but it does not discuss failure behavior, prerequisites, or response format. The verb 'Get' implies safety, but richer behavioral disclosure would help.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. It front-loads the operation and includes the most useful detail (expiry) without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool, the description covers purpose, target scope, and a key return detail. It is complete enough for an agent to invoke correctly, though an explicit read-only note and not-found behavior would make it fully complete given there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. The phrase 'one sandbox' implies sandbox_id identifies the target, but the description does not explain where the ID comes from or its format. For a single self-evident parameter, this is adequate but not detailed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), a resource ('one sandbox'), and concrete output content ('current status and details', 'when it expires'). This clearly differentiates it from list_sandboxes, create_sandbox, extend_sandbox, and destroy_sandbox.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly scopes the tool to a single sandbox rather than a collection, so an agent can infer when to use it versus list_sandboxes. It does not explicitly name the alternative or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usageA

Show the account’s remaining credit balance and recent sandbox usage.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral safety burden. 'Show' clearly signals a read-only, non-destructive operation, but the description does not disclose any additional behavioral details such as authentication requirements, data freshness, or rate limits. For a simple getter, this is acceptable but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence states the verb and the resource with no wasted words. It is concise without sacrificing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only tool with no output schema, the description covers the main return values at a useful level. The only notable ambiguity is 'recent' usage, which does not specify a time window, but the low complexity and clear scope keep the tool interpretable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema description coverage is 100%, so there is no parameter-semantics gap. The description adds no parameter detail, and none is needed. This matches the baseline for parameterless tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb ('Show') and a specific resource ('account's remaining credit balance and recent sandbox usage'). It unambiguously identifies what the tool does and is easily distinguishable from all sibling sandbox-operation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use versus alternatives, but the description provides clear context: this is the account-level billing/usage query tool. Since all siblings are sandbox lifecycle/action tools, no alternative tool competes for this purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_filesA

List the contents of a directory in a sandbox, with the type and size of each entry. Defaults to /workspace. Use this to find what your code produced before reading it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory to list. Default /workspace.
sandbox_idYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It usefully discloses the default path and that entries include type and size, and 'List' implies a non-destructive read. However, it does not explain edge behaviors such as hidden files, path traversal limits, or errors for nonexistent directories.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences front-load the core action and output, then add the default path and a practical usage tip. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool, the description covers purpose, scope, default path, and output fields, which is sufficient for most calls. It lacks detail on error cases and path resolution behavior, but those are minor for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: path is documented with a default, but sandbox_id has no description. The tool description adds context by defining the scope as a sandbox directory, which implies sandbox_id identifies the sandbox, but it does not fully compensate for the missing sandbox_id semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('List the contents of a directory'), the resource ('in a sandbox'), and the output details ('type and size of each entry'). This clearly distinguishes it from siblings like read_file, write_file, and run_command.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this to find what your code produced before reading it' gives clear practical context for when to call this tool. It does not explicitly name alternatives or exclusions, but the usage intent is unambiguous enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sandboxesA

List the sandboxes on this account, newest first. Use it to find sandboxes you created earlier.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many to return (default 20, max 100).
include_deletedNoInclude sandboxes that have already been destroyed. Useful for auditing what a run created.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the disclosure burden. It reveals ordering behavior ('newest first') and account scoping, and the verb 'list' implies a non-mutating operation. However, it does not explicitly state that deleted sandboxes are excluded unless include_deleted is set, though the schema covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core purpose and ordering. The second sentence adds practical guidance without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter list tool with no output schema, the description is mostly sufficient: it gives purpose, ordering, and a use case. The only minor gap is not clarifying that destroyed sandboxes are excluded by default, which could affect the 'find sandboxes you created earlier' use case; however, the schema's include_deleted description partially compensates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already fully documented. The tool description does not add any extra meaning to the parameters, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact operation ('List the sandboxes on this account') and specifies ordering ('newest first'), making the tool's purpose immediately clear. This clearly distinguishes it from siblings like create_sandbox, destroy_sandbox, or get_sandbox, which either mutate or target a single sandbox.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a concrete use case ('Use it to find sandboxes you created earlier'), indicating this tool is for discovery and recall. It does not explicitly name alternatives or exclusions, so an agent might not know when to prefer get_sandbox instead, but the context is clear enough for most list scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_fileA

Read a file back out of a sandbox — an artifact your code produced, a log, a generated report. Use encoding "base64" for binary files such as images.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
encodingNo
sandbox_idYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. It conveys that the operation is a read and gives an encoding hint for binary files, but it does not disclose what happens on missing files, whether the path is relative to the sandbox root, or how the file content is returned (text vs base64 string).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The purpose is front-loaded in the first sentence, and the useful encoding guidance follows immediately. There is no filler, repetition, or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description should explain return values and usage context more fully. It does not state what the response contains, what encoding default applies, or how the path should be specified, leaving an agent to guess important operational details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only explains the encoding parameter usage explicitly; sandbox_id and path are left to inference from the tool name and general context. The path format and identifier semantics are not addressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Read a file back out of a sandbox.' It also clarifies the types of files intended ('an artifact your code produced, a log, a generated report'), which differentiates it from siblings like write_file and list_files without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: to retrieve artifacts your code produced while running in a sandbox. It also provides a concrete parameter-level instruction ('Use encoding "base64" for binary files such as images'), but it does not explicitly state exclusions or compare against alternatives like list_files for discovering files.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_commandA

Run a shell command inside a sandbox and wait for it to finish. Returns stdout, stderr and the exit code. The command runs as an unprivileged user in /workspace. A non-zero exit code is returned normally, not as an error. Use this to execute code, install packages, clone repositories or inspect the filesystem.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory. Default /workspace.
envNoEnvironment variables for this command. They are exported, so they survive chaining with && or ;.
commandYesShell command, e.g. `python3 script.py` or `pip install requests`.
sandbox_idYesThe id returned by create_sandbox.
timeout_msNoHow long to wait before killing the command (default 60000, max 600000).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden and does it well: it states the command runs as an unprivileged user in /workspace, exits normally on non-zero exit codes, and waits for completion. It does not mention persistence or network side effects, but the sandbox context and schema mitigate the omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short, distinct sentences each convey essential information: purpose, return values, execution environment, exit code behavior, and suggested uses. There is no fluff or repetition, and key facts are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete enough for an agent to correctly select and call the tool, covering inputs, outputs, and error behavior. It does not mention what persists after the command (e.g., installed packages, file changes) or network access, but for a generic shell tool with fully described schema parameters, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds little parameter-specific detail beyond the schema, but it does reinforce the /workspace default and gives example commands (e.g., python3 script.py, pip install requests).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Run a shell command inside a sandbox and wait for it to finish.' It also clarifies the returned data (stdout, stderr, exit code), which distinguishes it from sibling file and sandbox management tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete use cases ('execute code, install packages, clone repositories or inspect the filesystem'), which helps an agent recognize when to invoke it. However, it does not explicitly mention alternatives or cases where a sibling tool like read_file or list_files would be preferable, so there are no exclusion rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_fileA

Write a file inside a sandbox. Use this to place a script or input data before running it. Paths are relative to /workspace unless absolute. Content of any kind is safe — it is transferred verbatim, not interpreted by a shell.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYese.g. `analysis.py` or `/workspace/data/input.json`.
contentYesFile contents.
encodingNoUse 'base64' to write binary content. Default 'utf8'.
sandbox_idYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does it well: it discloses path resolution relative to /workspace unless absolute, and guarantees content is transferred verbatim and not interpreted by a shell. It omits overwrite behavior and directory creation, but the key safety behavior is covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each contributing a distinct piece of information: what it does, when to use it, and path/safety semantics. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is nearly complete for a simple write tool: it covers purpose, usage context, path semantics, and content safety. It does not specify whether existing files are overwritten, whether parent directories are created, or what the success response is, which are the main remaining gaps given there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the schema already documents most parameters. The description adds meaningful semantics beyond the schema by explaining path resolution (relative to /workspace unless absolute) and by clarifying that content is written verbatim, which is not stated in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Write a file inside a sandbox') and immediately clarifies the intended use: placing a script or input data before running it. This clearly separates it from siblings like read_file, list_files, and run_command.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this to place a script or input data before running it' gives explicit context for when the tool is appropriate. It implies the workflow with run_command and does not provide explicit exclusions or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv1.1.0
    • First observedcreate_sandbox
    • First observeddestroy_sandbox
    • First observedexpose_port
    • First observedextend_sandbox
    • First observedget_sandbox
    • First observedget_usage
    • First observedlist_files
    • First observedlist_sandboxes
    • First observedread_file
    • First observedrun_command
    • First observedwrite_file

TDQS

A4.3/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct action and resource: sandbox lifecycle, file operations, command execution, port exposure, and usage lookup are clearly separated. Even similar pairs like list_files and list_sandboxes are disambiguated by both name and description.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern, e.g. create_sandbox, run_command, write_file, destroy_sandbox. There are no mixed conventions, vague verbs, or stylistic deviations.

Tool Count5/5

Eleven tools is a well-scoped size for a sandbox-as-a-service server. Each tool covers a meaningful capability without redundancy or bloat.

Completeness5/5

The surface covers the full sandbox lifecycle—create, read, list, extend, destroy—plus file operations, command execution, port exposure, and usage tracking. There are no obvious dead ends or missing operations needed for the intended workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to work in a persistent, isolated Linux workspace with file management, Bash execution, SSH/SFTP access, and durable storage while keeping workloads contained from the host and private networks.
    MIT