Local Ethereum wallet for AI agents on Base and Arc: balances, x402 payments. Keys stay local.
AI 에이전트를 위한 로컬 EVM 지갑 — Base · Arc(Circle). Mac에서 Claude 같은 AI가 인터넷 결제(x402)를 할 때, 사람이 비밀번호로 승인하는 지갑이에요.
In English: README.en.md
[ AI 앱 (Claude Code / 데스크톱) ]
│ MCP로 "결제해줘" 요청
▼
[ Kura 데스크톱 앱 ] ← 승인 팝업 → 사람이 비밀번호 입력
│ 서명 (키는 이 앱 안에서만)
▼
[ Base 체인 / x402 페이실리테이터 ] ← 실제 결제
비밀번호는 Kura 앱의 입력칸에서만 받아요. 채팅창·MCP·설정 파일 어디에도 들어가지 않아요.
Apple Silicon Mac (macOS 11 이상)
brew install --cask dinggi5/tap/kura
Releases에서 Kura_<버전>_aarch64.dmg를 받아 열고, Kura를 Applications 폴더로 끌어다 놓으세요.
열쇠를 맡기는 앱이니, 받은 앱이 진짜 내가 만든 것인지 확인하는 법은 SECURITY.md에 명령까지 적어 뒀어요.
사전 준비: Rust, Node.js(20.19+ 또는 22.12+ — Vite 7 요구), macOS.
git clone https://github.com/dinggi5/kura.git
cd kura
git checkout v0.4.2 # 배포본과 같은 소스. 빼면 개발 중인 최신 코드가 받아져요
npm ci # package-lock.json 그대로 설치 (install 은 버전이 올라갈 수 있어요)
# 개발 모드로 바로 실행
npm run tauri dev
# 앱으로 빌드해 /Applications에 설치
npm run tauri build -- --bundles app --no-sign
ditto src-tauri/target/release/bundle/macos/Kura.app /Applications/Kura.app
open /Applications/Kura.app
앱이 스스로 업데이트해요.
설정 → 정보에서 버전과 바뀐 내용을 확인하고 지금 설치하고 다시 시작을 누르세요.
⚠️ 앱을 지워도 지갑은 지워지지 않아요. 키·설정·거래 내역은 앱 바깥의 ~/.jigap 폴더에 있어서, 앱만 지우면 그대로 남아요 — 실수로 자산을 날리지 않게 일부러 그렇게 뒀어요(brew uninstall --zap으로도 안 지워요).
# 앱만 제거 (지갑은 남음 — 나중에 다시 설치하면 그대로 이어서 써요)
brew uninstall --cask dinggi5/tap/kura # 또는 /Applications/Kura.app 을 휴지통으로
이 맥에서 지갑까지 완전히 지우려면, 순서를 꼭 지키세요:
~/.jigap에 상태 파일을 쓰기 때문에, 지운 폴더가 곧바로 다시 생겨요.rm ~/Library/LaunchAgents/Kura.plist (앱을 휴지통으로 지우면 이 파일은 남아요. brew uninstall --cask 로 지우면 같이 내려가요).rm -rf ~/.jigap12단어 없이 마지막 rm -rf ~/.jigap 를 하면 그 지갑의 자산은 누구도 되찾을 수 없어요.
Kura는 메뉴바에 살아요. 실행하면 화면 위쪽 메뉴바에 열쇠구멍 아이콘(◉)이 생기고, 창은 그 아이콘을 눌렀을 때만 아래로 펼쳐져요. 다른 곳을 클릭하면 닫히고, 앱은 백그라운드에 남아 AI 결제 요청을 계속 기다려요. 완전히 끄려면 아이콘을 우클릭 → 종료. (지갑이 아직 없는 첫 실행에는 창이 저절로 열려요.)
~/.jigap/wallet.enc).~/.jigap/wallet.enc를 지우고 앱을 다시 실행하면 첫 화면의 가져오기로 복구돼요(다른 표준 BIP-39 지갑에 넣어도 돼요). 단, 12단어 없이 이 파일을 지우면 자산을 영영 잃어요.결제하려면 지갑에 USDC(디지털 달러)가 있어야 해요.
AI 앱의 MCP 설정에 Kura 서버를 등록하면 연결돼요. 연결되면 메인 화면에 "Claude 연결됨" 배지가 떠요. 0.1.2부터는 앱 안에 MCP 서버가 들어 있어서 소스 클론이나 Rust 설치 없이 연결할 수 있어요.
메인 화면 위쪽의 "AI 연결 안 됨" 배지를 누르면 연결 화면이 열려요.
claude mcp add를 앱이 대신 실행). 다음 claude 실행부터 어느 폴더에서든 연결돼요.아래는 같은 일을 손으로 하는 방법이에요.
릴리스 페이지에서 kura-<버전>.mcpb를 받아 더블클릭하면 Claude 데스크톱이 설치를 물어봐요. (또는 Claude 설정 → 확장 → 파일 선택.)
확장 안에는 실행 파일이 없어요 — 설치된 Kura.app 안의 서명·공증된 MCP 서버를 서명 확인 후 실행하는 런처만 들어 있어요. 그래서 Kura 앱을 먼저 설치해야 해요.
앱 안의 바이너리를 절대경로로 등록하면 돼요:
claude mcp add --scope user kura -- /Applications/Kura.app/Contents/MacOS/kura-mcp
(--scope user는 "이 폴더만"이 아니라 어디서든 쓰이게 하는 옵션이에요. 한 프로젝트에서만 쓸 거면 빼도 돼요.)
다른 MCP 앱은 설정에 아래처럼 적어요:
{
"mcpServers": {
"kura": {
"command": "/Applications/Kura.app/Contents/MacOS/kura-mcp"
}
}
}
리포 루트의 .mcp.json이 이미 들어 있어요. 이 폴더에서 claude를 실행하면 자동으로 잡혀요(처음엔 서버를 쓸지 묻는데 승인하면 돼요). 여기 적힌 mcpb/server/kura-mcp는 설치된 Kura.app의 서명을 확인하고 그 안의 MCP 서버를 실행하는 런처예요 — 배포본이 쓰는 것과 같은 파일이라, 앱만 설치돼 있으면 빌드 없이 바로 붙어요.
kura-mcp 소스를 고치는 중이라면 그 변경은 설치된 앱에 없으니, .mcp.json을 잠깐 이렇게 바꿔서 쓰세요 — 대신 target/이 비어 있으면 첫 빌드에 30초 넘게 걸려 AI 앱이 연결을 포기할 수 있어요(그땐 cargo build를 먼저 한 번 돌리고 AI 앱을 재시작하세요).
{ "mcpServers": { "kura": { "command": "cargo", "args": ["run", "--quiet", "--manifest-path", "./kura-mcp/Cargo.toml"] } } }
AI가 쓸 수 있는 도구: get_wallet_status · get_balances · get_history(읽기 전용) · request_payment(결제 요청 → 앱 승인 팝업) · x402_fetch(402 결제가 걸린 URL 호출) · lookup_agent(ERC-8004 에이전트 신원 조회 — 온체인 읽기 전용).
MCP 도구를 바꾸면 AI 앱을 재시작해야 반영돼요(서버가 세션 시작 때 1회 로드).
~/.jigap/)는 리포 밖에 있고 git에 올라가지 않아요.CLI kura로도 같은 지갑을 다룰 수 있어요(MCP 서버와 코어 로직 공유). 설치된 앱에 이미 들어 있어서, PATH에 한 줄 걸면 바로 써요:
sudo mkdir -p /usr/local/bin
sudo ln -sf /Applications/Kura.app/Contents/MacOS/kura-cli /usr/local/bin/kura
kura status
소스에서 돌리려면:
cargo run --manifest-path ./kura-mcp/Cargo.toml --bin kura -- status
cargo run --manifest-path ./kura-mcp/Cargo.toml --bin kura -- balance
cargo run --manifest-path ./kura-mcp/Cargo.toml --bin kura -- history --limit 10
cargo run --manifest-path ./kura-mcp/Cargo.toml --bin kura -- pay <주소> <금액> --token usdc
cargo run --manifest-path ./kura-mcp/Cargo.toml --bin kura -- fetch <URL>
pay/fetch는 비번을 CLI로 받지 않아요 — Kura 앱이 떠 있어야 하고, 승인 팝업에서 사람이 비번을 넣어요.
테스트:
(cd src-tauri && cargo test) # 백엔드(지갑·암호화·한도·송금)
(cd kura-mcp && cargo test) # MCP/CLI 어댑터
npx tsc --noEmit && npx vite build # 프론트
배포본(서명·공증된 DMG)을 만드는 절차는 docs/RELEASE.md 에 있어요. Apple Developer 계정과 1회 설정이 필요하고, 그다음부터는 한 줄이에요:
./scripts/release.sh
| 데스크톱 | Tauri (Rust + 웹 프론트) |
| 프론트 | React + Tailwind CSS, Framer Motion, Lucide, Pretendard |
| 체인 | Base / alloy-rs |
| 결제 | x402 (EIP-3009 오프체인 서명) |
| AI 연결 | MCP 서버 (rmcp) |
구조: [Rust 코어(src-tauri)] ← MCP / CLI 어댑터(kura-mcp). 키 접근(서명)은 GUI 프로세스만 — 그게 최종 방어선이에요.
앱은 한국어·영어 두 벌이에요. 설정 → 앱 → 언어에서 고르고, 고른 적 없으면 macOS 시스템 언어를 따라가요. 고르면 창이 그 언어로 다시 열려요.
CLI(kura)도 같은 설정을 따라가요 — 한 번만 다르게 쓰려면 KURA_LANG=en.
MCP 서버는 일부러 영어 한 벌이에요. 그 글을 읽는 건 사람이 아니라 모델이고(에이전트는 당신 언어로 답해요), 도구 설명이 컴파일 타임 상수라 런타임 전환이 안 돼요.
MIT 라이선스 — 열쇠와 돈을 다루는 코드라, 직접 읽고 검증하고 고쳐 쓸 수 있어야 한다고 봐요.
취약점을 발견하셨다면 이슈로 올리기 전에 SECURITY.md 의 비공개 경로로 알려주세요. 같은 문서에 Kura가 막지 못하는 것도 적어뒀어요.
함께 담긴 Pretendard 글꼴은 SIL Open Font License 1.1이에요(전문).
1순위 사용자는 본인 — Apple Silicon Mac에서 로컬 LLM/Claude로 결제하는 한국 개발자·창작자를 위한 지갑이에요. 아직 초기 버전이라, 메인넷에는 잃어도 되는 만큼만 넣으시고 — 익숙하지 않으면 설정에서 테스트넷으로 바꿔 먼저 연습해 보세요.
This listing does not have a supported local package template. Use the maintainer’s documentation for its hosted endpoint, authentication, and client-specific setup. No install command has been inferred.
https://github.com/dinggi5/kura/releases/download/v0.5.1/kura-0.5.1.mcpbotherKura works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.