Skip to main content
Glama

Modal MCP Server

An MCP server implementation for interacting with Modal volumes and deploying Modal applications from within Cursor.

Installation

  1. Clone this repository:

git clone https://github.com/smehmood/modal-mcp-server.git
cd modal-mcp-server
  1. Install dependencies using uv:

uv sync

Related MCP server: MCP Shell Server

Configuration

To use this MCP server in Cursor, add the following configuration to your ~/.cursor/mcp.json:

{
  "mcpServers": {
    "modal-mcp-server": {
      "command": "uv",
      "args": [
        "--project", "/path/to/modal-mcp-server",
        "run", "/path/to/modal-mcp-server/src/modal_mcp/server.py"
      ]
    }
  }
}

Replace /path/to/modal-mcp-server with the absolute path to your cloned repository.

Requirements

  • Python 3.11 or higher

  • uv package manager

  • Modal CLI configured with valid credentials

  • For Modal deploy support:

    • Project being deployed must use uv for dependency management

    • Modal must be installed in the project's virtual environment

Supported Tools

Modal Volume Operations

  1. List Modal Volumes (list_modal_volumes)

    • Lists all Modal volumes in your environment

    • Returns JSON-formatted volume information

    • Parameters: None

  2. List Volume Contents (list_modal_volume_contents)

    • Lists files and directories in a Modal volume

    • Parameters:

      • volume_name: Name of the Modal volume

      • path: Path within volume (default: "/")

  3. Copy Files (copy_modal_volume_files)

    • Copies files within a Modal volume

    • Parameters:

      • volume_name: Name of the Modal volume

      • paths: List of paths where last path is destination

    • Example: ["source.txt", "dest.txt"] or ["file1.txt", "file2.txt", "dest_dir/"]

  4. Remove Files (remove_modal_volume_file)

    • Deletes a file or directory from a Modal volume

    • Parameters:

      • volume_name: Name of the Modal volume

      • remote_path: Path to file/directory to delete

      • recursive: Boolean flag for recursive deletion (default: false)

  5. Upload Files (put_modal_volume_file)

    • Uploads a file or directory to a Modal volume

    • Parameters:

      • volume_name: Name of the Modal volume

      • local_path: Path to local file/directory to upload

      • remote_path: Path in volume to upload to (default: "/")

      • force: Boolean flag to overwrite existing files (default: false)

  6. Download Files (get_modal_volume_file)

    • Downloads files from a Modal volume

    • Parameters:

      • volume_name: Name of the Modal volume

      • remote_path: Path to file/directory in volume to download

      • local_destination: Local path to save downloaded files (default: current directory)

      • force: Boolean flag to overwrite existing files (default: false)

    • Note: Use "-" as local_destination to write file contents to stdout

Modal Deployment

  1. Deploy Modal App (deploy_modal_app)

    • Deploys a Modal application

    • Parameters:

      • absolute_path_to_app: Absolute path to the Modal application file

    • Note: The project containing the Modal app must:

      • Use uv for dependency management

      • Have the modal CLI installed in its virtual environment

Response Format

All tools return responses in a standardized format, with slight variations depending on the operation type:

# JSON operations (list volumes, list contents):
{
    "success": True,
    "data": {...}  # JSON data from Modal CLI
}

# File operations (put, get, copy, remove):
{
    "success": True,
    "message": "Operation successful message",
    "command": "executed command string",
    "stdout": "command output",  # if any
    "stderr": "error output"     # if any
}

# Error case (all operations):
{
    "success": False,
    "error": "Error message describing what went wrong",
    "command": "executed command string",  # for file operations
    "stdout": "command output",  # if available
    "stderr": "error output"     # if available
}

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/smehmood/modal-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server