MCP server for local transaction signing across EVM, UTXO, Tron, and XRP blockchains. No Crypto APIs HTTP calls — signing happens entirely on your machine. No API key required.
- Stdio only — no HTTP transport. The server does not listen on any port.
- Private keys in tool input — each tool receives
privateKey/privateKeys/secretas parameters. Keys are never read from environment variables. - No network calls — all signing is done locally using cryptographic libraries.
npm install @cryptoapis-io/mcp-signerOr install all Crypto APIs MCP servers: npm install @cryptoapis-io/mcp
npx @cryptoapis-io/mcp-signerAdd to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"cryptoapis-signer": {
"command": "npx",
"args": ["-y", "@cryptoapis-io/mcp-signer"]
}
}
}Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"cryptoapis-signer": {
"command": "npx",
"args": ["-y", "@cryptoapis-io/mcp-signer"]
}
}
}npx @modelcontextprotocol/inspector npx @cryptoapis-io/mcp-signerSign an EVM transaction (Ethereum, Ethereum Classic, BSC, Polygon, Avalanche (C-Chain), Arbitrum, Base, Optimism, Tron).
| Action | Description |
|---|---|
sign-from-details |
Sign from structured transaction fields (to, value, gasLimit, etc.) |
sign-unsigned-hex |
Sign a pre-built unsigned transaction hex |
sign-typed-data |
Sign an EIP-712 typed-data message (the x402 gasless path — e.g. the EIP-3009 TransferWithAuthorization from the x402 buyer /authorize). Returns { signature }, not a tx. |
Sign a UTXO transaction (Bitcoin, Bitcoin Cash, Litecoin, Dogecoin, Dash, Zcash).
| Action | Description |
|---|---|
sign-from-details |
Sign from a prepared transaction object (inputs, outputs) |
sign-unsigned-hex |
Sign a raw unsigned transaction hex with input descriptors |
Sign a Tron transaction using secp256k1 (no TronWeb dependency).
| Action | Description |
|---|---|
sign-from-details |
Sign from a transaction object with raw_data_hex |
sign-unsigned-hex |
Sign a pre-built unsigned transaction hex |
Sign an XRP transaction.
| Action | Description |
|---|---|
sign-from-details |
Sign from structured XRP transaction fields |
sign-unsigned-hex |
Sign a pre-built unsigned transaction hex |
Sign a Kaspa transaction using schnorr (BIP340) via kaspa-wasm. Mainnet only.
| Action | Description |
|---|---|
sign-from-details |
Sign a prepared Kaspa transaction (from the prepare-transaction API) |
Partial-sign a Solana (SVM) x402 payment transaction — the buyer's source-authority signature only (the facilitator's feePayer slot stays unsigned, signed at settle).
| Action | Description |
|---|---|
partial-sign |
Deserialize the base64 unsigned TransferChecked tx from the x402 buyer /authorize (scheme svm-transaction), add the buyer signature, re-serialize to base64. Returns { transaction }. |
Most tools return signedTransactionHex — ready to broadcast with @cryptoapis-io/mcp-broadcast. The
x402 paths return { signature } (EVM typed-data) or { transaction } (SVM) instead.
| Package | Purpose |
|---|---|
ethers |
EVM transaction signing |
bitcoinjs-lib + ecpair + tiny-secp256k1 |
UTXO transaction signing |
elliptic |
Tron transaction signing (secp256k1) |
xrpl |
XRP transaction signing |
MIT