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

Servidor MCP (Model Context Protocol) que conecta agentes de IA (como o Google Antigravity) à infraestrutura da [Modal.com](https://modal.com), permitindo gerenciar deployments, apps, containers, volumes, secrets e ambientes via ferramentas MCP.

## Arquitetura

O projeto usa o [SDK oficial do MCP](https://github.com/modelcontextprotocol/typescript-sdk) para expor comandos da CLI `modal` como ferramentas MCP. A comunicação é feita via **stdio** (StdioServerTransport), ideal para integração com agentes que suportam subprocessos MCP.

```
Agente de IA (ex: Antigravity)
        |
    [MCP - stdio]
        |
Modal MCP Server (Node.js)
        |
    [CLI: modal]
        |
    Modal.com API
```

## Estrutura do Projeto

```
modal-mcp/
├── build/                      # Código compilado (TypeScript → JavaScript)
│   ├── index.js
│   ├── tools/
│   │   ├── deploy.js
│   │   ├── container.js
│   │   ├── volume.js
│   │   ├── secret.js
│   │   ├── app.js
│   │   └── environment.js
│   └── utils/
│       └── exec.js
├── src/                        # Código-fonte TypeScript
│   ├── index.ts                # Entry point do servidor MCP
│   ├── tools/                  # Módulos de ferramentas MCP
│   │   ├── deploy.ts           # Deploy e execução de apps
│   │   ├── container.ts        # Gerenciamento de containers
│   │   ├── volume.ts           # Gerenciamento de volumes persistentes
│   │   ├── secret.ts           # Gerenciamento de secrets
│   │   ├── app.ts              # Gerenciamento de apps
│   │   └── environment.ts      # Gerenciamento de ambientes
│   └── utils/
│       └── exec.ts             # Utilitário de execução da CLI modal
├── package.json
├── tsconfig.json
└── README.md
```

## Pré-requisitos

- **Node.js** 18+
- **Conta no Modal.com** e **token de autenticação** configurado (`modal token set`)
- **CLI do Modal** instalada (`pip install modal` ou `modal` disponível no PATH)

## Instalação

```bash
npm install
npm run build
```

## Uso

### Iniciar o servidor

```bash
npm start
# ou diretamente:
node build/index.js
```

O servidor escuta comandos MCP via **stdin/stdout** e se comunica com seu agente de IA.

### Integração com Antigravity (opencode.json)

Exemplo de configuração no seu `opencode.json` para conectar o agente do Google Antigravity ao Modal MCP Server:

```json
{
  "antigravityAgents": {
    "meu-agente": {
      "mcpServers": {
        "modal": {
          "command": "node",
          "args": ["caminho/para/modal-mcp/build/index.js"]
        }
      }
    }
  }
}
```

## Ferramentas MCP Disponíveis

### Deploy & Run

| Ferramenta | Descrição |
|---|---|
| `modal_deploy` | Deploy de uma aplicação Modal a partir de um script Python |
| `modal_run` | Execução de função ou entrypoint local no Modal |

### App Management

| Ferramenta | Descrição |
|---|---|
| `modal_app_list` | Lista apps em execução, deployed ou parados |
| `modal_app_history` | Histórico de deploys de um app |
| `modal_app_logs` | Logs de um app |
| `modal_app_stop` | Para permanentemente um app |
| `modal_app_rollback` | Redeploy de versão anterior |
| `modal_app_rollover` | Redeploy sem mudanças de código (novos containers) |

### Container Management

| Ferramenta | Descrição |
|---|---|
| `modal_container_list` | Lista containers em execução |
| `modal_container_exec` | Executa comando dentro de um container |
| `modal_container_logs` | Logs de um container específico |
| `modal_container_stop` | Termina um container |

### Volume Management

| Ferramenta | Descrição |
|---|---|
| `modal_volume_list` | Lista volumes |
| `modal_volume_create` | Cria um volume persistente |
| `modal_volume_delete` | Deleta um volume |
| `modal_volume_ls` | Lista arquivos/diretórios dentro de um volume |
| `modal_volume_put` | Upload de arquivo/diretório para um volume |
| `modal_volume_get` | Download de arquivos de um volume |
| `modal_volume_rm` | Remove arquivo/diretório de um volume |
| `modal_volume_rename` | Renomeia um volume |

### Secret Management

| Ferramenta | Descrição |
|---|---|
| `modal_secret_list` | Lista secrets publicados |
| `modal_secret_create` | Cria um novo secret |
| `modal_secret_delete` | Deleta um secret |

### Environment Management

| Ferramenta | Descrição |
|---|---|
| `modal_env_list` | Lista ambientes do workspace |
| `modal_env_create` | Cria um novo ambiente |
| `modal_env_delete` | Deleta um ambiente |
| `modal_env_update` | Atualiza configurações de ambiente |
| `modal_env_members_list` | Lista membros de ambiente restrito |
| `modal_env_members_update` | Adiciona/atualiza papel de membro |
| `modal_env_members_remove` | Remove membro de ambiente restrito |

## Fluxo de Funcionamento

1. O agente de IA (ex: Google Antigravity) envia requisições MCP via stdio
2. O servidor MCP recebe a requisição e identifica qual ferramenta foi chamada
3. A ferramenta monta o comando `modal <subcomando>` apropriado
4. O comando é executado via `child_process.exec`
5. O stdout do comando é retornado como resposta MCP

## Scripts

| Comando | Descrição |
|---|---|
| `npm run build` | Compila TypeScript para JavaScript (`tsc`) |
| `npm run dev` | Compila em modo watch (`tsc -w`) |
| `npm start` | Inicia o servidor MCP |

TDQS

B3.2/5.0

Scored across 30 tools

Disambiguation5/5

Each tool targets a distinct resource and action, with no overlapping purposes. The few similar operations (e.g., app_stop vs. container_stop) are clearly differentiated by resource scope and descriptions.

Naming Consistency4/5

The predominant pattern modal_<resource>_<action> is consistent across most tools. Two tools (modal_deploy, modal_run) omit the resource prefix, causing minor deviation, but the overall scheme remains predictable and readable.

Tool Count3/5

With 30 tools, the set is above the ideal 3-15 range and falls into the heavy category. However, the broad scope of Modal (environments, apps, secrets, volumes, containers, deployments) justifies the number, even though it feels dense.

Completeness4/5

The tool surface covers most lifecycle operations for each resource: environments have full CRUD, apps have management and deployment actions, volumes include file operations, and containers have exec/logs/stop. A notable gap is the lack of a secret update operation, but agents can work around by deleting and recreating.

Maintenance

ActivityInactive
ResponsivenessNo issues