Lapisan privasi zero-trust untuk Model Context Protocol

Hentikan data sensitif
sebelum sampai ke LLM

Priva-MCP adalah proxy MCP man-in-the-middle yang menyensor PII โ€” CIF, nomor rekening, PAN kartu debit, saldo, email, telepon โ€” di level field, dan memblokir respons apa pun yang membawa rahasia terlarang.

TypeScript ยท strict @modelcontextprotocol/sdk Node 18+ 28 tes lulus Siap ELK / Logstash

Arsitektur

Proxy yang berdiri di tengah

Claude tidak pernah bicara langsung ke internal API Anda. Setiap hasil tool dicegat, disensor, diaudit โ€” dan diblokir bila membawa rahasia keras.

๐Ÿค–

Claude

klien MCP
โ‡„
๐Ÿ›ก๏ธ

Priva-MCP

  • penyensoran dua lapis
  • blokir zero-trust
  • jejak audit
  • insiden SIEM
โ‡„
๐Ÿ—„๏ธ

Internal API

REST / DB

Kenapa Priva-MCP

Dibangun untuk kepatuhan, bukan kenyamanan

๐ŸŽฏ

Penyensoran dua lapis

Lapis 1 menyensor berdasarkan nama key field (presisi); Lapis 2 cadangan regex global untuk teks bebas. NIK 16 digit tak lagi salah dikira kartu kredit.

๐Ÿท๏ธ

Aturan level field

Penanganan kelas satu untuk cifNumber, accountNumber, pan, phoneNumber dan lainnya โ€” case-insensitive, anti-tabrakan.

๐Ÿ”ข

Aman secara numerik

Saldo dan nominal tetap bertipe number JSON agar AI bisa berhitung. Pada mode ketat di-nol-kan, tidak pernah dirusak jadi "X".

๐Ÿšซ

Blokir zero-trust

Bocornya password, pin, cvv atau secret memblokir seluruh respons. Claude dapat error aman; nilai rahasia tak pernah dicatat.

๐Ÿ“œ

Audit + SIEM

Setiap panggilan dicatat ke audit.log (JSON Lines). Pelanggaran berat memunculkan insiden gaya ECS ke stderr untuk diserap ELK / Logstash.

๐Ÿงช

Type-safe & teruji

TypeScript ketat, tanpa any, traversal rekursif atas JSON tak tepercaya, dan 28 unit test lewat runner bawaan node:test.

Penyensoran level field

Mentah masuk โ†’ bersih keluar

Yang dikembalikan internal API vs. yang benar-benar diterima Claude (mode ketat).

Field
Mentah (dari API)
Dikirim ke Claude
cifNumber
CIF-7782001
REDACTED-CIF
accountNumber
0012345678901
XXXXXXXXX8901
pan
4111111111111111
XXXX-XXXX-XXXX-1111
phoneNumber
+6281234567890
+XXXXXXXXXX890
email
andi.wijaya@example.com
a***a@e***.com
balance
15750000
0  (tetap number)
customerName
Andi Wijaya
Andi Wijaya  (bukan PII)

Zero-trust

Saat rahasia keras bocor, tidak ada yang lolos

Jika sumber tak sengaja menyertakan pin, seluruh payload dibuang.

โ†’ stdout (ke Claude)
{
  "content": [{
    "type": "text",
    "text": "Error: respons diblokir oleh
      kebijakan privasi & kepatuhan."
  }],
  "isError": true
}
โ†’ stderr (ke ELK / Logstash)
{
  "@timestamp": "...",
  "log.level": "error",
  "event.action":
    "compliance.critical_violation",
  "event.outcome": "blocked",
  "violations": [
    { "path": "$.pin", "key": "pin" }
  ]
}

Insiden mencatat key, path, dan alasan โ€” bukan nilai rahasianya.

Privasi & data

Apa yang sampai ke Anthropic?

Data mentah tetap di mesinmu. Hanya hasil tersensor yang menyeberang batas ke model.

๐Ÿ–ฅ๏ธ Mesinmu โ€” lokal โ˜๏ธ Anthropic โ€” cloud batas kepercayaan ๐Ÿ—„๏ธ Internal API DB / REST ๐Ÿ›ก๏ธ Priva-MCP sensor + blokir ๐Ÿ’ป Claude Desktop klien MCP ๐Ÿค– Model Claude jalan di Anthropic PII mentah tersensor hanya tersensor audit.log + insiden ELK tetap di mesinmu ๐Ÿ”’
โœ…

Dikirim ke Anthropic

Output tool yang tersensor (mis. REDACTED-CIF, XXXX-โ€ฆ-1111) plus prompt yang kamu ketik โ€” model butuh itu untuk menjawab.

๐Ÿ”’

Tidak pernah dikirim

PII mentah (cuma di RAM lokal), field terlarang yang diblokir, dan log audit / insiden โ€” semua tetap di mesinmu.

โš ๏ธ

Perlu diingat

Masker sebagian (4 digit akhir) tetap keluar, dan teks chat-mu sendiri tidak disensor โ€” hanya output tool.

Implementasi

Jalankan kurang dari satu menit

1 Clone & install

git clone https://github.com/adhidevara/priva-mcp.git
cd priva-mcp
npm install

2 Build & tes

npm run build
npm test    # 28 lulus
npm start   # jalan via stdio

Sambungkan ke Claude Desktop

Tambahkan ini ke claude_desktop_config.json (pakai path absolut ke dist/server.js), lalu restart Claude Desktop.

{
  "mcpServers": {
    "priva-mcp": {
      "command": "node",
      "args": ["/path/absolut/ke/priva-mcp/dist/server.js"],
      "env": {
        "COMPLIANCE_STRICT": "true",
        "AUDIT_LOG_PATH": "/path/absolut/ke/priva-mcp/audit.log"
      }
    }
  }
}

Panggil sebuah tool

Dua tool tersedia langsung. CIF mock: CIF-7782001, CIF-7782002.

// di Claude:
get_customer_profile  { cifNumber: "CIF-7782001" }
get_financial_report  { cifNumber: "CIF-7782001" }
// โ†’ mengembalikan payload yang sudah disensor & diaudit