Akhir pekan ini saya membuat server MCP untuk dompet Bitcoin: alat yang dapat dipanggil oleh agen AI melalui Model Context Protocol. [Repo](https://github.com/markmhendrickson/mcp-server-bitcoin) memaparkan 93 alat di Lapisan 1 dan Lapisan 2. Satu mnemonik menggerakkan keduanya.

Saya sebelumnya adalah manajer umum [Leather](https://leather.io), dompet kripto yang juga mendukung Bitcoin dan Stacks. Di Leather saya melihat bahwa dompet hak asuh mandiri yang ditujukan untuk manusia sebagian besar menjangkau orang-orang yang bersedia menyerap perhatian dan kompleksitas (misalnya degens dan pengembang). Itu berarti kebersihan utama, kesadaran biaya, alur konfirmasi, dan lainnya. Beban kognitif membuat pasar yang dapat dituju menjadi sempit.

Dompet agen mengubah hal itu. Ketika antarmuka utama adalah agen yang mempertimbangkan dan mengeksekusi sesuai kebijakan, pengguna hanya menyetujui hal yang penting. Gesekan berkurang dan jumlah orang yang secara praktis dapat memegang kuncinya sendiri bertambah.

Dua rantai yang sama. Permukaan berbeda.

## Apa yang diekspos server (L1 dan L2 dalam satu permukaan)

Server adalah proses MCP tunggal. Klien mengirimkan nama alat dan argumen JSON melalui stdio dan mendapatkan kembali hasil terstruktur. Tindakan destruktif (mengirim, menandatangani dan menyiarkan, menerapkan) mendukung `dry_run` dan tidak disiarkan secara default. Server tidak pernah mengembalikan kunci atau mnemonik.

### Lapisan 1 (Bitcoin)

**Bitcoin Inti:**

- Derivasi alamat untuk P2PKH, P2SH-P2WPKH, P2WPKH, dan P2TR dengan kunci dan jalur publik.
- Akun dengan saldo per jenis alamat ([mempool.space](https://mempool.space) untuk data UTXO); saldo dompet dan harga BTC (USD, EUR).
- Pengiriman tunggal dan multi-penerima (jumlah dalam BTC atau EUR); pratinjau transfer dengan perkiraan biaya sebelum pengiriman.
- Sapu (kirim maks) dan konsolidasi UTXO.
- Tanda PSBT, dekode, dan tanda batch; tanda tangan pesan dan verifikasi (warisan ECDSA dan BIP-322).
- Tingkatan biaya dari mempool.space dan estimasi biaya berdasarkan jumlah input/output dan jenis alamat.
- Daftar UTXO dengan filter (jenis alamat, nilai minimum, hanya dikonfirmasi) dan detail per-UTXO.

**Ordinal dan prasasti:**

- Daftar prasasti dengan penomoran halaman; detail prasasti (asal usul, jenis konten, ordinal sat, kelangkaan, lokasi).
- Kirim prasasti (UTXO lengkap atau split sehingga hanya rentang sat prasasti yang sampai ke penerima).
- Ekstrak ordinal dari UTXO campuran; memulihkan BTC dari alamat ordinal (menyapu UTXO non-prasasti); memulihkan ordinal yang mendarat di alamat pembayaran kembali ke alamat akar tunggang.
- Membuat prasasti tunggal atau batch dengan perkiraan biaya penerapan/pengungkapan.

**Manajemen transaksi dan dompet:**

- Riwayat transaksi untuk BTC dan Stacks; status untuk satu tx.
- Mempercepat BTC yang tertunda melalui RBF; batalkan BTC yang tertunda (pengiriman RBF ke mandiri).
- Konfigurasi jaringan dan titik akhir API; beralih mainnet/testnet; tambahkan jaringan khusus.
- Cantumkan semua nama dan deskripsi alat yang didukung.

**Buku Besar (aplikasi Bitcoin):**

- Dapatkan alamat BTC dari perangkat [Ledger](https://www.ledger.com) yang terhubung.
- Masuk PSBT dengan aplikasi Ledger Bitcoin.

### Lapisan 2 (Tumpukan)

Mnemonic yang sama menghasilkan kunci Stacks (jalur `m/44'/5757'/0'/0/0`). [Hiro](https://hiro.so) Menumpuk API untuk data rantai dan penyiaran.

**Tumpukan:**

- Alamat dan kunci publik; akun dengan saldo STX, jumlah terkunci, nonces.
- Saldo termasuk token yang dapat dipertukarkan dan tidak dapat dipertukarkan.
- Transfer STX (micro-STX) dengan memo opsional; pratinjau transfer dengan biaya dan pemeriksaan saldo.
- Transfer SIP-10 fungible dan SIP-9 NFT melalui panggilan kontrak.
- Kejelasan: memanggil fungsi publik, menerapkan kontrak, panggilan hanya-baca.
- Menandatangani serial Stacks tx (SIP-30), menandatangani pesan, menandatangani data terstruktur SIP-018; estimasi nonce dan biaya.
- Pembaruan profil on-chain ([schema.org/Person](https://schema.org/Person)) untuk nama BNS.
- Kueri transaksi dengan filter (jenis, rentang blok, tidak berlabuh) dan berdasarkan kontrak.
- Mempool: daftar transaksi yang tertunda, statistik mempool, transaksi yang dibatalkan.
- Penjelajah blok: blok terbaru, blok berdasarkan tinggi atau hash, Menumpuk blok untuk blok Bitcoin tertentu.
- Peristiwa kontrak: peristiwa untuk kontrak, atau peristiwa aset untuk suatu alamat.
- Metadata token: metadata dan pemegang SIP-10 dan SIP-9.
- Info jaringan dan kesehatan/status.

**Swap, DeFi, dan jembatan:**

- Pasangan dan protokol yang didukung ([ALEX](https://alexlab.co/), [Bitflow](https://www.bitflow.finance), [Velar](https://www.velar.co)).
- Swap quote (perkiraan output, rate, biaya) untuk ketiganya; jalankan swap melalui ALEX DEX. Bitflow dan Velar mendukung kutipan dan penemuan pasangan; Anda dapat menambahkan eksekusi melalui SDK protokol (mis. Velar SDK mengembalikan parameter panggilan kontrak).
- Tukar riwayat dari aktivitas on-chain.
- Saldo sBTC dan info setoran/penarikan jembatan.
- Penumpukan: status PoX saat ini, info siklus (sisa blok, persen selesai, perkiraan waktu tersisa, tingkat partisipasi), memulai penumpukan solo, mencabut delegasi.

**BNS dan data pasar:**

- Pencarian [BNS](https://docs.stacks.co/docs/stacks-blockchain/bns) (nama ke alamat), nama yang dimiliki berdasarkan alamat, daftarkan nama BNS.
- Harga multi-aset (misalnya [CoinGecko](https://www.coingecko.com)); riwayat harga untuk pembuatan grafik.
- Ringkasan portofolio (BTC + STX dalam USD); semua aset dan barang koleksi (prasasti, Stacks NFT).

**Buku Besar (aplikasi Stacks):**

- Dapatkan alamat Stacks dari Ledger.
- Menandatangani transaksi Stacks dengan aplikasi Ledger Stacks.

## Keamanan dan desain

⚠️ Server MCP ini bersifat eksperimental dan tidak aman untuk dana yang berarti. Gunakan hanya dengan dompet yang Anda siap kehilangan. Belum ada seorang pun yang pernah menguji atau mengaudit kode tersebut. Saya memperlakukannya sebagai artefak penelitian untuk mengeksplorasi permukaan dompet asli agen.

Operasi destruktif secara default adalah `dry_run: true`. Alat pratinjau dan estimasi tersedia untuk setiap jalur pengiriman. Kunci tetap berada di luar kontrol versi dan di luar respons alat. Skrip yang dijalankan memuat `.env` dari root repo.

**Variabel kunci dompet (rahasiakan, jangan pernah berkomitmen):**

- **`BTC_PRIVATE_KEY`** — kunci pribadi Bitcoin yang dikodekan WIF; jika disetel, diutamakan daripada mnemonik.
- **`BTC_MNEMONIC`** — frase unggulan BIP-39; server menggunakannya untuk mendapatkan kunci Bitcoin dan Stacks (mnemonik yang sama, jalur `m/44'/5757'/0'/0/0` untuk Stacks).
- **`BTC_MNEMONIC_PASSPHRASE`** — Frasa sandi BIP-39 opsional untuk digunakan dengan `BTC_MNEMONIC`.

**Keamanan dan batasan (env atau .env):**

- **`BTC_NETWORK`** — `mainnet` atau `testnet` (`testnet` default).
- **`BTC_MAINNET_ENABLED`** — Setel ini untuk mengizinkan pengiriman mainnet (bendera keselamatan).
- **`BTC_DRY_RUN`** — Jika disetel (default), operasi destruktif (mengirim, menandatangani dan menyiarkan, menyebarkan) tidak disiarkan; setel ke `false` untuk memungkinkan transaksi nyata.
- **`BTC_MAX_SEND_BTC`** — Batas opsional pada jumlah pengiriman dalam BTC; server menolak permintaan di atas ini.
- **`BTC_MAX_FEE_SATS`** — Batasan opsional pada biaya dalam satoshi per transaksi.
- **`STX_ACCOUNT_INDEX`** — Indeks akun derivasi tumpukan (default `0`).
- Konfigurasi sebaliknya akan menentukan tingkat biaya (tingkat tarif tetap atau tingkat mempool.space: jam, setengah jam, tercepat).

## Bagaimana kesesuaiannya dengan tumpukan agen saya

Saya menjalankan agen pada arsitektur tiga lapis. Lapisan-lapisannya dipisahkan dengan rapi sehingga ingatan, penalaran, dan tindakan tetap berada di tempat yang tepat.

**Lapisan kebenaran:** Ini adalah substrat memori. Ini menyimpan data yang diketik dan terstruktur: kepemilikan, aliran, transaksi, kontak, tugas, dan lainnya. Dalam pengaturan saya, penyimpanan kanonik adalah [Neotoma](/posts/truth-layer-agent-memory). Ini menggunakan sumber dan pereduksi peristiwa, dengan asal penuh dan resolusi entitas. Agen membacanya. Mereka tidak pernah menulis kebenaran secara langsung. Semua pembaruan mengalir melalui peristiwa domain yang dihasilkan oleh lapisan eksekusi.

**Lapisan strategi:** Di sinilah tujuan, batasan, dan taktik berada. Dokumen strategi, buku pedoman taktis, dan manual operasi ada di sini. Agen menggunakan lapisan ini untuk berpikir: mereka membaca keadaan dunia, mengevaluasi prioritas dan risiko, serta menghasilkan keputusan dan perintah. Strategi adalah kognisi murni. Tidak ada efek samping. Nyatakan masuk, keputusan keluar.

**Lapisan eksekusi:** Di sinilah tindakan eksternal terjadi. Dibutuhkan perintah dari lapisan strategi dan melakukan efek samping melalui adaptor: email, kalender, DNS, dan dalam hal ini dompet Bitcoin dan Stacks MCP. Server dompet adalah salah satu adaptor eksekusi di antara banyak adaptor lainnya. Itu tidak pernah mengubah lapisan kebenaran. Ia melakukan hal tersebut (mengirim, menandatangani, menukar) dan sisa tumpukan mencatat apa yang terjadi melalui peristiwa domain. Perintah masuk, acara keluar.

Saya mendefinisikan dan mempertahankan strategi. Agen membaca dari lapisan kebenaran dan memanggil alat MCP untuk mengeksekusi. Saya tidak menggunakan UI kripto tunjuk-dan-klik untuk operasi rutin. Saya hanya turun tangan untuk menyetujui tindakan yang melebihi batas yang telah saya tentukan sebelumnya.

Kasus penggunaan saya bersifat jangka pendek: membayar layanan, menyeimbangkan kembali portofolio melalui permintaan manual. Untuk jangka panjang, saya ingin aliran tersebut diotomatisasi. Agen akan memantau, memberi alasan, dan mengeksekusi sesuai kebijakan. Saya akan melihat penjelasan dan menyetujui bila diperlukan.

## Bagaimana saya mendekati pembangunan

Saya melakukan dogfood pada server dalam alur kerja saya sendiri terlebih dahulu. Saya menguji setiap permukaan (pengiriman, PSBT, Ordinal, transfer Stacks, swap) secara bertahap dengan jumlah kecil dan uji coba.

Saya telah menyambungkannya ke tumpukan yang sama di mana saya sudah menggunakan [lapisan kebenaran dan strategi](/posts/agentic-search-and-the-truth-layer#where-ive-hit-limits). Agen dapat menggabungkan tindakan dompet dengan kalender, email, dan data. Pengguna eksternal belum termasuk dalam cakupan.

Tujuan saya adalah memvalidasi bentuk permukaan dompet agen dan menjadikan operasi Bitcoin dan Stacks saya berbasis agen, bukan manual.

Untuk menjalankannya: kloning [mcp-server-bitcoin](https://github.com/markmhendrickson/mcp-server-bitcoin) (atau tambahkan sebagai submodul di `mcp/btc_wallet/`), tambahkan server ke konfigurasi MCP Anda (gunakan jalur skrip `run_btc_wallet_mcp.sh`), dan gunakan dompet uji dengan uji coba aktif.