Tenki Sandbox MCP

io.github.LuxorLabsPublished by GitHub account LuxorLabsv0.3.1Updated Oct 30, 2026

Disposable microVM sandboxes for AI agents: run code, read/write files, git, preview URLs.

VerifiedSTDIODesktop onlyCloud & InfrastructureDeveloper Tools

Overview

AI-generated overview

Gives an assistant disposable Tenki Cloud microVM sandboxes to run code, manage files and git, and publish preview URLs.

What you can do
  • Run code one-shot or in persistent sandboxes, execute commands and read inline output
  • Create, inspect, pause, resume, extend, update and terminate sandboxes, including bulk termination
  • Read, write, list, stat, move and delete files and directories inside a sandbox
  • Run git clone, checkout, diff and log, and run other git commands through exec
  • Expose ports, create, list, bind and delete public preview URLs
  • Capture and manage snapshots, plus workspace usage and settings tools
When to use it
Useful when an agent needs an isolated machine to execute untrusted or throwaway code, test a build, or run a web server it wants to show through a public URL, without touching the user's own machine.
Requirements
Local Node.js process run via npx from the npm package, or a hosted HTTP endpoint. Requires a Tenki account and one credential: TENKI_API_KEY or TENKI_AUTH_TOKEN. TENKI_API_ENDPOINT optionally overrides the default API endpoint. Network access to Tenki Cloud.
Before you install
Holds a Tenki API key that can run code and spend credits; sandboxes are billed per second. Termination, including bulk termination, is irreversible and destroys the sandbox filesystem. Exposed ports and preview URLs publish services publicly. Output from executed code is untrusted. TENKI_MCP_READONLY=1 or TENKI_MCP_DISABLED_TOOLS can restrict tools; HTTP mode needs TENKI_MCP_HTTP_TOKEN off loopback.

Installation

In SourceWeft

  1. Open Tenki Sandbox MCP in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

tenki-mcp — @tenkicloud/mcp

A Model Context Protocol server for Tenki Cloud. Give any agent — Claude, Codex, Cursor — a disposable microVM it can create, run code in, read and write files, run git, and expose to the web. Sandboxes boot in ~2 seconds and are billed per second.

