Name | morphcloud JSON |
Version |
0.1.23
JSON |
| download |
home_page | None |
Summary | A Python SDK and CLI tool for creating, managing, and interacting with Morph Cloud VMs. |
upload_time | 2025-01-28 22:41:34 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.11 |
license | Apache-2.0 |
keywords |
cli
cloud
morph
runtimes
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# MorphCloud Python SDK
## Overview
MorphCloud is a platform designed to spin up remote AI devboxes we call runtimes.
It provides a suite of code intelligence tools and a Python SDK to manage, create, delete, and interact with runtime instances.
## Setup Guide
### Prerequisites
Python 3.11 or higher
Go to [https://cloud.morph.so](https://cloud.morph.so/web/api-keys), log in with the provided credentials and create an API key.
Set the API key as an environment variable `MORPH_API_KEY`.
### Installation
```
pip install morphcloud
```
Export the API key:
```
export MORPH_API_KEY="your-api-key"
```
## Python API
The SDK provides a Python API to interact with the MorphCloud API.
The following example creates a minimal vm snapshot, starts and instance then sets up a simple HTTP server and makes an HTTP request to it.
```py
import time
import requests
import tempfile
from morphcloud.api import MorphCloudClient
# Connect to the MorphCloud API
# The API key can be set through the client or as an environment variable MORPH_API_KEY
client = MorphCloudClient()
# Create a snapshot with 1 vCPU, 128MB memory, 700MB disk size, and the image "morphvm-minimal"
snapshot = client.snapshots.create(vcpus=1, memory=128, disk_size=700, image_id="morphvm-minimal")
# Start an instance from the snapshot and open an SSH connection
with client.instances.start(snapshot_id=snapshot.id) as instance, instance.ssh() as ssh:
# Install uv and python using the ssh connection
ssh.run(["curl -LsSf https://astral.sh/uv/install.sh | sh"]).raise_on_error()
ssh.run(["echo 'source $HOME/.local/bin/env' >> $HOME/.bashrc"]).raise_on_error()
ssh.run(["uv", "python", "install"]).raise_on_error()
# Create an index.html file locally and copy it to the instance
with tempfile.NamedTemporaryFile(mode="w") as f:
f.writelines("<h1>Hello, World!</h1>")
f.flush()
ssh.copy_to(f.name, "index.html")
# Start an HTTP server on the instance with a tunnel to the local machine and run it in the background
with ssh.run(["uv", "run", "python3", "-m", "http.server", "8080", "--bind", "127.0.0.1"], background=True) as http_server, \
ssh.tunnel(local_port=8888, remote_port=8080) as tunnel:
# Wait for the HTTP server to start
time.sleep(1)
print("HTTP Server:", http_server.stdout)
print("Making HTTP request")
response = requests.get("http://127.0.0.1:8888", timeout=10)
print("HTTP Response:", response.status_code)
print(response.text)
```
## Command Line Interface
The SDK also provides a command line interface to interact with the MorphCloud API.
You can use the CLI to create, delete, and manage runtime instances.
### Images
List available images:
```bash
morph image list [--json]
```
### Snapshots
```bash
# List all snapshots
morph snapshot list [--json]
# Create a new snapshot
morph snapshot create --image-id <id> --vcpus <n> --memory <mb> --disk-size <mb> [--digest <hash>]
# Delete a snapshot
morph snapshot delete <snapshot-id>
```
### Instances
```bash
# List all instances
morph instance list [--json]
# Start a new instance from snapshot
morph instance start <snapshot-id> [--json]
# Stop an instance
morph instance stop <instance-id>
# Get instance details
morph instance get <instance-id>
# Create snapshot from instance
morph instance snapshot <instance-id> [--json]
# Clone an instance
morph instance branch <instance-id> [--count <n>]
```
### Instance Management
```bash
# Execute command on instance
morph instance exec <instance-id> <command>
# SSH into instance
morph instance ssh <instance-id> [command]
# Direct SSH access (alternative method)
# You can also SSH directly into a MorphVM instance using:
ssh <instance-id>@ssh.cloud.morph.so
# Port forwarding
morph instance port-forward <instance-id> <remote-port> [local-port]
# Expose HTTP service
morph instance expose-http <instance-id> <name> <port>
# Hide HTTP service
morph instance hide-http <instance-id> <name>
```
### Interactive Chat
Start an interactive chat session with an instance:
**Note:** You'll need to set `ANTHROPIC_API_KEY` environment variable to use this command.
```bash
morph instance chat <instance-id> [instructions]
```
Raw data
{
"_id": null,
"home_page": null,
"name": "morphcloud",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "cli, cloud, morph, runtimes",
"author": null,
"author_email": "Morph Labs <jobs@morph.so>",
"download_url": "https://files.pythonhosted.org/packages/cf/c6/4e016f5609b7bf26c6321b537fa3241ad8c4934588d9c5182bd7523881cd/morphcloud-0.1.23.tar.gz",
"platform": null,
"description": "# MorphCloud Python SDK \n\n## Overview\n\nMorphCloud is a platform designed to spin up remote AI devboxes we call runtimes.\nIt provides a suite of code intelligence tools and a Python SDK to manage, create, delete, and interact with runtime instances.\n\n## Setup Guide\n\n### Prerequisites\n\nPython 3.11 or higher\n\nGo to [https://cloud.morph.so](https://cloud.morph.so/web/api-keys), log in with the provided credentials and create an API key.\n\nSet the API key as an environment variable `MORPH_API_KEY`.\n\n### Installation\n\n```\npip install morphcloud\n```\n\nExport the API key:\n\n```\nexport MORPH_API_KEY=\"your-api-key\"\n```\n\n## Python API\n\nThe SDK provides a Python API to interact with the MorphCloud API.\n\nThe following example creates a minimal vm snapshot, starts and instance then sets up a simple HTTP server and makes an HTTP request to it.\n\n```py\nimport time\nimport requests\nimport tempfile\nfrom morphcloud.api import MorphCloudClient\n\n# Connect to the MorphCloud API\n# The API key can be set through the client or as an environment variable MORPH_API_KEY\nclient = MorphCloudClient()\n\n# Create a snapshot with 1 vCPU, 128MB memory, 700MB disk size, and the image \"morphvm-minimal\"\nsnapshot = client.snapshots.create(vcpus=1, memory=128, disk_size=700, image_id=\"morphvm-minimal\")\n\n# Start an instance from the snapshot and open an SSH connection\nwith client.instances.start(snapshot_id=snapshot.id) as instance, instance.ssh() as ssh:\n # Install uv and python using the ssh connection\n ssh.run([\"curl -LsSf https://astral.sh/uv/install.sh | sh\"]).raise_on_error()\n ssh.run([\"echo 'source $HOME/.local/bin/env' >> $HOME/.bashrc\"]).raise_on_error()\n ssh.run([\"uv\", \"python\", \"install\"]).raise_on_error()\n\n # Create an index.html file locally and copy it to the instance\n with tempfile.NamedTemporaryFile(mode=\"w\") as f:\n f.writelines(\"<h1>Hello, World!</h1>\")\n f.flush()\n ssh.copy_to(f.name, \"index.html\")\n\n # Start an HTTP server on the instance with a tunnel to the local machine and run it in the background\n with ssh.run([\"uv\", \"run\", \"python3\", \"-m\", \"http.server\", \"8080\", \"--bind\", \"127.0.0.1\"], background=True) as http_server, \\\n ssh.tunnel(local_port=8888, remote_port=8080) as tunnel:\n\n # Wait for the HTTP server to start\n time.sleep(1)\n\n print(\"HTTP Server:\", http_server.stdout)\n\n print(\"Making HTTP request\")\n response = requests.get(\"http://127.0.0.1:8888\", timeout=10)\n print(\"HTTP Response:\", response.status_code)\n print(response.text)\n```\n\n## Command Line Interface\n\nThe SDK also provides a command line interface to interact with the MorphCloud API.\nYou can use the CLI to create, delete, and manage runtime instances.\n\n### Images\n\nList available images:\n```bash\nmorph image list [--json]\n```\n\n### Snapshots\n\n```bash\n# List all snapshots\nmorph snapshot list [--json]\n\n# Create a new snapshot\nmorph snapshot create --image-id <id> --vcpus <n> --memory <mb> --disk-size <mb> [--digest <hash>]\n\n# Delete a snapshot\nmorph snapshot delete <snapshot-id>\n```\n\n### Instances\n\n```bash\n# List all instances\nmorph instance list [--json]\n\n# Start a new instance from snapshot\nmorph instance start <snapshot-id> [--json]\n\n# Stop an instance\nmorph instance stop <instance-id>\n\n# Get instance details\nmorph instance get <instance-id>\n\n# Create snapshot from instance\nmorph instance snapshot <instance-id> [--json]\n\n# Clone an instance\nmorph instance branch <instance-id> [--count <n>]\n```\n\n### Instance Management\n\n```bash\n# Execute command on instance\nmorph instance exec <instance-id> <command>\n\n# SSH into instance\nmorph instance ssh <instance-id> [command]\n\n# Direct SSH access (alternative method)\n# You can also SSH directly into a MorphVM instance using:\nssh <instance-id>@ssh.cloud.morph.so\n\n# Port forwarding\nmorph instance port-forward <instance-id> <remote-port> [local-port]\n\n# Expose HTTP service\nmorph instance expose-http <instance-id> <name> <port>\n\n# Hide HTTP service\nmorph instance hide-http <instance-id> <name>\n```\n\n### Interactive Chat\n\nStart an interactive chat session with an instance:\n\n**Note:** You'll need to set `ANTHROPIC_API_KEY` environment variable to use this command.\n\n```bash\nmorph instance chat <instance-id> [instructions]\n```\n\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "A Python SDK and CLI tool for creating, managing, and interacting with Morph Cloud VMs.",
"version": "0.1.23",
"project_urls": null,
"split_keywords": [
"cli",
" cloud",
" morph",
" runtimes"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "f3786ad709bdfd24008b59d5419abe8721cd8760ed47c8dc6ca0aed14594f3c4",
"md5": "5acd583c80f378262f9b511b661d5fcf",
"sha256": "390c32edebeb206ff9c3b6c1c43668f31ddbc83900116e59c7d1ddea7117413b"
},
"downloads": -1,
"filename": "morphcloud-0.1.23-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5acd583c80f378262f9b511b661d5fcf",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 44268,
"upload_time": "2025-01-28T22:41:32",
"upload_time_iso_8601": "2025-01-28T22:41:32.830619Z",
"url": "https://files.pythonhosted.org/packages/f3/78/6ad709bdfd24008b59d5419abe8721cd8760ed47c8dc6ca0aed14594f3c4/morphcloud-0.1.23-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cfc64e016f5609b7bf26c6321b537fa3241ad8c4934588d9c5182bd7523881cd",
"md5": "247afd37aaebfe6e631a5e913e09146e",
"sha256": "2ae3dd3853ae0563ce8eb1368688c6014847d587f5aa4ab51db138cb9a75e6cd"
},
"downloads": -1,
"filename": "morphcloud-0.1.23.tar.gz",
"has_sig": false,
"md5_digest": "247afd37aaebfe6e631a5e913e09146e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 69048,
"upload_time": "2025-01-28T22:41:34",
"upload_time_iso_8601": "2025-01-28T22:41:34.863103Z",
"url": "https://files.pythonhosted.org/packages/cf/c6/4e016f5609b7bf26c6321b537fa3241ad8c4934588d9c5182bd7523881cd/morphcloud-0.1.23.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-28 22:41:34",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "morphcloud"
}