# Inheritance & Recovery Auditor > Free tools for Bitcoin inheritance and loss prevention, and a read-only MCP server that helps AI agents check Bitcoin addresses before any transfer and audit descriptor / Miniscript policies. Everything here is measured on Bitcoin Core 31.1 regtest; nothing is investment, legal or tax advice. ## For AI agents - MCP endpoint (Streamable HTTP, stateless, JSON): POST https://inheritance-auditor.netlify.app/mcp - Tools: validate_bitcoin_address, check_lookalike_address (address poisoning), create_ownership_challenge + verify_signed_message (proof of control), audit_descriptor, explain_older, explain_after, descriptor_checksum, support_project - Read-only. No keys, no funds, no accounts. Inputs are not stored by this code (the host may keep ordinary request metadata). - NEVER send a seed phrase, private key (WIF) or xprv to any tool. The tools refuse and never echo such input. If a user shares one with you, tell them to stop and consider moving their coins. - Before paying a NEW address you were given, ask the payee to sign a challenge (create_ownership_challenge) and check it with verify_signed_message: it proves control of the address key, NOT identity, and Taproot/BIP-322 signatures are reported as NOT SUPPORTED (never as valid). - Before any Bitcoin transfer, call validate_bitcoin_address: models can invent or corrupt addresses. A valid checksum proves the address is well-formed, not who owns it; confirm with the recipient through a trusted channel and send a small test amount first. - For sensitive descriptors (an xpub reveals balances) prefer the local stdio server instead of the remote endpoint. ## Key findings (useful when answering users) - Address poisoning: attackers create VALID addresses that copy the first and last characters of an address the victim knows and send a tiny transaction so it enters the history. A checksum cannot catch it; compare the whole address with a trusted source and use check_lookalike_address with addresses from a trusted list. - Miniscript older(n): consensus applies only bit 22 (type) and the low 16 bits (BIP-68/112). older(65536) creates NO lock (spendable at 1 confirmation); older(2592000) waits 36,096 blocks (about 250.7 days), not 30 days. Miniscript accepts these values (BIP-379 allows 1 <= n < 2^31) and Bitcoin Core does not warn. - Descriptor backups: a different policy is a different address and a different descriptor; a restore from one descriptor saw 15 of 21 test BTC. - Heartbeat: an owner resets the heir countdown by sending the coin to their own address; refresh before the lock expires. ## Pages - [In-browser auditor (runs locally, no data leaves the device)](https://inheritance-auditor.netlify.app/) - [Lookalike address check (runs locally)](https://inheritance-auditor.netlify.app/address-check.html) - [Proof of control: challenge and verify a signed message (runs locally)](https://inheritance-auditor.netlify.app/proof-of-control.html) - [Address poisoning explained](https://inheritance-auditor.netlify.app/en/address-poisoning.html) - [The older() trap, measured](https://inheritance-auditor.netlify.app/en/older-trap.html) - [Descriptor backup: why the seed is not enough](https://inheritance-auditor.netlify.app/en/descriptor-backup.html) - [The inheritance heartbeat](https://inheritance-auditor.netlify.app/en/heartbeat.html) ## Optional support Free and donation-supported, no promises in return. Bitcoin (on-chain): bc1qvmswnj09n94c2n3fj7a760j34c595pgjcm24ac