Skip to main content
Glama

wallet_verify_message

Verify the authenticity of a signed message on the Ethereum blockchain by validating the signature against the original message and the claimed address.

Instructions

Verify a signed message

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
addressYesThe address that supposedly signed the message
messageYesThe original message
signatureYesThe signature to verify

Implementation Reference

  • The main handler function that implements the wallet_verify_message tool. It uses ethers.utils.verifyMessage to recover the signer address from the message and signature, then checks if it matches the provided address.
    export const verifyMessageHandler = async (input: any): Promise<ToolResultSchema> => {
      try {
        if (!input.message || !input.signature || !input.address) {
          return createErrorResponse("Message, signature, and address are required");
        }
    
        const recoveredAddress = ethers.utils.verifyMessage(input.message, input.signature);
        const isValid = recoveredAddress.toLowerCase() === input.address.toLowerCase();
    
        return createSuccessResponse(
        isValid ? `Signature verified successfully
          Message: "${input.message}"
          Signature: ${input.signature}
          Address: ${input.address}
        ` : `Signature verification failed
          Message: "${input.message}"
          Signature: ${input.signature}
          Address: ${input.address}
        `);
      } catch (error) {
        return createErrorResponse(`Failed to verify message: ${(error as Error).message}`);
      }
    };
  • Input schema for the wallet_verify_message tool, defining the required parameters: message, signature, and address.
    {
      name: "wallet_verify_message",
      description: "Verify a signed message",
      inputSchema: {
        type: "object",
        properties: {
          message: { type: "string", description: "The original message" },
          signature: { type: "string", description: "The signature to verify" },
          address: { type: "string", description: "The address that supposedly signed the message" }
        },
        required: ["message", "signature", "address"]
      }
    },
  • src/tools.ts:586-586 (registration)
    Maps the tool name 'wallet_verify_message' to its handler function verifyMessageHandler in the central handlers dictionary.
    "wallet_verify_message": verifyMessageHandler,
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'verify' implies a read-only, non-destructive operation, the description doesn't specify what happens on success/failure (e.g., returns a boolean), error conditions, or any side effects. For a cryptographic verification tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for a straightforward verification tool, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's cryptographic complexity and lack of annotations or output schema, the description is incomplete. It doesn't explain the verification process, return values (e.g., boolean result), or error handling. For a tool that performs security-critical operations, this leaves too much undefined for reliable agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with clear documentation for all three parameters (address, message, signature). The description adds no additional parameter semantics beyond what's in the schema, such as format details or examples. This meets the baseline of 3 when schema coverage is high, but doesn't provide extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Verify a signed message' clearly states the tool's purpose with a specific verb ('verify') and object ('signed message'), distinguishing it from sibling tools like wallet_sign_message (which creates signatures) and wallet_verify_typed_data (which handles typed data). However, it doesn't explicitly mention what resource or entity is being verified (e.g., a cryptographic signature), leaving some ambiguity compared to a perfect 5-score description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a signature from wallet_sign_message first), exclusions, or comparisons to sibling tools like wallet_verify_typed_data. This lack of context makes it harder for an agent to select the right tool in practice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dcSpark/mcp-cryptowallet-evm'

If you have feedback or need assistance with the MCP directory API, please join our Discord server