@cryptoapis-io/mcp-signer
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.
Security
- 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.
Installation
npm install @cryptoapis-io/mcp-signer
Or install all Crypto APIs MCP servers: npm install @cryptoapis-io/mcp
Usage
npx @cryptoapis-io/mcp-signer
Claude Desktop
Add 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"]
}
}
}
Cursor
Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"cryptoapis-signer": {
"command": "npx",
"args": ["-y", "@cryptoapis-io/mcp-signer"]
}
}
}
MCP Inspector
npx @modelcontextprotocol/inspector npx @cryptoapis-io/mcp-signer
Available Tools
evm_sign
Sign 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. |
utxo_sign
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 |
tron_sign
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 |
xrp_sign
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 |
kaspa_sign
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) |
svm_sign
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.
Dependencies
| Package | Purpose | |---------|---------| | ethers | EVM transaction signing | | bitcoinjs-lib + ecpair + tiny-secp256k1 | UTXO transaction signing | | elliptic | Tron transaction signing (secp256k1) | | xrpl | XRP transaction signing |
License
MIT











