Modal MCP Server

Interaja com volumes Modal e implante aplicações Modal diretamente do Cursor.

Documentação

Modal MCP Server

Uma implementação de servidor MCP para interagir com volumes Modal e implantar aplicações Modal a partir do Cursor.

Instalação

  1. Clone este repositório:
git clone https://github.com/smehmood/modal-mcp-server.git
cd modal-mcp-server
  1. Instale as dependências usando uv:
uv sync

Configuração

Para usar este servidor MCP no Cursor, adicione a seguinte configuração ao seu ~/.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"
      ]
    }
  }
}

Substitua /path/to/modal-mcp-server pelo caminho absoluto para o seu repositório clonado.

Requisitos

  • Python 3.11 ou superior
  • Gerenciador de pacotes uv
  • CLI Modal configurada com credenciais válidas
  • Para suporte a implantação Modal:
    • O projeto sendo implantado deve usar uv para gerenciamento de dependências
    • O Modal deve estar instalado no ambiente virtual do projeto

Ferramentas Suportadas

Operações de Volume Modal

  1. Listar Volumes Modal (list_modal_volumes)

    • Lista todos os volumes Modal no seu ambiente
    • Retorna informações de volume formatadas em JSON
    • Parâmetros: Nenhum
  2. Listar Conteúdo do Volume (list_modal_volume_contents)

    • Lista arquivos e diretórios em um volume Modal
    • Parâmetros:
      • volume_name: Nome do volume Modal
      • path: Caminho dentro do volume (padrão: "/")
  3. Copiar Arquivos (copy_modal_volume_files)

    • Copia arquivos dentro de um volume Modal
    • Parâmetros:
      • volume_name: Nome do volume Modal
      • paths: Lista de caminhos onde o último caminho é o destino
    • Exemplo: ["source.txt", "dest.txt"] ou ["file1.txt", "file2.txt", "dest_dir/"]
  4. Remover Arquivos (remove_modal_volume_file)

    • Exclui um arquivo ou diretório de um volume Modal
    • Parâmetros:
      • volume_name: Nome do volume Modal
      • remote_path: Caminho para o arquivo/diretório a ser excluído
      • recursive: Flag booleano para exclusão recursiva (padrão: false)
  5. Enviar Arquivos (put_modal_volume_file)

    • Envia um arquivo ou diretório para um volume Modal
    • Parâmetros:
      • volume_name: Nome do volume Modal
      • local_path: Caminho para o arquivo/diretório local a ser enviado
      • remote_path: Caminho no volume para onde enviar (padrão: "/")
      • force: Flag booleano para sobrescrever arquivos existentes (padrão: false)
  6. Baixar Arquivos (get_modal_volume_file)

    • Baixa arquivos de um volume Modal
    • Parâmetros:
      • volume_name: Nome do volume Modal
      • remote_path: Caminho para o arquivo/diretório no volume a ser baixado
      • local_destination: Caminho local para salvar os arquivos baixados (padrão: diretório atual)
      • force: Flag booleano para sobrescrever arquivos existentes (padrão: false)
    • Nota: Use "-" como local_destination para escrever o conteúdo do arquivo na saída padrão

Implantação Modal

  1. Implantar Aplicação Modal (deploy_modal_app)
    • Implanta uma aplicação Modal
    • Parâmetros:
      • absolute_path_to_app: Caminho absoluto para o arquivo da aplicação Modal
    • Nota: O projeto que contém a aplicação Modal deve:
      • Usar uv para gerenciamento de dependências
      • Ter a CLI modal instalada em seu ambiente virtual

Formato de Resposta

Todas as ferramentas retornam respostas em um formato padronizado, com pequenas variações dependendo do tipo de operação:

# 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
}

Contribuindo

Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request.

Licença

Este projeto é licenciado sob a Licença MIT - consulte o arquivo LICENSE para mais detalhes.