tenki-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP transport port. | 3000 |
| TENKI_API_KEY | No | API key (`tk_…`). One of this or TENKI_AUTH_TOKEN is required. | |
| TENKI_API_URL | No | Alias for TENKI_API_ENDPOINT. | https://api.tenki.cloud |
| TENKI_MCP_AUDIT | No | Set to '1' to log each tool call name + arg keys to stderr. | off |
| TENKI_AUTH_TOKEN | No | Session token (`ory_st_…` or cookie value). Takes precedence over TENKI_API_KEY when both are set. | |
| TENKI_API_ENDPOINT | No | Control-plane base URL. | https://api.tenki.cloud |
| TENKI_MCP_READONLY | No | Set to '1' to register only read tools (no create/run/delete/spend). | off |
| TENKI_MCP_HTTP_HOST | No | HTTP bind host; non-loopback requires TENKI_MCP_HTTP_TOKEN. | 127.0.0.1 |
| TENKI_MCP_TRANSPORT | No | Set to 'http' to serve Streamable HTTP instead of stdio. | stdio |
| TENKI_MCP_HTTP_TOKEN | No | Bearer token for the HTTP endpoint; optional on loopback, required on a non-loopback host. | |
| TENKI_MCP_PUBLIC_URL | No | Public base URL for an OAuth-protected hosted server. | |
| TENKI_MCP_OAUTH_SCOPE | No | Required delegated scope. | mcp |
| TENKI_MCP_IDENTITY_URL | No | Internal Tenki Identity service endpoint used to exchange OAuth access tokens. | |
| TENKI_MCP_OAUTH_ISSUER | No | OAuth authorization-server issuer. Enables delegated OAuth HTTP mode. | |
| TENKI_MCP_DISABLED_TOOLS | No | Comma-separated tool names to skip registering. | |
| TENKI_MCP_OAUTH_RESOURCE | No | RFC 8707 resource identifier accepted in access-token audiences. Defaults to `<public URL>/mcp`. | |
| TENKI_MCP_IDENTITY_SERVICE_TOKEN | No | Service credential for the private Identity token-exchange RPC. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| tenki_whoamiA | Return the identity and workspaces for the current API key. Cheap credential test. |
| tenki_run_codeA | 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. |
| tenki_create_sandboxA | 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. |
| tenki_get_sandboxB | Fetch a sandbox's current state and metadata. |
| tenki_list_sandboxesC | List sandboxes for the workspace. |
| tenki_terminate_sandboxA | Terminate (destroy) a sandbox. The microVM and its filesystem are gone after this. |
| tenki_pause_sandboxA | Pause a sandbox (snapshot + suspend) so it can be resumed later. |
| tenki_resume_sandboxA | Resume a previously paused sandbox. |
| tenki_extend_sandboxA | Extend a running sandbox's wall-clock lifetime by N seconds so it isn't auto-terminated at its max-duration cap. |
| tenki_update_sandboxA | Update mutable fields on an existing sandbox — its name, tags, idle timeout, or max duration. |
| tenki_terminate_sandboxesA | Terminate MULTIPLE sandboxes in one call (bulk). IRREVERSIBLE — every listed sandbox and its filesystem is destroyed. Use tenki_terminate_sandbox for a single one. |
| tenki_report_sandbox_activityA | Report client-side activity on a sandbox to reset its idle timer and keep it from being reaped as idle (a keep-alive heartbeat). |
| tenki_list_workspace_sandboxesA | 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. |
| tenki_execA | 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. |
| tenki_read_fileA | Read a UTF-8 text file from a sandbox (paths under /home/tenki). |
| tenki_write_fileA | Write a UTF-8 text file to a sandbox (paths under /home/tenki). |
| tenki_list_filesA | List a directory in a sandbox, including dotfiles (.git, .env, .gitignore) by default — set include_hidden false to omit them. |
| tenki_stat_pathA | 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. |
| tenki_make_dirA | Create a directory in a sandbox. Set recursive to also create any missing parent directories (mkdir -p). |
| tenki_remove_pathA | Delete a file or directory in a sandbox. Set recursive to remove a non-empty directory and its contents (rm -r). |
| tenki_move_pathB | Move or rename a file or directory within a sandbox. Both paths are under /home/tenki. |
| tenki_gitA | 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 |
| tenki_expose_portA | Expose a port from a sandbox and get a public preview URL. Useful when an agent starts a web server it wants to show. |
| tenki_list_exposed_portsA | List the ports currently exposed from a sandbox. |
| tenki_unexpose_portA | 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. |
| tenki_create_preview_urlA | Create a shareable public preview URL for a port in a sandbox. The sandbox must have inbound networking enabled (create it with allow_inbound). |
| tenki_open_previewA | 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. |
| tenki_list_preview_urlsA | 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. |
| tenki_get_preview_urlA | Fetch a specific preview URL's details by id. |
| tenki_delete_preview_urlA | Delete a preview URL by id, taking it permanently offline. |
| tenki_touch_previewA | Refresh (keep-alive) a live preview by its preview token so it isn't torn down as idle. |
| tenki_bind_preview_urlA | Bind a named preview URL to a sandbox session and port (advanced routing). |
| tenki_unbind_preview_urlA | Unbind a named preview URL from its current session/port (advanced routing). |
| tenki_resolve_preview_tokenA | Resolve a preview token to the sandbox/port it points at (advanced). |
| tenki_create_snapshotA | 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. |
| tenki_get_snapshotA | Fetch one snapshot's status and metadata by ID. |
| tenki_list_snapshotsB | List the saved snapshots for the workspace (owner inferred from the API key). |
| tenki_list_session_snapshotsA | List the snapshots captured from a specific sandbox session. |
| tenki_list_dangling_snapshotsA | List dangling snapshots — those whose source session no longer exists — for the workspace, useful for cleanup. |
| tenki_update_snapshotA | Update a snapshot's mutable metadata (name and/or expiry). |
| tenki_delete_snapshotA | Permanently delete a snapshot by ID. |
| tenki_get_snapshot_download_urlA | 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). |
| tenki_list_workspace_snapshotsA | List all snapshots in a workspace (defaults to the key's first workspace). Supports pagination. |
| tenki_create_volumeA | 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. |
| tenki_get_volumeA | Fetch a single volume's metadata and current state by its id. |
| tenki_list_volumesA | List persistent volumes in a workspace (defaults to the key's first workspace). Supports pagination. |
| tenki_update_volumeA | Rename a volume (update its human-readable name). To change a volume's size use tenki_resize_volume instead. |
| tenki_delete_volumeA | Permanently delete a volume and destroy its data. Fails with VolumeInUse if the volume is still attached to a session — detach it first. |
| tenki_resize_volumeA | Grow a volume to a new size in bytes (1 MiB … 100 GiB). Volumes can grow but not shrink. |
| tenki_attach_volumeA | Mount a volume into a running sandbox at an absolute path. Set read_only to mount without write access. |
| tenki_detach_volumeB | Unmount a volume from a sandbox session. |
| tenki_create_templateA | 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 |
| tenki_get_templateA | Retrieve one template by ID. |
| tenki_list_templatesA | List templates for the workspace, optionally filtered by tags. |
| tenki_update_templateA | Update mutable fields on a template. Only the fields you provide are changed; pass clear_tags to remove all tags. |
| tenki_delete_templateA | Delete a template by ID. Pass force to delete even when builds or dependents exist. |
| tenki_build_templateA | 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 |
| tenki_cancel_template_buildA | Cancel an in-progress template build by its build ID. |
| tenki_get_template_buildA | 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 |
| tenki_list_active_template_buildsA | List the currently active (in-progress) builds for a given template. |
| tenki_get_workspace_usageA | Get per-second sandbox billing and usage figures for a workspace — use this for cost visibility across all of the workspace's sandboxes. |
| tenki_get_workspace_settingsA | 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). |
| tenki_update_workspace_settingsA | 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. |
| tenki_get_snapshot_retention_settingsA | 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. |
| tenki_update_snapshot_retention_settingsA | 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. |
| tenki_get_upload_urlA | 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. |
| tenki_get_download_urlA | 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. |
| tenki_update_ssh_keysA | Set the SSH authorized public keys on a running sandbox, enabling direct SSH access for the given keys. |
| tenki_issue_ssh_certA | Issue a short-lived SSH certificate for a public key, authorizing SSH access to a sandbox via the SSH gateway. |
| tenki_list_ssh_gatewaysA | List the currently active SSH gateways for the workspace. |
| tenki_auth_statusA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 71 tools
Multiple tools overlap significantly: tenki_list_sandboxes and tenki_list_workspace_sandboxes have nearly identical purposes, several snapshot listing variants coexist, and deprecated retention-settings tools duplicate workspace-settings tools. Descriptions often clarify when to use what, but the boundary between run_code and create_sandbox+exec, git and exec, and open_preview versus expose_port/create_preview_url still creates real selection risk.
Every tool uses the tenki_ prefix with a clear verb_noun pattern: create/get/list/update/delete for resources, plus exec/read/write/move for file operations and expose/unexpose for ports. Singular get_ versus plural list_ conventions are consistent, making the API predictable despite its size.
71 tools is far beyond a well-scoped MCP surface and hits the extreme end of the calibration scale. Even accounting for a broad sandbox-management domain, the count is bloated by near-duplicate list/retrieval variants and deprecated endpoints that could be consolidated.
The domain is very thoroughly covered: full sandbox lifecycle, file operations, execution, preview URLs, snapshots, volumes, templates, SSH access, workspace settings, usage billing, and auth diagnostics. There are no obvious dead ends or missing core operations for managing sandboxes and their related resources.