Skip to main content
Glama
AimanFadillah

mcp-database

README.md
# mcp-database

MCP server **read-only** untuk MySQL / MariaDB. Memungkinkan Claude melakukan
pengecekan data lewat query SQL — tanpa bisa mengubah/menghapus data.

## Tools yang disediakan

| Tool | Fungsi |
|------|--------|
| `list_tables` | Menampilkan daftar semua tabel di database |
| `describe_table` | Menampilkan struktur kolom sebuah tabel |
| `run_query` | Menjalankan SELECT/SHOW/DESCRIBE/EXPLAIN/WITH (read-only) |

## Pengaman (read-only)

- Hanya statement baca yang diterima. `INSERT/UPDATE/DELETE/DROP/ALTER/CREATE/...`
  ditolak otomatis.
- Multi-statement (dipisah `;`) ditolak.
- Komentar SQL (`-- `, `#`, `/* */`) dibersihkan sebelum divalidasi.
- `LIMIT` otomatis ditambahkan (default 1000 baris) bila query tidak punya.
- Query punya timeout (default 15 detik).

> **Sangat disarankan**: tetap pakai user MySQL yang hanya punya hak `SELECT`,
> sebagai lapisan keamanan kedua di sisi database.
>
> ```sql
> CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'password_kuat';
> GRANT SELECT ON nama_database.* TO 'readonly_user'@'%';
> FLUSH PRIVILEGES;
> ```

## Setup

```bash
npm install
cp .env.example .env   # lalu isi kredensial database
npm run build
```

Isi `.env`:

```
DB_HOST=localhost
DB_PORT=3306
DB_USER=readonly_user
DB_PASSWORD=...
DB_NAME=nama_database
MAX_ROWS=1000
QUERY_TIMEOUT_MS=15000
```

## Menghubungkan ke Claude Desktop

Edit file konfigurasi:

- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`

Kredensial cukup ditaruh di file `.env` (server otomatis memuatnya dari folder
proyek). Config-nya jadi sederhana:

```json
{
  "mcpServers": {
    "database": {
      "command": "node",
      "args": ["c:\\project\\mcp-database\\dist\\index.js"]
    }
  }
}
```

> ⚠️ **JANGAN** menambahkan blok `env` dengan nilai placeholder (`localhost`,
> `nama_database`, dst). Nilai di blok `env` akan **menimpa** `.env` Anda dan
> menyebabkan koneksi gagal (`ECONNREFUSED`). Isi `.env` saja.
>
> Restart **total** Claude Desktop (Quit dari tray, lalu buka lagi) setiap kali
> mengubah config atau melakukan rebuild — bukan sekadar tutup window.

## Menghubungkan ke Claude Code (CLI)

```bash
claude mcp add database -- node c:\project\mcp-database\dist\index.js
```

(pastikan `.env` sudah terisi, atau tambahkan `--env DB_HOST=...` dst.)

## Contoh penggunaan di Claude

> "Cek ada berapa pengguna yang statusnya aktif di tabel pengguna"
>
> Claude akan memanggil `list_tables` → `describe_table` → `run_query`
> dengan `SELECT COUNT(*) FROM pengguna WHERE status = 'aktif'`.

## Pengembangan

```bash
npm run dev   # tsc --watch
```

TDQS

A4.3/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: listing tables, describing table schema, and running custom queries. There is no overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (list_tables, describe_table, run_query), making them predictable.

Tool Count4/5

Three tools is minimal but appropriate for a read-only database server, covering the essential operations. Slightly more could be added, but not necessary.

Completeness4/5

The set covers the core read-only operations: enumeration, schema inspection, and arbitrary queries. Minor gaps like listing views or indexes exist, but the surface is sufficient for most exploration tasks.