ZKGov is a zero-knowledge governance platform on HashKey Chain testnet (chain ID 133). Voters register with Semaphore identity commitments and cast anonymous, Groth16-verified votes on governance proposals.
bash
# MCP server (preferred — works with Claude Code, Cursor, Windsurf, VS Code)
# https://www.npmjs.com/package/@zkgov/mcp
claude mcp add zkgov npx @zkgov/mcp
# Standalone CLI
# https://www.npmjs.com/package/@zkgov/cli
npm install -g @zkgov/cli
zkgov --help
mcp__zkgov__* are available, call them directly.zkgov <command> via the Bash tool.--json flag. Always use --json when calling CLI from an agent for reliable parsing.MCP ToolCLI CommandDescriptionzkgov-stats``zkgov statsPlatform stats: total proposals, members, group IDzkgov-list-proposals``zkgov proposalsList all proposals with vote tallies and statuszkgov-proposal``zkgov proposal <id>Full proposal detail by IDzkgov-check-voter``zkgov voter <address>Check if address is a registered voterzkgov-members``zkgov membersSemaphore group info: member count, Merkle rootzkgov-activity``zkgov activityRecent on-chain events with tx hashes
MCP ToolCLI CommandDescriptionzkgov-wallet``zkgov walletShow agent wallet: address, balance, voter statuszkgov-register``zkgov registerRegister wallet as voter (one-time on-chain tx)zkgov-create-proposal``zkgov create <title>Create a governance proposalzkgov-vote``zkgov vote <id> <choice>Cast anonymous ZK-verified votezkgov-finalize``zkgov finalize <id>Finalize proposal after voting period ends
On first write operation, a wallet is auto-generated at ~/.zkgov/config.json (mode 0o600). The same private key derives both the EVM account and the Semaphore ZK identity.
Override with env var: ZKGOV_PRIVATE_KEY=0x...
The wallet needs testnet HSK for gas (very cheap — 0.001 gwei gas price).
zkgov-stats to see proposals/members countzkgov-wallet to see balance and registrationzkgov-register (one-time, ~0.0003 HSK gas)zkgov-list-proposals → zkgov-proposal for detailzkgov-vote with proposalId and choice (generates ZK proof, ~3-5s)zkgov-finalize after voting period ends (anyone can call)--json — machine-readable output on every commandzkgov activity --limit 10 — limit activity eventszkgov create "Title" -d "Body" -p 86400 -q 3 — set period (seconds) and quorum0xEa625841E031758786141c8b13dD1b1137C9776Czkgov-finalize instead