Skip to main content
Glama
README.md
# Modal MCP Server

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

## Installation

1. Clone this repository:
```bash
git clone https://github.com/smehmood/modal-mcp-server.git
cd modal-mcp-server
```

2. Install dependencies using `uv`:
```bash
uv sync
```

## Configuration

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

```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:

```python
# 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](LICENSE) file for details.

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Every tool has a clearly distinct purpose with no overlap: copy, deploy, get (download), list contents, list volumes, put (upload), and remove (delete) are all unique operations. The descriptions clearly differentiate between volume operations and app deployment, making tool selection straightforward for an agent.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with 'modal' as a prefix (e.g., copy_modal_volume_files, deploy_modal_app, get_modal_volume_file). The naming is uniform throughout, using snake_case and clear action-object pairs, making the set predictable and easy to understand.

Tool Count5/5

With 7 tools, this server is well-scoped for managing Modal volumes and applications. Each tool serves a specific, necessary function (e.g., CRUD operations for volumes, listing, and deployment), and there are no redundant or missing tools for the apparent domain, making the count ideal.

Completeness5/5

The tool surface provides complete coverage for Modal volume management (create via put, read via get and list, update via copy, delete via remove) and app deployment. There are no obvious gaps; agents can perform all core workflows without dead ends, ensuring effective operation within the domain.

Maintenance

ActivityInactive
ResponsivenessNo issues