zcash_create_wallet
Create a split-key wallet for Zcash, Bitcoin, and Ethereum using 2PC-MPC with Sui private key. Returns wallet ID and encryption seed for signing.
Instructions
Create a split-key wallet via Ika 2PC-MPC. One secp256k1 key signs for Zcash transparent, Bitcoin, and Ethereum. Neither party holds the full private key. Returns wallet ID, public key, and encryption seed (save it for signing).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Ika network | testnet |
| chain | No | Target chain (all use same secp256k1 key) | zcash-transparent |
| sui_private_key | Yes | Sui private key (suiprivkey1...) for signing the DKG transaction | |
| ika_coin_id | No | IKA coin object ID (auto-detected if omitted) |
Implementation Reference
- src/tools/create-wallet.ts:26-54 (handler)The async handler function that executes the 'zcash_create_wallet' tool logic. It currently returns instructions for installing the @frontiercompute/zcash-ika package to perform actual wallet creation via 2PC-MPC.
async ({ network, chain, sui_private_key, ika_coin_id }) => { try { const result = { status: "wallet_creation_requires_zcash_ika_package", instructions: { step1: "npm install @frontiercompute/zcash-ika", step2: "import { createWallet } from '@frontiercompute/zcash-ika'", step3: `const wallet = await createWallet({ network: '${network}', suiPrivateKey: '...'${ika_coin_id ? `, ikaCoinId: '${ika_coin_id}'` : ""} }, '${chain}')`, step4: "Save wallet.encryptionSeed - you need it for signing", }, chain_params: { "zcash-transparent": "secp256k1/ECDSA/DoubleSHA256", bitcoin: "secp256k1/ECDSA/DoubleSHA256", ethereum: "secp256k1/ECDSA/KECCAK256", }, note: "One secp256k1 dWallet signs for all three chain families. " + "Zcash shielded (Orchard) requires RedPallas on Pallas curve - not available via MPC. " + "Use shield() to move transparent ZEC into Orchard pool.", }; return { content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }], }; } catch (err) { const msg = err instanceof Error ? err.message : String(err); return { content: [{ type: "text" as const, text: `Error: ${msg}` }], isError: true }; } } ); - src/tools/create-wallet.ts:9-25 (schema)Zod input schema for 'zcash_create_wallet' defining parameters: network (testnet/mainnet), chain (zcash-transparent/bitcoin/ethereum), sui_private_key, and optional ika_coin_id.
{ network: z .enum(["testnet", "mainnet"]) .default("testnet") .describe("Ika network"), chain: z .enum(["zcash-transparent", "bitcoin", "ethereum"]) .default("zcash-transparent") .describe("Target chain (all use same secp256k1 key)"), sui_private_key: z .string() .describe("Sui private key (suiprivkey1...) for signing the DKG transaction"), ika_coin_id: z .string() .optional() .describe("IKA coin object ID (auto-detected if omitted)"), }, - src/index.ts:48-48 (registration)Registration call that invokes registerCreateWalletTool(server) to register the tool with the MCP server.
registerCreateWalletTool(server); - src/index.ts:23-23 (registration)Import of registerCreateWalletTool from the create-wallet module.
import { registerCreateWalletTool } from "./tools/create-wallet.js"; - src/tools/create-wallet.ts:4-4 (helper)The export function registerCreateWalletTool(server) that wraps the server.tool() registration call.
export function registerCreateWalletTool(server: McpServer) {