Part of making Tenki the execution layer coding agents reach for: the agent writes code and Tenki runs it in isolation. (Tenki's Code Reviewer and Runners — AI PR review and managed CI — are separate products; this server currently exposes the Sandbox.)

"Run this Python in a fresh sandbox and tell me what it prints."        │        ▼   tenki_run_code   boots a microVM → runs it → returns stdout → tears it down

Quickstart

bash
export TENKI_API_KEY=tk_your_key_herenpx -y @tenkicloud/mcp     # speaks MCP over stdio

Nothing to clone or build. The package installs one command, tenki-mcp.

Use it in Claude Code

Connect to Tenki's hosted MCP service and sign in with your Tenki account:

bash
claude mcp add --transport http tenki https://mcp.tenki.cloud/mcpclaude mcp login tenki

Claude Code's mcp add command stores the server configuration; mcp login performs the one-time browser authorization and workspace selection.

Alternatively, run the MCP server locally with an API key:

bash
claude mcp add tenki --env TENKI_API_KEY=tk_your_key_here -- npx -y @tenkicloud/mcp

Or install it as a Claude Code plugin

The repo doubles as a plugin marketplace. This prompts for your API key on install and stores it in your OS keychain — no env var to manage:

/plugin marketplace add LuxorLabs/tenki-mcp/plugin install tenki@tenki

Use it in Claude Desktop

Add to claude_desktop_config.json:

json
{  "mcpServers": {    "tenki": {      "command": "npx",      "args": ["-y", "@tenkicloud/mcp"],      "env": { "TENKI_API_KEY": "tk_your_key_here" }    }  }}

Use it in Cursor

Add the same block to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

json
{  "mcpServers": {    "tenki": {      "command": "npx",      "args": ["-y", "@tenkicloud/mcp"],      "env": { "TENKI_API_KEY": "tk_your_key_here" }    }  }}

Use it in Codex

The OpenAI Codex CLI reads MCP servers from ~/.codex/config.toml. Add:

toml
[mcp_servers.tenki]command = "npx"args = ["-y", "@tenkicloud/mcp"]env = { TENKI_API_KEY = "tk_your_key_here" }

Confirm it's working

After adding the server, start a fresh session so the client loads it, then ask your agent one of:

  • "Check tenki auth status." — confirms your credential was picked up.
  • "Run print(2+2) in a fresh Tenki sandbox." — a full boot → run → teardown round-trip.

If the tenki_* tools don't show up, restart the client so it re-reads its config.

No key yet? Start the server without one and ask the agent to check tenki_auth_status — it reports what to set and where. See Auth.

Run it from a clone instead

For development, or to run an unreleased change:

bash
git clone https://github.com/LuxorLabs/tenki-mcp.git && cd tenki-mcpnpm install && npm run buildTENKI_API_KEY=tk_your_key_here node dist/index.js

Substitute node /absolute/path/to/tenki-mcp/dist/index.js for the npx command in any of the configs above. See CONTRIBUTING.md for the full development loop.

Environment variables

VariableDefaultPurpose
TENKI_API_KEY—API key (tk_…). One of this or TENKI_AUTH_TOKEN is required.
TENKI_AUTH_TOKEN—Session token (ory_st_… or cookie value). Takes precedence over TENKI_API_KEY when both are set.
TENKI_API_ENDPOINThttps://api.tenki.cloudControl-plane base URL (TENKI_API_URL is an alias).
TENKI_MCP_READONLYoff1 registers only read tools (no create/run/delete/spend).
TENKI_MCP_DISABLED_TOOLS—Comma-separated tool names to skip registering.
TENKI_MCP_AUDIToff1 logs each tool call name + arg keys to stderr.
TENKI_MCP_TRANSPORTstdiohttp serves Streamable HTTP instead (see below).
PORT3000HTTP transport port.
TENKI_MCP_HTTP_HOST127.0.0.1HTTP bind host; non-loopback requires TENKI_MCP_HTTP_TOKEN.
TENKI_MCP_HTTP_TOKEN—Bearer token for the HTTP endpoint; optional on loopback, required on a non-loopback host.
TENKI_MCP_PUBLIC_URL—Public base URL for an OAuth-protected hosted server.
TENKI_MCP_OAUTH_ISSUER—OAuth authorization-server issuer. Enables delegated OAuth HTTP mode.
TENKI_MCP_OAUTH_RESOURCE<public URL>/mcpRFC 8707 resource identifier accepted in access-token audiences.
TENKI_MCP_OAUTH_SCOPEmcpRequired delegated scope.
TENKI_MCP_IDENTITY_URL—Internal Tenki Identity service endpoint used to exchange OAuth access tokens.
TENKI_MCP_IDENTITY_SERVICE_TOKEN—Service credential for the private Identity token-exchange RPC.

Tools

71 tools — all 68 public unary API methods (enforced by a CI parity audit), two workflow helpers, and tenki_auth_status. Implementation-only control-plane methods are intentionally excluded. Grouped by domain:

DomainTools
Authtenki_auth_status (which credential is configured, and does it work — the only tool available when none is)
Identitytenki_whoami
Runtenki_run_code (one-shot: boot → run shell/python/js → tear down)
Sandboxestenki_create_sandbox · tenki_get_sandbox · tenki_list_sandboxes · tenki_terminate_sandbox · tenki_pause_sandbox · tenki_resume_sandbox
Session admintenki_extend_sandbox · tenki_update_sandbox · tenki_terminate_sandboxes (bulk) · tenki_report_sandbox_activity · tenki_list_workspace_sandboxes
Exectenki_exec (stdout/stderr/exit inline)
Filestenki_read_file · tenki_write_file · tenki_list_files · tenki_stat_path · tenki_make_dir · tenki_remove_path · tenki_move_path
Gittenki_git (clone/checkout/diff/log — the API supports exactly these four; run other git commands via tenki_exec)
Ports & previewsexpose · list-exposed · unexpose · create-preview-url · open-preview · list/get/delete-preview-url · touch-preview · bind/unbind-preview-url · resolve-preview-token
Artifacts (binary transfer)tenki_get_upload_url · tenki_get_download_url (signed URLs for binary PUT/GET)
SSHtenki_update_ssh_keys · tenki_issue_ssh_cert · tenki_list_ssh_gateways
Snapshotscreate · get · list · list-session · list-workspace · list-dangling · update · delete · get-download-url
Volumescreate · get · list · update · delete · resize · attach · detach
Templatescreate · get · list · update · delete · build · cancel-build · get-build · list-active-builds
Workspacetenki_get_workspace_usage · tenki_get_workspace_settings · tenki_update_workspace_settings · tenki_get_snapshot_retention_settings · tenki_update_snapshot_retention_settings

Full per-release breakdown in CHANGELOG.md.

Auth

Set one of TENKI_API_KEY or TENKI_AUTH_TOKEN — when both are set, TENKI_AUTH_TOKEN wins. The header is chosen by token prefix: tk_… → Authorization: Bearer, ory_st_… → X-Session-Token, otherwise a session cookie. Override the endpoint with TENKI_API_ENDPOINT (default https://api.tenki.cloud).

Without a credential the server still starts, registering only tenki_auth_status — so instead of an MCP client reporting an opaque "server failed to start", the agent can call that tool and get told what to set. Ask it "check tenki auth status" any time other tools return auth errors: it reports the credential kind (API key vs session token), the endpoint, and whether a live identity probe succeeded — never the token itself. It reports status only; get a credential with tenki login or from the dashboard.

Host it over HTTP (v2.0-beta)

Besides stdio, the server speaks Streamable HTTP so it can be hosted for remote MCP clients:

bash
TENKI_MCP_TRANSPORT=http PORT=3000 TENKI_API_KEY=… npx -y @tenkicloud/mcp# → tenki-mcp running on http://127.0.0.1:3000/mcp (Streamable HTTP) [loopback only, no auth]

For a single-user deployment, HTTP mode can hold one shared TENKI_API_KEY and therefore exposes a powerful capability. By default it:

  • binds to loopback (127.0.0.1) only — set TENKI_MCP_HTTP_HOST=0.0.0.0 to expose it, but then
  • it requires a bearer token: set TENKI_MCP_HTTP_TOKEN and send Authorization: Bearer <token>. It refuses to start on a non-loopback host without one.
  • DNS-rebinding protection is on (Host-header allowlist), so a malicious web page can't drive your local server.
bash
# expose to a network safely:TENKI_MCP_TRANSPORT=http TENKI_MCP_HTTP_HOST=0.0.0.0 PORT=3000 \  TENKI_MCP_HTTP_TOKEN=$(openssl rand -hex 32) TENKI_API_KEY=… npx -y @tenkicloud/mcp

Point an HTTP-capable MCP client at /mcp. Static-key mode uses one shared TENKI_API_KEY for all sessions. Verified end-to-end (test/http-transport.test.mjs: auth gate, DNS-rebinding rejection, connect → tools/list → tool call over HTTP).

Hosted multi-tenant deployments instead use Tenki Identity's OAuth facade. The MCP server publishes RFC 9728 protected-resource metadata and exchanges each caller's access token through the private Identity service. Identity owns Hydra, validates the requested audience and scope, and issues a short-lived API delegation bound to the user, client, and workspace selected on the Tenki consent page. tenki-mcp has no Hydra Admin access and does not hold the delegation-signing secret.

How it works

Tenki's API is ConnectRPC — JSON over HTTP/1.1, not REST. Every control-plane call is POST https://api.tenki.cloud/tenki.sandbox.v1.SandboxService/{Method} with a lowerCamelCase JSON body. Per-session file I/O runs on a separate data-plane endpoint returned at create time, authenticated with a short-lived session certificate. This server owns both transports so the tools stay one-liners.

Command output: tenki_exec and tenki_run_code capture stdout/stderr by redirecting to files (sh -c '… > out 2> err') and reading them back over the data plane, so you get the output inline through a plain HTTP client.

The wire details are ported from the live-verified n8n community node.

Security

This server holds a Tenki API key and can run code + spend credits, so treat it as a capability. Full model + CSA MCP Server Top-10 mapping in SECURITY.md. Quick controls:

  • Least privilege: every tool carries MCP annotations (readOnlyHint / destructiveHint). Run TENKI_MCP_READONLY=1 for an inspection-only server (read tools only), or TENKI_MCP_DISABLED_TOOLS=tenki_run_code,… to drop specific tools.
  • HTTP transport is loopback-only by default and requires a bearer token to expose to a network (see Host it over HTTP).
  • Audit: TENKI_MCP_AUDIT=1 logs each tool call's name to stderr.
  • Untrusted output: tenki_run_code/tenki_exec/tenki_read_file return output from untrusted code — clients should treat tool results as data, not instructions.

Report vulnerabilities via a private security advisory, not a public issue.

Related

License

MIT

Source: README.md at commit 8199be4

Tools

71

tenki_whoami

Return the identity and workspaces for the current API key. Cheap credential test.

Takes no parameters.

tenki_run_code

Boot a throwaway microVM, run a snippet (shell/python/javascript), return its stdout/stderr/exit code, and tear the sandbox down. Cost-guarded and self-terminating. Use this for one-shot execution when you don't need a persistent sandbox. Output over ~64KB per stream is truncated head+tail — and the sandbox is gone, so for large output use tenki_create_sandbox + tenki_exec and page through the retained file.

Parametersenvcoderequiredlanguagerequiredtimeout_seconds

tenki_create_sandbox

Create a persistent sandbox microVM, optionally from a snapshot or template image. Returns the session (id, state) and its data-plane endpoint. Boots in ~2s. Use tenki_exec / tenki_read_file / tenki_write_file against the returned session_id.

Parametersenvnametagsimagecpu_coresmemory_mbwait_readysnapshot_iddisk_size_gbworkspace_idallow_inboundallow_outbound+3 more

tenki_get_sandbox

Fetch a sandbox's current state and metadata.

Parameterssession_idrequired

tenki_list_sandboxes

List sandboxes for the workspace.

Parameterspage_sizepage_tokeninclude_terminated

tenki_terminate_sandbox

Terminate (destroy) a sandbox. The microVM and its filesystem are gone after this.

Parameterssession_idrequired

tenki_pause_sandbox

Pause a sandbox (snapshot + suspend) so it can be resumed later.

Parameterssession_idrequired

tenki_resume_sandbox

Resume a previously paused sandbox.

Parameterssession_idrequired

tenki_extend_sandbox

Extend a running sandbox's wall-clock lifetime by N seconds so it isn't auto-terminated at its max-duration cap.

Parameterssession_idrequiredadditional_duration_secondsrequired

tenki_update_sandbox

Update mutable fields on an existing sandbox — its name, tags, idle timeout, or max duration.

Parametersnametagssession_idrequiredidle_timeout_minutesmax_duration_seconds

tenki_terminate_sandboxes

Terminate MULTIPLE sandboxes in one call (bulk). IRREVERSIBLE — every listed sandbox and its filesystem is destroyed. Use tenki_terminate_sandbox for a single one.

Parameterssession_idsrequired

tenki_report_sandbox_activity

Report client-side activity on a sandbox to reset its idle timer and keep it from being reaped as idle (a keep-alive heartbeat).

Parameterssession_idrequired

tenki_list_workspace_sandboxes

List every sandbox belonging to a specific workspace (defaults to the API key's workspace) — useful for spotting leaked, still-billing sandboxes across the workspace.

Parameterspage_sizepage_tokenworkspace_idinclude_terminated

tenki_exec

Run a command in an existing sandbox and return stdout, stderr, and exit code inline. Streams over max_output_bytes (default 64KB) come back as a head+tail preview with the full output retained at stdoutPath/stderrPath in the sandbox.

Parameterscwdenvargscommandrequiredsession_idrequiredtimeout_secondsmax_output_bytes

tenki_read_file

Read a UTF-8 text file from a sandbox (paths under /home/tenki).

Parameterspathrequiredsession_idrequired

tenki_write_file

Write a UTF-8 text file to a sandbox (paths under /home/tenki).

Parameterspathrequiredcontentrequiredsession_idrequired

tenki_list_files

List a directory in a sandbox, including dotfiles (.git, .env, .gitignore) by default — set include_hidden false to omit them.

Parameterspathrequiredsession_idrequiredinclude_hidden

tenki_stat_path

Get metadata (size, mode, type, timestamps) for a file or directory in a sandbox. Use to check whether a path exists or inspect it before reading/removing.

Parameterspathrequiredsession_idrequired

tenki_make_dir

Create a directory in a sandbox. Set recursive to also create any missing parent directories (mkdir -p).

Parameterspathrequiredrecursivesession_idrequired

tenki_remove_path

Delete a file or directory in a sandbox. Set recursive to remove a non-empty directory and its contents (rm -r).

Parameterspathrequiredrecursivesession_idrequired

tenki_move_path

Move or rename a file or directory within a sandbox. Both paths are under /home/tenki.

Parameterstorequiredfromrequiredsession_idrequired

tenki_git

Run a git operation in a sandbox. Only clone, checkout, diff, and log are supported by the API — for any other git command (status, add, commit, push, ...) use tenki_exec with `git ...`. clone arg keys: repo (required, the URL), branch?, depth?, directory?. CAVEAT (live-verified): checkout/diff/log run in the session's working directory (/home/tenki), which is not a repository and has no directory arg — so on a repo cloned into a subdirectory they fail with 'not a git repository'. Use tenki_exec with `git -C <directory> ...` instead (e.g. `git -C /home/tenki/hw log -n 2`). For reference, their arg keys are — checkout: ref (required), create? ('true' = -b); diff: range? or base?+head?, path?; log: max_count?, range?, path?.

Parametersargsoperationrequiredsession_idrequired

tenki_expose_port

Expose a port from a sandbox and get a public preview URL. Useful when an agent starts a web server it wants to show.

Parametersportrequiredslugsession_idrequired

tenki_list_exposed_ports

List the ports currently exposed from a sandbox.

Parameterssession_idrequired

tenki_unexpose_port

Remove an inbound port exposure from a sandbox, taking its public URL/preview offline. Use this to un-publish a port previously exposed with tenki_expose_port.

Parametersportrequiredsession_idrequired

tenki_create_preview_url

Create a shareable public preview URL for a port in a sandbox. The sandbox must have inbound networking enabled (create it with allow_inbound).

Parametersportrequiredslugrequiredexpires_atsession_idrequired

tenki_open_preview

Open a viewer-token-gated (AUTHENTICATED-mode) preview. USE tenki_expose_port OR tenki_create_preview_url INSTEAD for an ordinary web server: for any port other than the web terminal (7681) the API deliberately returns a non-regional fallback host that currently has no edge route, so the URL 404s (live-verified). The returned viewerToken does resolve via tenki_resolve_preview_token; only the URL is unreachable. Requires allow_inbound.

Parametersportrequiredexpires_atsession_idrequired

tenki_list_preview_urls

List the workspace's preview URLs, newest page first. Pass session_id to keep only the ones bound to that sandbox (filtered here, not server-side — so it applies to the page you fetched; raise page_size or follow next_page_token to widen it). Results are paginated: a nextPageToken in the response means more pages exist.

Parameterspage_sizepage_tokensession_idworkspace_id

tenki_get_preview_url

Fetch a specific preview URL's details by id.

Parameterspreview_url_idrequired

tenki_delete_preview_url

Delete a preview URL by id, taking it permanently offline.

Parameterspreview_url_idrequired

tenki_touch_preview

Refresh (keep-alive) a live preview by its preview token so it isn't torn down as idle.

Parameterspreview_tokenrequired

tenki_bind_preview_url

Bind a named preview URL to a sandbox session and port (advanced routing).

Parametersportrequiredsession_idrequiredpreview_url_idrequired

tenki_unbind_preview_url

Unbind a named preview URL from its current session/port (advanced routing).

Parameterspreview_url_idrequired

tenki_resolve_preview_token

Resolve a preview token to the sandbox/port it points at (advanced).

Parameterstokenrequired

tenki_create_snapshot

Capture a running sandbox's disk and memory as a reusable snapshot (attached volumes are NOT captured); boot a new sandbox from it later with tenki_create_sandbox + snapshot_id.

Parametersnameexpires_atsession_idrequiredstore_raw_image

tenki_get_snapshot

Fetch one snapshot's status and metadata by ID.

Parameterssnapshot_idrequired

tenki_list_snapshots

List the saved snapshots for the workspace (owner inferred from the API key).

Parameterspage_sizepage_token

tenki_list_session_snapshots

List the snapshots captured from a specific sandbox session.

Parameterspage_sizepage_tokensession_idrequired

tenki_list_dangling_snapshots

List dangling snapshots — those whose source session no longer exists — for the workspace, useful for cleanup.

Parameterspage_sizepage_token

tenki_update_snapshot

Update a snapshot's mutable metadata (name and/or expiry).

Parametersnameexpires_atsnapshot_idrequired

tenki_delete_snapshot

Permanently delete a snapshot by ID.

Parameterssnapshot_idrequired

tenki_get_snapshot_download_url

Get a short-lived, pre-signed URL to download a snapshot's raw disk image (requires the snapshot to have been created with store_raw_image).

Parameterssnapshot_idrequired

tenki_list_workspace_snapshots

List all snapshots in a workspace (defaults to the key's first workspace). Supports pagination.

Parameterspage_sizepage_tokenworkspace_id

tenki_create_volume

Create a workspace-scoped persistent volume — durable block storage that survives sandbox teardown. Defaults the workspace to the API key's first; override with workspace_id.

Parametersnamerequiredsize_bytesrequiredworkspace_id

tenki_get_volume

Fetch a single volume's metadata and current state by its id.

Parametersvolume_idrequired

tenki_list_volumes

List persistent volumes in a workspace (defaults to the key's first workspace). Supports pagination.

Parameterspage_sizepage_tokenworkspace_id

tenki_update_volume

Rename a volume (update its human-readable name). To change a volume's size use tenki_resize_volume instead.

Parametersnamerequiredvolume_idrequired

tenki_delete_volume

Permanently delete a volume and destroy its data. Fails with VolumeInUse if the volume is still attached to a session — detach it first.

Parametersvolume_idrequired

tenki_resize_volume

Grow a volume to a new size in bytes (1 MiB … 100 GiB). Volumes can grow but not shrink.

Parametersvolume_idrequiredsize_bytesrequired

tenki_attach_volume

Mount a volume into a running sandbox at an absolute path. Set read_only to mount without write access.

Parametersread_onlyvolume_idrequiredmount_pathrequiredsession_idrequired

tenki_detach_volume

Unmount a volume from a sandbox session.

Parametersvolume_idrequiredsession_idrequired

tenki_create_template

Create a custom-image template (a reusable sandbox-image spec: base image + setup script + default resources). Build it into a bootable image later with tenki_build_template. NOTE: only a TYPED template (created with builder_spec, no legacy fields) can build a named, publishable image (image_name) that tenki_create_sandbox boots via its `image` arg.

Parametersnamerequiredtagsenv_varscpu_coresmemory_mbstart_cmdbuilder_specdisk_size_gbparent_imagesetup_scriptworkspace_idbase_image_id+1 more

tenki_get_template

Retrieve one template by ID.

Parameterstemplate_idrequired

tenki_list_templates

List templates for the workspace, optionally filtered by tags.

Parameterstagspage_sizepage_tokenworkspace_id

tenki_update_template

Update mutable fields on a template. Only the fields you provide are changed; pass clear_tags to remove all tags.

Parametersnametagsenv_varscpu_coresmemory_mbstart_cmdclear_tagstemplate_idrequiredbuilder_specdisk_size_gbsetup_scriptbase_image_id

tenki_delete_template

Delete a template by ID. Pass force to delete even when builds or dependents exist.

Parametersforcetemplate_idrequired

tenki_build_template

Trigger a build for a template, producing a bootable image. Returns the created build — poll it with tenki_get_template_build until READY; the ready build's imageDigestRef is what tenki_create_sandbox's `image` arg takes.

Parametersbuild_envimage_nametemplate_idrequiredbuild_secretspublish_raw_image

tenki_cancel_template_build

Cancel an in-progress template build by its build ID.

Parametersbuild_idrequired

tenki_get_template_build

Retrieve one template build by its build ID (state, progress, and result image). A READY build's imageDigestRef is the reference tenki_create_sandbox's `image` arg takes.

Parametersbuild_idrequired

tenki_list_active_template_builds

List the currently active (in-progress) builds for a given template.

Parameterstemplate_idrequired

tenki_get_workspace_usage

Get per-second sandbox billing and usage figures for a workspace — use this for cost visibility across all of the workspace's sandboxes.

Parametersworkspace_id

tenki_get_workspace_settings

Read a workspace's sandbox quotas and retention policy: max snapshots/templates/volumes/total bytes, max concurrent and sticky sessions, max preview URLs, and the pause/snapshot retention periods. These are workspace limits — there are no per-session defaults (idle timeout and max duration are set per sandbox at creation).

Parametersworkspace_id

tenki_update_workspace_settings

Update a workspace's sandbox quotas and retention periods. Only the fields you pass change. Each quota has a matching clear_* flag to remove the override and fall back to the platform default; pass the value OR its clear flag, not both. There are no per-session defaults here — idle timeout and max duration are set per sandbox at creation.

Parametersmax_volumesworkspace_idmax_snapshotsmax_templatesmax_total_bytesmax_preview_urlsmax_sticky_sessionspause_retention_daysclear_pause_retentionmax_concurrent_sessionssnapshot_retention_daysclear_snapshot_retention

tenki_get_snapshot_retention_settings

Get the workspace's pause- and snapshot-retention periods. DEPRECATED upstream: this RPC is marked deprecated in the API — tenki_get_workspace_settings returns the same retention fields alongside the quotas. An empty response means no retention override, i.e. kept indefinitely.

Parametersworkspace_id

tenki_update_snapshot_retention_settings

Update the workspace's snapshot-retention policy: how long snapshots are kept before automatic cleanup. Pass retention_days to set it, or clear_retention to keep snapshots indefinitely (the unset state) — exactly one of the two. DEPRECATED upstream: prefer tenki_update_workspace_settings, which sets the same retention (and pause retention) alongside the quotas.

Parametersworkspace_idretention_daysclear_retention

tenki_get_upload_url

Get a short-lived signed URL to upload (HTTP PUT) a binary file to a path inside a sandbox. Use for non-text payloads too large or binary for tenki_write_file.

Parameterspathrequiredsession_idrequiredcontent_type

tenki_get_download_url

Get a short-lived signed URL to download (HTTP GET) a command artifact from a sandbox by its artifact id (e.g. a command's stdout/stderr artifact). Note: the API supports download-by-artifact-id only, not download-by-path.

Parameterssession_idrequiredartifact_idrequired

tenki_update_ssh_keys

Set the SSH authorized public keys on a running sandbox, enabling direct SSH access for the given keys.

Parameterssession_idrequiredpublic_keysrequired

tenki_issue_ssh_cert

Issue a short-lived SSH certificate for a public key, authorizing SSH access to a sandbox via the SSH gateway.

Parameterspublic_keyrequiredsession_idrequired

tenki_list_ssh_gateways

List the currently active SSH gateways for the workspace.

Parametersworkspace_id

tenki_auth_status

Report whether the server has a usable Tenki credential, which kind (API key vs OAuth session token), and the endpoint it targets — verified with a live identity probe. Call this first when other tools fail with auth errors, or when this is the only tool available (which means no credential is configured). Reports status only; it does not log in and never returns the token.

Takes no parameters.

Version history

3
  1. v0.3.1LatestOct 21, 2026
  2. v0.3.0Sep 17, 2026
  3. v0.2.0Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts