Capability matrix
Compare CrowNest resources across MCP tools, CLI commands, TypeScript SDK methods, and Python SDK methods.
This matrix maps each CrowNest operation to the surfaces that expose it. It is checked against the live MCP registry, CLI command table, and SDK method lists in this repository.
To refresh it, compare:
- MCP:
packages/mcp/src/tools.ts - CLI:
packages/cli/src/index.ts(canonicalCliCommands) - TypeScript SDK:
packages/sdk/src/client-types.tsandpackages/sdk/src/sandbox-handle.ts - Python SDK:
packages/python-sdk/src/crownest/_resources.py
Then run pnpm --filter @crownest/mcp test, pnpm check:cli-surface,
pnpm check:sdk-surface, and pnpm test:python-sdk.
Projects and usage
| Resource | Operation | MCP tool | CLI command | TypeScript SDK | Python SDK |
|---|---|---|---|---|---|
| Project | List | - | crownest projects list | client.projects.list() | client.projects.list() |
| Project | Create | create_project | - | client.projects.create() | client.projects.create() |
| Usage | Read | get_usage | - | client.usage() | client.usage() |
Sandboxes
| Resource | Operation | MCP tool | CLI command | TypeScript SDK | Python SDK |
|---|---|---|---|---|---|
| Sandbox | Create | create_sandbox | crownest sandboxes create | client.sandboxes.create() | client.sandboxes.create() |
| Sandbox | List | list_sandboxes | crownest sandboxes list | client.sandboxes.list() | client.sandboxes.list() |
| Sandbox | Get | get_sandbox | - | client.sandboxes.get() | client.sandboxes.get() |
| Sandbox | Extend TTL | extend_sandbox | crownest sandboxes extend | client.sandboxes.extend(), sandbox.extend() | client.sandboxes.extend(), sandbox.extend() |
| Sandbox | Kill | kill_sandbox | crownest sandboxes kill | client.sandboxes.kill(), sandbox.kill() | client.sandboxes.kill(), sandbox.kill() |
MCP tools that accept sandbox_id can omit it to use the session's lazy
default Sandbox. The first omitted sandbox_id call creates that Sandbox;
later calls reuse it until it expires, is killed, or the MCP server exits.
Commands
| Resource | Operation | MCP tool | CLI command | TypeScript SDK | Python SDK |
|---|---|---|---|---|---|
| Command | Run and wait | run_command | crownest commands run | client.commands.run(), sandbox.commands.run() | client.commands.run(), sandbox.commands.run() |
| Command | Start | - | crownest commands start | client.commands.start(), sandbox.commands.start() | client.commands.start(), sandbox.commands.start() |
| Command | Get | get_command | - | client.commands.get() | client.commands.get() |
| Command | Logs | stream_command_logs | crownest logs | client.commands.logs(), client.commands.streamLogs() | client.commands.logs(), client.commands.stream_logs() |
| Command | Cancel | cancel_command | crownest commands cancel | client.commands.cancel(), sandbox.commands.cancel() | client.commands.cancel(), sandbox.commands.cancel() |
Commands are persisted process invocation records. For interpreter state, use Code Contexts and Code Runs.
Code Contexts and Code Runs
| Resource | Operation | MCP tool | CLI command | TypeScript SDK | Python SDK |
|---|---|---|---|---|---|
| Code Run | Run | run_code | crownest code run | client.code.run(), sandbox.code.run() | client.code.run(), sandbox.code.run() |
| Code Run | Stream | - | crownest code run | client.code.runStream(), sandbox.code.runStream() | client.code.run_stream(), sandbox.code.run_stream() |
| Code Context | Create | - | - | client.code.createContext(), sandbox.code.createContext() | client.code.create_context(), sandbox.code.create_context() |
| Code Context | List | list_code_contexts | - | client.code.listContexts(), sandbox.code.listContexts() | client.code.list_contexts(), sandbox.code.list_contexts() |
| Code Context | Get | get_code_context | - | client.code.getContext(), sandbox.code.getContext() | client.code.get_context(), sandbox.code.get_context() |
| Code Context | Delete | - | - | client.code.deleteContext(), sandbox.code.deleteContext() | client.code.delete_context(), sandbox.code.delete_context() |
run_code uses artifact promotion by default. Inline display outputs stay
inline when safe; rich outputs are promoted to Artifacts; oversized, unsafe,
or unsupported outputs are reported as rejected outputs.
Workspace files
| Resource | Operation | MCP tool | CLI command | TypeScript SDK | Python SDK |
|---|---|---|---|---|---|
| Workspace file | Read text | read_file | crownest files read | client.files.read(), sandbox.files.read() | client.files.read(), sandbox.files.read() |
| Workspace file | Write text | write_file | crownest files write | client.files.write(), sandbox.files.write() | client.files.write(), sandbox.files.write() |
| Workspace file | Upload local file | - | crownest files upload | client.files.write() | client.files.write() |
| Workspace file | List directory | list_files | crownest files list | client.files.list(), sandbox.files.list() | client.files.list(), sandbox.files.list() |
| Workspace file | Stat | stat_file | crownest files stat | client.files.stat(), sandbox.files.stat() | client.files.stat(), sandbox.files.stat() |
| Workspace file | Make directory | make_directory | crownest files mkdir | client.files.mkdir(), sandbox.files.mkdir() | client.files.mkdir(), sandbox.files.mkdir() |
| Workspace file | Move or rename | move_file | crownest files move | client.files.move(), sandbox.files.move() | client.files.move(), sandbox.files.move() |
| Workspace file | Delete | delete_file | crownest files delete | client.files.delete(), sandbox.files.delete() | client.files.delete(), sandbox.files.delete() |
| Workspace file | Download URL | - | - | client.files.downloadUrl(), sandbox.files.downloadUrl() | client.files.download_url(), sandbox.files.download_url() |
| Workspace file | Read bytes | - | - | client.files.readBytes(), sandbox.files.readBytes() | client.files.read_bytes(), sandbox.files.read_bytes() |
| Workspace file | Write bytes | - | - | client.files.writeBytes(), sandbox.files.writeBytes() | client.files.write_bytes(), sandbox.files.write_bytes() |
Public file APIs operate inside the Sandbox Workspace. Use /workspace
paths unless a lower-level runtime command intentionally reads elsewhere.
Artifacts
| Resource | Operation | MCP tool | CLI command | TypeScript SDK | Python SDK |
|---|---|---|---|---|---|
| Artifact | Create from Workspace file | create_artifact | crownest artifacts create | client.artifacts.create(), sandbox.artifacts.create() | client.artifacts.create(), sandbox.artifacts.create() |
| Artifact | List for Sandbox | list_artifacts | crownest artifacts list | client.artifacts.list(), sandbox.artifacts.list() | client.artifacts.list(), sandbox.artifacts.list() |
| Artifact | Get metadata | get_artifact | - | client.artifacts.get() | client.artifacts.get() |
| Artifact | Download bytes | download_artifact | crownest artifacts download | client.artifacts.download() | client.artifacts.download() |
| Artifact | Download URL | - | - | client.artifacts.downloadUrl() | client.artifacts.download_url() |
| Artifact | Delete | delete_artifact | crownest artifacts delete | client.artifacts.delete() | client.artifacts.delete() |
Artifacts are durable outputs copied out of the Workspace and indexed by CrowNest. A file becomes an Artifact only when you explicitly create one or when Code Run output promotion succeeds.
Previews
| Resource | Operation | MCP tool | CLI command | TypeScript SDK | Python SDK |
|---|---|---|---|---|---|
| Preview | Create | create_preview | crownest previews create | client.previews.create(), sandbox.previews.create() | client.previews.create(), sandbox.previews.create() |
| Preview | List for Sandbox | list_previews | crownest previews list | client.previews.list(), sandbox.previews.list() | client.previews.list(), sandbox.previews.list() |
| Preview | Get metadata | get_preview | - | client.previews.get() | client.previews.get() |
| Preview | Revoke | revoke_preview | crownest previews revoke | client.previews.revoke() | client.previews.revoke() |
Preview URLs are authenticated or token-mode private browser links. Public unauthenticated Preview URLs are not part of v1.
API Keys
| Resource | Operation | MCP tool | CLI command | TypeScript SDK | Python SDK |
|---|---|---|---|---|---|
| API Key | Create | - | crownest keys create | - | - |
| API Key | List metadata | list_api_keys | crownest keys list | client.apiKeys.list() | client.api_keys.list() |
| API Key | Get metadata | - | - | client.apiKeys.get() | client.api_keys.get() |
| API Key | Revoke | revoke_api_key | - | client.apiKeys.revoke() | client.api_keys.revoke() |
API Key creation stays dashboard and CLI owned. Programmatic surfaces can inspect and revoke metadata, but secret key values are only shown once at creation.
Next steps
- Agent patterns has multi-step recipes that use the matrix above.
- MCP documents the default Sandbox model for MCP hosts.
- Authentication lists the scopes each operation requires.