Skip to main content
Glama
MaykeSN

Mochi MCP Server

by MaykeSN
README.md
<div align="center">

<img src="https://raw.githubusercontent.com/MaykeSN/Mochi/main/mochi-logo.png" width="160" alt="mochi" />

# 🍡 mochi

**Rode SQL nos seus bancos MySQL/MariaDB por apelido — do terminal e pelo Claude.**

[![npm](https://img.shields.io/npm/v/@maykesn/mochi?color=cb3837&logo=npm)](https://www.npmjs.com/package/@maykesn/mochi)
[![CI](https://github.com/MaykeSN/Mochi/actions/workflows/ci.yml/badge.svg)](https://github.com/MaykeSN/Mochi/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
![Platform](https://img.shields.io/badge/plataforma-Windows-0078D6?logo=windows)

```console
$ mochi vendas "select * from pedidos limit 5"
┌─────────┬──────────┬───────────┐
│ id      │ cliente  │ status    │
├─────────┼──────────┼───────────┤
│ 1050889 │ ACME LTDA│ CONSUMIDO │
│ 1050890 │ FOO S.A. │ LIVRE     │
└─────────┴──────────┴───────────┘
(2 linhas)
```

</div>

---

**mochi** é uma CLI (e servidor MCP) pra consultar bancos **MySQL/MariaDB** usando apelidos. Você cadastra suas conexões uma vez e depois é só `mochi <apelido> "<query>"`. Resolve a conexão por **apelido, nome do banco ou tag** (com desambiguação por host), tem **trava de comandos destrutivos**, **LIMIT automático**, **export** pra CSV/JSON/Excel, **histórico**, **queries salvas** e senhas **cifradas com DPAPI**. Via **MCP**, o Claude consulta seus bancos direto — sempre pedindo confirmação antes de qualquer alteração.

> ⚠️ **Windows-only.** As senhas são protegidas pela DPAPI do Windows.

## 📦 Instalação

```bash
npm install -g @maykesn/mochi
```

Ou baixe o **`mochi.exe`** na [página de Releases](https://github.com/MaykeSN/Mochi/releases) (não precisa de Node instalado).

## 🚀 Começando

```bash
mochi add                 # assistente: host, porta, usuário, senha, apelido, tags
mochi list                # vê suas conexões
mochi vendas "select * from pedidos limit 10"
```

### Como o mochi escolhe a conexão
- Se a linha **começa com SQL** (`select`, `show`…) → usa a **última** conexão usada.
- Senão, o **primeiro token** é o seletor — casa por **apelido**, **nome do banco** ou **tag**.
- `seletor@host` desambigua quando o mesmo nome existe em vários hosts (ex: `sync@70`).

```bash
mochi select * from clientes        # última conexão
mochi sync select * from pedidos    # conexão "sync"
mochi sync@70 show tables           # "sync" no host que termina em .70
```

## ✨ Recursos

| | |
|---|---|
| 🏷️ **Apelidos & tags** | conecte por apelido, banco ou tag, com `@host` pra desambiguar |
| 🛡️ **Trava de destrutivo** | `DELETE/UPDATE/DROP/…` exigem `-y`; `--dry-run` mostra quantas linhas afetaria |
| ✂️ **LIMIT automático** | `SELECT` sem `LIMIT` ganha `LIMIT 1000` (ajuste com `--limit`/`--all`) |
| 📤 **Export** | `--csv`, `--out arquivo.csv/.json/.xlsx` |
| 🔎 **Schema** | `mochi tables`, `mochi describe <tabela>` |
| 💾 **Salvas & histórico** | `mochi save`, `mochi q`, `mochi history` |
| 🔐 **Senhas cifradas** | DPAPI do Windows (atreladas à sua conta) |
| 🤖 **MCP** | o Claude consulta seus bancos com confirmação pra alterações |

## 🧭 Comandos

```text
mochi add                          cadastra uma conexão (assistente)
mochi list                         lista as conexões
mochi use / rename / edit / remove gerencia conexões
mochi test [apelido]               testa a conexão
mochi tables [apelido] [filtro]    lista tabelas
mochi describe [apelido] <tabela>  colunas da tabela
mochi which [apelido]              mostra qual conexão seria usada
mochi save / q / saved / unsave    queries salvas
mochi history [n]                  últimas queries rodadas
mochi version
```

### Flags

```text
-y, --force      confirma comandos destrutivos
--dry-run        simula (conta linhas) sem executar
--limit <n>      LIMIT automático (padrão 1000) · --all desliga
--page <n> --page-size <n>    paginação
-f, --file <a>   roda a query de um arquivo .sql
--json | --csv   formato de saída
--out <arquivo>  salva em .csv / .json / .xlsx
--wide           não trunca colunas largas
```

## 🔐 Segurança

- Comandos **destrutivos** são recusados sem `-y`. No terminal, antes de confirmar um `UPDATE/DELETE` o mochi mostra **quantas linhas seriam afetadas** (via transação + rollback).
- **LIMIT automático** evita puxar milhões de linhas sem querer.
- Senhas ficam cifradas com **DPAPI** em `%USERPROFILE%\.mochi\secrets.json` — atreladas à sua conta do Windows (não abrem em outra máquina/usuário).

## 🤖 Usar com o Claude (MCP)

Registre o servidor MCP (uma vez):

```bash
claude mcp add --scope user mochi -- mochi-mcp
```

Reinicie o Claude Code e pronto — ferramentas expostas: `listar_conexoes`, `executar_query`, `testar_conexao`, `listar_tabelas`, `descrever_tabela`. Comandos destrutivos exigem `force=true` (o Claude confirma com você antes).

## 🛠️ Desenvolvimento

```bash
git clone https://github.com/MaykeSN/Mochi.git
cd Mochi
npm install
npm test               # roda a suíte (node --test)
npm run build:exe      # gera dist/mochi.exe
```

Os dados (conexões, senhas, estado, histórico, salvas) ficam em `%USERPROFILE%\.mochi\` — **fora** do repositório.

## 📄 Licença

[MIT](LICENSE) © Mayke Nogueira