{"_id":"@ariansyah_akbar_pinisidev/mcp-bridge","name":"@ariansyah_akbar_pinisidev/mcp-bridge","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@ariansyah_akbar_pinisidev/mcp-bridge","version":"1.0.0","description":"Universal MCP bridge — SSH, DB, Docker, K8s ops for LLM clients","type":"module","main":"dist/index.js","bin":{"mcp-bridge":"dist/cli/index.js"},"scripts":{"build":"tsc","dev":"tsx src/index.ts","start":"node dist/index.js","lint":"eslint src --ext .ts","format":"prettier --write src","test":"node --experimental-vm-modules node_modules/.bin/jest","test:watch":"jest --watch"},"keywords":["mcp","ssh","devops","database","claude","llm"],"author":{"name":"Ariansyah Akbar"},"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.10.2","commander":"^12.1.0","fastify":"^5.2.1","ioredis":"^5.4.2","keytar":"^7.9.0","mongodb":"^6.12.0","mysql2":"^3.11.5","pg":"^8.13.1","prompts":"^2.4.2","ssh2":"^1.16.0","yaml":"^2.7.0","zod":"^3.24.1","@qdrant/js-client-rest":"^1.13.0","dockerode":"^4.0.2","@kubernetes/client-node":"^0.22.3"},"devDependencies":{"@types/dockerode":"^3.3.32","@types/jest":"^29.5.14","@types/node":"^22.10.7","@types/pg":"^8.11.10","@types/prompts":"^2.4.9","@types/ssh2":"^1.15.1","@typescript-eslint/eslint-plugin":"^8.20.0","@typescript-eslint/parser":"^8.20.0","eslint":"^9.18.0","jest":"^29.7.0","prettier":"^3.4.2","ts-jest":"^29.2.5","tsx":"^4.19.2","typescript":"^5.7.3"},"engines":{"node":">=20.0.0"},"_id":"@ariansyah_akbar_pinisidev/mcp-bridge@1.0.0","gitHead":"67c655578e58a5f344b8eacb85c1a94a4a4d4cc0","types":"./dist/index.d.ts","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-rVcXE9rOAaWF9azIVvrAK6sC5aFzz4GLoNAjxPyta5xO6lJKkqsFkUqC1qi0E/n6xh4xlhv9TzSSzKSV/AWCMQ==","shasum":"206917b496627e55208d081507edd5f883033778","tarball":"https://registry.npmjs.org/@ariansyah_akbar_pinisidev/mcp-bridge/-/mcp-bridge-1.0.0.tgz","fileCount":203,"unpackedSize":368246,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIF+H8rRC2OsVe5y600VdOoXKjnrqOw2KgHZfJnehidOKAiEA1Vw+rcvIozjNuf8NKjkv0Wl17YcS70/q5i4v86EVCZc="}]},"_npmUser":{"name":"ariansyah_akbar_pinisidev","email":"sevendifferenthero@gmail.com"},"directories":{},"maintainers":[{"name":"ariansyah_akbar_pinisidev","email":"sevendifferenthero@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-bridge_1.0.0_1777212756690_0.5972648747271538"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-26T14:12:36.601Z","1.0.0":"2026-04-26T14:12:36.842Z","modified":"2026-04-26T14:12:37.042Z"},"maintainers":[{"name":"ariansyah_akbar_pinisidev","email":"sevendifferenthero@gmail.com"}],"description":"Universal MCP bridge — SSH, DB, Docker, K8s ops for LLM clients","keywords":["mcp","ssh","devops","database","claude","llm"],"author":{"name":"Ariansyah Akbar"},"license":"MIT","readme":"# MCP Bridge\n\n> Satu tool kecil di laptopmu yang bikin Claude (atau AI lain) bisa **lihat server**, **baca database**, dan **bantu migrasi data** — tanpa kamu copy-paste log lagi.\n\n**Cocok buat siapa?** Developer, DevOps, atau siapa saja yang sering kerja dengan server jarak jauh dan capek bolak-balik terminal ↔ chat AI.\n\n**Butuh apa di laptop?**\n- Node.js versi 20 atau lebih baru ([download di sini](https://nodejs.org))\n- Akses ke server (lewat SSH) atau database yang mau dicolok\n\nItu saja. Tidak perlu Docker, tidak perlu daftar akun, tidak perlu kartu kredit.\n\n---\n\n## 🚀 5 Menit Pertama (Quick Start)\n\n### Langkah 1 — Install\n\nBuka terminal (di Mac: cari \"Terminal\", di Windows: \"PowerShell\", di Linux: kamu pasti tahu), lalu ketik:\n\n```bash\nnpx @ariansyah_akbar_pinisidev/mcp-bridge init\n```\n\n**Apa yang terjadi?** Tool ini akan tanya 3-4 hal pakai bahasa manusia (nama project, di mana mau simpan config, password untuk amankan kredensialmu). Jawab saja apa adanya. Selesai dalam 1 menit.\n\n### Langkah 2 — Tambah server pertamamu\n\n```bash\nnpx @ariansyah_akbar_pinisidev/mcp-bridge add-host\n```\n\nTool akan tanya:\n\n| Pertanyaan | Contoh jawaban |\n|---|---|\n| Nama server (bebas, asal kamu inget) | `vps-toko-online` |\n| Alamat IP atau hostname | `192.168.1.100` atau `myserver.com` |\n| Username SSH | `root` atau `ubuntu` |\n| Pakai password atau SSH key? | Pilih yang kamu punya |\n| Level akses server ini | Pilih `readonly` kalau ragu |\n\n**Tips:** Mulai dengan `readonly` dulu untuk server production. Naikkan ke `safe-write` kalau sudah yakin. Jangan langsung `full-sudo` di server live.\n\nUlangi langkah ini untuk setiap server yang mau didaftarkan. Bisa 1, 5, atau 50 server.\n\n### Langkah 3 — Sambungkan ke Claude Code (atau IDE lain)\n\nBuka file config Claude Code-mu. Lokasinya:\n\n- **Mac:** `~/.config/claude-code/mcp.json`\n- **Windows:** `%APPDATA%\\claude-code\\mcp.json`\n- **Linux:** `~/.config/claude-code/mcp.json`\n\nTambahkan ini di dalamnya:\n\n```json\n{\n  \"mcpServers\": {\n    \"bridge\": {\n      \"command\": \"npx\",\n      \"args\": [\"@ariansyah_akbar_pinisidev/mcp-bridge\", \"start\"]\n    }\n  }\n}\n```\n\nRestart Claude Code. **Selesai.** Sekarang tinggal ngobrol biasa:\n\n> *\"Coba lihat status server vps-toko-online, ada error di log nginx ga?\"*\n\nClaude akan otomatis pakai MCP Bridge untuk SSH ke server itu, baca lognya, lalu jawab ke kamu.\n\n---\n\n## 🧰 Menjalankan Secara Lokal (Clone & Develop)\n\nCatatan singkat untuk developer:\n\nKarena paket ini akan dipublish ke npm, pengguna biasa cukup menjalankan:\n\n```bash\nnpx @ariansyah_akbar_pinisidev/mcp-bridge init\n```\n\nJika kamu clone repo ini untuk pengembangan lokal, cukup `npm install`, `npm run build`, lalu gunakan `npm link` atau `npm run start` sesuai kebutuhan.\n\nError seperti `mcp-bridge: command not found` hanya relevan bagi yang menjalankan dari source (clone); setelah paket dipublish ke npm, `npx @ariansyah_akbar_pinisidev/mcp-bridge init` akan bekerja untuk semua pengguna.\n\n\n---\n\n## 📚 Yang Bisa Dilakukan MCP Bridge\n\nAku jelaskan dengan **contoh kalimat** yang bisa kamu ketik ke Claude. Tidak perlu hafal nama tool — Claude yang pilih.\n\n### 🖥️ Urusan Server (SSH)\n\n| Kamu bilang... | MCP Bridge melakukan... |\n|---|---|\n| *\"Cek disk space di server prod-api\"* | SSH ke server, jalankan `df -h`, ringkas hasilnya |\n| *\"Tail log nginx 100 baris terakhir di vps-toko\"* | Baca log, filter ERROR/WARN, kirim ringkasannya |\n| *\"Restart service nginx di staging\"* | (Kalau policy izinkan) jalankan `sudo systemctl restart nginx` |\n| *\"Upload file ini ke /etc/nginx/conf.d/ di server X\"* | Pakai SFTP, tanya konfirmasi sebelum overwrite |\n| *\"Server prod kenapa lambat?\"* | Cek CPU, RAM, disk I/O, top processes, kasih analisa |\n\n### 🗄️ Urusan Database\n\n| Kamu bilang... | MCP Bridge melakukan... |\n|---|---|\n| *\"Lihat tabel apa saja di DB lama\"* | Introspect schema, list tables + jumlah row |\n| *\"Berapa user terdaftar bulan ini?\"* | Jalankan SELECT yang aman (read-only) |\n| *\"Cari di Mongo, dokumen yang punya field 'archived'\"* | Query MongoDB |\n| *\"Ada apa di koleksi vector Qdrant?\"* | List collections, dimensi vector, jumlah point |\n\n### 🔄 Migrasi Database (Fitur Andalan)\n\nIni bukan migrasi sembarangan. **Sistem akan stop dan tanya kamu** kalau ada keanehan. Tidak ada \"auto-magic\" yang bisa bikin data corrupt.\n\n**Cara pakai:** Cukup bilang ke Claude:\n\n> *\"Migrasiin data dari MySQL lama ke PostgreSQL baru. Server lama: db-old, server baru: db-new.\"*\n\nClaude (lewat MCP Bridge) akan jalanin **5 fase wajib**:\n\n```\nFase 1: Baca & analisa DB lama        → kamu approve ✅\nFase 2: Baca & analisa DB baru        → kamu approve ✅\nFase 3: Bikin rencana migrasi\n         + tanya kamu kalau ada       → kamu jawab pertanyaannya ✅\n           hal yang membingungkan\nFase 4: Coba migrasi 1000 row sample\n         (TIDAK nulis ke DB baru)     → kamu approve hasilnya ✅\nFase 5: Migrasi beneran + verify      → selesai ✅\n```\n\n**Contoh pertanyaan yang akan ditanya di Fase 3:**\n\n> *\"Field `address` di MongoDB lama itu objek bersarang (embedded). Mau aku flatten jadi 3 kolom (`address_street`, `address_city`, `address_zip`) atau bikin tabel `addresses` terpisah? Saran saya: kalau alamat user cuma 1 dan tidak pernah berubah-ubah → flatten lebih simpel. Kalau bisa multiple alamat atau riwayatnya penting → tabel terpisah lebih bener.\"*\n\nKamu jawab → migrasi lanjut. **Tidak akan pernah ada keputusan diam-diam soal data kamu.**\n\n### 🐳 Urusan Docker\n\n| Kamu bilang... | MCP Bridge melakukan... |\n|---|---|\n| *\"Container apa saja yang jalan di server prod?\"* | List containers + status |\n| *\"Tampilin log container nginx 50 baris terakhir\"* | `docker logs --tail 50` lalu ringkas |\n| *\"Deploy ulang docker-compose di folder /apps/api\"* | `compose down` lalu `compose up -d` (kalau policy izinkan) |\n| *\"Container database kenapa restart terus?\"* | Cek logs + inspect, kasih analisa |\n\n### ☸️ Urusan Kubernetes\n\n| Kamu bilang... | MCP Bridge melakukan... |\n|---|---|\n| *\"Pod apa saja yang lagi crash?\"* | List pods status `CrashLoopBackOff` |\n| *\"Logs pod api-server-xxx\"* | Stream logs ringkasan |\n| *\"Apply file deployment ini\"* | (Policy ketat) konfirmasi dulu, baru apply |\n\n---\n\n## 🧠 Senior Brain Mode — Bikin Model Murah Jago\n\n**TL;DR:** Pakai model AI gratisan/termurah (Haiku, GPT-4o-mini, Llama lokal) tapi hasil analisanya kayak senior engineer 15 tahun. Token hemat 80-95%.\n\n**Kenapa bisa?** Karena MCP Bridge **mengerjakan analisanya sendiri di laptopmu** — AI cuma bertugas terjemahin hasilnya jadi kalimat enak dibaca.\n\n### Contoh konkret\n\n**Kamu bilang:** *\"Server vps-toko lambat banget, kenapa ya?\"*\n\n**Tanpa Senior Brain Mode (model murah):**\n- AI SSH, jalanin `top`, baca outputnya, narasi panjang yang dangkal\n- Token boros, jawaban kayak: *\"CPU lagi tinggi, sepertinya ada proses yang berat\"*\n- Tidak ada solusi konkret\n\n**Dengan Senior Brain Mode:**\n1. MCP Bridge jalanin **playbook `diagnose_slow_server`** → 8 command paralel (uptime, free, df, iostat, ps, ss, dmesg)\n2. Output mentah di-parse di laptopmu, di-rank, dideteksi pattern-nya\n3. Kirim ke AI cuma JSON terstruktur ~500 token (bukan 10.000 token raw)\n4. AI cuma terjemahin, jawabannya jadi:\n\n> *\"Server lambat karena pg_dump (PID 4521) ngehog disk I/O — wait time 78%. Sudah berjalan 47 menit. Saran:*\n> *1. Pause sekarang: `kill -STOP 4521` (aman, bisa di-resume)*\n> *2. Restart dengan ionice: `ionice -c3 pg_dump ...`*\n> *3. Schedule backup di jam sepi*\n> *Jangan kill -9 sebelum cek apakah backup ini penting.\"*\n\n### 3 Mode pilihan\n\n```yaml\n# Set di config kamu, atau pakai flag --mode\nmode: economy    # Default. Ringkas total. Cocok model murah.\nmode: balanced   # Lebih detail. Cocok model menengah.\nmode: verbose    # Output lengkap + raw. Cocok debug mendalam.\n```\n\n### Yang bikin Senior Brain Mode jago\n\n| Pilar | Apa fungsinya |\n|---|---|\n| **Playbook** | ~15 resep diagnostic siap pakai (slow server, OOM, slow query, pod crashloop, dll) |\n| **Pattern Library** | 50+ pola error otomatis dikenali (deadlock, OOM kill, upstream timeout, dll) |\n| **Smart Compression** | Log 5000 baris → 50 cluster + 8 pattern terdeteksi (~98% reduction) |\n| **Diagnosis Format** | Output ke AI selalu terstruktur: TLDR + evidence + actions + warnings |\n| **Knowledge Base** | ~30 file markdown senior tips di-inject otomatis sesuai context |\n\n**KISS:** Semua itu cuma kode TypeScript biasa + regex + markdown. Mentee bisa nambah playbook/pattern baru dengan PR 1 file.\n\n### Mau tambah playbook sendiri?\n\nBikin file di `~/.mcp-bridge/playbooks/my-playbook.ts`:\n\n```typescript\nexport default {\n  name: 'check_redis_health',\n  steps: [\n    { cmd: 'redis-cli INFO memory',  weight: 'memory' },\n    { cmd: 'redis-cli INFO clients', weight: 'connections' },\n    { cmd: 'redis-cli SLOWLOG GET 10', weight: 'slow_ops' },\n  ],\n};\n```\n\nRestart MCP Bridge → playbookmu otomatis terdaftar. **Selesai.**\n\n---\n\n## 🔐 Soal Keamanan (Tenang, Aman)\n\n**Apakah kredensial server saya aman?**\n\nYa. Disimpan terenkripsi (AES-256-GCM) di laptop kamu sendiri. **Tidak ada server kami** — tidak ada cloud, tidak ada upload, tidak ada langganan. Kalau kamu hapus folder config, semua data hilang dari muka bumi.\n\n**Apakah Claude bisa \"lari\" jalanin perintah berbahaya?**\n\nTidak. Setiap server punya **policy level**:\n\n| Level | Yang dibolehkan | Yang dilarang |\n|---|---|---|\n| `readonly` | Baca log, query DB (SELECT), list container | TIDAK BISA tulis apapun |\n| `safe-write` | Restart service, deploy compose | `rm -rf`, `DROP DATABASE`, `TRUNCATE` di-block |\n| `full-sudo` | Apa saja | (kamu yang tanggung jawab) |\n\nPlus, command bahaya seperti `rm -rf /`, `DROP DATABASE`, `TRUNCATE`, `kubectl delete` **selalu butuh konfirmasi eksplisit** dari kamu — kecuali server tersebut `dev-local`.\n\n**Bisa lihat apa saja yang sudah dijalankan?**\n\nBisa. Semua tercatat di `~/.mcp-bridge/audit.log`. Setiap tool call, kapan, server mana, hasilnya apa.\n\n---\n\n## 🛠️ Kalau Ada Masalah\n\n### \"Claude bilang tool tidak ditemukan\"\n\nRestart Claude Code. Kalau masih tidak muncul, cek file config-nya sudah benar dengan jalankan:\n\n```bash\nnpx @ariansyah_akbar_pinisidev/mcp-bridge doctor\n```\n\nTool ini akan cek satu per satu: Node version, config file, kredensial, koneksi ke setiap server. Kasih tahu di mana yang error.\n\n### \"Connection timeout ke server\"\n\nCoba SSH manual dulu dari terminal:\n```bash\nssh username@ip-server\n```\nKalau manual aja gagal → masalah di network/firewall, bukan MCP Bridge. Kalau manual sukses tapi MCP Bridge gagal, jalankan `doctor` (lihat di atas).\n\n### \"Lupa password kredensial vault\"\n\nTidak bisa di-recover (itu fitur, bukan bug — namanya enkripsi). Jalankan:\n```bash\nnpx @ariansyah_akbar_pinisidev/mcp-bridge reset\n```\nLalu daftar ulang servermu. Cuma butuh 5 menit kalau punya beberapa server.\n\n### \"Mau hapus satu server dari daftar\"\n\n```bash\nnpx @ariansyah_akbar_pinisidev/mcp-bridge remove-host nama-server\n```\n\n### \"Mau lihat semua server yang sudah didaftar\"\n\n```bash\nnpx @ariansyah_akbar_pinisidev/mcp-bridge list-hosts\n```\n\n---\n\n## 🌐 Pakai di IDE Lain (Bukan Claude Code)\n\n### Codex CLI\n\nEdit `~/.codex/config.toml`:\n```toml\n[mcp_servers.bridge]\ncommand = \"npx\"\nargs = [\"@ariansyah_akbar_pinisidev/mcp-bridge\", \"start\"]\n```\n\n### Antigravity / Cursor / IDE lainnya\n\nCari setting \"MCP Servers\" di IDE-mu, lalu masukkan:\n- **Command:** `npx`\n- **Args:** `@ariansyah_akbar_pinisidev/mcp-bridge start`\n\n### Banyak IDE sekaligus (HTTP mode)\n\nKalau mau satu MCP Bridge dipakai banyak IDE bersamaan:\n\n```bash\nnpx @ariansyah_akbar_pinisidev/mcp-bridge start --http --port 3737\n```\n\nLalu di tiap IDE, arahkan MCP server ke `http://127.0.0.1:3737/mcp`.\n\n⚠️ **Default cuma bisa diakses dari laptop yang sama.** Kalau mau dibuka ke jaringan lain (tidak disarankan), pakai flag `--unsafe-listen-all`.\n\n---\n\n## 📋 Cheat Sheet Perintah CLI\n\n```bash\n# Setup awal (sekali aja)\nnpx @ariansyah_akbar_pinisidev/mcp-bridge init\n\n# Tambah server baru\nnpx @ariansyah_akbar_pinisidev/mcp-bridge add-host\n\n# Lihat daftar server\nnpx @ariansyah_akbar_pinisidev/mcp-bridge list-hosts\n\n# Hapus server\nnpx @ariansyah_akbar_pinisidev/mcp-bridge remove-host nama-server\n\n# Jalankan MCP server (biasanya dipanggil otomatis sama IDE)\nnpx @ariansyah_akbar_pinisidev/mcp-bridge start\n\n# Mode HTTP (banyak IDE sekaligus)\nnpx @ariansyah_akbar_pinisidev/mcp-bridge start --http --port 3737\n\n# Cek kalau ada masalah\nnpx @ariansyah_akbar_pinisidev/mcp-bridge doctor\n\n# Lihat audit log\nnpx @ariansyah_akbar_pinisidev/mcp-bridge logs\n\n# Reset semua (hati-hati, hapus semua kredensial)\nnpx @ariansyah_akbar_pinisidev/mcp-bridge reset\n```\n\n---\n\n## 🤔 FAQ\n\n**Q: Apakah ini gratis?**\nA: Ya, gratis dan open-source. Tidak ada langganan, tidak ada akun.\n\n**Q: Data saya dikirim kemana?**\nA: Tidak kemana-mana. MCP Bridge jalan di laptopmu sendiri. Yang dikirim ke Claude (atau LLM lain) cuma hasil tool yang sudah diringkas.\n\n**Q: Kalau Claude tiba-tiba \"salah ngerti\" dan jalanin perintah berbahaya?**\nA: Tidak bisa. Policy engine + blocked commands akan menolak. Untuk command sensitif, akan minta konfirmasi kamu dulu.\n\n**Q: Saya pemula, tidak tahu apa itu MCP. Apa harus belajar?**\nA: Tidak perlu. Anggap MCP itu \"colokan\" yang bikin AI bisa pakai tool. Selama kamu ikuti 3 langkah Quick Start di atas, sudah jalan.\n\n**Q: Saya punya 50 server. Sanggup?**\nA: Sanggup. Connection pool akan handle. Tapi inventory file-mu akan panjang — pakai `list-hosts` untuk navigasi.\n\n**Q: Bisa pakai SSH agent (ssh-agent) yang sudah jalan?**\nA: Bisa. Saat `add-host`, pilih \"use existing SSH agent\". Tidak perlu masukin password lagi.\n\n**Q: Bisa connect database lewat SSH tunnel?**\nA: Bisa. Saat `add-host` untuk database, ada opsi \"connect via SSH host\". Pilih nama server SSH yang sudah didaftar, MCP Bridge akan otomatis tunnel.\n\n**Q: Ada batas jumlah migrasi?**\nA: Tidak. Tapi tiap migrasi disimpan checkpoint-nya di `~/.mcp-bridge/migrations/`. Kalau ribuan migrasi, folder bisa besar — bersihkan manual kalau perlu.\n\n**Q: Bisa pakai bahasa Indonesia ke Claude untuk operasinya?**\nA: Bisa banget. MCP Bridge tidak peduli bahasa — yang penting Claude paham maksudmu, dan dia tahu kapan panggil tool.\n\n**Q: Saya pakai model AI murah/gratis (Haiku, GPT-4o-mini, Llama lokal). Kualitasnya jelek?**\nA: Justru ini sweet spot MCP Bridge. **Senior Brain Mode** bikin output sekualitas senior 15 tahun bahkan dengan model termurah, karena analisanya dikerjakan di laptopmu sendiri. AI cuma bertugas nerjemahin hasil. Token hemat 80-95% pula.\n\n**Q: Bisa nambah playbook atau pattern sendiri?**\nA: Bisa. Drop file di `~/.mcp-bridge/playbooks/` atau `~/.mcp-bridge/patterns/`, restart, langsung jalan. Tidak perlu rebuild atau publish.\n\n---\n\n## 📞 Butuh Bantuan?\n\n- Masalah teknis: jalankan `npx @ariansyah_akbar_pinisidev/mcp-bridge doctor` dulu, kebanyakan masalah ketauan dari situ\n- Bug atau request fitur: buka issue di repo GitHub\n- Belajar lebih dalam: ada `docs/` folder dengan penjelasan tiap modul\n\n---\n\n**Filosofi tool ini:** *Sederhana untuk dipakai. Aman secara default. Otaknya di server, bukan di model. Kalau ragu, sistem yang nanya — bukan kamu yang harus tebak.*\n\nSelamat ngoding tanpa copy-paste log lagi 🎉\n","readmeFilename":"README.md","_rev":"1-3334bdc89cb6599edc0738fbdf5e1a0f"}