Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
제작자가 쓴 설명(영어 원문)
Local keystore + MCP server. Claude can sign EVM transactions but never sees the private key.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
SIGIL_HOME, SIGIL_CONTROL_SOCK필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"sigil": {
"command": "npx",
"args": [
"-y",
"sigild"
],
"env": {
"SIGIL_HOME": "your-value",
"SIGIL_CONTROL_SOCK": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add sigil --env SIGIL_HOME=your-value --env SIGIL_CONTROL_SOCK=your-value -- npx -y sigild실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"sigil": {
"command": "npx",
"args": [
"-y",
"sigild"
],
"env": {
"SIGIL_HOME": "your-value",
"SIGIL_CONTROL_SOCK": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"sigil": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"sigild"
],
"env": {
"SIGIL_HOME": "your-value",
"SIGIL_CONTROL_SOCK": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
SIGIL_HOME envSIGIL_CONTROL_SOCK env이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 GitHub 계정 cdrn 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.0.6)은 6개월 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js도 있어야 해요.
같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, zanadir
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Find what a repository's CI is missing, and which security checks cannot fail the build.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
Claude can sign, but never see.
sigil is a local signing tool and Claude Code integration that lets agentic coding tools use private keys without ever putting key material in the model's context window.
Status: pre-alpha. The MCP server, CLI, unlock flow, ward hooks, policy engine (static checks), out-of-band confirmation via ntfy, Solana signing, and the JSON-RPC signing proxy (Foundry/Hardhat) all work end-to-end. Rolling-window value caps and EIP-712 domain allowlists landed in the policy engine, but have not been through a release yet. Until v0.1.0 ships — with the supply-chain attestations promised for it — do not use this with real funds yet. Build plan lives in the tracking issue.
One MCP server process, four bins (plus a legacy sigild alias), six runtime deps (all pinned, zero transitive):
mcpServers config; it dies when Claude exits. Holds unlocked keys in process memory (zeroized on shutdown, sigil lock, or unlock-failure; mlock against swap is planned). Keys at rest are encrypted with XChaCha20-Poly1305 and an Argon2id-derived key. Signs over stdio using a DIY MCP wire protocol (~200 lines, no SDK dep). Claude never sees key material — only opaque handles like evm:executor.init, status, portal new/add/list/qr/remove, policy show/init, unlock, lock.sigil-mcp boots locked: empty in-memory handle table, no keys loaded. Sign methods return DAEMON_LOCKED (-32003) with a "run sigil unlock" message until you push the passphrase in from a separate terminal via sigil unlock. That CLI connects to a per-session Unix socket at ~/.sigil/control/ .sock (0600) that sigil-mcp opens at startup — and fans out to every such socket so one sigil unlock reaches all open windows. After unlock, signs work for the rest of the session; sigil lock zeroizes the table without killing the process.
Sign methods exposed today: EIP-191 personal_sign, EIP-1559 + legacy transactions, EIP-712 typed data, plus Solana (ed25519) message + transaction signing — see Solana support below.
npm install -g sigild
This drops four binaries on your $PATH: sigil, sigil-mcp, sigil-hook-pre, sigil-hook-post (plus sigild, a legacy alias for sigil-mcp). (The package name on npm is sigild for legacy reasons; the bins do not include a daemon any more.)
Requires Node 22+, macOS or Linux. (The CLI ↔ session control channel uses Unix domain sockets; Windows is untested and currently unsupported.)
# 1. Wire sigil into Claude Code (project-scoped). Pass --user to do it globally.
sigil init
sigil portal new evm:bot
#
sigil portal add evm:bot --key-file ./private.hex
#
sigil unlock
sigil lock
If you close Claude Code, sigil-mcp exits and its memory is wiped. Open a new session and sigil unlock again — the encrypted keyfiles on disk persist.
sigil init [--user]
Project scope: writes the ward hooks to /.claude/settings.json and the MCP server registration to /.mcp.json. --user: writes hooks to ~/.claude/settings.json and the MCP server registration to ~/.claude.json. (Claude Code CLI reads MCP configs from .mcp.json / ~/.claude.json — not from settings.json.) Idempotent — preserves your unrelated settings, and on upgrade migrates any stale mcpServers.sigil entry out of settings.json.
sigil portal new [--strict] Generate a fresh secp256k1 key inside sigil, encrypt with your passphrase, write it to ~/.sigil/keys/ .sigil (mode 0600). No plaintext key ever lands on disk. Use this when you want a clean hot wallet for a bot (vs importing an existing key from a file). Also writes ~/.sigil/policy/ .toml — permissive by default, or --strict for a locked-down template.
sigil portal add --key-file [--no-remove-source] [--strict] Import an existing private key. Encrypts it with your passphrase and stores at ~/.sigil/keys/ .sigil (mode 0600). Handle format is : where kind is "evm". The source key file is deleted by default — pass --no-remove-source to keep it. Also writes ~/.sigil/policy/ .toml — permissive by default (signs anything), or --strict for a locked-down template you fill in before signs succeed.
sigil policy show Print the current policy file for a portal. Validates schema; exits 1 if the file is missing or malformed.
sigil policy init [--strict] Provision a policy file for an existing portal whose policy is missing (e.g. a keyfile from an older sigil version, or one you manually deleted). Refuses to overwrite — edit the file directly or remove it first. Defaults to permissive; --strict writes the locked-down template.
sigil rpc init --upstream [--port ] Enable the JSON-RPC signing proxy for a portal: generates a strong auth token and appends the [rpc] block to ~/.sigil/config.toml (refuses if one exists; preserves the rest of the file). Prints the ready-to-paste authenticated endpoint and forge invocation. Restart Claude Code sessions to pick it up.
sigil portal list List the encrypted keyfiles on disk with their derived addresses (EVM + Solana). Requires the passphrase.
sigil portal qr Render a portal's address as a terminal QR code (for funding it from a phone wallet). Requires the passphrase.
sigil portal remove Delete a keyfile from disk.
sigil unlock Prompt for the passphrase and push it to every running sigil-mcp at once (one per Claude window). After unlock, sign calls succeed for the rest of each session. Idempotent — sessions already unlocked are left as-is. Fails if no sigil-mcp is running (start a Claude Code session first).
sigil lock Tell every running sigil-mcp to zeroize and clear its in-memory keys. Re-unlock with sigil unlock — the sigil-mcp processes keep running.
sigil status Report which sigil-mcp sessions are running (one entry per window, with PID, unlocked flag, and loaded portals) and how many keyfiles exist on disk. Does not require the passphrase.
Set SIGIL_HOME to override ~/.sigil. Set SIGIL_CONTROL_DIR to override the control-socket directory.
Each Claude Code window spawns its own sigil-mcp, and each binds its own control socket at ~/.sigil/control/ .sock. They share the on-disk keyfiles + audit log but keep separate in-memory handle tables.
sigil unlock / lock / status fan out across every socket in ~/.sigil/control/, so a single sigil unlock loads keys into all currently-open windows — no more guessing which process the CLI reaches. Sockets left behind by hard-killed sessions are detected and cleaned up automatically on the next CLI call.
Each window still holds its own decrypted keys only for its own lifetime: closing a window zeroizes that session's keys, and a window opened *after* you unlock starts locked (run sigil unlock again to include it). Keys never outlive the Claude sessions that use them — a deliberate property from #23.
OS-keychain integration (planned, v0.3) will make unlock zero-touch for users who set it up.
After upgrading sigil, restart every Claude window's `sigil-mcp` (reconnect the MCP server or reopen the window, then sigil unlock again). A running sigil-mcp never reloads code, and daemons from different versions must not share ~/.sigil/audit.log: the lock protocol and the writer's chain checks are version-specific. ps -ax | grep sigil-mcp shows stragglers.
Once a portal is unlocked, signing authority over its key is real. To bound the blast radius of a successful prompt injection, every portal has a policy file at ~/.sigil/policy/ .toml. Two modes:
Permissive (default for sigil portal add): no rules. Sign anything the agent asks. The key isolation guarantees still hold — your key never enters the agent's context — but the unlocked portal can be made to sign whatever an attacker can get the agent to ask for. Useful for: testnet bots, demo flows, anyone who only cares about the context-window protection.
Strict (opt in with --strict): every sign request is checked. Generated template:
mode = "strict"
chain_ids = [1] # allowed chain IDs allow_to = [] # allowed destination addresses (lowercase 0x) max_value_wei = "0" # per-tx cap, in wei, as decimal string allowed_selectors = [] # 4-byte function selectors, e.g. "0xa9059cbb"
allow_contract_creation = false # deploys (to = null); when true, every
allow_message_signing = false # EIP-191 personal_sign (e.g. SIWE) allow_typed_data = false # EIP-712 (Permit, OpenSea — can be financial) typed_data_verifying_contracts = [] # when allowed: domain.verifyingContract allowlist typed_data_primary_types = [] # when allowed: primaryType allowlist ("Permit", …)
max_value_per_hour_wei = "100000000000000000" # 0.1 ETH / hour max_value_per_day_wei = "1000000000000000000" # 1 ETH / day
require_confirm_above_wei = "10000000000000000" # 0.01 ETH
A failed rule throws POLICY_DENIED (-32001) back to the agent with the human-readable reason ("tx denied — value X exceeds max_value_wei Y"), and the deny is a
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요