mcpField
E
Ethereum & EVM Message Signing

Ethereum & EVM Message Signing

Local
github.com/nirholasFinance28Updated 3w ago

About Ethereum & EVM Message Signing

Signing MCP Server is an MCP server for Ethereum message signing under EIP-191 personal_sign and EIP-712 typed data. It is aimed at developers who need to sign, verify or recover signer addresses, and it includes templates for common EIP-712 structures.

Key features

  1. 01Signs messages with EIP-191 personal_sign
  2. 02Signs and hashes EIP-712 typed data
  3. 03Verifies signatures and recovers signer addresses
  4. 04Splits, composes and normalizes signature components
  5. 05Includes EIP-712 templates such as Permit and Order

Use cases

  1. 01Generate signatures for ERC-20 Permit approvals
  2. 02Debug and verify wallet signature results
  3. 03Study the EIP-191 and EIP-712 signature formats

MCP support

This project is an MCP server that exposes signing, verification and recovery tools, along with specification resources and prompt workflows, to MCP clients.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"nirholas-signing": {
"command": "uvx",
"args": [
"signing-mcp-server"
]
}
}
}
Run commanduvx signing-mcp-server

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypisigning-mcp-server1.0.0

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

Signing MCP Server

PyPI MCP Registry

An MCP (Model Context Protocol) server providing comprehensive Ethereum message signing capabilities including EIP-191 personal_sign and EIP-712 typed structured data.

Features

Tools (12 total)
EIP-191 Message Signing
  • sign_message - Sign a text message using EIP-191 personal_sign format
  • sign_message_hex - Sign hex-encoded bytes using EIP-191 format
  • verify_message - Verify an EIP-191 signed message
  • recover_signer - Recover signer address from a signed message
EIP-712 Typed Data
  • sign_typed_data - Sign EIP-712 typed structured data
  • verify_typed_data - Verify an EIP-712 typed data signature
  • recover_typed_data_signer - Recover signer from typed data signature
  • hash_typed_data - Compute EIP-712 hash without signing
Signature Utilities
  • decompose_signature - Break down signature into v, r, s components
  • compose_signature - Compose signature from v, r, s components
  • normalize_signature - Convert between signature formats (27/28 vs 0/1 for v)
Advanced Operations
  • sign_hash - Sign a raw 32-byte hash (requires acknowledgement)
Resources (4 total)
  • eip191-specification - Complete EIP-191 signed data standard
  • eip712-specification - Complete EIP-712 typed data standard
  • signature-formats - Documentation on Ethereum signature formats
  • common-typed-data - Templates for common EIP-712 structures
Prompts (4 total)
  • sign_message_workflow - Guide through message signing process
  • typed_data_workflow - Guide through EIP-712 typed data signing
  • signature_verification - Help verify and debug signatures
  • permit_signing - Specialized workflow for ERC-20 permits

Installation

pip install signing-mcp-server

Or install from source:

cd signing-mcp-server
pip install -e .

Usage

Run the server
signing-mcp-server
Configure in Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "signing": {
      "command": "signing-mcp-server"
    }
  }
}

Tool Examples

Sign a Message (EIP-191)
# Input
{
    "message": "Hello, Ethereum!",
    "private_key": "0x..."
}

# Output
{
    "message": "Hello, Ethereum!",
    "signer": "0xABC123...",
    "signature": "0x...",
    "v": 28,
    "r": "0x...",
    "s": "0x...",
    "message_hash": "0x..."
}
Sign Typed Data (EIP-712)
# Input
{
    "typed_data": {
        "types": {...},
        "primaryType": "Permit",
        "domain": {...},
        "message": {...}
    },
    "private_key": "0x..."
}

# Output
{
    "signer": "0xABC123...",
    "signature": "0x...",
    "domain_separator": "0x...",
    "struct_hash": "0x...",
    "signing_hash": "0x..."
}
Verify a Signature
# Input
{
    "message": "Hello, Ethereum!",
    "signature": "0x...",
    "expected_address": "0xABC123..."
}

# Output
{
    "is_valid": true,
    "recovered_address": "0xABC123...",
    "expected_address": "0xABC123...",
    "match": true
}

Security Notes

  1. Private keys are NEVER logged or persisted
  2. sign_hash requires explicit risk acknowledgement - signing raw hashes can be dangerous
  3. All operations use eth-account's secure implementations
  4. For educational and development purposes only

EIP-712 Templates

The server includes templates for common typed data structures:

  • Permit - ERC-20 token permits (EIP-2612)
  • Permit2 - Uniswap's universal permit system
  • Order - DEX limit orders
  • Delegation - Voting power delegation
  • Mail - EIP-712 specification example

License

MIT

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.