@cryptoapis-io/mcp-signer
OfficialLocally sign blockchain transactions and x402 payment messages across multiple chains — no network calls or API key required.
EVM (
evm_sign): sign pre-built unsigned tx hex, build-and-sign from fields, or sign EIP-712 typed data (x402 gasless/EIP-3009 path).UTXO (
utxo_sign): sign Bitcoin, Bitcoin Cash, Litecoin, Dogecoin, Dash, and Zcash transactions from prepared details or unsigned hex (with input metadata).Tron (
tron_sign): sign Tron transactions from details containingraw_data_hexor from unsigned hex.XRP (
xrp_sign): sign XRP transactions from structured details or XRPL-serialized unsigned hex.Kaspa (
kaspa_sign): sign prepared Kaspa mainnet transactions using Schnorr signatures.Solana/SVM (
svm_sign): partial-sign x402 Solana payment transactions with only the buyer/source-authority signature.Tezos (
tezos_sign): sign forged Tezos operations for tz1/tz2/tz3 keys with destination/amount/fee validation.Outputs: most tools return signed transaction hex ready for broadcast; x402 paths return a signature or base64 transaction.
Allows local signing of Bitcoin transactions (UTXO-based) using provided private keys.
Allows local signing of Bitcoin Cash transactions (UTXO-based) using provided private keys.
Allows local signing of Dash transactions (UTXO-based) using provided private keys.
Allows local signing of Dogecoin transactions (UTXO-based) using provided private keys.
Allows local signing of Ethereum transactions (EVM) using provided private keys.
Allows local signing of Litecoin transactions (UTXO-based) using provided private keys.
Allows local signing of Optimism transactions (EVM) using provided private keys.
Allows local signing of Polygon transactions (EVM) using provided private keys.
Allows local signing of XRP transactions using provided private keys.
Allows local signing of Zcash transactions (UTXO-based) using provided private keys.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@cryptoapis-io/mcp-signerSign an EVM transaction sending 0.01 ETH to 0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@cryptoapis-io/mcp-signer
MCP server for local transaction signing across EVM, UTXO, Tron, XRP, Kaspa, Solana and Tezos. 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.
Related MCP server: local-kms-mcp-server
Installation
npm install @cryptoapis-io/mcp-signerOr install all Crypto APIs MCP servers: npm install @cryptoapis-io/mcp
Usage
npx @cryptoapis-io/mcp-signerClaude 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-signerAvailable Tools
evm_sign
Sign an EVM transaction (Ethereum, Ethereum Classic, BSC, Polygon, Avalanche (C-Chain), Arbitrum, Base, Optimism, Tron).
Action | Description |
| Sign from structured transaction fields (to, value, gasLimit, etc.) |
| Sign a pre-built unsigned transaction hex |
| Sign an EIP-712 typed-data message (the x402 gasless path — e.g. the EIP-3009 |
utxo_sign
Sign a UTXO transaction (Bitcoin, Bitcoin Cash, Litecoin, Dogecoin, Dash, Zcash).
Action | Description |
| Sign from a prepared transaction object (inputs, outputs). For zcash, produces a v5 (ZIP 225/244) transaction and requires exactly one of |
| Sign a raw unsigned transaction hex with input descriptors. Does not support zcash |
tron_sign
Sign a Tron transaction using secp256k1 (no TronWeb dependency).
Action | Description |
| Sign from a transaction object with |
| Sign a pre-built unsigned transaction hex |
xrp_sign
Sign an XRP transaction.
Action | Description |
| Sign from structured XRP transaction fields |
| Sign a pre-built unsigned transaction hex |
kaspa_sign
Sign a Kaspa transaction using schnorr (BIP340) via kaspa-wasm. Mainnet only.
Action | Description |
| 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 |
| Deserialize the base64 unsigned TransferChecked tx from the x402 buyer |
tezos_sign
Sign a Tezos operation for tz1 (ed25519), tz2 (secp256k1) or tz3 (P-256) keys (edsk… / spsk… / p2sk…).
Action | Description |
| Sign the |
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 |
| EVM transaction signing |
| UTXO transaction signing |
| Tron transaction signing (secp256k1) |
| XRP transaction signing |
License
MIT
Available Tools
7 toolsevm_signA
Sign an EVM transaction or EIP-712 typed-data message. Three actions: (1) sign-unsigned-hex: sign pre-built unsigned tx hex; (2) sign-from-details: build and sign from fields (blockchain, network, toAddress, value, gas, fee, etc.); (3) sign-typed-data: sign an EIP-712 typed-data message — the x402 GASLESS path, e.g. the EIP-3009 TransferWithAuthorization returned by the x402 buyer /authorize (scheme eip712). For (3) pass domain/types/primaryType/message verbatim; it returns a 65-byte signature (no tx built). Network names (e.g. ethereum+sepolia, polygon+mainnet) are mapped to chainId internally. Private key is always passed as parameter (never from env). SECURITY: Private keys may be logged by MCP clients or stored in conversation history — use only in trusted local environments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses private key handling, security risks (MCP logging/conversation history), network-to-chainId mapping, and the return signature format for typed-data. It does not fully specify the returned value for transaction-signing modes, but the security and mode behaviors are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical but every sentence adds useful operational or security context. It front-loads the purpose and enumerates the three actions clearly. The security warning is essential given the sensitive nature of the tool, so length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, security-sensitive EVM signing tool with multiple modes and no output schema, the description covers most key aspects: actions, relevant parameters, network mapping, security caveats, and the typed-data signature return. It omits explicit return value details for broadcast/transaction-signing modes, but overall it is sufficiently complete for an agent to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty, so the description must compensate—and it does. It names key parameters (blockchain, network, toAddress, value, gas, fee, domain/types/primaryType/message) and explains network mapping and the private-key parameter convention. It does not provide a full parameter spec, but it gives enough semantic guidance for invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb+resource: "Sign an EVM transaction or EIP-712 typed-data message." It clearly differentiates from sibling tools (utxo_sign, tron_sign, etc.) by scoping to EVM chains, and further distinguishes three internal operation modes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context for each of the three modes, including the x402 GASLESS path and how to pass EIP-712 fields verbatim. It does not explicitly compare against sibling tools, but the EVM scope and mode-specific instructions offer strong practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kaspa_signA
Sign a Kaspa (native KAS) transaction locally. Kaspa is a UTXO/blockDAG chain (schnorr signatures, mainnet only). Action sign-from-details: sign from a prepared transaction object (data.item from the Kaspa prepare-transaction API) — each input carries its prevout script + sompi. Returns the signed tx as JSON (the form the Kaspa broadcast service expects). Private keys (one per input) are passed as parameters (never from env). SECURITY: Private keys may be logged by MCP clients or stored in conversation history — use only in trusted local environments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral burden. It discloses local signing, mainnet-only constraint, expected input structure, output format, and a critical security warning about private key exposure. This is thorough and directly actionable for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, covering purpose, input, output, and security in four sentences. Every sentence adds value, and the security note is clearly separated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the workflow and output, but without an output schema or explicit parameter names, an agent still lacks full invocation details. It references the prepare-transaction API but does not specify how to map private keys to inputs or inject them as parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty, so baseline is 4. The description adds meaningful semantics by stating private keys are passed as parameters, one per input, and never from env. However, it does not name the exact parameters, leaving a gap in how to construct the call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool signs a Kaspa transaction locally, specifying the chain (UTXO/blockDAG, schnorr, mainnet-only) and the exact action (sign-from-details). It is distinct from sibling signing tools by naming Kaspa and its specific workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool: with a prepared transaction object from the Kaspa prepare-transaction API and by passing private keys as parameters. It does not explicitly exclude other signing tools, but the context is clear enough for an agent to select it for Kaspa transactions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
svm_signA
Partial-sign a Solana (SVM) x402 payment transaction locally (@solana/web3.js). One action: partial-sign — deserialize the base64 UNSIGNED TransferChecked tx from the x402 buyer /authorize (scheme svm-transaction), add ONLY the source-authority (buyer) signature, and re-serialize to base64. The feePayer slot stays UNSIGNED — the facilitator signs it at settle. Returns { transaction } (base64). Secret key is base58, passed as parameter (never from env). SECURITY: keys may be logged by MCP clients or stored in conversation history — use only in trusted local environments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does so well: it states the tool is local, adds only the source-authority signature, leaves feePayer unsigned for the facilitator, returns base64, and includes a security warning about key exposure. No contradictions with annotations exist since none are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but each sentence provides necessary information: what it does, how it works, return value, and security context. It is slightly long, but the content earns its place and it is front-loaded with the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple signer with no output schema and no params, the description covers the workflow, the exact behavior (partial-sign), the return shape, and the security caveat. It lacks error-condition details, but those are not essential for a single-action tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty, so the description is the only source of parameter info. It adds the secret key format (base58) and the policy that it is passed as a parameter (never from env), which is valuable. However, the transaction input itself is only implied, not explicitly named as a parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Partial-sign a Solana (SVM) x402 payment transaction locally'. It uses a specific verb (partial-sign) and resource (Solana SVM x402 transaction), and it distinguishes itself from sibling chain-specific sign tools by focusing on the SVM/x402 context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says exactly when to use it: when you have a base64 UNSIGNED TransferChecked tx from the x402 buyer /authorize, and explains the single action flow. It does not explicitly call out alternatives (e.g., 'use evm_sign for EVM'), but the sibling naming and chain-specific focus imply them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tezos_signA
Sign a Tezos operation locally for tz1 (ed25519), tz2 (secp256k1) or tz3 (P-256) keys. Action sign-forged-operation: pass the forgedOperation hex from prepare_transactions_tezos and the secret key (edsk…/spsk…/p2sk…). Before signing, the operation is decoded and checked: only reveal/transaction ops from the key's own address are signed, and expected (destination, amount in mutez, maxFee) must match — always pass what the user asked for. Returns signedOperation (hex to broadcast with broadcast_signed_transaction), operationHash (o…), signature and the decoded contents. SECURITY: Private keys may be logged by MCP clients or stored in conversation history — use only in trusted local environments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses local signing, pre-signing decoding and validation, operation-type restrictions, expected-field matching, return fields, and a prominent security warning about private-key logging. This is rich, actionable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and action, then validation, return values, and security in a logical order. Most sentences earn their place, but some clauses are densely packed (e.g., 'Action sign-forged-operation') and the security warning, while valuable, adds length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and an empty input schema, the description must carry the full load. It covers purpose, workflow, validation, returns, and security well, but the absence of a structured parameter schema means required/optional status and exact argument shapes remain only prose-inferred, leaving a structural gap for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty with zero parameters, so the description is the sole source of parameter information. It names forgedOperation (hex from prepare_transactions_tezos), secret key formats (edsk…/spsk…/p2sk…), and the expected object fields (destination, amount in mutez, maxFee), adding substantial meaning beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Sign) and resource (Tezos operation), names supported key types (tz1/tz2/tz3), and specifies the action (sign-forged-operation). The Tezos focus clearly differentiates it from sibling sign tools like evm_sign and kaspa_sign.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear workflow context: obtain forgedOperation from prepare_transactions_tezos, then broadcast the result with broadcast_signed_transaction. It also states validation constraints (only reveal/transaction ops from the key's own address) and the need to pass the user's intended expected values, but does not explicitly name an alternative signing tool to use for other chains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tron_signA
Sign a Tron transaction (no TronWeb): Node crypto (sha256) + elliptic (secp256k1) + minimal protobuf encode/decode. Two actions: (1) sign-from-details: sign from transaction object (must include raw_data_hex); (2) sign-unsigned-hex: sign from raw unsigned tx hex. Returns signedTransactionHex. Private key is passed as parameter (never from env). SECURITY: Private keys may be logged by MCP clients or stored in conversation history — use only in trusted local environments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does so excellently. It discloses internal cryptographic components, two working modes, the return value, and a critical security warning about private key exposure in MCP clients and conversation history. This far exceeds minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, introducing the tool's purpose and then enumerating actions and security. Every sentence contributes meaningful information, including the security note, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the absence of output schema and annotations, the description covers purpose, internal process, input requirements, output, and security. However, the lack of explicit parameter names and the empty input schema mean an agent may not be able to construct a correct invocation, so completeness is not perfect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty (0 params), so the description is the sole source of parameter information. It mentions required data (raw_data_hex, raw unsigned tx hex, private key) but does not provide explicit parameter names or types, leaving invocation ambiguous. It adds value over the schema but not complete parameter clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Sign a Tron transaction' with specific implementation details (Node crypto, sha256, secp256k1) and lists two distinct action modes. This distinguishes it from sibling sign tools for other chains and gives a precise verb+resource scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context (Tron signing) and outlines two actions, but does not explicitly state when to use this tool versus alternatives or how to choose between sign-from-details and sign-unsigned-hex. There are no exclusions or alternative tool references, but the chain-specific name is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
utxo_signA
Sign a UTXO transaction (bitcoin, bitcoin-cash, litecoin, dogecoin, dash, zcash). Two actions: (1) sign-from-details: sign from prepared transaction object (e.g. HD wallet prepare-transaction) — for zcash this produces a v5 (ZIP 225/244) transaction and requires exactly one of targetHeight (chain tip + 1) or consensusBranchId; (2) sign-unsigned-hex: sign from raw unsigned tx hex (provide inputs metadata: script, satoshis per input) — does not support zcash. Private key is passed as parameter (never from env). SECURITY: Private keys may be logged by MCP clients or stored in conversation history — use only in trusted local environments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses that the private key must come from a parameter and never from env, and gives a concrete security warning that keys may be logged by MCP clients or persisted in conversation history. It also discloses the zcash v5 (ZIP 225/244) output format and the exactly-one-of constraint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and chain scope, then numbered modes, then a security block. Dense and mostly efficient, though the single long paragraph packs mode-specific constraints inline where bullets would read faster.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A complex multi-mode, multi-chain signing tool with an empty schema and no output schema gets the mode split, chain scope, zcash constraint, and key-handling risk covered. Return values are left implicit, which is acceptable without an output schema but leaves the agent guessing what a successful sign returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema declares zero properties, so the description is the only source of parameter meaning, and it supplies targetHeight (chain tip + 1), consensusBranchId, per-input script and satoshis, and the private key. It still omits full naming/typing for the two action modes' argument sets, so it does not fully reconstruct the missing schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (sign a UTXO transaction) and names the exact set of chains covered, which is what separates it from sibling signers like evm_sign, kaspa_sign and svm_sign. An agent can route on chain family alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly defines two modes and the conditions selecting each: sign-from-details for prepared transaction objects (with a zcash caveat and the targetHeight/consensusBranchId requirement) and sign-unsigned-hex for raw hex, which explicitly does not support zcash. It stops short of stating when to prefer one mode generally or of any exclusions beyond zcash.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xrp_signA
Sign an XRP (Ripple) transaction. Two actions: (1) sign-from-details: sign from transaction object (JSON); (2) sign-unsigned-hex: sign from raw unsigned tx hex (XRPL serialized). Returns signedTransactionHex and signedTransactionHash. Secret is passed as parameter (never from env). SECURITY: Private keys may be logged by MCP clients or stored in conversation history — use only in trusted local environments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full transparency burden. It discusses return values (signedTransactionHex, signedTransactionHash), secret handling (passed as parameter, never env), and a security warning about private key logging. This goes beyond minimal disclosure, though it does not cover error scenarios or off-chain behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and front-loaded with the primary purpose, then efficiently lays out actions, return values, and security in a few sentences. No redundant content; the SECURITY note is essential and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema or annotations, the description covers purpose, actions, returns, and security, which is solid for a signing tool. However, it lacks parameter structure details and example usage, which is significant because the schema is empty and the tool has two distinct invocation modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty with 0 parameters, so the description must compensate. It mentions secret, transaction object, and raw hex, but does not provide actual parameter names, types, or how the action is selected, leaving ambiguity on how to invoke the tool. The description adds meaning but is not fully precise.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Sign an XRP (Ripple) transaction,' which is a specific verb and resource. It distinguishes from siblings by naming XRP, and further details two action modes (transaction object or raw hex), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description outlines two actions with distinct inputs (transaction object vs. raw hex), giving clear context for when to use each. It does not explicitly mention alternatives, but the XRP-specific language implies this is for XRP only, and sibling tools are for other chains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.5.0- Added
tezos_sign
6 tool updates
v0.4.0- First observed
evm_sign - First observed
kaspa_sign - First observed
svm_sign - First observed
tron_sign - First observed
utxo_sign - First observed
xrp_sign
TDQS
Scored across 7 tools
Each tool maps to a distinct chain family (UTXO, EVM, Kaspa, SVM, Tron, Tezos, XRP), so an agent can pick purely from the blockchain name. The only mild overlap is utxo_sign vs kaspa_sign (both UTXO-style), but Kaspa's schnorr/blockDAG specifics and explicit exclusion from utxo_sign make the boundary clear. Multi-action tools are documented with enumerated actions, keeping intra-tool selection unambiguous.
All seven tools follow an identical <chain>_sign pattern (utxo_sign, evm_sign, kaspa_sign, svm_sign, tron_sign, tezos_sign, xrp_sign). Predictable, scannable, and no mixed conventions or stray verbs.
Seven tools is well within the sweet spot and each one earns its place by covering a distinct signing domain. The multi-action design (sign-from-details, sign-unsigned-hex, typed-data, partial-sign) avoids fragmenting into dozens of per-action tools.
The signing lifecycle is well covered across major chains, including niche needs like x402 gasless EIP-712 and Solana partial-sign. Gaps exist: EVM lacks a plain personal_sign/message-signing action, and there is no key/address derivation or verify tool, though these are workable around. Broadcasting is delegated to other services (referenced in tezos_sign), so the surface is coherent for a signer-only server.
Maintenance
Related MCP Connectors
Self-hosted MCP server: 26 deterministic dev, security, and EVM tools.
MCP server for Klever blockchain smart contract development.
MCP server with quote and live cryptocurrency price tools, local and cloud-deployed transports.
Hosted MCP server for live Bittensor chain reads and self-custodial on-chain writes.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceNon-custodial MCP server that routes blockchain transactions to your browser wallet (MetaMask, Rabby, etc.) for signing — private keys never leave your browser.2MIT
- AlicenseAqualityBmaintenanceLocal-first MCP server for per-agent key management, generating and using signing keys without external KMS.836 npm1MIT
- AlicenseAqualityCmaintenanceA local MCP server for handling X402 payment-protected HTTP endpoints, offering tools for order placement, signing, and payment submission with multiple signing modes and blockchain networks.772 npm1MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that lets any AI agent operate a wallet directly on-chain: create wallets, send, swap, bridge, and deploy contracts across EVM and Bitcoin networks.1MIT