colab-persist
Persists project workspaces and versioned checkpoints in Google Drive, with verified snapshot/restore via SHA-256 manifests and Drive flush/unmount.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@colab-persistrun examples/cuda_demo.py --project cuda-learning and show status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Colab Persist
Use a disposable Colab GPU from your terminal. Keep the work in Google Drive.
Colab Persist adds verified workspace checkpoints and a local MCP server/client to Google's official Colab CLI. L4 is the default GPU. No notebook editing or tmux is required. Google may still ask you to authorize a Drive mount in your browser when a new VM starts.
Mac: source code + coding agents + credentials
│ SSH / official Colab CLI
▼
Colab L4: temporary workspace + CUDA execution
│ versioned archives + SHA-256 manifests
▼
Google Drive: Colab-CUDA/projects/<project>/For datasets larger than VM disk, use the separate manifest-driven shard cache.
colab-persist dataset-plan corpus.json validates the manifest and reports storage
budgets without allocating a GPU or copying data. Your training script uses
ShardCache to stage a bounded working set outside workspace snapshots.
See large datasets and LoRA for the 1 TB
storage layout, checkpoint requirements, and current limits. Do not place a
training corpus or base model cache inside the managed workspace.
A complete run
colab-persist run examples/cuda_demo.py --project cuda-learningThis starts or reuses an L4, mounts Drive, restores the project's last checkpoint, uploads the script, and runs it on the GPU. During execution it attempts a checkpoint every 60 seconds. After the script exits—even with an error—it checkpoints again, asks Drive to flush outstanding writes, and stops the VM only if saving succeeds. Local script paths, source size, project names and checkpoint intervals are checked before allocating a GPU. Run the example from the cloned repository directory. The example compiles real CUDA, validates 256 results on the GPU, and increments a counter restored from the previous run.
Related MCP server: mcp-colab-gpu
Install and authenticate
Requires macOS or Linux, Git, Python 3.12+, OpenSSH, uv, and Google Cloud CLI.
git clone https://github.com/ehzawad/colab-persist.git
cd colab-persist
uv tool install .
colab-persist configure --email YOUR_GOOGLE_EMAIL --gpu L4
gcloud auth application-default login YOUR_GOOGLE_EMAIL --no-launch-browser \
--disable-quota-project \
--scopes=openid,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/colaboratoryThe official Colab CLI is installed inside the tool's isolated Python environment;
you do not need to install it separately. If colab-persist is not found after
installation, run uv tool update-shell and open a new terminal. Keep your own
Google credentials on your computer; no repository credentials are supplied.
Use the authorization link from that exact terminal attempt and paste its code back into the same terminal. Authorize Drive with the same Google account later. The helper checks the Google identity before connecting or allocating a VM.
Check the installation and configured Google identity before allocating a GPU:
colab-persist tools # nine MCP tools
colab-persist status # checks account and runtime statusThen, from the cloned repository directory, run the CUDA example twice:
colab-persist run examples/cuda_demo.py --project first-run
colab-persist run examples/cuda_demo.py --project first-run
colab-persist statusWith a new project name, the first run reports count 1; the second restores it and reports count 2 with previous count 1. Each successful run saves, flushes Drive, and stops its VM, so the final status should be inactive. Expect a browser consent step for each new VM's Drive mount. These runs consume Colab compute units. This flow was verified from a fresh public clone on macOS.
Configuration lives in ~/.config/colab-persist/config.json; Google credentials use
the existing local ADC store. A dedicated Ed25519 key is created only if the selected
key does not exist. None of these files are uploaded by this tool.
If Colab's initial Drive mount fails immediately after consent, the helper retries once and verifies the actual mount. A failed mount never becomes an ordinary local directory masquerading as persistent storage.
Terminal and SSH workflow
colab-persist start # L4 + Drive + default workspace
colab-persist ssh # ordinary SSH shell
# On the VM:
cd /content/colab-persist/default/workspace
nvcc my_kernel.cu -o my_kernel
./my_kernel
exit
# Back on the Mac:
colab-persist stop # checkpoint + flush + shutdownOn the next start, the default workspace is restored. Work inside the displayed
managed workspace; files elsewhere on the VM are outside the backup scope.
colab-persist ssh -- nvidia-smi also works for single commands.
To get a conventional SSH alias, configure a dedicated fragment:
colab-persist configure --email YOUR_GOOGLE_EMAIL --gpu L4 \
--ssh-config ~/.ssh/config.d/colab-cuda.confInclude ~/.ssh/config.d/* from your existing SSH config, then run start.
ssh colab-cuda and rsync ... colab-cuda:/content/colab-persist/default/workspace/
work normally. Host keys are pinned separately for each runtime endpoint. Starting
a replacement refreshes this alias; connecting to an old endpoint fails rather
than quietly connecting to another VM.
Select another GPU explicitly when starting a fresh runtime:
colab-persist start --gpu T4
colab-persist start --gpu A100L4 remains the configured default. Availability and compute-unit cost depend on your account. The helper never silently substitutes another GPU or changes a live runtime's hardware; save and stop it first.
Projects and script arguments
Only the named script is uploaded by default. To include a whole project:
colab-persist run ./train.py --source . --project experiment -- --epochs 10
colab-persist run examples/checkpoint_loop.py --project resumable -- --steps 30The script runs with its project workspace as the current directory:
Variable | Meaning |
| Temporary restored project directory |
| Its |
| Read-only source shards under Drive |
| Disposable local shard cache, outside snapshots |
| Defaults to the external local Hugging Face cache if not already set |
Scripts may invoke nvcc, make, profilers, or other commands. Store a dependency
file and bootstrap script in the project and run them as needed after replacement;
installed system packages and Python environments are not VM images and are not
restored automatically. CUDA comes from the Colab runtime image.
Source overlays update matching project files without deleting other restored
files. Caches, virtual environments, .git, common credential directories,
.env*, private-key extensions, symbolic links, and temporary files are excluded.
These exclusions are not a secret scanner: do not put credentials in ordinary
project files or command-line arguments.
Checkpoints and shutdown
colab-persist status
colab-persist snapshots --project experiment # requires mounted Drive
colab-persist save # flush/unmount; VM stays allocated
colab-persist mount # remount to continue saving
colab-persist restore --project experiment # empty destination required
colab-persist stopEach snapshot is an immutable .tar.gz plus a JSON manifest containing SHA-256
hashes for every saved file and the archive. A manifest is written only after
the copied archive verifies. Incomplete uploads are ignored; unchanged snapshots
are reused. Restore validates both the archive and extracted files, rejects links
and path traversal, and refuses to overwrite a nonempty workspace. Checkpoints are
retained until you choose to remove them from Drive; there is no automatic pruning.
Workspace and source uploads default to a 5 GiB size cap checked before hashing;
oversized saves refuse shutdown. Use the separate shard cache for large corpora.
Periodic snapshots report pending_drive_flush. A successful final save reports
drive_flush_confirmed, using Colab's drive.flush_and_unmount(). Save/stop refuses
while a managed script is running. If Drive is unavailable, full, or cannot flush,
the operation fails and leaves the VM allocated for recovery. Fix the problem and
retry stop; do not bypass it unless you accept losing unsaved work.
run --keep-runtime flushes Drive but leaves the GPU allocated. Remount Drive before
another save. Direct colab stop, the Colab browser's Delete Runtime action, and
Google's own reclamation bypass the save guard.
MCP: local agents, remote CUDA
Keep Codex, Claude Code, or your preferred coding agent on your Mac. Their login and configuration survive runtime deletion; the MCP tools operate the GPU worker.
{
"mcpServers": {
"colab-persist": {
"command": "/absolute/path/to/colab-persist-mcp"
}
}
}For Codex, find the installed executable with command -v colab-persist-mcp, then:
codex mcp add colab-persist -- /absolute/path/to/colab-persist-mcpTools: runtime_status, start_runtime, prepare_workspace, run_script,
list_checkpoints, restore_workspace, save_workspaces, safe_stop, and plan_dataset.
The terminal client uses the same tools over real MCP stdio. colab-persist tools
checks the connection. No HTTP port is exposed. Drive consent runs in a terminal,
because OAuth codes should not be passed through a model conversation. Long jobs
are best submitted through the supplied client: other MCP hosts may impose their
own tool timeouts. An interrupted client does not confirm a job stopped; inspect
runtime status before starting another job or shutting down.
What survives—and what cannot
Saved source files, binaries, outputs, application checkpoints, and setup recipes survive in Drive. RAM, VRAM, running processes, root filesystem changes, and writes that never reached Drive do not. An application must write restartable state (for example model/optimizer state and the current step) to resume computation. Use atomic replacement for application checkpoint files; copying a live multi-file database is not a transactional backup. Background child processes must finish before your script exits.
Colab Pro does not guarantee a ten-hour session. Paid runtimes still have variable idle and maximum-lifetime limits. This tool does not simulate activity or prevent Google from reclaiming a VM. After an unexpected termination, start a replacement and restore the last checkpoint that reached Drive. Recovery is explicit, so a replayed workload cannot silently allocate repeated GPUs or duplicate side effects.
Existing tools
Project | What it already provides | Where this project fits |
GPU selection, SSH, execution, file transfer and Drive mounting | Used directly as the transport | |
Broader runtime/job APIs, MCP, and direct Drive checkpoint helpers | A fuller alternative; its direct Drive transfers require a Cloud quota project and Drive API | |
Local-agent bridge to a Colab session in the browser | Useful for notebook interaction |
This is a small, independent workflow layer for a single account and named runtime, not an official Google product. It deliberately uses the native Drive mount already supported by Colab; no separate Google Cloud project is needed for that mount.
Development and verification
uv sync --no-editable
uv run --no-editable python -m unittest discover -s tests -v
uv run --no-editable colab-persist toolsTests cover recovery into a new workspace, corruption, interrupted publication, credential/link exclusions, malicious archives, overwrite protection, script errors, active-job locks, and refusal to stop after a failed flush. Live GPU/Drive checks consume compute units and require your own account; see VALIDATION.md for the maintainer's recorded verification.
Sources: Colab FAQ and runtime limits, Drive flush implementation, CLI Drive integration, MCP Python SDK.
Available Tools
9 toolslist_checkpointsBRead-only
List complete checkpoint manifests from the mounted Drive.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation is consistent with the non-mutating 'List' verb, so there is no contradiction. The description adds modest context about the source ('mounted Drive') and completeness of the manifests, but it does not mention pagination, size limits, or what the returned manifests contain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, direct sentence with no filler. The action and object are front-loaded, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool, the description is minimally adequate, but it leaves gaps: project semantics are undocumented, and there is no output schema to clarify the return format. The agent can invoke the tool but cannot fully predict how results will be shaped or filtered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description does not mention the 'project' parameter or how it affects the listing. An agent cannot tell whether project filters results, changes paths, or requires a specific value, so the description fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a specific resource ('complete checkpoint manifests') and location ('mounted Drive'), making the tool's purpose unambiguous. It is clearly distinct from sibling tools like restore_workspace or save_workspaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as restore_workspace or save_workspaces. The description implies its use for listing manifests but does not state prerequisites, exclusions, or why an agent would choose it over a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_datasetARead-only
Validate a local immutable shard manifest and size a bounded cache for large datasets.
Reads only the manifest, not the corpus. Does not provision a VM, contact Drive, or confirm source files, VM free disk, Drive quota, throughput or GPU model fit. Training scripts use colab_persist.datasets.ShardCache on the VM.
| Name | Required | Description | Default |
|---|---|---|---|
| cache_gib | No | ||
| reserve_gib | No | ||
| manifest_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description adds meaningful behavioral detail beyond that: it reads only the manifest, not the corpus, and explicitly lists operations it does not perform. This is valuable transparency with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, with the core purpose in the first line and the key limitations following. Every sentence adds useful information and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, scope, and important non-behaviors, and references the training-script usage context. It lacks output/return details and parameter-specific guidance, but given the simple tool shape and read-only annotation, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 mentions manifest validation and cache sizing, but gives no explanation of cache_gib or reserve_gib semantics, units, limits, or how they interact. The parameter names alone are not enough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verbs and resources: 'Validate a local immutable shard manifest and size a bounded cache for large datasets.' It clearly distinguishes itself from sibling tools focused on runtime, workspace, and script execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it reads only the manifest and does not provision VMs or contact Drive. It stops short of naming an explicit alternative tool or a precise when-to-use versus when-not-to-use condition, but the exclusions are strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_workspaceC
Create a managed workspace or restore its latest Drive snapshot on a fresh VM.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description bears full responsibility for disclosing behavior. It does state that the operation creates or restores, which implies state changes, but it does not explain conditions, side effects, whether existing state is overwritten, or what happens on a non-fresh VM.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no wasted words. It front-loads the main action, though its brevity contributes to the ambiguity rather than resolving it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool combines two distinct behaviors, has no annotations, no output schema, and overlaps with restore_workspace, but the description omits the conditions that govern create versus restore, the meaning of project, and the expected side effects. These gaps make it insufficient for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description needed to explain how the project parameter influences the workspace or snapshot selection, but it never mentions project at all. The agent is left with only the schema title 'Project' and default value 'default', which provides minimal semantic grounding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete operation: creating a managed workspace or restoring its Drive snapshot on a fresh VM. It is clear about the resource and action, but it does not differentiate itself from the sibling tool restore_workspace, which appears to overlap with the restore behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'on a fresh VM' implies the intended scenario, but the description never explicitly says when to use this tool versus restore_workspace, save_workspaces, or start_runtime. It also gives no guidance on when the create path should be chosen over the restore path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_workspaceB
Restore a verified Drive checkpoint into an empty workspace. Refuses overwrites.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | default | |
| snapshot | No | latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the refusing-overwrites behavior, which is valuable, but it omits what 'verified' means, what happens if the workspace is not empty, and any other side effects. The transparency is partial, not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, front-loaded sentences: the core action comes first, followed by the critical refusal behavior. Every word earns its place, with no redundancies or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and 0% parameter description coverage, the description is too sparse for an agent to call the tool correctly. It lacks parameter semantics, return behavior, and edge-case handling (e.g., what happens if the workspace isn't empty or the checkpoint isn't verified).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description gives no explanation of the 'project' and 'snapshot' parameters, and the schema provides 0% coverage (no property descriptions). An agent cannot infer valid values or how these parameters affect restoration, so the description completely fails to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'restore' and the resource 'verified Drive checkpoint' along with the target 'empty workspace'. It also mentions a distinct behavioral constraint ('Refuses overwrites') that helps differentiate it from siblings like save_workspaces or prepare_workspace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (restore a checkpoint into an empty workspace) and includes a precondition, but it does not explicitly compare with alternatives like list_checkpoints or save_workspaces. There is no when-not-to-use guidance or condition for choosing this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_scriptA
Run a local Python script on the active, Drive-mounted GPU VM.
Restores previous files, uploads the script (or an explicitly selected source directory), periodically checkpoints, flushes Drive on completion, then stops by default. Script may invoke nvcc and other tools. Only workspace files are saved, not RAM or credentials. Google may still terminate the VM; completed snapshots are recoverable. Can be long-running.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | default | |
| arguments | No | ||
| stop_after | No | ||
| script_path | Yes | ||
| source_directory | No | ||
| checkpoint_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers unusually rich disclosure: it covers restore/overwrite behavior, uploads, checkpointing, Drive flush, default shutdown, subprocess capabilities, persistence limits (workspace only, not RAM/credentials), and failure modes (Google termination, recoverable snapshots). This is exactly the side-effect and risk information an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
All six sentences are information-dense and non-redundant, with the core purpose front-loaded and caveats organized logically. No filler or restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the full execution lifecycle, persistence, default side effects, and failure recovery. It is slightly incomplete regarding return values/log retrieval and the two unnamed parameters, but it is close to complete for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 implicitly documents script_path/source_directory via 'uploads the script (or... source directory)', checkpoint_seconds via 'periodically checkpoints', and stop_after via 'stops by default'. However, it never explains the 'arguments' parameter or the 'project' parameter, leaving two of six parameters semantically underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a precise action ('Run'), a specific artifact ('local Python script'), and a constrained target ('active, Drive-mounted GPU VM'). This clearly separates it from siblings like start_runtime, runtime_status, and save_workspaces, which cover VM lifecycle and workspace state rather than script execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'active... VM' establishes that the tool is for an already-running runtime rather than for starting one, and the lifecycle notes (checkpoint, flush, stop by default, long-running) give practical context. It stops short of explicitly naming sibling alternatives or stating when-not-to-use conditions, so it doesn't reach 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runtime_statusARead-only
Check the configured Colab runtime and Drive mount without provisioning compute.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds a useful behavioral nuance ('without provisioning compute') and specifies what is checked, but it does not describe auth requirements, potential latency, or whether the mount must be pre-configured. This goes slightly beyond annotations but is not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It captures the core function, target resources, and the key non-effect efficiently, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with annotations, the description is nearly sufficient. It names what is checked (runtime, Drive mount) and explicitly states no compute provisioning occurs. However, without an output schema, it does not mention what the result looks like (e.g., status summary, boolean, or error behavior), which could be useful but is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so the baseline is 4. The description correctly implies there is nothing to supply and sets expectations that the tool only performs a read-only check. No additional parameter detail is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Check') and resource ('configured Colab runtime and Drive mount'), and explicitly distinguishes it from provisioning actions by adding 'without provisioning compute.' This differentiates it from start_runtime and others in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without provisioning compute' implies an appropriate use-case (status check without side effects), but it does not explicitly name alternatives like start_runtime or state when to use this over prepare_workspace. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
safe_stopADestructive
Save all managed workspaces and stop the VM only after Drive confirms its flush.
Unmanaged processes and files outside the workspace are not captured. Saving failures leave the VM running so the user can recover. Refuses while managed jobs are active.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint=true, and the description goes beyond that by revealing specifics: the flush-required stop, the failure recovery (VM stays running on save failure), and the exclusion of unmanaged processes. It also discloses the refusal condition. This adds meaningful context without contradicting the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no wasted words. The primary action and condition lead, followed by scope limitations and failure/refusal behavior. Each sentence earns its place, and the structure is clean and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation, the description covers all critical decision points: what it saves, when it stops, what it ignores, what happens on failure, and when it declines. No output schema exists, but the return value isn't essential for the agent's call decision. The description is complete for a zero-parameter tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema describes 100% of them (none). The description doesn't need to explain parameters. Baseline of 4 for zero-parameter tools is appropriate; there is no missing parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action — save all managed workspaces then stop the VM — and includes a necessary condition (Drive confirms flush). It explicitly distinguishes what it does not cover (unmanaged processes/files) and sets expectations about refusal. This clearly separates it from siblings like save_workspaces or runtime_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when it is appropriate to call (when you want to save and stop) and when it will refuse (if managed jobs are active). However, it does not explicitly name alternatives such as save_workspaces for saving without stopping or runtime_status to check job activity. It gives sufficient context for an agent to infer, but stops short of explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_workspacesA
Checkpoint all managed workspaces, flush Drive, and unmount it. VM stays allocated.
Refuses if managed jobs are active. Remount Drive before further persistence operations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states side effects (flushes Drive, unmounts it), state outcome (VM stays allocated), a refusal condition (managed jobs active), and a follow-up requirement (remount Drive). This is unusually transparent for a zero-parameter tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary action, followed by short sentences for state, guard condition, and post-condition. Every sentence adds distinct value and none are redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters, no annotations, and no output schema, the description covers all essential context: what the tool does, what side effects it has, when it refuses, and what must happen afterward. An agent has enough information to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics for the description to clarify. The baseline of 4 applies, and the description reinforces that the operation is fixed-scope and requires no input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Checkpoint all managed workspaces, flush Drive, and unmount it.' It also states 'VM stays allocated,' which clearly separates this from sibling tools like safe_stop or restore_workspace. The operation is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: it refuses to run while managed jobs are active, which tells the agent when not to call it, and it warns to remount Drive before further persistence operations. It does not explicitly name alternatives or compare this tool with restore_workspace or safe_stop, so it falls just 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.
start_runtimeA
Provision or reuse the configured runtime. Default GPU is L4. Consumes Colab units.
If drive_mounted is false, run colab-persist mount in a user terminal to authorize Drive.
| Name | Required | Description | Default |
|---|---|---|---|
| gpu | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It discloses cost (Colab units) and the default GPU, which is useful, but omits other behaviors like idempotency, async behavior, or side effects beyond cost. For a provisioning tool, this is partial disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The core purpose and default are front-loaded, and the conditional instruction is necessary and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main action, default GPU, cost, and a prerequisite. It does not describe return values or how to verify success, but given the simplicity and lack of output schema, this is reasonably complete. It could mention whether it blocks or returns immediately, but overall it's adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It mentions 'Default GPU is L4', which clarifies the default for the optional gpu parameter, but does not enumerate valid values or explain what null means beyond the default. An agent would not know what strings to pass (e.g., 'T4', 'A100').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'Provision or reuse' with the resource 'runtime', and mentions the default GPU and cost. This clearly distinguishes it from siblings like runtime_status (status check) and safe_stop (stop), so an agent can select it appropriately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear conditional prerequisite (if drive_mounted is false, run a specific mount command) and mentions that it consumes Colab units. It does not explicitly name alternatives, but the action and context are clear enough to imply when to use it.
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.
9 tool updates
v0.2.1- First observed
list_checkpoints - First observed
plan_dataset - First observed
prepare_workspace - First observed
restore_workspace - First observed
run_script - First observed
runtime_status - First observed
safe_stop - First observed
save_workspaces - First observed
start_runtime
TDQS
Scored across 9 tools
Each tool has a distinct role in the lifecycle, and descriptions clarify boundaries. The main overlaps are restore_workspace versus prepare_workspace and save_workspaces versus safe_stop, but the descriptions make the differences clear enough for an agent to select correctly.
Most tools follow a verb_noun pattern such as restore_workspace, save_workspaces, start_runtime, and list_checkpoints. Minor deviations like runtime_status and safe_stop break the pattern slightly but remain readable and predictable.
Nine tools is well-scoped for the server's purpose of managing Colab runtimes, workspace persistence, and dataset planning. Each tool covers a meaningful lifecycle step without unnecessary bloat or redundancy.
The surface covers the core workflow: start/stop runtime, status, save/restore workspaces, list checkpoints, prepare/run scripts, and dataset validation. Gaps include no explicit delete/cleanup tool and no in-tool mount/unmount operation, but these are referenced as external commands and do not block the main persistence workflow.
Maintenance
Related MCP Connectors
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
System-of-record notebook for AI coding agents: pages, datastores, tasks, skills over MCP.
Related MCP Servers
- AlicenseBqualityDmaintenanceLocal-first MCP server for controlling Google Colab as a development, shell, file, and training runtime, with tools for notebook editing, GPU acceleration, and file transfer.598Apache 2.0
- AlicenseAqualityCmaintenanceEnables MCP-compatible AI assistants to run Python code on Google Colab GPU/TPU runtimes, supporting accelerators like T4, A100, H100, with background execution and Google Drive integration.103MIT
- AlicenseNot gradedqualityFmaintenanceEnables Claude Code to execute shell commands, Python code, and file transfers on a Google Colab T4 GPU via an MCP server, bridging the GPU gap for AI coding agents.6MIT
- FlicenseNot gradedqualityBmaintenanceEnables MCP clients to execute Python code on Google Colab GPU/TPU runtimes via the official Colab CLI, with session, file, and package management capabilities.-