celular
# 📱 Servidor MCP "celular"
Um servidor [MCP (Model Context Protocol)](https://modelcontextprotocol.io) que dá a um assistente de IA,
como o **Claude Desktop**, ferramentas para:
- ver se há um **celular Android** conectado por USB e abrir um app nele (via `adb`);
- **tocar no VLC** as músicas e vÃdeos de pastas que você escolheu;
- abrir as suas **curtidas do SoundCloud** no navegador;
- apertar as **teclas de mÃdia do Windows** (tocar/pausar, próxima, anterior, volume, mudo).
Na prática, você diz *"abre meu app de estudos no celular e toca a pasta Treino em modo aleatório"* e o
assistente faz.
**Sem dependências:** é um único arquivo em Node.js puro, sem `npm install`.
## Ferramentas expostas
| Ferramenta | O que faz | Altera algo? |
|---|---|---|
| `status` | Diz se há celular conectado e se o app está instalado | Não |
| `abrir_ypt` | Abre o app YPT (cronômetro de estudos) no celular | Só abre o app |
| `midia_status` | Lista as pastas configuradas, com quantas músicas e vÃdeos cada uma tem | Não |
| `tocar_pasta` | Toca uma pasta no VLC, em ordem ou aleatório, em loop | Abre o VLC |
| `abrir_soundcloud` | Abre `soundcloud.com/you/likes` no navegador padrão | Abre o navegador |
| `controle_midia` | Aperta uma tecla de mÃdia do Windows | Controla o player |
Cada ferramenta declara as *annotations* do MCP (`readOnlyHint`, `destructiveHint`…), para o assistente saber
o que é só leitura e o que tem efeito.
## Instalação
**Requisitos:** Windows, [Node.js](https://nodejs.org) 16 ou mais novo,
[adb](https://developer.android.com/tools/releases/platform-tools) no PATH (só para as ferramentas do celular)
e [VLC](https://www.videolan.org/vlc/) (opcional: sem ele, a playlist abre no player padrão).
1. Copie `midia.exemplo.json` para `midia.json` e coloque as suas pastas:
```json
{
"pastas": [
{"nome": "Treino", "caminho": "C:/Users/SEU_USUARIO/Music/Treino"}
]
}
```
2. Registre o servidor no `claude_desktop_config.json` do Claude Desktop:
```json
{
"mcpServers": {
"celular": {
"command": "node",
"args": ["C:/caminho/para/servidor-mcp-celular/celular-mcp.js"]
}
}
}
```
3. Reinicie o Claude Desktop. As ferramentas aparecem com o nome `celular`.
### Variáveis de ambiente (opcionais)
| Variável | Para quê | Padrão |
|---|---|---|
| `ADB_PATH` | Caminho do `adb` | `adb` (do PATH) |
| `VLC_PATH` | Caminho do `vlc.exe` | `C:\Program Files\VideoLAN\VLC\vlc.exe` |
| `MIDIA_CONFIG` | Outro arquivo de pastas | `midia.json` ao lado do script |
## Testar sem o Claude
O protocolo é JSON-RPC, uma mensagem por linha, pela entrada padrão:
```bash
echo {"jsonrpc":"2.0","id":1,"method":"tools/list"} | node celular-mcp.js
```
## 🔒 Segurança
- **Só toca pastas que você listou** em `midia.json`. O assistente não consegue abrir caminhos arbitrários.
- `midia.json` (com os caminhos do seu PC) está no `.gitignore` e não vai para o Git.
- No celular, ele **só abre o app**: não toca na tela, não instala nada, não lê arquivos.
- Tudo roda localmente: nenhuma porta de rede é aberta e nada é enviado para fora.
## Como funciona
- Implementa à mão o mÃnimo do MCP sobre stdio (`initialize`, `ping`, `tools/list`, `tools/call`), sem SDK.
- As teclas de mÃdia usam `keybd_event` da `user32.dll`, chamada via PowerShell.
- A playlist é gerada como `.m3u8` na pasta temporária e aberta no VLC com `--one-instance`.
## Licença
MIT — veja [LICENSE](LICENSE).
TDQS
Scored across 6 tools
The tools mostly target distinct actions: phone status vs. media folder status, opening YPT vs. opening SoundCloud, and starting folder playback vs. sending media keys. The only mild overlap is between tocar_pasta and controle_midia, but their descriptions make the boundary clear enough.
All names are snake_case and in Portuguese, but the set mixes verb-first names (abrir_ypt, tocar_pasta, abrir_soundcloud) with noun-first names (status, midia_status, controle_midia). The convention is readable but not predictable.
Six tools is a well-scoped size for this small personal automation server. Each tool covers a distinct operation without obvious filler.
The surface covers checking the phone, opening YPT, inspecting media folders, playing a folder, opening SoundCloud, and controlling playback. Minor gaps exist, such as no dedicated stop/next/previous or configuration tool, but core workflows are covered.