morphcloud


Namemorphcloud JSON
Version 0.1.23 PyPI version JSON
download
home_pageNone
SummaryA Python SDK and CLI tool for creating, managing, and interacting with Morph Cloud VMs.
upload_time2025-01-28 22:41:34
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseApache-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"
}
        
Elapsed time: 0.71849s